@unchainedshop/mongodb 3.0.0-alpha2 → 3.0.0-alpha4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"build-db-indexes.d.ts","sourceRoot":"","sources":["../src/build-db-indexes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG1F,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,qBA0BpB,CAAC"}
1
+ {"version":3,"file":"build-db-indexes.d.ts","sourceRoot":"","sources":["../src/build-db-indexes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI1F,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,qBA0BpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"build-db-indexes.js","sourceRoot":"","sources":["../src/build-db-indexes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAOtD,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,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAClC,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,GAAG,CAAC,mCAAmC,UAAU,CAAC,cAAc,EAAE,EAAE;gBAClE,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,GAAG,aAAa;aACjB,CAAC,CAAC;YACH,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QACD,IAAI;IACN,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
1
+ {"version":3,"file":"build-db-indexes.js","sourceRoot":"","sources":["../src/build-db-indexes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAOtD,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,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAClC,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,GAAG,CAAC,mCAAmC,UAAU,CAAC,cAAc,EAAE,EAAE;gBAClE,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,GAAG,aAAa;aACjB,CAAC,CAAC;YACH,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QACD,IAAI;IACN,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { SortOption } from '@unchainedshop/types/api.js';
1
+ import { SortOption } from '@unchainedshop/utils';
2
2
  import type { Sort } from 'mongodb';
3
3
  export declare const buildSortOptions: (sort?: Array<SortOption>) => Sort;
4
4
  export default buildSortOptions;
@@ -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,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAOpC,eAAO,MAAM,gBAAgB,UAAU,KAAK,CAAC,UAAU,CAAC,KAAQ,IAM/D,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
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,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAOpC,eAAO,MAAM,gBAAgB,UAAU,KAAK,CAAC,UAAU,CAAC,KAAQ,IAM/D,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1,5 +1,4 @@
1
- import { Locale } from '@unchainedshop/types/common.js';
2
1
  import type { Collection, Document, Filter } from 'mongodb';
3
- export declare const findLocalizedText: <T extends Document>(collection: Collection<T>, selector: Filter<T>, locale: Locale) => Promise<T>;
2
+ export declare const findLocalizedText: <T extends Document>(collection: Collection<T>, selector: Filter<T>, locale: Intl.Locale) => Promise<T>;
4
3
  export default findLocalizedText;
5
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,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAU5D,eAAO,MAAM,iBAAiB,GAAU,CAAC,SAAS,QAAQ,cAC5C,UAAU,CAAC,CAAC,CAAC,YACf,MAAM,CAAC,CAAC,CAAC,UACX,MAAM,KACb,OAAO,CAAC,CAAC,CAwBX,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"find-localized-text.d.ts","sourceRoot":"","sources":["../src/find-localized-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAU5D,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,7 +1,7 @@
1
1
  import { systemLocale } from '@unchainedshop/utils';
2
2
  const extendSelectorWithLocale = (selector, locale) => {
3
3
  const localeSelector = {
4
- locale: { $in: [locale.normalized, locale.language] },
4
+ locale: { $in: [locale.baseName, locale.language] },
5
5
  };
6
6
  return { ...localeSelector, ...selector };
7
7
  };
@@ -12,7 +12,7 @@ export const findLocalizedText = async (collection, selector, locale) => {
12
12
  if (exactTranslation) {
13
13
  return exactTranslation;
14
14
  }
15
- if (systemLocale.normalized !== locale.normalized) {
15
+ if (systemLocale.baseName !== locale.baseName) {
16
16
  const fallbackTranslation = await collection.findOne(extendSelectorWithLocale(selector, systemLocale), {
17
17
  sort: { updated: -1 },
18
18
  });
@@ -1 +1 @@
1
- {"version":3,"file":"find-localized-text.js","sourceRoot":"","sources":["../src/find-localized-text.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,wBAAwB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;IACpD,MAAM,cAAc,GAAG;QACrB,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;KACtD,CAAC;IACF,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,QAAQ,EAAE,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,UAAyB,EACzB,QAAmB,EACnB,MAAc,EACF,EAAE;IACd,MAAM,gBAAgB,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;QAC5F,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;KACtB,CAAC,CAAC;IACH,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,gBAAqB,CAAC;IAC/B,CAAC;IAED,IAAI,YAAY,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;QAClD,MAAM,mBAAmB,GAAG,MAAM,UAAU,CAAC,OAAO,CAClD,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,EAChD;YACE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;SACtB,CACF,CAAC;QACF,IAAI,mBAAmB,EAAE,CAAC;YACxB,OAAO,mBAAwB,CAAC;QAClC,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE;QACnD,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;KACtB,CAAC,CAAC;IACH,OAAO,SAAc,CAAC;AACxB,CAAC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"find-localized-text.js","sourceRoot":"","sources":["../src/find-localized-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,wBAAwB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;IACpD,MAAM,cAAc,GAAG;QACrB,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;KACpD,CAAC;IACF,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,QAAQ,EAAE,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,UAAyB,EACzB,QAAmB,EACnB,MAAmB,EACP,EAAE;IACd,MAAM,gBAAgB,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;QAC5F,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;KACtB,CAAC,CAAC;IACH,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,gBAAqB,CAAC;IAC/B,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC9C,MAAM,mBAAmB,GAAG,MAAM,UAAU,CAAC,OAAO,CAClD,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,EAChD;YACE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;SACtB,CACF,CAAC;QACF,IAAI,mBAAmB,EAAE,CAAC;YACxB,OAAO,mBAAwB,CAAC;QAClC,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE;QACnD,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;KACtB,CAAC,CAAC;IACH,OAAO,SAAc,CAAC;AACxB,CAAC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -13,7 +13,7 @@ export const generateDbObjectId = (digits = 24) => {
13
13
  try {
14
14
  bytes = crypto.randomBytes(numBytes);
15
15
  }
16
- catch (e) {
16
+ catch {
17
17
  // XXX should re-throw any error except insufficient entropy
18
18
  bytes = crypto.pseudoRandomBytes(numBytes);
19
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generate-db-object-id.js","sourceRoot":"","sources":["../src/generate-db-object-id.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;;;;GAKG;AACH,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,IAAI,KAAK,CAAC;IACV,+DAA+D;IAC/D,iDAAiD;IACjD,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,4DAA4D;QAC5D,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,uEAAuE;IACvE,oDAAoD;IACpD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC,CAAC"}
1
+ {"version":3,"file":"generate-db-object-id.js","sourceRoot":"","sources":["../src/generate-db-object-id.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;;;;GAKG;AACH,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,IAAI,KAAK,CAAC;IACV,+DAA+D;IAC/D,iDAAiD;IACjD,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;QAC5D,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,uEAAuE;IACvE,oDAAoD;IACpD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"initDb.d.ts","sourceRoot":"","sources":["../src/initDb.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAe,MAAM,SAAS,CAAC;AAI1C,eAAO,MAAM,OAAO,uBAgBnB,CAAC;AAEF,eAAO,MAAM,MAAM,qBAElB,CAAC;AAEF,QAAA,MAAM,MAAM,QAAa,OAAO,CAAC,EAAE,CAQlC,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"initDb.d.ts","sourceRoot":"","sources":["../src/initDb.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAe,MAAM,SAAS,CAAC;AAI1C,eAAO,MAAM,OAAO,uBAgBnB,CAAC;AAEF,eAAO,MAAM,MAAM,qBAElB,CAAC;AAEF,QAAA,MAAM,MAAM,QAAa,OAAO,CAAC,EAAE,CAgBlC,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC"}
package/lib/initDb.js CHANGED
@@ -6,7 +6,7 @@ export const startDb = async () => {
6
6
  try {
7
7
  mkdirSync(`${process.cwd()}/.db`);
8
8
  }
9
- catch (e) {
9
+ catch {
10
10
  //
11
11
  }
12
12
  mongod = await MongoMemoryServer.create({
@@ -22,9 +22,17 @@ export const stopDb = async () => {
22
22
  await mongod.stop();
23
23
  };
24
24
  const initDb = async () => {
25
+ let zstdEnabled = false;
26
+ try {
27
+ await import('@mongodb-js/zstd');
28
+ zstdEnabled = true;
29
+ }
30
+ catch {
31
+ /* */
32
+ }
25
33
  const url = process.env.MONGO_URL || (await startDb());
26
34
  const client = new MongoClient(url, {
27
- compressors: 'zstd',
35
+ compressors: zstdEnabled ? 'zstd' : undefined,
28
36
  });
29
37
  await client.connect();
30
38
  const db = client.db();
package/lib/initDb.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"initDb.js","sourceRoot":"","sources":["../src/initDb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAM,WAAW,EAAE,MAAM,SAAS,CAAC;AAE1C,IAAI,MAAM,CAAC;AAEX,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;IAChC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAEpE,IAAI,CAAC;QACH,SAAS,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,EAAE;IACJ,CAAC;IACD,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC;QACtC,QAAQ,EAAE;YACR,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM;YAC9B,aAAa,EAAE,YAAY;YAC3B,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC;SACzC;KACF,CAAC,CAAC;IACH,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;AACvC,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,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,MAAM;KACpB,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"}
1
+ {"version":3,"file":"initDb.js","sourceRoot":"","sources":["../src/initDb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAM,WAAW,EAAE,MAAM,SAAS,CAAC;AAE1C,IAAI,MAAM,CAAC;AAEX,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;IAChC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAEpE,IAAI,CAAC;QACH,SAAS,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,EAAE;IACJ,CAAC;IACD,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC;QACtC,QAAQ,EAAE;YACR,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM;YAC9B,aAAa,EAAE,YAAY;YAC3B,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC;SACzC;KACF,CAAC,CAAC;IACH,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;AACvC,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,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"}
@@ -1,13 +1,57 @@
1
1
  import * as mongodb from 'mongodb';
2
2
  export { initDb, startDb, stopDb } from './initDb.js';
3
- export { checkId } from './check-id.js';
4
3
  export { generateDbObjectId } from './generate-db-object-id.js';
5
4
  export { generateDbFilterById } from './generate-db-filter-by-id.js';
6
- export { generateDbMutations } from './generate-db-mutations.js';
7
5
  export { buildDbIndexes } from './build-db-indexes.js';
8
6
  export { findPreservingIds } from './find-preserving-ids.js';
9
7
  export { buildSortOptions } from './build-sort-option.js';
10
8
  export { findLocalizedText } from './find-localized-text.js';
11
9
  export { emailRegexOperator } from './email-regex-operator.js';
12
10
  export { mongodb };
11
+ export type LogFields = {
12
+ log: Array<{
13
+ date: Date;
14
+ status?: string;
15
+ info: string;
16
+ }>;
17
+ };
18
+ export type TimestampFields = {
19
+ created?: Date;
20
+ updated?: Date;
21
+ deleted?: Date;
22
+ };
23
+ export interface Address {
24
+ addressLine?: string;
25
+ addressLine2?: string;
26
+ city?: string;
27
+ company?: string;
28
+ countryCode?: string;
29
+ firstName?: string;
30
+ lastName?: string;
31
+ postalCode?: string;
32
+ regionCode?: string;
33
+ }
34
+ export interface Contact {
35
+ telNumber?: string;
36
+ emailAddress?: string;
37
+ }
38
+ export interface Migration<Context = unknown> {
39
+ id: number;
40
+ name: string;
41
+ up: (params: {
42
+ logger: any | Console;
43
+ unchainedAPI: Context;
44
+ }) => Promise<void>;
45
+ }
46
+ export interface MigrationRepository<Context = unknown> {
47
+ db: mongodb.Db;
48
+ migrations: Map<number, Migration<Context>>;
49
+ register: (migration: Migration<Context>) => void;
50
+ allMigrations: () => Array<Migration<Context>>;
51
+ }
52
+ export interface ModuleInput<Options extends Record<string, any>> {
53
+ db: mongodb.Db;
54
+ migrationRepository?: MigrationRepository;
55
+ options?: Options;
56
+ }
13
57
  //# sourceMappingURL=mongodb-index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mongodb-index.d.ts","sourceRoot":"","sources":["../src/mongodb-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAMtD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"mongodb-index.d.ts","sourceRoot":"","sources":["../src/mongodb-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAMtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,KAAK,CAAC;QACT,IAAI,EAAE,IAAI,CAAC;QACX,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB,CAAC;AAEF,MAAM,WAAW,OAAO;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS,CAAC,OAAO,GAAG,OAAO;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,mBAAmB,CAAC,OAAO,GAAG,OAAO;IACpD,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC;IACf,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5C,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAClD,aAAa,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,WAAW,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC9D,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC;IACf,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
@@ -3,10 +3,8 @@ export { initDb, startDb, stopDb } from './initDb.js';
3
3
  /*
4
4
  * Db utils
5
5
  */
6
- export { checkId } from './check-id.js';
7
6
  export { generateDbObjectId } from './generate-db-object-id.js';
8
7
  export { generateDbFilterById } from './generate-db-filter-by-id.js';
9
- export { generateDbMutations } from './generate-db-mutations.js';
10
8
  export { buildDbIndexes } from './build-db-indexes.js';
11
9
  export { findPreservingIds } from './find-preserving-ids.js';
12
10
  export { buildSortOptions } from './build-sort-option.js';
@@ -1 +1 @@
1
- {"version":3,"file":"mongodb-index.js","sourceRoot":"","sources":["../src/mongodb-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEtD;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"mongodb-index.js","sourceRoot":"","sources":["../src/mongodb-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEtD;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unchainedshop/mongodb",
3
- "version": "3.0.0-alpha2",
3
+ "version": "3.0.0-alpha4",
4
4
  "description": "MongoDB provider for unchained platform",
5
5
  "main": "lib/mongodb-index.js",
6
6
  "exports": {
@@ -31,19 +31,18 @@
31
31
  },
32
32
  "homepage": "https://github.com/unchainedshop/unchained#readme",
33
33
  "dependencies": {
34
- "@unchainedshop/utils": "^3.0.0-alpha2"
34
+ "@unchainedshop/utils": "^3.0.0-alpha4"
35
35
  },
36
36
  "peerDependencies": {
37
- "@mongodb-js/zstd": "^1.2.0",
38
- "mongodb": "=6.7.0"
37
+ "@mongodb-js/zstd": "^1.2.2",
38
+ "mongodb": "^6.10.0"
39
39
  },
40
40
  "optionalDependencies": {
41
41
  "mongodb-memory-server": "^10.0.0"
42
42
  },
43
43
  "devDependencies": {
44
- "@types/node": "^20.14.12",
45
- "@unchainedshop/types": "^3.0.0-alpha2",
44
+ "@types/node": "^22.7.8",
46
45
  "jest": "^29.7.0",
47
- "typescript": "^5.5.4"
46
+ "typescript": "^5.6.3"
48
47
  }
49
48
  }
@@ -1,4 +1,5 @@
1
1
  import type { Collection, Document, CreateIndexesOptions, IndexDirection } from 'mongodb';
2
+
2
3
  import { log, LogLevel } from '@unchainedshop/logger';
3
4
 
4
5
  export type Indexes<T extends Document> = Array<{
@@ -1,4 +1,4 @@
1
- import { SortOption } from '@unchainedshop/types/api.js';
1
+ import { SortOption } from '@unchainedshop/utils';
2
2
  import type { Sort } from 'mongodb';
3
3
 
4
4
  const SORT_DIRECTIONS = {
@@ -1,10 +1,9 @@
1
- import { Locale } from '@unchainedshop/types/common.js';
2
1
  import type { Collection, Document, Filter } from 'mongodb';
3
2
  import { systemLocale } from '@unchainedshop/utils';
4
3
 
5
4
  const extendSelectorWithLocale = (selector, locale) => {
6
5
  const localeSelector = {
7
- locale: { $in: [locale.normalized, locale.language] },
6
+ locale: { $in: [locale.baseName, locale.language] },
8
7
  };
9
8
  return { ...localeSelector, ...selector };
10
9
  };
@@ -12,7 +11,7 @@ const extendSelectorWithLocale = (selector, locale) => {
12
11
  export const findLocalizedText = async <T extends Document>(
13
12
  collection: Collection<T>,
14
13
  selector: Filter<T>,
15
- locale: Locale,
14
+ locale: Intl.Locale,
16
15
  ): Promise<T> => {
17
16
  const exactTranslation = await collection.findOne(extendSelectorWithLocale(selector, locale), {
18
17
  sort: { updated: -1 },
@@ -21,7 +20,7 @@ export const findLocalizedText = async <T extends Document>(
21
20
  return exactTranslation as T;
22
21
  }
23
22
 
24
- if (systemLocale.normalized !== locale.normalized) {
23
+ if (systemLocale.baseName !== locale.baseName) {
25
24
  const fallbackTranslation = await collection.findOne(
26
25
  extendSelectorWithLocale(selector, systemLocale),
27
26
  {
@@ -13,7 +13,7 @@ export const generateDbObjectId = (digits = 24): string => {
13
13
  // non-cryptographically strong if not available.
14
14
  try {
15
15
  bytes = crypto.randomBytes(numBytes);
16
- } catch (e) {
16
+ } catch {
17
17
  // XXX should re-throw any error except insufficient entropy
18
18
  bytes = crypto.pseudoRandomBytes(numBytes);
19
19
  }
package/src/initDb.ts CHANGED
@@ -8,7 +8,7 @@ export const startDb = async () => {
8
8
 
9
9
  try {
10
10
  mkdirSync(`${process.cwd()}/.db`);
11
- } catch (e) {
11
+ } catch {
12
12
  //
13
13
  }
14
14
  mongod = await MongoMemoryServer.create({
@@ -26,9 +26,17 @@ export const stopDb = async () => {
26
26
  };
27
27
 
28
28
  const initDb = async (): Promise<Db> => {
29
+ let zstdEnabled = false;
30
+ try {
31
+ await import('@mongodb-js/zstd');
32
+ zstdEnabled = true;
33
+ } catch {
34
+ /* */
35
+ }
36
+
29
37
  const url = process.env.MONGO_URL || (await startDb());
30
38
  const client = new MongoClient(url, {
31
- compressors: 'zstd',
39
+ compressors: zstdEnabled ? 'zstd' : undefined,
32
40
  });
33
41
  await client.connect();
34
42
  const db = client.db();
@@ -1,71 +1,38 @@
1
- import { SortDirection } from '@unchainedshop/types/api.js';
2
- import {
3
- buildSortOptions,
4
- checkId,
5
- generateDbObjectId,
6
- } from './mongodb-index.js';
1
+ import { SortDirection } from '@unchainedshop/utils';
2
+ import { buildSortOptions, generateDbObjectId } from './mongodb-index.js';
7
3
 
8
4
  describe('Mongo', () => {
9
- it('Init', async () => {
10
- expect(true).toBeTruthy()
5
+ it('Init', () => {
6
+ expect(true).toBeTruthy();
11
7
  });
12
8
 
13
9
  describe('buildSortOptions', () => {
14
10
  it('should return the correct db sort format', () => {
15
- const sort = [ { key: 'name', value: SortDirection.ASC }, { key: 'age', value: SortDirection.DESC }, ];
11
+ const sort = [
12
+ { key: 'name', value: SortDirection.ASC },
13
+ { key: 'age', value: SortDirection.DESC },
14
+ ];
16
15
  expect(buildSortOptions(sort)).toEqual({ name: 1, age: -1 });
17
- })
18
-
19
- });
20
-
21
- describe('checkId', () => {
22
- it('with a string value', () => {
23
- const value = '12345';
24
- const error = { message: 'Invalid id' };
25
-
26
- expect(() => checkId(value, error)).not.toThrow();
27
16
  });
28
-
29
- it('with a non-string value', () => {
30
- const value: any = 12345;
31
- const error = { message: 'Invalid id' };
32
-
33
- expect(() => checkId(value, error)).toThrow('Invalid id');
17
+ });
18
+
19
+ describe('generateDbObjectId', () => {
20
+ it('generateDbObjectId with default digits', () => {
21
+ const result = generateDbObjectId();
22
+ expect(typeof result).toBe('string');
23
+ expect(result.length).toBe(24);
34
24
  });
35
-
36
- it('with a different error object', () => {
37
- const value:any = 12345;
38
- const error = { message: 'Invalid id', path: 'name' };
39
-
40
- expect(() => checkId(value, error)).toThrow('Invalid id');
25
+
26
+ it('generateDbObjectId with odd digits', () => {
27
+ const result = generateDbObjectId(23);
28
+ expect(typeof result).toBe('string');
29
+ expect(result.length).toBe(23);
41
30
  });
42
-
43
- it('without an error object', () => {
44
- const value: any = 12345;
45
-
46
- expect(() => checkId(value)).toThrow();
31
+
32
+ it('generateDbObjectId with even digits', () => {
33
+ const result = generateDbObjectId(24);
34
+ expect(typeof result).toBe('string');
35
+ expect(result.length).toBe(24);
47
36
  });
48
-
49
37
  });
50
- describe('generateDbObjectId', () => {
51
- it('generateDbObjectId with default digits', () => {
52
- const result = generateDbObjectId();
53
- expect(typeof result).toBe('string');
54
- expect(result.length).toBe(24);
55
- });
56
-
57
- it('generateDbObjectId with odd digits', () => {
58
- const result = generateDbObjectId(23);
59
- expect(typeof result).toBe('string');
60
- expect(result.length).toBe(23);
61
- });
62
-
63
- it('generateDbObjectId with even digits', () => {
64
- const result = generateDbObjectId(24);
65
- expect(typeof result).toBe('string');
66
- expect(result.length).toBe(24);
67
- });
68
-
69
- })
70
38
  });
71
-
@@ -6,10 +6,8 @@ export { initDb, startDb, stopDb } from './initDb.js';
6
6
  * Db utils
7
7
  */
8
8
 
9
- export { checkId } from './check-id.js';
10
9
  export { generateDbObjectId } from './generate-db-object-id.js';
11
10
  export { generateDbFilterById } from './generate-db-filter-by-id.js';
12
- export { generateDbMutations } from './generate-db-mutations.js';
13
11
  export { buildDbIndexes } from './build-db-indexes.js';
14
12
  export { findPreservingIds } from './find-preserving-ids.js';
15
13
  export { buildSortOptions } from './build-sort-option.js';
@@ -17,3 +15,53 @@ export { findLocalizedText } from './find-localized-text.js';
17
15
  export { emailRegexOperator } from './email-regex-operator.js';
18
16
 
19
17
  export { mongodb };
18
+
19
+ export type LogFields = {
20
+ log: Array<{
21
+ date: Date;
22
+ status?: string;
23
+ info: string;
24
+ }>;
25
+ };
26
+
27
+ export type TimestampFields = {
28
+ created?: Date;
29
+ updated?: Date;
30
+ deleted?: Date;
31
+ };
32
+
33
+ export interface Address {
34
+ addressLine?: string;
35
+ addressLine2?: string;
36
+ city?: string;
37
+ company?: string;
38
+ countryCode?: string;
39
+ firstName?: string;
40
+ lastName?: string;
41
+ postalCode?: string;
42
+ regionCode?: string;
43
+ }
44
+
45
+ export interface Contact {
46
+ telNumber?: string;
47
+ emailAddress?: string;
48
+ }
49
+
50
+ export interface Migration<Context = unknown> {
51
+ id: number;
52
+ name: string;
53
+ up: (params: { logger: any | Console; unchainedAPI: Context }) => Promise<void>;
54
+ }
55
+
56
+ export interface MigrationRepository<Context = unknown> {
57
+ db: mongodb.Db;
58
+ migrations: Map<number, Migration<Context>>;
59
+ register: (migration: Migration<Context>) => void;
60
+ allMigrations: () => Array<Migration<Context>>;
61
+ }
62
+
63
+ export interface ModuleInput<Options extends Record<string, any>> {
64
+ db: mongodb.Db;
65
+ migrationRepository?: MigrationRepository;
66
+ options?: Options;
67
+ }
package/lib/check-id.d.ts DELETED
@@ -1,5 +0,0 @@
1
- export declare const checkId: (value: string, error?: {
2
- message: string;
3
- path?: string | undefined;
4
- } | undefined) => void;
5
- //# sourceMappingURL=check-id.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-id.d.ts","sourceRoot":"","sources":["../src/check-id.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UACX,MAAM,UAET;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,GACD,SAAS,KACZ,IAIF,CAAC"}
package/lib/check-id.js DELETED
@@ -1,6 +0,0 @@
1
- export const checkId = (value, error) => {
2
- if (typeof value !== 'string') {
3
- throw error || { message: 'Invalid id' };
4
- }
5
- };
6
- //# sourceMappingURL=check-id.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-id.js","sourceRoot":"","sources":["../src/check-id.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,KAAa,EACb,KAKa,EACP,EAAE;IACR,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,KAAK,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC,CAAC"}
@@ -1,11 +0,0 @@
1
- import SimpleSchema from 'simpl-schema';
2
- import { TimestampFields } from '@unchainedshop/types/common.js';
3
- import { ModuleCreateMutation, ModuleMutations } from '@unchainedshop/types/core.js';
4
- import { Collection } from 'mongodb';
5
- export declare const generateDbMutations: <T extends TimestampFields & {
6
- _id?: string;
7
- }>(collection: Collection<T>, schema: SimpleSchema, options?: {
8
- hasCreateOnly?: boolean;
9
- permanentlyDeleteByDefault?: boolean;
10
- }) => ModuleMutations<T> | ModuleCreateMutation<T>;
11
- //# sourceMappingURL=generate-db-mutations.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-db-mutations.d.ts","sourceRoot":"","sources":["../src/generate-db-mutations.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,UAAU,EAAgB,MAAM,SAAS,CAAC;AAKnD,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,eAAe,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,cAClE,UAAU,CAAC,CAAC,CAAC,UACjB,YAAY,YACV;IACR,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,KACA,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CA6E7C,CAAC"}
@@ -1,73 +0,0 @@
1
- import { checkId } from './check-id.js';
2
- import { generateDbObjectId } from './generate-db-object-id.js';
3
- import { generateDbFilterById } from './generate-db-filter-by-id.js';
4
- export const generateDbMutations = (collection, schema, options) => {
5
- if (!collection)
6
- throw new Error('Collection is missing');
7
- if (!schema)
8
- throw new Error('Schema is missing');
9
- const { hasCreateOnly, permanentlyDeleteByDefault } = options || {
10
- hasCreateOnly: false,
11
- permanentlyDeleteByDefault: false,
12
- };
13
- const deletePermanently = async (_id) => {
14
- checkId(_id);
15
- const filter = generateDbFilterById(_id);
16
- const result = await collection.deleteOne(filter);
17
- return result.deletedCount;
18
- };
19
- return {
20
- create: async (doc) => {
21
- const values = schema.clean(doc);
22
- values.created = new Date();
23
- schema.validate(values);
24
- values._id = doc._id || generateDbObjectId();
25
- const result = await collection.insertOne(values);
26
- return result.insertedId;
27
- },
28
- update: hasCreateOnly
29
- ? undefined
30
- : async (_id, doc) => {
31
- checkId(_id);
32
- let modifier;
33
- if (doc?.$set) {
34
- const values = schema.clean(doc, { isModifier: true });
35
- modifier = {
36
- ...values,
37
- $set: {
38
- ...(values.$set || {}),
39
- updated: new Date(),
40
- },
41
- };
42
- }
43
- else {
44
- const values = schema.clean(doc);
45
- modifier = {
46
- $set: {
47
- ...values,
48
- updated: new Date(),
49
- },
50
- };
51
- }
52
- schema.validate(modifier, { modifier: true });
53
- const filter = generateDbFilterById(_id, { deleted: null });
54
- await collection.updateOne(filter, modifier);
55
- return _id;
56
- },
57
- deletePermanently: hasCreateOnly ? undefined : deletePermanently,
58
- delete: hasCreateOnly
59
- ? undefined
60
- : async (_id) => {
61
- if (permanentlyDeleteByDefault) {
62
- return deletePermanently(_id);
63
- }
64
- checkId(_id);
65
- const filter = generateDbFilterById(_id, { deleted: null });
66
- const modifier = { $set: { deleted: new Date() } };
67
- const values = schema.clean(modifier, { isModifier: true });
68
- const result = await collection.updateOne(filter, values);
69
- return result.modifiedCount;
70
- },
71
- };
72
- };
73
- //# sourceMappingURL=generate-db-mutations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-db-mutations.js","sourceRoot":"","sources":["../src/generate-db-mutations.ts"],"names":[],"mappings":"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"}
package/src/check-id.ts DELETED
@@ -1,13 +0,0 @@
1
- export const checkId = (
2
- value: string,
3
- error?:
4
- | {
5
- message: string;
6
- path?: string | undefined;
7
- }
8
- | undefined,
9
- ): void => {
10
- if (typeof value !== 'string') {
11
- throw error || { message: 'Invalid id' };
12
- }
13
- };
@@ -1,93 +0,0 @@
1
- import SimpleSchema from 'simpl-schema';
2
- import { TimestampFields } from '@unchainedshop/types/common.js';
3
- import { ModuleCreateMutation, ModuleMutations } from '@unchainedshop/types/core.js';
4
- import { Collection, UpdateFilter } from 'mongodb';
5
- import { checkId } from './check-id.js';
6
- import { generateDbObjectId } from './generate-db-object-id.js';
7
- import { generateDbFilterById } from './generate-db-filter-by-id.js';
8
-
9
- export const generateDbMutations = <T extends TimestampFields & { _id?: string }>(
10
- collection: Collection<T>,
11
- schema: SimpleSchema,
12
- options?: {
13
- hasCreateOnly?: boolean;
14
- permanentlyDeleteByDefault?: boolean;
15
- },
16
- ): ModuleMutations<T> | ModuleCreateMutation<T> => {
17
- if (!collection) throw new Error('Collection is missing');
18
- if (!schema) throw new Error('Schema is missing');
19
-
20
- const { hasCreateOnly, permanentlyDeleteByDefault } = options || {
21
- hasCreateOnly: false,
22
- permanentlyDeleteByDefault: false,
23
- };
24
-
25
- const deletePermanently = async (_id) => {
26
- checkId(_id);
27
- const filter = generateDbFilterById<T>(_id);
28
- const result = await collection.deleteOne(filter);
29
- return result.deletedCount;
30
- };
31
-
32
- return {
33
- create: async (doc) => {
34
- const values: any = schema.clean(doc);
35
- values.created = new Date();
36
- schema.validate(values);
37
- values._id = doc._id || generateDbObjectId();
38
-
39
- const result = await collection.insertOne(values);
40
- return result.insertedId as string;
41
- },
42
-
43
- update: hasCreateOnly
44
- ? undefined
45
- : async (_id, doc) => {
46
- checkId(_id);
47
-
48
- let modifier: UpdateFilter<T>;
49
-
50
- if ((doc as UpdateFilter<T>)?.$set) {
51
- const values: any = schema.clean(doc as any, { isModifier: true });
52
- modifier = {
53
- ...values,
54
- $set: {
55
- ...(values.$set || {}),
56
- updated: new Date(),
57
- },
58
- };
59
- } else {
60
- const values: any = schema.clean(doc as any);
61
- modifier = {
62
- $set: {
63
- ...values,
64
- updated: new Date(),
65
- },
66
- };
67
- }
68
-
69
- schema.validate(modifier, { modifier: true });
70
- const filter = generateDbFilterById<T>(_id, { deleted: null });
71
- await collection.updateOne(filter, modifier);
72
-
73
- return _id;
74
- },
75
-
76
- deletePermanently: hasCreateOnly ? undefined : deletePermanently,
77
-
78
- delete: hasCreateOnly
79
- ? undefined
80
- : async (_id) => {
81
- if (permanentlyDeleteByDefault) {
82
- return deletePermanently(_id);
83
- }
84
- checkId(_id);
85
- const filter = generateDbFilterById<T>(_id, { deleted: null });
86
- const modifier = { $set: { deleted: new Date() } };
87
- const values = schema.clean(modifier, { isModifier: true });
88
- const result = await collection.updateOne(filter, values);
89
-
90
- return result.modifiedCount;
91
- },
92
- };
93
- };