All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
This driver uses semantic versioning:
- A change in the bugfix version (e.g. X.Y.0 -> X.Y.1) indicates internal changes and should always be safe to upgrade.
- A change in the minor version (e.g. X.1.Z -> X.2.0) indicates additions and backwards-compatible changes that should not affect your code.
- A change in the major version (e.g. 1.Y.Z -> 2.0.0) indicates breaking changes that require changes in your code to upgrade.
10.0.0-rc.0 - 2024-12-10
This is a major release and breaks backwards compatibility.
See the migration guide for detailed instructions for upgrading your code to arangojs v10.
-
Removed unused
CreateUserOptions
typeThe actual type used by the
db.createUser
method is stillUserOptions
. -
Removed unused
IndexDetails
typeThis type was intended to be returned by
collection.indexes
when thewithStats
option is set totrue
but thefigures
property is already included in the current return type.
-
Closing a connection now closes all open requests
Previously in certain situations only the most recent request would be closed per server. Note that this still merely aborts the requests but does not guarantee the underlying connections are closed as these are handled by Node.js or the browser natively. need to be installed otherwise.
-
Moved fetch-specific
config
options from intoconfig.fetchOptions
The following options were moved:
credentials
,headers
andkeepalive
.
-
Errors encountered before a request completes are now wrapped in a
NetworkError
or a subclass thereofThis should help making it easier to diagnose network issues and distinguish the relevant error conditions.
The originating error can still be accessed using the
cause
property of theNetworkError
error. -
HttpError
now extends theNetworkError
classThis allows treating all non-
ArangoError
errors as one category of errors, even when there is no server response available. -
db.waitForPropagation
now throws aPropagationTimeoutError
error when invoked with atimeout
option and the timeout duration is exceededThe method would previously throw the most recent error encountered while waiting for replication. The originating error can still be accessed using the
cause
property of thePropagationTimeoutError
error. -
db.waitForPropagation
now respects thetimeout
option more strictlyPreviously the method would only time out if the timeout duration was exceeded after the most recent request failed. Now the timeout is recalculated and passed on to each request, preventing it from exceeding the specified duration.
If the propagation timed out due to an underlying request exceeding the timeout duration, the
cause
property of thePropagationTimeoutError
error will be aResponseTimeoutError
error. -
config.beforeRequest
andconfig.afterResponse
callbacks can now return promisesIf the callback returns a promise, it will be awaited before the request and response cycle proceeds. If either callback throws an error or returns a promise that is rejected, that error will be thrown instead.
-
config.afterResponse
callback signature changedThe callback signature previously used the internal
ArangojsResponse
type. The new signature uses theResponse
type of the Fetch API with an additionalrequest
property to more accurately represent the actual value it receives as theparsedBody
property will never be present. -
response
property onArangoError
is now optionalThis property should always be present but this allows using the error in situations where a response might not be available.
-
Changed
GraphVertexCollection
andGraphEdgeCollection
generic types to take separateEntryResultType
andEntryInputType
type parameters -
Changed
db.collection
,db.createCollection
anddb.createEdgeCollection
methods to take separateEntryResultType
andEntryInputType
type parametersThese type parameters are used to narrow the the returned collection type.
-
Changed
db.removeUser
method return type toPromise<void>
The previous return type served no purpose.
-
Changed
QueueTimeMetrics
type to an interface -
Changed
CursorExtras
andCursorStats
interfaces to types
-
Renamed
path
option topathname
inRequestOptions
typeThis affects the
db.waitForPropagation
androute.request
methods. -
Removed
basePath
option fromRequestOptions
typeThis affects the
db.waitForPropagation
androute.request
methods. -
Renamed
route.path
property toroute.pathname
-
Renamed various methods for consistency:
Methods that return an array now follow the
listNouns
pattern, methods that return a "list of nouns" wrapped in an object have been renamed to follow thegetNouns
pattern to avoid confusion:db.listServiceScripts
->db.getServiceScripts
db.listHotBackups
->db.getHotBackups
db.listFunctions
->db.listUserFunctions
db.getLogMessages
->db.listLogMessages
-
Renamed AQL user function management methods:
db.createFunction
->db.createUserFunction
db.dropFunction
->db.dropUserFunction
-
Renamed most modules to plural form for consistency
The following modules were renamed:
arangojs/analyzer
->arangojs/analyzers
arangojs/collection
->arangojs/collections
arangojs/cursor
->arangojs/cursors
arangojs/database
->arangojs/databases
arangojs/error
->arangojs/errors
arangojs/graph
->arangojs/graphs
arangojs/job
->arangojs/jobs
arangojs/route
->arangojs/routes
arangojs/transaction
->arangojs/transactions
arangojs/view
->arangojs/views
-
Moved internal utility functions to new
arangojs/lib/util
moduleThese methods are all still marked as internal and should not be used directly.
-
Moved document related types from
arangojs/collection
module toarangojs/documents
moduleThe following types were moved:
DocumentOperationFailure
,DocumentOperationMetadata
,DocumentExistsOptions
,CollectionReadOptions
,CollectionBatchReadOptions
,CollectionInsertOptions
,CollectionReplaceOptions
,CollectionUpdateOptions
,CollectionRemoveOptions
,CollectionImportOptions
,CollectionEdgesOptions
,CollectionImportResult
andCollectionEdgesResult
-
Moved index related types from
arangojs/collection
module toarangojs/indexes
moduleThe following types were moved:
IndexListOptions
. -
Moved transaction related types from
arangojs/database
module toarangojs/transactions
moduleThe following types were moved:
TransactionCollections
,TransactionOptions
andTransactionDetails
. -
Moved cluster related types from
arangojs/database
module to newarangojs/clusters
moduleThe following types were moved:
ClusterImbalanceInfo
,ClusterRebalanceState
,ClusterRebalanceOptions
,ClusterRebalanceMove
andClusterRebalanceResult
. -
Moved hot backup related types from
arangojs/database
module to newarangojs/hot-backups
moduleThe following types were moved:
HotBackupOptions
,HotBackupResult
andHotBackupList
. -
Moved query related types from
arangojs/database
module to newarangojs/queries
moduleThe following types were moved:
QueryOptions
,ExplainOptions
,ExplainPlan
,ExplainStats
,SingleExplainResult
,MultiExplainResult
,AstNode
,ParseResult
,QueryOptimizerRule
,QueryTracking
,QueryTrackingOptions
,QueryInfo
andAqlUserFunction
. -
Moved service related types from
arangojs/database
module to newarangojs/services
moduleThe following types were moved:
InstallServiceOptions
,ReplaceServiceOptions
,UpgradeServiceOptions
,UninstallServiceOptions
,ServiceSummary
,ServiceInfo
,ServiceConfiguration
,SingleServiceDependency
,MultiServiceDependency
,ServiceTestStats
,ServiceTestStreamTest
,ServiceTestStreamReport
,ServiceTestSuiteTest
,ServiceTestSuite
,ServiceTestSuiteReport
,ServiceTestXunitTest
,ServiceTestXunitReport
,ServiceTestTapReport
,ServiceTestDefaultTest
,ServiceTestDefaultReport
andSwaggerJson
. -
Moved user related types from
arangojs/database
module to newarangojs/users
moduleThe following types were moved:
AccessLevel
,ArangoUser
,UserOptions
,UserAccessLevelOptions
andCreateDatabaseUser
. -
Moved server administration related types from
arangojs/database
module to newarangojs/administration
moduleThe following types were moved:
QueueTimeMetrics
andVersionInfo
. -
Moved configuration related types to new
arangojs/config
moduleThe following types were moved:
Config
,LoadBalancingStrategy
,BasicAuthCredentials
andBearerAuthCredentials
. -
Moved
ArangoErrorResponse
type toarangojs/connection
moduleThe type is now also no longer marked as internal.
-
Moved configuration related types to new
arangojs/configuration
moduleThe following types were moved:
ConfigOptions
,LoadBalancingStrategy
,BasicAuthCredentials
andBearerAuthCredentials
.
-
Renamed
Index
types toIndexDescription
for consistencyThe specific index types were also renamed accordingly:
Index
->IndexDescription
GeoIndex
->GeoIndexDescription
PersistentIndex
->PersistentIndexDescription
PrimaryIndex
->PrimaryIndexDescription
TtlIndex
->TtlIndexDescription
MdiIndex
->MdiIndexDescription
InvertedIndex
->InvertedIndexDescription
InternalArangosearchIndex
->ArangosearchIndexDescription
InternalIndex
->InternalIndexDescription
HiddenIndex
->HiddenIndexDescription
Note that the "Internal" prefix was dropped from
ArangosearchIndexDescription
to more accurately reflect the index type name. The index type still refers to an internal index, however. -
Renamed various types for consistency:
Types representing an instance of a specific entity type in ArangoDB like a collection, graph or query now follow the
NounDescription
naming pattern:AqlUserFunction
->UserFunctionDescription
CollectionMetadata
->CollectionDescription
DatabaseInfo
->DatabaseDescription
GraphInfo
->GraphDescription
ServiceInfo
->ServiceDescription
QueryInfo
->QueryDescription
TransactionDetails
->TransactionDescription
Note that the
TransactionDescription
type used bydb.listTransactions
is slightly different from theTransactionInfo
type used by methods ofTransaction
objects due to implementation details of ArangoDB.Types representing general information rather than an instance of something now generally follow the
NounInfo
naming pattern, whereas types representing the result of an operation generally follow theNounResult
orVerbNounResult
naming pattern:QueryTracking
->QueryTrackingInfo
CollectionImportResult
->ImportDocumentsResult
CollectionEdgesResult
->DocumentEdgesResult
Types for options passed to methods now generally follow the
NounOptions
,VerbNounOptions
orVerbNounAttributeOptions
naming patterns:-
Config
->ConfigOptions
-
TransactionCollections
->TransactionCollectionOptions
-
CreateDatabaseUser
->CreateDatabaseUserOptions
-
CollectionDropOptions
->DropCollectionOptions
-
CollectionTruncateOptions
->TruncateCollectionOptions
-
IndexListOptions
->ListIndexesOptions
-
Collection document operations:
DocumentExistsOptions
->DocumentExistsOptions
CollectionReadOptions
->ReadDocumentOptions
CollectionBatchReadOptions
->BulkReadDocumentsOptions
CollectionInsertOptions
->InsertDocumentOptions
CollectionReplaceOptions
->ReplaceDocumentOptions
CollectionUpdateOptions
->UpdateDocumentOptions
CollectionRemoveOptions
->RemoveDocumentOptions
CollectionImportOptions
->ImportDocumentsOptions
CollectionEdgesOptions
->DocumentEdgesOptions
-
Graph collection document operation:
GraphCollectionReadOptions
->ReadGraphDocumentOptions
GraphCollectionInsertOptions
->CreateGraphDocumentOptions
GraphCollectionReplaceOptions
->ReplaceGraphDocumentOptions
GraphCollectionRemoveOptions
->RemoveGraphDocumentOptions
ViewPatchPropertiesOptions
->UpdateViewPropertiesOptions
-
View operations:
ArangoSearchViewPatchPropertiesOptions
->UpdateArangoSearchViewPropertiesOptions
SearchAliasViewPatchPropertiesOptions
->UpdateSearchAliasViewPropertiesOptions
SearchAliasViewPatchIndexOptions
->UpdateSearchAliasViewIndexOptions
ArangoSearchViewStoredValueOptions
->CreateArangoSearchViewStoredValueOptions
-
Renamed
ArrayCursor
andBatchedArrayCursor
classes toCursor
andBatchCursor
respectivelyThe previous name was misleading because it conflicted with how the ArangoDB distinguishes between array cursors and streaming cursors in the interactive shell. This distinction does not apply to the driver.
-
Renamed various types to reduce ambiguity:
ObjectWithId
(inindexes
module) ->ObjectWithIndexId
ObjectWithId
(indocuments
module) ->ObjectWithDocumentId
ObjectWithKey
(indocuments
module) ->ObjectWithDocumentKey
-
Restored support for Unix domain sockets
Using Unix domain sockets requires the
undici
library to be installed. -
Restored support for
config.agentOptions
The
config.agentOptions
option can now be used to create a customundici
agent if theundici
library is installed. -
Added
config.fetchOptions
optionThis option can now be used to specify default options for the
fetch
function used by arangojs likeheaders
,credentials
,keepalive
andredirect
. -
Added
BatchCursor#itemsView
property andBatchCursorItemsView
interfaceThis property provides a low-level interface for consuming the items of the cursor and is used by the regular item-wise
Cursor
class internally. -
Added
ProcessedResponse
typeThis type replaces the previously internal
ArangojsResponse
type and extends the nativeResponse
type with additional properties.
-
Added
config.onError
option (DE-955)This option can be used to specify a callback function that will be invoked whenever a request results in an error. Unlike
afterResponse
, this callback will be invoked even if the request completed but returned an error status. In this case the error will be theHttpError
orArangoError
representing the error response.If the
onError
callback throws an error or returns a promise that is rejected, that error will be thrown instead. -
Added support for
config.fetchOptions.redirect
option (#613)This option can now be used to specify the redirect mode for requests.
When set to
"manual"
, arangojs will throw anHttpError
wrapping the redirect response instead of automatically following redirects.Note that when set to
"error"
, the native fetch API will throw a non-specific error (usually aTypeError
) that arangojs will wrap in aFetchFailedError
instead. -
Added optional
ArangoError#request
propertyThis property is always present if the error has a
response
property. In normal use this should always be the case. -
Added
NetworkError
classThis is the common base class for all errors (including
HttpError
) that occur while making a request. The originating error can be accessed using thecause
property. The request object can be accessed using therequest
property.Note that
ArangoError
and the newPropagationTimeoutError
error type do not extendNetworkError
but may wrap an underlying error, which can be accessed using thecause
property. -
Added
ResponseTimeoutError
classThis error extends
NetworkError
and is thrown when a request deliberately times out using thetimeout
option. -
Added
RequestAbortedError
classThis error extends
NetworkError
and is thrown when a request is aborted by using thedb.close
method. -
Added
FetchFailedError
classThis error extends
NetworkError
and is thrown when a request fails because the underlyingfetch
call fails (usually with aTypeError
).In Node.js the root cause of this error (e.g. a network failure) can often be found in the
cause
property of the originating error, i.e. thecause
property of thecause
property of this error.In browsers the root cause is usually not exposed directly but can often be diagnosed by examining the developer console or network tab.
-
Added
PropagationTimeoutError
classThis error does not extend
NetworkError
but wraps the most recent error encountered while waiting for replication, which can be accessed using thecause
property. This error is only thrown whendb.waitForPropagation
is invoked with atimeout
option and the timeout duration is exceeded.
9.2.0 - 2024-11-27
-
Added
database.availability
method -
Added
database.engine
method (DE-931) -
Added
database.status
method (#811) -
Added
database.supportInfo
method -
Added
keepNull
option toCollectionInsertOptions
type (DE-946)This option was previously missing from the type.
-
Added
allowDirtyRead
option toDocumentExistsOptions
type (DE-945)This option was previously missing from the type.
-
Added
ignoreRevs
option toCollectionBatchReadOptions
type (DE-947)This option was previously missing from the type.
-
Added
options
argument toCollectionTruncateOptions
type (DE-940)There was previously no way to pass options to the
truncate
method. -
Added
database
property toAnalyzer
,ArrayCursor
,BatchedArrayCursor
,Collection
,Graph
,Job
,Route
,Transaction
andView
(DE-935)This property can be used to access the database instance a given object belongs to.
-
Added
Route#headers
andRoute#path
propertiesThese properties can be used to access the headers and path used when creating the route.
-
Added
ArrayCursor#id
andBatchedArrayCursor#id
properties (DE-936)This property can be used to access the ID of the cursor.
9.1.0 - 2024-09-25
-
Removed
progress
property fromIndex
typeThis property is only available when fetching indexes with the
withHidden
option set totrue
.
-
Added
HiddenIndex
type (DE-849)This type is used to represent an index returned by
collection.indexes
when thewithHidden
option is set totrue
and includes theprogress
property in addition to internal indexes.
9.0.0 - 2024-07-31
This is a major release and breaks backwards compatibility.
See the migration guide for detailed instructions for upgrading your code to arangojs v9.
-
Removed Node.js 14 and Node.js 16 support
With Node.js 14 and 16 having reached their end of life, arangojs will no longer support these versions of Node.js going forward.
For more information, see the Node.js release schedule.
-
Removed
Params
andHeaders
typesThese can mostly be replaced with the native
URLSearchParams
andHeaders
types but most public methods still accept the equivalentRecord
types for convenience. -
Removed deprecated
FulltextIndex
and related typesFulltext indexes have been deprecated in ArangoDB 3.10 and should be replaced with ArangoSearch.
-
Removed browser build
The browser build has been removed from the repository and will no longer be published to npm. The npm package can still be used in the browser by using common frontend tooling like webpack or rollup.
-
Removed
Collection
methods for simple queries:list
,all
,any
,byExample
,firstExample
,removeByExample
,replaceByExample
,updateByExample
,lookupByKeys
,removeByKeys
,fulltext
Simple queries were deprecated in ArangoDB 3.4 and can be replicated with AQL.
-
Replaced request logic with native
fetch
API (#788, DE-578, DE-758)The node-specific request logic using the
http
andhttps
modules has been replaced with all-new logic using the web standardfetch
API, which should work in Node.js, browsers and other conformant environments. -
Unicode names are now no longer automatically NFC normalized (DE-65)
This change affects all database, collection, graph, view and analyzer names using unicode characters. Starting with arangojs v7.7.0 these names were automatically NFC normalized. This behavior has now been reverted to match the behavior of other ArangoDB drivers and help detect normalization issues in user code.
-
Changed return type of
aql
and the AQLjoin
helper function toAqlQuery
Previously the internal
GeneratedAqlQuery
type was exposed as the return type of these functions, leading to complexity when handling generic type arguments. -
Removed dependency on Node
path
module or its browserify equivalentThis change should be backwards-compatible but may produce different results when using non-normalized paths and base-paths in custom
routes
. This should help support more environments and reduce the size of the browser bundle. -
Inlined
x3-linkedlist
dependencyInlining this dependency should help make arangojs more portable.
-
Split the Collection type parameter into result and input types (#807)
It is now possible to specify a separate type for the data passed when creating or modifying documents in addition to the type of the data returned when fetching documents. This allows excluding computed properties from the input type while still including them in the result type.
-
Added ESM support (DE-236)
The driver now supports being imported as an ES module or CommonJS module and provides exports for both types of environments. This change should be backwards-compatible.
-
Added support for
withHidden
option incollection.indexes
This option was introduced in ArangoDB 3.10.13 and 3.11.7 and allows fetching the progress information of indexes that are in the building phase.
-
Added support for
withStats
option incollection.indexes
This method now takes an object with
withStats
andwithHidden
options instead of a boolean flag. -
Added readonly
Job#id
propertyThis property was not previously exposed.
-
Added
skipFastLockRound
option for streaming transactionsThis option was introduced in 3.12.1 and allows skipping the fast lock round.
-
Added non-specific
EnsureIndexOptions
type andensureIndex
method signature (#778)This allows creating indexes without narrowing the index type.
8.8.1 - 2024-03-20
- Added the
versionAttribute
option to the document operation options types (DE-783)
8.8.0 - 2024-03-12
-
Renamed ZKD index type to MDI (DE-744)
The ZKD index type was previously marked as experimental and has now been finalized and renamed to MDI in ArangoDB 3.12.
-
Added
DocumentOperationMetadata
andDocumentOperationFailure
types (DE-693)The return types of document and edge operations on collections have been modified to correctly represent the return values of bulk operations and single document/edge operations using the
overwriteMode
option.
-
Deprecated active failover support (DE-746)
Active failover is no longer be supported in ArangoDB 3.12 and later. This functionality will be removed from the driver in a future release.
-
Added support for
multi_delimiter
analyzer type (DE-753) -
Added support for
wildcard
analyzer type (DE-750)
8.7.0 - 2024-02-14
- Made
options
argument incollection.edges
,inEdges
andoutEdges
optional (#802)
-
Deprecated
db.getLogMessages
This API was deprecated in ArangoDB 3.8 and should no longer be used. Use
db.getLogEntries
instead.
- Fixed
db.getLogEntries
using the wrong API endpoint
8.6.0 - 2023-10-24
-
Added
db.createJob
method to convert arbitrary requests into async jobs (DE-610)This method can be used to set the
x-arango-async: store
header on any request, which will cause the server to store the request in an async job:const collectionsJob = await db.createJob(() => db.collections()); // once loaded, collectionsJob.result will be an array of Collection instances const numbersJob = await db.createJob(() => db.query(aql`FOR i IN 1..1000 RETURN i`) ); // once loaded, numbersJob.result will be an ArrayCursor of numbers
8.5.0 - 2023-10-09
-
Implemented hot backup API (DE-576)
-
Implemented logging API (DE-144, DE-145, DE-146, DE-147)
-
Implemented async jobs management (DE-339)
-
Added
db.shutdown
to initiate a clean shutdown of the server -
Added
db.time
method to retrieve the server's system time
8.4.1 - 2023-09-15
- Fixed default return type of AQL queries being
undefined
instead ofany
(#797)
8.4.0 - 2023-07-10
-
Fetching additional cursor results now uses
POST
instead ofPUT
(DE-605)The
PUT
route was deprecated and thePOST
route is supported in all actively maintained versions of ArangoDB. -
User management methods now use database-relative URLs (DE-606)
Previously these methods would make requests without a database prefix, implicitly using the
_system
database. -
aql
template strings now take a generic type argumentThis allows explictly setting the item type of the
ArrayCursor
returned bydb.query
when usingaql
template strings. Note that like when setting the type ondb.query
directly, arangojs can make no guarantees that the type matches the actual data returned by the query.const numbers = await db.query(aql<{ index: number; squared: number }>` FOR i IN 1..1000 RETURN { index: i, squared: i * i } `); const first = await numbers.next(); // { index: number; squared: number; } console.log(first.index, first.squared); // 1 1
-
Fixed
listUsers
behavior (#782) -
Fixed
graph.create
not correctly handlingisDisjoint
option
-
Added missing attributes to
QueryInfo
andMultiExplainResult.stats
types (DE-607) -
Added cluster rebalancing methods to
Database
(DE-583) -
Added
db.withTransaction
helper method for streaming transactions (#786)This method allows using streaming transactions without having to manually begin and commit or abort the transaction.
const vertices = db.collection("vertices"); const edges = db.collection("edges"); const info = await db.withTransaction([vertices, edges], async (step) => { const start = await step(() => vertices.document("a")); const end = await step(() => vertices.document("b")); return await step(() => edges.save({ _from: start._id, _to: end._id })); });
8.3.1 - 2023-06-05
- Added note that Simple Queries traversals are removed in ArangoDB 3.12.
8.3.0 - 2023-05-11
- Fixed
updateUser
andreplaceUser
behavior (#783)
-
Added
renewAuthToken
method toDatabase
(#784)This method allows refreshing the authentication token passed to the
useBearerAuth
method or used by thelogin
method. Note that ArangoDB will currently only return a new token if the token is going to expire in the next 150 seconds. -
Added
returnOld
andmergeObjects
toCollectionInsertOptions
typeThese options are only available when using
overwriteMode
. -
Added caching options to
InvertedIndex
andArangoSearchView
typesThese options were added in ArangoDB 3.10.2.
-
Added support for
ArangoSearchView
typestoredValues
shorthand notationInstead of using an object, attributes can also be defined as arrays of strings and arrays of arrays of strings. This was added in ArangoDB 3.10.3.
-
Added
peakMemoryUsage
andexecutionTime
toSingleExplainResult.stats
typeThese attributes were added in ArangoDB 3.10.4.
-
Added
geo_s2
Analyzer typesThis Analyzer was added in ArangoDB 3.10.5.
-
Added
refillIndexCaches
option to document operation options typesThis option was added in ArangoDB 3.11.
-
Added
optimizeTopK
toArangoSearchView
andInvertedIndex
typesThis option was added in ArangoDB 3.11.
-
Added support for
allowRetry
option indb.query
This feature was added in ArangoDB 3.11.
-
Added
x-arango-driver
headerThe arangojs driver now correctly identifies itself to ArangoDB, allowing the ArangoGraph Insights Platform to take advantage of the driver's support for cloud-optimized behaviors.
8.2.1 - 2023-04-05
-
Fixed a bug in search parameter handling in the browser version
Previously the browser version would incorrectly handle search parameters, which could result in invalid request URLs in many cases.
8.2.0 - 2023-03-29
-
Index names are now automatically NFC-normalized (DE-506)
This change affects all index names using unicode characters. The change has no effect when using non-unicode (ASCII) names.
Any names used when creating/ensuring indexes or passed to any methods that expect an
IndexSelector
will automatically be NFC normalized. -
Internal querystring handling logic now uses
URLSearchParams
instead of nodequerystring
moduleThis change should be backwards compatible but may produce different results when relying on undefined behavior in custom (e.g. Foxx) routes.
8.1.0 - 2022-12-19
- Added support for new ArangoDB 3.9.5
cache
field in ArangoSearch types
8.0.0 - 2022-10-25
This is a major release and breaks backwards compatibility.
See the migration guide for detailed instructions for upgrading your code to arangojs v8.
-
Removed Node.js 10 and Node.js 12 support
With Node.js 10 and 12 having reached their end of life, arangojs will no longer support these versions of Node.js going forward.
-
Removed Internet Explorer and older browser support
As of version 8 arangojs uses the Browserlist
defaults
list to generate the pre-built browser bundle, which excludes older browsers and specifically all versions of Internet Explorer.You may still be able to use arangojs in some of the excluded browsers when bundling arangojs yourself but this may require polyfills and additional transformations.
-
Removed
Dict
type fromconnection
moduleThe
Dict<T>
type was identical toRecord<string, T>
and has been replaced with this built-in type across arangojs. -
Removed workaround for ArangoDB pre-3.2.8 Foxx HTTP API responses
When fetching or modifying the configuration or dependencies of a Foxx service using ArangoDB 3.2.7 and earlier, arangojs would perform additional operations to convert the server response to a compatible format. All affected versions of ArangoDB have reached End of Life since December 2018.
-
Removed deprecated
db.useDatabase
methodThe method was previously deprecated and can be replaced with
db.database
, which returns a newDatabase
object instead of modifying the existing one. -
Removed deprecated MMFiles methods and types
The MMFiles storage engine was removed in ArangoDB 3.7.
-
Removed deprecated
minReplicationFactor
option from collection and database related typesThis option was renamed to
writeConcern
in ArangoDB 3.6. -
Removed deprecated
overwrite
option fromCollectionInsertOptions
typeThis option was deprecated in ArangoDB 3.7 and should be replaced with the
overwriteMode
option. -
Removed internal
request.host
attributeThis attribute has been replaced with
request.hostUrl
. -
Removed internal
response.arangojsHostId
attributeThis attribute has been replaced with
response.arangojsHostUrl
. -
Removed
CollectionStatus
andCollectionType
enum re-exportsPreviously these would be re-exported by the arangojs module for backwards compatibility. If you still need to access these enums, you can import them from the
collection
sub-module instead. Note that theViewType
enum has been removed completely.
-
Changed default URL to
http://127.0.0.1:8529
to match ArangoDB defaultPreviously arangojs would use
localhost
which on some systems resolves to the IPv6 address::1
instead, resulting in confusing connection errors. -
Changed TypeScript compilation target to ES2020
Since all evergreen browsers including Firefox ESR and all active Node.js LTS releases fully support ES2020, the compilation target for the browser bundle and Node.js has been moved from ES2016 and ES2018 respectively to ES2020.
-
Updated TypeScript to version 4.8
This may result in type signatures that are incompatible with TypeScript 3 being added in future releases (including patch releases).
-
Changed default behavior of internal
db.request
methodPreviously this method would always return the full response object if no
transform
callback was provided. The method now defaults to atransform
callback that extracts the response body instead. The previous behavior can still be forced by passingfalse
instead of a callback function.This change has no effect on other methods like
route.request
. -
Replaced node core module polyfills with native APIs in browser build
As part of upgrading to webpack 5, arangojs now no longer requires node core modules to be polyfilled to work in the browser. This also drastically reduces the file size of the pre-built browser bundle
arangojs/web
. -
db.query
now supports a generic return type (#764)This allows explictly setting the item type of the
ArrayCursor
returned by the query without using a type assertion on the promise result. Note that arangojs can make no guarantees that the type matches the actual data returned by the query.const numbers = await db.query<{ index: number; squared: number }>(aql` FOR i IN 1..1000 RETURN { index: i, squared: i * i } `); const first = await numbers.next(); // { index: number; squared: number; } console.log(first.index, first.squared); // 1 1
-
Moved
aql.literal
andaql.join
intoaql
modulePreviously these were available as methods on the
aql
function. Now they need to be imported from theaql
module. -
Changed return values of
db.getUserAccessLevel
anddb.getUserDatabases
to match documented return types -
Retry requests resulting in status 503
ArangoError
(#710)Unless retries are explicitly disabled by setting
config.maxRetries
tofalse
, requests will now also be retried if the server responded with a 503ArangoError
, which ArangoDB uses to indicate the server is running in maintenance mode. Previously this would always result in an error. -
Extended
CursorExtras
type in TypeScriptThe types of the attributes
plan
,profile
, andstats
are now defined more explicitly. -
Changed behavior of
collection.removeAll
for non-string arraysPreviously
collection.removeAll
would always convert its argument into an array of document IDs and fail with an error if passed any documents had an ID not matching the collection name. Now the selector argument is passed as-is, bypassing this validation but allowingignoreRevs
to be respected by the server. -
Extracted type
ArangoSearchViewLinkOptions
fromArangoSearchViewLink
Note that
ArangoSearchViewLink
now represents the type of the value returned by the server, marking several properties as required. -
Extracted type
CreateArangoSearchView
fromArangoSearchViewPropertiesOptions
Note that
ArangoSearchViewPropertiesOptions
now includes only those options that can be updated/replaced whereasCreateArangoSearchView
also includes options that can only be set during creation of a view. -
Renamed type
GraphCreateOptions
toCreateGraphOptions
-
Renamed type
PrimarySortCompression
toCompression
-
Replaced type
AnalyzerInfo
and all its constituent typesPreviously each type of Analyzer was represented by an
AnalyzerInfo
type and (where relevant) anAnalyzerProperties
type, which were used for both creating and fetching Analyzers. The new types more closely follow the pattern already used for index types, providing pairs ofCreateAnalyzerOptions
andAnalyzerDescription
types. -
Removed enum
ViewType
, typeArangoSearchView
and changedView
class to be non-genericThe
View
class now behaves analogous to theAnalyzer
class. The various types related to different view types have been restructured to more closely follow the pattern used for indexes and analyzers.
-
Deprecated
EnsureFulltextIndexOptions
andFulltextIndex
typesFulltext indexes have been deprecated in ArangoDB 3.10 and should be replaced with ArangoSearch.
-
Deprecated
BytesAccumConsolidationPolicy
typeThe
bytes_accum
consolidation policy for views was deprecated in ArangoDB 3.7 and should be replaced with thetier
consolidation policy. The type is also no longer supported inArangoSearchViewPropertiesOptions
.
-
Added
toJSON
method to system errorsArangoJS already adds the
request
object to system errors encountered while attempting to make network requests. This change makes it easier to serialize these error objects to JSON the same wayArangoError
andHttpError
objects can already be serialized. -
Added
allowDirtyRead
option todb.beginTransaction
,trx.commit
,trx.abort
,collection.edges
,collection.inEdges
,collection.outEdges
The option is only respected by read-only requests.
-
Added support for
ifMatch
andifNoneMatch
options (#707) -
Added
overwrite
option todb.acquireHostList
(#711)Setting this option to
true
will replace the current host list, removing any hosts no longer present in the cluster. -
Added new ArangoDB 3.10
legacyPolygons
option toEnsureGeoIndexOptions
andGeoIndex
typesGeo indexes created in ArangoDB pre-3.10 will implicitly default this option to
true
. ArangoDB 3.10 and later will default tofalse
and use the new parsing rules for geo indexes. -
Added support for new ArangoDB 3.10
cacheEnabled
andstoredValues
options in persistent indexes -
Added support for new ArangoDB 3.10 computed values in collections
-
Added support for new ArangoDB 3.10
InvertedIndex
type -
Added support for new ArangoDB 3.10
offset
Analyzer feature -
Added support for new ArangoDB 3.10
minhash
,classification
andnearest_neighbors
Analyzer types -
Added missing
replicationFactor
andwriteConcern
options toCollectionPropertiesOptions
type -
Added missing
commitIntervalMsec
option toArangoSearchViewProperties
type -
Added missing
deduplicate
option toEnsurePersistentIndexOptions
type (#771) -
Added missing
unique
option toEnsureZkdIndexOptions
type -
Added missing
deduplicate
andestimates
fields toPersistentIndex
type -
Added new ArangoDB 3.10
db.queryRules
method -
Added support for
Analyzer
inaql
templatesAnalyzer
objects can now be passed intoaql
templates likeView
andArangoCollection
objects. -
Added
retryOnConflict
option toConfig
If set to any number, this value will be used as the default value for all requests unless explicitly overridden when using
db.query
orroute.request
.
7.8.0 - 2022-05-19
-
Added
retryOnConflict
option todb.query
androute.request
This option allows specifying the number of times the request will be retried if it results in a write-write conflict.
7.7.0 - 2022-01-26
-
Unicode names are now automatically NFC normalized
This change affects all database, collection, graph, view and analyzer names using unicode characters. The change has no effect when using non-unicode (ASCII) names. At this time, ArangoDB does not support unicode characters in any of these names but experimental support for unicode database names is available in ArangoDB 3.9 using the
--database.extended-names-databases
startup option.Any names used to create
Database
,Collection
, etc instances or passed to methods will automatically be NFC normalized. Additionally the collection name part of any value passed as aDocumentSelector
and the collection name part of values returned bycollection.documentId
will automatically be NFC normalized.
-
Deprecated
EnsureHashIndexOptions
andEnsureSkiplistIndexOptions
typesThe hash and skiplist index types have been deprecated in ArangoDB 3.9 and should be replaced with persistent indexes which behave identically.
-
Deprecated all MMFiles related options and methods
The MMFiles storage engine was removed in ArangoDB 3.7.
-
Added support for new ArangoDB 3.9
CollationAnalyzer
andSegmentationAnalyzer
types -
Added support for new ArangoDB 3.9 (multi-dimensional)
ZkdIndex
type -
Added support for new ArangoDB 3.9 Hybrid SmartGraphs graph options
-
Added support for new ArangoDB 3.9 response queue time reporting
This adds the
db.queueTime
property, which provides methods for accessing queue time metrics reported by the most recently received server responses if the server supports this feature. -
Added
ArangoSearchViewLink#inBackground
(#759) -
Added
collection.compact
(#630)
7.6.1 - 2021-10-26
-
Changed all uses of
Record<string, unknown>
toRecord<string, any>
(#750)This should allow using more specific types without having to implement index signatures.
7.6.0 - 2021-10-20
-
Added
collection.documents
for fetching multiple documents -
Added support for
fillBlockCache
query option -
Added support for passing
Graph
objects in AQL queries (#740)This also adds the
isArangoGraph
helper function for type checking. -
Added User Management API (#664)
This implements the endpoints of the HTTP Interface for User Management
-
Added missing
hex
option toStopwordsAnalyzer
type (#732) -
Added missing
details
option tocollection.figures
(#728) -
Added missing
inBackground
option to index options (#734)
7.5.0 - 2021-04-22
-
Added support for new ArangoDB 3.8 Analyzer types
This adds the
PipelineAnalyzer
,AqlAnalyzer
,GeoJsonAnalyzer
,GeoPointAnalyzer
andStopwordsAnalyzer
types in TypeScript, as well as the Analyzer-specific properties types. -
Added support for new ArangoDB 3.8
estimates
option for indexesThis affects the
PersistentIndex
,HashIndex
andSkiplistIndex
types in TypeScript.
7.4.0 - 2021-04-09
-
Implemented
toJSON
methods forArangoError
andHttpError
(#632)This prevents an error where
JSON.stringify
would reliably throw if passed an instance of either of these error types generated by arangojs. Note that you may still want to implement your own JSON representation logic as system errors (e.g.ECONNREFUSED
) are not wrapped by arangojs and thrown as-is.
-
Stack traces are now improved for most errors when using
precaptureStackTraces
(#722)Previously this option would only affect network errors, making it far less useful than intended. Now parsing errors,
ArangoError
instances and HTTP errors also receive improved error stack traces when this option is enabled. -
Improved performance for
precaptureStackTraces
when no errors occurThe generated stack is now only accessed on demand, allowing the runtime to delay generation of the stack trace string. Previously the stack would always be accessed prior to the request being sent, causing a noticeable delay even when no error occurs.
-
Fixed document selector validation in
collection.edges
and its variants (#704)These methods previously only permitted start vertices that are documents within the edge collection itself. This behavior has now been corrected to permit start vertices outside the collection, as expected.
7.3.0 - 2021-03-08
-
Changed the default for
agentOptions.scheduling
to"lifo"
This is already the default in Node v15.6 but can reduce latency caused by sockets expiring, especially with larger connection pools and infrequent requests.
-
Removed
keepAlive
-specific throughput optimizationPreviously arangojs would allow
agentOptions.maxSockets * 2
concurrent requests, to optimize socket reuse by avoiding idle time. This behavior could trigger deadlocks when attempting to perform multiple transactions in parallel and only marginally improved throughput in some high-load scenarios. The connection pool size now always reflects the value set inagentOptions.maxSockets
regardless of whetherkeepAlive
is enabled. -
Changed
agentOptions.maxSockets
default value when usingROUND_ROBIN
As the connection pool is shared across all server connections when using
ROUND_ROBIN
load balancing, the default value of3
is too limiting for most scenarios involving multiple coordinators. When passing multiple URLs via theurl
option and specifyingROUND_ROBIN
load balancing, arangojs will now default this value tourl.length * 3
instead.
7.2.0 - 2020-12-02
-
Added
db.waitForPropagation
methodThis method helps with setting up databases in a cluster scenario by waiting for a request to succeed on every known coordinator.
7.1.1 - 2020-11-30
This is a maintenance release and contains no bugfixes or features.
7.1.0 - 2020-10-16
- Killing a cursor now also drains it locally
- Fixed a potential memory leak in cursor batch handling
7.0.2 - 2020-09-25
-
Fixed incorrect HTTP method call in
patch
method (#687) -
Fixed empty query results containing
[undefined]
(#683) -
Fixed
updateByExample
andreplaceByExample
new value parameter nameNote that these methods are still deprecated. Previously the
newValue
parameter was incorrectly callednewData
, which prevented the methods from working at all.
7.0.1 - 2020-08-21
This is a maintenance release because the initial v7 release did not include a README file.
7.0.0 - 2020-08-21
This is a major release and breaks backwards compatibility.
See the migration guide for detailed instructions for upgrading your code to arangojs v7.
For a detailed list of changes between pre-release versions of v7 see the Changelog of the final v7 release candidate.
-
Removed ArangoDB 2.8 support
ArangoDB 2.8 has reached End of Life since mid 2018. Version 7 and above of arangojs will no longer support ArangoDB 2.8 and earlier.
-
Removed Node.js 6/8 support
As of version 7 arangojs now requires language support for async/await. This means arangojs requires Node.js 10 (LTS) or newer to function correctly.
-
Removed support for absolute endpoint URLs
This removes the
isAbsolute
option from the arangojs configuration. -
Removed
ArangoError
re-exportThe type can still be imported directly from the
error
module. -
Removed
statusCode
properties ofArangoError
andHttpError
Both of these error types still expose the HTTP status code as the
code
property. ForArangoError
the true HTTP status code may be different and can still be accessed using theresponse.statusCode
property.
-
Removed
db.edgeCollection
methodAs arangojs 7 uses the same implementation for document and edge collections, this method is no longer necessary. Generic collection objects can still be cast to
DocumentCollection
orEdgeCollection
types in TypeScript. -
Removed
db.truncate
convenience methodThis was a wrapper around
db.listCollections
andcollection.truncate
. The behavior ofdb.truncate
can still be emulated by calling these methods directly.
-
Removed collection
createCapConstraint
,createHashIndex
,createSkipList
,createPersistentIndex
,createGeoIndex
andcreateFulltextIndex
methodsThese methods are no longer part of the official ArangoDB API and can be replaced by using the
collection.ensureIndex
method. -
Removed
save(fromId, toId, edgeData)
method variantsMethods for creating edges now require the
_to
and_from
attributes to be specified in the edge (document) data and no longer accept these values as positional arguments. -
Removed
collection.bulkUpdate
methodThe new method
collection.updateAll
now provides this functionality. -
Removed
collection.edge
methodThis method was previously an alias for
collection.document
.The method
graphEdgeCollection.edge
is unaffected by this change. -
Removed
graphName
option foredgeCollection.traversal
Graph traversals can still be performed via
graph.traversal
.
-
Removed generic collection methods from
GraphVertexCollection
All methods that are not part of the graph API have been removed. The underlying collection can still be accessed from the
collection
property. -
Removed generic collection methods from
GraphEdgeCollection
All methods that are not part of the graph API have been removed. The underlying collection can still be accessed from the
collection
property.
-
Removed
cursor.some
andcursor.every
methodsThese methods encouraged overfetching and should be replaced with more efficient AQL queries.
The behavior can still be implemented by using the
next
method directly or iterating over the cursor using theforEach
method or thefor await
syntax.
-
Removed
ViewResponse
typeThe type
ViewDescription
represents the same structure. -
Removed
ArangoSearchViewPropertiesResponse
typeThe type
ArangoSearchViewProperties & ViewDescription
can be used to represent the same structure.
-
Deprecated
db.useDatabase
methodUsing this method will affect
Collection
,Graph
and other objects already created for the given database and change which database these refer to, which may cause unexpected behavior.As of arangojs 7 the
db.database
method can be used instead to create a new, separateDatabase
object using the same connection pool.
-
Deprecated
Collection
methods for simple queries:list
,all
,any
,byExample
,firstExample
,removeByExample
,replaceByExample
,updateByExample
,lookupByKeys
,removeByKeys
,fulltext
These methods were deprecated in ArangoDB 3.4 and should no longer be used. They will still behave correctly with versions of ArangoDB supporting these methods but may be removed in a future ArangoDB release.
Their behavior can be emulated using AQL queries.
-
Deprecated
graph.traversal
andcollection.traversal
These methods were deprecated in ArangoDB 3.4 and should no longer be used. They will still behave correctly with versions of ArangoDB supporting these methods but may be removed in a future ArangoDB release.
Their behavior can be emulated using AQL graph traversal.
-
Multiple
Database
objects can now share a singleConnection
All arangojs objects now reference a
Database
object rather than accessing the underlyingConnection
directly. This allows multipleDatabase
objects to be created by using thedb.database
method while still allowing the creation of separate database objects with separate connection pools if desired. -
Memoized
Database
,Collection
,Graph
,View
andAnalyzer
Database objects are now memoized per-connection and the other object types are memoized per-database. Using
useDatabase
de-memoizes the database object to prevent unexpected behavior. -
Added support for
View
inaql
templates (#667)View
(orArangoSearchView
) objects can now be passed intoaql
templates likeArangoCollection
objects. -
Moved
collectionToString
helper intocollection
module -
Moved
Dict
type intoconnection
module -
Moved
Patch
type intodocuments
module -
Removed
Errback
type from public API -
Renamed
util/foxx-manifest
module tofoxx-manifest
-
Renamed method
db.arangoSearchView
todb.view
-
Renamed method
db.createArangoSearchView
todb.createView
-
Replaced methods
db.enableServiceDevelopmentMode
anddb.disableServiceDevelopmentMode
withdb.setServiceDevelopmentMode
-
Flattened database
query
methodoptions
argumentThe optional
options
argument previously contained an additionaloptions
object with additional query options. These options are now specified on theoptions
argument itself directly.Before:
db.query(aql`FOR doc IN ${collection} RETURN doc`, { cache: false, options: { fullCount: true }, });
After:
db.query(aql`FOR doc IN ${collection} RETURN doc`, { cache: false, fullCount: true, });
-
Changed
db.listServices
optionexcludeSystem
default totrue
To be more consistent with the equivalent options in other methods, the default value has been changed from
false
totrue
. -
Changed
db.createDatabase
return type toDatabase
-
Renamed
database.setQueryTracking
todatabase.queryTracking
The method will now return the existing query tracking properties or set the new query tracking properties depending on whether an argument is provided.
-
Method
db.transaction
no longer acts as an alias forexecuteTransaction
The method now only allows looking up transactions by ID. Previously it would wrap
executeTransaction
if passed the arguments expected by that method.
-
Merged
DocumentCollection
andEdgeCollection
APIsAll collections are now implemented as generic
Collection
objects. In TypeScript the generic collection object can still be explicitly cast toDocumentCollection
orEdgeCollection
for stricter type safety. -
Renamed
collection.setProperties
tocollection.properties
The method will now return the existing properties or set the properties depending on whether an argument is provided.
-
Removed
CollectionMetadata
fields fromCollectionProperties
typeMethods that previously returned
CollectionProperties
now returnCollectionMetadata & CollectionProperties
. -
Collection methods
save
,update
,replace
andremove
no longer take arrays as inputThe array versions have been renamed to
saveAll
,updateAll
,replaceAll
andremoveAll
to reduce the likelihood of mistakes and provide more helpful type signatures. -
Collection methods will now throw errors when passed documents or document IDs from different collections where a document key or ID for a document in the same collection is expected
For example the following code will now result in an error rather than the document from a different collection being returned:
const aliceId = "alice/123"; // Document from collection "alice" const bobCol = db.collection("bob"); // Collection "bob" const doc = await bobCol.document(aliceId); // THROWS
-
Changed
collection.import
optiontype
behaviorPreviously this option would always default to
"auto"
.When passing a
string
,Buffer
orBlob
as data, the option now defaults toundefined
. This matches the behavior in previous versions of setting the option explicitly tonull
.Additionally, the value
"array"
has been replaced with"list"
.When passing an array as data, the option is now no longer supported as the corresponding value will be inferred from the array's contents:
If the array's first item is also an array, it will match the behavior in previous versions of setting the option explicitly to
null
.Otherwise it will match the behavior in previous versions of setting the option explicitly to
"documents"
or"auto"
, or omitting it entirely. -
Changed
collection.list
return type toArrayCursor
-
Graph methods now also accept
ArangoCollection
instances instead of namesThis brings these methods behavior in line with that of the
beginTransaction
andexecuteTransaction
methods ofDatabase
objects. -
Graph
create
method (anddb.createGraph
) signature changedThe
graph.create
method now takes an array of edge definitions as the first argument and any additional options (not just thewaitForSync
option) as the second argument.Before:
await graph.create( { edgeDefinitions: [{ collection: "edges", from: ["a"], to: ["b"] }], isSmart: true, }, { waitForSync: true } );
After:
await graph.create([{ collection: "edges", from: ["a"], to: ["b"] }], { isSmart: true, waitForSync: true, });
-
First argument to
graph.replaceEdgeDefinition
is now optionalSince the new edge definition already includes the edge collection name that identifies the edge definition, it is now possible to specify only the new edge definition object without additionally specifying the collection name as the first argument.
Before:
await graph.replaceEdgeDefinition("edges", { collection: "edges", // This is a bit redundant from: ["a"], to: ["b"], });
After:
await graph.replaceEdgeDefinition({ collection: "edges", from: ["a"], to: ["b"], });
-
Graph collection return values now contain
old
andnew
properties whenreturnOld
orreturnNew
options are usedThis behavior represents a compromise between remaining consistent with the behavior of the regular collection method equivalents and remaining compatible with the ArangoDB HTTP API response object quirks.
-
Replaced
ArrayCursor
methodshasNext
andhasMore
with getters -
Renamed
ArrayCursor
methodeach
toforEach
-
Renamed
cursor.nextBatch
tocursor.batches.next
-
Renamed
cursor.hasMore
tocursor.batches.hasMore
-
In TypeScript
ArrayCursor
is now a generic typeTypeScript users can now cast cursor instances to use a specific type for its values rather than
any
to aid type safety.
-
Renamed
view.setProperties
toview.updateProperties
-
Renamed type
ArangoView
toView
- Renamed type
ArangoAnalyzer
toAnalyzer
-
Renamed type
ArangoTransaction
toTransaction
-
Renamed
transaction.run
totransaction.step
This should hopefully make it more obvious that sequential calls to arangojs methods should be split into separate calls of this method.
-
Added
databaseName
configuration optionSetting this option to a database name will result in the initial
Database
object using this database instead of the default_system
database. -
Added
auth
configuration optionIt is now possible to pass authentication credentials using the
auth
option in addition to callingdb.useBasicAuth
ordb.useBearerAuth
. -
Added
precaptureStackTraces
configuration option (#599)This option can be used to get more useful stack traces but results in a performance hit on every request.
-
Added
before
andafter
to theagentOptions
configuration option (#585)These methods can be used to track performance metrics for outgoing requests.
-
Improved type signatures for TypeScript and inline documentation
Most methods should now provide full type signatures for options and response objects and provide inline documentation in IDEs and editors that support this feature in TypeScript and JavaScript.
-
Added
db.database
methodThis method replaces the use case for the deprecated
db.useDatabase
method. -
Added support for extended options in
db.createDatabase
This method now supports passing an extended options object instead of passing the users array directly.
-
Added
db.createCollection
anddb.createEdgeCollection
methodsThese are convenience methods wrapping
collection.create
. In TypeScriptcreateEdgeCollection
will return a collection cast to theEdgeCollection
type. -
Added
db.createGraph
methodThis is a convenience method wrapping
graph.create
. -
Added
db.createArangoSearchView
methodThis is a convenience method wrapping
view.create
. -
Added
db.createAnalyzer
methodThis is a convenience method wrapping
analyzer.create
. -
Added support for
db.createFunction
optionisDeterministic
-
Added support for
db.listServices
optionexcludeSystem
-
Added collection
saveAll
,updateAll
,replaceAll
andremoveAll
methodsThese methods replace the respective array versions of the collection methods
save
,update
,replace
andremove
, which no longer accept arrays as inputs. -
Added
collection.documentId
methodThe method takes a document or a document key and returns a fully qualified document ID string for the document in the current collection.
-
Added support for values
"ignore"
and"conflict"
inoverwriteMode
option when saving documents using the Collection API
-
Added
graphVertexCollection.vertexExists
andgraphEdgeCollection.edgeExists
methodsThese mimic the behavior of the
collection.documentExists
method but using the Graph API. -
Added
graphVertexCollection.collection
andgraphEdgeCollection.collection
These properties now provide access to regular (non-graph) collection objects for these graph collections. These objects can be used to perform operations not available within the context of a graph (e.g. bulk imports or modifying the collection itself).
-
Added support for
isDisjoint
option in Graph API
-
Added
cursor.flatMap
methodThis method behaves similarly to the
Array
methodflatMap
but operates on the cursor directly likecursor.map
does. -
Added
cursor.batches
to provide a batch-wise cursor API -
Added support for
for await
inArrayCursor
(#616)It is now possible to use
for await
to iterate over each item in a cursor asynchronously.
- Added support for
primarySortCompression
andstoredValues
options in View API
-
Removed TypeScript dependency on
dom
libraryIf you are using arangojs in Node.js, you no longer need to add the
dom
library to yourtsconfig.json
configuration.
-
Fixed
db.dropFunction
optiongroup
being ignored -
Fixed documentation of
db.runServiceTests
Previously the documentation incorrectly indicated that the default value of the
idiomatic
option istrue
. The correct default value isfalse
.
6.14.1 - 2020-05-01
-
Added
uuid
andpadded
to legalKeyGeneratorType
values in TypeScript (#656) -
Added
overwrite
toInsertOptions
type in TypeScript (#657)
6.14.0 - 2020-03-18
- Added
db.listTransactions
anddb.transactions
methods
6.13.0 - 2020-01-24
-
Empty querystring parameters are now omitted
In some cases ArangoDB would be unable to correctly handle querystring parameters without values. Any paremeters set to
undefined
will now no longer be added to the querystring.This does not affect parameters set to empty string values.
- Added
maxRuntime
option todb.query
method
-
Replaced
linkedlist
dependency withx3-linkedlist
(#601)The
linkedlist
dependency had a memory leak and was no longer maintained. The replacement should fix this issue.
6.12.0 - 2019-10-16
-
Added
cursor.kill
methodCursors that have not yet been fully depleted can now be killed using the
cursor.kill
method. Note that this method has no effect if the cursor is already depleted. -
Added
cursor.nextBatch
methodCursors normally fetch additional batches as necessary while iterating over the individual results, this method allows consuming an entire batch at a time.
6.11.1 - 2019-08-30
-
Fixed View properties not being passed correctly when creating Views (#621)
-
Renamed internal
response.host
attribute toresponse.arangojsHostId
(#604)In some environments the
host
attribute is already present and read-only. This should avoid aTypeError
being thrown when a value is assigned by arangojs.
6.11.0 - 2019-08-16
-
Renamed
db.transaction
todb.executeTransaction
The method for executing server-side transactions is now called
executeTransaction
and theparams
argument now must be passed via theoptions
object.For backwards-compatibility the new
db.transaction
method will continue to behave like before when passed anaction
string as the second argument. Note that this behavior is deprecated and will be removed in arangojs 7.
-
Added support for ArangoDB 3.5 streaming transactions
New streaming transactions can be created using
db.beginTransaction
and existing streaming transactions can be accessed by passing the transaction ID todb.transaction
.See the documentation of the
transaction.run
method for examples of using streaming transactions with arangojs. -
Added support for ArangoDB 3.5 Analyzers API
See the documentation of the
database.analyzer
method and theAnalyzer
instances for information on using this API. -
Added
collection.getResponsibleShard
method -
Added support for new ArangoDB 3.5 collection properties
-
Added support for new ArangoDB 3.5 View properties
-
Fixed a problem causing empty nested AQL expressions to be converted to bind variables
Nesting an empty AQL expression like the result of calling
aql.join
with an empty array would previously result in the AQL expression not being recognized and being converted to an object bind variable instead.
6.10.0 - 2018-12-22
-
Changed Views API to match 3.4 GA implementation
This release updates the Views API to the version implemented in the final ArangoDB 3.4 GA release. Please note that these changes may break code written for earlier ArangoDB 3.4 release candidates.
-
Added
timeout
option todb.query
and request methods (#572)Note that this merely cancels the request. Queries will still be executed and ArangoDB will still continue processing the request, this will merely result in the socket being forcefully disconnected.
-
Added query management API (#474)
This implements most endpoints of the HTTP Interface for AQL Queries.
6.9.0 - 2018-11-07
-
Restored support for credentials in URLs
If the server URL includes credentials, arangojs will now use them instead of the default username "root" and an empty password. Any credentials explicitly set using
useBasicAuth
oruseBearerAuth
will still override the default credentials as before.
6.8.0 - 2018-11-07
-
Added
any[]
to allowed types for AQL bind parametersThis should help in some cases where the previous TypeScript annotation was too restrictive.
-
Added support for UNIX socket URLs (#405)
In addition to the
unix:///socket/path
andhttp+unix:///socket/path
URL formats recognized by ArangoDB, arangojs also supports the formathttp://unix:/socket/path
commonly supported in the Node ecosystem and automatically converts ArangoDB endpoint URLs between them.
6.7.0 - 2018-10-24
-
No longer emitting
undefined
values inaql
template stringsPreviously using
undefined
values in an aql template string would result in a bind parameter being added with no value, which would always lead to an error response when ArangoDB executes the query. Now undefined values will simply be omitted, also easing the conditional insertion of query fragments. -
Changed experimental Views API
This release updates the experimental support for the Views API to the version implemented in the ArangoDB 3.4 release candidate. Please note that this API is still subject to change and may indeed still change until the 3.4.0 GA release.
-
Updated TypeScript to version 3
This may result in type signatures that are incompatible with TypeScript 2 being added in future releases (including patch releases).
-
Added nesting support for
aql
template strings (#481)It is now possible to use aql queries as values in
aql
template strings:function createQuery(flowers, color) { const filter = color ? aql`FILTER flower.color == ${color}` : undefined; return aql`FOR flower IN ${flowers} ${filter} RETURN flower`; } createQuery(db.collection("flowers", "green")); // FOR flower IN @@value0 FILTER @value1 RETURN flower // {"@value0": "flowers", "value1": "green"} createQuery(db.collection("flowers")); // FOR flower IN @@value0 RETURN flower // {"@value0": "flowers"}
Previously aql fragments could only be created with
aql.literal
, which does not support bind parameters:aql.literal("FILTER flower.color == " + JSON.stringify(color)); // Note that we had to rely on JSON.stringify to correctly escape the value // because the value is part of the literal, not a bind parameter
-
Added support for
undefined
and AQL literals toaql.literal
Passing undefined to
aql.literal
will now result in an empty literal as would be expected. Passing an AQL literal back intoaql.literal
will return the existing literal rather than the string[object Object]
. -
Added
aql.join
functionThe function
aql.join
can be used to convert an array ofaql
queries into a combined query:const users = db.collection("users"); const keys = ["a", "b", "c"]; const fragments = keys.map((key) => aql`DOCUMENT(${users}, ${key})`); const combined = aql`[${aql.join(fragments, ", ")}]`; // [DOCUMENT(@@value0, @value1), DOCUMENT(@@value0, @value2), \ // DOCUMENT(@@value0, @value3)] // {"@value0": "users", "value1": "a", "value2": "b", "value3": "c"} const query = aql`FOR user IN ${combined} RETURN user.email`; // FOR user IN [DOCUMENT(@@value0, @value1), DOCUMENT(@@value0, @value2), \ // DOCUMENT(@@value0, @value3)] RETURN user.email // {"@value0": "users", "value1": "a", "value2": "b", "value3": "c"}
-
Added
allowDirtyRead
option todb.query
andcollection.document
Dirty reads are supported in leader/follower replication setups and require ArangoDB 3.4 or later. When performing a request that permits dirty reads, arangojs will load balance across all know leaders and followers and instruct ArangoDB to allow responding with stale or dirty response data. Note that data returned from a dirty read may be out of date or inconsistent.
6.6.0 - 2018-08-28
-
Re-implemented
collection.import
The previous implementation was broken. The new implementation should be backwards-compatible in cases where it previously wasn't broken but is more flexible and also handles buffers.
-
Added missing dependency on
@types/node
(#567)This should solve TypeScript errors when the dependency was not already added.
6.5.1 - 2018-08-15
-
Fixed
edgeCollection.save
not respecting options (#554) -
Fixed
database.createDatabase
TypeScript signature (#561)
6.5.0 - 2018-08-03
-
Requests that fail because a server can not be reached are now automatically retried if other servers are available
This behavior can be controlled using the
maxRetries
option. -
Renamed
EdgeCollection#edge
toEdgeCollection#document
EdgeCollection#edge
is now an alias for thedocument
method. -
Renamed
GraphEdgeCollection#edge
toGraphEdgeCollection#document
GraphEdgeCollection#edge
is now an alias for thedocument
method. -
Renamed
GraphVertexCollection#vertex
toGraphVertexCollection#document
GraphVertexCollection#vertex
is now an alias for thedocument
method.
-
Added
maxRetries
option to configuration to control retry behavior -
Added
collection.documentExists
method -
Added
graceful
option tocollection.document
6.4.0 - 2018-07-06
- Added TypeScript validation for
opts
inDocumentCollection#save
-
Added
ArangoError
andCollectionType
to public exports -
Added
database.close
method -
Added
opts
parameter toEdgeCollection#save
6.3.0 - 2018-06-20
-
Added
database.version
method -
Added
database.login
method -
Added
database.exists
method -
Added
collection.exists
method -
Added
graph.exists
method -
Added
aql.literal
function -
Exposed typings for collections and graphs (@samrg472 in #538)
-
Fixed synchronous errors during request creation not being handled
Internal errors thrown while a request is created (e.g. malformed URIs) would result in unhandled errors, which could result in termination of the process or promises never being rejected. These errors are now handled normally and will result in async rejections as expected.
6.2.4 - 2018-04-27
- Ensure
res.body
is an empty string instead of null in the browser version
6.2.3 - 2018-04-03
-
Fixed
collection.update(documentHandle, newValue, opts)
missing return value -
Fixed
collection.removeByKeys(keys, options)
missing return value -
Fixed
collection.replaceByExample(example, newValue, opts)
missing return value -
Fixed
collection.updateByExample(example, newValue, opts)
missing return value
6.2.2 - 2018-03-21
-
Replaced
Object.values
use to improve Node version compatibilityThis allows using arangojs in Node.js 6 LTS without a polyfill.
6.2.1 - 2018-03-21
-
Moved most documentation out of the README (#123)
This is a necessary step to integrate arangojs with the Drivers book in the official ArangoDB documentation.
-
Replaced internal use of async functions with callbacks
This removes some unnecessary layers of indirection, which should increase overall performance.
- Increased test coverage (#34).
6.2.0 - 2018-03-06
-
Extended
db.transaction
arguments (@f5io in #494)It's now possible to pass additional transaction options.
-
Fixed a typo (@lodestone in #506)
-
Fixed
graphEdgeCollection.edge
return value (@Hunter21007 in #501) -
Fixed graph API sending incorrect requests resulting in HTTP 400 errors (@casdevs in #513)
6.1.0 - 2018-02-12
-
Removed ES modules build
This should solve compatibility problems with
es6-error
. The cjs build now should also work with emulated ES module imports.
-
Use
cpy-cli
for build processShould help with cross-platform compatibility.
-
Fixed
db.uninstallService(mount, opts)
opts default value -
Fixed
db.getServiceConfiguration(mount, minimal)
minimal representation -
Fixed
db.getServiceDependencies(mount, minimal)
minimal representation -
Fixed
db.updateServiceConfiguration(mount, cfg, minimal)
non-minimal representation -
Fixed
db.replaceServiceConfiguration(mount, cfg, minimal)
non-minimal representation -
Fixed
db.updateServiceDependencies(mount, cfg, minimal)
non-minimal representation -
Fixed
db.replaceServiceDependencies(mount, cfg, minimal)
non-minimal representation -
Fixed handling of non-json responses
6.0.1 - 2018-01-22
-
Use
rimraf
for build processShould help with cross-platform compatibility.
-
Fixed some imports broken during the TypeScript rewrite
If you were previously seeing errors involving a
default
property, this should make those go away.
6.0.0 - 2018-01-11
-
Removed
retryConnection
config.It is not possible to reliably determine whether retrying a request is safe or not at the driver level. If you need automatic retry, you should implement your own logic, e.g. using the retry package.
-
Removed
promise
config.If you want to use an alternative promise implementation you need to overwrite the
Promise
global variable directly. -
Asynchronous functions no longer support node-style callbacks.
All asynchronous functions now return promises.
-
Removed support for credentials in
url
config.Use
db.useBasicAuth
ordb.useBearerAuth
to pass credentials instead. -
Removed bower support.
Use yarn/npm instead.
-
Removed
lib
path prefixAll arangojs files can now be imported directly by name.
Before:
import { DocumentCollection } from "arangojs/lib/collection";
After:
import { DocumentCollection } from "arangojs/collection";
-
The
url
config can now also be an array of URLs.The behavior depends on the load balancing strategy (see API docs).
-
The
databaseName
config has been replaced withisAbsolute
.If you previously used
databaseName: false
, the same behavior can now be achieved usingisAbsolute: true
. If you want to use a specific database you can still switch databases withdb.useDatabase
at any time. -
Browser: maximum number of parallel connections behaves differently.
As keep-alive does not work reliably in the browser, the maximum number of parallel connections now matches
agentOptions.maxSockets
exactly. -
TypeScript: ported arangojs to TypeScript.
The generated typings are now included in the NPM release and should be more reliable than the community maintained typings included with earlier versions of arangojs. See also #480.
-
Added ES Modules and browser build to NPM release.
- ES Modules files live under
lib/esm/
- CommonJS files live under
lib/cjs/
- Precompiled browser build lives at
lib/web.js
- ES Modules files live under
-
Added support for load balancing and failover.
See API documentation for details.
-
Added
acquireHostList
method.See API documentation for details.
-
Added support for leader/follower failover.
Connections to a follower responding with an endpoint redirect will now be transparently redirected to the indicated leader.
-
Fixed #354
Graph methods now only return the relevant part of the response body.