@tslock/mongo 2.2.0 → 2.3.0
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.cjs +10 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +9 -21
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -26,40 +26,22 @@ __export(index_exports, {
|
|
|
26
26
|
module.exports = __toCommonJS(index_exports);
|
|
27
27
|
|
|
28
28
|
// src/mongo-accessor.ts
|
|
29
|
-
var import_core2 = require("@tslock/core");
|
|
30
|
-
var import_mongodb = require("mongodb");
|
|
31
|
-
|
|
32
|
-
// src/mongo-lock.ts
|
|
33
29
|
var import_core = require("@tslock/core");
|
|
34
|
-
var
|
|
35
|
-
constructor(config, accessor) {
|
|
36
|
-
super(config);
|
|
37
|
-
this.accessor = accessor;
|
|
38
|
-
}
|
|
39
|
-
accessor;
|
|
40
|
-
async doUnlock() {
|
|
41
|
-
await this.accessor.unlock(this.config);
|
|
42
|
-
}
|
|
43
|
-
async doExtend(newConfig) {
|
|
44
|
-
return await this.accessor.extend(newConfig);
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
// src/mongo-accessor.ts
|
|
30
|
+
var import_mongodb = require("mongodb");
|
|
49
31
|
var MongoAccessor = class {
|
|
50
32
|
constructor(collection) {
|
|
51
33
|
this.collection = collection;
|
|
52
34
|
}
|
|
53
35
|
collection;
|
|
54
36
|
async lock(config) {
|
|
55
|
-
const now =
|
|
56
|
-
const hostname =
|
|
37
|
+
const now = import_core.ClockProvider.now();
|
|
38
|
+
const hostname = import_core.Utils.getHostname();
|
|
57
39
|
try {
|
|
58
40
|
const result = await this.collection.findOneAndUpdate(
|
|
59
41
|
{ _id: config.name, lockUntil: { $lte: new Date(now) } },
|
|
60
42
|
{
|
|
61
43
|
$set: {
|
|
62
|
-
lockUntil: new Date((0,
|
|
44
|
+
lockUntil: new Date((0, import_core.lockAtMostUntil)(config)),
|
|
63
45
|
lockedAt: new Date(now),
|
|
64
46
|
lockedBy: hostname
|
|
65
47
|
}
|
|
@@ -67,7 +49,7 @@ var MongoAccessor = class {
|
|
|
67
49
|
{ upsert: true, returnDocument: "after" }
|
|
68
50
|
);
|
|
69
51
|
if (!result) return void 0;
|
|
70
|
-
return new
|
|
52
|
+
return new import_core.DelegatingSimpleLock(config, this);
|
|
71
53
|
} catch (e) {
|
|
72
54
|
if (e instanceof import_mongodb.MongoServerError && e.code === 11e3) {
|
|
73
55
|
return void 0;
|
|
@@ -76,24 +58,24 @@ var MongoAccessor = class {
|
|
|
76
58
|
}
|
|
77
59
|
}
|
|
78
60
|
async extend(config) {
|
|
79
|
-
const now =
|
|
80
|
-
const hostname =
|
|
61
|
+
const now = import_core.ClockProvider.now();
|
|
62
|
+
const hostname = import_core.Utils.getHostname();
|
|
81
63
|
const result = await this.collection.findOneAndUpdate(
|
|
82
64
|
{
|
|
83
65
|
_id: config.name,
|
|
84
66
|
lockUntil: { $gt: new Date(now) },
|
|
85
67
|
lockedBy: hostname
|
|
86
68
|
},
|
|
87
|
-
{ $set: { lockUntil: new Date((0,
|
|
69
|
+
{ $set: { lockUntil: new Date((0, import_core.lockAtMostUntil)(config)) } },
|
|
88
70
|
{ returnDocument: "after" }
|
|
89
71
|
);
|
|
90
72
|
if (!result) return void 0;
|
|
91
|
-
return new
|
|
73
|
+
return new import_core.DelegatingSimpleLock(config, this);
|
|
92
74
|
}
|
|
93
75
|
async unlock(config) {
|
|
94
76
|
await this.collection.findOneAndUpdate(
|
|
95
77
|
{ _id: config.name },
|
|
96
|
-
{ $set: { lockUntil: new Date((0,
|
|
78
|
+
{ $set: { lockUntil: new Date((0, import_core.unlockTime)(config)) } }
|
|
97
79
|
);
|
|
98
80
|
}
|
|
99
81
|
};
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/mongo-accessor.ts","../src/mongo-lock
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/mongo-accessor.ts","../src/mongo-lock-provider.ts"],"sourcesContent":["export type { MongoLockDocument } from './mongo-lock-document.js';\nexport type { MongoLockProviderOptions } from './mongo-lock-provider.js';\nexport { createMongoLockProvider, MongoLockProvider } from './mongo-lock-provider.js';\n","import {\n ClockProvider,\n DelegatingSimpleLock,\n type LockConfiguration,\n lockAtMostUntil,\n type SimpleLock,\n Utils,\n unlockTime,\n} from '@tslock/core';\nimport type { Collection, Document, Filter, FindOneAndUpdateOptions } from 'mongodb';\nimport { MongoServerError } from 'mongodb';\nimport type { MongoLockDocument } from './mongo-lock-document.js';\n\nexport class MongoAccessor {\n constructor(private readonly collection: Collection<MongoLockDocument>) {}\n\n async lock(config: LockConfiguration): Promise<SimpleLock | undefined> {\n const now = ClockProvider.now();\n const hostname = Utils.getHostname();\n try {\n const result = await this.collection.findOneAndUpdate(\n { _id: config.name, lockUntil: { $lte: new Date(now) } } as Filter<MongoLockDocument>,\n {\n $set: {\n lockUntil: new Date(lockAtMostUntil(config)),\n lockedAt: new Date(now),\n lockedBy: hostname,\n } as unknown as Document,\n },\n { upsert: true, returnDocument: 'after' } as FindOneAndUpdateOptions,\n );\n if (!result) return undefined;\n return new DelegatingSimpleLock(config, this);\n } catch (e) {\n if (e instanceof MongoServerError && e.code === 11000) {\n return undefined;\n }\n throw e;\n }\n }\n\n async extend(config: LockConfiguration): Promise<SimpleLock | undefined> {\n const now = ClockProvider.now();\n const hostname = Utils.getHostname();\n const result = await this.collection.findOneAndUpdate(\n {\n _id: config.name,\n lockUntil: { $gt: new Date(now) },\n lockedBy: hostname,\n } as Filter<MongoLockDocument>,\n { $set: { lockUntil: new Date(lockAtMostUntil(config)) } } as unknown as Document,\n { returnDocument: 'after' } as FindOneAndUpdateOptions,\n );\n if (!result) return undefined;\n return new DelegatingSimpleLock(config, this);\n }\n\n async unlock(config: LockConfiguration): Promise<void> {\n await this.collection.findOneAndUpdate(\n { _id: config.name } as Filter<MongoLockDocument>,\n { $set: { lockUntil: new Date(unlockTime(config)) } } as unknown as Document,\n );\n }\n}\n","import type { ExtensibleLockProvider, LockConfiguration, SimpleLock } from '@tslock/core';\nimport type { Collection, Db } from 'mongodb';\nimport { MongoAccessor } from './mongo-accessor.js';\nimport type { MongoLockDocument } from './mongo-lock-document.js';\n\nexport interface MongoLockProviderOptions {\n collection?: string;\n collectionOptions?: {\n writeConcern?: { w?: 'majority' | number; j?: boolean; wtimeoutMS?: number };\n readConcern?: { level?: 'local' | 'majority' | 'linearizable' | 'available' | 'snapshot' };\n };\n}\n\nexport class MongoLockProvider implements ExtensibleLockProvider {\n private readonly accessor: MongoAccessor;\n\n constructor(collection: Collection<MongoLockDocument>) {\n this.accessor = new MongoAccessor(collection);\n }\n\n async lock(config: LockConfiguration): Promise<SimpleLock | undefined> {\n return this.accessor.lock(config);\n }\n}\n\nexport function createMongoLockProvider(db: Db, options?: MongoLockProviderOptions): MongoLockProvider {\n const collectionName = options?.collection ?? 'shedLock';\n const writeConcern = { w: 'majority' as const, ...options?.collectionOptions?.writeConcern };\n const readConcern = { level: 'majority' as const, ...options?.collectionOptions?.readConcern };\n const collection = db.collection<MongoLockDocument>(collectionName, { writeConcern, readConcern });\n return new MongoLockProvider(collection);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,kBAQO;AAEP,qBAAiC;AAG1B,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAA6B,YAA2C;AAA3C;AAAA,EAA4C;AAAA,EAA5C;AAAA,EAE7B,MAAM,KAAK,QAA4D;AACrE,UAAM,MAAM,0BAAc,IAAI;AAC9B,UAAM,WAAW,kBAAM,YAAY;AACnC,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,WAAW;AAAA,QACnC,EAAE,KAAK,OAAO,MAAM,WAAW,EAAE,MAAM,IAAI,KAAK,GAAG,EAAE,EAAE;AAAA,QACvD;AAAA,UACE,MAAM;AAAA,YACJ,WAAW,IAAI,SAAK,6BAAgB,MAAM,CAAC;AAAA,YAC3C,UAAU,IAAI,KAAK,GAAG;AAAA,YACtB,UAAU;AAAA,UACZ;AAAA,QACF;AAAA,QACA,EAAE,QAAQ,MAAM,gBAAgB,QAAQ;AAAA,MAC1C;AACA,UAAI,CAAC,OAAQ,QAAO;AACpB,aAAO,IAAI,iCAAqB,QAAQ,IAAI;AAAA,IAC9C,SAAS,GAAG;AACV,UAAI,aAAa,mCAAoB,EAAE,SAAS,MAAO;AACrD,eAAO;AAAA,MACT;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,QAA4D;AACvE,UAAM,MAAM,0BAAc,IAAI;AAC9B,UAAM,WAAW,kBAAM,YAAY;AACnC,UAAM,SAAS,MAAM,KAAK,WAAW;AAAA,MACnC;AAAA,QACE,KAAK,OAAO;AAAA,QACZ,WAAW,EAAE,KAAK,IAAI,KAAK,GAAG,EAAE;AAAA,QAChC,UAAU;AAAA,MACZ;AAAA,MACA,EAAE,MAAM,EAAE,WAAW,IAAI,SAAK,6BAAgB,MAAM,CAAC,EAAE,EAAE;AAAA,MACzD,EAAE,gBAAgB,QAAQ;AAAA,IAC5B;AACA,QAAI,CAAC,OAAQ,QAAO;AACpB,WAAO,IAAI,iCAAqB,QAAQ,IAAI;AAAA,EAC9C;AAAA,EAEA,MAAM,OAAO,QAA0C;AACrD,UAAM,KAAK,WAAW;AAAA,MACpB,EAAE,KAAK,OAAO,KAAK;AAAA,MACnB,EAAE,MAAM,EAAE,WAAW,IAAI,SAAK,wBAAW,MAAM,CAAC,EAAE,EAAE;AAAA,IACtD;AAAA,EACF;AACF;;;AClDO,IAAM,oBAAN,MAA0D;AAAA,EAC9C;AAAA,EAEjB,YAAY,YAA2C;AACrD,SAAK,WAAW,IAAI,cAAc,UAAU;AAAA,EAC9C;AAAA,EAEA,MAAM,KAAK,QAA4D;AACrE,WAAO,KAAK,SAAS,KAAK,MAAM;AAAA,EAClC;AACF;AAEO,SAAS,wBAAwB,IAAQ,SAAuD;AACrG,QAAM,iBAAiB,SAAS,cAAc;AAC9C,QAAM,eAAe,EAAE,GAAG,YAAqB,GAAG,SAAS,mBAAmB,aAAa;AAC3F,QAAM,cAAc,EAAE,OAAO,YAAqB,GAAG,SAAS,mBAAmB,YAAY;AAC7F,QAAM,aAAa,GAAG,WAA8B,gBAAgB,EAAE,cAAc,YAAY,CAAC;AACjG,SAAO,IAAI,kBAAkB,UAAU;AACzC;","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -1,24 +1,12 @@
|
|
|
1
1
|
// src/mongo-accessor.ts
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
ClockProvider,
|
|
4
|
+
DelegatingSimpleLock,
|
|
5
|
+
lockAtMostUntil,
|
|
6
|
+
Utils,
|
|
7
|
+
unlockTime
|
|
8
|
+
} from "@tslock/core";
|
|
3
9
|
import { MongoServerError } from "mongodb";
|
|
4
|
-
|
|
5
|
-
// src/mongo-lock.ts
|
|
6
|
-
import { AbstractSimpleLock } from "@tslock/core";
|
|
7
|
-
var MongoLock = class extends AbstractSimpleLock {
|
|
8
|
-
constructor(config, accessor) {
|
|
9
|
-
super(config);
|
|
10
|
-
this.accessor = accessor;
|
|
11
|
-
}
|
|
12
|
-
accessor;
|
|
13
|
-
async doUnlock() {
|
|
14
|
-
await this.accessor.unlock(this.config);
|
|
15
|
-
}
|
|
16
|
-
async doExtend(newConfig) {
|
|
17
|
-
return await this.accessor.extend(newConfig);
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
// src/mongo-accessor.ts
|
|
22
10
|
var MongoAccessor = class {
|
|
23
11
|
constructor(collection) {
|
|
24
12
|
this.collection = collection;
|
|
@@ -40,7 +28,7 @@ var MongoAccessor = class {
|
|
|
40
28
|
{ upsert: true, returnDocument: "after" }
|
|
41
29
|
);
|
|
42
30
|
if (!result) return void 0;
|
|
43
|
-
return new
|
|
31
|
+
return new DelegatingSimpleLock(config, this);
|
|
44
32
|
} catch (e) {
|
|
45
33
|
if (e instanceof MongoServerError && e.code === 11e3) {
|
|
46
34
|
return void 0;
|
|
@@ -61,7 +49,7 @@ var MongoAccessor = class {
|
|
|
61
49
|
{ returnDocument: "after" }
|
|
62
50
|
);
|
|
63
51
|
if (!result) return void 0;
|
|
64
|
-
return new
|
|
52
|
+
return new DelegatingSimpleLock(config, this);
|
|
65
53
|
}
|
|
66
54
|
async unlock(config) {
|
|
67
55
|
await this.collection.findOneAndUpdate(
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/mongo-accessor.ts","../src/mongo-lock
|
|
1
|
+
{"version":3,"sources":["../src/mongo-accessor.ts","../src/mongo-lock-provider.ts"],"sourcesContent":["import {\n ClockProvider,\n DelegatingSimpleLock,\n type LockConfiguration,\n lockAtMostUntil,\n type SimpleLock,\n Utils,\n unlockTime,\n} from '@tslock/core';\nimport type { Collection, Document, Filter, FindOneAndUpdateOptions } from 'mongodb';\nimport { MongoServerError } from 'mongodb';\nimport type { MongoLockDocument } from './mongo-lock-document.js';\n\nexport class MongoAccessor {\n constructor(private readonly collection: Collection<MongoLockDocument>) {}\n\n async lock(config: LockConfiguration): Promise<SimpleLock | undefined> {\n const now = ClockProvider.now();\n const hostname = Utils.getHostname();\n try {\n const result = await this.collection.findOneAndUpdate(\n { _id: config.name, lockUntil: { $lte: new Date(now) } } as Filter<MongoLockDocument>,\n {\n $set: {\n lockUntil: new Date(lockAtMostUntil(config)),\n lockedAt: new Date(now),\n lockedBy: hostname,\n } as unknown as Document,\n },\n { upsert: true, returnDocument: 'after' } as FindOneAndUpdateOptions,\n );\n if (!result) return undefined;\n return new DelegatingSimpleLock(config, this);\n } catch (e) {\n if (e instanceof MongoServerError && e.code === 11000) {\n return undefined;\n }\n throw e;\n }\n }\n\n async extend(config: LockConfiguration): Promise<SimpleLock | undefined> {\n const now = ClockProvider.now();\n const hostname = Utils.getHostname();\n const result = await this.collection.findOneAndUpdate(\n {\n _id: config.name,\n lockUntil: { $gt: new Date(now) },\n lockedBy: hostname,\n } as Filter<MongoLockDocument>,\n { $set: { lockUntil: new Date(lockAtMostUntil(config)) } } as unknown as Document,\n { returnDocument: 'after' } as FindOneAndUpdateOptions,\n );\n if (!result) return undefined;\n return new DelegatingSimpleLock(config, this);\n }\n\n async unlock(config: LockConfiguration): Promise<void> {\n await this.collection.findOneAndUpdate(\n { _id: config.name } as Filter<MongoLockDocument>,\n { $set: { lockUntil: new Date(unlockTime(config)) } } as unknown as Document,\n );\n }\n}\n","import type { ExtensibleLockProvider, LockConfiguration, SimpleLock } from '@tslock/core';\nimport type { Collection, Db } from 'mongodb';\nimport { MongoAccessor } from './mongo-accessor.js';\nimport type { MongoLockDocument } from './mongo-lock-document.js';\n\nexport interface MongoLockProviderOptions {\n collection?: string;\n collectionOptions?: {\n writeConcern?: { w?: 'majority' | number; j?: boolean; wtimeoutMS?: number };\n readConcern?: { level?: 'local' | 'majority' | 'linearizable' | 'available' | 'snapshot' };\n };\n}\n\nexport class MongoLockProvider implements ExtensibleLockProvider {\n private readonly accessor: MongoAccessor;\n\n constructor(collection: Collection<MongoLockDocument>) {\n this.accessor = new MongoAccessor(collection);\n }\n\n async lock(config: LockConfiguration): Promise<SimpleLock | undefined> {\n return this.accessor.lock(config);\n }\n}\n\nexport function createMongoLockProvider(db: Db, options?: MongoLockProviderOptions): MongoLockProvider {\n const collectionName = options?.collection ?? 'shedLock';\n const writeConcern = { w: 'majority' as const, ...options?.collectionOptions?.writeConcern };\n const readConcern = { level: 'majority' as const, ...options?.collectionOptions?.readConcern };\n const collection = db.collection<MongoLockDocument>(collectionName, { writeConcern, readConcern });\n return new MongoLockProvider(collection);\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EAEA;AAAA,EAEA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,wBAAwB;AAG1B,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAA6B,YAA2C;AAA3C;AAAA,EAA4C;AAAA,EAA5C;AAAA,EAE7B,MAAM,KAAK,QAA4D;AACrE,UAAM,MAAM,cAAc,IAAI;AAC9B,UAAM,WAAW,MAAM,YAAY;AACnC,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,WAAW;AAAA,QACnC,EAAE,KAAK,OAAO,MAAM,WAAW,EAAE,MAAM,IAAI,KAAK,GAAG,EAAE,EAAE;AAAA,QACvD;AAAA,UACE,MAAM;AAAA,YACJ,WAAW,IAAI,KAAK,gBAAgB,MAAM,CAAC;AAAA,YAC3C,UAAU,IAAI,KAAK,GAAG;AAAA,YACtB,UAAU;AAAA,UACZ;AAAA,QACF;AAAA,QACA,EAAE,QAAQ,MAAM,gBAAgB,QAAQ;AAAA,MAC1C;AACA,UAAI,CAAC,OAAQ,QAAO;AACpB,aAAO,IAAI,qBAAqB,QAAQ,IAAI;AAAA,IAC9C,SAAS,GAAG;AACV,UAAI,aAAa,oBAAoB,EAAE,SAAS,MAAO;AACrD,eAAO;AAAA,MACT;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,QAA4D;AACvE,UAAM,MAAM,cAAc,IAAI;AAC9B,UAAM,WAAW,MAAM,YAAY;AACnC,UAAM,SAAS,MAAM,KAAK,WAAW;AAAA,MACnC;AAAA,QACE,KAAK,OAAO;AAAA,QACZ,WAAW,EAAE,KAAK,IAAI,KAAK,GAAG,EAAE;AAAA,QAChC,UAAU;AAAA,MACZ;AAAA,MACA,EAAE,MAAM,EAAE,WAAW,IAAI,KAAK,gBAAgB,MAAM,CAAC,EAAE,EAAE;AAAA,MACzD,EAAE,gBAAgB,QAAQ;AAAA,IAC5B;AACA,QAAI,CAAC,OAAQ,QAAO;AACpB,WAAO,IAAI,qBAAqB,QAAQ,IAAI;AAAA,EAC9C;AAAA,EAEA,MAAM,OAAO,QAA0C;AACrD,UAAM,KAAK,WAAW;AAAA,MACpB,EAAE,KAAK,OAAO,KAAK;AAAA,MACnB,EAAE,MAAM,EAAE,WAAW,IAAI,KAAK,WAAW,MAAM,CAAC,EAAE,EAAE;AAAA,IACtD;AAAA,EACF;AACF;;;AClDO,IAAM,oBAAN,MAA0D;AAAA,EAC9C;AAAA,EAEjB,YAAY,YAA2C;AACrD,SAAK,WAAW,IAAI,cAAc,UAAU;AAAA,EAC9C;AAAA,EAEA,MAAM,KAAK,QAA4D;AACrE,WAAO,KAAK,SAAS,KAAK,MAAM;AAAA,EAClC;AACF;AAEO,SAAS,wBAAwB,IAAQ,SAAuD;AACrG,QAAM,iBAAiB,SAAS,cAAc;AAC9C,QAAM,eAAe,EAAE,GAAG,YAAqB,GAAG,SAAS,mBAAmB,aAAa;AAC3F,QAAM,cAAc,EAAE,OAAO,YAAqB,GAAG,SAAS,mBAAmB,YAAY;AAC7F,QAAM,aAAa,GAAG,WAA8B,gBAAgB,EAAE,cAAc,YAAY,CAAC;AACjG,SAAO,IAAI,kBAAkB,UAAU;AACzC;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tslock/mongo",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "TSLock provider for MongoDB",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"mongodb": "^7.6.0",
|
|
26
|
-
"@tslock/core": "2.
|
|
26
|
+
"@tslock/core": "2.3.0"
|
|
27
27
|
},
|
|
28
28
|
"peerDependenciesMeta": {
|
|
29
29
|
"@tslock/core": {
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"vitest": "^4.1.11",
|
|
40
40
|
"mongodb": "^7.6.0",
|
|
41
41
|
"@testcontainers/mongodb": "^12.0.4",
|
|
42
|
-
"@tslock/core": "2.
|
|
43
|
-
"@tslock/test-support": "2.
|
|
42
|
+
"@tslock/core": "2.3.0",
|
|
43
|
+
"@tslock/test-support": "2.3.0"
|
|
44
44
|
},
|
|
45
45
|
"publishConfig": {
|
|
46
46
|
"access": "public"
|