@tstdl/base 0.71.55 → 0.71.58

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.
@@ -5,5 +5,6 @@ export * from './index-out-of-bounds.error';
5
5
  export * from './linked-list';
6
6
  export * from './list';
7
7
  export * from './multi-key-map';
8
+ export * from './set';
8
9
  export * from './sorted-array-list';
9
10
  export * from './weak-ref-map';
@@ -21,6 +21,7 @@ __exportStar(require("./index-out-of-bounds.error"), exports);
21
21
  __exportStar(require("./linked-list"), exports);
22
22
  __exportStar(require("./list"), exports);
23
23
  __exportStar(require("./multi-key-map"), exports);
24
+ __exportStar(require("./set"), exports);
24
25
  __exportStar(require("./sorted-array-list"), exports);
25
26
  __exportStar(require("./weak-ref-map"), exports);
26
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/data-structures/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,oDAAkC;AAClC,+CAA6B;AAC7B,8DAA4C;AAC5C,gDAA8B;AAC9B,yCAAuB;AACvB,kDAAgC;AAChC,sDAAoC;AACpC,iDAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/data-structures/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,oDAAkC;AAClC,+CAA6B;AAC7B,8DAA4C;AAC5C,gDAA8B;AAC9B,yCAAuB;AACvB,kDAAgC;AAChC,wCAAsB;AACtB,sDAAoC;AACpC,iDAA+B"}
@@ -0,0 +1,18 @@
1
+ import { Collection } from './collection';
2
+ export declare class Set<T> extends Collection<T, Set<T>> implements globalThis.Set<T> {
3
+ private readonly backingSet;
4
+ readonly [Symbol.toStringTag]: string;
5
+ constructor(items?: Iterable<T>);
6
+ add(item: T): this;
7
+ addMany(items: Iterable<T>): void;
8
+ clone(): Set<T>;
9
+ items(): IterableIterator<T>;
10
+ delete(item: T): boolean;
11
+ forEach(callbackfn: (value: T, value2: T, set: globalThis.Set<T>) => void, thisArg?: any): void;
12
+ has(item: T): boolean;
13
+ entries(): IterableIterator<[T, T]>;
14
+ keys(): IterableIterator<T>;
15
+ values(): IterableIterator<T>;
16
+ protected _clear(): void;
17
+ private updateSize;
18
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Set = void 0;
5
+ const collection_1 = require("./collection");
6
+ class Set extends collection_1.Collection {
7
+ constructor(items) {
8
+ super();
9
+ this[_a] = 'Set';
10
+ this.backingSet = new globalThis.Set(items);
11
+ this.updateSize();
12
+ }
13
+ add(item) {
14
+ this.backingSet.add(item);
15
+ this.updateSize();
16
+ return this;
17
+ }
18
+ addMany(items) {
19
+ for (const item of items) {
20
+ this.backingSet.add(item);
21
+ }
22
+ this.updateSize();
23
+ }
24
+ clone() {
25
+ return new Set(this);
26
+ }
27
+ items() {
28
+ return this.backingSet.values();
29
+ }
30
+ delete(item) {
31
+ const result = this.backingSet.delete(item);
32
+ this.updateSize();
33
+ return result;
34
+ }
35
+ forEach(callbackfn, thisArg) {
36
+ this.backingSet.forEach(callbackfn, thisArg);
37
+ }
38
+ has(item) {
39
+ return this.backingSet.has(item);
40
+ }
41
+ entries() {
42
+ return this.backingSet.entries();
43
+ }
44
+ keys() {
45
+ return this.backingSet.keys();
46
+ }
47
+ values() {
48
+ return this.backingSet.values();
49
+ }
50
+ _clear() {
51
+ this.backingSet.clear();
52
+ }
53
+ updateSize() {
54
+ this.setSize(this.backingSet.size);
55
+ }
56
+ }
57
+ exports.Set = Set;
58
+ _a = Symbol.toStringTag;
59
+ //# sourceMappingURL=set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.js","sourceRoot":"","sources":["../../source/data-structures/set.ts"],"names":[],"mappings":";;;;AAAA,6CAA0C;AAE1C,MAAa,GAAO,SAAQ,uBAAqB;IAI/C,YAAY,KAAmB;QAC7B,KAAK,EAAE,CAAC;QAHD,QAAoB,GAAW,KAAK,CAAC;QAK5C,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,GAAG,CAAC,IAAO;QACT,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,KAAkB;QACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC3B;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,IAAO;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,UAAiE,EAAE,OAAa;QACtF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,GAAG,CAAC,IAAO;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IAClC,CAAC;IAES,MAAM;QACd,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;CACF;AApED,kBAoEC;KAlEW,MAAM,CAAC,WAAW"}
@@ -5,11 +5,11 @@ const type_guards_1 = require("../utils/type-guards");
5
5
  exports.dispose = Symbol('dispose');
6
6
  exports.disposeAsync = Symbol('disposeAsync');
7
7
  function isDisposable(object) {
8
- return (0, type_guards_1.isObject)(object) && (0, type_guards_1.isFunction)(object[exports.dispose]);
8
+ return (0, type_guards_1.isFunction)(object === null || object === void 0 ? void 0 : object[exports.dispose]);
9
9
  }
10
10
  exports.isDisposable = isDisposable;
11
11
  function isAsyncDisposable(object) {
12
- return (0, type_guards_1.isObject)(object) && (0, type_guards_1.isFunction)(object[exports.disposeAsync]);
12
+ return (0, type_guards_1.isFunction)(object === null || object === void 0 ? void 0 : object[exports.disposeAsync]);
13
13
  }
14
14
  exports.isAsyncDisposable = isAsyncDisposable;
15
15
  //# sourceMappingURL=disposable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"disposable.js","sourceRoot":"","sources":["../../source/disposable/disposable.ts"],"names":[],"mappings":";;;AAAA,sDAA2D;AAE9C,QAAA,OAAO,GAAkB,MAAM,CAAC,SAAS,CAAC,CAAC;AAC3C,QAAA,YAAY,GAAkB,MAAM,CAAC,cAAc,CAAC,CAAC;AAUlE,SAAgB,YAAY,CAAC,MAAW;IACtC,OAAO,IAAA,sBAAQ,EAAC,MAAM,CAAC,IAAI,IAAA,wBAAU,EAAE,MAAqB,CAAC,eAAO,CAAC,CAAC,CAAC;AACzE,CAAC;AAFD,oCAEC;AAED,SAAgB,iBAAiB,CAAC,MAAW;IAC3C,OAAO,IAAA,sBAAQ,EAAC,MAAM,CAAC,IAAI,IAAA,wBAAU,EAAE,MAA0B,CAAC,oBAAY,CAAC,CAAC,CAAC;AACnF,CAAC;AAFD,8CAEC"}
1
+ {"version":3,"file":"disposable.js","sourceRoot":"","sources":["../../source/disposable/disposable.ts"],"names":[],"mappings":";;;AAAA,sDAAiD;AAEpC,QAAA,OAAO,GAAkB,MAAM,CAAC,SAAS,CAAC,CAAC;AAC3C,QAAA,YAAY,GAAkB,MAAM,CAAC,cAAc,CAAC,CAAC;AAUlE,SAAgB,YAAY,CAAC,MAAW;IACtC,OAAO,IAAA,wBAAU,EAAE,MAAiC,aAAjC,MAAM,uBAAN,MAAM,CAA8B,eAAO,CAAC,CAAC,CAAC;AACnE,CAAC;AAFD,oCAEC;AAED,SAAgB,iBAAiB,CAAC,MAAW;IAC3C,OAAO,IAAA,wBAAU,EAAE,MAAsC,aAAtC,MAAM,uBAAN,MAAM,CAAmC,oBAAY,CAAC,CAAC,CAAC;AAC7E,CAAC;AAFD,8CAEC"}
@@ -27,10 +27,10 @@ export declare const imageFormatSchema: import("superstruct").Struct<"png" | "jp
27
27
  export declare type ImageFormat = Infer<typeof imageFormatSchema>;
28
28
  export declare const imageOptionsSchema: import("superstruct").Struct<{
29
29
  origin?: "center" | "smart" | "top" | "left" | "right" | "bottom" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
30
- format?: "png" | "jpg" | "jpeg" | "webp" | "avif" | undefined;
31
- resizeMode?: "fill" | "fit" | undefined;
32
30
  width?: number | undefined;
33
31
  height?: number | undefined;
32
+ format?: "png" | "jpg" | "jpeg" | "webp" | "avif" | undefined;
33
+ resizeMode?: "fill" | "fit" | undefined;
34
34
  quality?: number | undefined;
35
35
  cacheBuster?: string | undefined;
36
36
  }, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tstdl/base",
3
- "version": "0.71.55",
3
+ "version": "0.71.58",
4
4
  "author": "Patrick Hein",
5
5
  "publishConfig": {
6
6
  "access": "public"
package/pdf/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './pdf.service';
package/pdf/index.js ADDED
@@ -0,0 +1,18 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./pdf.service"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/pdf/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B"}
@@ -1,9 +1,32 @@
1
+ import type { AfterResolve } from "../container";
2
+ import { afterResolve } from "../container";
3
+ import type { AsyncDisposable } from "../disposable/disposable";
4
+ import { disposeAsync } from "../disposable/disposable";
1
5
  import { TemplateService } from "../templates";
2
- export declare class PdfService {
6
+ export declare type PdfRenderOptions = {
7
+ omitDefaultBackground?: boolean;
8
+ renderBackground?: boolean;
9
+ landscape?: boolean;
10
+ format?: 'letter' | 'legal' | 'tabloid' | 'ledger' | 'a0' | 'a1' | 'a2' | 'a3' | 'a4' | 'a5' | 'a6';
11
+ width?: string | number;
12
+ height?: string | number;
13
+ scale?: number;
14
+ margin?: {
15
+ top?: number | string;
16
+ bottom?: number | string;
17
+ right?: number | string;
18
+ left?: number | string;
19
+ };
20
+ };
21
+ export declare class PdfService implements AsyncDisposable, AfterResolve {
3
22
  private readonly templateService;
23
+ private readonly pool;
4
24
  constructor(templateService: TemplateService);
5
- renderHtml(html: string): Promise<Uint8Array>;
6
- renderTemplate(key: string, templateContext: object): Promise<Uint8Array>;
7
- renderUrl(url: string): Promise<Uint8Array>;
25
+ [afterResolve](): void;
26
+ [disposeAsync](): Promise<void>;
27
+ dispose(): Promise<void>;
28
+ renderHtml(html: string, options?: PdfRenderOptions): Promise<Uint8Array>;
29
+ renderUrl(url: string, options?: PdfRenderOptions): Promise<Uint8Array>;
30
+ renderTemplate(key: string, templateContext?: object, options?: PdfRenderOptions): Promise<Uint8Array>;
8
31
  private render;
9
32
  }
@@ -11,33 +11,57 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.PdfService = void 0;
13
13
  const container_1 = require("../container");
14
+ const core_1 = require("../core");
15
+ const disposable_1 = require("../disposable/disposable");
16
+ const pool_1 = require("../pool");
14
17
  const templates_1 = require("../templates");
15
18
  const puppeteer = require("puppeteer");
16
19
  let PdfService = class PdfService {
17
20
  constructor(templateService) {
18
21
  this.templateService = templateService;
22
+ this.pool = new pool_1.Pool(async () => puppeteer.launch(), async (browser) => browser.close());
19
23
  }
20
- async renderHtml(html) {
21
- return this.render(async (page) => page.setContent(html, { waitUntil: 'networkidle2' }));
24
+ [container_1.afterResolve]() {
25
+ core_1.disposer.add(this);
22
26
  }
23
- async renderTemplate(key, templateContext) {
24
- const html = await this.templateService.render(key, templateContext);
25
- return this.renderHtml(html);
27
+ async [disposable_1.disposeAsync]() {
28
+ return this.dispose();
29
+ }
30
+ async dispose() {
31
+ return this.pool.dispose();
32
+ }
33
+ async renderHtml(html, options) {
34
+ return this.render(async (page) => page.setContent(html, { waitUntil: 'networkidle2' }), options);
26
35
  }
27
- async renderUrl(url) {
28
- return this.render(async (page) => page.goto(url, { waitUntil: 'networkidle2' }));
36
+ async renderUrl(url, options) {
37
+ return this.render(async (page) => page.goto(url, { waitUntil: 'networkidle2' }), options);
38
+ }
39
+ async renderTemplate(key, templateContext, options) {
40
+ const html = await this.templateService.render(key, templateContext);
41
+ return this.renderHtml(html, options);
29
42
  }
30
- async render(handler) {
31
- const browser = await puppeteer.launch();
32
- try {
43
+ async render(handler, options) {
44
+ return this.pool.use(async (browser) => {
45
+ var _a;
33
46
  const page = await browser.newPage();
34
- await handler(page);
35
- const result = await page.pdf({ format: 'a4' });
36
- return result;
37
- }
38
- finally {
39
- await browser.close();
40
- }
47
+ try {
48
+ await handler(page);
49
+ const result = await page.pdf({
50
+ format: (_a = options === null || options === void 0 ? void 0 : options.format) !== null && _a !== void 0 ? _a : 'a4',
51
+ scale: options === null || options === void 0 ? void 0 : options.scale,
52
+ landscape: options === null || options === void 0 ? void 0 : options.landscape,
53
+ width: options === null || options === void 0 ? void 0 : options.width,
54
+ height: options === null || options === void 0 ? void 0 : options.height,
55
+ omitBackground: options === null || options === void 0 ? void 0 : options.omitDefaultBackground,
56
+ printBackground: options === null || options === void 0 ? void 0 : options.renderBackground,
57
+ margin: options === null || options === void 0 ? void 0 : options.margin
58
+ });
59
+ return result;
60
+ }
61
+ finally {
62
+ await page.close();
63
+ }
64
+ });
41
65
  }
42
66
  };
43
67
  PdfService = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"pdf.service.js","sourceRoot":"","sources":["../../source/pdf/pdf.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4CAAwC;AACxC,4CAA8C;AAC9C,uCAAuC;AAGvC,IAAa,UAAU,GAAvB,MAAa,UAAU;IAGrB,YAAY,eAAgC;QAC1C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAW,EAAE,eAAuB;QACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,OAA0C;QAC7D,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;QAEzC,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,OAAO,MAAM,CAAC;SACf;gBACO;YACN,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;SACvB;IACH,CAAC;CACF,CAAA;AAjCY,UAAU;IADtB,IAAA,qBAAS,GAAE;qCAImB,2BAAe;GAHjC,UAAU,CAiCtB;AAjCY,gCAAU"}
1
+ {"version":3,"file":"pdf.service.js","sourceRoot":"","sources":["../../source/pdf/pdf.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './pool';
package/pool/index.js ADDED
@@ -0,0 +1,18 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./pool"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/pool/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB"}
package/pool/pool.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ import type { AsyncDisposable } from "../disposable/disposable";
2
+ import { disposeAsync } from "../disposable/disposable";
3
+ export declare type PoolOptions = {
4
+ /**
5
+ * maximum number of instances
6
+ * @default number of cpu cores
7
+ */
8
+ size?: number;
9
+ };
10
+ export declare type PoolInstanceFactory<T> = () => T | Promise<T>;
11
+ export declare type PoolInstanceDisposer<T> = (instance: T) => void | Promise<void>;
12
+ export declare class Pool<T> implements AsyncDisposable {
13
+ private readonly size;
14
+ private readonly freeInstances;
15
+ private readonly usedInstances;
16
+ private readonly factory;
17
+ private readonly disposer;
18
+ private disposed;
19
+ get length(): number;
20
+ constructor(factory: PoolInstanceFactory<T>, disposer: PoolInstanceDisposer<T>, options?: PoolOptions);
21
+ dispose(): Promise<void>;
22
+ [disposeAsync](): Promise<void>;
23
+ use<R>(handler: (instance: T) => R | Promise<R>): Promise<R>;
24
+ }
package/pool/pool.js ADDED
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Pool = void 0;
4
+ const data_structures_1 = require("../data-structures");
5
+ const set_1 = require("../data-structures/set");
6
+ const disposable_1 = require("../disposable/disposable");
7
+ const os_1 = require("os");
8
+ const rxjs_1 = require("rxjs");
9
+ const placeholder = Symbol('pool placeholder');
10
+ class Pool {
11
+ constructor(factory, disposer, options) {
12
+ var _a;
13
+ this.size = (_a = options === null || options === void 0 ? void 0 : options.size) !== null && _a !== void 0 ? _a : (0, os_1.cpus)().length;
14
+ this.factory = factory;
15
+ this.disposer = disposer;
16
+ this.freeInstances = new data_structures_1.ArrayList();
17
+ this.usedInstances = new set_1.Set();
18
+ this.disposed = false;
19
+ }
20
+ get length() {
21
+ return this.freeInstances.size + this.usedInstances.size;
22
+ }
23
+ async dispose() {
24
+ return this[disposable_1.disposeAsync]();
25
+ }
26
+ async [disposable_1.disposeAsync]() {
27
+ this.disposed = true;
28
+ while (this.freeInstances.size > 0) {
29
+ const instance = this.freeInstances.removeFirst();
30
+ await this.disposer(instance);
31
+ }
32
+ for (const instance of this.usedInstances) {
33
+ if (instance[placeholder] != true) {
34
+ await this.disposer(instance);
35
+ }
36
+ this.usedInstances.delete(instance);
37
+ }
38
+ }
39
+ // eslint-disable-next-line max-lines-per-function, max-statements
40
+ async use(handler) {
41
+ let instance;
42
+ if (this.freeInstances.hasItems) {
43
+ instance = this.freeInstances.removeFirst();
44
+ }
45
+ else {
46
+ if (this.length >= this.size) {
47
+ await (0, rxjs_1.firstValueFrom)((0, rxjs_1.race)(this.freeInstances.change$, this.usedInstances.change$));
48
+ return this.use(handler);
49
+ }
50
+ const tempInstance = { [placeholder]: true };
51
+ this.usedInstances.add(tempInstance);
52
+ try {
53
+ instance = await this.factory();
54
+ if (this.disposed) {
55
+ await this.disposer(instance);
56
+ throw new Error('Pool was disposed.');
57
+ }
58
+ }
59
+ finally {
60
+ this.usedInstances.delete(tempInstance);
61
+ }
62
+ }
63
+ this.usedInstances.add(instance);
64
+ try {
65
+ const result = await handler(instance);
66
+ return result;
67
+ }
68
+ catch (error) {
69
+ try {
70
+ await this.disposer(instance);
71
+ }
72
+ finally {
73
+ this.usedInstances.delete(instance);
74
+ }
75
+ throw error;
76
+ }
77
+ finally {
78
+ this.usedInstances.delete(instance);
79
+ this.freeInstances.add(instance);
80
+ }
81
+ }
82
+ }
83
+ exports.Pool = Pool;
84
+ //# sourceMappingURL=pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../source/pool/pool.ts"],"names":[],"mappings":"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"}
@@ -9,4 +9,4 @@ export declare const templateModuleConfig: TemplateModuleConfig;
9
9
  /**
10
10
  * configure mail module
11
11
  */
12
- export declare function configureTemplates({ templateProvider, templateRenderers }: Partial<TemplateModuleConfig>): void;
12
+ export declare function configureTemplates({ templateProvider, templateRenderers }?: Partial<TemplateModuleConfig>): void;
@@ -12,7 +12,7 @@ exports.templateModuleConfig = {
12
12
  /**
13
13
  * configure mail module
14
14
  */
15
- function configureTemplates({ templateProvider, templateRenderers }) {
15
+ function configureTemplates({ templateProvider, templateRenderers } = {}) {
16
16
  exports.templateModuleConfig.templateProvider = templateProvider !== null && templateProvider !== void 0 ? templateProvider : exports.templateModuleConfig.templateProvider;
17
17
  exports.templateModuleConfig.templateRenderers = [...new Set([...exports.templateModuleConfig.templateRenderers, ...(templateRenderers !== null && templateRenderers !== void 0 ? templateRenderers : [])])];
18
18
  if ((0, type_guards_1.isDefined)(templateProvider)) {
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../source/templates/module.ts"],"names":[],"mappings":";;;AAAA,4CAAmD;AAEnD,sDAAgD;AAChD,2DAAuD;AAEvD,qCAA8C;AAOjC,QAAA,oBAAoB,GAAyB;IACxD,gBAAgB,EAAE,IAAA,qBAAS,EAAC,oCAAgB,CAAC;IAC7C,iBAAiB,EAAE,EAAE;CACtB,CAAC;AAEF;;GAEG;AACH,SAAgB,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,iBAAiB,EAAiC;IACvG,4BAAoB,CAAC,gBAAgB,GAAG,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,4BAAoB,CAAC,gBAAgB,CAAC;IAClG,4BAAoB,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,4BAAoB,CAAC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,aAAjB,iBAAiB,cAAjB,iBAAiB,GAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjI,IAAI,IAAA,uBAAS,EAAC,gBAAgB,CAAC,EAAE;QAC/B,qBAAS,CAAC,iBAAiB,CAAC,oCAAgB,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;KAC/E;IAED,qBAAS,CAAC,iBAAiB,CAAC,2BAAkB,EAAE,EAAE,QAAQ,EAAE,4BAAoB,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxG,CAAC;AATD,gDASC"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../source/templates/module.ts"],"names":[],"mappings":";;;AAAA,4CAAmD;AAEnD,sDAAgD;AAChD,2DAAuD;AAEvD,qCAA8C;AAOjC,QAAA,oBAAoB,GAAyB;IACxD,gBAAgB,EAAE,IAAA,qBAAS,EAAC,oCAAgB,CAAC;IAC7C,iBAAiB,EAAE,EAAE;CACtB,CAAC;AAEF;;GAEG;AACH,SAAgB,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,iBAAiB,KAAoC,EAAE;IAC5G,4BAAoB,CAAC,gBAAgB,GAAG,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,4BAAoB,CAAC,gBAAgB,CAAC;IAClG,4BAAoB,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,4BAAoB,CAAC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,aAAjB,iBAAiB,cAAjB,iBAAiB,GAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjI,IAAI,IAAA,uBAAS,EAAC,gBAAgB,CAAC,EAAE;QAC/B,qBAAS,CAAC,iBAAiB,CAAC,oCAAgB,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;KAC/E;IAED,qBAAS,CAAC,iBAAiB,CAAC,2BAAkB,EAAE,EAAE,QAAQ,EAAE,4BAAoB,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxG,CAAC;AATD,gDASC"}