@blackglory/structures 0.3.4 → 0.3.7

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.
@@ -10,3 +10,4 @@ export * from './tlru-map';
10
10
  export * from './trie-map';
11
11
  export * from './finite-state-machine';
12
12
  export * from './observable-finite-state-machine';
13
+ export * from './instance-manager';
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -22,4 +26,5 @@ __exportStar(require("./tlru-map"), exports);
22
26
  __exportStar(require("./trie-map"), exports);
23
27
  __exportStar(require("./finite-state-machine"), exports);
24
28
  __exportStar(require("./observable-finite-state-machine"), exports);
29
+ __exportStar(require("./instance-manager"), exports);
25
30
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAAqB;AACrB,yCAAsB;AACtB,4CAAyB;AACzB,6CAA0B;AAC1B,6CAA0B;AAC1B,0CAAuB;AACvB,4CAAyB;AACzB,kDAA+B;AAC/B,6CAA0B;AAC1B,6CAA0B;AAC1B,yDAAsC;AACtC,oEAAiD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAqB;AACrB,yCAAsB;AACtB,4CAAyB;AACzB,6CAA0B;AAC1B,6CAA0B;AAC1B,0CAAuB;AACvB,4CAAyB;AACzB,kDAA+B;AAC/B,6CAA0B;AAC1B,6CAA0B;AAC1B,yDAAsC;AACtC,oEAAiD;AACjD,qDAAkC"}
@@ -0,0 +1,14 @@
1
+ import { Awaitable } from 'justypes';
2
+ export declare class InstanceManager<T> {
3
+ private construct;
4
+ private destruct;
5
+ private instances;
6
+ private targetQuantity;
7
+ private lock;
8
+ constructor(construct: () => Awaitable<T>, destruct: (instance: T) => Awaitable<void>);
9
+ getInstances(): T[];
10
+ getCurrentQuantity(): number;
11
+ getTargetQuantity(): number;
12
+ setTargetQuantity(target: number): void;
13
+ scale(): Promise<void>;
14
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.InstanceManager = void 0;
13
+ const errors_1 = require("@blackglory/errors");
14
+ const extra_promise_1 = require("extra-promise");
15
+ class InstanceManager {
16
+ constructor(construct, destruct) {
17
+ this.construct = construct;
18
+ this.destruct = destruct;
19
+ this.instances = [];
20
+ this.targetQuantity = 0;
21
+ this.lock = new extra_promise_1.Mutex();
22
+ }
23
+ getInstances() {
24
+ return [...this.instances];
25
+ }
26
+ getCurrentQuantity() {
27
+ return this.instances.length;
28
+ }
29
+ getTargetQuantity() {
30
+ return this.targetQuantity;
31
+ }
32
+ setTargetQuantity(target) {
33
+ (0, errors_1.assert)(target >= 0, 'target quantity must be greater than or equal to 0');
34
+ (0, errors_1.assert)(Number.isInteger(target), 'target quantity must be integer');
35
+ this.targetQuantity = target;
36
+ }
37
+ scale() {
38
+ return this.lock.acquire(() => __awaiter(this, void 0, void 0, function* () {
39
+ while (this.instances.length !== this.targetQuantity) {
40
+ while (this.instances.length < this.targetQuantity) {
41
+ this.instances.push(yield this.construct());
42
+ }
43
+ while (this.instances.length > this.targetQuantity) {
44
+ const instance = this.instances.pop();
45
+ yield this.destruct(instance);
46
+ }
47
+ }
48
+ }));
49
+ }
50
+ }
51
+ exports.InstanceManager = InstanceManager;
52
+ //# sourceMappingURL=instance-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-manager.js","sourceRoot":"","sources":["../../src/instance-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA2C;AAE3C,iDAAqC;AAErC,MAAa,eAAe;IAK1B,YACU,SAA6B,EAC7B,QAA0C;QAD1C,cAAS,GAAT,SAAS,CAAoB;QAC7B,aAAQ,GAAR,QAAQ,CAAkC;QAN5C,cAAS,GAAQ,EAAE,CAAA;QACnB,mBAAc,GAAW,CAAC,CAAA;QAC1B,SAAI,GAAU,IAAI,qBAAK,EAAE,CAAA;IAK9B,CAAC;IAEJ,YAAY;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;IAC5B,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAA;IAC9B,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED,iBAAiB,CAAC,MAAc;QAC9B,IAAA,eAAM,EAAC,MAAM,IAAI,CAAC,EAAE,oDAAoD,CAAC,CAAA;QACzE,IAAA,eAAM,EAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,iCAAiC,CAAC,CAAA;QAEnE,IAAI,CAAC,cAAc,GAAG,MAAM,CAAA;IAC9B,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAS,EAAE;YAClC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,EAAE;gBACpD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;oBAClD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;iBAC5C;gBAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;oBAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAG,CAAA;oBACtC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;iBAC9B;aACF;QACH,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC;CACF;AA3CD,0CA2CC"}
@@ -10,3 +10,4 @@ export * from './tlru-map';
10
10
  export * from './trie-map';
11
11
  export * from './finite-state-machine';
12
12
  export * from './observable-finite-state-machine';
13
+ export * from './instance-manager';
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -22,4 +26,5 @@ __exportStar(require("./tlru-map"), exports);
22
26
  __exportStar(require("./trie-map"), exports);
23
27
  __exportStar(require("./finite-state-machine"), exports);
24
28
  __exportStar(require("./observable-finite-state-machine"), exports);
29
+ __exportStar(require("./instance-manager"), exports);
25
30
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAAqB;AACrB,yCAAsB;AACtB,4CAAyB;AACzB,6CAA0B;AAC1B,6CAA0B;AAC1B,0CAAuB;AACvB,4CAAyB;AACzB,kDAA+B;AAC/B,6CAA0B;AAC1B,6CAA0B;AAC1B,yDAAsC;AACtC,oEAAiD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAqB;AACrB,yCAAsB;AACtB,4CAAyB;AACzB,6CAA0B;AAC1B,6CAA0B;AAC1B,0CAAuB;AACvB,4CAAyB;AACzB,kDAA+B;AAC/B,6CAA0B;AAC1B,6CAA0B;AAC1B,yDAAsC;AACtC,oEAAiD;AACjD,qDAAkC"}
@@ -0,0 +1,14 @@
1
+ import { Awaitable } from 'justypes';
2
+ export declare class InstanceManager<T> {
3
+ private construct;
4
+ private destruct;
5
+ private instances;
6
+ private targetQuantity;
7
+ private lock;
8
+ constructor(construct: () => Awaitable<T>, destruct: (instance: T) => Awaitable<void>);
9
+ getInstances(): T[];
10
+ getCurrentQuantity(): number;
11
+ getTargetQuantity(): number;
12
+ setTargetQuantity(target: number): void;
13
+ scale(): Promise<void>;
14
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InstanceManager = void 0;
4
+ const errors_1 = require("@blackglory/errors");
5
+ const extra_promise_1 = require("extra-promise");
6
+ class InstanceManager {
7
+ constructor(construct, destruct) {
8
+ this.construct = construct;
9
+ this.destruct = destruct;
10
+ this.instances = [];
11
+ this.targetQuantity = 0;
12
+ this.lock = new extra_promise_1.Mutex();
13
+ }
14
+ getInstances() {
15
+ return [...this.instances];
16
+ }
17
+ getCurrentQuantity() {
18
+ return this.instances.length;
19
+ }
20
+ getTargetQuantity() {
21
+ return this.targetQuantity;
22
+ }
23
+ setTargetQuantity(target) {
24
+ (0, errors_1.assert)(target >= 0, 'target quantity must be greater than or equal to 0');
25
+ (0, errors_1.assert)(Number.isInteger(target), 'target quantity must be integer');
26
+ this.targetQuantity = target;
27
+ }
28
+ scale() {
29
+ return this.lock.acquire(async () => {
30
+ while (this.instances.length !== this.targetQuantity) {
31
+ while (this.instances.length < this.targetQuantity) {
32
+ this.instances.push(await this.construct());
33
+ }
34
+ while (this.instances.length > this.targetQuantity) {
35
+ const instance = this.instances.pop();
36
+ await this.destruct(instance);
37
+ }
38
+ }
39
+ });
40
+ }
41
+ }
42
+ exports.InstanceManager = InstanceManager;
43
+ //# sourceMappingURL=instance-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-manager.js","sourceRoot":"","sources":["../../src/instance-manager.ts"],"names":[],"mappings":";;;AAAA,+CAA2C;AAE3C,iDAAqC;AAErC,MAAa,eAAe;IAK1B,YACU,SAA6B,EAC7B,QAA0C;QAD1C,cAAS,GAAT,SAAS,CAAoB;QAC7B,aAAQ,GAAR,QAAQ,CAAkC;QAN5C,cAAS,GAAQ,EAAE,CAAA;QACnB,mBAAc,GAAW,CAAC,CAAA;QAC1B,SAAI,GAAU,IAAI,qBAAK,EAAE,CAAA;IAK9B,CAAC;IAEJ,YAAY;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;IAC5B,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAA;IAC9B,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED,iBAAiB,CAAC,MAAc;QAC9B,IAAA,eAAM,EAAC,MAAM,IAAI,CAAC,EAAE,oDAAoD,CAAC,CAAA;QACzE,IAAA,eAAM,EAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,iCAAiC,CAAC,CAAA;QAEnE,IAAI,CAAC,cAAc,GAAG,MAAM,CAAA;IAC9B,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YAClC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,EAAE;gBACpD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;oBAClD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;iBAC5C;gBAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;oBAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAG,CAAA;oBACtC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;iBAC9B;aACF;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AA3CD,0CA2CC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blackglory/structures",
3
- "version": "0.3.4",
3
+ "version": "0.3.7",
4
4
  "description": "",
5
5
  "files": [
6
6
  "lib",
@@ -41,39 +41,40 @@
41
41
  "node": ">=12"
42
42
  },
43
43
  "devDependencies": {
44
- "@blackglory/jest-matchers": "^0.2.1",
45
- "@commitlint/cli": "^16.2.1",
46
- "@commitlint/config-conventional": "^16.2.1",
47
- "@rollup/plugin-commonjs": "^21.0.1",
44
+ "@blackglory/jest-matchers": "^0.3.1",
45
+ "@commitlint/cli": "^16.2.4",
46
+ "@commitlint/config-conventional": "^16.2.4",
47
+ "@rollup/plugin-commonjs": "^22.0.0",
48
48
  "@rollup/plugin-json": "^4.1.0",
49
- "@rollup/plugin-node-resolve": "^13.1.3",
50
- "@rollup/plugin-replace": "^3.1.0",
51
- "@rollup/plugin-typescript": "^8.3.0",
52
- "@types/jest": "^27.4.0",
49
+ "@rollup/plugin-node-resolve": "^13.3.0",
50
+ "@rollup/plugin-replace": "^4.0.0",
51
+ "@rollup/plugin-typescript": "^8.3.2",
52
+ "@types/jest": "^27.5.0",
53
53
  "@types/node": "14",
54
- "@typescript-eslint/eslint-plugin": "^5.12.0",
55
- "@typescript-eslint/parser": "^5.12.0",
56
- "eslint": "^8.9.0",
57
- "extra-promise": "^0.21.2",
54
+ "@typescript-eslint/eslint-plugin": "^5.22.0",
55
+ "@typescript-eslint/parser": "^5.22.0",
56
+ "eslint": "^8.15.0",
58
57
  "husky": "^4.3.8",
59
58
  "jest": "^27.5.1",
60
59
  "npm-run-all": "^4.1.5",
61
- "return-style": "^0.12.6",
60
+ "return-style": "^1.0.0",
62
61
  "rimraf": "^3.0.2",
63
- "rollup": "^2.67.2",
62
+ "rollup": "^2.72.1",
64
63
  "rollup-plugin-analyzer": "^4.0.0",
65
64
  "rollup-plugin-terser": "^7.0.2",
66
65
  "standard-version": "^9.3.2",
67
66
  "ts-jest": "^27.1.3",
68
67
  "tscpaths": "^0.0.9",
69
- "tslib": "^2.3.1",
70
- "typescript": "^4.5.5"
68
+ "tslib": "^2.4.0",
69
+ "typescript": "^4.6.4"
71
70
  },
72
71
  "dependencies": {
73
- "@blackglory/errors": "^2.2.0",
74
- "@blackglory/types": "^0.6.5",
72
+ "@blackglory/errors": "^2.2.1",
73
+ "@blackglory/types": "^1.1.0",
74
+ "extra-promise": "^1.0.2",
75
75
  "extra-timers": "^0.2.5",
76
- "iterable-operator": "^0.14.5",
77
- "rxjs": "^7.5.4"
76
+ "iterable-operator": "^1.1.0",
77
+ "justypes": "^2.0.0",
78
+ "rxjs": "^7.5.5"
78
79
  }
79
80
  }