|
| 1 | +diff -crB dist/CreateDestroy.js patched/CreateDestroy.js |
| 2 | +*** dist/CreateDestroy.js 2025-05-13 17:01:44.521843798 +1000 |
| 3 | +--- patched/CreateDestroy.js 2025-05-13 16:43:22.019287860 +1000 |
| 4 | +*************** |
| 5 | +*** 1,8 **** |
| 6 | + import { Evented } from '@matrixai/events'; |
| 7 | + import { RWLockWriter } from '@matrixai/async-locks'; |
| 8 | +! import { _destroyed, destroyed, _status, status, _statusP, statusP, resolveStatusP, initLock, AsyncFunction, GeneratorFunction, AsyncGeneratorFunction, promise, resetStackTrace, } from './utils.js'; |
| 9 | + import { EventAsyncInitDestroy, EventAsyncInitDestroyed } from './events.js'; |
| 10 | + import { ErrorAsyncInitDestroyed } from './errors.js'; |
| 11 | + function CreateDestroy({ eventDestroy = EventAsyncInitDestroy, eventDestroyed = EventAsyncInitDestroyed, } = {}) { |
| 12 | + return (constructor) => { |
| 13 | + const { p, resolveP } = promise(); |
| 14 | +--- 1,10 ---- |
| 15 | + import { Evented } from '@matrixai/events'; |
| 16 | + import { RWLockWriter } from '@matrixai/async-locks'; |
| 17 | +! import { _destroyed, destroyed, _status, status, _statusP, statusP, resolveStatusP, initLock, AsyncFunction, GeneratorFunction, AsyncGeneratorFunction, promise, resetStackTrace, _spanId, spanId, spanContext, } from './utils.js'; |
| 18 | + import { EventAsyncInitDestroy, EventAsyncInitDestroyed } from './events.js'; |
| 19 | + import { ErrorAsyncInitDestroyed } from './errors.js'; |
| 20 | ++ import { tracer } from '@matrixai/logger' |
| 21 | ++ let i = 0; |
| 22 | + function CreateDestroy({ eventDestroy = EventAsyncInitDestroy, eventDestroyed = EventAsyncInitDestroyed, } = {}) { |
| 23 | + return (constructor) => { |
| 24 | + const { p, resolveP } = promise(); |
| 25 | +*************** |
| 26 | +*** 12,17 **** |
| 27 | +--- 14,20 ---- |
| 28 | + [_statusP] = p; |
| 29 | + [resolveStatusP] = resolveP; |
| 30 | + [initLock] = new RWLockWriter(); |
| 31 | ++ [_spanId] = undefined; |
| 32 | + get [destroyed]() { |
| 33 | + return this[_destroyed]; |
| 34 | + } |
| 35 | +*************** |
| 36 | +*** 21,26 **** |
| 37 | +--- 24,38 ---- |
| 38 | + get [statusP]() { |
| 39 | + return this[_statusP]; |
| 40 | + } |
| 41 | ++ get [spanId]() { |
| 42 | ++ return this[_spanId]; |
| 43 | ++ } |
| 44 | ++ constructor(...args) { |
| 45 | ++ super(...args); |
| 46 | ++ const ctx = spanContext.getStore(); |
| 47 | ++ const parentSpanId = ctx?.currentSpanId; |
| 48 | ++ this[_spanId] = tracer.startSpan(`cd-${this.constructor.name || i++}`, parentSpanId); |
| 49 | ++ } |
| 50 | + async destroy(...args) { |
| 51 | + return this[initLock] |
| 52 | + .withWriteF(async () => { |
| 53 | +*************** |
| 54 | +*** 37,42 **** |
| 55 | +--- 49,55 ---- |
| 56 | + if (typeof super['destroy'] === 'function') { |
| 57 | + result = await super.destroy(...args); |
| 58 | + } |
| 59 | ++ tracer.endSpan(this[_spanId]); |
| 60 | + this[_destroyed] = true; |
| 61 | + this.dispatchEvent(new eventDestroyed()); |
| 62 | + return result; |
| 63 | +diff -crB dist/CreateDestroyStartStop.js patched/CreateDestroyStartStop.js |
| 64 | +*** dist/CreateDestroyStartStop.js 2025-05-13 17:01:44.547844173 +1000 |
| 65 | +--- patched/CreateDestroyStartStop.js 2025-05-13 16:43:34.415385091 +1000 |
| 66 | +*************** |
| 67 | +*** 1,8 **** |
| 68 | + import { Evented } from '@matrixai/events'; |
| 69 | + import { RWLockWriter } from '@matrixai/async-locks'; |
| 70 | +! import { _running, running, _destroyed, destroyed, _status, status, _statusP, statusP, resolveStatusP, initLock, AsyncFunction, GeneratorFunction, AsyncGeneratorFunction, promise, resetStackTrace, } from './utils.js'; |
| 71 | + import { EventAsyncInitStart, EventAsyncInitStarted, EventAsyncInitStop, EventAsyncInitStopped, EventAsyncInitDestroy, EventAsyncInitDestroyed, } from './events.js'; |
| 72 | + import { ErrorAsyncInitRunning, ErrorAsyncInitNotRunning, ErrorAsyncInitDestroyed, } from './errors.js'; |
| 73 | + function CreateDestroyStartStop(errorRunning = new ErrorAsyncInitRunning(), errorDestroyed = new ErrorAsyncInitDestroyed(), { eventStart = EventAsyncInitStart, eventStarted = EventAsyncInitStarted, eventStop = EventAsyncInitStop, eventStopped = EventAsyncInitStopped, eventDestroy = EventAsyncInitDestroy, eventDestroyed = EventAsyncInitDestroyed, } = {}) { |
| 74 | + return (constructor) => { |
| 75 | + const { p, resolveP } = promise(); |
| 76 | +--- 1,10 ---- |
| 77 | + import { Evented } from '@matrixai/events'; |
| 78 | + import { RWLockWriter } from '@matrixai/async-locks'; |
| 79 | +! import { _running, running, _destroyed, destroyed, _status, status, _statusP, statusP, resolveStatusP, initLock, AsyncFunction, GeneratorFunction, AsyncGeneratorFunction, promise, resetStackTrace, _spanId, spanId, spanContext } from './utils.js'; |
| 80 | + import { EventAsyncInitStart, EventAsyncInitStarted, EventAsyncInitStop, EventAsyncInitStopped, EventAsyncInitDestroy, EventAsyncInitDestroyed, } from './events.js'; |
| 81 | + import { ErrorAsyncInitRunning, ErrorAsyncInitNotRunning, ErrorAsyncInitDestroyed, } from './errors.js'; |
| 82 | ++ import { tracer } from '@matrixai/logger' |
| 83 | ++ let i = 0; |
| 84 | + function CreateDestroyStartStop(errorRunning = new ErrorAsyncInitRunning(), errorDestroyed = new ErrorAsyncInitDestroyed(), { eventStart = EventAsyncInitStart, eventStarted = EventAsyncInitStarted, eventStop = EventAsyncInitStop, eventStopped = EventAsyncInitStopped, eventDestroy = EventAsyncInitDestroy, eventDestroyed = EventAsyncInitDestroyed, } = {}) { |
| 85 | + return (constructor) => { |
| 86 | + const { p, resolveP } = promise(); |
| 87 | +*************** |
| 88 | +*** 13,18 **** |
| 89 | +--- 15,21 ---- |
| 90 | + [_statusP] = p; |
| 91 | + [resolveStatusP] = resolveP; |
| 92 | + [initLock] = new RWLockWriter(); |
| 93 | ++ [_spanId] = undefined; |
| 94 | + get [running]() { |
| 95 | + return this[_running]; |
| 96 | + } |
| 97 | +*************** |
| 98 | +*** 25,30 **** |
| 99 | +--- 28,36 ---- |
| 100 | + get [statusP]() { |
| 101 | + return this[_statusP]; |
| 102 | + } |
| 103 | ++ get [spanId]() { |
| 104 | ++ return this[_spanId]; |
| 105 | ++ } |
| 106 | + async destroy(...args) { |
| 107 | + return this[initLock] |
| 108 | + .withWriteF(async () => { |
| 109 | +*************** |
| 110 | +*** 69,87 **** |
| 111 | + resetStackTrace(errorDestroyed); |
| 112 | + throw errorDestroyed; |
| 113 | + } |
| 114 | +! this[_status] = 'starting'; |
| 115 | +! this[resolveStatusP]('starting'); |
| 116 | +! const { p, resolveP } = promise(); |
| 117 | +! this[_statusP] = p; |
| 118 | +! this[resolveStatusP] = resolveP; |
| 119 | +! this.dispatchEvent(new eventStart()); |
| 120 | +! let result; |
| 121 | +! if (typeof super['start'] === 'function') { |
| 122 | +! result = await super.start(...args); |
| 123 | +! } |
| 124 | +! this[_running] = true; |
| 125 | +! this.dispatchEvent(new eventStarted()); |
| 126 | +! return result; |
| 127 | + }) |
| 128 | + .finally(() => { |
| 129 | + this[_status] = null; |
| 130 | +--- 75,98 ---- |
| 131 | + resetStackTrace(errorDestroyed); |
| 132 | + throw errorDestroyed; |
| 133 | + } |
| 134 | +! const ctx = spanContext.getStore(); |
| 135 | +! const parentSpanId = ctx?.currentSpanId; |
| 136 | +! this[_spanId] = tracer.startSpan(`ss-${this.constructor.name || i++}`, parentSpanId); |
| 137 | +! return spanContext.run({ currentSpanId: this[_spanId] }, async () => { |
| 138 | +! this[_status] = 'starting'; |
| 139 | +! this[resolveStatusP]('starting'); |
| 140 | +! const { p, resolveP } = promise(); |
| 141 | +! this[_statusP] = p; |
| 142 | +! this[resolveStatusP] = resolveP; |
| 143 | +! this.dispatchEvent(new eventStart()); |
| 144 | +! let result; |
| 145 | +! if (typeof super['start'] === 'function') { |
| 146 | +! result = await super.start(...args); |
| 147 | +! } |
| 148 | +! this[_running] = true; |
| 149 | +! this.dispatchEvent(new eventStarted()); |
| 150 | +! return result; |
| 151 | +! }); |
| 152 | + }) |
| 153 | + .finally(() => { |
| 154 | + this[_status] = null; |
| 155 | +*************** |
| 156 | +*** 114,119 **** |
| 157 | +--- 125,131 ---- |
| 158 | + if (typeof super['stop'] === 'function') { |
| 159 | + result = await super.stop(...args); |
| 160 | + } |
| 161 | ++ tracer.endSpan(this[_spanId]); |
| 162 | + this[_running] = false; |
| 163 | + this.dispatchEvent(new eventStopped()); |
| 164 | + return result; |
| 165 | +diff -crB dist/StartStop.js patched/StartStop.js |
| 166 | +*** dist/StartStop.js 2025-05-13 17:01:44.604844994 +1000 |
| 167 | +--- patched/StartStop.js 2025-05-13 15:45:54.003601036 +1000 |
| 168 | +*************** |
| 169 | +*** 1,8 **** |
| 170 | + import { Evented } from '@matrixai/events'; |
| 171 | + import { RWLockWriter } from '@matrixai/async-locks'; |
| 172 | +! import { _running, running, _status, status, _statusP, statusP, resolveStatusP, initLock, AsyncFunction, GeneratorFunction, AsyncGeneratorFunction, promise, resetStackTrace, } from './utils.js'; |
| 173 | + import { EventAsyncInitStart, EventAsyncInitStarted, EventAsyncInitStop, EventAsyncInitStopped, } from './events.js'; |
| 174 | + import { ErrorAsyncInitNotRunning } from './errors.js'; |
| 175 | + function StartStop({ eventStart = EventAsyncInitStart, eventStarted = EventAsyncInitStarted, eventStop = EventAsyncInitStop, eventStopped = EventAsyncInitStopped, } = {}) { |
| 176 | + return (constructor) => { |
| 177 | + const { p, resolveP } = promise(); |
| 178 | +--- 1,10 ---- |
| 179 | + import { Evented } from '@matrixai/events'; |
| 180 | + import { RWLockWriter } from '@matrixai/async-locks'; |
| 181 | +! import { _running, running, _status, status, _statusP, statusP, resolveStatusP, initLock, AsyncFunction, GeneratorFunction, AsyncGeneratorFunction, promise, resetStackTrace, _spanId, spanId, spanContext, } from './utils.js'; |
| 182 | + import { EventAsyncInitStart, EventAsyncInitStarted, EventAsyncInitStop, EventAsyncInitStopped, } from './events.js'; |
| 183 | + import { ErrorAsyncInitNotRunning } from './errors.js'; |
| 184 | ++ import { tracer } from '@matrixai/logger'; |
| 185 | ++ let i = 0; |
| 186 | + function StartStop({ eventStart = EventAsyncInitStart, eventStarted = EventAsyncInitStarted, eventStop = EventAsyncInitStop, eventStopped = EventAsyncInitStopped, } = {}) { |
| 187 | + return (constructor) => { |
| 188 | + const { p, resolveP } = promise(); |
| 189 | +*************** |
| 190 | +*** 10,15 **** |
| 191 | +--- 12,18 ---- |
| 192 | + [_running] = false; |
| 193 | + [_status] = null; |
| 194 | + [_statusP] = p; |
| 195 | ++ [_spanId] = undefined; |
| 196 | + [resolveStatusP] = resolveP; |
| 197 | + [initLock] = new RWLockWriter(); |
| 198 | + get [running]() { |
| 199 | +*************** |
| 200 | +*** 21,45 **** |
| 201 | + get [statusP]() { |
| 202 | + return this[_statusP]; |
| 203 | + } |
| 204 | + async start(...args) { |
| 205 | + return this[initLock] |
| 206 | + .withWriteF(async () => { |
| 207 | + if (this[_running]) { |
| 208 | + return; |
| 209 | + } |
| 210 | +! this[_status] = 'starting'; |
| 211 | +! this[resolveStatusP]('starting'); |
| 212 | +! const { p, resolveP } = promise(); |
| 213 | +! this[_statusP] = p; |
| 214 | +! this[resolveStatusP] = resolveP; |
| 215 | +! this.dispatchEvent(new eventStart()); |
| 216 | +! let result; |
| 217 | +! if (typeof super['start'] === 'function') { |
| 218 | +! result = await super.start(...args); |
| 219 | +! } |
| 220 | +! this[_running] = true; |
| 221 | +! this.dispatchEvent(new eventStarted()); |
| 222 | +! return result; |
| 223 | + }) |
| 224 | + .finally(() => { |
| 225 | + this[_status] = null; |
| 226 | +--- 24,56 ---- |
| 227 | + get [statusP]() { |
| 228 | + return this[_statusP]; |
| 229 | + } |
| 230 | ++ get [spanId]() { |
| 231 | ++ return this[_spanId]; |
| 232 | ++ } |
| 233 | + async start(...args) { |
| 234 | + return this[initLock] |
| 235 | + .withWriteF(async () => { |
| 236 | + if (this[_running]) { |
| 237 | + return; |
| 238 | + } |
| 239 | +! const ctx = spanContext.getStore(); |
| 240 | +! const parentSpanId = ctx?.currentSpanId; |
| 241 | +! this[_spanId] = tracer.startSpan(`ss-${this.constructor.name || i++}`, parentSpanId); |
| 242 | +! return spanContext.run({ currentSpanId: this[_spanId] }, async () => { |
| 243 | +! this[_status] = 'starting'; |
| 244 | +! this[resolveStatusP]('starting'); |
| 245 | +! const { p, resolveP } = promise(); |
| 246 | +! this[_statusP] = p; |
| 247 | +! this[resolveStatusP] = resolveP; |
| 248 | +! this.dispatchEvent(new eventStart()); |
| 249 | +! let result; |
| 250 | +! if (typeof super['start'] === 'function') { |
| 251 | +! result = await super.start(...args); |
| 252 | +! } |
| 253 | +! this[_running] = true; |
| 254 | +! this.dispatchEvent(new eventStarted()); |
| 255 | +! return result; |
| 256 | +! }); |
| 257 | + }) |
| 258 | + .finally(() => { |
| 259 | + this[_status] = null; |
| 260 | +*************** |
| 261 | +*** 67,72 **** |
| 262 | +--- 78,84 ---- |
| 263 | + } |
| 264 | + this[_running] = false; |
| 265 | + this.dispatchEvent(new eventStopped()); |
| 266 | ++ tracer.endSpan(this[_spanId]); |
| 267 | + return result; |
| 268 | + }) |
| 269 | + .finally(() => { |
| 270 | +diff -crB dist/utils.d.ts patched/utils.d.ts |
| 271 | +*** dist/utils.d.ts 2025-05-13 17:01:44.754847155 +1000 |
| 272 | +--- patched/utils.d.ts 2025-05-13 16:48:52.064927307 +1000 |
| 273 | +*************** |
| 274 | +*** 1,3 **** |
| 275 | +--- 1,4 ---- |
| 276 | ++ import type { AsyncLocalStorage } from 'node:async_hooks'; |
| 277 | + import type { PromiseDeconstructed } from './types.js'; |
| 278 | + /** |
| 279 | + * Symbols prevents name clashes with decorated classes |
| 280 | +*************** |
| 281 | +*** 12,17 **** |
| 282 | +--- 13,21 ---- |
| 283 | + declare const statusP: unique symbol; |
| 284 | + declare const resolveStatusP: unique symbol; |
| 285 | + declare const initLock: unique symbol; |
| 286 | ++ declare const _spanId: unique symbol; |
| 287 | ++ declare const spanId: unique symbol; |
| 288 | ++ declare const spanContext: AsyncLocalStorage<any>; |
| 289 | + declare const AsyncFunction: Function; |
| 290 | + declare const GeneratorFunction: Function; |
| 291 | + declare const AsyncGeneratorFunction: Function; |
| 292 | +*************** |
| 293 | +*** 27,30 **** |
| 294 | + * function is called, giving a more useful stack trace |
| 295 | + */ |
| 296 | + declare function resetStackTrace(error: Error, decorated?: Function): void; |
| 297 | +! export { _running, running, _destroyed, destroyed, _status, status, _statusP, statusP, resolveStatusP, initLock, AsyncFunction, GeneratorFunction, AsyncGeneratorFunction, hasCaptureStackTrace, promise, resetStackTrace, }; |
| 298 | +--- 31,34 ---- |
| 299 | + * function is called, giving a more useful stack trace |
| 300 | + */ |
| 301 | + declare function resetStackTrace(error: Error, decorated?: Function): void; |
| 302 | +! export { _running, running, _destroyed, destroyed, _status, status, _statusP, statusP, resolveStatusP, initLock, AsyncFunction, GeneratorFunction, AsyncGeneratorFunction, hasCaptureStackTrace, _spanId, spanId, spanContext, promise, resetStackTrace, }; |
| 303 | +diff -crB dist/utils.js patched/utils.js |
| 304 | +*** dist/utils.js 2025-05-13 17:01:44.617845181 +1000 |
| 305 | +--- patched/utils.js 2025-05-13 15:45:45.001524143 +1000 |
| 306 | +*************** |
| 307 | +*** 1,3 **** |
| 308 | +--- 1,5 ---- |
| 309 | ++ import { AsyncLocalStorage } from 'node:async_hooks'; |
| 310 | ++ |
| 311 | + /** |
| 312 | + * Symbols prevents name clashes with decorated classes |
| 313 | + */ |
| 314 | +*************** |
| 315 | +*** 9,20 **** |
| 316 | +--- 11,25 ---- |
| 317 | + const status = Symbol('status'); |
| 318 | + const _statusP = Symbol('_statusP'); |
| 319 | + const statusP = Symbol('statusP'); |
| 320 | ++ const _spanId = Symbol('_spanId'); |
| 321 | ++ const spanId = Symbol('spanId'); |
| 322 | + const resolveStatusP = Symbol('resolveStatusP'); |
| 323 | + const initLock = Symbol('initLock'); |
| 324 | + const AsyncFunction = (async () => { }).constructor; |
| 325 | + const GeneratorFunction = function* () { }.constructor; |
| 326 | + const AsyncGeneratorFunction = async function* () { }.constructor; |
| 327 | + const hasCaptureStackTrace = 'captureStackTrace' in Error; |
| 328 | ++ const spanContext = new AsyncLocalStorage(); |
| 329 | + /** |
| 330 | + * Deconstructed promise |
| 331 | + */ |
| 332 | +*************** |
| 333 | +*** 53,57 **** |
| 334 | + error.stack = error.stack.replace(/[^\n]+\n/, stackTitle); |
| 335 | + } |
| 336 | + } |
| 337 | +! export { _running, running, _destroyed, destroyed, _status, status, _statusP, statusP, resolveStatusP, initLock, AsyncFunction, GeneratorFunction, AsyncGeneratorFunction, hasCaptureStackTrace, promise, resetStackTrace, }; |
| 338 | + //# sourceMappingURL=utils.js.map |
| 339 | +\ No newline at end of file |
| 340 | +--- 58,62 ---- |
| 341 | + error.stack = error.stack.replace(/[^\n]+\n/, stackTitle); |
| 342 | + } |
| 343 | + } |
| 344 | +! export { _running, running, _destroyed, destroyed, _status, status, _statusP, statusP, resolveStatusP, initLock, AsyncFunction, GeneratorFunction, AsyncGeneratorFunction, hasCaptureStackTrace, _spanId, spanId, spanContext, promise, resetStackTrace, }; |
| 345 | + //# sourceMappingURL=utils.js.map |
| 346 | +\ No newline at end of file |
0 commit comments