@unchainedshop/utils 2.0.0-beta8 → 2.0.0-rc.1
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/jest.config.js +9 -0
- package/lib/db/generate-db-mutations.js +4 -7
- package/lib/db/generate-db-mutations.js.map +1 -1
- package/lib/director/BaseDiscountDirector.js +2 -2
- package/lib/director/BaseDiscountDirector.js.map +1 -1
- package/lib/director/BasePricingDirector.js +2 -2
- package/lib/director/BasePricingDirector.js.map +1 -1
- package/lib/schemas/AddressSchema.d.ts +2 -2
- package/lib/schemas/AddressSchema.js.map +1 -1
- package/lib/schemas/ContactSchema.d.ts +2 -2
- package/lib/schemas/ContactSchema.js.map +1 -1
- package/lib/schemas/UsersSchema.d.ts +4 -4
- package/lib/schemas/UsersSchema.js.map +1 -1
- package/lib/schemas/commonSchemaFields.d.ts +20 -36
- package/lib/schemas/commonSchemaFields.js +0 -3
- package/lib/schemas/commonSchemaFields.js.map +1 -1
- package/lib/utils-index.d.ts +0 -9
- package/package.json +8 -7
- package/src/db/generate-db-mutations.ts +4 -7
- package/src/director/BaseDiscountDirector.ts +2 -2
- package/src/director/BasePricingDirector.ts +2 -2
- package/src/schemas/{AddressSchema.js → AddressSchema.ts} +0 -0
- package/src/schemas/{ContactSchema.js → ContactSchema.ts} +0 -0
- package/src/schemas/{UsersSchema.js → UsersSchema.ts} +0 -0
- package/src/schemas/{commonSchemaFields.js → commonSchemaFields.ts} +0 -3
- package/tests/utils-index.test.ts +153 -0
- package/tests/generate-db-mutations.test.js +0 -69
- package/tests/utils-index.test.js +0 -44
package/jest.config.js
CHANGED
|
@@ -17,10 +17,9 @@ export const generateDbMutations = (collection, schema, options) => {
|
|
|
17
17
|
return result.deletedCount;
|
|
18
18
|
};
|
|
19
19
|
return {
|
|
20
|
-
create: async (doc
|
|
20
|
+
create: async (doc) => {
|
|
21
21
|
const values = schema.clean(doc);
|
|
22
22
|
values.created = new Date();
|
|
23
|
-
values.createdBy = userId;
|
|
24
23
|
schema.validate(values);
|
|
25
24
|
values._id = doc._id || generateDbObjectId();
|
|
26
25
|
const result = await collection.insertOne(values);
|
|
@@ -28,7 +27,7 @@ export const generateDbMutations = (collection, schema, options) => {
|
|
|
28
27
|
},
|
|
29
28
|
update: hasCreateOnly
|
|
30
29
|
? undefined
|
|
31
|
-
: async (_id, doc
|
|
30
|
+
: async (_id, doc) => {
|
|
32
31
|
checkId(_id);
|
|
33
32
|
let modifier;
|
|
34
33
|
if (doc?.$set) {
|
|
@@ -38,7 +37,6 @@ export const generateDbMutations = (collection, schema, options) => {
|
|
|
38
37
|
$set: {
|
|
39
38
|
...(values.$set || {}),
|
|
40
39
|
updated: new Date(),
|
|
41
|
-
updatedBy: userId,
|
|
42
40
|
},
|
|
43
41
|
};
|
|
44
42
|
}
|
|
@@ -48,7 +46,6 @@ export const generateDbMutations = (collection, schema, options) => {
|
|
|
48
46
|
$set: {
|
|
49
47
|
...values,
|
|
50
48
|
updated: new Date(),
|
|
51
|
-
updatedBy: userId,
|
|
52
49
|
},
|
|
53
50
|
};
|
|
54
51
|
}
|
|
@@ -60,13 +57,13 @@ export const generateDbMutations = (collection, schema, options) => {
|
|
|
60
57
|
deletePermanently: hasCreateOnly ? undefined : deletePermanently,
|
|
61
58
|
delete: hasCreateOnly
|
|
62
59
|
? undefined
|
|
63
|
-
: async (_id
|
|
60
|
+
: async (_id) => {
|
|
64
61
|
if (permanentlyDeleteByDefault) {
|
|
65
62
|
return deletePermanently(_id);
|
|
66
63
|
}
|
|
67
64
|
checkId(_id);
|
|
68
65
|
const filter = generateDbFilterById(_id, { deleted: null });
|
|
69
|
-
const modifier = { $set: { deleted: new Date()
|
|
66
|
+
const modifier = { $set: { deleted: new Date() } };
|
|
70
67
|
const values = schema.clean(modifier, { isModifier: true });
|
|
71
68
|
const result = await collection.updateOne(filter, values);
|
|
72
69
|
return result.modifiedCount;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-db-mutations.js","sourceRoot":"","sources":["../../src/db/generate-db-mutations.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,UAAyB,EACzB,MAAoB,EACpB,OAGC,EAC6C,EAAE;IAChD,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAElD,MAAM,EAAE,aAAa,EAAE,0BAA0B,EAAE,GAAG,OAAO,IAAI;QAC/D,aAAa,EAAE,KAAK;QACpB,0BAA0B,EAAE,KAAK;KAClC,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;QACtC,OAAO,CAAC,GAAG,CAAC,CAAC;QACb,MAAM,MAAM,GAAG,oBAAoB,CAAI,GAAG,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC,YAAY,CAAC;IAC7B,CAAC,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"generate-db-mutations.js","sourceRoot":"","sources":["../../src/db/generate-db-mutations.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,8 @@ export const BaseDiscountDirector = (directorName) => {
|
|
|
6
6
|
});
|
|
7
7
|
return {
|
|
8
8
|
...baseDirector,
|
|
9
|
-
actions: async (discountContext,
|
|
10
|
-
const context = { ...discountContext, ...
|
|
9
|
+
actions: async (discountContext, unchainedAPI) => {
|
|
10
|
+
const context = { ...discountContext, ...unchainedAPI };
|
|
11
11
|
return {
|
|
12
12
|
resolveDiscountKeyFromStaticCode: async (options) => {
|
|
13
13
|
if (!context.order)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseDiscountDirector.js","sourceRoot":"","sources":["../../src/director/BaseDiscountDirector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,YAAoB,EAAqB,EAAE;IAC9E,MAAM,YAAY,GAAG,YAAY,CAAmB,YAAY,EAAE;QAChE,cAAc,EAAE,YAAY;KAC7B,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,YAAY;QAEf,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"BaseDiscountDirector.js","sourceRoot":"","sources":["../../src/director/BaseDiscountDirector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,YAAoB,EAAqB,EAAE;IAC9E,MAAM,YAAY,GAAG,YAAY,CAAmB,YAAY,EAAE;QAChE,cAAc,EAAE,YAAY;KAC7B,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,YAAY;QAEf,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE;YAC/C,MAAM,OAAO,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,YAAY,EAAE,CAAC;YAExD,OAAO;gBACL,gCAAgC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;oBAClD,IAAI,CAAC,OAAO,CAAC,KAAK;wBAAE,OAAO,IAAI,CAAC;oBAEhC,GAAG,CAAC,0DAA0D,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;oBAE/E,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,YAAY;yBACT,WAAW,EAAE;yBACb,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;yBACnE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;wBACrB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;wBACnD,OAAO;4BACL,GAAG,EAAE,OAAO,CAAC,GAAG;4BAChB,OAAO,EAAE,MAAM,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC;yBACzD,CAAC;oBACJ,CAAC,CAAC,CACL,CAAC;oBAEF,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC;gBAChE,CAAC;gBAED,KAAK,CAAC,mBAAmB;oBACvB,IAAI,CAAC,OAAO,CAAC,KAAK;wBAAE,OAAO,EAAE,CAAC;oBAC9B,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,YAAY,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;wBAC/C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;wBACnD,OAAO;4BACL,GAAG,EAAE,OAAO,CAAC,GAAG;4BAChB,OAAO,EAAE,MAAM,OAAO,CAAC,0BAA0B,EAAE;yBACpD,CAAC;oBACJ,CAAC,CAAC,CACH,CAAC;oBAEF,MAAM,cAAc,GAAG,SAAS;yBAC7B,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC;yBACzC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;oBAEzB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC7B,GAAG,CAAC,6BAA6B,cAAc,CAAC,MAAM,mBAAmB,CAAC,CAAC;qBAC5E;oBACD,OAAO,cAAc,CAAC;gBACxB,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -9,8 +9,8 @@ export const BasePricingDirector = (directorName) => {
|
|
|
9
9
|
buildPricingContext: async () => {
|
|
10
10
|
return {};
|
|
11
11
|
},
|
|
12
|
-
actions: async (pricingContext,
|
|
13
|
-
const context = await buildPricingContext(pricingContext,
|
|
12
|
+
actions: async (pricingContext, unchainedAPI, buildPricingContext) => {
|
|
13
|
+
const context = await buildPricingContext(pricingContext, unchainedAPI);
|
|
14
14
|
let calculation = [];
|
|
15
15
|
const actions = {
|
|
16
16
|
async calculate() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasePricingDirector.js","sourceRoot":"","sources":["../../src/director/BasePricingDirector.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAMjC,YAAoB,EAOpB,EAAE;IACF,MAAM,YAAY,GAAG,YAAY,CAAiB,YAAY,EAAE;QAC9D,cAAc,EAAE,YAAY;KAC7B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAMV;QACF,GAAG,YAAY;QACf,mBAAmB,EAAE,KAAK,IAAI,EAAE;YAC9B,OAAO,EAAoB,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"BasePricingDirector.js","sourceRoot":"","sources":["../../src/director/BasePricingDirector.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAMjC,YAAoB,EAOpB,EAAE;IACF,MAAM,YAAY,GAAG,YAAY,CAAiB,YAAY,EAAE;QAC9D,cAAc,EAAE,YAAY;KAC7B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAMV;QACF,GAAG,YAAY;QACf,mBAAmB,EAAE,KAAK,IAAI,EAAE;YAC9B,OAAO,EAAoB,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,EAAE;YACnE,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YAExE,IAAI,WAAW,GAAuB,EAAE,CAAC;YAEzC,MAAM,OAAO,GAAwD;gBACnE,KAAK,CAAC,SAAS;oBACb,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC;wBACxC,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;4BACzB,OAAO,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;wBACzC,CAAC;qBACF,CAAC,CAAC;oBAEH,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE;wBACrE,MAAM,mBAAmB,GAAG,MAAM,eAAe,CAAC;wBAClD,IAAI,CAAC,mBAAmB;4BAAE,OAAO,IAAI,CAAC;wBAEtC,MAAM,SAAS,GAAoB,MAAM,OAAO,CAAC,GAAG,CAClD,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;4BACzC,UAAU,EAAE,QAAQ,CAAC,GAAG;4BACxB,aAAa,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iCAAiC,CACrF,QAAQ,EACR,OAAO,CAAC,GAAG,EACX,IAAI,CAAC,gBAAgB,EAAE,EACvB,OAAO,CACR;yBACF,CAAC,CAAC,CACJ,CAAC;wBAEF,IAAI;4BACF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;gCAC9B,OAAO;gCACP,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;gCACzC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,aAAa,KAAK,IAAI,CAAC;6BAC3E,CAAC,CAAC;4BAEH,MAAM,qBAAqB,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;4BACxD,IAAI,CAAC,qBAAqB;gCAAE,OAAO,IAAI,CAAC;4BACxC,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;4BAChE,OAAO,WAAW,CAAC;yBACpB;wBAAC,OAAO,KAAK,EAAE;4BACd,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;yBACvC;wBACD,OAAO,mBAAmB,CAAC;oBAC7B,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;oBAExB,OAAO,WAAW,CAAC;gBACrB,CAAC;gBACD,cAAc;oBACZ,OAAO,WAAW,CAAC;gBACrB,CAAC;gBACD,UAAU;oBACR,OAAO,OAAO,CAAC;gBACjB,CAAC;aACF,CAAC;YAEF,OAAO,OAEN,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import SimpleSchema from 'simpl-schema';
|
|
2
|
+
export declare const AddressSchema: SimpleSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddressSchema.js","sourceRoot":"","sources":["../../src/schemas/AddressSchema.
|
|
1
|
+
{"version":3,"file":"AddressSchema.js","sourceRoot":"","sources":["../../src/schemas/AddressSchema.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,YAAY,CAC3C;IACE,SAAS,EAAE,MAAM;IACjB,QAAQ,EAAE,MAAM;IAChB,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,MAAM;IACnB,YAAY,EAAE,MAAM;IACpB,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,MAAM;IAClB,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,MAAM;CACpB,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import SimpleSchema from 'simpl-schema';
|
|
2
|
+
export declare const ContactSchema: SimpleSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactSchema.js","sourceRoot":"","sources":["../../src/schemas/ContactSchema.
|
|
1
|
+
{"version":3,"file":"ContactSchema.js","sourceRoot":"","sources":["../../src/schemas/ContactSchema.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,YAAY,CAC3C;IACE,SAAS,EAAE,MAAM;IACjB,YAAY,EAAE,MAAM;CACrB,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export const
|
|
3
|
-
export const
|
|
4
|
-
|
|
1
|
+
import SimpleSchema from 'simpl-schema';
|
|
2
|
+
export declare const LastLoginSchema: SimpleSchema;
|
|
3
|
+
export declare const LastContactSchema: SimpleSchema;
|
|
4
|
+
export declare const UserSchema: SimpleSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UsersSchema.js","sourceRoot":"","sources":["../../src/schemas/UsersSchema.
|
|
1
|
+
{"version":3,"file":"UsersSchema.js","sourceRoot":"","sources":["../../src/schemas/UsersSchema.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,aAAa,GAAG,IAAI,YAAY,CACpC;IACE,WAAW,EAAE,MAAM;IACnB,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,MAAM;IACnB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,aAAa;CACvB,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,YAAY,CAC7C;IACE,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,MAAM;IACd,cAAc,EAAE,MAAM;IACtB,aAAa,EAAE,MAAM;IACrB,UAAU,EAAE,MAAM;IAClB,SAAS,EAAE,MAAM;CAClB,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,YAAY,CAC/C;IACE,SAAS,EAAE,MAAM;IACjB,YAAY,EAAE,MAAM;CACrB,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,YAAY,CACxC;IACE,MAAM,EAAE,KAAK;IACb,UAAU,EAAE,MAAM;IAClB,kBAAkB,EAAE,MAAM;IAC1B,mBAAmB,EAAE,OAAO;IAC5B,QAAQ,EAAE,MAAM;IAChB,SAAS,EAAE,eAAe;IAC1B,OAAO,EAAE,aAAa;IACtB,kBAAkB,EAAE,aAAa;IACjC,WAAW,EAAE,iBAAiB;IAC9B,KAAK,EAAE,OAAO;IACd,eAAe,EAAE,OAAO;IACxB,IAAI,EAAE,KAAK;IACX,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;KACf;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;KACf;IACD,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,MAAM;IACjB,GAAG,eAAe;CACnB,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
export const logFields: {
|
|
1
|
+
export declare const contextFields: {
|
|
2
|
+
context: {
|
|
3
|
+
type: ObjectConstructor;
|
|
4
|
+
blackbox: boolean;
|
|
5
|
+
required: boolean;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
export declare const logFields: {
|
|
9
9
|
log: ArrayConstructor;
|
|
10
10
|
'log.$': {
|
|
11
11
|
type: ObjectConstructor;
|
|
@@ -20,31 +20,15 @@ export const logFields: {
|
|
|
20
20
|
type: StringConstructor;
|
|
21
21
|
};
|
|
22
22
|
};
|
|
23
|
-
export
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const type_3: DateConstructor;
|
|
36
|
-
export { type_3 as type };
|
|
37
|
-
}
|
|
38
|
-
namespace updatedBy {
|
|
39
|
-
const type_4: StringConstructor;
|
|
40
|
-
export { type_4 as type };
|
|
41
|
-
}
|
|
42
|
-
namespace deleted {
|
|
43
|
-
const type_5: DateConstructor;
|
|
44
|
-
export { type_5 as type };
|
|
45
|
-
}
|
|
46
|
-
namespace deletedBy {
|
|
47
|
-
const type_6: StringConstructor;
|
|
48
|
-
export { type_6 as type };
|
|
49
|
-
}
|
|
50
|
-
}
|
|
23
|
+
export declare const timestampFields: {
|
|
24
|
+
created: {
|
|
25
|
+
type: DateConstructor;
|
|
26
|
+
required: boolean;
|
|
27
|
+
};
|
|
28
|
+
updated: {
|
|
29
|
+
type: DateConstructor;
|
|
30
|
+
};
|
|
31
|
+
deleted: {
|
|
32
|
+
type: DateConstructor;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
@@ -22,10 +22,7 @@ export const logFields = {
|
|
|
22
22
|
};
|
|
23
23
|
export const timestampFields = {
|
|
24
24
|
created: { type: Date, required: true },
|
|
25
|
-
createdBy: { type: String },
|
|
26
25
|
updated: { type: Date },
|
|
27
|
-
updatedBy: { type: String },
|
|
28
26
|
deleted: { type: Date },
|
|
29
|
-
deletedBy: { type: String },
|
|
30
27
|
};
|
|
31
28
|
//# sourceMappingURL=commonSchemaFields.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commonSchemaFields.js","sourceRoot":"","sources":["../../src/schemas/commonSchemaFields.
|
|
1
|
+
{"version":3,"file":"commonSchemaFields.js","sourceRoot":"","sources":["../../src/schemas/commonSchemaFields.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE;QACP,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAK;KAChB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,GAAG,EAAE,KAAK;IACV,OAAO,EAAE;QACP,IAAI,EAAE,MAAM;KACb;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,IAAI;KACX;IACD,cAAc,EAAE;QACd,IAAI,EAAE,MAAM;KACb;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM;KACb;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;IACvC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACvB,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;CACxB,CAAC"}
|
package/lib/utils-index.d.ts
CHANGED
|
@@ -19,21 +19,12 @@ declare const Schemas: {
|
|
|
19
19
|
type: DateConstructor;
|
|
20
20
|
required: boolean;
|
|
21
21
|
};
|
|
22
|
-
createdBy: {
|
|
23
|
-
type: StringConstructor;
|
|
24
|
-
};
|
|
25
22
|
updated: {
|
|
26
23
|
type: DateConstructor;
|
|
27
24
|
};
|
|
28
|
-
updatedBy: {
|
|
29
|
-
type: StringConstructor;
|
|
30
|
-
};
|
|
31
25
|
deleted: {
|
|
32
26
|
type: DateConstructor;
|
|
33
27
|
};
|
|
34
|
-
deletedBy: {
|
|
35
|
-
type: StringConstructor;
|
|
36
|
-
};
|
|
37
28
|
};
|
|
38
29
|
contextFields: {
|
|
39
30
|
context: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unchainedshop/utils",
|
|
3
|
-
"version": "2.0.0-
|
|
3
|
+
"version": "2.0.0-rc.1",
|
|
4
4
|
"main": "lib/utils-index.js",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./lib/utils-index.js",
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
"clean": "rm -rf lib",
|
|
13
13
|
"build": "npm run clean && tsc",
|
|
14
14
|
"watch": "tsc -w",
|
|
15
|
-
"test": "jest --
|
|
15
|
+
"test": "NODE_OPTIONS=--experimental-vm-modules jest --detectOpenHandles --forceExit",
|
|
16
|
+
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch --detectOpenHandles --forceExit"
|
|
16
17
|
},
|
|
17
18
|
"repository": {
|
|
18
19
|
"type": "git",
|
|
@@ -29,18 +30,18 @@
|
|
|
29
30
|
},
|
|
30
31
|
"homepage": "https://github.com/unchainedshop/unchained#readme",
|
|
31
32
|
"dependencies": {
|
|
32
|
-
"@unchainedshop/logger": "^2.0.0-
|
|
33
|
+
"@unchainedshop/logger": "^2.0.0-rc.1",
|
|
33
34
|
"abort-controller": "3.0.0",
|
|
34
35
|
"bson": "^4.7.0",
|
|
35
36
|
"hashids": "^2.2.10",
|
|
36
37
|
"jest": "^29.3.1",
|
|
37
38
|
"locale": "0.1.0",
|
|
38
39
|
"lru-cache": "^7.14.1",
|
|
39
|
-
"simpl-schema": "^3.0
|
|
40
|
+
"simpl-schema": "^3.2.0"
|
|
40
41
|
},
|
|
41
42
|
"devDependencies": {
|
|
42
|
-
"@types/node": "^18.11.
|
|
43
|
-
"@unchainedshop/types": "^2.0.0-
|
|
44
|
-
"typescript": "^4.9.
|
|
43
|
+
"@types/node": "^18.11.17",
|
|
44
|
+
"@unchainedshop/types": "^2.0.0-rc.1",
|
|
45
|
+
"typescript": "^4.9.4"
|
|
45
46
|
}
|
|
46
47
|
}
|
|
@@ -30,10 +30,9 @@ export const generateDbMutations = <T extends TimestampFields & { _id?: _ID }>(
|
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
return {
|
|
33
|
-
create: async (doc
|
|
33
|
+
create: async (doc) => {
|
|
34
34
|
const values: any = schema.clean(doc);
|
|
35
35
|
values.created = new Date();
|
|
36
|
-
values.createdBy = userId;
|
|
37
36
|
schema.validate(values);
|
|
38
37
|
values._id = doc._id || generateDbObjectId();
|
|
39
38
|
|
|
@@ -43,7 +42,7 @@ export const generateDbMutations = <T extends TimestampFields & { _id?: _ID }>(
|
|
|
43
42
|
|
|
44
43
|
update: hasCreateOnly
|
|
45
44
|
? undefined
|
|
46
|
-
: async (_id, doc
|
|
45
|
+
: async (_id, doc) => {
|
|
47
46
|
checkId(_id);
|
|
48
47
|
|
|
49
48
|
let modifier: Update<T>;
|
|
@@ -55,7 +54,6 @@ export const generateDbMutations = <T extends TimestampFields & { _id?: _ID }>(
|
|
|
55
54
|
$set: {
|
|
56
55
|
...(values.$set || {}),
|
|
57
56
|
updated: new Date(),
|
|
58
|
-
updatedBy: userId,
|
|
59
57
|
},
|
|
60
58
|
};
|
|
61
59
|
} else {
|
|
@@ -64,7 +62,6 @@ export const generateDbMutations = <T extends TimestampFields & { _id?: _ID }>(
|
|
|
64
62
|
$set: {
|
|
65
63
|
...values,
|
|
66
64
|
updated: new Date(),
|
|
67
|
-
updatedBy: userId,
|
|
68
65
|
},
|
|
69
66
|
};
|
|
70
67
|
}
|
|
@@ -80,13 +77,13 @@ export const generateDbMutations = <T extends TimestampFields & { _id?: _ID }>(
|
|
|
80
77
|
|
|
81
78
|
delete: hasCreateOnly
|
|
82
79
|
? undefined
|
|
83
|
-
: async (_id
|
|
80
|
+
: async (_id) => {
|
|
84
81
|
if (permanentlyDeleteByDefault) {
|
|
85
82
|
return deletePermanently(_id);
|
|
86
83
|
}
|
|
87
84
|
checkId(_id);
|
|
88
85
|
const filter = generateDbFilterById<T>(_id, { deleted: null });
|
|
89
|
-
const modifier = { $set: { deleted: new Date()
|
|
86
|
+
const modifier = { $set: { deleted: new Date() } };
|
|
90
87
|
const values = schema.clean(modifier, { isModifier: true });
|
|
91
88
|
const result = await collection.updateOne(filter, values);
|
|
92
89
|
|
|
@@ -10,8 +10,8 @@ export const BaseDiscountDirector = (directorName: string): IDiscountDirector =>
|
|
|
10
10
|
return {
|
|
11
11
|
...baseDirector,
|
|
12
12
|
|
|
13
|
-
actions: async (discountContext,
|
|
14
|
-
const context = { ...discountContext, ...
|
|
13
|
+
actions: async (discountContext, unchainedAPI) => {
|
|
14
|
+
const context = { ...discountContext, ...unchainedAPI };
|
|
15
15
|
|
|
16
16
|
return {
|
|
17
17
|
resolveDiscountKeyFromStaticCode: async (options) => {
|
|
@@ -40,8 +40,8 @@ export const BasePricingDirector = <
|
|
|
40
40
|
buildPricingContext: async () => {
|
|
41
41
|
return {} as AdapterContext;
|
|
42
42
|
},
|
|
43
|
-
actions: async (pricingContext,
|
|
44
|
-
const context = await buildPricingContext(pricingContext,
|
|
43
|
+
actions: async (pricingContext, unchainedAPI, buildPricingContext) => {
|
|
44
|
+
const context = await buildPricingContext(pricingContext, unchainedAPI);
|
|
45
45
|
|
|
46
46
|
let calculation: Array<Calculation> = [];
|
|
47
47
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -24,9 +24,6 @@ export const logFields = {
|
|
|
24
24
|
|
|
25
25
|
export const timestampFields = {
|
|
26
26
|
created: { type: Date, required: true },
|
|
27
|
-
createdBy: { type: String }, // Logically it is required but for backwards compatibility it's set to optional
|
|
28
27
|
updated: { type: Date },
|
|
29
|
-
updatedBy: { type: String },
|
|
30
28
|
deleted: { type: Date },
|
|
31
|
-
deletedBy: { type: String },
|
|
32
29
|
};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
|
|
2
|
+
import { SortDirection } from '@unchainedshop/types/api';
|
|
3
|
+
import {
|
|
4
|
+
buildSortOptions,
|
|
5
|
+
checkId,
|
|
6
|
+
findLocalizedText,
|
|
7
|
+
findPreservingIds,
|
|
8
|
+
findUnusedSlug,
|
|
9
|
+
generateDbFilterById,
|
|
10
|
+
generateDbMutations,
|
|
11
|
+
generateDbObjectId,
|
|
12
|
+
generateRandomHash,
|
|
13
|
+
objectInvert,
|
|
14
|
+
pipePromises,
|
|
15
|
+
resolveBestCountry,
|
|
16
|
+
resolveBestSupported,
|
|
17
|
+
resolveUserRemoteAddress,
|
|
18
|
+
|
|
19
|
+
slugify,
|
|
20
|
+
systemLocale,
|
|
21
|
+
} from '@unchainedshop/utils';
|
|
22
|
+
import generateHashId from '../src/generate-random-hash'
|
|
23
|
+
|
|
24
|
+
describe('Utils', () => {
|
|
25
|
+
|
|
26
|
+
it('Locale', () => {
|
|
27
|
+
expect(systemLocale).toBeDefined();
|
|
28
|
+
expect(resolveBestCountry).toBeInstanceOf(Function)
|
|
29
|
+
expect(resolveBestSupported).toBeInstanceOf(Function)
|
|
30
|
+
expect(resolveUserRemoteAddress).toBeInstanceOf(Function)
|
|
31
|
+
});
|
|
32
|
+
it('functions', () => {
|
|
33
|
+
|
|
34
|
+
expect(findLocalizedText).toBeInstanceOf(Function)
|
|
35
|
+
expect(objectInvert).toBeInstanceOf(Function)
|
|
36
|
+
expect(findPreservingIds).toBeInstanceOf(Function)
|
|
37
|
+
expect(findUnusedSlug).toBeInstanceOf(Function)
|
|
38
|
+
expect(slugify).toBeInstanceOf(Function)
|
|
39
|
+
expect(pipePromises).toBeInstanceOf(Function)
|
|
40
|
+
expect(generateDbFilterById).toBeInstanceOf(Function)
|
|
41
|
+
expect(generateRandomHash).toBeInstanceOf(Function)
|
|
42
|
+
expect(generateDbMutations).toBeInstanceOf(Function)
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
describe('buildSortOptions', () => {
|
|
46
|
+
it('should return the correct db sort format', () => {
|
|
47
|
+
const sort = [ { key: 'name', value: SortDirection.ASC }, { key: 'age', value: SortDirection.DESC }, ];
|
|
48
|
+
expect(buildSortOptions(sort)).toEqual({ name: 1, age: -1 });
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
describe('checkId', () => {
|
|
54
|
+
it('with a string value', () => {
|
|
55
|
+
const value = '12345';
|
|
56
|
+
const error = { message: 'Invalid id' };
|
|
57
|
+
|
|
58
|
+
expect(() => checkId(value, error)).not.toThrow();
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('with a non-string value', () => {
|
|
62
|
+
const value: any = 12345;
|
|
63
|
+
const error = { message: 'Invalid id' };
|
|
64
|
+
|
|
65
|
+
expect(() => checkId(value, error)).toThrow('Invalid id');
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('with a different error object', () => {
|
|
69
|
+
const value:any = 12345;
|
|
70
|
+
const error = { message: 'Invalid id', path: 'name' };
|
|
71
|
+
|
|
72
|
+
expect(() => checkId(value, error)).toThrow('Invalid id');
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('without an error object', () => {
|
|
76
|
+
const value: any = 12345;
|
|
77
|
+
|
|
78
|
+
expect(() => checkId(value)).toThrow();
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
});
|
|
82
|
+
describe('generateDbObjectId', () => {
|
|
83
|
+
it('generateDbObjectId with default digits', () => {
|
|
84
|
+
const result = generateDbObjectId();
|
|
85
|
+
expect(typeof result).toBe('string');
|
|
86
|
+
expect(result.length).toBe(24);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('generateDbObjectId with odd digits', () => {
|
|
90
|
+
const result = generateDbObjectId(23);
|
|
91
|
+
expect(typeof result).toBe('string');
|
|
92
|
+
expect(result.length).toBe(23);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it('generateDbObjectId with even digits', () => {
|
|
96
|
+
const result = generateDbObjectId(24);
|
|
97
|
+
expect(typeof result).toBe('string');
|
|
98
|
+
expect(result.length).toBe(24);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
describe('generateHashId', () => {
|
|
104
|
+
it('should create a random hash ', () => {
|
|
105
|
+
const result = generateHashId();
|
|
106
|
+
|
|
107
|
+
expect(typeof result).toBe('string');
|
|
108
|
+
expect(result).toMatch(/^[A-Z0-9]+$/);
|
|
109
|
+
})
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
describe('slugify', () => {
|
|
113
|
+
it('with a normal string', () => {
|
|
114
|
+
const text = 'The Quick Brown Fox Jumps Over The Lazy Dog';
|
|
115
|
+
const expected = 'the-quick-brown-fox-jumps-over-the-lazy-dog';
|
|
116
|
+
|
|
117
|
+
const result = slugify(text);
|
|
118
|
+
|
|
119
|
+
expect(result).toEqual(expected);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it('with a string containing special characters', () => {
|
|
123
|
+
const text = 'The Quick Brown Fox! Jumps Over The Lazy Dog?';
|
|
124
|
+
const expected = 'the-quick-brown-fox-jumps-over-the-lazy-dog';
|
|
125
|
+
|
|
126
|
+
const result = slugify(text);
|
|
127
|
+
|
|
128
|
+
expect(result).toEqual(expected);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it('with a string containing multiple spaces', () => {
|
|
132
|
+
const text = 'The Quick Brown Fox Jumps Over The Lazy Dog';
|
|
133
|
+
const expected = 'the-quick-brown-fox-jumps-over-the-lazy-dog';
|
|
134
|
+
|
|
135
|
+
const result = slugify(text);
|
|
136
|
+
|
|
137
|
+
expect(result).toEqual(expected);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it('with a string containing only special characters (leave underscore)', () => {
|
|
141
|
+
const text = '!@#$%^&*()_+';
|
|
142
|
+
const expected = '_';
|
|
143
|
+
|
|
144
|
+
const result = slugify(text);
|
|
145
|
+
|
|
146
|
+
expect(result).toEqual(expected);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { assert } from 'chai';
|
|
2
|
-
import { generateDbMutations, Schemas } from '@unchainedshop/utils';
|
|
3
|
-
import SimpleSchema from 'simpl-schema';
|
|
4
|
-
import { ObjectId } from 'bson';
|
|
5
|
-
|
|
6
|
-
const testUserId = 'user-1234';
|
|
7
|
-
|
|
8
|
-
const testSchema = new SimpleSchema({
|
|
9
|
-
name: String,
|
|
10
|
-
email: { type: String, optional: true },
|
|
11
|
-
users: { type: Array, defaultValue: [] },
|
|
12
|
-
'users.$': String,
|
|
13
|
-
...Schemas.timestampFields,
|
|
14
|
-
}, { requiredByDefault: false });
|
|
15
|
-
|
|
16
|
-
const testCollection = {
|
|
17
|
-
insertOne: () =>
|
|
18
|
-
new Promise((resolve) =>
|
|
19
|
-
resolve({ insertedId: new ObjectId('qwerASFF1234') })
|
|
20
|
-
),
|
|
21
|
-
updateOne: () => new Promise((resolve) => resolve(null)),
|
|
22
|
-
deleteOne: () => new Promise((resolve) => resolve({ deletedCount: 1 })),
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
describe('Test generate DB mutations', () => {
|
|
26
|
-
let mutations;
|
|
27
|
-
let docId;
|
|
28
|
-
|
|
29
|
-
it('Create mutations', () => {
|
|
30
|
-
mutations = generateDbMutations(testCollection, testSchema);
|
|
31
|
-
|
|
32
|
-
assert.ok(mutations);
|
|
33
|
-
assert.isDefined(mutations.create);
|
|
34
|
-
assert.isDefined(mutations.update);
|
|
35
|
-
assert.isDefined(mutations.delete);
|
|
36
|
-
});
|
|
37
|
-
it('Run insert mutation', async () => {
|
|
38
|
-
docId = await mutations.create({ name: 'Test name' }, testUserId);
|
|
39
|
-
assert.isDefined(docId);
|
|
40
|
-
|
|
41
|
-
await mutations
|
|
42
|
-
.create({ email: 'test.email@unchained.shop' }, testUserId)
|
|
43
|
-
.catch((error) => {
|
|
44
|
-
const errorDetails = error.details[0];
|
|
45
|
-
assert.equal(error.error, 'validation-error');
|
|
46
|
-
assert.equal(errorDetails.name, 'name');
|
|
47
|
-
assert.equal(errorDetails.message, 'Name is required');
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
it('Run update mutation', async () => {
|
|
51
|
-
let result = await mutations.update(
|
|
52
|
-
docId,
|
|
53
|
-
{ $set: { email: 'test.email@unchained.shop' } },
|
|
54
|
-
testUserId
|
|
55
|
-
);
|
|
56
|
-
assert.isUndefined(result);
|
|
57
|
-
|
|
58
|
-
result = await mutations.update(
|
|
59
|
-
docId,
|
|
60
|
-
{ $push: { users: 'Abc-123' } },
|
|
61
|
-
testUserId
|
|
62
|
-
);
|
|
63
|
-
assert.isUndefined(result);
|
|
64
|
-
});
|
|
65
|
-
it('Run delete mutation', async () => {
|
|
66
|
-
const deletedDocs = await mutations.delete(docId, testUserId);
|
|
67
|
-
assert.equal(deletedDocs, 1);
|
|
68
|
-
});
|
|
69
|
-
});
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { assert } from 'chai';
|
|
2
|
-
import {
|
|
3
|
-
findLocalizedText,
|
|
4
|
-
findPreservingIds,
|
|
5
|
-
findUnusedSlug,
|
|
6
|
-
generateDbFilterById,
|
|
7
|
-
generateDbMutations,
|
|
8
|
-
generateRandomHash,
|
|
9
|
-
objectInvert,
|
|
10
|
-
pipePromises,
|
|
11
|
-
resolveBestCountry,
|
|
12
|
-
resolveBestSupported,
|
|
13
|
-
resolveUserRemoteAddress,
|
|
14
|
-
Schemas,
|
|
15
|
-
slugify,
|
|
16
|
-
systemLocale,
|
|
17
|
-
} from '@unchainedshop/utils';
|
|
18
|
-
import './generate-db-mutations.test';
|
|
19
|
-
|
|
20
|
-
describe('Test exports', () => {
|
|
21
|
-
it('Schemas', () => {
|
|
22
|
-
assert.isDefined(Schemas);
|
|
23
|
-
|
|
24
|
-
assert.isDefined(Schemas.Address);
|
|
25
|
-
assert.isDefined(Schemas.Contact);
|
|
26
|
-
});
|
|
27
|
-
it('Locale', () => {
|
|
28
|
-
assert.isDefined(systemLocale);
|
|
29
|
-
assert.isFunction(resolveBestCountry);
|
|
30
|
-
assert.isFunction(resolveBestSupported);
|
|
31
|
-
assert.isFunction(resolveUserRemoteAddress);
|
|
32
|
-
});
|
|
33
|
-
it('Utils', () => {
|
|
34
|
-
assert.isFunction(findLocalizedText);
|
|
35
|
-
assert.isFunction(objectInvert);
|
|
36
|
-
assert.isFunction(findPreservingIds);
|
|
37
|
-
assert.isFunction(findUnusedSlug);
|
|
38
|
-
assert.isFunction(slugify);
|
|
39
|
-
assert.isFunction(pipePromises);
|
|
40
|
-
assert.isFunction(generateDbFilterById);
|
|
41
|
-
assert.isFunction(generateRandomHash);
|
|
42
|
-
assert.isFunction(generateDbMutations);
|
|
43
|
-
});
|
|
44
|
-
});
|