@flighthq/debug 0.4.0-next.1717.9d6a20b → 0.4.0-next.1725.752ca79

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.
@@ -1 +1 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAElB,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAOlC,wBAAgB,YAAY,IAAI,IAAI,CAOnC;AASD,wBAAgB,WAAW,CAAC,OAAO,GAAE,QAAQ,CAAC,YAAY,CAAM,GAAG,IAAI,CActE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAIhE;AAGD,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAOD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAE3G;AAID,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAE1E"}
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAElB,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAOlC,wBAAgB,YAAY,IAAI,IAAI,CAOnC;AASD,wBAAgB,WAAW,CAAC,OAAO,GAAE,QAAQ,CAAC,YAAY,CAAM,GAAG,IAAI,CA6CtE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAIhE;AAGD,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAOD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAE3G;AAID,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAE1E"}
package/dist/debug.js CHANGED
@@ -1,4 +1,4 @@
1
- import { addLogSink, clearLogChannelLevels, createConsoleLogSink, getLogLevel, removeLogSink, setLogChannelLevel, setLogLevel, } from '@flighthq/log/contract';
1
+ import { addLogSink, clearLogChannelLevel, clearLogChannelLevels, createConsoleLogSink, getLogChannelLevel, getLogLevel, removeLogSink, setLogChannelLevel, setLogLevel, } from '@flighthq/log/contract';
2
2
  import { enableColorAdjustmentGuards, enableRenderRegistryGuards } from '@flighthq/render/contract';
3
3
  import { LogLevel } from '@flighthq/types/contract';
4
4
  // The one call that returns Flight to the zero-debug baseline: removes the sink enableDebug
@@ -29,11 +29,49 @@ export function enableDebug(options = {}) {
29
29
  const subsystems = _resolveDebugSubsystems(options.subsystems);
30
30
  const channels = _collectDebugChannels(subsystems, options.channels);
31
31
  _savedGlobalLevel = getLogLevel();
32
- _applyDebugLevels(level, channels);
33
- _installDebugSink(options.sink ?? createConsoleLogSink());
34
- for (const hooks of subsystems) {
35
- hooks.enableGuards?.();
36
- _enabledSubsystems.push(hooks);
32
+ const savedChannelLevels = new Map(channels.map((channel) => [channel, getLogChannelLevel(channel)]));
33
+ try {
34
+ _applyDebugLevels(level, channels);
35
+ _installDebugSink(options.sink ?? createConsoleLogSink());
36
+ for (const hooks of subsystems) {
37
+ _enabledSubsystems.push(hooks);
38
+ hooks.enableGuards?.();
39
+ }
40
+ }
41
+ catch (error) {
42
+ for (let index = _enabledSubsystems.length - 1; index >= 0; index--) {
43
+ try {
44
+ _enabledSubsystems[index].disableGuards?.();
45
+ }
46
+ catch {
47
+ // Keep unwinding; the original enable error owns this failed transaction.
48
+ }
49
+ }
50
+ _enabledSubsystems.length = 0;
51
+ try {
52
+ _removeDebugSink();
53
+ }
54
+ catch {
55
+ // Keep restoring levels; the original enable error must not be masked.
56
+ }
57
+ for (const [channel, savedLevel] of savedChannelLevels) {
58
+ try {
59
+ if (savedLevel === null)
60
+ clearLogChannelLevel(channel);
61
+ else
62
+ setLogChannelLevel(channel, savedLevel);
63
+ }
64
+ catch {
65
+ // Keep restoring the remaining levels; the original enable error must survive.
66
+ }
67
+ }
68
+ try {
69
+ setLogLevel(_savedGlobalLevel);
70
+ }
71
+ catch {
72
+ // The original enable error remains the public failure even if rollback also fails.
73
+ }
74
+ throw error;
37
75
  }
38
76
  _enabled = true;
39
77
  }
package/dist/debug.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"debug.js","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/debug",
3
- "version": "0.4.0-next.1717.9d6a20b",
3
+ "version": "0.4.0-next.1725.752ca79",
4
4
  "author": "Joshua Granick and other contributors",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,9 +38,9 @@
38
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@flighthq/log": "0.4.0-next.1717.9d6a20b",
42
- "@flighthq/render": "0.4.0-next.1717.9d6a20b",
43
- "@flighthq/types": "0.4.0-next.1717.9d6a20b"
41
+ "@flighthq/log": "0.4.0-next.1725.752ca79",
42
+ "@flighthq/render": "0.4.0-next.1725.752ca79",
43
+ "@flighthq/types": "0.4.0-next.1725.752ca79"
44
44
  },
45
45
  "devDependencies": {
46
46
  "typescript": "^5.3.0"
package/src/debug.test.ts CHANGED
@@ -6,6 +6,7 @@ import {
6
6
  getLogLevel,
7
7
  getMemoryLogSinkEntries,
8
8
  log,
9
+ setLogChannelLevel,
9
10
  setLogLevel,
10
11
  } from '@flighthq/log/contract';
11
12
  import {
@@ -157,6 +158,52 @@ describe('enableDebug', () => {
157
158
  log(LogLevel.Debug, 'once', 'render');
158
159
  expect(readMemory(memory)).toHaveLength(1);
159
160
  });
161
+
162
+ it('unwinds a partially enabled guard transaction without masking its original error', () => {
163
+ const memory = createMemoryLogSink(16);
164
+ const originalError = new Error('audio guard enable failed');
165
+ const rollbackError = new Error('input guard rollback failed');
166
+ const activeGuards = new Set<string>();
167
+ const rollbackOrder: string[] = [];
168
+ const hooks = (name: string, failEnable = false, failRollback = false) => ({
169
+ channels: [name],
170
+ disableGuards: (): void => {
171
+ activeGuards.delete(name);
172
+ rollbackOrder.push(name);
173
+ if (failRollback) throw rollbackError;
174
+ },
175
+ enableGuards: (): void => {
176
+ activeGuards.add(name);
177
+ if (failEnable) throw originalError;
178
+ },
179
+ });
180
+ registerDebugSubsystem('render', hooks('render'));
181
+ registerDebugSubsystem('input', hooks('input', false, true));
182
+ registerDebugSubsystem('audio', hooks('audio', true));
183
+ setLogLevel(LogLevel.Warn);
184
+ setLogChannelLevel('render', LogLevel.Error);
185
+ setLogChannelLevel('input', LogLevel.Info);
186
+ setLogChannelLevel('unrelated', LogLevel.Verbose);
187
+
188
+ let thrown: unknown;
189
+ try {
190
+ enableDebug({ subsystems: ['render', 'input', 'audio'], sink: memory.sink });
191
+ } catch (error) {
192
+ thrown = error;
193
+ }
194
+
195
+ expect(thrown).toBe(originalError);
196
+ expect(isDebugEnabled()).toBe(false);
197
+ expect([...activeGuards]).toEqual([]);
198
+ expect(rollbackOrder).toEqual(['audio', 'input', 'render']);
199
+ expect(getLogLevel()).toBe(LogLevel.Warn);
200
+ expect(getLogChannelLevel('render')).toBe(LogLevel.Error);
201
+ expect(getLogChannelLevel('input')).toBe(LogLevel.Info);
202
+ expect(getLogChannelLevel('audio')).toBeNull();
203
+ expect(getLogChannelLevel('unrelated')).toBe(LogLevel.Verbose);
204
+ log(LogLevel.Error, 'after failed enable');
205
+ expect(readMemory(memory)).toEqual([]);
206
+ });
160
207
  });
161
208
 
162
209
  describe('enableFlightDiagnostics', () => {