@unchainedshop/core-languages 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,4 +1,4 @@
1
1
  import { mongodb } from '@unchainedshop/mongodb';
2
- import { Language } from '@unchainedshop/types/languages.js';
2
+ import { Language } from '@unchainedshop/core-languages';
3
3
  export declare const LanguagesCollection: (db: mongodb.Db) => Promise<mongodb.Collection<Language>>;
4
4
  //# sourceMappingURL=LanguagesCollection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LanguagesCollection.d.ts","sourceRoot":"","sources":["../../src/db/LanguagesCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAkB,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAE7D,eAAO,MAAM,mBAAmB,OAAc,OAAO,CAAC,EAAE,0CAuBvD,CAAC"}
1
+ {"version":3,"file":"LanguagesCollection.d.ts","sourceRoot":"","sources":["../../src/db/LanguagesCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAkB,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD,eAAO,MAAM,mBAAmB,OAAc,OAAO,CAAC,EAAE,0CAuBvD,CAAC"}
@@ -1,2 +1,2 @@
1
- export { configureLanguagesModule } from './module/configureLanguagesModule.js';
1
+ export * from './module/configureLanguagesModule.js';
2
2
  //# sourceMappingURL=languages-index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"languages-index.d.ts","sourceRoot":"","sources":["../src/languages-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC"}
1
+ {"version":3,"file":"languages-index.d.ts","sourceRoot":"","sources":["../src/languages-index.ts"],"names":[],"mappings":"AAAA,cAAc,sCAAsC,CAAC"}
@@ -1,2 +1,2 @@
1
- export { configureLanguagesModule } from './module/configureLanguagesModule.js';
1
+ export * from './module/configureLanguagesModule.js';
2
2
  //# sourceMappingURL=languages-index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"languages-index.js","sourceRoot":"","sources":["../src/languages-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC"}
1
+ {"version":3,"file":"languages-index.js","sourceRoot":"","sources":["../src/languages-index.ts"],"names":[],"mappings":"AAAA,cAAc,sCAAsC,CAAC"}
@@ -1,9 +1,38 @@
1
- import { ModuleInput } from '@unchainedshop/types/core.js';
2
- import { LanguagesModule, LanguageQuery } from '@unchainedshop/types/languages.js';
1
+ import { ModuleInput } from '@unchainedshop/mongodb';
2
+ import { TimestampFields, mongodb } from '@unchainedshop/mongodb';
3
+ import { SortOption } from '@unchainedshop/utils';
4
+ export type Language = {
5
+ _id?: string;
6
+ isoCode: string;
7
+ isActive?: boolean;
8
+ } & TimestampFields;
9
+ export type LanguageQuery = {
10
+ includeInactive?: boolean;
11
+ queryString?: string;
12
+ };
3
13
  export declare const buildFindSelector: ({ includeInactive, queryString }: LanguageQuery) => {
4
14
  isActive?: true;
5
15
  deleted?: Date;
6
16
  $text?: any;
7
17
  };
8
- export declare const configureLanguagesModule: ({ db, }: ModuleInput<Record<string, never>>) => Promise<LanguagesModule>;
18
+ export declare const configureLanguagesModule: ({ db }: ModuleInput<Record<string, never>>) => Promise<{
19
+ findLanguage: ({ languageId, isoCode, }: {
20
+ languageId?: string;
21
+ isoCode?: string;
22
+ }) => Promise<Language>;
23
+ findLanguages: ({ limit, offset, sort, ...query }: LanguageQuery & {
24
+ limit?: number;
25
+ offset?: number;
26
+ sort?: Array<SortOption>;
27
+ }, options?: mongodb.FindOptions) => Promise<Array<Language>>;
28
+ count: (query: LanguageQuery) => Promise<number>;
29
+ languageExists: ({ languageId }: {
30
+ languageId: string;
31
+ }) => Promise<boolean>;
32
+ isBase(language: Language): boolean;
33
+ create: (doc: Language) => Promise<string>;
34
+ update: (languageId: any, doc: any) => Promise<any>;
35
+ delete: (languageId: any) => Promise<number>;
36
+ }>;
37
+ export type LanguagesModule = Awaited<ReturnType<typeof configureLanguagesModule>>;
9
38
  //# sourceMappingURL=configureLanguagesModule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"configureLanguagesModule.d.ts","sourceRoot":"","sources":["../../src/module/configureLanguagesModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAmB,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAY,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAU7F,eAAO,MAAM,iBAAiB,qCAA8C,aAAa;eAC1D,IAAI;cAAY,IAAI;YAAU,GAAG;CAM/D,CAAC;AAEF,eAAO,MAAM,wBAAwB,YAElC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,KAAG,OAAO,CAAC,eAAe,CAqE9D,CAAC"}
1
+ {"version":3,"file":"configureLanguagesModule.d.ts","sourceRoot":"","sources":["../../src/module/configureLanguagesModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAGL,eAAe,EACf,OAAO,EAER,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAiB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIjE,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,eAAe,CAAC;AAEpB,MAAM,MAAM,aAAa,GAAG;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAIF,eAAO,MAAM,iBAAiB,qCAA8C,aAAa;eAC1D,IAAI;cAAY,IAAI;YAAU,GAAG;CAM/D,CAAC;AAEF,eAAO,MAAM,wBAAwB,WAAkB,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;6CASlF;QACD,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,KAAG,OAAO,CAAC,QAAQ,CAAC;uDAUhB,aAAa,GAAG;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;KAC1B,YACS,OAAO,CAAC,WAAW,KAC5B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;mBAUN,aAAa,KAAG,OAAO,CAAC,MAAM,CAAC;qCAKb;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,KAAG,OAAO,CAAC,OAAO,CAAC;qBAU/D,QAAQ,GAAG,OAAO;kBAIf,QAAQ;;;EAsC/B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC"}
@@ -1,9 +1,8 @@
1
1
  import { emit, registerEvents } from '@unchainedshop/events';
2
- import { generateDbMutations, generateDbFilterById, buildSortOptions } from '@unchainedshop/mongodb';
3
- import { SortDirection } from '@unchainedshop/types/api.js';
2
+ import { generateDbFilterById, buildSortOptions, generateDbObjectId, } from '@unchainedshop/mongodb';
3
+ import { SortDirection } from '@unchainedshop/utils';
4
4
  import { systemLocale } from '@unchainedshop/utils';
5
5
  import { LanguagesCollection } from '../db/LanguagesCollection.js';
6
- import { LanguagesSchema } from '../db/LanguagesSchema.js';
7
6
  const LANGUAGE_EVENTS = ['LANGUAGE_CREATE', 'LANGUAGE_UPDATE', 'LANGUAGE_REMOVE'];
8
7
  export const buildFindSelector = ({ includeInactive = false, queryString }) => {
9
8
  const selector = { deleted: null };
@@ -14,12 +13,11 @@ export const buildFindSelector = ({ includeInactive = false, queryString }) => {
14
13
  }
15
14
  return selector;
16
15
  };
17
- export const configureLanguagesModule = async ({ db, }) => {
16
+ export const configureLanguagesModule = async ({ db }) => {
18
17
  registerEvents(LANGUAGE_EVENTS);
19
18
  const Languages = await LanguagesCollection(db);
20
- const mutations = generateDbMutations(Languages, LanguagesSchema);
21
19
  return {
22
- findLanguage: async ({ languageId, isoCode }) => {
20
+ findLanguage: async ({ languageId, isoCode, }) => {
23
21
  return Languages.findOne(languageId ? generateDbFilterById(languageId) : { isoCode }, {});
24
22
  },
25
23
  findLanguages: async ({ limit, offset, sort, ...query }, options) => {
@@ -46,7 +44,9 @@ export const configureLanguagesModule = async ({ db, }) => {
46
44
  },
47
45
  create: async (doc) => {
48
46
  await Languages.deleteOne({ isoCode: doc.isoCode.toLowerCase(), deleted: { $ne: null } });
49
- const languageId = await mutations.create({
47
+ const { insertedId: languageId } = await Languages.insertOne({
48
+ _id: generateDbObjectId(),
49
+ created: new Date(),
50
50
  ...doc,
51
51
  isoCode: doc.isoCode.toLowerCase(),
52
52
  isActive: true,
@@ -55,19 +55,25 @@ export const configureLanguagesModule = async ({ db, }) => {
55
55
  return languageId;
56
56
  },
57
57
  update: async (languageId, doc) => {
58
- await mutations.update(languageId, {
59
- ...doc,
60
- isoCode: doc.isoCode.toLowerCase(),
58
+ await Languages.updateOne(generateDbFilterById(languageId), {
59
+ $set: {
60
+ updated: new Date(),
61
+ ...doc,
62
+ isoCode: doc.isoCode.toLowerCase(),
63
+ },
61
64
  });
62
65
  await emit('LANGUAGE_UPDATE', { languageId });
63
66
  return languageId;
64
67
  },
65
68
  delete: async (languageId) => {
66
- const deletedCount = await mutations.delete(languageId);
69
+ const { modifiedCount: deletedCount } = await Languages.updateOne(generateDbFilterById(languageId), {
70
+ $set: {
71
+ deleted: new Date(),
72
+ },
73
+ });
67
74
  await emit('LANGUAGE_REMOVE', { languageId });
68
75
  return deletedCount;
69
76
  },
70
- deletePermanently: mutations.deletePermanently,
71
77
  };
72
78
  };
73
79
  //# sourceMappingURL=configureLanguagesModule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configureLanguagesModule.js","sourceRoot":"","sources":["../../src/module/configureLanguagesModule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configureLanguagesModule.js","sourceRoot":"","sources":["../../src/module/configureLanguagesModule.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unchainedshop/core-languages",
3
- "version": "3.0.0-alpha2",
3
+ "version": "3.0.0-alpha4",
4
4
  "main": "lib/languages-index.js",
5
5
  "exports": {
6
6
  ".": "./lib/languages-index.js",
@@ -31,15 +31,13 @@
31
31
  },
32
32
  "homepage": "https://github.com/unchainedshop/unchained#readme",
33
33
  "dependencies": {
34
- "@unchainedshop/events": "^3.0.0-alpha2",
35
- "@unchainedshop/utils": "^3.0.0-alpha2",
36
- "simpl-schema": "^3.4.6"
34
+ "@unchainedshop/events": "^3.0.0-alpha4",
35
+ "@unchainedshop/utils": "^3.0.0-alpha4"
37
36
  },
38
37
  "devDependencies": {
39
- "@types/node": "^20.14.12",
40
- "@unchainedshop/types": "^3.0.0-alpha2",
38
+ "@types/node": "^22.7.8",
41
39
  "jest": "^29.7.0",
42
- "ts-jest": "^29.2.3",
43
- "typescript": "^5.5.4"
40
+ "ts-jest": "^29.2.5",
41
+ "typescript": "^5.6.3"
44
42
  }
45
43
  }
@@ -1,5 +1,5 @@
1
1
  import { mongodb, buildDbIndexes } from '@unchainedshop/mongodb';
2
- import { Language } from '@unchainedshop/types/languages.js';
2
+ import { Language } from '@unchainedshop/core-languages';
3
3
 
4
4
  export const LanguagesCollection = async (db: mongodb.Db) => {
5
5
  const Languages = db.collection<Language>('languages');
@@ -1 +1 @@
1
- export { configureLanguagesModule } from './module/configureLanguagesModule.js';
1
+ export * from './module/configureLanguagesModule.js';
@@ -1,11 +1,26 @@
1
- import { ModuleInput, ModuleMutations } from '@unchainedshop/types/core.js';
2
- import { LanguagesModule, Language, LanguageQuery } from '@unchainedshop/types/languages.js';
1
+ import { ModuleInput } from '@unchainedshop/mongodb';
3
2
  import { emit, registerEvents } from '@unchainedshop/events';
4
- import { generateDbMutations, generateDbFilterById, buildSortOptions } from '@unchainedshop/mongodb';
5
- import { SortDirection, SortOption } from '@unchainedshop/types/api.js';
3
+ import {
4
+ generateDbFilterById,
5
+ buildSortOptions,
6
+ TimestampFields,
7
+ mongodb,
8
+ generateDbObjectId,
9
+ } from '@unchainedshop/mongodb';
10
+ import { SortDirection, SortOption } from '@unchainedshop/utils';
6
11
  import { systemLocale } from '@unchainedshop/utils';
7
12
  import { LanguagesCollection } from '../db/LanguagesCollection.js';
8
- import { LanguagesSchema } from '../db/LanguagesSchema.js';
13
+
14
+ export type Language = {
15
+ _id?: string;
16
+ isoCode: string;
17
+ isActive?: boolean;
18
+ } & TimestampFields;
19
+
20
+ export type LanguageQuery = {
21
+ includeInactive?: boolean;
22
+ queryString?: string;
23
+ };
9
24
 
10
25
  const LANGUAGE_EVENTS: string[] = ['LANGUAGE_CREATE', 'LANGUAGE_UPDATE', 'LANGUAGE_REMOVE'];
11
26
 
@@ -18,24 +33,35 @@ export const buildFindSelector = ({ includeInactive = false, queryString }: Lang
18
33
  return selector;
19
34
  };
20
35
 
21
- export const configureLanguagesModule = async ({
22
- db,
23
- }: ModuleInput<Record<string, never>>): Promise<LanguagesModule> => {
36
+ export const configureLanguagesModule = async ({ db }: ModuleInput<Record<string, never>>) => {
24
37
  registerEvents(LANGUAGE_EVENTS);
25
38
 
26
39
  const Languages = await LanguagesCollection(db);
27
40
 
28
- const mutations = generateDbMutations<Language>(
29
- Languages,
30
- LanguagesSchema,
31
- ) as ModuleMutations<Language>;
32
-
33
41
  return {
34
- findLanguage: async ({ languageId, isoCode }) => {
42
+ findLanguage: async ({
43
+ languageId,
44
+ isoCode,
45
+ }: {
46
+ languageId?: string;
47
+ isoCode?: string;
48
+ }): Promise<Language> => {
35
49
  return Languages.findOne(languageId ? generateDbFilterById(languageId) : { isoCode }, {});
36
50
  },
37
51
 
38
- findLanguages: async ({ limit, offset, sort, ...query }, options) => {
52
+ findLanguages: async (
53
+ {
54
+ limit,
55
+ offset,
56
+ sort,
57
+ ...query
58
+ }: LanguageQuery & {
59
+ limit?: number;
60
+ offset?: number;
61
+ sort?: Array<SortOption>;
62
+ },
63
+ options?: mongodb.FindOptions,
64
+ ): Promise<Array<Language>> => {
39
65
  const defaultSort = [{ key: 'created', value: SortDirection.ASC }] as SortOption[];
40
66
  return Languages.find(buildFindSelector(query), {
41
67
  skip: offset,
@@ -45,12 +71,12 @@ export const configureLanguagesModule = async ({
45
71
  }).toArray();
46
72
  },
47
73
 
48
- count: async (query) => {
74
+ count: async (query: LanguageQuery): Promise<number> => {
49
75
  const count = await Languages.countDocuments(buildFindSelector(query));
50
76
  return count;
51
77
  },
52
78
 
53
- languageExists: async ({ languageId }) => {
79
+ languageExists: async ({ languageId }: { languageId: string }): Promise<boolean> => {
54
80
  const languageCount = await Languages.countDocuments(
55
81
  generateDbFilterById(languageId, { deleted: null }),
56
82
  {
@@ -60,13 +86,15 @@ export const configureLanguagesModule = async ({
60
86
  return !!languageCount;
61
87
  },
62
88
 
63
- isBase(language) {
89
+ isBase(language: Language): boolean {
64
90
  return language.isoCode === systemLocale.language;
65
91
  },
66
92
 
67
93
  create: async (doc: Language) => {
68
94
  await Languages.deleteOne({ isoCode: doc.isoCode.toLowerCase(), deleted: { $ne: null } });
69
- const languageId = await mutations.create({
95
+ const { insertedId: languageId } = await Languages.insertOne({
96
+ _id: generateDbObjectId(),
97
+ created: new Date(),
70
98
  ...doc,
71
99
  isoCode: doc.isoCode.toLowerCase(),
72
100
  isActive: true,
@@ -74,19 +102,32 @@ export const configureLanguagesModule = async ({
74
102
  await emit('LANGUAGE_CREATE', { languageId });
75
103
  return languageId;
76
104
  },
105
+
77
106
  update: async (languageId, doc) => {
78
- await mutations.update(languageId, {
79
- ...doc,
80
- isoCode: doc.isoCode.toLowerCase(),
107
+ await Languages.updateOne(generateDbFilterById(languageId), {
108
+ $set: {
109
+ updated: new Date(),
110
+ ...doc,
111
+ isoCode: doc.isoCode.toLowerCase(),
112
+ },
81
113
  });
82
114
  await emit('LANGUAGE_UPDATE', { languageId });
83
115
  return languageId;
84
116
  },
117
+
85
118
  delete: async (languageId) => {
86
- const deletedCount = await mutations.delete(languageId);
119
+ const { modifiedCount: deletedCount } = await Languages.updateOne(
120
+ generateDbFilterById(languageId),
121
+ {
122
+ $set: {
123
+ deleted: new Date(),
124
+ },
125
+ },
126
+ );
87
127
  await emit('LANGUAGE_REMOVE', { languageId });
88
128
  return deletedCount;
89
129
  },
90
- deletePermanently: mutations.deletePermanently,
91
130
  };
92
131
  };
132
+
133
+ export type LanguagesModule = Awaited<ReturnType<typeof configureLanguagesModule>>;
@@ -1,20 +1,26 @@
1
- import { buildFindSelector } from "./configureLanguagesModule.js";
1
+ import { buildFindSelector } from './configureLanguagesModule.js';
2
2
 
3
- describe('buildFindSelector', () => {
4
- it('Return correct filter object when passed no argument', async () => {
5
- expect(buildFindSelector({})).toEqual({ deleted: null, isActive: true })
6
- });
3
+ describe('buildFindSelector', () => {
4
+ it('Return correct filter object when passed no argument', () => {
5
+ expect(buildFindSelector({})).toEqual({ deleted: null, isActive: true });
6
+ });
7
7
 
8
- it('Return correct filter object includeInactive is set to true', async () => {
9
- expect(buildFindSelector({includeInactive: true})).toEqual({ deleted: null })
10
- });
8
+ it('Return correct filter object includeInactive is set to true', () => {
9
+ expect(buildFindSelector({ includeInactive: true })).toEqual({ deleted: null });
10
+ });
11
11
 
12
- it('Return correct filter object when passed includeInactive, queryString', async () => {
13
- expect(buildFindSelector({ includeInactive: true,queryString: "hello world"})).toEqual({ deleted: null, '$text': { '$search': 'hello world' } })
12
+ it('Return correct filter object when passed includeInactive, queryString', () => {
13
+ expect(buildFindSelector({ includeInactive: true, queryString: 'hello world' })).toEqual({
14
+ deleted: null,
15
+ $text: { $search: 'hello world' },
14
16
  });
17
+ });
15
18
 
16
- it('Return correct filter object when passed queryString', async () => {
17
- expect(buildFindSelector({ queryString: "hello world"})).toEqual({ deleted: null, isActive: true, '$text': { '$search': 'hello world' } })
19
+ it('Return correct filter object when passed queryString', () => {
20
+ expect(buildFindSelector({ queryString: 'hello world' })).toEqual({
21
+ deleted: null,
22
+ isActive: true,
23
+ $text: { $search: 'hello world' },
18
24
  });
19
-
20
- })
25
+ });
26
+ });
@@ -1,23 +1,28 @@
1
- import { buildFindSelector } from "../src/module/configureLanguagesModule.js";
1
+ import { buildFindSelector } from '../src/module/configureLanguagesModule.js';
2
2
 
3
3
  describe('Languages', () => {
4
4
  describe('buildFindSelector', () => {
5
- it('Return correct filter object when passed no argument', async () => {
6
- expect(buildFindSelector({})).toEqual({ deleted: null, isActive: true })
5
+ it('Return correct filter object when passed no argument', () => {
6
+ expect(buildFindSelector({})).toEqual({ deleted: null, isActive: true });
7
7
  });
8
8
 
9
- it('Return correct filter object includeInactive is set to true', async () => {
10
- expect(buildFindSelector({includeInactive: true})).toEqual({ deleted: null })
9
+ it('Return correct filter object includeInactive is set to true', () => {
10
+ expect(buildFindSelector({ includeInactive: true })).toEqual({ deleted: null });
11
11
  });
12
12
 
13
- it('Return correct filter object when passed includeInactive, queryString', async () => {
14
- expect(buildFindSelector({ includeInactive: true,queryString: "hello world"})).toEqual({ deleted: null, '$text': { '$search': 'hello world' } })
13
+ it('Return correct filter object when passed includeInactive, queryString', () => {
14
+ expect(buildFindSelector({ includeInactive: true, queryString: 'hello world' })).toEqual({
15
+ deleted: null,
16
+ $text: { $search: 'hello world' },
17
+ });
15
18
  });
16
19
 
17
- it('Return correct filter object when passed queryString', async () => {
18
- expect(buildFindSelector({ queryString: "hello world"})).toEqual({ deleted: null, isActive: true, '$text': { '$search': 'hello world' } })
20
+ it('Return correct filter object when passed queryString', () => {
21
+ expect(buildFindSelector({ queryString: 'hello world' })).toEqual({
22
+ deleted: null,
23
+ isActive: true,
24
+ $text: { $search: 'hello world' },
25
+ });
19
26
  });
20
-
21
- })
22
-
27
+ });
23
28
  });
@@ -1,3 +0,0 @@
1
- import SimpleSchema from 'simpl-schema';
2
- export declare const LanguagesSchema: SimpleSchema;
3
- //# sourceMappingURL=LanguagesSchema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LanguagesSchema.d.ts","sourceRoot":"","sources":["../../src/db/LanguagesSchema.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,eAAO,MAAM,eAAe,cAO3B,CAAC"}
@@ -1,8 +0,0 @@
1
- import { Schemas } from '@unchainedshop/utils';
2
- import SimpleSchema from 'simpl-schema';
3
- export const LanguagesSchema = new SimpleSchema({
4
- isoCode: { type: String, required: true },
5
- isActive: Boolean,
6
- ...Schemas.timestampFields,
7
- }, { requiredByDefault: false });
8
- //# sourceMappingURL=LanguagesSchema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LanguagesSchema.js","sourceRoot":"","sources":["../../src/db/LanguagesSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,YAAY,CAC7C;IACE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IACzC,QAAQ,EAAE,OAAO;IACjB,GAAG,OAAO,CAAC,eAAe;CAC3B,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC"}
@@ -1,11 +0,0 @@
1
- import { Schemas } from '@unchainedshop/utils';
2
- import SimpleSchema from 'simpl-schema';
3
-
4
- export const LanguagesSchema = new SimpleSchema(
5
- {
6
- isoCode: { type: String, required: true },
7
- isActive: Boolean,
8
- ...Schemas.timestampFields,
9
- },
10
- { requiredByDefault: false },
11
- );