@unchainedshop/core-languages 1.1.3

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/.versions ADDED
@@ -0,0 +1,18 @@
1
+ babel-compiler@7.9.0
2
+ babel-runtime@1.5.1
3
+ dynamic-import@0.7.2
4
+ ecmascript@0.16.2
5
+ ecmascript-runtime@0.8.0
6
+ ecmascript-runtime-client@0.12.1
7
+ ecmascript-runtime-server@0.11.0
8
+ fetch@0.1.1
9
+ inter-process-messaging@0.1.1
10
+ local-test:unchained:core-languages@1.1.1
11
+ meteor@1.10.0
12
+ modern-browsers@0.1.8
13
+ modules@0.18.0
14
+ modules-runtime@0.13.0
15
+ promise@0.12.0
16
+ react-fast-refresh@0.2.3
17
+ typescript@4.5.4
18
+ unchained:core-languages@1.1.1
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Languages (Unchained Engine)
2
+
3
+ This package contains business logic and database abstraction for languages in Unchained.
@@ -0,0 +1,3 @@
1
+ import { Db } from '@unchainedshop/types/common';
2
+ import { Language } from '@unchainedshop/types/languages';
3
+ export declare const LanguagesCollection: (db: Db) => Promise<import("mongodb").Collection<Language>>;
@@ -0,0 +1,19 @@
1
+ import { buildDbIndexes } from '@unchainedshop/utils';
2
+ export const LanguagesCollection = async (db) => {
3
+ const Languages = db.collection('languages');
4
+ await buildDbIndexes(Languages, [
5
+ { index: { isoCode: 1 }, options: { unique: true } },
6
+ {
7
+ index: { isoCode: 'text', _id: 'text' },
8
+ options: {
9
+ weights: {
10
+ _id: 8,
11
+ isoCode: 6,
12
+ },
13
+ name: 'languages_fulltext_search',
14
+ },
15
+ },
16
+ ]);
17
+ return Languages;
18
+ };
19
+ //# sourceMappingURL=LanguagesCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguagesCollection.js","sourceRoot":"","sources":["../../src/db/LanguagesCollection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,EAAM,EAAE,EAAE;IAClD,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,CAAW,WAAW,CAAC,CAAC;IAEvD,MAAM,cAAc,CAAW,SAAS,EAAE;QACxC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACpD;YACE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;YACvC,OAAO,EAAE;gBACP,OAAO,EAAE;oBACP,GAAG,EAAE,CAAC;oBACN,OAAO,EAAE,CAAC;iBACX;gBACD,IAAI,EAAE,2BAA2B;aAClC;SACF;KACF,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export const LanguagesSchema: any;
@@ -0,0 +1,9 @@
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
+ authorId: { type: String, required: true },
7
+ ...Schemas.timestampFields,
8
+ }, { requiredByDefault: false });
9
+ //# sourceMappingURL=LanguagesSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguagesSchema.js","sourceRoot":"","sources":["../../src/db/LanguagesSchema.js"],"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,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC1C,GAAG,OAAO,CAAC,eAAe;CAC3B,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC"}
@@ -0,0 +1 @@
1
+ export { configureLanguagesModule } from './module/configureLanguagesModule';
@@ -0,0 +1,2 @@
1
+ export { configureLanguagesModule } from './module/configureLanguagesModule';
2
+ //# sourceMappingURL=languages-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"languages-index.js","sourceRoot":"","sources":["../src/languages-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ModuleInput } from '@unchainedshop/types/common';
2
+ import { LanguagesModule } from '@unchainedshop/types/languages';
3
+ export declare const configureLanguagesModule: ({ db, }: ModuleInput<Record<string, never>>) => Promise<LanguagesModule>;
@@ -0,0 +1,70 @@
1
+ import { emit, registerEvents } from '@unchainedshop/events';
2
+ import { generateDbMutations, generateDbFilterById, systemLocale, buildSortOptions, } from '@unchainedshop/utils';
3
+ import { LanguagesCollection } from '../db/LanguagesCollection';
4
+ import { LanguagesSchema } from '../db/LanguagesSchema';
5
+ const LANGUAGE_EVENTS = ['LANGUAGE_CREATE', 'LANGUAGE_UPDATE', 'LANGUAGE_REMOVE'];
6
+ const buildFindSelector = ({ includeInactive = false, queryString }) => {
7
+ const selector = { deleted: null };
8
+ if (!includeInactive)
9
+ selector.isActive = true;
10
+ if (queryString) {
11
+ selector.$text = { $search: queryString };
12
+ }
13
+ return selector;
14
+ };
15
+ export const configureLanguagesModule = async ({ db, }) => {
16
+ registerEvents(LANGUAGE_EVENTS);
17
+ const Languages = await LanguagesCollection(db);
18
+ const mutations = generateDbMutations(Languages, LanguagesSchema);
19
+ return {
20
+ findLanguage: async ({ languageId, isoCode }) => {
21
+ return Languages.findOne(languageId ? generateDbFilterById(languageId) : { isoCode }, {});
22
+ },
23
+ findLanguages: async ({ limit, offset, sort, ...query }, options) => {
24
+ return Languages.find(buildFindSelector(query), {
25
+ skip: offset,
26
+ limit,
27
+ sort: buildSortOptions(sort),
28
+ ...options,
29
+ }).toArray();
30
+ },
31
+ count: async (query) => {
32
+ const count = await Languages.countDocuments(buildFindSelector(query));
33
+ return count;
34
+ },
35
+ languageExists: async ({ languageId }) => {
36
+ const languageCount = await Languages.countDocuments(generateDbFilterById(languageId, { deleted: null }), {
37
+ limit: 1,
38
+ });
39
+ return !!languageCount;
40
+ },
41
+ isBase: (language) => {
42
+ return language.isoCode === systemLocale.language;
43
+ },
44
+ create: async (doc, userId) => {
45
+ await Languages.deleteOne({ isoCode: doc.isoCode.toLowerCase(), deleted: { $ne: null } });
46
+ const languageId = await mutations.create({
47
+ ...doc,
48
+ isoCode: doc.isoCode.toLowerCase(),
49
+ isActive: true,
50
+ }, userId);
51
+ emit('LANGUAGE_CREATE', { languageId });
52
+ return languageId;
53
+ },
54
+ update: async (languageId, doc, userId) => {
55
+ await mutations.update(languageId, {
56
+ ...doc,
57
+ isoCode: doc.isoCode.toLowerCase(),
58
+ }, userId);
59
+ emit('LANGUAGE_UPDATE', { languageId });
60
+ return languageId;
61
+ },
62
+ delete: async (languageId, userId) => {
63
+ const deletedCount = await mutations.delete(languageId, userId);
64
+ emit('LANGUAGE_REMOVE', { languageId });
65
+ return deletedCount;
66
+ },
67
+ deletePermanently: mutations.deletePermanently,
68
+ };
69
+ };
70
+ //# sourceMappingURL=configureLanguagesModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configureLanguagesModule.js","sourceRoot":"","sources":["../../src/module/configureLanguagesModule.ts"],"names":[],"mappings":"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"}
package/package.js ADDED
@@ -0,0 +1,29 @@
1
+ Package.describe({
2
+ name: 'unchained:core-languages',
3
+ version: '1.1.3',
4
+ summary: 'Unchained Engine Core: Languages',
5
+ git: 'https://github.com/unchainedshop/unchained',
6
+ documentation: 'README.md',
7
+ });
8
+
9
+ Npm.depends({
10
+ '@unchainedshop/utils': '1.1.3',
11
+ // '@unchainedshop/events': '1.1.4', // PEER
12
+ });
13
+
14
+ Package.onUse((api) => {
15
+ api.versionsFrom('2.7.3');
16
+ api.use('ecmascript');
17
+ api.use('typescript');
18
+
19
+ api.mainModule('src/languages-index.ts', 'server');
20
+ });
21
+
22
+ Package.onTest((api) => {
23
+ api.use('ecmascript');
24
+ api.use('typescript');
25
+
26
+ api.use('unchained:core-languages');
27
+
28
+ api.mainModule('tests/languages-index.test.ts');
29
+ });
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@unchainedshop/core-languages",
3
+ "version": "1.1.3",
4
+ "main": "lib/languages-index.js",
5
+ "types": "lib/languages-index.d.ts",
6
+ "type": "module",
7
+ "scripts": {
8
+ "clean": "rm -rf lib",
9
+ "build": "npm run clean && tsc -p tsconfig.build.json",
10
+ "watch": "tsc --watch",
11
+ "link:core": "npm link @unchainedshop/types",
12
+ "test": "cross-env METEOR_PACKAGE_DIRS=../ TEST_CLIENT=0 TEST_WATCH=1 meteor test-packages ./ --driver-package meteortesting:mocha --port 4200"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/unchainedshop/unchained.git"
17
+ },
18
+ "keywords": [
19
+ "unchained",
20
+ "ecommerce",
21
+ "core"
22
+ ],
23
+ "author": "Joël Meiller",
24
+ "license": "EUPL-1.2",
25
+ "bugs": {
26
+ "url": "https://github.com/unchainedshop/unchained/issues"
27
+ },
28
+ "homepage": "https://github.com/unchainedshop/unchained#readme",
29
+ "dependencies": {
30
+ "@unchainedshop/events": "latest",
31
+ "@unchainedshop/utils": "latest",
32
+ "simpl-schema": "^1.12.2"
33
+ },
34
+ "devDependencies": {
35
+ "@types/chai": "^4.3.1",
36
+ "@types/mocha": "^9.1.1",
37
+ "@unchainedshop/types": "latest",
38
+ "chai": "^4.3.6",
39
+ "cross-env": "^7.0.3",
40
+ "typescript": "^4.7.4"
41
+ }
42
+ }
@@ -0,0 +1,23 @@
1
+ import { Db } from '@unchainedshop/types/common';
2
+ import { Language } from '@unchainedshop/types/languages';
3
+ import { buildDbIndexes } from '@unchainedshop/utils';
4
+
5
+ export const LanguagesCollection = async (db: Db) => {
6
+ const Languages = db.collection<Language>('languages');
7
+
8
+ await buildDbIndexes<Language>(Languages, [
9
+ { index: { isoCode: 1 }, options: { unique: true } },
10
+ {
11
+ index: { isoCode: 'text', _id: 'text' },
12
+ options: {
13
+ weights: {
14
+ _id: 8,
15
+ isoCode: 6,
16
+ },
17
+ name: 'languages_fulltext_search',
18
+ },
19
+ },
20
+ ]);
21
+
22
+ return Languages;
23
+ };
@@ -0,0 +1,12 @@
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
+ authorId: { type: String, required: true },
9
+ ...Schemas.timestampFields,
10
+ },
11
+ { requiredByDefault: false },
12
+ );
@@ -0,0 +1 @@
1
+ export { configureLanguagesModule } from './module/configureLanguagesModule';
@@ -0,0 +1,98 @@
1
+ import { ModuleInput } from '@unchainedshop/types/common';
2
+ import { LanguagesModule, Language, LanguageQuery } from '@unchainedshop/types/languages';
3
+ import { emit, registerEvents } from '@unchainedshop/events';
4
+ import {
5
+ generateDbMutations,
6
+ generateDbFilterById,
7
+ systemLocale,
8
+ buildSortOptions,
9
+ } from '@unchainedshop/utils';
10
+ import { LanguagesCollection } from '../db/LanguagesCollection';
11
+ import { LanguagesSchema } from '../db/LanguagesSchema';
12
+
13
+ const LANGUAGE_EVENTS: string[] = ['LANGUAGE_CREATE', 'LANGUAGE_UPDATE', 'LANGUAGE_REMOVE'];
14
+
15
+ const buildFindSelector = ({ includeInactive = false, queryString }: LanguageQuery) => {
16
+ const selector: { isActive?: true; deleted?: Date; $text?: any } = { deleted: null };
17
+ if (!includeInactive) selector.isActive = true;
18
+ if (queryString) {
19
+ selector.$text = { $search: queryString };
20
+ }
21
+ return selector;
22
+ };
23
+
24
+ export const configureLanguagesModule = async ({
25
+ db,
26
+ }: ModuleInput<Record<string, never>>): Promise<LanguagesModule> => {
27
+ registerEvents(LANGUAGE_EVENTS);
28
+
29
+ const Languages = await LanguagesCollection(db);
30
+
31
+ const mutations = generateDbMutations<Language>(Languages, LanguagesSchema);
32
+
33
+ return {
34
+ findLanguage: async ({ languageId, isoCode }) => {
35
+ return Languages.findOne(languageId ? generateDbFilterById(languageId) : { isoCode }, {});
36
+ },
37
+
38
+ findLanguages: async ({ limit, offset, sort, ...query }, options) => {
39
+ return Languages.find(buildFindSelector(query), {
40
+ skip: offset,
41
+ limit,
42
+ sort: buildSortOptions(sort),
43
+ ...options,
44
+ }).toArray();
45
+ },
46
+
47
+ count: async (query) => {
48
+ const count = await Languages.countDocuments(buildFindSelector(query));
49
+ return count;
50
+ },
51
+
52
+ languageExists: async ({ languageId }) => {
53
+ const languageCount = await Languages.countDocuments(
54
+ generateDbFilterById(languageId, { deleted: null }),
55
+ {
56
+ limit: 1,
57
+ },
58
+ );
59
+ return !!languageCount;
60
+ },
61
+
62
+ isBase: (language) => {
63
+ return language.isoCode === systemLocale.language;
64
+ },
65
+
66
+ create: async (doc: Language, userId?: string) => {
67
+ await Languages.deleteOne({ isoCode: doc.isoCode.toLowerCase(), deleted: { $ne: null } });
68
+ const languageId = await mutations.create(
69
+ {
70
+ ...doc,
71
+ isoCode: doc.isoCode.toLowerCase(),
72
+ isActive: true,
73
+ },
74
+ userId,
75
+ );
76
+ emit('LANGUAGE_CREATE', { languageId });
77
+ return languageId;
78
+ },
79
+ update: async (languageId, doc, userId) => {
80
+ await mutations.update(
81
+ languageId,
82
+ {
83
+ ...doc,
84
+ isoCode: doc.isoCode.toLowerCase(),
85
+ },
86
+ userId,
87
+ );
88
+ emit('LANGUAGE_UPDATE', { languageId });
89
+ return languageId;
90
+ },
91
+ delete: async (languageId, userId) => {
92
+ const deletedCount = await mutations.delete(languageId, userId);
93
+ emit('LANGUAGE_REMOVE', { languageId });
94
+ return deletedCount;
95
+ },
96
+ deletePermanently: mutations.deletePermanently,
97
+ };
98
+ };
@@ -0,0 +1,47 @@
1
+ import { assert } from 'chai';
2
+ import { initDb } from 'meteor/unchained:mongodb';
3
+ import { configureLanguagesModule } from 'meteor/unchained:core-languages';
4
+
5
+ describe('Test exports', () => {
6
+ let module;
7
+
8
+ before(async () => {
9
+ const db = await initDb();
10
+ module = await configureLanguagesModule({ db });
11
+ });
12
+
13
+ it('Check Bookmarks module', async () => {
14
+ assert.ok(module);
15
+ assert.isFunction(module.findLanguage);
16
+ assert.isFunction(module.findLanguages);
17
+ assert.isFunction(module.languageExists);
18
+ assert.isFunction(module.create);
19
+ assert.isFunction(module.update);
20
+ assert.isFunction(module.delete);
21
+ });
22
+
23
+ it('Mutate language', async () => {
24
+ const languageId = await module.create(
25
+ {
26
+ authorId: 'Test-User-1',
27
+ isoCode: 'CHF',
28
+ },
29
+ 'Test-User-1'
30
+ );
31
+
32
+ assert.ok(languageId);
33
+ const language = await module.findLanguage(languageId);
34
+
35
+ assert.ok(language);
36
+ assert.equal(language._id, languageId);
37
+ assert.equal(language.isoCode, 'CHF');
38
+ assert.equal(language.userId, 'Test-User-1');
39
+ assert.isDefined(language.created);
40
+ assert.isUndefined(language.updated);
41
+ assert.isUndefined(language.updatedBy);
42
+ assert.equal(language.createdBy, 'Test-User-1');
43
+
44
+ const deletedCount = await module.delete(languageId);
45
+ assert.equal(deletedCount, 1);
46
+ });
47
+ });
@@ -0,0 +1,26 @@
1
+ {
2
+ "compilerOptions": {
3
+ "allowJs": true,
4
+ "allowSyntheticDefaultImports": true,
5
+ "declaration": true,
6
+ "esModuleInterop": true,
7
+ "experimentalDecorators": true,
8
+ "forceConsistentCasingInFileNames": true,
9
+ "lib": ["esnext"],
10
+ "module": "esnext",
11
+ "moduleResolution": "node",
12
+ "noImplicitReturns": true,
13
+ "noUnusedLocals": false,
14
+ "outDir": "lib",
15
+ "preserveWatchOutput": true,
16
+ "skipLibCheck": true,
17
+ "sourceMap": true,
18
+ "target": "esnext",
19
+ "types": ["node"],
20
+ "baseUrl": ".", // This must be specified if "paths" is.
21
+ "paths": {
22
+ "meteor/unchained:*": ["node_modules/@unchainedshop/types/index.d.ts"]
23
+ }
24
+ },
25
+ "include": ["src"]
26
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "./tsconfig.build.json",
3
+ "compilerOptions": {
4
+ "noEmit": true,
5
+ "types": ["node", "mocha"]
6
+ },
7
+ "include": ["src", "tests"]
8
+ }