@noego/wood 0.0.4 → 0.1.1
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.
- package/README.md +9 -0
- package/bin/wood.js +2 -1
- package/dist/client/controller_contract.cjs.map +1 -1
- package/dist/client/controller_contract.d.cts +4 -2
- package/dist/client/controller_contract.d.ts +4 -2
- package/dist/client/index.cjs +15 -2
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.d.cts +2 -1
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.js +16 -3
- package/dist/client/index.js.map +1 -1
- package/dist/codegen/preload_generator.cjs +26 -0
- package/dist/codegen/preload_generator.cjs.map +1 -1
- package/dist/codegen/preload_generator.js +26 -0
- package/dist/codegen/preload_generator.js.map +1 -1
- package/dist/controller/controller_lifecycle.cjs +41 -0
- package/dist/controller/controller_lifecycle.cjs.map +1 -0
- package/dist/controller/controller_lifecycle.d.cts +12 -0
- package/dist/controller/controller_lifecycle.d.ts +12 -0
- package/dist/controller/controller_lifecycle.js +17 -0
- package/dist/controller/controller_lifecycle.js.map +1 -0
- package/dist/controller/index.cjs +5 -2
- package/dist/controller/index.cjs.map +1 -1
- package/dist/controller/index.d.cts +1 -0
- package/dist/controller/index.d.ts +1 -0
- package/dist/controller/index.js +3 -1
- package/dist/controller/index.js.map +1 -1
- package/dist/index.cjs +6 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/main/index.cjs +61 -16
- package/dist/main/index.cjs.map +1 -1
- package/dist/main/index.d.cts +3 -0
- package/dist/main/index.d.ts +3 -0
- package/dist/main/index.js +62 -16
- package/dist/main/index.js.map +1 -1
- package/dist/navigation/navigation_identity.cjs +43 -0
- package/dist/navigation/navigation_identity.cjs.map +1 -0
- package/dist/navigation/navigation_identity.d.cts +5 -0
- package/dist/navigation/navigation_identity.d.ts +5 -0
- package/dist/navigation/navigation_identity.js +18 -0
- package/dist/navigation/navigation_identity.js.map +1 -0
- package/dist/router/wood_router.cjs +36 -11
- package/dist/router/wood_router.cjs.map +1 -1
- package/dist/router/wood_router.js +36 -11
- package/dist/router/wood_router.js.map +1 -1
- package/dist/runtime/runtime.cjs +11 -4
- package/dist/runtime/runtime.cjs.map +1 -1
- package/dist/runtime/runtime.d.cts +2 -0
- package/dist/runtime/runtime.d.ts +2 -0
- package/dist/runtime/runtime.js +12 -5
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/testing/create_controller_harness.cjs +4 -4
- package/dist/testing/create_controller_harness.cjs.map +1 -1
- package/dist/testing/create_controller_harness.d.cts +1 -1
- package/dist/testing/create_controller_harness.d.ts +1 -1
- package/dist/testing/create_controller_harness.js +4 -4
- package/dist/testing/create_controller_harness.js.map +1 -1
- package/dist/tracing/index.cjs +6 -2
- package/dist/tracing/index.cjs.map +1 -1
- package/dist/tracing/index.d.cts +2 -2
- package/dist/tracing/index.d.ts +2 -2
- package/dist/tracing/index.js +5 -1
- package/dist/tracing/index.js.map +1 -1
- package/dist/tracing/trace_hub.cjs +38 -11
- package/dist/tracing/trace_hub.cjs.map +1 -1
- package/dist/tracing/trace_hub.d.cts +3 -1
- package/dist/tracing/trace_hub.d.ts +3 -1
- package/dist/tracing/trace_hub.js +35 -10
- package/dist/tracing/trace_hub.js.map +1 -1
- package/dist/tracing/trace_provider.cjs +63 -6
- package/dist/tracing/trace_provider.cjs.map +1 -1
- package/dist/tracing/trace_provider.d.cts +10 -2
- package/dist/tracing/trace_provider.d.ts +10 -2
- package/dist/tracing/trace_provider.js +64 -6
- package/dist/tracing/trace_provider.js.map +1 -1
- package/package.json +17 -17
- package/src/components/NavigationShell.svelte +18 -2
|
@@ -38,29 +38,68 @@ module.exports = __toCommonJS(trace_provider_exports);
|
|
|
38
38
|
var import_ioc = require("@noego/ioc");
|
|
39
39
|
var import_trace_hub = require("./trace_hub.js");
|
|
40
40
|
class FrameworkTracer {
|
|
41
|
+
extend(context) {
|
|
42
|
+
return new ContextualTracer(this, context);
|
|
43
|
+
}
|
|
41
44
|
capture(options = {}) {
|
|
42
45
|
return (0, import_trace_hub.createTraceCapture)(options);
|
|
43
46
|
}
|
|
44
47
|
}
|
|
48
|
+
class ContextualTracer extends FrameworkTracer {
|
|
49
|
+
constructor(parent, context) {
|
|
50
|
+
super();
|
|
51
|
+
this.parent = parent;
|
|
52
|
+
this.context = context;
|
|
53
|
+
}
|
|
54
|
+
get mode() {
|
|
55
|
+
return this.parent.mode;
|
|
56
|
+
}
|
|
57
|
+
get process() {
|
|
58
|
+
return this.parent.process;
|
|
59
|
+
}
|
|
60
|
+
get events$() {
|
|
61
|
+
return this.parent.events$;
|
|
62
|
+
}
|
|
63
|
+
debug(event) {
|
|
64
|
+
this.parent.debug(this.mergeEvent(event));
|
|
65
|
+
}
|
|
66
|
+
info(event) {
|
|
67
|
+
this.parent.info(this.mergeEvent(event));
|
|
68
|
+
}
|
|
69
|
+
warn(event) {
|
|
70
|
+
this.parent.warn(this.mergeEvent(event));
|
|
71
|
+
}
|
|
72
|
+
error(event) {
|
|
73
|
+
this.parent.error(this.mergeEvent(event));
|
|
74
|
+
}
|
|
75
|
+
mergeEvent(event) {
|
|
76
|
+
return {
|
|
77
|
+
...this.context,
|
|
78
|
+
...event
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
45
82
|
let TraceProviderConfiguration = class {
|
|
46
83
|
constructor() {
|
|
47
84
|
this.mode = "live";
|
|
48
85
|
this.runtime = "main";
|
|
49
86
|
this.minLevel = "debug";
|
|
87
|
+
this.enabled = null;
|
|
50
88
|
}
|
|
51
89
|
configureMode(mode) {
|
|
52
90
|
this.mode = mode;
|
|
53
91
|
}
|
|
54
92
|
configureRuntime(runtime) {
|
|
55
93
|
this.runtime = runtime;
|
|
94
|
+
this.applyRuntimeConfiguration();
|
|
56
95
|
}
|
|
57
96
|
configureMinLevel(level) {
|
|
58
97
|
this.minLevel = level;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
98
|
+
this.applyRuntimeConfiguration();
|
|
99
|
+
}
|
|
100
|
+
configureEnabled(enabled) {
|
|
101
|
+
this.enabled = enabled;
|
|
102
|
+
this.applyRuntimeConfiguration();
|
|
64
103
|
}
|
|
65
104
|
getMode() {
|
|
66
105
|
return this.mode;
|
|
@@ -71,6 +110,17 @@ let TraceProviderConfiguration = class {
|
|
|
71
110
|
getMinLevel() {
|
|
72
111
|
return this.minLevel;
|
|
73
112
|
}
|
|
113
|
+
getEnabled() {
|
|
114
|
+
return this.enabled ?? (this.runtime === "renderer" ? false : true);
|
|
115
|
+
}
|
|
116
|
+
applyRuntimeConfiguration() {
|
|
117
|
+
if (this.runtime === "renderer") {
|
|
118
|
+
(0, import_trace_hub.setRendererTraceEnabled)(this.getEnabled());
|
|
119
|
+
(0, import_trace_hub.setRendererTraceMinLevel)(this.minLevel);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
(0, import_trace_hub.setMainTraceMinLevel)(this.minLevel);
|
|
123
|
+
}
|
|
74
124
|
};
|
|
75
125
|
TraceProviderConfiguration = __decorateClass([
|
|
76
126
|
(0, import_ioc.Component)({ scope: import_ioc.LoadAs.Singleton })
|
|
@@ -154,11 +204,18 @@ TestTracer = __decorateClass([
|
|
|
154
204
|
(0, import_ioc.Component)({ scope: import_ioc.LoadAs.Singleton }),
|
|
155
205
|
__decorateParam(0, (0, import_ioc.Inject)(TraceProviderConfiguration))
|
|
156
206
|
], TestTracer);
|
|
157
|
-
let TraceProvider = class {
|
|
207
|
+
let TraceProvider = class extends FrameworkTracer {
|
|
158
208
|
constructor(configuration, container) {
|
|
209
|
+
super();
|
|
159
210
|
this.configuration = configuration;
|
|
160
211
|
this.container = container;
|
|
161
212
|
}
|
|
213
|
+
get mode() {
|
|
214
|
+
return this.resolveImplementation().mode;
|
|
215
|
+
}
|
|
216
|
+
get process() {
|
|
217
|
+
return this.resolveImplementation().process;
|
|
218
|
+
}
|
|
162
219
|
get events$() {
|
|
163
220
|
return this.resolveImplementation().events$;
|
|
164
221
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tracing/trace_provider.ts"],"sourcesContent":["import { Component, Inject, LoadAs, Provider, SCOPED_CONTAINER, type IContainer } from '@noego/ioc';\nimport type { Observable } from 'rxjs';\nimport {\n createTraceCapture,\n emitRendererTrace,\n getTraceEvents$,\n publishMainTrace,\n publishTestTrace,\n setMainTraceMinLevel,\n setRendererTraceMinLevel,\n type TraceCapture,\n type TraceCaptureOptions,\n type TraceEvent,\n type TraceInput,\n type TraceLevel,\n type TraceProcess,\n} from './trace_hub.js';\n\nexport type TraceProviderMode = 'live' | 'test';\nexport type TraceRuntime = 'main' | 'renderer' | 'test';\n\nexport abstract class FrameworkTracer {\n abstract readonly mode: TraceProviderMode;\n abstract readonly process: TraceProcess;\n abstract readonly events$: Observable<TraceEvent>;\n abstract debug(event: TraceInput): void;\n abstract info(event: TraceInput): void;\n abstract warn(event: TraceInput): void;\n abstract error(event: TraceInput): void;\n\n capture(options: TraceCaptureOptions = {}): TraceCapture {\n return createTraceCapture(options);\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class TraceProviderConfiguration {\n private mode: TraceProviderMode = 'live';\n private runtime: TraceRuntime = 'main';\n private minLevel: TraceLevel = 'debug';\n\n configureMode(mode: TraceProviderMode): void {\n this.mode = mode;\n }\n\n configureRuntime(runtime: TraceRuntime): void {\n this.runtime = runtime;\n }\n\n configureMinLevel(level: TraceLevel): void {\n this.minLevel = level;\n if (this.runtime === 'renderer') {\n setRendererTraceMinLevel(level);\n } else {\n setMainTraceMinLevel(level);\n }\n }\n\n getMode(): TraceProviderMode {\n return this.mode;\n }\n\n getRuntime(): TraceRuntime {\n return this.runtime;\n }\n\n getMinLevel(): TraceLevel {\n return this.minLevel;\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class MainTracer extends FrameworkTracer {\n readonly mode = 'live' as const;\n readonly process = 'main' as const;\n readonly events$ = getTraceEvents$();\n\n debug(event: TraceInput): void {\n publishMainTrace('debug', event);\n }\n\n info(event: TraceInput): void {\n publishMainTrace('info', event);\n }\n\n warn(event: TraceInput): void {\n publishMainTrace('warn', event);\n }\n\n error(event: TraceInput): void {\n publishMainTrace('error', event);\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class RendererTracer extends FrameworkTracer {\n readonly mode = 'live' as const;\n readonly process = 'renderer' as const;\n readonly events$ = getTraceEvents$();\n\n debug(event: TraceInput): void {\n emitRendererTrace('debug', event);\n }\n\n info(event: TraceInput): void {\n emitRendererTrace('info', event);\n }\n\n warn(event: TraceInput): void {\n emitRendererTrace('warn', event);\n }\n\n error(event: TraceInput): void {\n emitRendererTrace('error', event);\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class TestTracer extends FrameworkTracer {\n readonly mode = 'test' as const;\n readonly events$ = getTraceEvents$();\n\n constructor(\n @Inject(TraceProviderConfiguration) private readonly configuration: TraceProviderConfiguration,\n ) {\n super();\n }\n\n get process(): TraceProcess {\n const runtime = this.configuration.getRuntime();\n if (runtime === 'renderer') return 'renderer';\n if (runtime === 'main') return 'main';\n return 'test';\n }\n\n debug(event: TraceInput): void {\n this.publish('debug', event);\n }\n\n info(event: TraceInput): void {\n this.publish('info', event);\n }\n\n warn(event: TraceInput): void {\n this.publish('warn', event);\n }\n\n error(event: TraceInput): void {\n this.publish('error', event);\n }\n\n private publish(level: TraceLevel, event: TraceInput): void {\n publishTestTrace(this.process, level, event);\n }\n}\n\n@Provider()\nexport class TraceProvider {\n constructor(\n @Inject(TraceProviderConfiguration) private readonly configuration: TraceProviderConfiguration,\n @Inject(SCOPED_CONTAINER) private readonly container: IContainer,\n ) {}\n\n get events$(): Observable<TraceEvent> {\n return this.resolveImplementation().events$;\n }\n\n debug(event: TraceInput): void {\n this.resolveImplementation().debug(event);\n }\n\n info(event: TraceInput): void {\n this.resolveImplementation().info(event);\n }\n\n warn(event: TraceInput): void {\n this.resolveImplementation().warn(event);\n }\n\n error(event: TraceInput): void {\n this.resolveImplementation().error(event);\n }\n\n capture(options: TraceCaptureOptions = {}): TraceCapture {\n return this.resolveImplementation().capture(options);\n }\n\n private resolveImplementation(): FrameworkTracer {\n const mode = this.configuration.getMode();\n if (mode === 'test') {\n return this.resolveSync(TestTracer);\n }\n\n if (this.configuration.getRuntime() === 'renderer') {\n return this.resolveSync(RendererTracer);\n }\n\n return this.resolveSync(MainTracer);\n }\n\n private resolveSync<T>(token: new (...args: any[]) => T): T {\n const resolved = this.container.instance<T, true>(token);\n if (resolved instanceof Promise) {\n throw new Error(`${token.name} must resolve synchronously`);\n }\n return resolved;\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/tracing/trace_provider.ts"],"sourcesContent":["import { Component, Inject, LoadAs, Provider, SCOPED_CONTAINER, type IContainer } from '@noego/ioc';\nimport type { Observable } from 'rxjs';\nimport {\n createTraceCapture,\n emitRendererTrace,\n getTraceEvents$,\n publishMainTrace,\n publishTestTrace,\n setMainTraceMinLevel,\n setRendererTraceEnabled,\n setRendererTraceMinLevel,\n type TraceCapture,\n type TraceCaptureOptions,\n type TraceEvent,\n type TraceInput,\n type TraceLevel,\n type TraceProcess,\n} from './trace_hub.js';\n\nexport type TraceProviderMode = 'live' | 'test';\nexport type TraceRuntime = 'main' | 'renderer' | 'test';\nexport type TraceContext = Partial<TraceInput>;\n\nexport abstract class FrameworkTracer {\n abstract readonly mode: TraceProviderMode;\n abstract readonly process: TraceProcess;\n abstract readonly events$: Observable<TraceEvent>;\n abstract debug(event: TraceInput): void;\n abstract info(event: TraceInput): void;\n abstract warn(event: TraceInput): void;\n abstract error(event: TraceInput): void;\n\n extend(context: TraceContext): FrameworkTracer {\n return new ContextualTracer(this, context);\n }\n\n capture(options: TraceCaptureOptions = {}): TraceCapture {\n return createTraceCapture(options);\n }\n}\n\nclass ContextualTracer extends FrameworkTracer {\n constructor(\n private readonly parent: FrameworkTracer,\n private readonly context: TraceContext,\n ) {\n super();\n }\n\n get mode(): TraceProviderMode {\n return this.parent.mode;\n }\n\n get process(): TraceProcess {\n return this.parent.process;\n }\n\n get events$(): Observable<TraceEvent> {\n return this.parent.events$;\n }\n\n debug(event: TraceInput): void {\n this.parent.debug(this.mergeEvent(event));\n }\n\n info(event: TraceInput): void {\n this.parent.info(this.mergeEvent(event));\n }\n\n warn(event: TraceInput): void {\n this.parent.warn(this.mergeEvent(event));\n }\n\n error(event: TraceInput): void {\n this.parent.error(this.mergeEvent(event));\n }\n\n private mergeEvent(event: TraceInput): TraceInput {\n return {\n ...this.context,\n ...event,\n };\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class TraceProviderConfiguration {\n private mode: TraceProviderMode = 'live';\n private runtime: TraceRuntime = 'main';\n private minLevel: TraceLevel = 'debug';\n private enabled: boolean | null = null;\n\n configureMode(mode: TraceProviderMode): void {\n this.mode = mode;\n }\n\n configureRuntime(runtime: TraceRuntime): void {\n this.runtime = runtime;\n this.applyRuntimeConfiguration();\n }\n\n configureMinLevel(level: TraceLevel): void {\n this.minLevel = level;\n this.applyRuntimeConfiguration();\n }\n\n configureEnabled(enabled: boolean): void {\n this.enabled = enabled;\n this.applyRuntimeConfiguration();\n }\n\n getMode(): TraceProviderMode {\n return this.mode;\n }\n\n getRuntime(): TraceRuntime {\n return this.runtime;\n }\n\n getMinLevel(): TraceLevel {\n return this.minLevel;\n }\n\n getEnabled(): boolean {\n return this.enabled ?? (this.runtime === 'renderer' ? false : true);\n }\n\n private applyRuntimeConfiguration(): void {\n if (this.runtime === 'renderer') {\n setRendererTraceEnabled(this.getEnabled());\n setRendererTraceMinLevel(this.minLevel);\n return;\n }\n\n setMainTraceMinLevel(this.minLevel);\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class MainTracer extends FrameworkTracer {\n readonly mode = 'live' as const;\n readonly process = 'main' as const;\n readonly events$ = getTraceEvents$();\n\n debug(event: TraceInput): void {\n publishMainTrace('debug', event);\n }\n\n info(event: TraceInput): void {\n publishMainTrace('info', event);\n }\n\n warn(event: TraceInput): void {\n publishMainTrace('warn', event);\n }\n\n error(event: TraceInput): void {\n publishMainTrace('error', event);\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class RendererTracer extends FrameworkTracer {\n readonly mode = 'live' as const;\n readonly process = 'renderer' as const;\n readonly events$ = getTraceEvents$();\n\n debug(event: TraceInput): void {\n emitRendererTrace('debug', event);\n }\n\n info(event: TraceInput): void {\n emitRendererTrace('info', event);\n }\n\n warn(event: TraceInput): void {\n emitRendererTrace('warn', event);\n }\n\n error(event: TraceInput): void {\n emitRendererTrace('error', event);\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class TestTracer extends FrameworkTracer {\n readonly mode = 'test' as const;\n readonly events$ = getTraceEvents$();\n\n constructor(\n @Inject(TraceProviderConfiguration) private readonly configuration: TraceProviderConfiguration,\n ) {\n super();\n }\n\n get process(): TraceProcess {\n const runtime = this.configuration.getRuntime();\n if (runtime === 'renderer') return 'renderer';\n if (runtime === 'main') return 'main';\n return 'test';\n }\n\n debug(event: TraceInput): void {\n this.publish('debug', event);\n }\n\n info(event: TraceInput): void {\n this.publish('info', event);\n }\n\n warn(event: TraceInput): void {\n this.publish('warn', event);\n }\n\n error(event: TraceInput): void {\n this.publish('error', event);\n }\n\n private publish(level: TraceLevel, event: TraceInput): void {\n publishTestTrace(this.process, level, event);\n }\n}\n\n@Provider()\nexport class TraceProvider extends FrameworkTracer {\n constructor(\n @Inject(TraceProviderConfiguration) private readonly configuration: TraceProviderConfiguration,\n @Inject(SCOPED_CONTAINER) private readonly container: IContainer,\n ) {\n super();\n }\n\n get mode(): TraceProviderMode {\n return this.resolveImplementation().mode;\n }\n\n get process(): TraceProcess {\n return this.resolveImplementation().process;\n }\n\n get events$(): Observable<TraceEvent> {\n return this.resolveImplementation().events$;\n }\n\n debug(event: TraceInput): void {\n this.resolveImplementation().debug(event);\n }\n\n info(event: TraceInput): void {\n this.resolveImplementation().info(event);\n }\n\n warn(event: TraceInput): void {\n this.resolveImplementation().warn(event);\n }\n\n error(event: TraceInput): void {\n this.resolveImplementation().error(event);\n }\n\n capture(options: TraceCaptureOptions = {}): TraceCapture {\n return this.resolveImplementation().capture(options);\n }\n\n private resolveImplementation(): FrameworkTracer {\n const mode = this.configuration.getMode();\n if (mode === 'test') {\n return this.resolveSync(TestTracer);\n }\n\n if (this.configuration.getRuntime() === 'renderer') {\n return this.resolveSync(RendererTracer);\n }\n\n return this.resolveSync(MainTracer);\n }\n\n private resolveSync<T>(token: new (...args: any[]) => T): T {\n const resolved = this.container.instance<T, true>(token);\n if (resolved instanceof Promise) {\n throw new Error(`${token.name} must resolve synchronously`);\n }\n return resolved;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -4,6 +4,7 @@ import { Observable } from 'rxjs';
|
|
|
4
4
|
|
|
5
5
|
type TraceProviderMode = 'live' | 'test';
|
|
6
6
|
type TraceRuntime = 'main' | 'renderer' | 'test';
|
|
7
|
+
type TraceContext = Partial<TraceInput>;
|
|
7
8
|
declare abstract class FrameworkTracer {
|
|
8
9
|
abstract readonly mode: TraceProviderMode;
|
|
9
10
|
abstract readonly process: TraceProcess;
|
|
@@ -12,18 +13,23 @@ declare abstract class FrameworkTracer {
|
|
|
12
13
|
abstract info(event: TraceInput): void;
|
|
13
14
|
abstract warn(event: TraceInput): void;
|
|
14
15
|
abstract error(event: TraceInput): void;
|
|
16
|
+
extend(context: TraceContext): FrameworkTracer;
|
|
15
17
|
capture(options?: TraceCaptureOptions): TraceCapture;
|
|
16
18
|
}
|
|
17
19
|
declare class TraceProviderConfiguration {
|
|
18
20
|
private mode;
|
|
19
21
|
private runtime;
|
|
20
22
|
private minLevel;
|
|
23
|
+
private enabled;
|
|
21
24
|
configureMode(mode: TraceProviderMode): void;
|
|
22
25
|
configureRuntime(runtime: TraceRuntime): void;
|
|
23
26
|
configureMinLevel(level: TraceLevel): void;
|
|
27
|
+
configureEnabled(enabled: boolean): void;
|
|
24
28
|
getMode(): TraceProviderMode;
|
|
25
29
|
getRuntime(): TraceRuntime;
|
|
26
30
|
getMinLevel(): TraceLevel;
|
|
31
|
+
getEnabled(): boolean;
|
|
32
|
+
private applyRuntimeConfiguration;
|
|
27
33
|
}
|
|
28
34
|
declare class MainTracer extends FrameworkTracer {
|
|
29
35
|
readonly mode: "live";
|
|
@@ -55,10 +61,12 @@ declare class TestTracer extends FrameworkTracer {
|
|
|
55
61
|
error(event: TraceInput): void;
|
|
56
62
|
private publish;
|
|
57
63
|
}
|
|
58
|
-
declare class TraceProvider {
|
|
64
|
+
declare class TraceProvider extends FrameworkTracer {
|
|
59
65
|
private readonly configuration;
|
|
60
66
|
private readonly container;
|
|
61
67
|
constructor(configuration: TraceProviderConfiguration, container: IContainer);
|
|
68
|
+
get mode(): TraceProviderMode;
|
|
69
|
+
get process(): TraceProcess;
|
|
62
70
|
get events$(): Observable<TraceEvent>;
|
|
63
71
|
debug(event: TraceInput): void;
|
|
64
72
|
info(event: TraceInput): void;
|
|
@@ -69,4 +77,4 @@ declare class TraceProvider {
|
|
|
69
77
|
private resolveSync;
|
|
70
78
|
}
|
|
71
79
|
|
|
72
|
-
export { FrameworkTracer, MainTracer, RendererTracer, TestTracer, TraceProvider, TraceProviderConfiguration, type TraceProviderMode, type TraceRuntime };
|
|
80
|
+
export { FrameworkTracer, MainTracer, RendererTracer, TestTracer, type TraceContext, TraceProvider, TraceProviderConfiguration, type TraceProviderMode, type TraceRuntime };
|
|
@@ -4,6 +4,7 @@ import { Observable } from 'rxjs';
|
|
|
4
4
|
|
|
5
5
|
type TraceProviderMode = 'live' | 'test';
|
|
6
6
|
type TraceRuntime = 'main' | 'renderer' | 'test';
|
|
7
|
+
type TraceContext = Partial<TraceInput>;
|
|
7
8
|
declare abstract class FrameworkTracer {
|
|
8
9
|
abstract readonly mode: TraceProviderMode;
|
|
9
10
|
abstract readonly process: TraceProcess;
|
|
@@ -12,18 +13,23 @@ declare abstract class FrameworkTracer {
|
|
|
12
13
|
abstract info(event: TraceInput): void;
|
|
13
14
|
abstract warn(event: TraceInput): void;
|
|
14
15
|
abstract error(event: TraceInput): void;
|
|
16
|
+
extend(context: TraceContext): FrameworkTracer;
|
|
15
17
|
capture(options?: TraceCaptureOptions): TraceCapture;
|
|
16
18
|
}
|
|
17
19
|
declare class TraceProviderConfiguration {
|
|
18
20
|
private mode;
|
|
19
21
|
private runtime;
|
|
20
22
|
private minLevel;
|
|
23
|
+
private enabled;
|
|
21
24
|
configureMode(mode: TraceProviderMode): void;
|
|
22
25
|
configureRuntime(runtime: TraceRuntime): void;
|
|
23
26
|
configureMinLevel(level: TraceLevel): void;
|
|
27
|
+
configureEnabled(enabled: boolean): void;
|
|
24
28
|
getMode(): TraceProviderMode;
|
|
25
29
|
getRuntime(): TraceRuntime;
|
|
26
30
|
getMinLevel(): TraceLevel;
|
|
31
|
+
getEnabled(): boolean;
|
|
32
|
+
private applyRuntimeConfiguration;
|
|
27
33
|
}
|
|
28
34
|
declare class MainTracer extends FrameworkTracer {
|
|
29
35
|
readonly mode: "live";
|
|
@@ -55,10 +61,12 @@ declare class TestTracer extends FrameworkTracer {
|
|
|
55
61
|
error(event: TraceInput): void;
|
|
56
62
|
private publish;
|
|
57
63
|
}
|
|
58
|
-
declare class TraceProvider {
|
|
64
|
+
declare class TraceProvider extends FrameworkTracer {
|
|
59
65
|
private readonly configuration;
|
|
60
66
|
private readonly container;
|
|
61
67
|
constructor(configuration: TraceProviderConfiguration, container: IContainer);
|
|
68
|
+
get mode(): TraceProviderMode;
|
|
69
|
+
get process(): TraceProcess;
|
|
62
70
|
get events$(): Observable<TraceEvent>;
|
|
63
71
|
debug(event: TraceInput): void;
|
|
64
72
|
info(event: TraceInput): void;
|
|
@@ -69,4 +77,4 @@ declare class TraceProvider {
|
|
|
69
77
|
private resolveSync;
|
|
70
78
|
}
|
|
71
79
|
|
|
72
|
-
export { FrameworkTracer, MainTracer, RendererTracer, TestTracer, TraceProvider, TraceProviderConfiguration, type TraceProviderMode, type TraceRuntime };
|
|
80
|
+
export { FrameworkTracer, MainTracer, RendererTracer, TestTracer, type TraceContext, TraceProvider, TraceProviderConfiguration, type TraceProviderMode, type TraceRuntime };
|
|
@@ -17,32 +17,72 @@ import {
|
|
|
17
17
|
publishMainTrace,
|
|
18
18
|
publishTestTrace,
|
|
19
19
|
setMainTraceMinLevel,
|
|
20
|
+
setRendererTraceEnabled,
|
|
20
21
|
setRendererTraceMinLevel
|
|
21
22
|
} from "./trace_hub.js";
|
|
22
23
|
class FrameworkTracer {
|
|
24
|
+
extend(context) {
|
|
25
|
+
return new ContextualTracer(this, context);
|
|
26
|
+
}
|
|
23
27
|
capture(options = {}) {
|
|
24
28
|
return createTraceCapture(options);
|
|
25
29
|
}
|
|
26
30
|
}
|
|
31
|
+
class ContextualTracer extends FrameworkTracer {
|
|
32
|
+
constructor(parent, context) {
|
|
33
|
+
super();
|
|
34
|
+
this.parent = parent;
|
|
35
|
+
this.context = context;
|
|
36
|
+
}
|
|
37
|
+
get mode() {
|
|
38
|
+
return this.parent.mode;
|
|
39
|
+
}
|
|
40
|
+
get process() {
|
|
41
|
+
return this.parent.process;
|
|
42
|
+
}
|
|
43
|
+
get events$() {
|
|
44
|
+
return this.parent.events$;
|
|
45
|
+
}
|
|
46
|
+
debug(event) {
|
|
47
|
+
this.parent.debug(this.mergeEvent(event));
|
|
48
|
+
}
|
|
49
|
+
info(event) {
|
|
50
|
+
this.parent.info(this.mergeEvent(event));
|
|
51
|
+
}
|
|
52
|
+
warn(event) {
|
|
53
|
+
this.parent.warn(this.mergeEvent(event));
|
|
54
|
+
}
|
|
55
|
+
error(event) {
|
|
56
|
+
this.parent.error(this.mergeEvent(event));
|
|
57
|
+
}
|
|
58
|
+
mergeEvent(event) {
|
|
59
|
+
return {
|
|
60
|
+
...this.context,
|
|
61
|
+
...event
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
27
65
|
let TraceProviderConfiguration = class {
|
|
28
66
|
constructor() {
|
|
29
67
|
this.mode = "live";
|
|
30
68
|
this.runtime = "main";
|
|
31
69
|
this.minLevel = "debug";
|
|
70
|
+
this.enabled = null;
|
|
32
71
|
}
|
|
33
72
|
configureMode(mode) {
|
|
34
73
|
this.mode = mode;
|
|
35
74
|
}
|
|
36
75
|
configureRuntime(runtime) {
|
|
37
76
|
this.runtime = runtime;
|
|
77
|
+
this.applyRuntimeConfiguration();
|
|
38
78
|
}
|
|
39
79
|
configureMinLevel(level) {
|
|
40
80
|
this.minLevel = level;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
81
|
+
this.applyRuntimeConfiguration();
|
|
82
|
+
}
|
|
83
|
+
configureEnabled(enabled) {
|
|
84
|
+
this.enabled = enabled;
|
|
85
|
+
this.applyRuntimeConfiguration();
|
|
46
86
|
}
|
|
47
87
|
getMode() {
|
|
48
88
|
return this.mode;
|
|
@@ -53,6 +93,17 @@ let TraceProviderConfiguration = class {
|
|
|
53
93
|
getMinLevel() {
|
|
54
94
|
return this.minLevel;
|
|
55
95
|
}
|
|
96
|
+
getEnabled() {
|
|
97
|
+
return this.enabled ?? (this.runtime === "renderer" ? false : true);
|
|
98
|
+
}
|
|
99
|
+
applyRuntimeConfiguration() {
|
|
100
|
+
if (this.runtime === "renderer") {
|
|
101
|
+
setRendererTraceEnabled(this.getEnabled());
|
|
102
|
+
setRendererTraceMinLevel(this.minLevel);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
setMainTraceMinLevel(this.minLevel);
|
|
106
|
+
}
|
|
56
107
|
};
|
|
57
108
|
TraceProviderConfiguration = __decorateClass([
|
|
58
109
|
Component({ scope: LoadAs.Singleton })
|
|
@@ -136,11 +187,18 @@ TestTracer = __decorateClass([
|
|
|
136
187
|
Component({ scope: LoadAs.Singleton }),
|
|
137
188
|
__decorateParam(0, Inject(TraceProviderConfiguration))
|
|
138
189
|
], TestTracer);
|
|
139
|
-
let TraceProvider = class {
|
|
190
|
+
let TraceProvider = class extends FrameworkTracer {
|
|
140
191
|
constructor(configuration, container) {
|
|
192
|
+
super();
|
|
141
193
|
this.configuration = configuration;
|
|
142
194
|
this.container = container;
|
|
143
195
|
}
|
|
196
|
+
get mode() {
|
|
197
|
+
return this.resolveImplementation().mode;
|
|
198
|
+
}
|
|
199
|
+
get process() {
|
|
200
|
+
return this.resolveImplementation().process;
|
|
201
|
+
}
|
|
144
202
|
get events$() {
|
|
145
203
|
return this.resolveImplementation().events$;
|
|
146
204
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tracing/trace_provider.ts"],"sourcesContent":["import { Component, Inject, LoadAs, Provider, SCOPED_CONTAINER, type IContainer } from '@noego/ioc';\nimport type { Observable } from 'rxjs';\nimport {\n createTraceCapture,\n emitRendererTrace,\n getTraceEvents$,\n publishMainTrace,\n publishTestTrace,\n setMainTraceMinLevel,\n setRendererTraceMinLevel,\n type TraceCapture,\n type TraceCaptureOptions,\n type TraceEvent,\n type TraceInput,\n type TraceLevel,\n type TraceProcess,\n} from './trace_hub.js';\n\nexport type TraceProviderMode = 'live' | 'test';\nexport type TraceRuntime = 'main' | 'renderer' | 'test';\n\nexport abstract class FrameworkTracer {\n abstract readonly mode: TraceProviderMode;\n abstract readonly process: TraceProcess;\n abstract readonly events$: Observable<TraceEvent>;\n abstract debug(event: TraceInput): void;\n abstract info(event: TraceInput): void;\n abstract warn(event: TraceInput): void;\n abstract error(event: TraceInput): void;\n\n capture(options: TraceCaptureOptions = {}): TraceCapture {\n return createTraceCapture(options);\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class TraceProviderConfiguration {\n private mode: TraceProviderMode = 'live';\n private runtime: TraceRuntime = 'main';\n private minLevel: TraceLevel = 'debug';\n\n configureMode(mode: TraceProviderMode): void {\n this.mode = mode;\n }\n\n configureRuntime(runtime: TraceRuntime): void {\n this.runtime = runtime;\n }\n\n configureMinLevel(level: TraceLevel): void {\n this.minLevel = level;\n if (this.runtime === 'renderer') {\n setRendererTraceMinLevel(level);\n } else {\n setMainTraceMinLevel(level);\n }\n }\n\n getMode(): TraceProviderMode {\n return this.mode;\n }\n\n getRuntime(): TraceRuntime {\n return this.runtime;\n }\n\n getMinLevel(): TraceLevel {\n return this.minLevel;\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class MainTracer extends FrameworkTracer {\n readonly mode = 'live' as const;\n readonly process = 'main' as const;\n readonly events$ = getTraceEvents$();\n\n debug(event: TraceInput): void {\n publishMainTrace('debug', event);\n }\n\n info(event: TraceInput): void {\n publishMainTrace('info', event);\n }\n\n warn(event: TraceInput): void {\n publishMainTrace('warn', event);\n }\n\n error(event: TraceInput): void {\n publishMainTrace('error', event);\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class RendererTracer extends FrameworkTracer {\n readonly mode = 'live' as const;\n readonly process = 'renderer' as const;\n readonly events$ = getTraceEvents$();\n\n debug(event: TraceInput): void {\n emitRendererTrace('debug', event);\n }\n\n info(event: TraceInput): void {\n emitRendererTrace('info', event);\n }\n\n warn(event: TraceInput): void {\n emitRendererTrace('warn', event);\n }\n\n error(event: TraceInput): void {\n emitRendererTrace('error', event);\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class TestTracer extends FrameworkTracer {\n readonly mode = 'test' as const;\n readonly events$ = getTraceEvents$();\n\n constructor(\n @Inject(TraceProviderConfiguration) private readonly configuration: TraceProviderConfiguration,\n ) {\n super();\n }\n\n get process(): TraceProcess {\n const runtime = this.configuration.getRuntime();\n if (runtime === 'renderer') return 'renderer';\n if (runtime === 'main') return 'main';\n return 'test';\n }\n\n debug(event: TraceInput): void {\n this.publish('debug', event);\n }\n\n info(event: TraceInput): void {\n this.publish('info', event);\n }\n\n warn(event: TraceInput): void {\n this.publish('warn', event);\n }\n\n error(event: TraceInput): void {\n this.publish('error', event);\n }\n\n private publish(level: TraceLevel, event: TraceInput): void {\n publishTestTrace(this.process, level, event);\n }\n}\n\n@Provider()\nexport class TraceProvider {\n constructor(\n @Inject(TraceProviderConfiguration) private readonly configuration: TraceProviderConfiguration,\n @Inject(SCOPED_CONTAINER) private readonly container: IContainer,\n ) {}\n\n get events$(): Observable<TraceEvent> {\n return this.resolveImplementation().events$;\n }\n\n debug(event: TraceInput): void {\n this.resolveImplementation().debug(event);\n }\n\n info(event: TraceInput): void {\n this.resolveImplementation().info(event);\n }\n\n warn(event: TraceInput): void {\n this.resolveImplementation().warn(event);\n }\n\n error(event: TraceInput): void {\n this.resolveImplementation().error(event);\n }\n\n capture(options: TraceCaptureOptions = {}): TraceCapture {\n return this.resolveImplementation().capture(options);\n }\n\n private resolveImplementation(): FrameworkTracer {\n const mode = this.configuration.getMode();\n if (mode === 'test') {\n return this.resolveSync(TestTracer);\n }\n\n if (this.configuration.getRuntime() === 'renderer') {\n return this.resolveSync(RendererTracer);\n }\n\n return this.resolveSync(MainTracer);\n }\n\n private resolveSync<T>(token: new (...args: any[]) => T): T {\n const resolved = this.container.instance<T, true>(token);\n if (resolved instanceof Promise) {\n throw new Error(`${token.name} must resolve synchronously`);\n }\n return resolved;\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/tracing/trace_provider.ts"],"sourcesContent":["import { Component, Inject, LoadAs, Provider, SCOPED_CONTAINER, type IContainer } from '@noego/ioc';\nimport type { Observable } from 'rxjs';\nimport {\n createTraceCapture,\n emitRendererTrace,\n getTraceEvents$,\n publishMainTrace,\n publishTestTrace,\n setMainTraceMinLevel,\n setRendererTraceEnabled,\n setRendererTraceMinLevel,\n type TraceCapture,\n type TraceCaptureOptions,\n type TraceEvent,\n type TraceInput,\n type TraceLevel,\n type TraceProcess,\n} from './trace_hub.js';\n\nexport type TraceProviderMode = 'live' | 'test';\nexport type TraceRuntime = 'main' | 'renderer' | 'test';\nexport type TraceContext = Partial<TraceInput>;\n\nexport abstract class FrameworkTracer {\n abstract readonly mode: TraceProviderMode;\n abstract readonly process: TraceProcess;\n abstract readonly events$: Observable<TraceEvent>;\n abstract debug(event: TraceInput): void;\n abstract info(event: TraceInput): void;\n abstract warn(event: TraceInput): void;\n abstract error(event: TraceInput): void;\n\n extend(context: TraceContext): FrameworkTracer {\n return new ContextualTracer(this, context);\n }\n\n capture(options: TraceCaptureOptions = {}): TraceCapture {\n return createTraceCapture(options);\n }\n}\n\nclass ContextualTracer extends FrameworkTracer {\n constructor(\n private readonly parent: FrameworkTracer,\n private readonly context: TraceContext,\n ) {\n super();\n }\n\n get mode(): TraceProviderMode {\n return this.parent.mode;\n }\n\n get process(): TraceProcess {\n return this.parent.process;\n }\n\n get events$(): Observable<TraceEvent> {\n return this.parent.events$;\n }\n\n debug(event: TraceInput): void {\n this.parent.debug(this.mergeEvent(event));\n }\n\n info(event: TraceInput): void {\n this.parent.info(this.mergeEvent(event));\n }\n\n warn(event: TraceInput): void {\n this.parent.warn(this.mergeEvent(event));\n }\n\n error(event: TraceInput): void {\n this.parent.error(this.mergeEvent(event));\n }\n\n private mergeEvent(event: TraceInput): TraceInput {\n return {\n ...this.context,\n ...event,\n };\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class TraceProviderConfiguration {\n private mode: TraceProviderMode = 'live';\n private runtime: TraceRuntime = 'main';\n private minLevel: TraceLevel = 'debug';\n private enabled: boolean | null = null;\n\n configureMode(mode: TraceProviderMode): void {\n this.mode = mode;\n }\n\n configureRuntime(runtime: TraceRuntime): void {\n this.runtime = runtime;\n this.applyRuntimeConfiguration();\n }\n\n configureMinLevel(level: TraceLevel): void {\n this.minLevel = level;\n this.applyRuntimeConfiguration();\n }\n\n configureEnabled(enabled: boolean): void {\n this.enabled = enabled;\n this.applyRuntimeConfiguration();\n }\n\n getMode(): TraceProviderMode {\n return this.mode;\n }\n\n getRuntime(): TraceRuntime {\n return this.runtime;\n }\n\n getMinLevel(): TraceLevel {\n return this.minLevel;\n }\n\n getEnabled(): boolean {\n return this.enabled ?? (this.runtime === 'renderer' ? false : true);\n }\n\n private applyRuntimeConfiguration(): void {\n if (this.runtime === 'renderer') {\n setRendererTraceEnabled(this.getEnabled());\n setRendererTraceMinLevel(this.minLevel);\n return;\n }\n\n setMainTraceMinLevel(this.minLevel);\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class MainTracer extends FrameworkTracer {\n readonly mode = 'live' as const;\n readonly process = 'main' as const;\n readonly events$ = getTraceEvents$();\n\n debug(event: TraceInput): void {\n publishMainTrace('debug', event);\n }\n\n info(event: TraceInput): void {\n publishMainTrace('info', event);\n }\n\n warn(event: TraceInput): void {\n publishMainTrace('warn', event);\n }\n\n error(event: TraceInput): void {\n publishMainTrace('error', event);\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class RendererTracer extends FrameworkTracer {\n readonly mode = 'live' as const;\n readonly process = 'renderer' as const;\n readonly events$ = getTraceEvents$();\n\n debug(event: TraceInput): void {\n emitRendererTrace('debug', event);\n }\n\n info(event: TraceInput): void {\n emitRendererTrace('info', event);\n }\n\n warn(event: TraceInput): void {\n emitRendererTrace('warn', event);\n }\n\n error(event: TraceInput): void {\n emitRendererTrace('error', event);\n }\n}\n\n@Component({ scope: LoadAs.Singleton })\nexport class TestTracer extends FrameworkTracer {\n readonly mode = 'test' as const;\n readonly events$ = getTraceEvents$();\n\n constructor(\n @Inject(TraceProviderConfiguration) private readonly configuration: TraceProviderConfiguration,\n ) {\n super();\n }\n\n get process(): TraceProcess {\n const runtime = this.configuration.getRuntime();\n if (runtime === 'renderer') return 'renderer';\n if (runtime === 'main') return 'main';\n return 'test';\n }\n\n debug(event: TraceInput): void {\n this.publish('debug', event);\n }\n\n info(event: TraceInput): void {\n this.publish('info', event);\n }\n\n warn(event: TraceInput): void {\n this.publish('warn', event);\n }\n\n error(event: TraceInput): void {\n this.publish('error', event);\n }\n\n private publish(level: TraceLevel, event: TraceInput): void {\n publishTestTrace(this.process, level, event);\n }\n}\n\n@Provider()\nexport class TraceProvider extends FrameworkTracer {\n constructor(\n @Inject(TraceProviderConfiguration) private readonly configuration: TraceProviderConfiguration,\n @Inject(SCOPED_CONTAINER) private readonly container: IContainer,\n ) {\n super();\n }\n\n get mode(): TraceProviderMode {\n return this.resolveImplementation().mode;\n }\n\n get process(): TraceProcess {\n return this.resolveImplementation().process;\n }\n\n get events$(): Observable<TraceEvent> {\n return this.resolveImplementation().events$;\n }\n\n debug(event: TraceInput): void {\n this.resolveImplementation().debug(event);\n }\n\n info(event: TraceInput): void {\n this.resolveImplementation().info(event);\n }\n\n warn(event: TraceInput): void {\n this.resolveImplementation().warn(event);\n }\n\n error(event: TraceInput): void {\n this.resolveImplementation().error(event);\n }\n\n capture(options: TraceCaptureOptions = {}): TraceCapture {\n return this.resolveImplementation().capture(options);\n }\n\n private resolveImplementation(): FrameworkTracer {\n const mode = this.configuration.getMode();\n if (mode === 'test') {\n return this.resolveSync(TestTracer);\n }\n\n if (this.configuration.getRuntime() === 'renderer') {\n return this.resolveSync(RendererTracer);\n }\n\n return this.resolveSync(MainTracer);\n }\n\n private resolveSync<T>(token: new (...args: any[]) => T): T {\n const resolved = this.container.instance<T, true>(token);\n if (resolved instanceof Promise) {\n throw new Error(`${token.name} must resolve synchronously`);\n }\n return resolved;\n }\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noego/wood",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"author": "Shavauhn Gabay",
|
|
8
8
|
"license": "ISC",
|
|
9
9
|
"bin": {
|
|
10
|
-
"axe": "
|
|
11
|
-
"stick": "
|
|
12
|
-
"wood": "
|
|
10
|
+
"axe": "bin/axe.js",
|
|
11
|
+
"stick": "bin/stick.js",
|
|
12
|
+
"wood": "bin/wood.js"
|
|
13
13
|
},
|
|
14
14
|
"publishConfig": {
|
|
15
15
|
"access": "public"
|
|
@@ -84,21 +84,21 @@
|
|
|
84
84
|
"prepublishOnly": "npm run build && npm run typecheck && npm test"
|
|
85
85
|
},
|
|
86
86
|
"dependencies": {
|
|
87
|
-
"@noego/ioc": "^0.
|
|
88
|
-
"@noego/stitch": "^1.0.3",
|
|
87
|
+
"@noego/ioc": "^0.3.1",
|
|
89
88
|
"@noego/logger": "^0.0.2",
|
|
89
|
+
"@noego/stitch": "^1.0.3",
|
|
90
90
|
"ajv": "^8.x",
|
|
91
91
|
"ajv-formats": "^3.x",
|
|
92
|
-
"js-yaml": "^4.x",
|
|
93
92
|
"chokidar": "^4.x",
|
|
94
|
-
"
|
|
93
|
+
"glob": "^11.x",
|
|
94
|
+
"js-yaml": "^4.x",
|
|
95
95
|
"path-to-regexp": "^8.x",
|
|
96
|
-
"
|
|
96
|
+
"rxjs": "^7.x"
|
|
97
97
|
},
|
|
98
98
|
"peerDependencies": {
|
|
99
|
-
"svelte": "^5.x",
|
|
100
99
|
"electron": ">=28.0.0",
|
|
101
|
-
"playwright": "^1.40.0"
|
|
100
|
+
"playwright": "^1.40.0",
|
|
101
|
+
"svelte": "^5.x"
|
|
102
102
|
},
|
|
103
103
|
"peerDependenciesMeta": {
|
|
104
104
|
"playwright": {
|
|
@@ -106,14 +106,14 @@
|
|
|
106
106
|
}
|
|
107
107
|
},
|
|
108
108
|
"devDependencies": {
|
|
109
|
-
"tsup": "^8.5.0",
|
|
110
|
-
"typescript": "^5.8.3",
|
|
111
|
-
"@types/node": "^20.10.4",
|
|
112
109
|
"@types/js-yaml": "^4.x",
|
|
113
|
-
"
|
|
114
|
-
"electron-vite": "^2.x",
|
|
110
|
+
"@types/node": "^20.10.4",
|
|
115
111
|
"electron-builder": "^25.x",
|
|
112
|
+
"electron-vite": "^2.x",
|
|
116
113
|
"esbuild": "^0.25.x",
|
|
117
|
-
"playwright": "^1.40.0"
|
|
114
|
+
"playwright": "^1.40.0",
|
|
115
|
+
"tsup": "^8.5.0",
|
|
116
|
+
"typescript": "^5.8.3",
|
|
117
|
+
"vitest": "^3.x"
|
|
118
118
|
}
|
|
119
119
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { setContext, onDestroy } from 'svelte';
|
|
3
3
|
import { getNavigation } from '@noego/wood/navigation';
|
|
4
|
+
import { disposeControllerLifecycle } from '../controller/controller_lifecycle';
|
|
5
|
+
import { createNavigationMountKey } from '../navigation/navigation_identity';
|
|
4
6
|
import WoodRecursiveRender from './WoodRecursiveRender.svelte';
|
|
5
7
|
|
|
6
8
|
type ViewManifestEntry = {
|
|
@@ -48,6 +50,7 @@
|
|
|
48
50
|
let activeLayoutControllers: Array<unknown> = $state(initialLayoutControllers);
|
|
49
51
|
let activeParams: Record<string, unknown> = $state({});
|
|
50
52
|
let activeQuery: Record<string, unknown> = $state({});
|
|
53
|
+
let activeMountKey = $state(createNavigationMountKey(initialEntry.key, {}));
|
|
51
54
|
|
|
52
55
|
let activePage = $derived({
|
|
53
56
|
key: activeEntry.key,
|
|
@@ -106,6 +109,13 @@
|
|
|
106
109
|
}
|
|
107
110
|
}
|
|
108
111
|
|
|
112
|
+
async function disposeActiveControllers(): Promise<void> {
|
|
113
|
+
await disposeControllerLifecycle(activeController);
|
|
114
|
+
for (const layoutController of activeLayoutControllers) {
|
|
115
|
+
await disposeControllerLifecycle(layoutController);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
109
119
|
setContext('wood:navigate', (
|
|
110
120
|
viewKey: string,
|
|
111
121
|
params?: Record<string, unknown>,
|
|
@@ -138,6 +148,7 @@
|
|
|
138
148
|
if (navEntry) {
|
|
139
149
|
activeParams = { ...navEntry.params };
|
|
140
150
|
activeQuery = { ...navEntry.query };
|
|
151
|
+
activeMountKey = createNavigationMountKey(navEntry.page, navEntry.params);
|
|
141
152
|
}
|
|
142
153
|
return;
|
|
143
154
|
}
|
|
@@ -148,12 +159,15 @@
|
|
|
148
159
|
const entry = getViewManifestEntryFn(newKey);
|
|
149
160
|
if (!entry) return;
|
|
150
161
|
|
|
151
|
-
|
|
162
|
+
const nextMountKey = createNavigationMountKey(newKey, navEntry.params);
|
|
163
|
+
|
|
164
|
+
if (nextMountKey === activeMountKey) {
|
|
152
165
|
activeParams = { ...navEntry.params };
|
|
153
166
|
activeQuery = { ...navEntry.query };
|
|
154
167
|
return;
|
|
155
168
|
}
|
|
156
169
|
|
|
170
|
+
await disposeActiveControllers();
|
|
157
171
|
const [controller, layoutControllers] = await Promise.all([
|
|
158
172
|
createViewControllerFn(entry),
|
|
159
173
|
createLayoutControllersFn(entry),
|
|
@@ -164,6 +178,7 @@
|
|
|
164
178
|
activeLayoutControllers = layoutControllers;
|
|
165
179
|
activeParams = { ...navEntry.params };
|
|
166
180
|
activeQuery = { ...navEntry.query };
|
|
181
|
+
activeMountKey = nextMountKey;
|
|
167
182
|
});
|
|
168
183
|
|
|
169
184
|
const bridge = getWoodBridge();
|
|
@@ -188,10 +203,11 @@
|
|
|
188
203
|
onDestroy(() => {
|
|
189
204
|
unsubscribe();
|
|
190
205
|
unsubscribeWindowNavigate?.();
|
|
206
|
+
void disposeActiveControllers();
|
|
191
207
|
});
|
|
192
208
|
</script>
|
|
193
209
|
|
|
194
|
-
{#key
|
|
210
|
+
{#key activeMountKey}
|
|
195
211
|
<WoodRecursiveRender
|
|
196
212
|
layouts={activeEntry.layouts}
|
|
197
213
|
layoutControllers={activeLayoutControllers}
|