mongoose-currency-convert 0.1.3 → 0.1.4

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 CHANGED
@@ -108,9 +108,9 @@ You can use the built-in in-memory cache (`SimpleCache` in `src/utils/cache.ts`)
108
108
 
109
109
  ### Using the Internal SimpleCache
110
110
  ```ts
111
- import { SimpleCache } from 'mongoose-currency-convert';
111
+ import { SimpleCache } from 'mongoose-currency-convert/cache';
112
112
 
113
- const cache = new SimpleCache();
113
+ const cache = new SimpleCache<number>();
114
114
 
115
115
  ProductSchema.plugin(currencyConversionPlugin, {
116
116
  fields: [/* ... */],
@@ -124,7 +124,7 @@ You can implement the `CurrencyRateCache` interface to use any external service:
124
124
 
125
125
  ```ts
126
126
  import { createClient } from 'redis';
127
- import type { CurrencyRateCache } from 'mongoose-currency-convert';
127
+ import type { CurrencyRateCache } from 'mongoose-currency-convert/types';
128
128
 
129
129
  class RedisCache implements CurrencyRateCache<number> {
130
130
  private client = createClient({ url: 'redis://localhost:6379' });
package/dist/index.cjs CHANGED
@@ -1,18 +1,113 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./plugin"), exports);
3
+ exports.currencyConversionPlugin = currencyConversionPlugin;
4
+ const helpers_1 = require("./utils/helpers");
5
+ function currencyConversionPlugin(schema, options) {
6
+ const { fields, getRate, round = helpers_1.defaultRound, allowedCurrencyCodes, onError, fallbackRate, rollbackOnError, cache, dateTransform, } = options;
7
+ if (!fields || !Array.isArray(fields) || fields.length === 0) {
8
+ throw new Error('[mongoose-currency-convert] option "fields" must be a non-empty array');
9
+ }
10
+ if (typeof getRate !== "function") {
11
+ throw new Error('[mongoose-currency-convert] option "getRate" must be a function');
12
+ }
13
+ async function applyCurrencyConversion(doc) {
14
+ const convertedFields = [];
15
+ for (const field of fields) {
16
+ const { sourcePath, currencyPath, datePath, targetPath, toCurrency } = field;
17
+ const amount = (0, helpers_1.getNestedValue)(doc, sourcePath);
18
+ const fromCurrency = (0, helpers_1.getNestedValue)(doc, currencyPath);
19
+ if (amount == null || typeof fromCurrency !== "string" || !fromCurrency)
20
+ continue;
21
+ if (!(0, helpers_1.isValidCurrencyCode)(fromCurrency, allowedCurrencyCodes)) {
22
+ console.warn(`[mongoose-currency-convert] Invalid source currency code: ${fromCurrency}`);
23
+ continue;
24
+ }
25
+ if (!(0, helpers_1.isValidCurrencyCode)(toCurrency, allowedCurrencyCodes)) {
26
+ console.warn(`[mongoose-currency-convert] Invalid target currency code: ${toCurrency}`);
27
+ continue;
28
+ }
29
+ const dateValue = datePath ? (0, helpers_1.getNestedValue)(doc, datePath) : undefined;
30
+ let conversionDate = dateValue &&
31
+ (typeof dateValue === "string" ||
32
+ typeof dateValue === "number" ||
33
+ dateValue instanceof Date)
34
+ ? new Date(dateValue)
35
+ : new Date();
36
+ if (dateTransform)
37
+ conversionDate = dateTransform(conversionDate);
38
+ let rate;
39
+ const cacheKey = `${fromCurrency}_${toCurrency}_${conversionDate.toISOString().slice(0, 10)}`;
40
+ try {
41
+ if (cache)
42
+ rate = await cache.get(cacheKey);
43
+ if (rate === undefined) {
44
+ rate = await getRate(fromCurrency, toCurrency, conversionDate);
45
+ if (cache && rate !== undefined && !Number.isNaN(rate)) {
46
+ await cache.set(cacheKey, rate);
47
+ }
48
+ }
49
+ if (!rate || Number.isNaN(rate)) {
50
+ if (typeof fallbackRate === "number") {
51
+ rate = fallbackRate;
52
+ }
53
+ else {
54
+ throw new Error("Invalid rate");
55
+ }
56
+ }
57
+ const convertedValue = {
58
+ amount: round(Number(amount) * rate),
59
+ currency: toCurrency,
60
+ date: conversionDate,
61
+ };
62
+ (0, helpers_1.setNestedValue)(doc, targetPath, convertedValue);
63
+ convertedFields.push(targetPath);
64
+ }
65
+ catch (err) {
66
+ if (onError) {
67
+ onError({
68
+ field: sourcePath,
69
+ fromCurrency: fromCurrency,
70
+ toCurrency,
71
+ date: conversionDate,
72
+ error: err,
73
+ });
74
+ }
75
+ else {
76
+ console.error(`[mongoose-currency-convert] Error converting ${sourcePath}:`, err);
77
+ }
78
+ if (rollbackOnError) {
79
+ for (const path of convertedFields) {
80
+ (0, helpers_1.setNestedValue)(doc, path, undefined);
81
+ }
82
+ break;
83
+ }
84
+ }
85
+ }
86
+ }
87
+ schema.pre("save", async function () {
88
+ const doc = this.toObject({ depopulate: true });
89
+ await applyCurrencyConversion(doc);
90
+ Object.assign(this, doc);
91
+ });
92
+ async function handleUpdateMiddleware(next) {
93
+ const update = this.getUpdate();
94
+ if (!update)
95
+ return next();
96
+ const updateAny = update;
97
+ let doc;
98
+ if (typeof updateAny.$set === "object" && updateAny.$set !== null) {
99
+ doc = { ...updateAny.$set };
100
+ await applyCurrencyConversion(doc);
101
+ updateAny.$set = doc;
102
+ }
103
+ else {
104
+ doc = { ...updateAny };
105
+ await applyCurrencyConversion(doc);
106
+ Object.assign(updateAny, doc);
107
+ }
108
+ next();
109
+ }
110
+ schema.pre("findOneAndUpdate", handleUpdateMiddleware);
111
+ schema.pre("updateOne", handleUpdateMiddleware);
112
+ }
18
113
  //# sourceMappingURL=index.js.map
package/dist/index.d.ts CHANGED
@@ -1 +1,10 @@
1
- export * from "./plugin";
1
+ import type { Schema } from "mongoose";
2
+ import type { CurrencyPluginErrorContext, CurrencyPluginOptions, CurrencyRateCache } from "./types";
3
+ export declare function currencyConversionPlugin(schema: Schema, options: CurrencyPluginOptions & {
4
+ allowedCurrencyCodes?: string[];
5
+ onError?: (ctx: CurrencyPluginErrorContext) => void;
6
+ fallbackRate?: number;
7
+ rollbackOnError?: boolean;
8
+ cache?: CurrencyRateCache<number>;
9
+ dateTransform?: (date: Date) => Date;
10
+ }): void;
@@ -110,4 +110,4 @@ function currencyConversionPlugin(schema, options) {
110
110
  schema.pre("findOneAndUpdate", handleUpdateMiddleware);
111
111
  schema.pre("updateOne", handleUpdateMiddleware);
112
112
  }
113
- //# sourceMappingURL=plugin.js.map
113
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -9,6 +9,7 @@ export interface CurrencyPluginOptions {
9
9
  fields: CurrencyFieldConfig[];
10
10
  getRate: (from: string, to: string, date?: Date) => Promise<number>;
11
11
  round?: (value: number) => number;
12
+ cache?: CurrencyRateCache<number>;
12
13
  }
13
14
  export interface CurrencyPluginErrorContext {
14
15
  field: string;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimpleCache = void 0;
4
+ class SimpleCache {
5
+ store = new Map();
6
+ ttl;
7
+ constructor(ttlMinutes = 60) {
8
+ this.ttl = ttlMinutes * 60 * 1000;
9
+ }
10
+ isExpired(entry) {
11
+ return Date.now() > entry.expiresAt;
12
+ }
13
+ get(key) {
14
+ const entry = this.store.get(key);
15
+ if (!entry)
16
+ return undefined;
17
+ if (this.isExpired(entry)) {
18
+ this.store.delete(key);
19
+ return undefined;
20
+ }
21
+ return entry.value;
22
+ }
23
+ set(key, value) {
24
+ this.store.set(key, {
25
+ value,
26
+ expiresAt: Date.now() + this.ttl,
27
+ });
28
+ }
29
+ delete(key) {
30
+ this.store.delete(key);
31
+ }
32
+ clear() {
33
+ this.store.clear();
34
+ }
35
+ }
36
+ exports.SimpleCache = SimpleCache;
37
+ //# sourceMappingURL=cache.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mongoose-currency-convert",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "A lightweight Mongoose plugin for automatic currency conversion at save time - flexible, extensible, and service-agnostic.",
5
5
  "keywords": [
6
6
  "mongoose",
@@ -31,10 +31,10 @@
31
31
  "require": "./dist/index.cjs",
32
32
  "types": "./dist/index.d.ts"
33
33
  },
34
- "./utils": {
35
- "import": "./dist/utils/helpers.js",
36
- "require": "./dist/utils/helpers.cjs",
37
- "types": "./dist/utils/helpers.d.ts"
34
+ "./cache": {
35
+ "import": "./dist/utils/cache.js",
36
+ "require": "./dist/utils/cache.cjs",
37
+ "types": "./dist/utils/cache.d.ts"
38
38
  },
39
39
  "./types": {
40
40
  "import": "./dist/types.d.ts",
@@ -46,7 +46,7 @@
46
46
  ],
47
47
  "scripts": {
48
48
  "build:esm": "tsc -p tsconfig.json",
49
- "build:cjs": "tsc -p tsconfig.cjs.json --outDir dist --declaration false && for f in dist/*.js; do mv \"$f\" \"${f%.js}.cjs\"; done",
49
+ "build:cjs": "tsc -p tsconfig.cjs.json --outDir dist --declaration false && if [ -f dist/index.js ]; then cp dist/index.js dist/index.cjs; fi && if [ -f dist/utils/cache.js ]; then cp dist/utils/cache.js dist/utils/cache.cjs; fi",
50
50
  "build": "pnpm build:esm && pnpm build:cjs",
51
51
  "clean": "rm -rf dist",
52
52
  "prepare": "husky",
package/dist/plugin.d.ts DELETED
@@ -1,10 +0,0 @@
1
- import type { Schema } from "mongoose";
2
- import type { CurrencyPluginErrorContext, CurrencyPluginOptions, CurrencyRateCache } from "./types";
3
- export declare function currencyConversionPlugin(schema: Schema, options: CurrencyPluginOptions & {
4
- allowedCurrencyCodes?: string[];
5
- onError?: (ctx: CurrencyPluginErrorContext) => void;
6
- fallbackRate?: number;
7
- rollbackOnError?: boolean;
8
- cache?: CurrencyRateCache<number>;
9
- dateTransform?: (date: Date) => Date;
10
- }): void;
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
File without changes