@procedures/mongo 0.2.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +65 -0
- package/README.md +74 -3
- package/dist/.tsbuildinfo +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +9 -0
- package/dist/module.js.map +1 -1
- package/dist/procedures/documents.aggregate.d.ts +5 -0
- package/dist/procedures/documents.aggregate.d.ts.map +1 -1
- package/dist/procedures/documents.aggregate.js +36 -3
- package/dist/procedures/documents.aggregate.js.map +1 -1
- package/dist/procedures/documents.bulk.d.ts +42 -0
- package/dist/procedures/documents.bulk.d.ts.map +1 -0
- package/dist/procedures/documents.bulk.js +159 -0
- package/dist/procedures/documents.bulk.js.map +1 -0
- package/dist/procedures/documents.distinct.d.ts +22 -0
- package/dist/procedures/documents.distinct.d.ts.map +1 -0
- package/dist/procedures/documents.distinct.js +33 -0
- package/dist/procedures/documents.distinct.js.map +1 -0
- package/dist/procedures/documents.explain.d.ts +41 -0
- package/dist/procedures/documents.explain.d.ts.map +1 -0
- package/dist/procedures/documents.explain.js +111 -0
- package/dist/procedures/documents.explain.js.map +1 -0
- package/dist/procedures/index.d.ts +4 -0
- package/dist/procedures/index.d.ts.map +1 -1
- package/dist/procedures/index.js +5 -0
- package/dist/procedures/index.js.map +1 -1
- package/dist/procedures/watch.d.ts +59 -0
- package/dist/procedures/watch.d.ts.map +1 -0
- package/dist/procedures/watch.js +149 -0
- package/dist/procedures/watch.js.map +1 -0
- package/dist/procedures.types.d.ts +24 -3
- package/dist/procedures.types.d.ts.map +1 -1
- package/dist/storage/mongo-storage.d.ts +1 -0
- package/dist/storage/mongo-storage.d.ts.map +1 -1
- package/dist/storage/mongo-storage.js +4 -0
- package/dist/storage/mongo-storage.js.map +1 -1
- package/dist/types.d.ts +20 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/index.ts +10 -0
- package/src/module.ts +9 -0
- package/src/procedures/documents.aggregate.ts +34 -3
- package/src/procedures/documents.bulk.ts +192 -0
- package/src/procedures/documents.distinct.ts +57 -0
- package/src/procedures/documents.explain.ts +144 -0
- package/src/procedures/index.ts +6 -0
- package/src/procedures/watch.ts +184 -0
- package/src/procedures.types.ts +25 -0
- package/src/storage/mongo-storage.ts +5 -0
- package/src/types.ts +22 -2
|
@@ -14,6 +14,10 @@ export { updateProcedure } from "./documents.update.js";
|
|
|
14
14
|
export { deleteProcedure } from "./documents.delete.js";
|
|
15
15
|
export { countProcedure } from "./documents.count.js";
|
|
16
16
|
export { aggregateProcedure } from "./documents.aggregate.js";
|
|
17
|
+
export { distinctProcedure } from "./documents.distinct.js";
|
|
18
|
+
export { bulkProcedure } from "./documents.bulk.js";
|
|
19
|
+
export { explainProcedure } from "./documents.explain.js";
|
|
20
|
+
export { watchProcedure } from "./watch.js";
|
|
17
21
|
export { listIndexesProcedure } from "./indexes.list.js";
|
|
18
22
|
export { createIndexProcedure } from "./indexes.create.js";
|
|
19
23
|
export { dropIndexProcedure } from "./indexes.drop.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/procedures/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/procedures/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/procedures/index.js
CHANGED
|
@@ -17,6 +17,11 @@ export { updateProcedure } from "./documents.update.js";
|
|
|
17
17
|
export { deleteProcedure } from "./documents.delete.js";
|
|
18
18
|
export { countProcedure } from "./documents.count.js";
|
|
19
19
|
export { aggregateProcedure } from "./documents.aggregate.js";
|
|
20
|
+
export { distinctProcedure } from "./documents.distinct.js";
|
|
21
|
+
export { bulkProcedure } from "./documents.bulk.js";
|
|
22
|
+
export { explainProcedure } from "./documents.explain.js";
|
|
23
|
+
// Change streams
|
|
24
|
+
export { watchProcedure } from "./watch.js";
|
|
20
25
|
// Index procedures
|
|
21
26
|
export { listIndexesProcedure } from "./indexes.list.js";
|
|
22
27
|
export { createIndexProcedure } from "./indexes.create.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/procedures/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,sBAAsB;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,wBAAwB;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,sBAAsB;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/procedures/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,sBAAsB;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,wBAAwB;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,sBAAsB;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,iBAAiB;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,mBAAmB;AACnB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,gBAAgB;AAChB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Procedure: mongo.watch (roadmap R44)
|
|
3
|
+
* The changes of a collection or of a database, as a stream (a change stream)
|
|
4
|
+
*
|
|
5
|
+
* The stream has no end (`metadata.stream: { unbounded: true }`). It stops when the reader stops
|
|
6
|
+
* or the signal of the call aborts: the procedure then closes the change stream. A change stream
|
|
7
|
+
* needs a replica set or a sharded cluster: a server without one refuses it.
|
|
8
|
+
*/
|
|
9
|
+
import { type Effects, type Procedure, type ProcedureContext } from "@procedures/client";
|
|
10
|
+
import type { Document } from "mongodb";
|
|
11
|
+
import { type ScopeInput } from "../scope.js";
|
|
12
|
+
type FullDocument = "default" | "updateLookup" | "whenAvailable" | "required";
|
|
13
|
+
interface WatchInput extends ScopeInput {
|
|
14
|
+
/** The stages after the change stream stage: $match, $project and the other stages it accepts */
|
|
15
|
+
pipeline?: Document[];
|
|
16
|
+
/** The full document of an update: "default" (none), "updateLookup", "whenAvailable" or "required" */
|
|
17
|
+
fullDocument?: FullDocument;
|
|
18
|
+
/** The resume token of an earlier change: the stream starts after it */
|
|
19
|
+
resumeAfter?: string;
|
|
20
|
+
}
|
|
21
|
+
/** One change: an item of the stream. */
|
|
22
|
+
interface WatchChange {
|
|
23
|
+
/** insert, update, replace, delete, drop, rename, dropDatabase or invalidate */
|
|
24
|
+
operationType: string;
|
|
25
|
+
/** The database and the collection of the change */
|
|
26
|
+
ns?: {
|
|
27
|
+
db: string;
|
|
28
|
+
coll?: string | undefined;
|
|
29
|
+
} | undefined;
|
|
30
|
+
/** The _id of the changed document */
|
|
31
|
+
documentKey?: Record<string, unknown> | undefined;
|
|
32
|
+
/** The document of an insert or a replace (and of an update with fullDocument) */
|
|
33
|
+
fullDocument?: Record<string, unknown> | null | undefined;
|
|
34
|
+
/** The changed and removed fields of an update */
|
|
35
|
+
updateDescription?: Record<string, unknown> | undefined;
|
|
36
|
+
/** The time of the change on the server (ISO 8601), from MongoDB 6.0 */
|
|
37
|
+
wallTime?: string | undefined;
|
|
38
|
+
/** The resume token of the change: resumeAfter takes it */
|
|
39
|
+
resumeToken: string;
|
|
40
|
+
}
|
|
41
|
+
/** This function checks the input of a watch. */
|
|
42
|
+
export declare function parseWatchInput(data: unknown): WatchInput;
|
|
43
|
+
/** The item of one change event of the driver. */
|
|
44
|
+
export declare function toWatchChange(event: Document): WatchChange;
|
|
45
|
+
/**
|
|
46
|
+
* The changes, as a stream. The change stream closes when the reader stops (the `finally` of the
|
|
47
|
+
* generator) or when the signal aborts (the close ends the wait for the next change).
|
|
48
|
+
*/
|
|
49
|
+
export declare function watchChanges(input: WatchInput, ctx: ProcedureContext): AsyncGenerator<WatchChange, void, undefined>;
|
|
50
|
+
export declare const watchProcedure: Procedure<WatchInput, WatchChange, {
|
|
51
|
+
description: string;
|
|
52
|
+
effects?: Effects;
|
|
53
|
+
stream?: {
|
|
54
|
+
unbounded?: boolean;
|
|
55
|
+
};
|
|
56
|
+
output?: string;
|
|
57
|
+
}>;
|
|
58
|
+
export type { WatchInput, WatchChange };
|
|
59
|
+
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/procedures/watch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA+B,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,KAAK,EAAqC,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE3E,OAAO,EAAuD,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAMnG,KAAK,YAAY,GAAG,SAAS,GAAG,cAAc,GAAG,eAAe,GAAG,UAAU,CAAC;AAI9E,UAAU,UAAW,SAAQ,UAAU;IACrC,iGAAiG;IACjG,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,sGAAsG;IACtG,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,yCAAyC;AACzC,UAAU,WAAW;IACnB,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,EAAE,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;IAC3D,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAClD,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACxD,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;CACrB;AASD,iDAAiD;AACjD,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CA6BzD;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,CAY1D;AAED;;;GAGG;AACH,wBAAuB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,CA+B1H;AAyBD,eAAO,MAAM,cAAc,EAAE,SAAS,CACpC,UAAU,EACV,WAAW,EACX;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAerF,CAAC;AAEX,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Procedure: mongo.watch (roadmap R44)
|
|
3
|
+
* The changes of a collection or of a database, as a stream (a change stream)
|
|
4
|
+
*
|
|
5
|
+
* The stream has no end (`metadata.stream: { unbounded: true }`). It stops when the reader stops
|
|
6
|
+
* or the signal of the call aborts: the procedure then closes the change stream. A change stream
|
|
7
|
+
* needs a replica set or a sharded cluster: a server without one refuses it.
|
|
8
|
+
*/
|
|
9
|
+
import { createProcedure, zodAdapter } from "@procedures/client";
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import { collectionFor, databaseFor, copyScope, SCOPE_FIELDS } from "../scope.js";
|
|
12
|
+
import { described, documentObject } from "./input-schemas.js";
|
|
13
|
+
/** The stages that a change stream accepts after its own stage. */
|
|
14
|
+
const CHANGE_STREAM_STAGES = ["$match", "$project", "$addFields", "$set", "$unset", "$replaceRoot", "$replaceWith", "$redact"];
|
|
15
|
+
const FULL_DOCUMENT = ["default", "updateLookup", "whenAvailable", "required"];
|
|
16
|
+
const PROCEDURE = "mongo.watch";
|
|
17
|
+
const INPUT_FIELDS = new Set(["pipeline", "fullDocument", "resumeAfter", ...SCOPE_FIELDS]);
|
|
18
|
+
function isPlainObject(value) {
|
|
19
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
20
|
+
}
|
|
21
|
+
/** This function checks the input of a watch. */
|
|
22
|
+
export function parseWatchInput(data) {
|
|
23
|
+
if (!isPlainObject(data))
|
|
24
|
+
throw new Error(`${PROCEDURE}: input must be an object`);
|
|
25
|
+
for (const key of Object.keys(data)) {
|
|
26
|
+
if (!INPUT_FIELDS.has(key))
|
|
27
|
+
throw new Error(`${PROCEDURE}: unknown field "${key}". The fields are: ${[...INPUT_FIELDS].join(", ")}`);
|
|
28
|
+
}
|
|
29
|
+
const result = {};
|
|
30
|
+
copyScope(data, result);
|
|
31
|
+
const pipeline = data["pipeline"];
|
|
32
|
+
if (pipeline !== undefined) {
|
|
33
|
+
if (!Array.isArray(pipeline))
|
|
34
|
+
throw new Error(`${PROCEDURE}: pipeline must be a list of stages`);
|
|
35
|
+
for (const [index, stage] of pipeline.entries()) {
|
|
36
|
+
const names = isPlainObject(stage) ? Object.keys(stage) : [];
|
|
37
|
+
if (names.length !== 1 || !CHANGE_STREAM_STAGES.includes(names[0])) {
|
|
38
|
+
throw new Error(`${PROCEDURE}: pipeline[${index}] must be one stage of ${CHANGE_STREAM_STAGES.join(", ")}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
result.pipeline = pipeline;
|
|
42
|
+
}
|
|
43
|
+
const fullDocument = data["fullDocument"];
|
|
44
|
+
if (fullDocument !== undefined) {
|
|
45
|
+
if (!FULL_DOCUMENT.includes(fullDocument))
|
|
46
|
+
throw new Error(`${PROCEDURE}: fullDocument must be ${FULL_DOCUMENT.join(", ")}`);
|
|
47
|
+
result.fullDocument = fullDocument;
|
|
48
|
+
}
|
|
49
|
+
const resumeAfter = data["resumeAfter"];
|
|
50
|
+
if (resumeAfter !== undefined) {
|
|
51
|
+
if (typeof resumeAfter !== "string" || resumeAfter.length === 0)
|
|
52
|
+
throw new Error(`${PROCEDURE}: resumeAfter must be a resume token (text)`);
|
|
53
|
+
result.resumeAfter = resumeAfter;
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
/** The item of one change event of the driver. */
|
|
58
|
+
export function toWatchChange(event) {
|
|
59
|
+
const id = event["_id"];
|
|
60
|
+
const change = {
|
|
61
|
+
operationType: String(event["operationType"]),
|
|
62
|
+
resumeToken: typeof id?._data === "string" ? id._data : JSON.stringify(id ?? null),
|
|
63
|
+
};
|
|
64
|
+
if (isPlainObject(event["ns"]))
|
|
65
|
+
change.ns = event["ns"];
|
|
66
|
+
if (isPlainObject(event["documentKey"]))
|
|
67
|
+
change.documentKey = event["documentKey"];
|
|
68
|
+
if (event["fullDocument"] !== undefined)
|
|
69
|
+
change.fullDocument = event["fullDocument"];
|
|
70
|
+
if (isPlainObject(event["updateDescription"]))
|
|
71
|
+
change.updateDescription = event["updateDescription"];
|
|
72
|
+
if (event["wallTime"] instanceof Date)
|
|
73
|
+
change.wallTime = event["wallTime"].toISOString();
|
|
74
|
+
return change;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The changes, as a stream. The change stream closes when the reader stops (the `finally` of the
|
|
78
|
+
* generator) or when the signal aborts (the close ends the wait for the next change).
|
|
79
|
+
*/
|
|
80
|
+
export async function* watchChanges(input, ctx) {
|
|
81
|
+
const options = {};
|
|
82
|
+
if (input.fullDocument)
|
|
83
|
+
options.fullDocument = input.fullDocument;
|
|
84
|
+
if (input.resumeAfter)
|
|
85
|
+
options.resumeAfter = { _data: input.resumeAfter };
|
|
86
|
+
const pipeline = input.pipeline ?? [];
|
|
87
|
+
const stream = input.collection !== undefined || ctx.metadata["collection"] !== undefined
|
|
88
|
+
? (await collectionFor(input, ctx)).collection.watch(pipeline, options)
|
|
89
|
+
: (await databaseFor(input, ctx)).watch(pipeline, options);
|
|
90
|
+
const signal = ctx.signal;
|
|
91
|
+
// True when the signal closed the change stream. The driver also closes it before it throws a
|
|
92
|
+
// failure (a server without a replica set): that error goes to the reader.
|
|
93
|
+
let stopped = false;
|
|
94
|
+
const close = () => {
|
|
95
|
+
stopped = true;
|
|
96
|
+
stream.close().catch(() => undefined);
|
|
97
|
+
};
|
|
98
|
+
signal?.addEventListener("abort", close, { once: true });
|
|
99
|
+
try {
|
|
100
|
+
if (signal?.aborted)
|
|
101
|
+
return;
|
|
102
|
+
for await (const event of stream) {
|
|
103
|
+
yield toWatchChange(event);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
// The abort of the call ends the stream without an error
|
|
108
|
+
if (stopped)
|
|
109
|
+
return;
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
signal?.removeEventListener("abort", close);
|
|
114
|
+
await stream.close().catch(() => undefined);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Schemas
|
|
118
|
+
const watchInputSchema = described(parseWatchInput, z.object({
|
|
119
|
+
collection: z.string().min(1).optional().describe("The collection to watch. Without it, the stream gives the changes of the database."),
|
|
120
|
+
database: z.string().min(1).optional().describe("The database name (default: the database of the connection)"),
|
|
121
|
+
pipeline: z.array(documentObject()).optional().describe("Stages after the change stream stage: $match, $project, $addFields, $set, $unset, $replaceRoot, $replaceWith, $redact"),
|
|
122
|
+
fullDocument: z.enum(["default", "updateLookup", "whenAvailable", "required"]).optional().describe("The full document of an update: updateLookup reads it (default: none)"),
|
|
123
|
+
resumeAfter: z.string().min(1).optional().describe("The resume token of an earlier change: the stream starts after it"),
|
|
124
|
+
}));
|
|
125
|
+
const watchOutputSchema = zodAdapter(z.looseObject({
|
|
126
|
+
operationType: z.string().describe("insert, update, replace, delete, drop, rename, dropDatabase or invalidate"),
|
|
127
|
+
ns: z.looseObject({ db: z.string(), coll: z.string().optional() }).optional().describe("The database and the collection of the change"),
|
|
128
|
+
documentKey: z.record(z.string(), z.unknown()).optional().describe("The _id of the changed document"),
|
|
129
|
+
fullDocument: z.record(z.string(), z.unknown()).nullable().optional().describe("The document of an insert or a replace, and of an update with fullDocument"),
|
|
130
|
+
updateDescription: z.record(z.string(), z.unknown()).optional().describe("The changed and removed fields of an update"),
|
|
131
|
+
wallTime: z.string().optional().describe("The time of the change on the server (ISO 8601), from MongoDB 6.0"),
|
|
132
|
+
resumeToken: z.string().describe("The resume token of the change: resumeAfter takes it"),
|
|
133
|
+
}));
|
|
134
|
+
export const watchProcedure = createProcedure()
|
|
135
|
+
.path(["mongo", "watch"])
|
|
136
|
+
.input(watchInputSchema)
|
|
137
|
+
.output(watchOutputSchema)
|
|
138
|
+
.meta({
|
|
139
|
+
description: "The changes of a collection or a database, as a stream without an end (a change stream needs a replica set)",
|
|
140
|
+
effects: { reads: ["mongo", "network"], writes: [] },
|
|
141
|
+
// The stream has no end: it stops when the reader stops (roadmap R15)
|
|
142
|
+
stream: { unbounded: true },
|
|
143
|
+
output: "streaming",
|
|
144
|
+
})
|
|
145
|
+
// invokeProcedure reads a returned async iterable as a stream: the handler types of the core do
|
|
146
|
+
// not describe that case
|
|
147
|
+
.handler(((input, ctx) => watchChanges(input, ctx)))
|
|
148
|
+
.build();
|
|
149
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/procedures/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,10 +34,14 @@ import type { UpdateInput, UpdateOutput } from "./procedures/documents.update.js
|
|
|
34
34
|
import type { DeleteInput, DeleteOutput } from "./procedures/documents.delete.js";
|
|
35
35
|
import type { CountInput, CountOutput } from "./procedures/documents.count.js";
|
|
36
36
|
import type { AggregateInput, AggregateOutput } from "./procedures/documents.aggregate.js";
|
|
37
|
+
import type { DistinctInput, DistinctOutput } from "./procedures/documents.distinct.js";
|
|
38
|
+
import type { BulkInput, BulkOutput } from "./procedures/documents.bulk.js";
|
|
39
|
+
import type { ExplainInput, ExplainOutput } from "./procedures/documents.explain.js";
|
|
40
|
+
import type { WatchInput, WatchChange } from "./procedures/watch.js";
|
|
37
41
|
import type { ListIndexesInput, ListIndexesOutput } from "./procedures/indexes.list.js";
|
|
38
42
|
import type { CreateIndexInput, CreateIndexOutput } from "./procedures/indexes.create.js";
|
|
39
43
|
import type { DropIndexInput, DropIndexOutput } from "./procedures/indexes.drop.js";
|
|
40
|
-
export type { PingInput, PingOutput, InfoInput, ListCollectionsInput, ListCollectionsOutput, CreateCollectionInput, CreateCollectionOutput, DropCollectionInput, DropCollectionOutput, StatsInput, FindInput, FindOutput, GetInput, GetOutput, InsertInput, InsertOutput, UpdateInput, UpdateOutput, DeleteInput, DeleteOutput, CountInput, CountOutput, AggregateInput, AggregateOutput, ListIndexesInput, ListIndexesOutput, CreateIndexInput, CreateIndexOutput, DropIndexInput, DropIndexOutput, };
|
|
44
|
+
export type { PingInput, PingOutput, InfoInput, ListCollectionsInput, ListCollectionsOutput, CreateCollectionInput, CreateCollectionOutput, DropCollectionInput, DropCollectionOutput, StatsInput, FindInput, FindOutput, GetInput, GetOutput, InsertInput, InsertOutput, UpdateInput, UpdateOutput, DeleteInput, DeleteOutput, CountInput, CountOutput, AggregateInput, AggregateOutput, DistinctInput, DistinctOutput, BulkInput, BulkOutput, ExplainInput, ExplainOutput, WatchInput, WatchChange, ListIndexesInput, ListIndexesOutput, CreateIndexInput, CreateIndexOutput, DropIndexInput, DropIndexOutput, };
|
|
41
45
|
/**
|
|
42
46
|
* Typed interface for all MongoDB procedures.
|
|
43
47
|
* Use with createTypedCaller for compile-time autocomplete.
|
|
@@ -101,6 +105,18 @@ export interface MongoProcedures {
|
|
|
101
105
|
input: AggregateInput;
|
|
102
106
|
output: AggregateOutput;
|
|
103
107
|
};
|
|
108
|
+
distinct: {
|
|
109
|
+
input: DistinctInput;
|
|
110
|
+
output: DistinctOutput;
|
|
111
|
+
};
|
|
112
|
+
bulk: {
|
|
113
|
+
input: BulkInput;
|
|
114
|
+
output: BulkOutput;
|
|
115
|
+
};
|
|
116
|
+
explain: {
|
|
117
|
+
input: ExplainInput;
|
|
118
|
+
output: ExplainOutput;
|
|
119
|
+
};
|
|
104
120
|
};
|
|
105
121
|
indexes: {
|
|
106
122
|
list: {
|
|
@@ -116,14 +132,19 @@ export interface MongoProcedures {
|
|
|
116
132
|
output: DropIndexOutput;
|
|
117
133
|
};
|
|
118
134
|
};
|
|
135
|
+
/** A stream: the output is the type of one item */
|
|
136
|
+
watch: {
|
|
137
|
+
input: WatchInput;
|
|
138
|
+
output: WatchChange;
|
|
139
|
+
};
|
|
119
140
|
};
|
|
120
141
|
}
|
|
121
142
|
/**
|
|
122
143
|
* Helper type to extract input type from a procedure path
|
|
123
144
|
*/
|
|
124
|
-
export type ProcedureInput<P extends readonly string[]> = P extends ["mongo", "database", "ping"] ? PingInput : P extends ["mongo", "database", "info"] ? InfoInput : P extends ["mongo", "collections", "list"] ? ListCollectionsInput : P extends ["mongo", "collections", "create"] ? CreateCollectionInput : P extends ["mongo", "collections", "drop"] ? DropCollectionInput : P extends ["mongo", "collections", "stats"] ? StatsInput : P extends ["mongo", "documents", "find"] ? FindInput : P extends ["mongo", "documents", "get"] ? GetInput : P extends ["mongo", "documents", "insert"] ? InsertInput : P extends ["mongo", "documents", "update"] ? UpdateInput : P extends ["mongo", "documents", "delete"] ? DeleteInput : P extends ["mongo", "documents", "count"] ? CountInput : P extends ["mongo", "documents", "aggregate"] ? AggregateInput : P extends ["mongo", "indexes", "list"] ? ListIndexesInput : P extends ["mongo", "indexes", "create"] ? CreateIndexInput : P extends ["mongo", "indexes", "drop"] ? DropIndexInput : never;
|
|
145
|
+
export type ProcedureInput<P extends readonly string[]> = P extends ["mongo", "database", "ping"] ? PingInput : P extends ["mongo", "database", "info"] ? InfoInput : P extends ["mongo", "collections", "list"] ? ListCollectionsInput : P extends ["mongo", "collections", "create"] ? CreateCollectionInput : P extends ["mongo", "collections", "drop"] ? DropCollectionInput : P extends ["mongo", "collections", "stats"] ? StatsInput : P extends ["mongo", "documents", "find"] ? FindInput : P extends ["mongo", "documents", "get"] ? GetInput : P extends ["mongo", "documents", "insert"] ? InsertInput : P extends ["mongo", "documents", "update"] ? UpdateInput : P extends ["mongo", "documents", "delete"] ? DeleteInput : P extends ["mongo", "documents", "count"] ? CountInput : P extends ["mongo", "documents", "aggregate"] ? AggregateInput : P extends ["mongo", "documents", "distinct"] ? DistinctInput : P extends ["mongo", "documents", "bulk"] ? BulkInput : P extends ["mongo", "documents", "explain"] ? ExplainInput : P extends ["mongo", "indexes", "list"] ? ListIndexesInput : P extends ["mongo", "indexes", "create"] ? CreateIndexInput : P extends ["mongo", "indexes", "drop"] ? DropIndexInput : P extends ["mongo", "watch"] ? WatchInput : never;
|
|
125
146
|
/**
|
|
126
147
|
* Helper type to extract output type from a procedure path
|
|
127
148
|
*/
|
|
128
|
-
export type ProcedureOutput<P extends readonly string[]> = P extends ["mongo", "database", "ping"] ? PingOutput : P extends ["mongo", "database", "info"] ? DatabaseInfo : P extends ["mongo", "collections", "list"] ? ListCollectionsOutput : P extends ["mongo", "collections", "create"] ? CreateCollectionOutput : P extends ["mongo", "collections", "drop"] ? DropCollectionOutput : P extends ["mongo", "collections", "stats"] ? CollectionStats : P extends ["mongo", "documents", "find"] ? FindOutput : P extends ["mongo", "documents", "get"] ? GetOutput : P extends ["mongo", "documents", "insert"] ? InsertOutput : P extends ["mongo", "documents", "update"] ? UpdateOutput : P extends ["mongo", "documents", "delete"] ? DeleteOutput : P extends ["mongo", "documents", "count"] ? CountOutput : P extends ["mongo", "documents", "aggregate"] ? AggregateOutput : P extends ["mongo", "indexes", "list"] ? ListIndexesOutput : P extends ["mongo", "indexes", "create"] ? CreateIndexOutput : P extends ["mongo", "indexes", "drop"] ? DropIndexOutput : never;
|
|
149
|
+
export type ProcedureOutput<P extends readonly string[]> = P extends ["mongo", "database", "ping"] ? PingOutput : P extends ["mongo", "database", "info"] ? DatabaseInfo : P extends ["mongo", "collections", "list"] ? ListCollectionsOutput : P extends ["mongo", "collections", "create"] ? CreateCollectionOutput : P extends ["mongo", "collections", "drop"] ? DropCollectionOutput : P extends ["mongo", "collections", "stats"] ? CollectionStats : P extends ["mongo", "documents", "find"] ? FindOutput : P extends ["mongo", "documents", "get"] ? GetOutput : P extends ["mongo", "documents", "insert"] ? InsertOutput : P extends ["mongo", "documents", "update"] ? UpdateOutput : P extends ["mongo", "documents", "delete"] ? DeleteOutput : P extends ["mongo", "documents", "count"] ? CountOutput : P extends ["mongo", "documents", "aggregate"] ? AggregateOutput : P extends ["mongo", "documents", "distinct"] ? DistinctOutput : P extends ["mongo", "documents", "bulk"] ? BulkOutput : P extends ["mongo", "documents", "explain"] ? ExplainOutput : P extends ["mongo", "indexes", "list"] ? ListIndexesOutput : P extends ["mongo", "indexes", "create"] ? CreateIndexOutput : P extends ["mongo", "indexes", "drop"] ? DropIndexOutput : P extends ["mongo", "watch"] ? WatchChange : never;
|
|
129
150
|
//# sourceMappingURL=procedures.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"procedures.types.d.ts","sourceRoot":"","sources":["../src/procedures.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"procedures.types.d.ts","sourceRoot":"","sources":["../src/procedures.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,7 @@ export declare class MongoStorage<T> implements CollectionStorage<T> {
|
|
|
35
35
|
private getCollection;
|
|
36
36
|
get(id: string): Promise<T | undefined>;
|
|
37
37
|
getAll(): Promise<T[]>;
|
|
38
|
+
getEntries(): Promise<Array<[string, T]>>;
|
|
38
39
|
find(predicate: (item: T) => boolean): Promise<T[]>;
|
|
39
40
|
has(id: string): Promise<boolean>;
|
|
40
41
|
size(): Promise<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongo-storage.d.ts","sourceRoot":"","sources":["../../src/storage/mongo-storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGlF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAUD;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAY,CAAC,CAAC,CAAE,YAAW,iBAAiB,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,YAAY,OAAO,EAAE,mBAAmB,EAEvC;IAED;;;OAGG;YACW,aAAa;IAKrB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAG5C;IAEK,MAAM,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAG3B;IAEK,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAGxD;IAEK,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtC;IAEK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAE5B;IAEK,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7C;IAEK,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGzC;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAEK,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAYvD;IAEK,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhD;IAEK,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAYrD;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAEK,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC,CAU5C;CACF"}
|
|
1
|
+
{"version":3,"file":"mongo-storage.d.ts","sourceRoot":"","sources":["../../src/storage/mongo-storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGlF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAUD;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAY,CAAC,CAAC,CAAE,YAAW,iBAAiB,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,YAAY,OAAO,EAAE,mBAAmB,EAEvC;IAED;;;OAGG;YACW,aAAa;IAKrB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAG5C;IAEK,MAAM,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAG3B;IAEK,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAG9C;IAEK,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAGxD;IAEK,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtC;IAEK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAE5B;IAEK,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7C;IAEK,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGzC;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAEK,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAYvD;IAEK,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhD;IAEK,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAYrD;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAEK,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC,CAU5C;CACF"}
|
|
@@ -39,6 +39,10 @@ export class MongoStorage {
|
|
|
39
39
|
const docs = await (await this.getCollection()).find({}).toArray();
|
|
40
40
|
return docs.map((doc) => doc.data);
|
|
41
41
|
}
|
|
42
|
+
async getEntries() {
|
|
43
|
+
const docs = await (await this.getCollection()).find({}).toArray();
|
|
44
|
+
return docs.map((doc) => [doc._id, doc.data]);
|
|
45
|
+
}
|
|
42
46
|
async find(predicate) {
|
|
43
47
|
const all = await this.getAll();
|
|
44
48
|
return all.filter(predicate);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongo-storage.js","sourceRoot":"","sources":["../../src/storage/mongo-storage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mongo-storage.js","sourceRoot":"","sources":["../../src/storage/mongo-storage.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -126,6 +126,16 @@ export interface BulkUpdateOne {
|
|
|
126
126
|
upsert?: boolean;
|
|
127
127
|
};
|
|
128
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Update operation of each matching document, for bulk write
|
|
131
|
+
*/
|
|
132
|
+
export interface BulkUpdateMany {
|
|
133
|
+
updateMany: {
|
|
134
|
+
filter: DocumentQuery;
|
|
135
|
+
update: DocumentUpdate;
|
|
136
|
+
upsert?: boolean;
|
|
137
|
+
};
|
|
138
|
+
}
|
|
129
139
|
/**
|
|
130
140
|
* Delete operation for bulk write
|
|
131
141
|
*/
|
|
@@ -135,9 +145,17 @@ export interface BulkDeleteOne {
|
|
|
135
145
|
};
|
|
136
146
|
}
|
|
137
147
|
/**
|
|
138
|
-
*
|
|
148
|
+
* Delete operation of each matching document, for bulk write
|
|
149
|
+
*/
|
|
150
|
+
export interface BulkDeleteMany {
|
|
151
|
+
deleteMany: {
|
|
152
|
+
filter: DocumentQuery;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Bulk operation union type: the operations of `mongo.documents.bulk`
|
|
139
157
|
*/
|
|
140
|
-
export type BulkOperation = BulkInsertOne | BulkUpdateOne | BulkDeleteOne;
|
|
158
|
+
export type BulkOperation = BulkInsertOne | BulkUpdateOne | BulkUpdateMany | BulkDeleteOne | BulkDeleteMany;
|
|
141
159
|
/**
|
|
142
160
|
* Result of a bulk write operation
|
|
143
161
|
*/
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAM9D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/B;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAMjD;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE3C;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC;AAEzC;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEpD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,MAAe,GAAG,QAAQ,CAqB3E;AAMD;;GAEG;AACH,MAAM,WAAW,QAAS,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvD,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,QAAQ,IAAI,cAAc,CAE5B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,cAAc,CAQhB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CAEvE;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE;QACT,QAAQ,EAAE,QAAQ,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE;QACT,MAAM,EAAE,aAAa,CAAC;QACtB,MAAM,EAAE,cAAc,CAAC;QACvB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE;QACT,MAAM,EAAE,aAAa,CAAC;KACvB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,aAAa,GAAG,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package",
|
|
3
3
|
"name": "@procedures/mongo",
|
|
4
|
-
"version": "0.
|
|
5
|
-
"description": "MongoDB as typed procedures: documents, collections, indexes, aggregation and database info, with
|
|
4
|
+
"version": "0.4.0",
|
|
5
|
+
"description": "MongoDB as typed procedures: documents, bulk writes, distinct, explain, collections, indexes, aggregation, change streams and database info, with safe update and delete targets.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"mongodb",
|
|
8
8
|
"mongo",
|
|
@@ -72,8 +72,8 @@
|
|
|
72
72
|
"procedures": "./dist/register.js"
|
|
73
73
|
},
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"@procedures/client": "0.
|
|
76
|
-
"@procedures/collections": "0.
|
|
75
|
+
"@procedures/client": "0.4.0",
|
|
76
|
+
"@procedures/collections": "0.4.0",
|
|
77
77
|
"mongodb": "^7.0.0",
|
|
78
78
|
"zod": "^4.6.5"
|
|
79
79
|
},
|
package/src/index.ts
CHANGED
|
@@ -81,6 +81,14 @@ export type {
|
|
|
81
81
|
CountOutput,
|
|
82
82
|
AggregateInput,
|
|
83
83
|
AggregateOutput,
|
|
84
|
+
DistinctInput,
|
|
85
|
+
DistinctOutput,
|
|
86
|
+
BulkInput,
|
|
87
|
+
BulkOutput,
|
|
88
|
+
ExplainInput,
|
|
89
|
+
ExplainOutput,
|
|
90
|
+
WatchInput,
|
|
91
|
+
WatchChange,
|
|
84
92
|
ListIndexesInput,
|
|
85
93
|
ListIndexesOutput,
|
|
86
94
|
CreateIndexInput,
|
|
@@ -107,7 +115,9 @@ export type {
|
|
|
107
115
|
// Bulk operations
|
|
108
116
|
BulkInsertOne,
|
|
109
117
|
BulkUpdateOne,
|
|
118
|
+
BulkUpdateMany,
|
|
110
119
|
BulkDeleteOne,
|
|
120
|
+
BulkDeleteMany,
|
|
111
121
|
BulkOperation,
|
|
112
122
|
BulkWriteResult,
|
|
113
123
|
// Indexes
|
package/src/module.ts
CHANGED
|
@@ -23,6 +23,10 @@ import { updateProcedure } from "./procedures/documents.update.js";
|
|
|
23
23
|
import { deleteProcedure } from "./procedures/documents.delete.js";
|
|
24
24
|
import { countProcedure } from "./procedures/documents.count.js";
|
|
25
25
|
import { aggregateProcedure } from "./procedures/documents.aggregate.js";
|
|
26
|
+
import { distinctProcedure } from "./procedures/documents.distinct.js";
|
|
27
|
+
import { bulkProcedure } from "./procedures/documents.bulk.js";
|
|
28
|
+
import { explainProcedure } from "./procedures/documents.explain.js";
|
|
29
|
+
import { watchProcedure } from "./procedures/watch.js";
|
|
26
30
|
import { listIndexesProcedure } from "./procedures/indexes.list.js";
|
|
27
31
|
import { createIndexProcedure } from "./procedures/indexes.create.js";
|
|
28
32
|
import { dropIndexProcedure } from "./procedures/indexes.drop.js";
|
|
@@ -47,10 +51,15 @@ export const procedures: readonly AnyProcedure[] = [
|
|
|
47
51
|
deleteProcedure,
|
|
48
52
|
countProcedure,
|
|
49
53
|
aggregateProcedure,
|
|
54
|
+
distinctProcedure,
|
|
55
|
+
bulkProcedure,
|
|
56
|
+
explainProcedure,
|
|
50
57
|
// Indexes
|
|
51
58
|
listIndexesProcedure,
|
|
52
59
|
createIndexProcedure,
|
|
53
60
|
dropIndexProcedure,
|
|
61
|
+
// Change streams
|
|
62
|
+
watchProcedure,
|
|
54
63
|
];
|
|
55
64
|
|
|
56
65
|
/**
|
|
@@ -44,6 +44,32 @@ const aggregateOutputSchema = zodAdapter<AggregateOutput>(
|
|
|
44
44
|
})
|
|
45
45
|
);
|
|
46
46
|
|
|
47
|
+
/** The stages that write to a collection. A read-only procedure refuses them (CAP-2). */
|
|
48
|
+
const WRITING_STAGES = ["$out", "$merge"];
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The first stage that writes, or undefined. The search also goes into the pipelines of
|
|
52
|
+
* `$facet`, `$lookup` and `$unionWith`.
|
|
53
|
+
*/
|
|
54
|
+
export function writingStage(pipeline: unknown): string | undefined {
|
|
55
|
+
if (Array.isArray(pipeline)) {
|
|
56
|
+
for (const stage of pipeline) {
|
|
57
|
+
const found = writingStage(stage);
|
|
58
|
+
if (found) return found;
|
|
59
|
+
}
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
if (pipeline === null || typeof pipeline !== "object") return undefined;
|
|
63
|
+
for (const [key, value] of Object.entries(pipeline)) {
|
|
64
|
+
if (WRITING_STAGES.includes(key)) return key;
|
|
65
|
+
if (value !== null && typeof value === "object") {
|
|
66
|
+
const found = writingStage(value);
|
|
67
|
+
if (found) return found;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
|
|
47
73
|
export const aggregateProcedure: Procedure<
|
|
48
74
|
AggregateInput,
|
|
49
75
|
AggregateOutput,
|
|
@@ -53,11 +79,16 @@ export const aggregateProcedure: Procedure<
|
|
|
53
79
|
.input(aggregateInputSchema)
|
|
54
80
|
.output(aggregateOutputSchema)
|
|
55
81
|
.meta({
|
|
56
|
-
description: "Run an aggregation pipeline",
|
|
57
|
-
//
|
|
58
|
-
|
|
82
|
+
description: "Run an aggregation pipeline (read only: $out and $merge are refused)",
|
|
83
|
+
// The procedure refuses $out and $merge, so it only reads (CAP-2). Before, it declared that
|
|
84
|
+
// it writes, and a read-only session refused every aggregation.
|
|
85
|
+
effects: { reads: ["mongo", "network"], writes: [] },
|
|
59
86
|
})
|
|
60
87
|
.handler(async (input: AggregateInput, ctx: ProcedureContext) => {
|
|
88
|
+
const stage = writingStage(input.pipeline);
|
|
89
|
+
if (stage) {
|
|
90
|
+
throw new Error(`mongo.documents.aggregate is read only: the stage ${stage} writes to a collection`);
|
|
91
|
+
}
|
|
61
92
|
const { collection } = await collectionFor(input, ctx);
|
|
62
93
|
|
|
63
94
|
const results = await collection
|