mongoose-currency-convert 0.1.4 → 0.1.5
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/README.md +1 -13
- package/dist/index.cjs +16 -3
- package/dist/index.js +16 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ A lightweight Mongoose plugin for automatic currency conversion at save time - f
|
|
|
10
10
|
|
|
11
11
|
- **Automatic currency conversion** for specified fields when saving documents or updating them.
|
|
12
12
|
- **Customizable exchange rate logic** via a user-provided function or extension plugin.
|
|
13
|
-
- **Support for nested paths
|
|
13
|
+
- **Support for nested paths** in documents.
|
|
14
14
|
- **Pluggable rounding function** (default: round to 2 decimals).
|
|
15
15
|
- **Simple in-memory cache** for exchange rates (optional).
|
|
16
16
|
- **Error handling and rollback** on conversion failure.
|
|
@@ -42,12 +42,6 @@ const ProductSchema = new Schema({
|
|
|
42
42
|
currency: String,
|
|
43
43
|
date: Date,
|
|
44
44
|
},
|
|
45
|
-
items: [
|
|
46
|
-
{
|
|
47
|
-
price: Number,
|
|
48
|
-
currency: String,
|
|
49
|
-
}
|
|
50
|
-
]
|
|
51
45
|
});
|
|
52
46
|
|
|
53
47
|
ProductSchema.plugin(currencyConversionPlugin, {
|
|
@@ -59,12 +53,6 @@ ProductSchema.plugin(currencyConversionPlugin, {
|
|
|
59
53
|
targetPath: 'priceConversion',
|
|
60
54
|
toCurrency: 'EUR',
|
|
61
55
|
},
|
|
62
|
-
{
|
|
63
|
-
sourcePath: 'items.0.price',
|
|
64
|
-
currencyPath: 'items.0.currency',
|
|
65
|
-
targetPath: 'items.0.converted',
|
|
66
|
-
toCurrency: 'EUR',
|
|
67
|
-
}
|
|
68
56
|
],
|
|
69
57
|
getRate: async (from, to, date) => {
|
|
70
58
|
// Implement your logic to fetch the exchange rate
|
package/dist/index.cjs
CHANGED
|
@@ -14,10 +14,22 @@ function currencyConversionPlugin(schema, options) {
|
|
|
14
14
|
const convertedFields = [];
|
|
15
15
|
for (const field of fields) {
|
|
16
16
|
const { sourcePath, currencyPath, datePath, targetPath, toCurrency } = field;
|
|
17
|
+
if (!targetPath) {
|
|
18
|
+
console.warn(`[mongoose-currency-convert] WARNING: 'targetPath' is required in field config`);
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (!schema.path(`${targetPath}.amount`)) {
|
|
22
|
+
console.warn(`[mongoose-currency-convert] WARNING: targetPath '${targetPath}' does not exist in schema`);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
17
25
|
const amount = (0, helpers_1.getNestedValue)(doc, sourcePath);
|
|
26
|
+
if (amount == null)
|
|
27
|
+
continue;
|
|
18
28
|
const fromCurrency = (0, helpers_1.getNestedValue)(doc, currencyPath);
|
|
19
|
-
if (
|
|
29
|
+
if (typeof fromCurrency !== "string" || !fromCurrency) {
|
|
30
|
+
console.warn(`[mongoose-currency-convert] Missing or invalid source currency at path: ${currencyPath}`);
|
|
20
31
|
continue;
|
|
32
|
+
}
|
|
21
33
|
if (!(0, helpers_1.isValidCurrencyCode)(fromCurrency, allowedCurrencyCodes)) {
|
|
22
34
|
console.warn(`[mongoose-currency-convert] Invalid source currency code: ${fromCurrency}`);
|
|
23
35
|
continue;
|
|
@@ -76,8 +88,9 @@ function currencyConversionPlugin(schema, options) {
|
|
|
76
88
|
console.error(`[mongoose-currency-convert] Error converting ${sourcePath}:`, err);
|
|
77
89
|
}
|
|
78
90
|
if (rollbackOnError) {
|
|
79
|
-
for (const
|
|
80
|
-
(
|
|
91
|
+
for (const f of fields) {
|
|
92
|
+
if (f.targetPath)
|
|
93
|
+
(0, helpers_1.setNestedValue)(doc, f.targetPath, undefined);
|
|
81
94
|
}
|
|
82
95
|
break;
|
|
83
96
|
}
|
package/dist/index.js
CHANGED
|
@@ -14,10 +14,22 @@ function currencyConversionPlugin(schema, options) {
|
|
|
14
14
|
const convertedFields = [];
|
|
15
15
|
for (const field of fields) {
|
|
16
16
|
const { sourcePath, currencyPath, datePath, targetPath, toCurrency } = field;
|
|
17
|
+
if (!targetPath) {
|
|
18
|
+
console.warn(`[mongoose-currency-convert] WARNING: 'targetPath' is required in field config`);
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (!schema.path(`${targetPath}.amount`)) {
|
|
22
|
+
console.warn(`[mongoose-currency-convert] WARNING: targetPath '${targetPath}' does not exist in schema`);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
17
25
|
const amount = (0, helpers_1.getNestedValue)(doc, sourcePath);
|
|
26
|
+
if (amount == null)
|
|
27
|
+
continue;
|
|
18
28
|
const fromCurrency = (0, helpers_1.getNestedValue)(doc, currencyPath);
|
|
19
|
-
if (
|
|
29
|
+
if (typeof fromCurrency !== "string" || !fromCurrency) {
|
|
30
|
+
console.warn(`[mongoose-currency-convert] Missing or invalid source currency at path: ${currencyPath}`);
|
|
20
31
|
continue;
|
|
32
|
+
}
|
|
21
33
|
if (!(0, helpers_1.isValidCurrencyCode)(fromCurrency, allowedCurrencyCodes)) {
|
|
22
34
|
console.warn(`[mongoose-currency-convert] Invalid source currency code: ${fromCurrency}`);
|
|
23
35
|
continue;
|
|
@@ -76,8 +88,9 @@ function currencyConversionPlugin(schema, options) {
|
|
|
76
88
|
console.error(`[mongoose-currency-convert] Error converting ${sourcePath}:`, err);
|
|
77
89
|
}
|
|
78
90
|
if (rollbackOnError) {
|
|
79
|
-
for (const
|
|
80
|
-
(
|
|
91
|
+
for (const f of fields) {
|
|
92
|
+
if (f.targetPath)
|
|
93
|
+
(0, helpers_1.setNestedValue)(doc, f.targetPath, undefined);
|
|
81
94
|
}
|
|
82
95
|
break;
|
|
83
96
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAKA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAKA,4DAgKC;AAlKD,6CAAoG;AAEpG,SAAgB,wBAAwB,CACtC,MAAc,EACd,OAOC;IAED,MAAM,EACJ,MAAM,EACN,OAAO,EACP,KAAK,GAAG,sBAAY,EACpB,oBAAoB,EACpB,OAAO,EACP,YAAY,EACZ,eAAe,EACf,KAAK,EACL,aAAa,GACd,GAAG,OAAO,CAAC;IAEZ,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IAED,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,UAAU,uBAAuB,CAAC,GAA4B;QACjE,MAAM,eAAe,GAAa,EAAE,CAAC;QAErC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;YAE7E,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CACV,+EAA+E,CAChF,CAAC;gBACF,SAAS;YACX,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,SAAS,CAAC,EAAE,CAAC;gBACzC,OAAO,CAAC,IAAI,CACV,oDAAoD,UAAU,4BAA4B,CAC3F,CAAC;gBACF,SAAS;YACX,CAAC;YAED,MAAM,MAAM,GAAG,IAAA,wBAAc,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC/C,IAAI,MAAM,IAAI,IAAI;gBAAE,SAAS;YAE7B,MAAM,YAAY,GAAG,IAAA,wBAAc,EAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YACvD,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtD,OAAO,CAAC,IAAI,CACV,2EAA2E,YAAY,EAAE,CAC1F,CAAC;gBACF,SAAS;YACX,CAAC;YAED,IAAI,CAAC,IAAA,6BAAmB,EAAC,YAAY,EAAE,oBAAoB,CAAC,EAAE,CAAC;gBAC7D,OAAO,CAAC,IAAI,CAAC,6DAA6D,YAAY,EAAE,CAAC,CAAC;gBAC1F,SAAS;YACX,CAAC;YAED,IAAI,CAAC,IAAA,6BAAmB,EAAC,UAAU,EAAE,oBAAoB,CAAC,EAAE,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,6DAA6D,UAAU,EAAE,CAAC,CAAC;gBACxF,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,wBAAc,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvE,IAAI,cAAc,GAChB,SAAS;gBACT,CAAC,OAAO,SAAS,KAAK,QAAQ;oBAC5B,OAAO,SAAS,KAAK,QAAQ;oBAC7B,SAAS,YAAY,IAAI,CAAC;gBAC1B,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC;gBACrB,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;YACjB,IAAI,aAAa;gBAAE,cAAc,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;YAElE,IAAI,IAAwB,CAAC;YAC7B,MAAM,QAAQ,GAAG,GAAG,YAAY,IAAI,UAAU,IAAI,cAAc,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAC9F,IAAI,CAAC;gBACH,IAAI,KAAK;oBAAE,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAE5C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,IAAI,GAAG,MAAM,OAAO,CAAC,YAAsB,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;oBACzE,IAAI,KAAK,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBACvD,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChC,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;wBACrC,IAAI,GAAG,YAAY,CAAC;oBACtB,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;gBAED,MAAM,cAAc,GAAG;oBACrB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;oBACpC,QAAQ,EAAE,UAAU;oBACpB,IAAI,EAAE,cAAc;iBACrB,CAAC;gBACF,IAAA,wBAAc,EAAC,GAAG,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;gBAChD,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC;wBACN,KAAK,EAAE,UAAU;wBACjB,YAAY,EAAE,YAAsB;wBACpC,UAAU;wBACV,IAAI,EAAE,cAAc;wBACpB,KAAK,EAAE,GAAG;qBACX,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,gDAAgD,UAAU,GAAG,EAAE,GAAG,CAAC,CAAC;gBACpF,CAAC;gBACD,IAAI,eAAe,EAAE,CAAC;oBACpB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;wBACvB,IAAI,CAAC,CAAC,UAAU;4BAAE,IAAA,wBAAc,EAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;oBACjE,CAAC;oBACD,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,sBAAsB,CAEnC,IAAgB;QAEhB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,EAAE,CAAC;QAE3B,MAAM,SAAS,GAAG,MAAiC,CAAC;QACpD,IAAI,GAA4B,CAAC;QACjC,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAClE,GAAG,GAAG,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC;YACnC,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;YACvB,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,EAAE,CAAC;IACT,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;AAClD,CAAC"}
|
package/package.json
CHANGED