@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.
- package/cjs/AsyncDisposableStack.js +43 -0
- package/cjs/DisposableStack.js +41 -0
- package/cjs/index.js +9 -0
- package/cjs/package.json +1 -0
- package/cjs/utils.js +19 -0
- package/esm/AsyncDisposableStack.js +39 -0
- package/esm/DisposableStack.js +37 -0
- package/esm/index.js +6 -0
- package/esm/utils.js +14 -0
- package/package.json +42 -0
- package/typings/AsyncDisposableStack.d.cts +12 -0
- package/typings/AsyncDisposableStack.d.ts +12 -0
- package/typings/DisposableStack.d.cts +11 -0
- package/typings/DisposableStack.d.ts +11 -0
- package/typings/index.d.cts +2 -0
- package/typings/index.d.ts +2 -0
- package/typings/utils.d.cts +4 -0
- package/typings/utils.d.ts +4 -0
|
@@ -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;
|
package/cjs/package.json
ADDED
|
@@ -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
|
+
}
|