@whatwg-node/disposablestack 0.0.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.
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PonyfillAsyncDisposableStack = void 0;
4
+ const utils_js_1 = require("./utils.js");
5
+ (0, utils_js_1.patchSymbols)();
6
+ class PonyfillAsyncDisposableStack {
7
+ callbacks = [];
8
+ get disposed() {
9
+ return false;
10
+ }
11
+ use(value) {
12
+ if ((0, utils_js_1.isAsyncDisposable)(value)) {
13
+ this.callbacks.push(() => value[Symbol.asyncDispose]());
14
+ }
15
+ else if ((0, utils_js_1.isSyncDisposable)(value)) {
16
+ this.callbacks.push(() => value[Symbol.dispose]());
17
+ }
18
+ return value;
19
+ }
20
+ adopt(value, onDisposeAsync) {
21
+ this.callbacks.push(() => onDisposeAsync(value));
22
+ return value;
23
+ }
24
+ defer(onDisposeAsync) {
25
+ this.callbacks.push(onDisposeAsync);
26
+ }
27
+ move() {
28
+ const stack = new PonyfillAsyncDisposableStack();
29
+ stack.callbacks = this.callbacks;
30
+ this.callbacks = [];
31
+ return stack;
32
+ }
33
+ disposeAsync() {
34
+ return this[Symbol.asyncDispose]();
35
+ }
36
+ async [Symbol.asyncDispose]() {
37
+ for (const cb of this.callbacks) {
38
+ await cb();
39
+ }
40
+ }
41
+ [Symbol.toStringTag] = 'AsyncDisposableStack';
42
+ }
43
+ exports.PonyfillAsyncDisposableStack = PonyfillAsyncDisposableStack;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PonyfillDisposableStack = void 0;
4
+ const utils_js_1 = require("./utils.js");
5
+ (0, utils_js_1.patchSymbols)();
6
+ class PonyfillDisposableStack {
7
+ callbacks = [];
8
+ get disposed() {
9
+ return false;
10
+ }
11
+ dispose() {
12
+ for (const cb of this.callbacks) {
13
+ cb();
14
+ }
15
+ this.callbacks = [];
16
+ }
17
+ use(value) {
18
+ if ((0, utils_js_1.isSyncDisposable)(value)) {
19
+ this.callbacks.push(() => value[Symbol.dispose]());
20
+ }
21
+ return value;
22
+ }
23
+ adopt(value, onDispose) {
24
+ this.callbacks.push(() => onDispose(value));
25
+ return value;
26
+ }
27
+ defer(onDispose) {
28
+ this.callbacks.push(onDispose);
29
+ }
30
+ move() {
31
+ const stack = new PonyfillDisposableStack();
32
+ stack.callbacks = this.callbacks;
33
+ this.callbacks = [];
34
+ return stack;
35
+ }
36
+ [Symbol.dispose]() {
37
+ this.dispose();
38
+ }
39
+ [Symbol.toStringTag] = 'DisposableStack';
40
+ }
41
+ exports.PonyfillDisposableStack = PonyfillDisposableStack;
package/cjs/index.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AsyncDisposableStack = exports.DisposableStack = void 0;
4
+ const AsyncDisposableStack_js_1 = require("./AsyncDisposableStack.js");
5
+ const DisposableStack_js_1 = require("./DisposableStack.js");
6
+ const utils_js_1 = require("./utils.js");
7
+ (0, utils_js_1.patchSymbols)();
8
+ exports.DisposableStack = globalThis.DisposableStack || DisposableStack_js_1.PonyfillDisposableStack;
9
+ exports.AsyncDisposableStack = globalThis.AsyncDisposableStack || AsyncDisposableStack_js_1.PonyfillAsyncDisposableStack;
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
package/cjs/utils.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSyncDisposable = isSyncDisposable;
4
+ exports.isAsyncDisposable = isAsyncDisposable;
5
+ exports.patchSymbols = patchSymbols;
6
+ function isSyncDisposable(obj) {
7
+ return obj?.[Symbol.dispose] != null;
8
+ }
9
+ function isAsyncDisposable(obj) {
10
+ return obj?.[Symbol.asyncDispose] != null;
11
+ }
12
+ function patchSymbols() {
13
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
14
+ // @ts-ignore - we ponyfill these symbols
15
+ Symbol.dispose ||= Symbol.for('dispose');
16
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
17
+ // @ts-ignore - we ponyfill these symbols
18
+ Symbol.asyncDispose ||= Symbol.for('asyncDispose');
19
+ }
@@ -0,0 +1,39 @@
1
+ import { isAsyncDisposable, isSyncDisposable, patchSymbols } from './utils.js';
2
+ patchSymbols();
3
+ export class PonyfillAsyncDisposableStack {
4
+ callbacks = [];
5
+ get disposed() {
6
+ return false;
7
+ }
8
+ use(value) {
9
+ if (isAsyncDisposable(value)) {
10
+ this.callbacks.push(() => value[Symbol.asyncDispose]());
11
+ }
12
+ else if (isSyncDisposable(value)) {
13
+ this.callbacks.push(() => value[Symbol.dispose]());
14
+ }
15
+ return value;
16
+ }
17
+ adopt(value, onDisposeAsync) {
18
+ this.callbacks.push(() => onDisposeAsync(value));
19
+ return value;
20
+ }
21
+ defer(onDisposeAsync) {
22
+ this.callbacks.push(onDisposeAsync);
23
+ }
24
+ move() {
25
+ const stack = new PonyfillAsyncDisposableStack();
26
+ stack.callbacks = this.callbacks;
27
+ this.callbacks = [];
28
+ return stack;
29
+ }
30
+ disposeAsync() {
31
+ return this[Symbol.asyncDispose]();
32
+ }
33
+ async [Symbol.asyncDispose]() {
34
+ for (const cb of this.callbacks) {
35
+ await cb();
36
+ }
37
+ }
38
+ [Symbol.toStringTag] = 'AsyncDisposableStack';
39
+ }
@@ -0,0 +1,37 @@
1
+ import { isSyncDisposable, patchSymbols } from './utils.js';
2
+ patchSymbols();
3
+ export class PonyfillDisposableStack {
4
+ callbacks = [];
5
+ get disposed() {
6
+ return false;
7
+ }
8
+ dispose() {
9
+ for (const cb of this.callbacks) {
10
+ cb();
11
+ }
12
+ this.callbacks = [];
13
+ }
14
+ use(value) {
15
+ if (isSyncDisposable(value)) {
16
+ this.callbacks.push(() => value[Symbol.dispose]());
17
+ }
18
+ return value;
19
+ }
20
+ adopt(value, onDispose) {
21
+ this.callbacks.push(() => onDispose(value));
22
+ return value;
23
+ }
24
+ defer(onDispose) {
25
+ this.callbacks.push(onDispose);
26
+ }
27
+ move() {
28
+ const stack = new PonyfillDisposableStack();
29
+ stack.callbacks = this.callbacks;
30
+ this.callbacks = [];
31
+ return stack;
32
+ }
33
+ [Symbol.dispose]() {
34
+ this.dispose();
35
+ }
36
+ [Symbol.toStringTag] = 'DisposableStack';
37
+ }
package/esm/index.js ADDED
@@ -0,0 +1,6 @@
1
+ import { PonyfillAsyncDisposableStack } from './AsyncDisposableStack.js';
2
+ import { PonyfillDisposableStack } from './DisposableStack.js';
3
+ import { patchSymbols } from './utils.js';
4
+ patchSymbols();
5
+ export const DisposableStack = globalThis.DisposableStack || PonyfillDisposableStack;
6
+ export const AsyncDisposableStack = globalThis.AsyncDisposableStack || PonyfillAsyncDisposableStack;
package/esm/utils.js ADDED
@@ -0,0 +1,14 @@
1
+ export function isSyncDisposable(obj) {
2
+ return obj?.[Symbol.dispose] != null;
3
+ }
4
+ export function isAsyncDisposable(obj) {
5
+ return obj?.[Symbol.asyncDispose] != null;
6
+ }
7
+ export function patchSymbols() {
8
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
9
+ // @ts-ignore - we ponyfill these symbols
10
+ Symbol.dispose ||= Symbol.for('dispose');
11
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
12
+ // @ts-ignore - we ponyfill these symbols
13
+ Symbol.asyncDispose ||= Symbol.for('asyncDispose');
14
+ }
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@whatwg-node/disposablestack",
3
+ "version": "0.0.0",
4
+ "description": "Cross Platform Smart DisposableStack API Ponyfill",
5
+ "sideEffects": false,
6
+ "dependencies": {
7
+ "tslib": "^2.6.3"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "ardatan/whatwg-node",
12
+ "directory": "packages/disposablestack"
13
+ },
14
+ "author": "Arda TANRIKULU <ardatanrikulu@gmail.com>",
15
+ "license": "MIT",
16
+ "engines": {
17
+ "node": ">=18.0.0"
18
+ },
19
+ "main": "cjs/index.js",
20
+ "module": "esm/index.js",
21
+ "typings": "typings/index.d.ts",
22
+ "typescript": {
23
+ "definition": "typings/index.d.ts"
24
+ },
25
+ "exports": {
26
+ ".": {
27
+ "require": {
28
+ "types": "./typings/index.d.cts",
29
+ "default": "./cjs/index.js"
30
+ },
31
+ "import": {
32
+ "types": "./typings/index.d.ts",
33
+ "default": "./esm/index.js"
34
+ },
35
+ "default": {
36
+ "types": "./typings/index.d.ts",
37
+ "default": "./esm/index.js"
38
+ }
39
+ },
40
+ "./package.json": "./package.json"
41
+ }
42
+ }
@@ -0,0 +1,12 @@
1
+ import { MaybePromise } from './utils.cjs';
2
+ export declare class PonyfillAsyncDisposableStack implements AsyncDisposableStack {
3
+ private callbacks;
4
+ get disposed(): boolean;
5
+ use<T extends AsyncDisposable | Disposable | null | undefined>(value: T): T;
6
+ adopt<T>(value: T, onDisposeAsync: (value: T) => MaybePromise<void>): T;
7
+ defer(onDisposeAsync: () => MaybePromise<void>): void;
8
+ move(): AsyncDisposableStack;
9
+ disposeAsync(): Promise<void>;
10
+ [Symbol.asyncDispose](): Promise<void>;
11
+ readonly [Symbol.toStringTag]: string;
12
+ }
@@ -0,0 +1,12 @@
1
+ import { MaybePromise } from './utils.js';
2
+ export declare class PonyfillAsyncDisposableStack implements AsyncDisposableStack {
3
+ private callbacks;
4
+ get disposed(): boolean;
5
+ use<T extends AsyncDisposable | Disposable | null | undefined>(value: T): T;
6
+ adopt<T>(value: T, onDisposeAsync: (value: T) => MaybePromise<void>): T;
7
+ defer(onDisposeAsync: () => MaybePromise<void>): void;
8
+ move(): AsyncDisposableStack;
9
+ disposeAsync(): Promise<void>;
10
+ [Symbol.asyncDispose](): Promise<void>;
11
+ readonly [Symbol.toStringTag]: string;
12
+ }
@@ -0,0 +1,11 @@
1
+ export declare class PonyfillDisposableStack implements DisposableStack {
2
+ private callbacks;
3
+ get disposed(): boolean;
4
+ dispose(): void;
5
+ use<T extends Disposable | null | undefined>(value: T): T;
6
+ adopt<T>(value: T, onDispose: (value: T) => void): T;
7
+ defer(onDispose: () => void): void;
8
+ move(): DisposableStack;
9
+ [Symbol.dispose](): void;
10
+ readonly [Symbol.toStringTag]: string;
11
+ }
@@ -0,0 +1,11 @@
1
+ export declare class PonyfillDisposableStack implements DisposableStack {
2
+ private callbacks;
3
+ get disposed(): boolean;
4
+ dispose(): void;
5
+ use<T extends Disposable | null | undefined>(value: T): T;
6
+ adopt<T>(value: T, onDispose: (value: T) => void): T;
7
+ defer(onDispose: () => void): void;
8
+ move(): DisposableStack;
9
+ [Symbol.dispose](): void;
10
+ readonly [Symbol.toStringTag]: string;
11
+ }
@@ -0,0 +1,2 @@
1
+ export declare const DisposableStack: DisposableStackConstructor;
2
+ export declare const AsyncDisposableStack: AsyncDisposableStackConstructor;
@@ -0,0 +1,2 @@
1
+ export declare const DisposableStack: DisposableStackConstructor;
2
+ export declare const AsyncDisposableStack: AsyncDisposableStackConstructor;
@@ -0,0 +1,4 @@
1
+ export declare function isSyncDisposable(obj: any): obj is Disposable;
2
+ export declare function isAsyncDisposable(obj: any): obj is AsyncDisposable;
3
+ export declare function patchSymbols(): void;
4
+ export type MaybePromise<T> = T | PromiseLike<T>;
@@ -0,0 +1,4 @@
1
+ export declare function isSyncDisposable(obj: any): obj is Disposable;
2
+ export declare function isAsyncDisposable(obj: any): obj is AsyncDisposable;
3
+ export declare function patchSymbols(): void;
4
+ export type MaybePromise<T> = T | PromiseLike<T>;