@noego/wood 0.1.0 → 0.1.2
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/dist/client/index.cjs +5 -2
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.js +5 -2
- package/dist/client/index.js.map +1 -1
- package/dist/controller/controller_lifecycle.cjs +4 -0
- package/dist/controller/controller_lifecycle.cjs.map +1 -1
- package/dist/controller/controller_lifecycle.d.cts +3 -1
- package/dist/controller/controller_lifecycle.d.ts +3 -1
- package/dist/controller/controller_lifecycle.js +4 -0
- package/dist/controller/controller_lifecycle.js.map +1 -1
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/main/index.cjs +42 -17
- package/dist/main/index.cjs.map +1 -1
- package/dist/main/index.d.cts +2 -0
- package/dist/main/index.d.ts +2 -0
- package/dist/main/index.js +42 -17
- 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/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 +1 -0
- package/dist/testing/create_controller_harness.cjs.map +1 -1
- package/dist/testing/create_controller_harness.js +1 -0
- package/dist/testing/create_controller_harness.js.map +1 -1
- package/dist/tracing/index.cjs +2 -0
- 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 +2 -0
- package/dist/tracing/index.js.map +1 -1
- package/dist/tracing/trace_hub.cjs +20 -5
- package/dist/tracing/trace_hub.cjs.map +1 -1
- package/dist/tracing/trace_hub.d.cts +2 -1
- package/dist/tracing/trace_hub.d.ts +2 -1
- package/dist/tracing/trace_hub.js +19 -5
- 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 +18 -16
- package/src/client/controller_contract.ts +18 -0
- package/src/components/NavigationShell.svelte +18 -2
- package/src/controller/controller_lifecycle.ts +24 -0
- package/src/navigation/navigation_identity.ts +23 -0
- package/src/stick/WoodRecursiveRender.svelte +0 -74
|
@@ -8,6 +8,7 @@ const LEVEL_ORDER = {
|
|
|
8
8
|
error: 3
|
|
9
9
|
};
|
|
10
10
|
let rendererMinLevel = "debug";
|
|
11
|
+
let rendererEnabled = false;
|
|
11
12
|
let customRendererTraceTransport = null;
|
|
12
13
|
function normalizeTraceInput(raw) {
|
|
13
14
|
const input = raw ?? {};
|
|
@@ -104,13 +105,17 @@ class TraceHub {
|
|
|
104
105
|
this.subject = new Subject();
|
|
105
106
|
this.shared$ = this.subject.asObservable().pipe(share());
|
|
106
107
|
this.nextTraceSeq = 1;
|
|
107
|
-
this.
|
|
108
|
+
this.minLevels = {
|
|
109
|
+
main: "debug",
|
|
110
|
+
renderer: "debug",
|
|
111
|
+
test: "debug"
|
|
112
|
+
};
|
|
108
113
|
}
|
|
109
114
|
get events$() {
|
|
110
115
|
return this.shared$;
|
|
111
116
|
}
|
|
112
|
-
setMinLevel(level) {
|
|
113
|
-
this.
|
|
117
|
+
setMinLevel(process, level) {
|
|
118
|
+
this.minLevels[process] = level;
|
|
114
119
|
}
|
|
115
120
|
publish(process, level, input) {
|
|
116
121
|
const normalized = normalizeTraceInput(input);
|
|
@@ -121,7 +126,7 @@ class TraceHub {
|
|
|
121
126
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
122
127
|
traceSeq: this.nextTraceSeq++
|
|
123
128
|
};
|
|
124
|
-
if (LEVEL_ORDER[level] >= LEVEL_ORDER[this.
|
|
129
|
+
if (LEVEL_ORDER[level] >= LEVEL_ORDER[this.minLevels[process]]) {
|
|
125
130
|
this.subject.next(event);
|
|
126
131
|
}
|
|
127
132
|
return event;
|
|
@@ -141,10 +146,14 @@ function getTraceEvents$() {
|
|
|
141
146
|
return getGlobalTraceHub().events$;
|
|
142
147
|
}
|
|
143
148
|
function setMainTraceMinLevel(level) {
|
|
144
|
-
getGlobalTraceHub().setMinLevel(level);
|
|
149
|
+
getGlobalTraceHub().setMinLevel("main", level);
|
|
145
150
|
}
|
|
146
151
|
function setRendererTraceMinLevel(level) {
|
|
147
152
|
rendererMinLevel = level;
|
|
153
|
+
getGlobalTraceHub().setMinLevel("renderer", level);
|
|
154
|
+
}
|
|
155
|
+
function setRendererTraceEnabled(enabled) {
|
|
156
|
+
rendererEnabled = enabled;
|
|
148
157
|
}
|
|
149
158
|
function publishMainTrace(level, input) {
|
|
150
159
|
return getGlobalTraceHub().publish("main", level, input);
|
|
@@ -165,6 +174,9 @@ function setRendererTraceTransport(fn) {
|
|
|
165
174
|
customRendererTraceTransport = fn;
|
|
166
175
|
}
|
|
167
176
|
function emitRendererTrace(level, input) {
|
|
177
|
+
if (!rendererEnabled) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
168
180
|
if (LEVEL_ORDER[level] < LEVEL_ORDER[rendererMinLevel]) {
|
|
169
181
|
return;
|
|
170
182
|
}
|
|
@@ -192,6 +204,7 @@ function clearTraceHubForTests() {
|
|
|
192
204
|
const globalObj = globalThis;
|
|
193
205
|
delete globalObj[TRACE_HUB_SYMBOL];
|
|
194
206
|
rendererMinLevel = "debug";
|
|
207
|
+
rendererEnabled = false;
|
|
195
208
|
customRendererTraceTransport = null;
|
|
196
209
|
}
|
|
197
210
|
export {
|
|
@@ -204,6 +217,7 @@ export {
|
|
|
204
217
|
publishMainTrace,
|
|
205
218
|
publishTestTrace,
|
|
206
219
|
setMainTraceMinLevel,
|
|
220
|
+
setRendererTraceEnabled,
|
|
207
221
|
setRendererTraceMinLevel,
|
|
208
222
|
setRendererTraceTransport
|
|
209
223
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tracing/trace_hub.ts"],"sourcesContent":["import { Observable, Subject, Subscription } from 'rxjs';\nimport { share } from 'rxjs/operators';\n\nexport type TraceLevel = 'debug' | 'info' | 'warn' | 'error';\nexport type TraceProcess = 'main' | 'renderer' | 'test';\n\nexport type TraceInput = {\n source: string;\n type: string;\n message?: string;\n conversationId?: number | string;\n payload?: Record<string, unknown>;\n};\n\nexport type TraceEvent = TraceInput & {\n level: TraceLevel;\n process: TraceProcess;\n timestamp: string;\n traceSeq: number;\n};\n\nexport type TraceDispatchResult = {\n ok: boolean;\n forwarded: boolean;\n};\n\nexport type TraceCaptureOptions = {\n maxEvents?: number;\n};\n\nexport type TraceWaitOptions = {\n timeoutMs?: number;\n};\n\nconst TRACE_HUB_SYMBOL = Symbol.for('@noego/wood.trace.hub');\n\nconst LEVEL_ORDER: Record<TraceLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\nlet rendererMinLevel: TraceLevel = 'debug';\nlet customRendererTraceTransport: ((payload: unknown) => void) | null = null;\n\ntype PendingWaiter = {\n predicate: (event: TraceEvent) => boolean;\n resolve: (event: TraceEvent) => void;\n reject: (error: Error) => void;\n timeoutId?: ReturnType<typeof setTimeout>;\n};\n\ntype GlobalWithTraceHub = typeof globalThis & {\n [TRACE_HUB_SYMBOL]?: TraceHub;\n};\n\ntype TraceBridgeLike = Record<string, unknown> & {\n __trace?: (payload: unknown) => void;\n};\n\ntype GlobalWithTraceBridge = typeof globalThis & {\n __NOEGO_WOOD_BRIDGE__?: unknown;\n wood?: unknown;\n window?: {\n __NOEGO_WOOD_BRIDGE__?: unknown;\n wood?: unknown;\n };\n};\n\nfunction normalizeTraceInput(raw: unknown): TraceInput {\n const input = (raw ?? {}) as Partial<TraceInput> & Record<string, unknown>;\n const source = typeof input.source === 'string' && input.source.trim().length > 0\n ? input.source\n : 'unknown';\n const type = typeof input.type === 'string' && input.type.trim().length > 0\n ? input.type\n : 'unknown';\n const message = typeof input.message === 'string' ? input.message : undefined;\n const conversationId = typeof input.conversationId === 'number' || typeof input.conversationId === 'string'\n ? input.conversationId\n : undefined;\n const payload = isRecord(input.payload) ? { ...input.payload } : undefined;\n\n return {\n source,\n type,\n ...(message ? { message } : {}),\n ...(conversationId !== undefined ? { conversationId } : {}),\n ...(payload ? { payload } : {}),\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction resolveTraceBridge(): TraceBridgeLike | null {\n const globalObj = globalThis as GlobalWithTraceBridge;\n const bridge = globalObj.__NOEGO_WOOD_BRIDGE__\n ?? globalObj.window?.__NOEGO_WOOD_BRIDGE__\n ?? globalObj.wood\n ?? globalObj.window?.wood;\n if (!bridge || typeof bridge !== 'object') {\n return null;\n }\n return bridge as TraceBridgeLike;\n}\n\nexport class TraceCapture {\n private readonly buffer: TraceEvent[] = [];\n private readonly pending = new Set<PendingWaiter>();\n private readonly maxEvents: number;\n private subscription: Subscription;\n\n constructor(\n source$: Observable<TraceEvent>,\n options: TraceCaptureOptions = {},\n ) {\n this.maxEvents = Math.max(1, options.maxEvents ?? 1000);\n this.subscription = source$.subscribe((event) => {\n this.buffer.push(event);\n if (this.buffer.length > this.maxEvents) {\n this.buffer.splice(0, this.buffer.length - this.maxEvents);\n }\n for (const waiter of Array.from(this.pending)) {\n if (!waiter.predicate(event)) {\n continue;\n }\n if (waiter.timeoutId) {\n clearTimeout(waiter.timeoutId);\n }\n this.pending.delete(waiter);\n waiter.resolve(event);\n }\n });\n }\n\n events(): TraceEvent[] {\n return [...this.buffer];\n }\n\n async waitFor(\n predicate: (event: TraceEvent) => boolean,\n options: TraceWaitOptions = {},\n ): Promise<TraceEvent> {\n const existing = this.buffer.find(predicate);\n if (existing) {\n return existing;\n }\n\n return new Promise<TraceEvent>((resolve, reject) => {\n const waiter: PendingWaiter = {\n predicate,\n resolve,\n reject,\n };\n const timeoutMs = options.timeoutMs ?? 5000;\n waiter.timeoutId = setTimeout(() => {\n this.pending.delete(waiter);\n reject(new Error(`Timed out waiting for trace event after ${timeoutMs}ms`));\n }, timeoutMs);\n this.pending.add(waiter);\n });\n }\n\n async writeArtifact(targetPath: string): Promise<void> {\n const [{ mkdir, writeFile }, pathModule] = await Promise.all([\n import('node:fs/promises'),\n import('node:path'),\n ]);\n await mkdir(pathModule.dirname(targetPath), { recursive: true });\n const lines = this.buffer.map((event) => JSON.stringify(event)).join('\\n');\n await writeFile(targetPath, `${lines}${lines.length > 0 ? '\\n' : ''}`, 'utf8');\n }\n\n stop(): void {\n for (const waiter of this.pending) {\n if (waiter.timeoutId) {\n clearTimeout(waiter.timeoutId);\n }\n waiter.reject(new Error('Trace capture stopped before predicate matched'));\n }\n this.pending.clear();\n this.subscription.unsubscribe();\n }\n}\n\nclass TraceHub {\n private readonly subject = new Subject<TraceEvent>();\n private readonly shared$ = this.subject.asObservable().pipe(share());\n private nextTraceSeq = 1;\n private minLevel: TraceLevel = 'debug';\n\n get events$(): Observable<TraceEvent> {\n return this.shared$;\n }\n\n setMinLevel(level: TraceLevel): void {\n this.minLevel = level;\n }\n\n publish(process: TraceProcess, level: TraceLevel, input: unknown): TraceEvent {\n const normalized = normalizeTraceInput(input);\n const event: TraceEvent = {\n ...normalized,\n level,\n process,\n timestamp: new Date().toISOString(),\n traceSeq: this.nextTraceSeq++,\n };\n if (LEVEL_ORDER[level] >= LEVEL_ORDER[this.minLevel]) {\n this.subject.next(event);\n }\n return event;\n }\n\n capture(options: TraceCaptureOptions = {}): TraceCapture {\n return new TraceCapture(this.events$, options);\n }\n}\n\nfunction getGlobalTraceHub(): TraceHub {\n const globalObj = globalThis as GlobalWithTraceHub;\n if (!globalObj[TRACE_HUB_SYMBOL]) {\n globalObj[TRACE_HUB_SYMBOL] = new TraceHub();\n }\n return globalObj[TRACE_HUB_SYMBOL] as TraceHub;\n}\n\nexport function getTraceEvents$(): Observable<TraceEvent> {\n return getGlobalTraceHub().events$;\n}\n\nexport function setMainTraceMinLevel(level: TraceLevel): void {\n getGlobalTraceHub().setMinLevel(level);\n}\n\nexport function setRendererTraceMinLevel(level: TraceLevel): void {\n rendererMinLevel = level;\n}\n\nexport function publishMainTrace(level: TraceLevel, input: unknown): TraceEvent {\n return getGlobalTraceHub().publish('main', level, input);\n}\n\nexport function publishTestTrace(process: TraceProcess, level: TraceLevel, input: unknown): TraceEvent {\n return getGlobalTraceHub().publish(process, level, input);\n}\n\nexport function dispatchRendererTracePayload(rawPayload: unknown): TraceDispatchResult {\n const payload = (rawPayload ?? {}) as Partial<TraceInput> & { level?: TraceLevel };\n const level = payload.level === 'debug' || payload.level === 'info' || payload.level === 'warn' || payload.level === 'error'\n ? payload.level\n : 'info';\n getGlobalTraceHub().publish('renderer', level, payload);\n return {\n ok: true,\n forwarded: true,\n };\n}\n\nexport function setRendererTraceTransport(fn: ((payload: unknown) => void) | null): void {\n customRendererTraceTransport = fn;\n}\n\nexport function emitRendererTrace(level: TraceLevel, input: TraceInput): void {\n if (LEVEL_ORDER[level] < LEVEL_ORDER[rendererMinLevel]) {\n return;\n }\n const normalized = { ...normalizeTraceInput(input), level };\n\n if (customRendererTraceTransport) {\n try {\n customRendererTraceTransport(normalized);\n return;\n } catch {\n // Fall through to bridge.__trace\n }\n }\n\n const bridge = resolveTraceBridge();\n if (!bridge || typeof bridge.__trace !== 'function') {\n return;\n }\n try {\n bridge.__trace(normalized);\n } catch {\n // Tracing is observational and must never break the caller.\n }\n}\n\nexport function createTraceCapture(options: TraceCaptureOptions = {}): TraceCapture {\n return getGlobalTraceHub().capture(options);\n}\n\nexport function clearTraceHubForTests(): void {\n const globalObj = globalThis as GlobalWithTraceHub;\n delete globalObj[TRACE_HUB_SYMBOL];\n rendererMinLevel = 'debug';\n customRendererTraceTransport = null;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/tracing/trace_hub.ts"],"sourcesContent":["import { Observable, Subject, Subscription } from 'rxjs';\nimport { share } from 'rxjs/operators';\n\nexport type TraceLevel = 'debug' | 'info' | 'warn' | 'error';\nexport type TraceProcess = 'main' | 'renderer' | 'test';\n\nexport type TraceInput = {\n source: string;\n type: string;\n message?: string;\n conversationId?: number | string;\n payload?: Record<string, unknown>;\n};\n\nexport type TraceEvent = TraceInput & {\n level: TraceLevel;\n process: TraceProcess;\n timestamp: string;\n traceSeq: number;\n};\n\nexport type TraceDispatchResult = {\n ok: boolean;\n forwarded: boolean;\n};\n\nexport type TraceCaptureOptions = {\n maxEvents?: number;\n};\n\nexport type TraceWaitOptions = {\n timeoutMs?: number;\n};\n\nconst TRACE_HUB_SYMBOL = Symbol.for('@noego/wood.trace.hub');\n\nconst LEVEL_ORDER: Record<TraceLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\nlet rendererMinLevel: TraceLevel = 'debug';\nlet rendererEnabled = false;\nlet customRendererTraceTransport: ((payload: unknown) => void) | null = null;\n\ntype PendingWaiter = {\n predicate: (event: TraceEvent) => boolean;\n resolve: (event: TraceEvent) => void;\n reject: (error: Error) => void;\n timeoutId?: ReturnType<typeof setTimeout>;\n};\n\ntype GlobalWithTraceHub = typeof globalThis & {\n [TRACE_HUB_SYMBOL]?: TraceHub;\n};\n\ntype TraceBridgeLike = Record<string, unknown> & {\n __trace?: (payload: unknown) => void;\n};\n\ntype GlobalWithTraceBridge = typeof globalThis & {\n __NOEGO_WOOD_BRIDGE__?: unknown;\n wood?: unknown;\n window?: {\n __NOEGO_WOOD_BRIDGE__?: unknown;\n wood?: unknown;\n };\n};\n\nfunction normalizeTraceInput(raw: unknown): TraceInput {\n const input = (raw ?? {}) as Partial<TraceInput> & Record<string, unknown>;\n const source = typeof input.source === 'string' && input.source.trim().length > 0\n ? input.source\n : 'unknown';\n const type = typeof input.type === 'string' && input.type.trim().length > 0\n ? input.type\n : 'unknown';\n const message = typeof input.message === 'string' ? input.message : undefined;\n const conversationId = typeof input.conversationId === 'number' || typeof input.conversationId === 'string'\n ? input.conversationId\n : undefined;\n const payload = isRecord(input.payload) ? { ...input.payload } : undefined;\n\n return {\n source,\n type,\n ...(message ? { message } : {}),\n ...(conversationId !== undefined ? { conversationId } : {}),\n ...(payload ? { payload } : {}),\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction resolveTraceBridge(): TraceBridgeLike | null {\n const globalObj = globalThis as GlobalWithTraceBridge;\n const bridge = globalObj.__NOEGO_WOOD_BRIDGE__\n ?? globalObj.window?.__NOEGO_WOOD_BRIDGE__\n ?? globalObj.wood\n ?? globalObj.window?.wood;\n if (!bridge || typeof bridge !== 'object') {\n return null;\n }\n return bridge as TraceBridgeLike;\n}\n\nexport class TraceCapture {\n private readonly buffer: TraceEvent[] = [];\n private readonly pending = new Set<PendingWaiter>();\n private readonly maxEvents: number;\n private subscription: Subscription;\n\n constructor(\n source$: Observable<TraceEvent>,\n options: TraceCaptureOptions = {},\n ) {\n this.maxEvents = Math.max(1, options.maxEvents ?? 1000);\n this.subscription = source$.subscribe((event) => {\n this.buffer.push(event);\n if (this.buffer.length > this.maxEvents) {\n this.buffer.splice(0, this.buffer.length - this.maxEvents);\n }\n for (const waiter of Array.from(this.pending)) {\n if (!waiter.predicate(event)) {\n continue;\n }\n if (waiter.timeoutId) {\n clearTimeout(waiter.timeoutId);\n }\n this.pending.delete(waiter);\n waiter.resolve(event);\n }\n });\n }\n\n events(): TraceEvent[] {\n return [...this.buffer];\n }\n\n async waitFor(\n predicate: (event: TraceEvent) => boolean,\n options: TraceWaitOptions = {},\n ): Promise<TraceEvent> {\n const existing = this.buffer.find(predicate);\n if (existing) {\n return existing;\n }\n\n return new Promise<TraceEvent>((resolve, reject) => {\n const waiter: PendingWaiter = {\n predicate,\n resolve,\n reject,\n };\n const timeoutMs = options.timeoutMs ?? 5000;\n waiter.timeoutId = setTimeout(() => {\n this.pending.delete(waiter);\n reject(new Error(`Timed out waiting for trace event after ${timeoutMs}ms`));\n }, timeoutMs);\n this.pending.add(waiter);\n });\n }\n\n async writeArtifact(targetPath: string): Promise<void> {\n const [{ mkdir, writeFile }, pathModule] = await Promise.all([\n import('node:fs/promises'),\n import('node:path'),\n ]);\n await mkdir(pathModule.dirname(targetPath), { recursive: true });\n const lines = this.buffer.map((event) => JSON.stringify(event)).join('\\n');\n await writeFile(targetPath, `${lines}${lines.length > 0 ? '\\n' : ''}`, 'utf8');\n }\n\n stop(): void {\n for (const waiter of this.pending) {\n if (waiter.timeoutId) {\n clearTimeout(waiter.timeoutId);\n }\n waiter.reject(new Error('Trace capture stopped before predicate matched'));\n }\n this.pending.clear();\n this.subscription.unsubscribe();\n }\n}\n\nclass TraceHub {\n private readonly subject = new Subject<TraceEvent>();\n private readonly shared$ = this.subject.asObservable().pipe(share());\n private nextTraceSeq = 1;\n private minLevels: Record<TraceProcess, TraceLevel> = {\n main: 'debug',\n renderer: 'debug',\n test: 'debug',\n };\n\n get events$(): Observable<TraceEvent> {\n return this.shared$;\n }\n\n setMinLevel(process: TraceProcess, level: TraceLevel): void {\n this.minLevels[process] = level;\n }\n\n publish(process: TraceProcess, level: TraceLevel, input: unknown): TraceEvent {\n const normalized = normalizeTraceInput(input);\n const event: TraceEvent = {\n ...normalized,\n level,\n process,\n timestamp: new Date().toISOString(),\n traceSeq: this.nextTraceSeq++,\n };\n if (LEVEL_ORDER[level] >= LEVEL_ORDER[this.minLevels[process]]) {\n this.subject.next(event);\n }\n return event;\n }\n\n capture(options: TraceCaptureOptions = {}): TraceCapture {\n return new TraceCapture(this.events$, options);\n }\n}\n\nfunction getGlobalTraceHub(): TraceHub {\n const globalObj = globalThis as GlobalWithTraceHub;\n if (!globalObj[TRACE_HUB_SYMBOL]) {\n globalObj[TRACE_HUB_SYMBOL] = new TraceHub();\n }\n return globalObj[TRACE_HUB_SYMBOL] as TraceHub;\n}\n\nexport function getTraceEvents$(): Observable<TraceEvent> {\n return getGlobalTraceHub().events$;\n}\n\nexport function setMainTraceMinLevel(level: TraceLevel): void {\n getGlobalTraceHub().setMinLevel('main', level);\n}\n\nexport function setRendererTraceMinLevel(level: TraceLevel): void {\n rendererMinLevel = level;\n getGlobalTraceHub().setMinLevel('renderer', level);\n}\n\nexport function setRendererTraceEnabled(enabled: boolean): void {\n rendererEnabled = enabled;\n}\n\nexport function publishMainTrace(level: TraceLevel, input: unknown): TraceEvent {\n return getGlobalTraceHub().publish('main', level, input);\n}\n\nexport function publishTestTrace(process: TraceProcess, level: TraceLevel, input: unknown): TraceEvent {\n return getGlobalTraceHub().publish(process, level, input);\n}\n\nexport function dispatchRendererTracePayload(rawPayload: unknown): TraceDispatchResult {\n const payload = (rawPayload ?? {}) as Partial<TraceInput> & { level?: TraceLevel };\n const level = payload.level === 'debug' || payload.level === 'info' || payload.level === 'warn' || payload.level === 'error'\n ? payload.level\n : 'info';\n getGlobalTraceHub().publish('renderer', level, payload);\n return {\n ok: true,\n forwarded: true,\n };\n}\n\nexport function setRendererTraceTransport(fn: ((payload: unknown) => void) | null): void {\n customRendererTraceTransport = fn;\n}\n\nexport function emitRendererTrace(level: TraceLevel, input: TraceInput): void {\n if (!rendererEnabled) {\n return;\n }\n if (LEVEL_ORDER[level] < LEVEL_ORDER[rendererMinLevel]) {\n return;\n }\n const normalized = { ...normalizeTraceInput(input), level };\n\n if (customRendererTraceTransport) {\n try {\n customRendererTraceTransport(normalized);\n return;\n } catch {\n // Fall through to bridge.__trace\n }\n }\n\n const bridge = resolveTraceBridge();\n if (!bridge || typeof bridge.__trace !== 'function') {\n return;\n }\n try {\n bridge.__trace(normalized);\n } catch {\n // Tracing is observational and must never break the caller.\n }\n}\n\nexport function createTraceCapture(options: TraceCaptureOptions = {}): TraceCapture {\n return getGlobalTraceHub().capture(options);\n}\n\nexport function clearTraceHubForTests(): void {\n const globalObj = globalThis as GlobalWithTraceHub;\n delete globalObj[TRACE_HUB_SYMBOL];\n rendererMinLevel = 'debug';\n rendererEnabled = false;\n customRendererTraceTransport = null;\n}\n"],"mappings":"AAAA,SAAqB,eAA6B;AAClD,SAAS,aAAa;AAiCtB,MAAM,mBAAmB,uBAAO,IAAI,uBAAuB;AAE3D,MAAM,cAA0C;AAAA,EAC9C,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AACT;AAEA,IAAI,mBAA+B;AACnC,IAAI,kBAAkB;AACtB,IAAI,+BAAoE;AA0BxE,SAAS,oBAAoB,KAA0B;AACrD,QAAM,QAAS,OAAO,CAAC;AACvB,QAAM,SAAS,OAAO,MAAM,WAAW,YAAY,MAAM,OAAO,KAAK,EAAE,SAAS,IAC5E,MAAM,SACN;AACJ,QAAM,OAAO,OAAO,MAAM,SAAS,YAAY,MAAM,KAAK,KAAK,EAAE,SAAS,IACtE,MAAM,OACN;AACJ,QAAM,UAAU,OAAO,MAAM,YAAY,WAAW,MAAM,UAAU;AACpE,QAAM,iBAAiB,OAAO,MAAM,mBAAmB,YAAY,OAAO,MAAM,mBAAmB,WAC/F,MAAM,iBACN;AACJ,QAAM,UAAU,SAAS,MAAM,OAAO,IAAI,EAAE,GAAG,MAAM,QAAQ,IAAI;AAEjE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC7B,GAAI,mBAAmB,SAAY,EAAE,eAAe,IAAI,CAAC;AAAA,IACzD,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC/B;AACF;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,qBAA6C;AACpD,QAAM,YAAY;AAClB,QAAM,SAAS,UAAU,yBACpB,UAAU,QAAQ,yBAClB,UAAU,QACV,UAAU,QAAQ;AACvB,MAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACzC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,MAAM,aAAa;AAAA,EAMxB,YACE,SACA,UAA+B,CAAC,GAChC;AARF,SAAiB,SAAuB,CAAC;AACzC,SAAiB,UAAU,oBAAI,IAAmB;AAQhD,SAAK,YAAY,KAAK,IAAI,GAAG,QAAQ,aAAa,GAAI;AACtD,SAAK,eAAe,QAAQ,UAAU,CAAC,UAAU;AAC/C,WAAK,OAAO,KAAK,KAAK;AACtB,UAAI,KAAK,OAAO,SAAS,KAAK,WAAW;AACvC,aAAK,OAAO,OAAO,GAAG,KAAK,OAAO,SAAS,KAAK,SAAS;AAAA,MAC3D;AACA,iBAAW,UAAU,MAAM,KAAK,KAAK,OAAO,GAAG;AAC7C,YAAI,CAAC,OAAO,UAAU,KAAK,GAAG;AAC5B;AAAA,QACF;AACA,YAAI,OAAO,WAAW;AACpB,uBAAa,OAAO,SAAS;AAAA,QAC/B;AACA,aAAK,QAAQ,OAAO,MAAM;AAC1B,eAAO,QAAQ,KAAK;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,SAAuB;AACrB,WAAO,CAAC,GAAG,KAAK,MAAM;AAAA,EACxB;AAAA,EAEA,MAAM,QACJ,WACA,UAA4B,CAAC,GACR;AACrB,UAAM,WAAW,KAAK,OAAO,KAAK,SAAS;AAC3C,QAAI,UAAU;AACZ,aAAO;AAAA,IACT;AAEA,WAAO,IAAI,QAAoB,CAAC,SAAS,WAAW;AAClD,YAAM,SAAwB;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,YAAM,YAAY,QAAQ,aAAa;AACvC,aAAO,YAAY,WAAW,MAAM;AAClC,aAAK,QAAQ,OAAO,MAAM;AAC1B,eAAO,IAAI,MAAM,2CAA2C,SAAS,IAAI,CAAC;AAAA,MAC5E,GAAG,SAAS;AACZ,WAAK,QAAQ,IAAI,MAAM;AAAA,IACzB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cAAc,YAAmC;AACrD,UAAM,CAAC,EAAE,OAAO,UAAU,GAAG,UAAU,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC3D,OAAO,kBAAkB;AAAA,MACzB,OAAO,WAAW;AAAA,IACpB,CAAC;AACD,UAAM,MAAM,WAAW,QAAQ,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAC/D,UAAM,QAAQ,KAAK,OAAO,IAAI,CAAC,UAAU,KAAK,UAAU,KAAK,CAAC,EAAE,KAAK,IAAI;AACzE,UAAM,UAAU,YAAY,GAAG,KAAK,GAAG,MAAM,SAAS,IAAI,OAAO,EAAE,IAAI,MAAM;AAAA,EAC/E;AAAA,EAEA,OAAa;AACX,eAAW,UAAU,KAAK,SAAS;AACjC,UAAI,OAAO,WAAW;AACpB,qBAAa,OAAO,SAAS;AAAA,MAC/B;AACA,aAAO,OAAO,IAAI,MAAM,gDAAgD,CAAC;AAAA,IAC3E;AACA,SAAK,QAAQ,MAAM;AACnB,SAAK,aAAa,YAAY;AAAA,EAChC;AACF;AAEA,MAAM,SAAS;AAAA,EAAf;AACE,SAAiB,UAAU,IAAI,QAAoB;AACnD,SAAiB,UAAU,KAAK,QAAQ,aAAa,EAAE,KAAK,MAAM,CAAC;AACnE,SAAQ,eAAe;AACvB,SAAQ,YAA8C;AAAA,MACpD,MAAM;AAAA,MACN,UAAU;AAAA,MACV,MAAM;AAAA,IACR;AAAA;AAAA,EAEA,IAAI,UAAkC;AACpC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAAY,SAAuB,OAAyB;AAC1D,SAAK,UAAU,OAAO,IAAI;AAAA,EAC5B;AAAA,EAEA,QAAQ,SAAuB,OAAmB,OAA4B;AAC5E,UAAM,aAAa,oBAAoB,KAAK;AAC5C,UAAM,QAAoB;AAAA,MACxB,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MAClC,UAAU,KAAK;AAAA,IACjB;AACA,QAAI,YAAY,KAAK,KAAK,YAAY,KAAK,UAAU,OAAO,CAAC,GAAG;AAC9D,WAAK,QAAQ,KAAK,KAAK;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,UAA+B,CAAC,GAAiB;AACvD,WAAO,IAAI,aAAa,KAAK,SAAS,OAAO;AAAA,EAC/C;AACF;AAEA,SAAS,oBAA8B;AACrC,QAAM,YAAY;AAClB,MAAI,CAAC,UAAU,gBAAgB,GAAG;AAChC,cAAU,gBAAgB,IAAI,IAAI,SAAS;AAAA,EAC7C;AACA,SAAO,UAAU,gBAAgB;AACnC;AAEO,SAAS,kBAA0C;AACxD,SAAO,kBAAkB,EAAE;AAC7B;AAEO,SAAS,qBAAqB,OAAyB;AAC5D,oBAAkB,EAAE,YAAY,QAAQ,KAAK;AAC/C;AAEO,SAAS,yBAAyB,OAAyB;AAChE,qBAAmB;AACnB,oBAAkB,EAAE,YAAY,YAAY,KAAK;AACnD;AAEO,SAAS,wBAAwB,SAAwB;AAC9D,oBAAkB;AACpB;AAEO,SAAS,iBAAiB,OAAmB,OAA4B;AAC9E,SAAO,kBAAkB,EAAE,QAAQ,QAAQ,OAAO,KAAK;AACzD;AAEO,SAAS,iBAAiB,SAAuB,OAAmB,OAA4B;AACrG,SAAO,kBAAkB,EAAE,QAAQ,SAAS,OAAO,KAAK;AAC1D;AAEO,SAAS,6BAA6B,YAA0C;AACrF,QAAM,UAAW,cAAc,CAAC;AAChC,QAAM,QAAQ,QAAQ,UAAU,WAAW,QAAQ,UAAU,UAAU,QAAQ,UAAU,UAAU,QAAQ,UAAU,UACjH,QAAQ,QACR;AACJ,oBAAkB,EAAE,QAAQ,YAAY,OAAO,OAAO;AACtD,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,WAAW;AAAA,EACb;AACF;AAEO,SAAS,0BAA0B,IAA+C;AACvF,iCAA+B;AACjC;AAEO,SAAS,kBAAkB,OAAmB,OAAyB;AAC5E,MAAI,CAAC,iBAAiB;AACpB;AAAA,EACF;AACA,MAAI,YAAY,KAAK,IAAI,YAAY,gBAAgB,GAAG;AACtD;AAAA,EACF;AACA,QAAM,aAAa,EAAE,GAAG,oBAAoB,KAAK,GAAG,MAAM;AAE1D,MAAI,8BAA8B;AAChC,QAAI;AACF,mCAA6B,UAAU;AACvC;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,QAAM,SAAS,mBAAmB;AAClC,MAAI,CAAC,UAAU,OAAO,OAAO,YAAY,YAAY;AACnD;AAAA,EACF;AACA,MAAI;AACF,WAAO,QAAQ,UAAU;AAAA,EAC3B,QAAQ;AAAA,EAER;AACF;AAEO,SAAS,mBAAmB,UAA+B,CAAC,GAAiB;AAClF,SAAO,kBAAkB,EAAE,QAAQ,OAAO;AAC5C;AAEO,SAAS,wBAA8B;AAC5C,QAAM,YAAY;AAClB,SAAO,UAAU,gBAAgB;AACjC,qBAAmB;AACnB,oBAAkB;AAClB,iCAA+B;AACjC;","names":[]}
|
|
@@ -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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noego/wood",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -18,8 +18,10 @@
|
|
|
18
18
|
"dist",
|
|
19
19
|
"bin",
|
|
20
20
|
"loaders",
|
|
21
|
-
"src/
|
|
22
|
-
"src/
|
|
21
|
+
"src/components/",
|
|
22
|
+
"src/client/controller_contract.ts",
|
|
23
|
+
"src/controller/controller_lifecycle.ts",
|
|
24
|
+
"src/navigation/navigation_identity.ts"
|
|
23
25
|
],
|
|
24
26
|
"exports": {
|
|
25
27
|
".": {
|
|
@@ -84,21 +86,21 @@
|
|
|
84
86
|
"prepublishOnly": "npm run build && npm run typecheck && npm test"
|
|
85
87
|
},
|
|
86
88
|
"dependencies": {
|
|
87
|
-
"@noego/ioc": "^0.
|
|
88
|
-
"@noego/stitch": "^1.0.3",
|
|
89
|
+
"@noego/ioc": "^0.3.1",
|
|
89
90
|
"@noego/logger": "^0.0.2",
|
|
91
|
+
"@noego/stitch": "^1.0.3",
|
|
90
92
|
"ajv": "^8.x",
|
|
91
93
|
"ajv-formats": "^3.x",
|
|
92
|
-
"js-yaml": "^4.x",
|
|
93
94
|
"chokidar": "^4.x",
|
|
94
|
-
"
|
|
95
|
+
"glob": "^11.x",
|
|
96
|
+
"js-yaml": "^4.x",
|
|
95
97
|
"path-to-regexp": "^8.x",
|
|
96
|
-
"
|
|
98
|
+
"rxjs": "^7.x"
|
|
97
99
|
},
|
|
98
100
|
"peerDependencies": {
|
|
99
|
-
"svelte": "^5.x",
|
|
100
101
|
"electron": ">=28.0.0",
|
|
101
|
-
"playwright": "^1.40.0"
|
|
102
|
+
"playwright": "^1.40.0",
|
|
103
|
+
"svelte": "^5.x"
|
|
102
104
|
},
|
|
103
105
|
"peerDependenciesMeta": {
|
|
104
106
|
"playwright": {
|
|
@@ -106,14 +108,14 @@
|
|
|
106
108
|
}
|
|
107
109
|
},
|
|
108
110
|
"devDependencies": {
|
|
109
|
-
"tsup": "^8.5.0",
|
|
110
|
-
"typescript": "^5.8.3",
|
|
111
|
-
"@types/node": "^20.10.4",
|
|
112
111
|
"@types/js-yaml": "^4.x",
|
|
113
|
-
"
|
|
114
|
-
"electron-vite": "^2.x",
|
|
112
|
+
"@types/node": "^20.10.4",
|
|
115
113
|
"electron-builder": "^25.x",
|
|
114
|
+
"electron-vite": "^2.x",
|
|
116
115
|
"esbuild": "^0.25.x",
|
|
117
|
-
"playwright": "^1.40.0"
|
|
116
|
+
"playwright": "^1.40.0",
|
|
117
|
+
"tsup": "^8.5.0",
|
|
118
|
+
"typescript": "^5.8.3",
|
|
119
|
+
"vitest": "^3.x"
|
|
118
120
|
}
|
|
119
121
|
}
|