Socket
Socket
Sign inDemoInstall

@bunt/unit

Package Overview
Dependencies
Maintainers
1
Versions
92
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@bunt/unit - npm Package Compare versions

Comparing version 0.21.0 to 0.21.1

dist/Dispose/enum.d.ts

11

dist/Dispose/Disposable.d.ts

@@ -1,9 +0,4 @@

import { DisposableType, IDisposable } from "../Runtime";
import { Disposer } from "./Disposer";
export declare class Disposable {
static get size(): number;
static attach(target: IDisposable, disposable: DisposableType): void;
static dispose(target: IDisposable): Promise<void>;
static disposeAll(): Promise<void>;
static resolve(target: IDisposable): Disposer;
import { IDisposable } from "../Runtime";
export declare abstract class Disposable implements IDisposable {
abstract dispose(): Promise<void>;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Disposable = void 0;
const Runtime_1 = require("../Runtime");
const Disposer_1 = require("./Disposer");
const collection = new Map();
class Disposable {
static get size() {
return collection.size;
}
static attach(target, disposable) {
const disposer = this.resolve(target);
disposer.attach(disposable);
}
static dispose(target) {
const disposer = this.resolve(target);
const finish = (error) => {
if ((0, Runtime_1.isRunnable)(target)) {
const heartbeat = target.getHeartbeat();
heartbeat.destroy(error);
}
};
return disposer.dispose()
.then(() => finish())
.catch((error) => finish(error))
.finally(() => collection.delete(target));
}
static async disposeAll() {
const pending = [];
for (const target of collection.keys()) {
pending.push(this.dispose(target));
}
await Promise.allSettled(pending);
}
static resolve(target) {
const disposer = collection.get(target);
if (!disposer) {
const finish = target.dispose;
const newDisposer = new Disposer_1.Disposer(target.constructor.name, () => finish.call(target));
collection.set(target, newDisposer);
Reflect.defineProperty(target, "dispose", {
value: () => newDisposer.dispose(),
});
return newDisposer;
}
return disposer;
}
}
exports.Disposable = Disposable;
//# sourceMappingURL=Disposable.js.map
import { Logger } from "@bunt/util";
import { DisposableFn, DisposableType, IDisposedHistory } from "../Runtime";
export declare class Disposer {
import { DisposableType, IDisposable } from "../Runtime";
export declare abstract class Disposer implements IDisposable {
#private;
protected readonly logger: Logger;
constructor(label: string, finish: DisposableFn);
get label(): string;
get disposed(): boolean;
get history(): IDisposedHistory[];
attach(disposable: DisposableType): void;
onDispose(disposable: DisposableType): void;
dispose(): Promise<void>;
private disposeAll;
}

@@ -8,8 +8,2 @@ "use strict";

};
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {

@@ -20,3 +14,3 @@ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");

};
var _Disposer_disposable, _Disposer_disposeHistory, _Disposer_state, _Disposer_label;
var _Disposer_disposables;
Object.defineProperty(exports, "__esModule", { value: true });

@@ -27,59 +21,15 @@ exports.Disposer = void 0;

class Disposer {
constructor(label, finish) {
_Disposer_disposable.set(this, []);
_Disposer_disposeHistory.set(this, []);
_Disposer_state.set(this, void 0);
_Disposer_label.set(this, void 0);
this.logger.setLabel(`Disposer(${label})`);
__classPrivateFieldSet(this, _Disposer_label, label, "f");
__classPrivateFieldGet(this, _Disposer_disposable, "f").push(finish);
constructor() {
_Disposer_disposables.set(this, []);
}
get label() {
return __classPrivateFieldGet(this, _Disposer_label, "f");
onDispose(disposable) {
this.logger.debug("onDispose(%s)", disposable.constructor.name);
__classPrivateFieldGet(this, _Disposer_disposables, "f").push(disposable);
}
get disposed() {
return !!__classPrivateFieldGet(this, _Disposer_state, "f");
async dispose() {
this.logger.debug("dispose(%o)", __classPrivateFieldGet(this, _Disposer_disposables, "f").map(({ constructor: { name } }) => name));
await (0, util_1.safeMap)(__classPrivateFieldGet(this, _Disposer_disposables, "f"), functions_1.dispose);
}
get history() {
return __classPrivateFieldGet(this, _Disposer_disposeHistory, "f");
}
attach(disposable) {
var _a, _b;
this.logger.debug("add", { label: this.label, target: (_b = (_a = disposable === null || disposable === void 0 ? void 0 : disposable.constructor) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : "Unknown" });
if (this.disposed) {
(0, functions_1.dispose)(disposable);
return;
}
__classPrivateFieldGet(this, _Disposer_disposable, "f").push(disposable);
}
dispose() {
if (__classPrivateFieldGet(this, _Disposer_state, "f")) {
return __classPrivateFieldGet(this, _Disposer_state, "f");
}
this.logger.debug("dispose", this.label);
__classPrivateFieldSet(this, _Disposer_state, util_1.AsyncState.acquire(), "f");
return this.disposeAll();
}
async disposeAll() {
var _a, _b;
while (__classPrivateFieldGet(this, _Disposer_disposable, "f").length > 0) {
for (const disposable of __classPrivateFieldGet(this, _Disposer_disposable, "f").splice(0).reverse()) {
const date = new Date();
const target = (_b = (_a = disposable === null || disposable === void 0 ? void 0 : disposable.constructor) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : "Unknown";
const { label } = this;
try {
await (0, functions_1.dispose)(disposable);
this.logger.debug("dispose", { label, target, date, timeout: Date.now() - date.getTime() });
__classPrivateFieldGet(this, _Disposer_disposeHistory, "f").push({ label, target, date, timeout: Date.now() - date.getTime() });
}
catch (error) {
this.logger.warning("dispose", { target, error, date, timeout: Date.now() - date.getTime() });
__classPrivateFieldGet(this, _Disposer_disposeHistory, "f").push({ label, target, error, date, timeout: Date.now() - date.getTime() });
}
}
}
util_1.AsyncState.resolve(__classPrivateFieldGet(this, _Disposer_state, "f"));
}
}
_Disposer_disposable = new WeakMap(), _Disposer_disposeHistory = new WeakMap(), _Disposer_state = new WeakMap(), _Disposer_label = new WeakMap();
_Disposer_disposables = new WeakMap();
__decorate([

@@ -86,0 +36,0 @@ util_1.logger

@@ -1,3 +0,3 @@

import { Promisify } from "@bunt/util";
import { DisposableType } from "../Runtime";
export declare function dispose(disposable: DisposableType): Promisify<void>;
export declare function dispose(disposable: DisposableType): Promise<void>;
export declare function disposeAll(disposables: DisposableType[]): Promise<void>;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.dispose = void 0;
exports.disposeAll = exports.dispose = void 0;
const util_1 = require("@bunt/util");
const Disposable_1 = require("./Disposable");
function dispose(disposable) {
if ((0, util_1.isFunction)(disposable)) {
return disposable();
const Runtime_1 = require("../Runtime");
async function dispose(disposable) {
const { constructor: { name } } = disposable;
const perf = Runtime_1.SystemLogger.perf("disposed %s", name);
try {
if ((0, util_1.isFunction)(disposable)) {
Runtime_1.SystemLogger.debug("dispose %s()", name);
return Promise.resolve(disposable());
}
if ((0, Runtime_1.isRunnable)(disposable)) {
Runtime_1.SystemLogger.debug("destroy %s().getHeartbeat()", name);
disposable
.getHeartbeat()
.destroy();
}
Runtime_1.SystemLogger.debug("%s.dispose()", name);
await disposable.dispose();
}
return Disposable_1.Disposable.dispose(disposable);
catch (error) {
Runtime_1.SystemLogger.error((0, util_1.toError)(error, "Unexpected error").message, error);
}
finally {
perf();
}
}
exports.dispose = dispose;
async function disposeAll(disposables) {
const ops = [];
for (const disposable of disposables) {
ops.push(Promise.resolve(dispose(disposable)));
}
await (0, util_1.all)(ops);
}
exports.disposeAll = disposeAll;
//# sourceMappingURL=functions.js.map

@@ -42,3 +42,3 @@ "use strict";

}
return (value !== null && value !== void 0 ? value : opt);
return (value ?? opt);
}

@@ -45,0 +45,0 @@ }

@@ -8,8 +8,2 @@ "use strict";

};
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {

@@ -20,3 +14,3 @@ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");

};
var _Heartbeat_pending;
var _Heartbeat_life;
Object.defineProperty(exports, "__esModule", { value: true });

@@ -29,5 +23,4 @@ exports.Heartbeat = void 0;

constructor(label, disposer) {
_Heartbeat_pending.set(this, void 0);
_Heartbeat_life.set(this, new util_1.Defer());
this.logger.debug("create", { label });
__classPrivateFieldSet(this, _Heartbeat_pending, util_1.AsyncState.acquire(), "f");
if (disposer) {

@@ -38,3 +31,3 @@ disposer((error) => this.destroy(error));

get beats() {
return !util_1.AsyncState.isReleased(__classPrivateFieldGet(this, _Heartbeat_pending, "f"));
return !__classPrivateFieldGet(this, _Heartbeat_life, "f").settled;
}

@@ -48,4 +41,6 @@ /**

static create(target, disposer) {
var _a;
const heartbeat = (_a = registry.get(target)) !== null && _a !== void 0 ? _a : new Heartbeat(target.constructor.name, disposer);
const heartbeat = registry.get(target) ?? new Heartbeat(target.constructor.name, (resolve) => {
registry.delete(target);
disposer?.(resolve);
});
if (!registry.has(target)) {

@@ -58,24 +53,26 @@ registry.set(target, heartbeat);

if ((0, internal_1.isRunnable)(runnable)) {
const heartbeat = runnable.getHeartbeat();
return heartbeat.watch();
return runnable
.getHeartbeat()
.watch();
}
}
static destroy(target) {
const heartbeat = registry.get(target);
heartbeat === null || heartbeat === void 0 ? void 0 : heartbeat.destroy();
registry
.get(target)
?.destroy();
}
destroy(error) {
if (!this.beats) {
if (__classPrivateFieldGet(this, _Heartbeat_life, "f").settled) {
return;
}
if (error) {
return util_1.AsyncState.reject(__classPrivateFieldGet(this, _Heartbeat_pending, "f"), error);
return __classPrivateFieldGet(this, _Heartbeat_life, "f").reject(error);
}
util_1.AsyncState.resolve(__classPrivateFieldGet(this, _Heartbeat_pending, "f"));
__classPrivateFieldGet(this, _Heartbeat_life, "f").resolve();
}
watch() {
return __classPrivateFieldGet(this, _Heartbeat_pending, "f");
return Promise.resolve(__classPrivateFieldGet(this, _Heartbeat_life, "f"));
}
}
_Heartbeat_pending = new WeakMap();
_Heartbeat_life = new WeakMap();
__decorate([

@@ -82,0 +79,0 @@ util_1.logger

/// <reference types="node" />
import { Promisify } from "@bunt/util";
import { Logger, Promisify } from "@bunt/util";
import { IDisposable, IRunnable } from "./interfaces";

@@ -8,1 +8,2 @@ export declare const Signals: NodeJS.Signals[];

export declare function main(...chain: (() => Promisify<unknown>)[]): void;
export declare const SystemLogger: Logger;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.main = exports.isRunnable = exports.isDisposable = exports.Signals = void 0;
exports.SystemLogger = exports.main = exports.isRunnable = exports.isDisposable = exports.Signals = void 0;
const util_1 = require("@bunt/util");

@@ -21,2 +21,3 @@ const Runtime_1 = require("./Runtime");

exports.main = main;
exports.SystemLogger = new util_1.Logger("System");
//# sourceMappingURL=internal.js.map
import { Logger, Promisify } from "@bunt/util";
import { Disposer } from "../Dispose";
import { Heartbeat } from "./Heartbeat";
import { DisposableFn, IDisposable } from "./interfaces";
export declare class Runtime implements IDisposable {
import { DisposableFn } from "./interfaces";
export declare class Runtime extends Disposer {
readonly logger: Logger;

@@ -16,5 +17,4 @@ protected readonly queue: Heartbeat[];

static createQueue(chain: (() => Promisify<unknown>)[]): Promise<unknown>[];
dispose(): Promise<void>;
private watch;
private handle;
}

@@ -16,4 +16,5 @@ "use strict";

const ENV = process.env.NODE_ENV || "production";
class Runtime {
class Runtime extends Dispose_1.Disposer {
constructor() {
super();
this.queue = [];

@@ -29,3 +30,4 @@ this.created = new Date();

static on(event, callback) {
Dispose_1.Disposable.attach(ref.ensure(), callback);
const runtime = ref.ensure();
runtime.onDispose(callback);
}

@@ -46,4 +48,4 @@ static isDebugEnable() {

const queue = this.createQueue(chain);
return ref.create(() => new Runtime())
.watch(queue);
const runtime = ref.create(() => new Runtime());
return runtime.watch(queue);
}

@@ -57,10 +59,2 @@ static createQueue(chain) {

}
async dispose() {
this.logger.info("dispose");
setImmediate(async () => {
await Dispose_1.Disposable.disposeAll()
.finally(() => this.logger.info("exit"))
.finally(() => process.nextTick(() => process.exit(0)));
});
}
async watch(chain) {

@@ -92,3 +86,3 @@ const finish = this.logger.perf("run");

if ((0, internal_1.isDisposable)(object)) {
Dispose_1.Disposable.attach(this, object);
this.onDispose(object);
}

@@ -95,0 +89,0 @@ }

{
"name": "@bunt/unit",
"version": "0.21.0",
"version": "0.21.1",
"keywords": [

@@ -29,6 +29,6 @@ "typescript"

"dependencies": {
"@bunt/util": "^0.21.0"
"@bunt/util": "^0.21.1"
},
"license": "MIT",
"gitHead": "b392d4e501e82223a764537d758d0519c087eb0d"
"gitHead": "d17cc6a86e22560c30e673d9425d4ca023e53894"
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc