cry-db 2.0.6

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/dist/base.d.ts ADDED
@@ -0,0 +1,39 @@
1
+ import { MongoClient, ObjectId, Timestamp } from "mongodb";
2
+ import { Log } from "cry-helpers";
3
+ import { Id, IdOrEntity } from "./types";
4
+ export declare const log: Log;
5
+ interface DbInfo {
6
+ name: string;
7
+ }
8
+ export declare class Base {
9
+ protected url: string;
10
+ protected client: MongoClient | null;
11
+ protected _isOnReplica: boolean | undefined;
12
+ appname: string;
13
+ constructor(url?: string);
14
+ static toId(id: IdOrEntity): Id;
15
+ static newid(): ObjectId;
16
+ newId(): ObjectId;
17
+ isConnected(): boolean;
18
+ /**
19
+ * Creates an objectid from parameter or a new one
20
+ * @param {*} o - ObjectID or null
21
+ */
22
+ static objectid(o: Id): ObjectId;
23
+ static timestamp(t?: undefined | string | number | Date | Timestamp): Timestamp;
24
+ /**
25
+ * returns a list of mongo databases
26
+ */
27
+ getDatabases(): Promise<string[]>;
28
+ /**
29
+ * returns a list of mongo databases including info
30
+ */
31
+ getDatabaseInfos(): Promise<DbInfo[]>;
32
+ isOnReplicaSet(): Promise<boolean>;
33
+ ping(): Promise<boolean | undefined>;
34
+ protected connect(): Promise<MongoClient>;
35
+ close(): Promise<void>;
36
+ /** @protected */
37
+ static _toId(id: IdOrEntity): Id;
38
+ }
39
+ export {};
package/dist/base.js ADDED
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Base = exports.log = void 0;
4
+ const mongodb_1 = require("mongodb");
5
+ const cry_helpers_1 = require("cry-helpers");
6
+ function myDir() {
7
+ let dirs = process.cwd().replace(/\\/, "/").split("/");
8
+ let dir = dirs[dirs.length - 1];
9
+ return dir;
10
+ }
11
+ exports.log = new cry_helpers_1.Log(['MONGO']);
12
+ const DEFAULT_APPNAME = "crymongo";
13
+ const CONNECTION_OPTIONS = {
14
+ useNewUrlParser: true,
15
+ useUnifiedTopology: true,
16
+ appname: DEFAULT_APPNAME,
17
+ };
18
+ class Base {
19
+ constructor(url) {
20
+ this.url = url || process.env.MONGO_URL || "mongodb://127.0.0.1:27017";
21
+ this.appname = process.env.APPNAME || myDir() || DEFAULT_APPNAME;
22
+ this.client = null; // MongoClient(this.url, { useNewUrlParser: true, useUnifiedTopology: true }) // see also retry
23
+ this._isOnReplica = undefined;
24
+ exports.log.debug(`new Base for ${this.appname}:`, this.url);
25
+ }
26
+ static toId(id) {
27
+ return this._toId(id);
28
+ }
29
+ static newid() {
30
+ return new mongodb_1.ObjectId();
31
+ }
32
+ newId() {
33
+ return new mongodb_1.ObjectId();
34
+ }
35
+ isConnected() {
36
+ return (!!this.client && this.client.isConnected());
37
+ }
38
+ /**
39
+ * Creates an objectid from parameter or a new one
40
+ * @param {*} o - ObjectID or null
41
+ */
42
+ static objectid(o) {
43
+ if (!o)
44
+ return new mongodb_1.ObjectId();
45
+ if (o instanceof mongodb_1.ObjectId)
46
+ return o;
47
+ if (typeof o === "string")
48
+ mongodb_1.ObjectId.createFromHexString(o);
49
+ return new mongodb_1.ObjectId(o);
50
+ }
51
+ static timestamp(t = undefined) {
52
+ if (t instanceof mongodb_1.Timestamp)
53
+ return t;
54
+ if (typeof t === "object" && t.hasOwnProperty("high"))
55
+ return mongodb_1.Timestamp.fromString(t.toString());
56
+ if (t === null || t === undefined)
57
+ return new mongodb_1.Timestamp(new Date().valueOf() % 1000, new Date().valueOf() / 1000);
58
+ if (t instanceof Date)
59
+ return new mongodb_1.Timestamp(t.valueOf() % 1000, t.valueOf() / 1000);
60
+ if (typeof t === "string")
61
+ return mongodb_1.Timestamp.fromString(t);
62
+ if (typeof t === "number" && Number.isInteger(t))
63
+ return mongodb_1.Timestamp.fromInt(t);
64
+ if (typeof t === "number")
65
+ return mongodb_1.Timestamp.fromNumber(t);
66
+ throw new Error(`cannot convert timestamp: ${t}`);
67
+ }
68
+ /**
69
+ * returns a list of mongo databases
70
+ */
71
+ async getDatabases() {
72
+ return (await this.getDatabaseInfos()).map(d => d.name);
73
+ }
74
+ /**
75
+ * returns a list of mongo databases including info
76
+ */
77
+ async getDatabaseInfos() {
78
+ let conn = await this.connect();
79
+ return (await conn.db("admin").admin().listDatabases()).databases;
80
+ }
81
+ async isOnReplicaSet() {
82
+ if (this._isOnReplica !== undefined)
83
+ return this._isOnReplica;
84
+ try {
85
+ await this.connect();
86
+ await this.client.db("admin").executeDbAdminCommand({ replSetGetStatus: 1 });
87
+ return this._isOnReplica = true;
88
+ }
89
+ catch (err) {
90
+ if (err.message === "not running with --replSet")
91
+ return this._isOnReplica = false;
92
+ else
93
+ throw err;
94
+ }
95
+ }
96
+ async ping() {
97
+ if (this._isOnReplica !== undefined)
98
+ return this._isOnReplica;
99
+ try {
100
+ await this.connect();
101
+ let ret = await this.client.db("admin").executeDbAdminCommand({ ping: 1 });
102
+ return (ret === null || ret === void 0 ? void 0 : ret.ok) === 1;
103
+ }
104
+ catch (err) {
105
+ }
106
+ return undefined;
107
+ }
108
+ async connect() {
109
+ if (this.client && this.client.isConnected)
110
+ return this.client;
111
+ if (this.client && !this.client.isConnected)
112
+ await this.close();
113
+ exports.log.debug(`Mongo connecting app ${this.appname}: `, this.url);
114
+ this.client = new mongodb_1.MongoClient(this.url, { ...CONNECTION_OPTIONS, appname: this.appname });
115
+ this.client = await this.client.connect();
116
+ exports.log.info("mongo connected to ", this.url);
117
+ return this.client;
118
+ }
119
+ async close() {
120
+ var _a;
121
+ if ((_a = this.client) === null || _a === void 0 ? void 0 : _a.isConnected())
122
+ try {
123
+ await this.client.close();
124
+ exports.log.info("connection closed");
125
+ }
126
+ catch (err) {
127
+ exports.log.error(`Error closing client ${err.message}`);
128
+ this.client = null;
129
+ }
130
+ }
131
+ /** @protected */
132
+ static _toId(id) {
133
+ if (id === null || id === undefined)
134
+ return id;
135
+ if (typeof id === "number")
136
+ return id;
137
+ if (id instanceof mongodb_1.ObjectId)
138
+ return id;
139
+ if (typeof id === "string" && id.match(/^[0-9a-f]{24,24}$/i))
140
+ return mongodb_1.ObjectId.createFromHexString(id);
141
+ if (typeof id === "object" && id._id)
142
+ return Base.toId(id._id);
143
+ if (typeof id === "object" && id._bsontype.match(/ObjectID/i))
144
+ return mongodb_1.ObjectId.createFromHexString(id.toString());
145
+ //console.log("_toId fall throu")
146
+ //console.dir(id)
147
+ return id.toString();
148
+ }
149
+ }
150
+ exports.Base = Base;
151
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"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"}
package/dist/db.d.ts ADDED
@@ -0,0 +1,40 @@
1
+ import { Base, log } from "./base";
2
+ import { IndexOptions, MongoClient } from "mongodb";
3
+ import { Entity, Id } from "./types";
4
+ export { log };
5
+ export declare class Db extends Base {
6
+ protected db: string;
7
+ constructor(db?: string, url?: string);
8
+ static newid(): import("bson").ObjectId;
9
+ static toId(id: Id | Entity): Id;
10
+ static objectid(o: Id): import("bson").ObjectId;
11
+ /**
12
+ * Sets a new mongo database
13
+ * @param {string} newdb - name of mongo database
14
+ */
15
+ setDb(newdb: string): void;
16
+ getDb(): string;
17
+ protected connect(): Promise<MongoClient>;
18
+ /**
19
+ * enumerates collections of a mongo database
20
+ * @returns {Promise<string[]>} - array of collection
21
+ */
22
+ getCollections(): Promise<string[]>;
23
+ indexes(collection: string): Promise<any>;
24
+ createIndex(collection: string, name: string, spec: any, opts?: IndexOptions): Promise<string | undefined>;
25
+ /**
26
+ * Creates a back-up set
27
+ * @param {Array<string>} [onlyCollections] - backup only these collections
28
+ * @param {Array<string>} [excludeCollections] - exclude these collections (takes precedence over onlyCollections)
29
+ */
30
+ backupDb(onlyCollections?: Array<string> | null, excludeCollections?: Array<string> | null): Promise<Record<string, string[]>>;
31
+ /**
32
+ * Restores a backupset
33
+ * @param {Object} backupSet - a object, keys are collection names, values are arrays of entities
34
+ */
35
+ restoreDb(backupSet: {
36
+ [collection: string]: Array<Object>;
37
+ }): Promise<{
38
+ [id: string]: Object;
39
+ }>;
40
+ }
package/dist/db.js ADDED
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Db = exports.log = void 0;
4
+ const base_1 = require("./base");
5
+ Object.defineProperty(exports, "log", { enumerable: true, get: function () { return base_1.log; } });
6
+ class Db extends base_1.Base {
7
+ constructor(db, url) {
8
+ super(url);
9
+ this.db = "";
10
+ if (db)
11
+ this.db = db;
12
+ else if (process.env.MONGO_DB)
13
+ this.db = process.env.MONGO_DB;
14
+ }
15
+ static newid() {
16
+ return base_1.Base.newid();
17
+ }
18
+ static toId(id) {
19
+ return base_1.Base.toId(id);
20
+ }
21
+ static objectid(o) {
22
+ return base_1.Base.objectid(o);
23
+ }
24
+ /**
25
+ * Sets a new mongo database
26
+ * @param {string} newdb - name of mongo database
27
+ */
28
+ setDb(newdb) {
29
+ base_1.log.debug('Mongo switch db:', newdb);
30
+ this.db = newdb;
31
+ }
32
+ getDb() {
33
+ return this.db;
34
+ }
35
+ async connect() {
36
+ if (!this.db)
37
+ throw new Error("Db cannot connect - must specify db or set MONGO_DB");
38
+ return await super.connect();
39
+ }
40
+ /**
41
+ * enumerates collections of a mongo database
42
+ * @returns {Promise<string[]>} - array of collection
43
+ */
44
+ async getCollections() {
45
+ base_1.log.debug('getCollections called');
46
+ let conn = await this.connect();
47
+ let ret = (await conn.db(this.db).collections()).map((c) => c.s.namespace.collection);
48
+ base_1.log.debug('getCollections returns', ret);
49
+ return ret;
50
+ }
51
+ async indexes(collection) {
52
+ await this.connect();
53
+ return await this.client.db(this.db).collection(collection).indexes();
54
+ }
55
+ async createIndex(collection, name, spec, opts = {}) {
56
+ await this.connect();
57
+ opts.name = name;
58
+ let indexes = await this.client.db(this.db).collection(collection).indexes();
59
+ if (indexes.map((i) => i.name).includes(name))
60
+ return;
61
+ return await this.client.db(this.db).collection(collection).createIndex(spec, opts);
62
+ }
63
+ /**
64
+ * Creates a back-up set
65
+ * @param {Array<string>} [onlyCollections] - backup only these collections
66
+ * @param {Array<string>} [excludeCollections] - exclude these collections (takes precedence over onlyCollections)
67
+ */
68
+ async backupDb(onlyCollections = null, excludeCollections = []) {
69
+ let conn = await this.connect();
70
+ let colls = await this.getCollections();
71
+ if (onlyCollections)
72
+ colls = colls.filter(c => onlyCollections.includes(c));
73
+ if (excludeCollections)
74
+ colls = colls.filter(c => !excludeCollections.includes(c));
75
+ base_1.log.debug("backupDb collections", colls);
76
+ let backup = {};
77
+ for await (let col of colls) {
78
+ backup[col] = await conn.db(this.db).collection(col).find({}).toArray();
79
+ }
80
+ return backup;
81
+ }
82
+ /**
83
+ * Restores a backupset
84
+ * @param {Object} backupSet - a object, keys are collection names, values are arrays of entities
85
+ */
86
+ async restoreDb(backupSet) {
87
+ base_1.log.debug('restorDb called');
88
+ let conn = (await this.connect()).db(this.db);
89
+ let restored = {};
90
+ for await (let colName of Object.keys(backupSet)) {
91
+ let c = conn.collection(colName);
92
+ await c.deleteMany({});
93
+ if (backupSet[colName].length) {
94
+ restored[colName] = (await (c.insertMany(backupSet[colName]))).result.n;
95
+ }
96
+ }
97
+ base_1.log.debug('restorDb returns', restored);
98
+ return restored;
99
+ }
100
+ }
101
+ exports.Db = Db;
102
+ module.exports = { Db, log: base_1.log };
103
+ //# sourceMappingURL=db.js.map
package/dist/db.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Base } from './base';
2
+ import Mongo from './mongo';
3
+ import { Repo } from './repo';
4
+ import { Db } from './db';
5
+ import * as Types from './types';
6
+ export { Types, Base, Mongo, Repo, Db, };
package/dist/index.js ADDED
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.Db = exports.Repo = exports.Mongo = exports.Base = exports.Types = void 0;
26
+ const base_1 = require("./base");
27
+ Object.defineProperty(exports, "Base", { enumerable: true, get: function () { return base_1.Base; } });
28
+ const mongo_1 = __importDefault(require("./mongo"));
29
+ exports.Mongo = mongo_1.default;
30
+ const repo_1 = require("./repo");
31
+ Object.defineProperty(exports, "Repo", { enumerable: true, get: function () { return repo_1.Repo; } });
32
+ const db_1 = require("./db");
33
+ Object.defineProperty(exports, "Db", { enumerable: true, get: function () { return db_1.Db; } });
34
+ const Types = __importStar(require("./types"));
35
+ exports.Types = Types;
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAA8B;AAQ1B,qFARK,WAAI,OAQL;AAPR,oDAA4B;AAQxB,gBARG,eAAK,CAQH;AAPT,iCAA8B;AAQ1B,qFARK,WAAI,OAQL;AAPR,6BAA0B;AAQtB,mFARK,OAAE,OAQL;AAPN,+CAAkC;AAG9B,sBAAK"}
@@ -0,0 +1,115 @@
1
+ import MongoDb, { CollectionAggregationOptions, MongoClient, Timestamp } from 'mongodb';
2
+ import { Db } from './db';
3
+ import { AuditRecord, BatchSpec, Entity, GetAfterSpec, GetNewerSpec, Id, IdOrEntity, InsertSpec, MongoEmittedEvents, Projection, Query, QueryOpts, UpdateSpec, UpsertOptions } from './types';
4
+ declare type DebugObject = {
5
+ operation: string;
6
+ } & Record<any, any>;
7
+ export declare const DummyExportToFixTsCompilation = true;
8
+ export default class Mongo extends Db {
9
+ private revisions;
10
+ private softdelete;
11
+ private session;
12
+ private emittingPublishEvents;
13
+ private auditing;
14
+ private auditCollectionName;
15
+ private auditedCollections;
16
+ private emitter;
17
+ private user;
18
+ private audit;
19
+ private syncSupport;
20
+ constructor(db?: string, url?: string);
21
+ static newid(): MongoDb.ObjectId;
22
+ static toId(id: Id | Entity): Id;
23
+ static objectid(o: Id): MongoDb.ObjectId;
24
+ on<U extends keyof MongoEmittedEvents>(evt: U, listener: MongoEmittedEvents[U]): void;
25
+ off<U extends keyof MongoEmittedEvents>(evt: U, listener: MongoEmittedEvents[U]): void;
26
+ once<U extends keyof MongoEmittedEvents>(evt: U, listener: MongoEmittedEvents[U]): void;
27
+ setUser(username: string): string;
28
+ setAudit(obj: Object): Object;
29
+ useRevisions(enabled: boolean): boolean;
30
+ usesRevisions(): boolean;
31
+ useSoftDelete(enabled: boolean): boolean;
32
+ usesSoftDelete(): boolean;
33
+ useAuditing(enabled: boolean): boolean;
34
+ usesAuditing(): boolean;
35
+ useSync(enabled: boolean): boolean;
36
+ usesSync(): boolean;
37
+ auditToCollection(c: string): string;
38
+ auditCollection(coll: string, enable?: boolean): void;
39
+ auditCollections(arr: string[] | string): string[];
40
+ auditingCollection(coll: string, db?: string): boolean;
41
+ emitPublishEvents(enabled: boolean): boolean;
42
+ emitsPublishEvents(): boolean;
43
+ distinct<T>(collection: string, field: string): Promise<T[]>;
44
+ count<T>(collection: string, query?: Query, opts?: QueryOpts): Promise<T[]>;
45
+ find<T>(collection: string, query?: Query, opts?: QueryOpts): Promise<T[]>;
46
+ findAll<T>(collection: string, query?: Query, opts?: QueryOpts): Promise<T[]>;
47
+ findNewer<T>(collection: string, timestamp: Timestamp | number | string | Date, query?: Query, opts?: QueryOpts): Promise<T[]>;
48
+ findNewerMany(spec?: GetNewerSpec[]): Promise<Record<string, any[]>>;
49
+ findAfter<T>(collection: string, csq: number, query?: Query, opts?: QueryOpts): Promise<T[]>;
50
+ findAfterMany(spec?: GetAfterSpec[]): Promise<Record<string, any[]>>;
51
+ findNewerFromDate<T>(collection: string, date: Date | string, query?: Query, opts?: QueryOpts): Promise<T[]>;
52
+ findOne<T>(collection: string, query: Query, projection?: Projection): Promise<T | null>;
53
+ findById<T>(collection: string, id: Id, projection?: Projection): Promise<T | null>;
54
+ updateOne<T>(collection: string, query: Query, update: UpdateSpec<T>, options?: UpsertOptions<T>): Promise<T>;
55
+ save<T>(collection: string, update: UpdateSpec<T>, id?: Id | undefined, options?: UpsertOptions<T>): Promise<T>;
56
+ update<T>(collection: string, query: Query, update: UpdateSpec<T>): Promise<{
57
+ n: number;
58
+ ok: boolean;
59
+ }>;
60
+ upsert<T>(collection: string, query: Query, update: UpdateSpec<T>, options?: UpsertOptions<T>): Promise<T>;
61
+ insert<T>(collection: string, insert: InsertSpec<T>): Promise<T>;
62
+ upsertBatch<T>(collection: string, batch: BatchSpec<T>): Promise<T[]>;
63
+ insertMany<T>(collection: string, insert: InsertSpec<T>[]): Promise<T[]>;
64
+ deleteOne<T>(collection: string, query: Query): Promise<T>;
65
+ blockOne<T>(collection: string, query: Query): Promise<T>;
66
+ unblockOne<T>(collection: string, query: Query): Promise<T>;
67
+ hardDeleteOne<T>(collection: string, query: Query): Promise<T>;
68
+ delete(collection: string, query: Query): Promise<{
69
+ ok: boolean;
70
+ n: number;
71
+ }>;
72
+ hardDelete(collection: string, query: Query): Promise<{
73
+ ok: boolean;
74
+ n: number;
75
+ }>;
76
+ testHash(collection: string, query: Query, field: string | Object, unhashedValue: string | Object): Promise<boolean>;
77
+ aggregate<T>(collection: string, pipeline: object[], opts?: MongoDb.CollectionAggregationOptions): Promise<T[]>;
78
+ isUnique<T>(collection: string, field: keyof T, value: string, id?: Id): Promise<boolean>;
79
+ collectFieldValues<T>(collection: string, field: keyof T, inArray: boolean | undefined, opts: CollectionAggregationOptions): Promise<any>;
80
+ dropCollection(collection: string): Promise<void>;
81
+ resetCollectionSync(collection: string): Promise<void>;
82
+ dropCollections(collections: string[]): Promise<void>;
83
+ createCollections(collections: string[]): Promise<void>;
84
+ createCollection(collection: string): Promise<void>;
85
+ dbLogPurge(collection: string, _id: Id | undefined): Promise<{
86
+ n: number;
87
+ }>;
88
+ dbLogGet(collection: string, _id: IdOrEntity): Promise<AuditRecord[]>;
89
+ private replaceIds;
90
+ connect(): Promise<MongoClient>;
91
+ close(): Promise<void>;
92
+ inTransaction(): Promise<boolean>;
93
+ withTransaction(funct: (coll: MongoClient, session: MongoDb.ClientSession | null) => Promise<void>): Promise<any>;
94
+ startTransaction(): Promise<void>;
95
+ commitTransaction(): Promise<void>;
96
+ abortTransaction(): Promise<void>;
97
+ private _try_once;
98
+ executeTransactionally(collection: string, f: (db: MongoDb.Collection, client: MongoClient) => Promise<any>, useTransaction: boolean | undefined, debugObject: DebugObject): Promise<any>;
99
+ private _findLastSequenceForKey;
100
+ private _getNextCollectionUpdateSeqNo;
101
+ private _findSequenceKeys;
102
+ private _processSequenceField;
103
+ private _processSequenceFieldForMany;
104
+ private _getFieldsRecursively;
105
+ private _removeUnchanged;
106
+ private _shouldAuditCollection;
107
+ private _publishAndAudit;
108
+ private _makePublication;
109
+ private emit;
110
+ private _writeAuditRecord;
111
+ private _processUpdateObject;
112
+ private _processHashedKeys;
113
+ private _processReturnedObject;
114
+ }
115
+ export {};