@dxos/context 0.8.4-main.e098934 → 0.8.4-main.e8ec1fe

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.
@@ -12,59 +12,6 @@ var ContextDisposedError = class extends Error {
12
12
  };
13
13
 
14
14
  // src/context.ts
15
- function _check_private_redeclaration(obj, privateCollection) {
16
- if (privateCollection.has(obj)) {
17
- throw new TypeError("Cannot initialize the same private elements twice on an object");
18
- }
19
- }
20
- function _class_apply_descriptor_get(receiver, descriptor) {
21
- if (descriptor.get) {
22
- return descriptor.get.call(receiver);
23
- }
24
- return descriptor.value;
25
- }
26
- function _class_apply_descriptor_set(receiver, descriptor, value) {
27
- if (descriptor.set) {
28
- descriptor.set.call(receiver, value);
29
- } else {
30
- if (!descriptor.writable) {
31
- throw new TypeError("attempted to set read only private field");
32
- }
33
- descriptor.value = value;
34
- }
35
- }
36
- function _class_extract_field_descriptor(receiver, privateMap, action) {
37
- if (!privateMap.has(receiver)) {
38
- throw new TypeError("attempted to " + action + " private field on non-instance");
39
- }
40
- return privateMap.get(receiver);
41
- }
42
- function _class_private_field_get(receiver, privateMap) {
43
- var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
44
- return _class_apply_descriptor_get(receiver, descriptor);
45
- }
46
- function _class_private_field_init(obj, privateMap, value) {
47
- _check_private_redeclaration(obj, privateMap);
48
- privateMap.set(obj, value);
49
- }
50
- function _class_private_field_set(receiver, privateMap, value) {
51
- var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
52
- _class_apply_descriptor_set(receiver, descriptor, value);
53
- return value;
54
- }
55
- function _define_property(obj, key, value) {
56
- if (key in obj) {
57
- Object.defineProperty(obj, key, {
58
- value,
59
- enumerable: true,
60
- configurable: true,
61
- writable: true
62
- });
63
- } else {
64
- obj[key] = value;
65
- }
66
- return obj;
67
- }
68
15
  function _ts_decorate(decorators, target, key, desc) {
69
16
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
70
17
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -83,25 +30,41 @@ var DEFAULT_ERROR_HANDLER = (error, ctx) => {
83
30
  };
84
31
  var CONTEXT_FLAG_IS_DISPOSED = 1 << 0;
85
32
  var CONTEXT_FLAG_LEAK_DETECTED = 1 << 1;
86
- var _disposeCallbacks = /* @__PURE__ */ new WeakMap();
87
- var _name = /* @__PURE__ */ new WeakMap();
88
- var _parent = /* @__PURE__ */ new WeakMap();
89
- var _attributes = /* @__PURE__ */ new WeakMap();
90
- var _onError = /* @__PURE__ */ new WeakMap();
91
- var _flags = /* @__PURE__ */ new WeakMap();
92
- var _disposePromise = /* @__PURE__ */ new WeakMap();
93
- var _isDisposed = /* @__PURE__ */ new WeakMap();
94
- var _leakDetected = /* @__PURE__ */ new WeakMap();
95
- var _inspect_custom = inspect.custom;
96
33
  var Context = class _Context {
97
34
  static default() {
98
35
  return new _Context();
99
36
  }
37
+ #disposeCallbacks = [];
38
+ #name = void 0;
39
+ #parent = void 0;
40
+ #attributes;
41
+ #onError;
42
+ #flags = 0;
43
+ #disposePromise = void 0;
44
+ maxSafeDisposeCallbacks = MAX_SAFE_DISPOSE_CALLBACKS;
45
+ constructor(params = {}, callMeta) {
46
+ this.#name = getContextName(params, callMeta);
47
+ this.#parent = params.parent;
48
+ this.#attributes = params.attributes ?? {};
49
+ this.#onError = params.onError ?? DEFAULT_ERROR_HANDLER;
50
+ }
51
+ get #isDisposed() {
52
+ return !!(this.#flags & CONTEXT_FLAG_IS_DISPOSED);
53
+ }
54
+ set #isDisposed(value) {
55
+ this.#flags = value ? this.#flags | CONTEXT_FLAG_IS_DISPOSED : this.#flags & ~CONTEXT_FLAG_IS_DISPOSED;
56
+ }
57
+ get #leakDetected() {
58
+ return !!(this.#flags & CONTEXT_FLAG_LEAK_DETECTED);
59
+ }
60
+ set #leakDetected(value) {
61
+ this.#flags = value ? this.#flags | CONTEXT_FLAG_LEAK_DETECTED : this.#flags & ~CONTEXT_FLAG_LEAK_DETECTED;
62
+ }
100
63
  get disposed() {
101
- return _class_private_field_get(this, _isDisposed);
64
+ return this.#isDisposed;
102
65
  }
