Releases: arangodb/arangojs
v7.0.1
v7.0.0
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
General
-
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.
Database API
-
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 toDocumentCollection
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.
Collection API
-
Removed collection
createCapConstraint
,createHashIndex
,
createSkipList
,createPersistentIndex
,createGeoIndex
and
createFulltextIndex
methodsThese methods are no longer part of the official ArangoDB API and can be
replaced by using thecollection.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
.
Graph API
-
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 thecollection
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 thecollection
property.
Cursor API
-
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.
View API
-
Removed
ViewResponse
typeThe type
ViewDescription
represents the same structure. -
Removed
ArangoSearchViewPropertiesResponse
typeThe type
ArangoSearchViewProperties & ViewDescription
can be used
to represent the same structure.
Deprecated
Database API
-
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.
Collection API
-
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.
Graph API
-
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.
Changed
General
-
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. UsinguseDatabase
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
Database API
-
Renamed method
db.arangoSearchView
todb.view
-
Renamed method
db.createArangoSearchView
todb.createView
-
Replaced methods
db.enableServiceDevelopmentMode
and
db.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 the
options
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 fromfalse
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
wrapexecuteTransaction
if passed the arguments expected by that method.
Collection API
-
Merged
DocumentCollection
andEdgeCollection
APIsAll collections are now implemented as generic
Collection
objects.
In TypeScript the generic collection object can still be explicitly cast to
DocumentCollection
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 return
CollectionMetadata & 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 expectedFor 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 arra...
v7.0.0-rc.2
This is a release candidate which is not intended for use in production and has been published under the npm next
tag.
To install the latest preview release, run npm install arangojs@next
or yarn add arangojs@next
.
This is a major release and breaks backwards compatibility.
Fixed
- Renamed
validation
option toschema
(#681)
Added
-
Added support for
isDisjoint
option in Graph API -
Added support for values
"ignore"
and"conflict"
inoverwriteMode
option when saving documents using the Collection API -
Added support for
primarySortCompression
andstoredValues
options in
View API
v7.0.0-rc.1
This is a release candidate which is not intended for use in production and has been published under the npm next
tag.
To install the latest preview release, run npm install arangojs@next
or yarn add arangojs@next
.
This is a major release and breaks backwards compatibility.
Fixed
- Fixed
export is not defined
error in the browser build
v7.0.0-rc.0
This is a release candidate which is not intended for use in production and has been published under the npm next
tag.
To install the latest preview release, run npm install arangojs@next
or yarn add arangojs@next
.
This is a major release and breaks backwards compatibility.
Removed
-
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
ArangoError
re-exportThe type can still be imported directly from the
error
module.
Changed
-
Renamed
cursor.nextBatch
tocursor.batches.next
-
Renamed
cursor.hasMore
tocursor.batches.hasMore
-
Renamed
db.createArangoSearchView
todb.createView
-
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 support for
View
inaql
templates (#667)View
(orArangoSearchView
) objects can now be passed intoaql
templates
likeArangoCollection
objects. -
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. -
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
-
Removed
Collection
type from public APIAll public APIs reference
DocumentCollection
andEdgeCollection
directly.
Added
-
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
cursor.batches
to provide a batch-wise cursor API -
Added
before
andafter
to theagentOptions
configuration option (#585)These methods can be used to track performance metrics for outgoing requests.
v7.0.0-preview.1
This is a preview release which is not intended for use in production and has been published under the npm next
tag.
To install the latest preview release, run npm install arangojs@next
or yarn add arangojs@next
.
This is a major release and breaks backwards compatibility.
Known issues
The inline documentation is currently incomplete. This will be resolved before the final 7.0.0
release is published.
Removed
-
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
ViewResponse
typeThe type
ViewDescription
represents the same structure. -
Removed
ArangoSearchViewPropertiesResponse
typeThe type
ArangoSearchViewProperties & ViewDescription
can be used
to represent the same structure.
Changed
-
Removed
CollectionMetadata
fields fromCollectionProperties
typeMethods that previously returned
CollectionProperties
now return
CollectionMetadata & CollectionProperties
.
Added
-
Added
auth
option to configurationIt is now possible to pass authentication credentials using the
auth
option in addition to callingdb.useBasicAuth
ordb.useBearerAuth
.
Fixed
- Changed async return type of
collection.index
fromIndex[]
toIndex
v7.0.0-preview.0
This is a preview release which is not intended for use in production and has been published under the npm next
tag.
To install the latest preview release, run npm install arangojs@next
or yarn add arangojs@next
.
This is a major release and breaks backwards compatibility.
Known issues
The inline documentation is currently incomplete. This will be resolved before the final 7.0.0
release is published.
Removed
General
-
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.
Database API
-
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 toDocumentCollection
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.
Collection API
-
Removed collection
createCapConstraint
,createHashIndex
,
createSkipList
,createPersistentIndex
,createGeoIndex
and
createFulltextIndex
methodsThese methods are no longer part of the official ArangoDB API and can be
replaced by using thecollection.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.
Graph API
-
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 thecollection
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 thecollection
property.
Cursor API
-
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.
Deprecated
Database API
-
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.
Collection API
-
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.
Graph API
-
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.
Changed
General
-
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. UsinguseDatabase
de-memoizes the database
object to prevent unexpected behavior.
Database API
-
Renamed method
db.arangoSearchView
todb.view
-
Replaced methods
db.enableServiceDevelopmentMode
and
db.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 the
options
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 fromfalse
totrue
. -
Changed
db.createDatabase
return type toDatabase
Collection API
-
Renamed
collection.setProperties
tocollection.properties
The method will now return the existing properties or set the properties
depending on whether an argument is provided. -
Renamed
collection.setQueryTracking
tocollection.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. -
Merged
DocumentCollection
andEdgeCollection
APIsAll collections are now implemented as generic
Collection
objects.
In TypeScript the generic collection object can still be explicitly cast to
DocumentCollection
orEdgeCollection
for stricter type safety. -
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 expectedFor 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 tonull
.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 API
-
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 when
returnOld
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.
Cursor API
- Replaced
ArrayCursor
methodshasNext
andhasMore
with get...
v6.14.1
v6.14.0
v6.13.0
Changed
-
Empty querystring parameters are now omitted
In some cases ArangoDB would be unable to correctly handle querystring
parameters without values. Any paremeters set toundefined
will now
no longer be added to the querystring.This does not affect parameters set to empty string values.
Added
- Added
maxRuntime
option todb.query
method
Fixed
-
Replaced
linkedlist
dependency withx3-linkedlist
(#601)The
linkedlist
dependency had a memory leak and was no longer maintained.
The replacement should fix this issue.