@unchainedshop/mongodb 3.0.0-alpha7 → 3.0.0-rc.12
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/lib/build-db-indexes.d.ts +1 -1
- package/lib/build-db-indexes.d.ts.map +1 -1
- package/lib/build-db-indexes.js +5 -6
- package/lib/build-db-indexes.js.map +1 -1
- package/lib/build-sort-option.d.ts +1 -1
- package/lib/build-sort-option.d.ts.map +1 -1
- package/lib/find-localized-text.d.ts +1 -1
- package/lib/find-localized-text.d.ts.map +1 -1
- package/lib/find-preserving-ids.d.ts +1 -1
- package/lib/find-preserving-ids.d.ts.map +1 -1
- package/lib/generate-db-filter-by-id.d.ts +1 -1
- package/lib/generate-db-filter-by-id.d.ts.map +1 -1
- package/lib/generate-db-object-id.d.ts +0 -6
- package/lib/generate-db-object-id.d.ts.map +1 -1
- package/lib/generate-db-object-id.js +5 -14
- package/lib/generate-db-object-id.js.map +1 -1
- package/lib/initDb.d.ts.map +1 -1
- package/lib/initDb.js +21 -12
- package/lib/initDb.js.map +1 -1
- package/package.json +24 -15
- package/src/build-db-indexes.ts +6 -7
- package/src/build-sort-option.ts +1 -1
- package/src/find-localized-text.ts +1 -1
- package/src/find-preserving-ids.ts +1 -1
- package/src/generate-db-filter-by-id.ts +1 -1
- package/src/generate-db-object-id.ts +6 -14
- package/src/initDb.ts +22 -13
- package/tsconfig.json +5 -7
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Collection, Document, CreateIndexesOptions, IndexDirection } from 'mongodb';
|
|
2
2
|
export type Indexes<T extends Document> = Array<{
|
|
3
3
|
index: {
|
|
4
4
|
[key in keyof T]?: IndexDirection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-db-indexes.d.ts","sourceRoot":"","sources":["../src/build-db-indexes.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"build-db-indexes.d.ts","sourceRoot":"","sources":["../src/build-db-indexes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAKrF,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,QAAQ,IAAI,KAAK,CAAC;IAC9C,KAAK,EAAE;SAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc;KAAE,CAAC;IAC7C,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC,CAAC,CAAC;AAkBH,eAAO,MAAM,cAAc,GAAU,CAAC,SAAS,QAAQ,cACzC,UAAU,CAAC,CAAC,CAAC,WAChB,OAAO,CAAC,CAAC,CAAC,qBAwBpB,CAAC"}
|
package/lib/build-db-indexes.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createLogger } from '@unchainedshop/logger';
|
|
2
|
+
const logger = createLogger('unchained:mongodb');
|
|
2
3
|
const buildIndexes = (collection, indexes) => Promise.all(indexes.map(async ({ index, options }) => {
|
|
3
4
|
try {
|
|
4
5
|
await collection.createIndex(index, options);
|
|
5
6
|
return false;
|
|
6
7
|
}
|
|
7
8
|
catch (e) {
|
|
8
|
-
|
|
9
|
+
logger.error(e);
|
|
9
10
|
return e;
|
|
10
11
|
}
|
|
11
12
|
}));
|
|
@@ -21,10 +22,8 @@ export const buildDbIndexes = async (collection, indexes) => {
|
|
|
21
22
|
// if (!dropError) {
|
|
22
23
|
const rebuildErrors = (await buildIndexes(collection, indexes)).filter(Boolean);
|
|
23
24
|
if (rebuildErrors.length) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
...rebuildErrors,
|
|
27
|
-
});
|
|
25
|
+
logger.error(`Error building some indexes for ${collection.collectionName}`);
|
|
26
|
+
logger.debug(rebuildErrors);
|
|
28
27
|
success = false;
|
|
29
28
|
}
|
|
30
29
|
// }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-db-indexes.js","sourceRoot":"","sources":["../src/build-db-indexes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build-db-indexes.js","sourceRoot":"","sources":["../src/build-db-indexes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,MAAM,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAC;AAOjD,MAAM,YAAY,GAAG,CACnB,UAAyB,EACzB,OAAmB,EACY,EAAE,CACjC,OAAO,CAAC,GAAG,CACT,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;IACvC,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,CAAU,CAAC;IACpB,CAAC;AACH,CAAC,CAAC,CACH,CAAC;AAEJ,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,UAAyB,EACzB,OAAmB,EACnB,EAAE;IACF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,MAAM,WAAW,GAAG,CAAC,MAAM,YAAY,CAAI,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEjF,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACvB,QAAQ;QACR,sDAAsD;QACtD,gBAAgB;QAChB,UAAU;QACV,IAAI;QAEJ,oBAAoB;QACpB,MAAM,aAAa,GAAG,CAAC,MAAM,YAAY,CAAI,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnF,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,mCAAmC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;YAC7E,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC5B,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QACD,IAAI;IACN,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SortOption } from '@unchainedshop/utils';
|
|
2
|
-
import
|
|
2
|
+
import { Sort } from 'mongodb';
|
|
3
3
|
export declare const buildSortOptions: (sort?: Array<SortOption>) => Sort;
|
|
4
4
|
export default buildSortOptions;
|
|
5
5
|
//# sourceMappingURL=build-sort-option.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-sort-option.d.ts","sourceRoot":"","sources":["../src/build-sort-option.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"build-sort-option.d.ts","sourceRoot":"","sources":["../src/build-sort-option.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAO/B,eAAO,MAAM,gBAAgB,UAAU,KAAK,CAAC,UAAU,CAAC,KAAQ,IAM/D,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Collection, Document, Filter } from 'mongodb';
|
|
2
2
|
export declare const findLocalizedText: <T extends Document>(collection: Collection<T>, selector: Filter<T>, locale: Intl.Locale) => Promise<T>;
|
|
3
3
|
export default findLocalizedText;
|
|
4
4
|
//# sourceMappingURL=find-localized-text.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-localized-text.d.ts","sourceRoot":"","sources":["../src/find-localized-text.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"find-localized-text.d.ts","sourceRoot":"","sources":["../src/find-localized-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAUvD,eAAO,MAAM,iBAAiB,GAAU,CAAC,SAAS,QAAQ,cAC5C,UAAU,CAAC,CAAC,CAAC,YACf,MAAM,CAAC,CAAC,CAAC,UACX,IAAI,CAAC,MAAM,KAClB,OAAO,CAAC,CAAC,CAwBX,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Collection, FindOptions, Filter } from 'mongodb';
|
|
2
2
|
export declare const findPreservingIds: <T>(collection: Collection<T>) => ((selector: Filter<T>, ids: Array<string>, options?: FindOptions) => Promise<Array<T>>);
|
|
3
3
|
//# sourceMappingURL=find-preserving-ids.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-preserving-ids.d.ts","sourceRoot":"","sources":["../src/find-preserving-ids.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"find-preserving-ids.d.ts","sourceRoot":"","sources":["../src/find-preserving-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAc1D,eAAO,MAAM,iBAAiB,GAC3B,CAAC,cACY,UAAU,CAAC,CAAC,CAAC,KACxB,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CA0BxF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-db-filter-by-id.d.ts","sourceRoot":"","sources":["../src/generate-db-filter-by-id.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"generate-db-filter-by-id.d.ts","sourceRoot":"","sources":["../src/generate-db-filter-by-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,MACzD,OAAO,UACJ,MAAM,CAAC,CAAC,CAAC,KACf,MAAM,CAAC,CAAC,CAGV,CAAC"}
|
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @name Random.hexString
|
|
3
|
-
* @summary Return a random string of `n` hexadecimal digits.
|
|
4
|
-
* @locus Anywhere
|
|
5
|
-
* @param {Number} n Length of the string
|
|
6
|
-
*/
|
|
7
1
|
export declare const generateDbObjectId: (digits?: number) => string;
|
|
8
2
|
//# sourceMappingURL=generate-db-object-id.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-db-object-id.d.ts","sourceRoot":"","sources":["../src/generate-db-object-id.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate-db-object-id.d.ts","sourceRoot":"","sources":["../src/generate-db-object-id.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,kBAAkB,uBAAkB,MAKhD,CAAC"}
|
|
@@ -1,25 +1,16 @@
|
|
|
1
|
-
import crypto from 'crypto';
|
|
2
1
|
/**
|
|
3
2
|
* @name Random.hexString
|
|
4
3
|
* @summary Return a random string of `n` hexadecimal digits.
|
|
5
4
|
* @locus Anywhere
|
|
6
5
|
* @param {Number} n Length of the string
|
|
7
6
|
*/
|
|
7
|
+
function toHex(buffer) {
|
|
8
|
+
return Array.prototype.map.call(buffer, (x) => x.toString(16).padStart(2, '0')).join('');
|
|
9
|
+
}
|
|
8
10
|
export const generateDbObjectId = (digits = 24) => {
|
|
9
11
|
const numBytes = Math.ceil(digits / 2);
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
// non-cryptographically strong if not available.
|
|
13
|
-
try {
|
|
14
|
-
bytes = crypto.randomBytes(numBytes);
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
// XXX should re-throw any error except insufficient entropy
|
|
18
|
-
bytes = crypto.pseudoRandomBytes(numBytes);
|
|
19
|
-
}
|
|
20
|
-
const result = bytes.toString('hex');
|
|
21
|
-
// If the number of digits is odd, we'll have generated an extra 4 bits
|
|
22
|
-
// of randomness, so we need to trim the last digit.
|
|
12
|
+
const bytes = crypto.getRandomValues(new Uint8Array(numBytes));
|
|
13
|
+
const result = toHex(bytes);
|
|
23
14
|
return result.substring(0, digits);
|
|
24
15
|
};
|
|
25
16
|
//# sourceMappingURL=generate-db-object-id.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-db-object-id.js","sourceRoot":"","sources":["../src/generate-db-object-id.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"generate-db-object-id.js","sourceRoot":"","sources":["../src/generate-db-object-id.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,SAAS,KAAK,CAAC,MAAM;IACnB,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAM,GAAG,EAAE,EAAU,EAAE;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC,CAAC"}
|
package/lib/initDb.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initDb.d.ts","sourceRoot":"","sources":["../src/initDb.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"initDb.d.ts","sourceRoot":"","sources":["../src/initDb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAe,MAAM,SAAS,CAAC;AAI1C,eAAO,MAAM,OAAO,uBAwBnB,CAAC;AAEF,eAAO,MAAM,MAAM,qBAElB,CAAC;AAEF,QAAA,MAAM,MAAM,QAAa,OAAO,CAAC,EAAE,CAkBlC,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
package/lib/initDb.js
CHANGED
|
@@ -1,22 +1,29 @@
|
|
|
1
|
-
import { mkdirSync } from 'fs';
|
|
2
1
|
import { MongoClient } from 'mongodb';
|
|
3
2
|
let mongod;
|
|
4
3
|
export const startDb = async () => {
|
|
5
|
-
const { MongoMemoryServer } = await import('mongodb-memory-server');
|
|
6
4
|
try {
|
|
7
|
-
|
|
5
|
+
// eslint-disable-next-line
|
|
6
|
+
// @ts-ignore
|
|
7
|
+
const { mkdir } = await import('node:fs/promises');
|
|
8
|
+
const { MongoMemoryServer } = await import('mongodb-memory-server');
|
|
9
|
+
try {
|
|
10
|
+
await mkdir(`${process.cwd()}/.db`);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
//
|
|
14
|
+
}
|
|
15
|
+
mongod = await MongoMemoryServer.create({
|
|
16
|
+
instance: {
|
|
17
|
+
dbPath: `${process.cwd()}/.db`,
|
|
18
|
+
storageEngine: 'wiredTiger',
|
|
19
|
+
port: parseInt(process.env.PORT, 10) + 1,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
return `${mongod.getUri()}unchained`;
|
|
8
23
|
}
|
|
9
24
|
catch {
|
|
10
|
-
|
|
25
|
+
throw new Error("Can't connect to MongoDB: could not start mongodb-memory-server and MONGO_URL env is not set");
|
|
11
26
|
}
|
|
12
|
-
mongod = await MongoMemoryServer.create({
|
|
13
|
-
instance: {
|
|
14
|
-
dbPath: `${process.cwd()}/.db`,
|
|
15
|
-
storageEngine: 'wiredTiger',
|
|
16
|
-
port: parseInt(process.env.PORT, 10) + 1,
|
|
17
|
-
},
|
|
18
|
-
});
|
|
19
|
-
return `${mongod.getUri()}unchained`;
|
|
20
27
|
};
|
|
21
28
|
export const stopDb = async () => {
|
|
22
29
|
await mongod.stop();
|
|
@@ -24,6 +31,8 @@ export const stopDb = async () => {
|
|
|
24
31
|
const initDb = async () => {
|
|
25
32
|
let zstdEnabled = false;
|
|
26
33
|
try {
|
|
34
|
+
// eslint-disable-next-line
|
|
35
|
+
// @ts-ignore
|
|
27
36
|
await import('@mongodb-js/zstd');
|
|
28
37
|
zstdEnabled = true;
|
|
29
38
|
}
|
package/lib/initDb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initDb.js","sourceRoot":"","sources":["../src/initDb.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"initDb.js","sourceRoot":"","sources":["../src/initDb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,WAAW,EAAE,MAAM,SAAS,CAAC;AAE1C,IAAI,MAAM,CAAC;AAEX,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;IAChC,IAAI,CAAC;QACH,2BAA2B;QAC3B,aAAa;QACb,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACnD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACpE,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,EAAE;QACJ,CAAC;QACD,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC;YACtC,QAAQ,EAAE;gBACR,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM;gBAC9B,aAAa,EAAE,YAAY;gBAC3B,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC;aACzC;SACF,CAAC,CAAC;QACH,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,8FAA8F,CAC/F,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;IAC/B,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,KAAK,IAAiB,EAAE;IACrC,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,CAAC;QACH,2BAA2B;QAC3B,aAAa;QACb,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACjC,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,KAAK;IACP,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE;QAClC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;KAC9C,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACvB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC;IACvB,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unchainedshop/mongodb",
|
|
3
|
-
"version": "3.0.0-
|
|
3
|
+
"version": "3.0.0-rc.12",
|
|
4
4
|
"description": "MongoDB provider for unchained platform",
|
|
5
5
|
"main": "lib/mongodb-index.js",
|
|
6
|
-
"exports": {
|
|
7
|
-
".": "./lib/mongodb-index.js",
|
|
8
|
-
"./*": "./lib/*"
|
|
9
|
-
},
|
|
10
6
|
"types": "lib/mongodb-index.d.ts",
|
|
11
7
|
"type": "module",
|
|
12
8
|
"scripts": {
|
|
13
|
-
"clean": "
|
|
14
|
-
"
|
|
9
|
+
"clean": "tsc -b --clean",
|
|
10
|
+
"build": "tsc -b",
|
|
11
|
+
"prepublishOnly": "npm run clean && npm run build",
|
|
15
12
|
"watch": "tsc -w",
|
|
16
13
|
"test": "NODE_OPTIONS=--experimental-vm-modules jest --detectOpenHandles --forceExit",
|
|
17
14
|
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch --detectOpenHandles --forceExit"
|
|
@@ -24,25 +21,37 @@
|
|
|
24
21
|
"unchained",
|
|
25
22
|
"ecommerce"
|
|
26
23
|
],
|
|
27
|
-
"
|
|
24
|
+
"authors": [
|
|
25
|
+
"Joël Meiller",
|
|
26
|
+
"Pascal Kaufmann"
|
|
27
|
+
],
|
|
28
28
|
"license": "EUPL-1.2",
|
|
29
29
|
"bugs": {
|
|
30
30
|
"url": "https://github.com/unchainedshop/unchained/issues"
|
|
31
31
|
},
|
|
32
32
|
"homepage": "https://github.com/unchainedshop/unchained#readme",
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@unchainedshop/utils": "^3.0.0-
|
|
34
|
+
"@unchainedshop/utils": "^3.0.0-rc.12"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
|
-
"@mongodb-js/zstd": "
|
|
38
|
-
"mongodb": "
|
|
37
|
+
"@mongodb-js/zstd": ">= 2.0 < 3",
|
|
38
|
+
"mongodb": ">= 6.12 < 7",
|
|
39
|
+
"mongodb-memory-server": ">= 10.1 < 11"
|
|
39
40
|
},
|
|
40
|
-
"
|
|
41
|
-
"mongodb
|
|
41
|
+
"peerDependenciesMeta": {
|
|
42
|
+
"mongodb": {
|
|
43
|
+
"optional": false
|
|
44
|
+
},
|
|
45
|
+
"@mongodb-js/zstd": {
|
|
46
|
+
"optional": true
|
|
47
|
+
},
|
|
48
|
+
"mongodb-memory-server": {
|
|
49
|
+
"optional": true
|
|
50
|
+
}
|
|
42
51
|
},
|
|
43
52
|
"devDependencies": {
|
|
44
|
-
"@types/node": "^22.
|
|
53
|
+
"@types/node": "^22.10.2",
|
|
45
54
|
"jest": "^29.7.0",
|
|
46
|
-
"typescript": "^5.
|
|
55
|
+
"typescript": "^5.7.2"
|
|
47
56
|
}
|
|
48
57
|
}
|
package/src/build-db-indexes.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Collection, Document, CreateIndexesOptions, IndexDirection } from 'mongodb';
|
|
2
|
+
import { createLogger } from '@unchainedshop/logger';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
const logger = createLogger('unchained:mongodb');
|
|
4
5
|
|
|
5
6
|
export type Indexes<T extends Document> = Array<{
|
|
6
7
|
index: { [key in keyof T]?: IndexDirection }; // TODO: Support key with object path (e.g. 'product.proxy.assignments')
|
|
@@ -17,7 +18,7 @@ const buildIndexes = <T>(
|
|
|
17
18
|
await collection.createIndex(index, options);
|
|
18
19
|
return false;
|
|
19
20
|
} catch (e: any) {
|
|
20
|
-
|
|
21
|
+
logger.error(e);
|
|
21
22
|
return e as Error;
|
|
22
23
|
}
|
|
23
24
|
}),
|
|
@@ -41,10 +42,8 @@ export const buildDbIndexes = async <T extends Document>(
|
|
|
41
42
|
const rebuildErrors = (await buildIndexes<T>(collection, indexes)).filter(Boolean);
|
|
42
43
|
|
|
43
44
|
if (rebuildErrors.length) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
...rebuildErrors,
|
|
47
|
-
});
|
|
45
|
+
logger.error(`Error building some indexes for ${collection.collectionName}`);
|
|
46
|
+
logger.debug(rebuildErrors);
|
|
48
47
|
success = false;
|
|
49
48
|
}
|
|
50
49
|
// }
|
package/src/build-sort-option.ts
CHANGED
|
@@ -1,24 +1,16 @@
|
|
|
1
|
-
import crypto from 'crypto';
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
2
|
* @name Random.hexString
|
|
5
3
|
* @summary Return a random string of `n` hexadecimal digits.
|
|
6
4
|
* @locus Anywhere
|
|
7
5
|
* @param {Number} n Length of the string
|
|
8
6
|
*/
|
|
7
|
+
function toHex(buffer) {
|
|
8
|
+
return Array.prototype.map.call(buffer, (x) => x.toString(16).padStart(2, '0')).join('');
|
|
9
|
+
}
|
|
10
|
+
|
|
9
11
|
export const generateDbObjectId = (digits = 24): string => {
|
|
10
12
|
const numBytes = Math.ceil(digits / 2);
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// non-cryptographically strong if not available.
|
|
14
|
-
try {
|
|
15
|
-
bytes = crypto.randomBytes(numBytes);
|
|
16
|
-
} catch {
|
|
17
|
-
// XXX should re-throw any error except insufficient entropy
|
|
18
|
-
bytes = crypto.pseudoRandomBytes(numBytes);
|
|
19
|
-
}
|
|
20
|
-
const result = bytes.toString('hex');
|
|
21
|
-
// If the number of digits is odd, we'll have generated an extra 4 bits
|
|
22
|
-
// of randomness, so we need to trim the last digit.
|
|
13
|
+
const bytes = crypto.getRandomValues(new Uint8Array(numBytes));
|
|
14
|
+
const result = toHex(bytes);
|
|
23
15
|
return result.substring(0, digits);
|
|
24
16
|
};
|
package/src/initDb.ts
CHANGED
|
@@ -1,24 +1,31 @@
|
|
|
1
|
-
import { mkdirSync } from 'fs';
|
|
2
1
|
import { Db, MongoClient } from 'mongodb';
|
|
3
2
|
|
|
4
3
|
let mongod;
|
|
5
4
|
|
|
6
5
|
export const startDb = async () => {
|
|
7
|
-
const { MongoMemoryServer } = await import('mongodb-memory-server');
|
|
8
|
-
|
|
9
6
|
try {
|
|
10
|
-
|
|
7
|
+
// eslint-disable-next-line
|
|
8
|
+
// @ts-ignore
|
|
9
|
+
const { mkdir } = await import('node:fs/promises');
|
|
10
|
+
const { MongoMemoryServer } = await import('mongodb-memory-server');
|
|
11
|
+
try {
|
|
12
|
+
await mkdir(`${process.cwd()}/.db`);
|
|
13
|
+
} catch {
|
|
14
|
+
//
|
|
15
|
+
}
|
|
16
|
+
mongod = await MongoMemoryServer.create({
|
|
17
|
+
instance: {
|
|
18
|
+
dbPath: `${process.cwd()}/.db`,
|
|
19
|
+
storageEngine: 'wiredTiger',
|
|
20
|
+
port: parseInt(process.env.PORT, 10) + 1,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
return `${mongod.getUri()}unchained`;
|
|
11
24
|
} catch {
|
|
12
|
-
|
|
25
|
+
throw new Error(
|
|
26
|
+
"Can't connect to MongoDB: could not start mongodb-memory-server and MONGO_URL env is not set",
|
|
27
|
+
);
|
|
13
28
|
}
|
|
14
|
-
mongod = await MongoMemoryServer.create({
|
|
15
|
-
instance: {
|
|
16
|
-
dbPath: `${process.cwd()}/.db`,
|
|
17
|
-
storageEngine: 'wiredTiger',
|
|
18
|
-
port: parseInt(process.env.PORT, 10) + 1,
|
|
19
|
-
},
|
|
20
|
-
});
|
|
21
|
-
return `${mongod.getUri()}unchained`;
|
|
22
29
|
};
|
|
23
30
|
|
|
24
31
|
export const stopDb = async () => {
|
|
@@ -28,6 +35,8 @@ export const stopDb = async () => {
|
|
|
28
35
|
const initDb = async (): Promise<Db> => {
|
|
29
36
|
let zstdEnabled = false;
|
|
30
37
|
try {
|
|
38
|
+
// eslint-disable-next-line
|
|
39
|
+
// @ts-ignore
|
|
31
40
|
await import('@mongodb-js/zstd');
|
|
32
41
|
zstdEnabled = true;
|
|
33
42
|
} catch {
|
package/tsconfig.json
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"extends": "../shared/base.tsconfig.json",
|
|
3
3
|
"compilerOptions": {
|
|
4
|
-
"
|
|
5
|
-
"
|
|
4
|
+
"declarationDir": "./lib",
|
|
5
|
+
"rootDir": "./src",
|
|
6
|
+
"outDir": "./lib"
|
|
6
7
|
},
|
|
7
|
-
"exclude": ["**/*.test.ts", "**/*.test.js", "tests"]
|
|
8
|
-
|
|
9
|
-
"./src"
|
|
10
|
-
]
|
|
11
|
-
}
|
|
8
|
+
"exclude": ["**/*.test.ts", "**/*.test.js", "tests", "lib"]
|
|
9
|
+
}
|