@medusajs/locking-redis 0.0.2-snapshot-20241013171145
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/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/loaders/index.d.ts +4 -0
- package/dist/loaders/index.d.ts.map +1 -0
- package/dist/loaders/index.js +31 -0
- package/dist/loaders/index.js.map +1 -0
- package/dist/services/redis-lock.d.ts +40 -0
- package/dist/services/redis-lock.d.ts.map +1 -0
- package/dist/services/redis-lock.js +156 -0
- package/dist/services/redis-lock.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/index.d.ts +24 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +48 -0
package/dist/index.d.ts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAOA,wBAGE"}
|
package/dist/index.js
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
7
|
+
const loaders_1 = __importDefault(require("./loaders"));
|
8
|
+
const redis_lock_1 = require("./services/redis-lock");
|
9
|
+
const services = [redis_lock_1.RedisLockingProvider];
|
10
|
+
const loaders = [loaders_1.default];
|
11
|
+
exports.default = (0, utils_1.ModuleProvider)(utils_1.Modules.LOCKING, {
|
12
|
+
services,
|
13
|
+
loaders,
|
14
|
+
});
|
15
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,qDAAmE;AACnE,wDAA8B;AAC9B,sDAA4D;AAE5D,MAAM,QAAQ,GAAG,CAAC,iCAAoB,CAAC,CAAA;AACvC,MAAM,OAAO,GAAG,CAAC,iBAAM,CAAC,CAAA;AAExB,kBAAe,IAAA,sBAAc,EAAC,eAAO,CAAC,OAAO,EAAE;IAC7C,QAAQ;IACR,OAAO;CACR,CAAC,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/loaders/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;yEAUpD,qBAAqB,KAAG,OAAO,CAAC,IAAI,CAAC;AALxC,wBAkCC"}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
7
|
+
const awilix_1 = require("awilix");
|
8
|
+
const ioredis_1 = __importDefault(require("ioredis"));
|
9
|
+
exports.default = async ({ container, logger, options, moduleOptions, }) => {
|
10
|
+
const { redisUrl, redisOptions, namespace } = options;
|
11
|
+
if (!redisUrl) {
|
12
|
+
throw Error(`No "redisUrl" provided in "${utils_1.Modules.LOCKING}" module, "locking-redis" provider options. It is required for the "locking-redis" Module provider.`);
|
13
|
+
}
|
14
|
+
const connection = new ioredis_1.default(redisUrl, {
|
15
|
+
// Lazy connect to properly handle connection errors
|
16
|
+
lazyConnect: true,
|
17
|
+
...(redisOptions ?? {}),
|
18
|
+
});
|
19
|
+
try {
|
20
|
+
await connection.connect();
|
21
|
+
logger?.info(`Connection to Redis in "locking-redis" provider established`);
|
22
|
+
}
|
23
|
+
catch (err) {
|
24
|
+
logger?.error(`An error occurred while connecting to Redis in provider "locking-redis": ${err}`);
|
25
|
+
}
|
26
|
+
container.register({
|
27
|
+
redisClient: (0, awilix_1.asValue)(connection),
|
28
|
+
prefix: (0, awilix_1.asValue)(namespace ?? "medusa_lock:"),
|
29
|
+
});
|
30
|
+
};
|
31
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/loaders/index.ts"],"names":[],"mappings":";;;;;AAAA,qDAAmD;AAGnD,mCAAgC;AAChC,sDAA2B;AAE3B,kBAAe,KAAK,EAAE,EACpB,SAAS,EACT,MAAM,EACN,OAAO,EACP,aAAa,GACS,EAAiB,EAAE;IACzC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,GACzC,OAAkC,CAAA;IAEpC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,KAAK,CACT,8BAA8B,eAAO,CAAC,OAAO,qGAAqG,CACnJ,CAAA;IACH,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,iBAAK,CAAC,QAAQ,EAAE;QACrC,oDAAoD;QACpD,WAAW,EAAE,IAAI;QACjB,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;KACxB,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;QAC1B,MAAM,EAAE,IAAI,CAAC,6DAA6D,CAAC,CAAA;IAC7E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,KAAK,CACX,4EAA4E,GAAG,EAAE,CAClF,CAAA;IACH,CAAC;IAED,SAAS,CAAC,QAAQ,CAAC;QACjB,WAAW,EAAE,IAAA,gBAAO,EAAC,UAAU,CAAC;QAChC,MAAM,EAAE,IAAA,gBAAO,EAAC,SAAS,IAAI,cAAc,CAAC;KAC7C,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import { ILockingProvider } from "@medusajs/types";
|
2
|
+
import { Redis } from "ioredis";
|
3
|
+
declare const RedisLockingProvider_base: import("@medusajs/framework/utils").MedusaServiceReturnType<import("@medusajs/framework/utils").ModelConfigurationsToConfigTemplate<{}>>;
|
4
|
+
export declare class RedisLockingProvider extends RedisLockingProvider_base implements ILockingProvider {
|
5
|
+
static identifier: string;
|
6
|
+
protected redisClient: Redis & {
|
7
|
+
acquireLock: (key: string, ownerId: string, ttl: number, awaitQueue?: boolean) => Promise<number>;
|
8
|
+
releaseLock: (key: string, ownerId: string) => Promise<number>;
|
9
|
+
};
|
10
|
+
protected keyNamePrefix: string;
|
11
|
+
constructor({ redisClient, prefix }: {
|
12
|
+
redisClient: any;
|
13
|
+
prefix: any;
|
14
|
+
});
|
15
|
+
private getKeyName;
|
16
|
+
execute<T>(keys: string | string[], job: () => Promise<T>, args?: {
|
17
|
+
timeout?: number;
|
18
|
+
}): Promise<T>;
|
19
|
+
acquire(keys: string | string[], args?: {
|
20
|
+
ownerId?: string;
|
21
|
+
expire?: number;
|
22
|
+
awaitQueue?: boolean;
|
23
|
+
}): Promise<void>;
|
24
|
+
acquire_(keys: string | string[], args?: {
|
25
|
+
ownerId?: string;
|
26
|
+
expire?: number;
|
27
|
+
awaitQueue?: boolean;
|
28
|
+
}, cancellationToken?: {
|
29
|
+
cancelled: boolean;
|
30
|
+
}): Promise<void>;
|
31
|
+
release(keys: string | string[], args?: {
|
32
|
+
ownerId?: string | null;
|
33
|
+
}): Promise<boolean>;
|
34
|
+
releaseAll(args?: {
|
35
|
+
ownerId?: string | null;
|
36
|
+
}): Promise<void>;
|
37
|
+
private getTimeout;
|
38
|
+
}
|
39
|
+
export {};
|
40
|
+
//# sourceMappingURL=redis-lock.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"redis-lock.d.ts","sourceRoot":"","sources":["../../src/services/redis-lock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;;AAG/B,qBAAa,oBACX,SAAQ,yBACR,YAAW,gBAAgB;IAE3B,MAAM,CAAC,UAAU,SAAkB;IAEnC,SAAS,CAAC,WAAW,EAAE,KAAK,GAAG;QAC7B,WAAW,EAAE,CACX,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,OAAO,KACjB,OAAO,CAAC,MAAM,CAAC,CAAA;QACpB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;KAC/D,CAAA;IACD,SAAS,CAAC,aAAa,EAAE,MAAM,CAAA;gBAEnB,EAAE,WAAW,EAAE,MAAM,EAAE;;;KAAA;IAiDnC,OAAO,CAAC,UAAU;IAIZ,OAAO,CAAC,CAAC,EACb,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACrB,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,GACA,OAAO,CAAC,CAAC,CAAC;IA6BP,OAAO,CACX,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,GACA,OAAO,CAAC,IAAI,CAAC;IAIV,QAAQ,CACZ,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,EACD,iBAAiB,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,GACzC,OAAO,CAAC,IAAI,CAAC;IA4CV,OAAO,CACX,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KACxB,GACA,OAAO,CAAC,OAAO,CAAC;IAeb,UAAU,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAwCrD,UAAU;CAUzB"}
|
@@ -0,0 +1,156 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.RedisLockingProvider = void 0;
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
5
|
+
const promises_1 = require("node:timers/promises");
|
6
|
+
class RedisLockingProvider extends (0, utils_1.MedusaService)({}) {
|
7
|
+
constructor({ redisClient, prefix }) {
|
8
|
+
super(...arguments);
|
9
|
+
this.redisClient = redisClient;
|
10
|
+
this.keyNamePrefix = prefix ?? "medusa_lock:";
|
11
|
+
// Define the custom command for acquiring locks
|
12
|
+
this.redisClient.defineCommand("acquireLock", {
|
13
|
+
numberOfKeys: 1,
|
14
|
+
lua: `
|
15
|
+
local key = KEYS[1]
|
16
|
+
local ownerId = ARGV[1]
|
17
|
+
local ttl = tonumber(ARGV[2])
|
18
|
+
local awaitQueue = ARGV[3] == 'true'
|
19
|
+
|
20
|
+
local setResult = redis.call('SET', key, ownerId, 'EX', ttl, 'NX')
|
21
|
+
|
22
|
+
if setResult then
|
23
|
+
return 1
|
24
|
+
elseif not awaitQueue then
|
25
|
+
-- Key already exists; retrieve the current ownerId
|
26
|
+
local currentOwnerId = redis.call('GET', key)
|
27
|
+
if currentOwnerId == ownerId then
|
28
|
+
redis.call('SET', key, ownerId, 'EX', ttl, 'XX')
|
29
|
+
return 1
|
30
|
+
else
|
31
|
+
return 0
|
32
|
+
end
|
33
|
+
else
|
34
|
+
return 0
|
35
|
+
end
|
36
|
+
`,
|
37
|
+
});
|
38
|
+
// Define the custom command for releasing locks
|
39
|
+
this.redisClient.defineCommand("releaseLock", {
|
40
|
+
numberOfKeys: 1,
|
41
|
+
lua: `
|
42
|
+
local key = KEYS[1]
|
43
|
+
local ownerId = ARGV[1]
|
44
|
+
|
45
|
+
if redis.call('GET', key) == ownerId then
|
46
|
+
return redis.call('DEL', key)
|
47
|
+
else
|
48
|
+
return 0
|
49
|
+
end
|
50
|
+
`,
|
51
|
+
});
|
52
|
+
}
|
53
|
+
getKeyName(key) {
|
54
|
+
return `${this.keyNamePrefix}${key}`;
|
55
|
+
}
|
56
|
+
async execute(keys, job, args) {
|
57
|
+
const timeout = Math.max(args?.timeout ?? 5, 1);
|
58
|
+
const timeoutSeconds = Number.isNaN(timeout) ? 1 : timeout;
|
59
|
+
const cancellationToken = { cancelled: false };
|
60
|
+
const promises = [];
|
61
|
+
if (timeoutSeconds > 0) {
|
62
|
+
promises.push(this.getTimeout(timeoutSeconds, cancellationToken));
|
63
|
+
}
|
64
|
+
promises.push(this.acquire_(keys, {
|
65
|
+
awaitQueue: true,
|
66
|
+
}, cancellationToken));
|
67
|
+
await Promise.race(promises);
|
68
|
+
try {
|
69
|
+
return await job();
|
70
|
+
}
|
71
|
+
finally {
|
72
|
+
await this.release(keys);
|
73
|
+
}
|
74
|
+
}
|
75
|
+
async acquire(keys, args) {
|
76
|
+
return this.acquire_(keys, args);
|
77
|
+
}
|
78
|
+
async acquire_(keys, args, cancellationToken) {
|
79
|
+
keys = Array.isArray(keys) ? keys : [keys];
|
80
|
+
const timeout = Math.max(args?.expire ?? 5, 1);
|
81
|
+
const timeoutSeconds = Number.isNaN(timeout) ? 1 : timeout;
|
82
|
+
const ownerId = args?.ownerId ?? "*";
|
83
|
+
const awaitQueue = args?.awaitQueue ?? false;
|
84
|
+
const acquirePromises = keys.map(async (key) => {
|
85
|
+
const keyName = this.getKeyName(key);
|
86
|
+
const acquireLock = async () => {
|
87
|
+
while (true) {
|
88
|
+
if (cancellationToken?.cancelled) {
|
89
|
+
return;
|
90
|
+
}
|
91
|
+
const result = await this.redisClient.acquireLock(keyName, ownerId, timeoutSeconds, awaitQueue);
|
92
|
+
if (result === 1) {
|
93
|
+
break;
|
94
|
+
}
|
95
|
+
else {
|
96
|
+
if (awaitQueue) {
|
97
|
+
// Wait for a short period before retrying
|
98
|
+
await (0, promises_1.setTimeout)(100);
|
99
|
+
}
|
100
|
+
else {
|
101
|
+
throw new Error(`Failed to acquire lock for key "${key}"`);
|
102
|
+
}
|
103
|
+
}
|
104
|
+
}
|
105
|
+
};
|
106
|
+
await acquireLock();
|
107
|
+
});
|
108
|
+
await Promise.all(acquirePromises);
|
109
|
+
}
|
110
|
+
async release(keys, args) {
|
111
|
+
const ownerId = args?.ownerId ?? "*";
|
112
|
+
keys = Array.isArray(keys) ? keys : [keys];
|
113
|
+
const releasePromises = keys.map(async (key) => {
|
114
|
+
const keyName = this.getKeyName(key);
|
115
|
+
const result = await this.redisClient.releaseLock(keyName, ownerId);
|
116
|
+
return result === 1;
|
117
|
+
});
|
118
|
+
const results = await Promise.all(releasePromises);
|
119
|
+
return results.every((released) => released);
|
120
|
+
}
|
121
|
+
async releaseAll(args) {
|
122
|
+
const ownerId = args?.ownerId ?? "*";
|
123
|
+
const pattern = `${this.keyNamePrefix}*`;
|
124
|
+
let cursor = "0";
|
125
|
+
do {
|
126
|
+
const result = await this.redisClient.scan(cursor, "MATCH", pattern, "COUNT", 100);
|
127
|
+
cursor = result[0];
|
128
|
+
const keys = result[1];
|
129
|
+
if (keys.length > 0) {
|
130
|
+
const pipeline = this.redisClient.pipeline();
|
131
|
+
keys.forEach((key) => {
|
132
|
+
pipeline.get(key);
|
133
|
+
});
|
134
|
+
const currentOwners = await pipeline.exec();
|
135
|
+
const deletePipeline = this.redisClient.pipeline();
|
136
|
+
keys.forEach((key, idx) => {
|
137
|
+
const currentOwner = currentOwners?.[idx]?.[1];
|
138
|
+
if (currentOwner === ownerId) {
|
139
|
+
deletePipeline.del(key);
|
140
|
+
}
|
141
|
+
});
|
142
|
+
await deletePipeline.exec();
|
143
|
+
}
|
144
|
+
} while (cursor !== "0");
|
145
|
+
}
|
146
|
+
async getTimeout(seconds, cancellationToken) {
|
147
|
+
return new Promise(async (_, reject) => {
|
148
|
+
await (0, promises_1.setTimeout)(seconds * 1000);
|
149
|
+
cancellationToken.cancelled = true;
|
150
|
+
reject(new Error("Timed-out acquiring lock."));
|
151
|
+
});
|
152
|
+
}
|
153
|
+
}
|
154
|
+
exports.RedisLockingProvider = RedisLockingProvider;
|
155
|
+
RedisLockingProvider.identifier = "locking-redis";
|
156
|
+
//# sourceMappingURL=redis-lock.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"redis-lock.js","sourceRoot":"","sources":["../../src/services/redis-lock.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"root":["../src/index.ts","../src/loaders/index.ts","../src/services/redis-lock.ts","../src/types/index.ts"],"version":"5.6.2"}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import { RedisOptions } from "ioredis";
|
2
|
+
/**
|
3
|
+
* Module config type
|
4
|
+
*/
|
5
|
+
export type RedisCacheModuleOptions = {
|
6
|
+
/**
|
7
|
+
* Time to keep data in cache (in seconds)
|
8
|
+
*/
|
9
|
+
ttl?: number;
|
10
|
+
/**
|
11
|
+
* Redis connection string
|
12
|
+
*/
|
13
|
+
redisUrl?: string;
|
14
|
+
/**
|
15
|
+
* Redis client options
|
16
|
+
*/
|
17
|
+
redisOptions?: RedisOptions;
|
18
|
+
/**
|
19
|
+
* Prefix for event keys
|
20
|
+
* @default `medusa_lock:`
|
21
|
+
*/
|
22
|
+
namespace?: string;
|
23
|
+
};
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAE3B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
{
|
2
|
+
"name": "@medusajs/locking-redis",
|
3
|
+
"version": "0.0.2-snapshot-20241013171145",
|
4
|
+
"description": "Redis Lock for Medusa",
|
5
|
+
"main": "dist/index.js",
|
6
|
+
"repository": {
|
7
|
+
"type": "git",
|
8
|
+
"url": "https://github.com/medusajs/medusa",
|
9
|
+
"directory": "packages/locking-redis"
|
10
|
+
},
|
11
|
+
"files": [
|
12
|
+
"dist",
|
13
|
+
"!dist/**/__tests__",
|
14
|
+
"!dist/**/__mocks__",
|
15
|
+
"!dist/**/__fixtures__"
|
16
|
+
],
|
17
|
+
"engines": {
|
18
|
+
"node": ">=20"
|
19
|
+
},
|
20
|
+
"author": "Medusa",
|
21
|
+
"license": "MIT",
|
22
|
+
"devDependencies": {
|
23
|
+
"@medusajs/framework": "0.0.2-snapshot-20241013171145",
|
24
|
+
"@swc/core": "^1.7.28",
|
25
|
+
"@swc/jest": "^0.2.36",
|
26
|
+
"jest": "^29.7.0",
|
27
|
+
"rimraf": "^5.0.1",
|
28
|
+
"typescript": "^5.6.2"
|
29
|
+
},
|
30
|
+
"peerDependencies": {
|
31
|
+
"@medusajs/framework": "0.0.2-snapshot-20241013171145"
|
32
|
+
},
|
33
|
+
"dependencies": {
|
34
|
+
"ioredis": "^5.4.1"
|
35
|
+
},
|
36
|
+
"scripts": {
|
37
|
+
"watch": "tsc --build --watch",
|
38
|
+
"watch:test": "tsc --build tsconfig.spec.json --watch",
|
39
|
+
"resolve:aliases": "tsc --showConfig -p tsconfig.json > tsconfig.resolved.json && tsc-alias -p tsconfig.resolved.json && rimraf tsconfig.resolved.json",
|
40
|
+
"build": "rimraf dist && tsc --build && npm run resolve:aliases",
|
41
|
+
"test": "jest --passWithNoTests src",
|
42
|
+
"test:integration": "jest --runInBand --forceExit -- integration-tests/**/__tests__/**/*.spec.ts"
|
43
|
+
},
|
44
|
+
"keywords": [
|
45
|
+
"medusa-providers",
|
46
|
+
"medusa-providers-locking"
|
47
|
+
]
|
48
|
+
}
|