@dxos/context
Advanced tools
Comparing version 0.1.46 to 0.1.48-next.366bc83
@@ -1,1 +0,1 @@ | ||
{"inputs":{"packages/common/context/src/context.ts":{"bytes":11838,"imports":[{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}]},"packages/common/context/src/promise-utils.ts":{"bytes":2064,"imports":[{"path":"@dxos/errors","kind":"import-statement","external":true}]},"packages/common/context/src/index.ts":{"bytes":476,"imports":[{"path":"packages/common/context/src/context.ts","kind":"import-statement","original":"./context"},{"path":"packages/common/context/src/promise-utils.ts","kind":"import-statement","original":"./promise-utils"}]}},"outputs":{"packages/common/context/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":6405},"packages/common/context/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/errors","kind":"import-statement","external":true}],"exports":["Context","cancelWithContext","rejectOnDispose"],"entryPoint":"packages/common/context/src/index.ts","inputs":{"packages/common/context/src/context.ts":{"bytesInOutput":3500},"packages/common/context/src/index.ts":{"bytesInOutput":0},"packages/common/context/src/promise-utils.ts":{"bytesInOutput":300}},"bytes":3988}}} | ||
{"inputs":{"packages/common/context/src/context.ts":{"bytes":14238,"imports":[{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}]},"packages/common/context/src/promise-utils.ts":{"bytes":2879,"imports":[{"path":"@dxos/errors","kind":"import-statement","external":true}]},"packages/common/context/src/index.ts":{"bytes":476,"imports":[{"path":"packages/common/context/src/context.ts","kind":"import-statement","original":"./context"},{"path":"packages/common/context/src/promise-utils.ts","kind":"import-statement","original":"./promise-utils"}]}},"outputs":{"packages/common/context/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":7881},"packages/common/context/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/errors","kind":"import-statement","external":true}],"exports":["Context","cancelWithContext","rejectOnDispose"],"entryPoint":"packages/common/context/src/index.ts","inputs":{"packages/common/context/src/context.ts":{"bytesInOutput":4195},"packages/common/context/src/index.ts":{"bytesInOutput":0},"packages/common/context/src/promise-utils.ts":{"bytesInOutput":475}},"bytes":4858}}} |
@@ -1,1 +0,1 @@ | ||
{"inputs":{"packages/common/context/src/context.ts":{"bytes":11838,"imports":[{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}]},"packages/common/context/src/promise-utils.ts":{"bytes":2064,"imports":[{"path":"@dxos/errors","kind":"import-statement","external":true}]},"packages/common/context/src/index.ts":{"bytes":476,"imports":[{"path":"packages/common/context/src/context.ts","kind":"import-statement","original":"./context"},{"path":"packages/common/context/src/promise-utils.ts","kind":"import-statement","original":"./promise-utils"}]}},"outputs":{"packages/common/context/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":6557},"packages/common/context/dist/lib/node/index.cjs":{"imports":[{"path":"@dxos/log","kind":"require-call","external":true},{"path":"@dxos/util","kind":"require-call","external":true},{"path":"@dxos/errors","kind":"require-call","external":true}],"exports":[],"entryPoint":"packages/common/context/src/index.ts","inputs":{"packages/common/context/src/index.ts":{"bytesInOutput":207},"packages/common/context/src/context.ts":{"bytesInOutput":3541},"packages/common/context/src/promise-utils.ts":{"bytesInOutput":312}},"bytes":5168}}} | ||
{"inputs":{"packages/common/context/src/context.ts":{"bytes":14238,"imports":[{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}]},"packages/common/context/src/promise-utils.ts":{"bytes":2879,"imports":[{"path":"@dxos/errors","kind":"import-statement","external":true}]},"packages/common/context/src/index.ts":{"bytes":476,"imports":[{"path":"packages/common/context/src/context.ts","kind":"import-statement","original":"./context"},{"path":"packages/common/context/src/promise-utils.ts","kind":"import-statement","original":"./promise-utils"}]}},"outputs":{"packages/common/context/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8034},"packages/common/context/dist/lib/node/index.cjs":{"imports":[{"path":"@dxos/log","kind":"require-call","external":true},{"path":"@dxos/util","kind":"require-call","external":true},{"path":"@dxos/errors","kind":"require-call","external":true}],"exports":[],"entryPoint":"packages/common/context/src/index.ts","inputs":{"packages/common/context/src/index.ts":{"bytesInOutput":207},"packages/common/context/src/context.ts":{"bytesInOutput":4247},"packages/common/context/src/promise-utils.ts":{"bytesInOutput":501}},"bytes":6063}}} |
@@ -19,4 +19,6 @@ export type ContextErrorHandler = (error: Error) => void; | ||
* NOTE: Will call the callback immediately if the context is already disposed. | ||
* | ||
* @returns A function that can be used to remove the callback from the dispose list. | ||
*/ | ||
onDispose(callback: DisposeCallback): void; | ||
onDispose(callback: DisposeCallback): () => void; | ||
/** | ||
@@ -23,0 +25,0 @@ * Runs all dispose callbacks. |
{ | ||
"name": "@dxos/context", | ||
"version": "0.1.46", | ||
"version": "0.1.48-next.366bc83", | ||
"description": "Async utils.", | ||
@@ -19,5 +19,5 @@ "homepage": "https://dxos.org", | ||
"dependencies": { | ||
"@dxos/errors": "0.1.46", | ||
"@dxos/log": "0.1.46", | ||
"@dxos/util": "0.1.46" | ||
"@dxos/errors": "0.1.48-next.366bc83", | ||
"@dxos/log": "0.1.48-next.366bc83", | ||
"@dxos/util": "0.1.48-next.366bc83" | ||
}, | ||
@@ -24,0 +24,0 @@ "publishConfig": { |
@@ -16,2 +16,7 @@ // | ||
/** | ||
* Maximum number of dispose callbacks before we start logging warnings. | ||
*/ | ||
const MAX_SAFE_DISPOSE_CALLBACKS = 100; | ||
@safeInstanceof('Context') | ||
@@ -45,2 +50,4 @@ export class Context { | ||
* NOTE: Will call the callback immediately if the context is already disposed. | ||
* | ||
* @returns A function that can be used to remove the callback from the dispose list. | ||
*/ | ||
@@ -60,2 +67,15 @@ onDispose(callback: DisposeCallback) { | ||
this._disposeCallbacks.push(callback); | ||
if (this._disposeCallbacks.length > MAX_SAFE_DISPOSE_CALLBACKS) { | ||
log.warn('Context has a large number of dispose callbacks. This might be a memory leak.', { | ||
count: this._disposeCallbacks.length, | ||
safeThreshold: MAX_SAFE_DISPOSE_CALLBACKS, | ||
}); | ||
} | ||
return () => { | ||
const index = this._disposeCallbacks.indexOf(callback); | ||
if (index !== -1) { | ||
this._disposeCallbacks.splice(index, 1); | ||
} | ||
}; | ||
} | ||
@@ -62,0 +82,0 @@ |
@@ -12,2 +12,3 @@ // | ||
*/ | ||
// TODO(dmaretskyi): Memory leak. | ||
export const rejectOnDispose = (ctx: Context, error = new CancelledError()): Promise<never> => | ||
@@ -22,3 +23,10 @@ new Promise((resolve, reject) => { | ||
export const cancelWithContext = <T>(ctx: Context, promise: Promise<T>): Promise<T> => { | ||
return Promise.race([promise, rejectOnDispose(ctx)]); | ||
let clearDispose: () => void; | ||
return Promise.race([ | ||
promise, | ||
new Promise<never>((resolve, reject) => { | ||
// Will be called before .finally() handlers. | ||
clearDispose = ctx.onDispose(() => reject(new CancelledError())); | ||
}), | ||
]).finally(() => clearDispose?.()); | ||
}; |
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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
41162
599
+ Added@dxos/debug@0.1.48-next.366bc83(transitive)
+ Added@dxos/errors@0.1.48-next.366bc83(transitive)
+ Added@dxos/keys@0.1.48-next.366bc83(transitive)
+ Added@dxos/log@0.1.48-next.366bc83(transitive)
+ Added@dxos/node-std@0.1.48-next.366bc83(transitive)
+ Added@dxos/util@0.1.48-next.366bc83(transitive)
- Removed@dxos/debug@0.1.46(transitive)
- Removed@dxos/errors@0.1.46(transitive)
- Removed@dxos/keys@0.1.46(transitive)
- Removed@dxos/log@0.1.46(transitive)
- Removed@dxos/node-std@0.1.46(transitive)
- Removed@dxos/util@0.1.46(transitive)