103
66
  get disposeCallbacksLength() {
104
- return _class_private_field_get(this, _disposeCallbacks).length;
67
+ return this.#disposeCallbacks.length;
105
68
  }
106
69
  /**
107
70
  * Schedules a callback to run when the context is disposed.
@@ -113,13 +76,13 @@ var Context = class _Context {
113
76
  * @returns A function that can be used to remove the callback from the dispose list.
114
77
  */
115
78
  onDispose(callback) {
116
- if (_class_private_field_get(this, _isDisposed)) {
79
+ if (this.#isDisposed) {
117
80
  void (async () => {
118
81
  try {
119
82
  await callback();
120
83
  } catch (error) {
121
84
  log.catch(error, {
122
- context: _class_private_field_get(this, _name)
85
+ context: this.#name
123
86
  }, {
124
87
  F: __dxlog_file,
125
88
  L: 119,
@@ -129,14 +92,14 @@ var Context = class _Context {
129
92
  }
130
93
  })();
131
94
  }
132
- _class_private_field_get(this, _disposeCallbacks).push(callback);
133
- if (_class_private_field_get(this, _disposeCallbacks).length > this.maxSafeDisposeCallbacks && !_class_private_field_get(this, _leakDetected)) {
134
- _class_private_field_set(this, _leakDetected, true);
95
+ this.#disposeCallbacks.push(callback);
96
+ if (this.#disposeCallbacks.length > this.maxSafeDisposeCallbacks && !this.#leakDetected) {
97
+ this.#leakDetected = true;
135
98
  const callSite = new StackTrace().getStackArray(1)[0].trim();
136
99
  log.warn("Context has a large number of dispose callbacks (this might be a memory leak).", {
137
- context: _class_private_field_get(this, _name),
100
+ context: this.#name,
138
101
  callSite,
139
- count: _class_private_field_get(this, _disposeCallbacks).length
102
+ count: this.#disposeCallbacks.length
140
103
  }, {
141
104
  F: __dxlog_file,
142
105
  L: 128,
@@ -145,9 +108,9 @@ var Context = class _Context {
145
108
  });
146
109
  }
147
110
  return () => {
148
- const index = _class_private_field_get(this, _disposeCallbacks).indexOf(callback);
111
+ const index = this.#disposeCallbacks.indexOf(callback);
149
112
  if (index !== -1) {
150
- _class_private_field_get(this, _disposeCallbacks).splice(index, 1);
113
+ this.#disposeCallbacks.splice(index, 1);
151
114
  }
152
115
  };
153
116
  }
@@ -160,20 +123,20 @@ var Context = class _Context {
160
123
  * @returns true if there were no errors during the dispose process.
161
124
  */
162
125
  async dispose(throwOnError = false) {
163
- if (_class_private_field_get(this, _disposePromise)) {
164
- return _class_private_field_get(this, _disposePromise);
126
+ if (this.#disposePromise) {
127
+ return this.#disposePromise;
165
128
  }
166
- _class_private_field_set(this, _isDisposed, true);
129
+ this.#isDisposed = true;
167
130
  let resolveDispose;
168
131
  const promise = new Promise((resolve) => {
169
132
  resolveDispose = resolve;
170
133
  });
171
- _class_private_field_set(this, _disposePromise, promise);
172
- const callbacks = Array.from(_class_private_field_get(this, _disposeCallbacks)).reverse();
173
- _class_private_field_get(this, _disposeCallbacks).length = 0;
134
+ this.#disposePromise = promise;
135
+ const callbacks = Array.from(this.#disposeCallbacks).reverse();
136
+ this.#disposeCallbacks.length = 0;
174
137
  if (DEBUG_LOG_DISPOSE) {
175
138
  log("disposing", {
176
- context: _class_private_field_get(this, _name),
139
+ context: this.#name,
177
140
  count: callbacks.length
178
141
  }, {
179
142
  F: __dxlog_file,
@@ -195,7 +158,7 @@ var Context = class _Context {
195
158
  errors.push(err);
196
159
  } else {
197
160
  log.catch(err, {
198
- context: _class_private_field_get(this, _name),
161
+ context: this.#name,
199
162
  callback: i,
200
163
  count: callbacks.length
201
164
  }, {
@@ -213,7 +176,7 @@ var Context = class _Context {
213
176
  resolveDispose(clean);
214
177
  if (DEBUG_LOG_DISPOSE) {
215
178
  log("disposed", {
216
- context: _class_private_field_get(this, _name)
179
+ context: this.#name
217
180
  }, {
218
181
  F: __dxlog_file,
219
182
  L: 199,
@@ -229,11 +192,11 @@ var Context = class _Context {
229
192
  * IF the error handler is not set, the error will dispose the context and cause an unhandled rejection.
230
193
  */
231
194
  raise(error) {
232
- if (_class_private_field_get(this, _isDisposed)) {
195
+ if (this.#isDisposed) {
233
196
  return;
234
197
  }
235
198
  try {
236
- _class_private_field_get(this, _onError).call(this, error, this);
199
+ this.#onError(error, this);
237
200
  } catch (err) {
238
201
  void Promise.reject(err);
239
202
  }
@@ -259,78 +222,23 @@ var Context = class _Context {
259
222
  return newCtx;
260
223
  }
261
224
  getAttribute(key) {
262
- if (key in _class_private_field_get(this, _attributes)) {
263
- return _class_private_field_get(this, _attributes)[key];
225
+ if (key in this.#attributes) {
226
+ return this.#attributes[key];
264
227
  }
265
- if (_class_private_field_get(this, _parent)) {
266
- return _class_private_field_get(this, _parent).getAttribute(key);
228
+ if (this.#parent) {
229
+ return this.#parent.getAttribute(key);
267
230
  }
268
231
  return void 0;
269
232
  }
233
+ [Symbol.toStringTag] = "Context";
234
+ [inspect.custom] = () => this.toString();
270
235
  toString() {
271
- return `Context(${_class_private_field_get(this, _isDisposed) ? "disposed" : "active"})`;
236
+ return `Context(${this.#isDisposed ? "disposed" : "active"})`;
272
237
  }
273
238
  async [Symbol.asyncDispose]() {
274
239
  await this.dispose();
275
240
  }
276
- constructor(params = {}, callMeta) {
277
- _class_private_field_init(this, _isDisposed, {
278
- get: get_isDisposed,
279
- set: set_isDisposed
280
- });
281
- _class_private_field_init(this, _leakDetected, {
282
- get: get_leakDetected,
283
- set: set_leakDetected
284
- });
285
- _class_private_field_init(this, _disposeCallbacks, {
286
- writable: true,
287
- value: []
288
- });
289
- _class_private_field_init(this, _name, {
290
- writable: true,
291
- value: void 0
292
- });
293
- _class_private_field_init(this, _parent, {
294
- writable: true,
295
- value: void 0
296
- });
297
- _class_private_field_init(this, _attributes, {
298
- writable: true,
299
- value: void 0
300
- });
301
- _class_private_field_init(this, _onError, {
302
- writable: true,
303
- value: void 0
304
- });
305
- _class_private_field_init(this, _flags, {
306
- writable: true,
307
- value: 0
308
- });
309
- _class_private_field_init(this, _disposePromise, {
310
- writable: true,
311
- value: void 0
312
- });
313
- _define_property(this, "maxSafeDisposeCallbacks", MAX_SAFE_DISPOSE_CALLBACKS);
314
- _define_property(this, Symbol.toStringTag, "Context");
315
- _define_property(this, _inspect_custom, () => this.toString());
316
- _class_private_field_set(this, _name, getContextName(params, callMeta));
317
- _class_private_field_set(this, _parent, params.parent);
318
- _class_private_field_set(this, _attributes, params.attributes ?? {});
319
- _class_private_field_set(this, _onError, params.onError ?? DEFAULT_ERROR_HANDLER);
320
- }
321
241
  };
322
- function get_isDisposed() {
323
- return !!(_class_private_field_get(this, _flags) & CONTEXT_FLAG_IS_DISPOSED);
324
- }
325
- function set_isDisposed(value) {
326
- _class_private_field_set(this, _flags, value ? _class_private_field_get(this, _flags) | CONTEXT_FLAG_IS_DISPOSED : _class_private_field_get(this, _flags) & ~CONTEXT_FLAG_IS_DISPOSED);
327
- }
328
- function get_leakDetected() {
329
- return !!(_class_private_field_get(this, _flags) & CONTEXT_FLAG_LEAK_DETECTED);
330
- }
331
- function set_leakDetected(value) {
332
- _class_private_field_set(this, _flags, value ? _class_private_field_get(this, _flags) | CONTEXT_FLAG_LEAK_DETECTED : _class_private_field_get(this, _flags) & ~CONTEXT_FLAG_LEAK_DETECTED);
333
- }
334
242
  Context = _ts_decorate([
335
243
  safeInstanceof("Context")
336
244
  ], Context);
@@ -361,92 +269,59 @@ var cancelWithContext = (ctx, promise) => {
361
269
 
362
270
  // src/resource.ts
363
271
  import { throwUnhandledError } from "@dxos/util";
364
- function _check_private_redeclaration2(obj, privateCollection) {
365
- if (privateCollection.has(obj)) {
366
- throw new TypeError("Cannot initialize the same private elements twice on an object");
367
- }
368
- }
369
- function _class_apply_descriptor_get2(receiver, descriptor) {
370
- if (descriptor.get) {
371
- return descriptor.get.call(receiver);
372
- }
373
- return descriptor.value;
374
- }
375
- function _class_apply_descriptor_set2(receiver, descriptor, value) {
376
- if (descriptor.set) {
377
- descriptor.set.call(receiver, value);
378
- } else {
379
- if (!descriptor.writable) {
380
- throw new TypeError("attempted to set read only private field");
381
- }
382
- descriptor.value = value;
383
- }
384
- }
385
- function _class_extract_field_descriptor2(receiver, privateMap, action) {
386
- if (!privateMap.has(receiver)) {
387
- throw new TypeError("attempted to " + action + " private field on non-instance");
388
- }
389
- return privateMap.get(receiver);
390
- }
391
- function _class_private_field_get2(receiver, privateMap) {
392
- var descriptor = _class_extract_field_descriptor2(receiver, privateMap, "get");
393
- return _class_apply_descriptor_get2(receiver, descriptor);
394
- }
395
- function _class_private_field_init2(obj, privateMap, value) {
396
- _check_private_redeclaration2(obj, privateMap);
397
- privateMap.set(obj, value);
398
- }
399
- function _class_private_field_set2(receiver, privateMap, value) {
400
- var descriptor = _class_extract_field_descriptor2(receiver, privateMap, "set");
401
- _class_apply_descriptor_set2(receiver, descriptor, value);
402
- return value;
403
- }
404
- function _class_private_method_get(receiver, privateSet, fn) {
405
- if (!privateSet.has(receiver)) {
406
- throw new TypeError("attempted to get private field on non-instance");
407
- }
408
- return fn;
409
- }
410
- function _class_private_method_init(obj, privateSet) {
411
- _check_private_redeclaration2(obj, privateSet);
412
- privateSet.add(obj);
413
- }
414
- var LifecycleState = /* @__PURE__ */ function(LifecycleState2) {
272
+ var LifecycleState = /* @__PURE__ */ (function(LifecycleState2) {
415
273
  LifecycleState2["CLOSED"] = "CLOSED";
416
274
  LifecycleState2["OPEN"] = "OPEN";
417
275
  LifecycleState2["ERROR"] = "ERROR";
418
276
  return LifecycleState2;
419
- }({});
277
+ })({});
420
278
  var CLOSE_RESOURCE_ON_UNHANDLED_ERROR = false;
421
- var _lifecycleState = /* @__PURE__ */ new WeakMap();
422
- var _openPromise = /* @__PURE__ */ new WeakMap();
423
- var _closePromise = /* @__PURE__ */ new WeakMap();
424
- var _internalCtx = /* @__PURE__ */ new WeakMap();
425
- var _parentCtx = /* @__PURE__ */ new WeakMap();
426
- var _name2 = /* @__PURE__ */ new WeakMap();
427
- var _open = /* @__PURE__ */ new WeakSet();
428
- var _close = /* @__PURE__ */ new WeakSet();
429
- var _createContext = /* @__PURE__ */ new WeakSet();
430
- var _createParentContext = /* @__PURE__ */ new WeakSet();
431
279
  var Resource = class {
280
+ #lifecycleState = "CLOSED";
281
+ #openPromise = null;
282
+ #closePromise = null;
283
+ /**
284
+ * Managed internally by the resource.
285
+ * Recreated on close.
286
+ * Errors are propagated to the `_catch` method and the parent context.
287
+ */
288
+ #internalCtx = this.#createContext();
289
+ /**
290
+ * Context that is used to bubble up errors that are not handled by the resource.
291
+ * Provided in the open method.
292
+ */
293
+ #parentCtx = this.#createParentContext();
294
+ /**
295
+ * ```ts
296
+ * await using resource = new Resource();
297
+ * await resource.open();
298
+ * ```
299
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/using
300
+ */
301
+ async [Symbol.asyncDispose]() {
302
+ await this.close();
303
+ }
304
+ get #name() {
305
+ return Object.getPrototypeOf(this).constructor.name;
306
+ }
432
307
  get isOpen() {
433
- return _class_private_field_get2(this, _lifecycleState) === "OPEN" && _class_private_field_get2(this, _closePromise) == null;
308
+ return this.#lifecycleState === "OPEN" && this.#closePromise == null;
434
309
  }
435
310
  get _lifecycleState() {
436
- return _class_private_field_get2(this, _lifecycleState);
311
+ return this.#lifecycleState;
437
312
  }
438
313
  get _ctx() {
439
- return _class_private_field_get2(this, _internalCtx);
314
+ return this.#internalCtx;
440
315
  }
441
316
  /**
442
317
  * To be overridden by subclasses.
443
318
  */
444
- async _open(ctx) {
319
+ async _open(_ctx) {
445
320
  }
446
321
  /**
447
322
  * To be overridden by subclasses.
448
323
  */
449
- async _close(ctx) {
324
+ async _close(_ctx) {
450
325
  }
451
326
  /**
452
327
  * Error handler for errors that are caught by the context.
@@ -463,6 +338,19 @@ var Resource = class {
463
338
  throw err;
464
339
  }
465
340
  /**
341
+ * Calls the provided function, opening and closing the resource.
342
+ * NOTE: Consider using `using` instead.
343
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/using
344
+ */
345
+ async use(fn) {
346
+ try {
347
+ await this.open();
348
+ return await fn(this);
349
+ } finally {
350
+ await this.close();
351
+ }
352
+ }
353
+ /**
466
354
  * Opens the resource.
467
355
  * If the resource is already open, it does nothing.
468
356
  * If the resource is in an error state, it throws an error.
@@ -470,15 +358,15 @@ var Resource = class {
470
358
  * @param ctx - Context to use for opening the resource. This context will receive errors that are not handled in `_catch`.
471
359
  */
472
360
  async open(ctx) {
473
- switch (_class_private_field_get2(this, _lifecycleState)) {
361
+ switch (this.#lifecycleState) {
474
362
  case "OPEN":
475
363
  return this;
476
364
  case "ERROR":
477
- throw new Error(`Invalid state: ${_class_private_field_get2(this, _lifecycleState)}`);
365
+ throw new Error(`Invalid state: ${this.#lifecycleState}`);
478
366
  default:
479
367
  }
480
- await _class_private_field_get2(this, _closePromise);
481
- await _class_private_field_set2(this, _openPromise, _class_private_field_get2(this, _openPromise) ?? _class_private_method_get(this, _open, open).call(this, ctx));
368
+ await this.#closePromise;
369
+ await (this.#openPromise ??= this.#open(ctx));
482
370
  return this;
483
371
  }
484
372
  /**
@@ -486,98 +374,62 @@ var Resource = class {
486
374
  * If the resource is already closed, it does nothing.
487
375
  */
488
376
  async close(ctx) {
489
- if (_class_private_field_get2(this, _lifecycleState) === "CLOSED") {
377
+ if (this.#lifecycleState === "CLOSED") {
490
378
  return this;
491
379
  }
492
- await _class_private_field_get2(this, _openPromise);
493
- await _class_private_field_set2(this, _closePromise, _class_private_field_get2(this, _closePromise) ?? _class_private_method_get(this, _close, close).call(this, ctx));
380
+ await this.#openPromise;
381
+ await (this.#closePromise ??= this.#close(ctx));
494
382
  return this;
495
383
  }
496
384
  /**
497
385
  * Waits until the resource is open.
498
386
  */
499
387
  async waitUntilOpen() {
500
- switch (_class_private_field_get2(this, _lifecycleState)) {
388
+ switch (this.#lifecycleState) {
501
389
  case "OPEN":
502
390
  return;
503
391
  case "ERROR":
504
- throw new Error(`Invalid state: ${_class_private_field_get2(this, _lifecycleState)}`);
392
+ throw new Error(`Invalid state: ${this.#lifecycleState}`);
505
393
  }
506
- if (!_class_private_field_get2(this, _openPromise)) {
394
+ if (!this.#openPromise) {
507
395
  throw new Error("Resource is not being opened");
508
396
  }
509
- await _class_private_field_get2(this, _openPromise);
510
- }
511
- async [Symbol.asyncDispose]() {
512
- await this.close();
513
- }
514
- constructor() {
515
- _class_private_field_init2(this, _name2, {
516
- get: get_name,
517
- set: void 0
518
- });
519
- _class_private_method_init(this, _open);
520
- _class_private_method_init(this, _close);
521
- _class_private_method_init(this, _createContext);
522
- _class_private_method_init(this, _createParentContext);
523
- _class_private_field_init2(this, _lifecycleState, {
524
- writable: true,
525
- value: "CLOSED"
526
- });
527
- _class_private_field_init2(this, _openPromise, {
528
- writable: true,
529
- value: null
530
- });
531
- _class_private_field_init2(this, _closePromise, {
532
- writable: true,
533
- value: null
534
- });
535
- _class_private_field_init2(this, _internalCtx, {
536
- writable: true,
537
- value: _class_private_method_get(this, _createContext, createContext).call(this)
397
+ await this.#openPromise;
398
+ }
399
+ async #open(ctx) {
400
+ this.#closePromise = null;
401
+ this.#parentCtx = ctx?.derive({
402
+ name: this.#name
403
+ }) ?? this.#createParentContext();
404
+ await this._open(this.#parentCtx);
405
+ this.#lifecycleState = "OPEN";
406
+ }
407
+ async #close(ctx = Context.default()) {
408
+ this.#openPromise = null;
409
+ await this.#internalCtx.dispose();
410
+ await this._close(ctx);
411
+ this.#internalCtx = this.#createContext();
412
+ this.#lifecycleState = "CLOSED";
413
+ }
414
+ #createContext() {
415
+ return new Context({
416
+ name: this.#name,
417
+ onError: (error) => queueMicrotask(async () => {
418
+ try {
419
+ await this._catch(error);
420
+ } catch (err) {
421
+ this.#lifecycleState = "ERROR";
422
+ this.#parentCtx.raise(err);
423
+ }
424
+ })
538
425
  });
539
- _class_private_field_init2(this, _parentCtx, {
540
- writable: true,
541
- value: _class_private_method_get(this, _createParentContext, createParentContext).call(this)
426
+ }
427
+ #createParentContext() {
428
+ return new Context({
429
+ name: this.#name
542
430
  });
543
431
  }
544
432
  };
545
- function get_name() {
546
- return Object.getPrototypeOf(this).constructor.name;
547
- }
548
- async function open(ctx) {
549
- _class_private_field_set2(this, _closePromise, null);
550
- _class_private_field_set2(this, _parentCtx, ctx?.derive({
551
- name: _class_private_field_get2(this, _name2)
552
- }) ?? _class_private_method_get(this, _createParentContext, createParentContext).call(this));
553
- await this._open(_class_private_field_get2(this, _parentCtx));
554
- _class_private_field_set2(this, _lifecycleState, "OPEN");
555
- }
556
- async function close(ctx = Context.default()) {
557
- _class_private_field_set2(this, _openPromise, null);
558
- await _class_private_field_get2(this, _internalCtx).dispose();
559
- await this._close(ctx);
560
- _class_private_field_set2(this, _internalCtx, _class_private_method_get(this, _createContext, createContext).call(this));
561
- _class_private_field_set2(this, _lifecycleState, "CLOSED");
562
- }
563
- function createContext() {
564
- return new Context({
565
- name: _class_private_field_get2(this, _name2),
566
- onError: (error) => queueMicrotask(async () => {
567
- try {
568
- await this._catch(error);
569
- } catch (err) {
570
- _class_private_field_set2(this, _lifecycleState, "ERROR");
571
- _class_private_field_get2(this, _parentCtx).raise(err);
572
- }
573
- })
574
- });
575
- }
576
- function createParentContext() {
577
- return new Context({
578
- name: _class_private_field_get2(this, _name2)
579
- });
580
- }
581
433
  var openInContext = async (ctx, resource) => {
582
434
  await resource.open?.(ctx);
583
435
  ctx.onDispose(() => resource.close?.());