@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/codegen/preload_generator.ts"],"sourcesContent":["import type { OperationDef } from '../types/index.js';\n\nfunction operationHasInput(op: OperationDef): boolean {\n return Boolean(\n op.inputSchema &&\n (op.inputSchema as Record<string, unknown>).type === 'object' &&\n Object.keys((op.inputSchema as Record<string, Record<string, unknown>>).properties ?? {}).length > 0,\n );\n}\n\n/**\n * Build a nested object tree from dot-path operation channels.\n * \"chat.message.send\" -> { chat: { message: { send: ... } } }\n */\nfunction buildNestedTree(operations: Map<string, OperationDef>): Record<string, unknown> {\n const tree: Record<string, unknown> = {};\n\n for (const [channel, op] of operations) {\n const parts = channel.split('.');\n let current: Record<string, unknown> = tree;\n\n for (let i = 0; i < parts.length - 1; i++) {\n if (!current[parts[i]]) current[parts[i]] = {};\n current = current[parts[i]] as Record<string, unknown>;\n }\n\n const leaf = parts[parts.length - 1];\n current[leaf] = { __operation: op };\n }\n\n return tree;\n}\n\n/**\n * Generate TypeScript code for a nested tree node.\n */\nfunction generateTreeCode(node: Record<string, unknown>, indent: string = ' '): string {\n const lines: string[] = [];\n\n for (const [key, value] of Object.entries(node)) {\n const entry = value as Record<string, unknown>;\n if (entry.__operation) {\n const op = entry.__operation as OperationDef;\n const hasInput = operationHasInput(op);\n\n if (hasInput) {\n lines.push(`${indent}${key}: (data: unknown) =>`);\n lines.push(`${indent} ipcRenderer.invoke('${op.channel}', data),`);\n } else {\n lines.push(`${indent}${key}: () =>`);\n lines.push(`${indent} ipcRenderer.invoke('${op.channel}'),`);\n }\n } else {\n lines.push(`${indent}${key}: {`);\n lines.push(generateTreeCode(entry, indent + ' '));\n lines.push(`${indent}},`);\n }\n }\n\n return lines.join('\\n');\n}\n\nfunction generateRpcManifestCode(operations: Map<string, OperationDef>): string {\n const entries = Array.from(operations.values())\n .sort((a, b) => a.channel.localeCompare(b.channel))\n .map((op) => {\n const payload = {\n channel: op.channel,\n controller: op.controller,\n action: op.action,\n path: op.channel.split('.'),\n hasInput: operationHasInput(op),\n };\n return ` ${JSON.stringify(payload)},`;\n });\n\n return `const __WOOD_RPC_MANIFEST = [\n${entries.join('\\n')}\n];`;\n}\n\nconst INTERNAL_BRIDGE_GLOBAL_KEY = '__NOEGO_WOOD_BRIDGE__';\n\n/**\n * Generate a complete preload.ts file from operations.\n */\nexport function generatePreload(operations: Map<string, OperationDef>): string {\n const tree = buildNestedTree(operations);\n const operationsCode = generateTreeCode(tree);\n const rpcManifestCode = generateRpcManifestCode(operations);\n\n return `// AUTO-GENERATED by @noego/wood -- do not edit\nimport { contextBridge, ipcRenderer } from 'electron';\n\n${rpcManifestCode}\n\nconst __WOOD_INTERNAL_BRIDGE_KEY = '${INTERNAL_BRIDGE_GLOBAL_KEY}';\n\ncontextBridge.exposeInMainWorld(__WOOD_INTERNAL_BRIDGE_KEY, {\n${operationsCode}\n\n // Internal: backend controller/action RPC map for @Inject(App)\n __rpcManifest: __WOOD_RPC_MANIFEST,\n\n // Internal: loader data requests\n __load: (route: string, params: Record<string, string>) =>\n ipcRenderer.invoke('__load', { route, params }),\n\n // Internal: cross-window navigation\n __navigate: (windowId: string, route: string) =>\n ipcRenderer.invoke('__navigate', { windowId, route }),\n\n // Internal: window management\n __window: {\n current: () =>\n ipcRenderer.invoke('__window', { action: 'current' }),\n open: (windowId: string, options?: Record<string, unknown>) =>\n ipcRenderer.invoke('__window', { action: 'open', windowId, options }),\n close: (windowId?: string) =>\n ipcRenderer.invoke('__window', { action: 'close', windowId }),\n focus: (windowId: string) =>\n ipcRenderer.invoke('__window', { action: 'focus', windowId }),\n minimize: (windowId?: string) =>\n ipcRenderer.invoke('__window', { action: 'minimize', windowId }),\n maximize: (windowId?: string) =>\n ipcRenderer.invoke('__window', { action: 'maximize', windowId }),\n },\n\n // Internal: framework config (trace min level, etc)\n __woodConfig: () =>\n ipcRenderer.invoke('__woodConfig'),\n\n // Internal: debug metadata\n __debug: {\n current: () =>\n ipcRenderer.invoke('__debug', { action: 'current' }),\n },\n\n // Internal: context menu\n __contextMenu: {\n show: (data: unknown) =>\n ipcRenderer.invoke('__contextMenu', { action: 'show', ...data as Record<string, unknown> }),\n },\n\n // Push events from main process\n on: (channel: string, callback: (...args: unknown[]) => void) => {\n const subscription = (_event: unknown, ...args: unknown[]) => callback(...args);\n ipcRenderer.on(\\`__event:\\${channel}\\`, subscription);\n return () => ipcRenderer.removeListener(\\`__event:\\${channel}\\`, subscription);\n },\n __trace: (event: unknown) => {\n ipcRenderer.send('__trace', event);\n },\n __log: (level: string, logger: string, message: string, context?: unknown) => {\n ipcRenderer.send('__log', { level, logger, message, context });\n },\n});\n`;\n}\n"],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../src/codegen/preload_generator.ts"],"sourcesContent":["import type { OperationDef } from '../types/index.js';\n\nfunction operationHasInput(op: OperationDef): boolean {\n return Boolean(\n op.inputSchema &&\n (op.inputSchema as Record<string, unknown>).type === 'object' &&\n Object.keys((op.inputSchema as Record<string, Record<string, unknown>>).properties ?? {}).length > 0,\n );\n}\n\n/**\n * Build a nested object tree from dot-path operation channels.\n * \"chat.message.send\" -> { chat: { message: { send: ... } } }\n */\nfunction buildNestedTree(operations: Map<string, OperationDef>): Record<string, unknown> {\n const tree: Record<string, unknown> = {};\n\n for (const [channel, op] of operations) {\n const parts = channel.split('.');\n let current: Record<string, unknown> = tree;\n\n for (let i = 0; i < parts.length - 1; i++) {\n if (!current[parts[i]]) current[parts[i]] = {};\n current = current[parts[i]] as Record<string, unknown>;\n }\n\n const leaf = parts[parts.length - 1];\n current[leaf] = { __operation: op };\n }\n\n return tree;\n}\n\n/**\n * Generate TypeScript code for a nested tree node.\n */\nfunction generateTreeCode(node: Record<string, unknown>, indent: string = ' '): string {\n const lines: string[] = [];\n\n for (const [key, value] of Object.entries(node)) {\n const entry = value as Record<string, unknown>;\n if (entry.__operation) {\n const op = entry.__operation as OperationDef;\n const hasInput = operationHasInput(op);\n\n if (hasInput) {\n lines.push(`${indent}${key}: (data: unknown) =>`);\n lines.push(`${indent} ipcRenderer.invoke('${op.channel}', data),`);\n } else {\n lines.push(`${indent}${key}: () =>`);\n lines.push(`${indent} ipcRenderer.invoke('${op.channel}'),`);\n }\n } else {\n lines.push(`${indent}${key}: {`);\n lines.push(generateTreeCode(entry, indent + ' '));\n lines.push(`${indent}},`);\n }\n }\n\n return lines.join('\\n');\n}\n\nfunction generateRpcManifestCode(operations: Map<string, OperationDef>): string {\n const entries = Array.from(operations.values())\n .sort((a, b) => a.channel.localeCompare(b.channel))\n .map((op) => {\n const payload = {\n channel: op.channel,\n controller: op.controller,\n action: op.action,\n path: op.channel.split('.'),\n hasInput: operationHasInput(op),\n };\n return ` ${JSON.stringify(payload)},`;\n });\n\n return `const __WOOD_RPC_MANIFEST = [\n${entries.join('\\n')}\n];`;\n}\n\nconst INTERNAL_BRIDGE_GLOBAL_KEY = '__NOEGO_WOOD_BRIDGE__';\n\n/**\n * Generate a complete preload.ts file from operations.\n */\nexport function generatePreload(operations: Map<string, OperationDef>): string {\n const tree = buildNestedTree(operations);\n const operationsCode = generateTreeCode(tree);\n const rpcManifestCode = generateRpcManifestCode(operations);\n\n return `// AUTO-GENERATED by @noego/wood -- do not edit\nimport { contextBridge, ipcRenderer } from 'electron';\n\n${rpcManifestCode}\n\nconst __WOOD_INTERNAL_BRIDGE_KEY = '${INTERNAL_BRIDGE_GLOBAL_KEY}';\n\ncontextBridge.exposeInMainWorld(__WOOD_INTERNAL_BRIDGE_KEY, {\n${operationsCode}\n\n // Internal: backend controller/action RPC map for @Inject(App)\n __rpcManifest: __WOOD_RPC_MANIFEST,\n\n // Internal: loader data requests\n __load: (route: string, params: Record<string, string>) =>\n ipcRenderer.invoke('__load', { route, params }),\n\n // Internal: cross-window navigation\n __navigate: (windowId: string, route: string) =>\n ipcRenderer.invoke('__navigate', { windowId, route }),\n\n // Internal: window management\n __window: {\n current: () =>\n ipcRenderer.invoke('__window', { action: 'current' }),\n open: (windowId: string, options?: Record<string, unknown>) =>\n ipcRenderer.invoke('__window', { action: 'open', windowId, options }),\n close: (windowId?: string) =>\n ipcRenderer.invoke('__window', { action: 'close', windowId }),\n focus: (windowId: string) =>\n ipcRenderer.invoke('__window', { action: 'focus', windowId }),\n minimize: (windowId?: string) =>\n ipcRenderer.invoke('__window', { action: 'minimize', windowId }),\n maximize: (windowId?: string) =>\n ipcRenderer.invoke('__window', { action: 'maximize', windowId }),\n },\n\n // Internal: framework config (trace min level, etc)\n __woodConfig: () =>\n ipcRenderer.invoke('__woodConfig'),\n\n // Internal: debug metadata\n __debug: {\n current: () =>\n ipcRenderer.invoke('__debug', { action: 'current' }),\n },\n\n // Internal: context menu\n __contextMenu: {\n show: (data: unknown) =>\n ipcRenderer.invoke('__contextMenu', { action: 'show', ...data as Record<string, unknown> }),\n },\n\n // Push events from main process\n on: (channel: string, callback: (...args: unknown[]) => void) => {\n const subscription = (_event: unknown, ...args: unknown[]) => callback(...args);\n ipcRenderer.on(\\`__event:\\${channel}\\`, subscription);\n return () => ipcRenderer.removeListener(\\`__event:\\${channel}\\`, subscription);\n },\n __trace: (event: unknown) => {\n ipcRenderer.send('__trace', event);\n },\n __log: (level: string, logger: string, message: string, context?: unknown) => {\n ipcRenderer.send('__log', { level, logger, message, context });\n },\n});\n\n// Trace transport via MessagePort (activated when main process sends a port)\nlet __tracePort: MessagePort | null = null;\nconst __traceBuffer: unknown[] = [];\n\nfunction __traceFlush(): void {\n while (__traceBuffer.length > 0 && __tracePort) {\n __tracePort.postMessage(__traceBuffer.shift());\n }\n}\n\nipcRenderer.on('__trace-port', (event) => {\n __tracePort = event.ports[0];\n __tracePort.start();\n __traceFlush();\n});\n\ncontextBridge.exposeInMainWorld('__NOEGO_TRACE__', {\n send: (data: unknown) => {\n if (__tracePort) {\n __tracePort.postMessage(data);\n } else {\n __traceBuffer.push(data);\n }\n },\n});\n`;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var controller_lifecycle_exports = {};
|
|
20
|
+
__export(controller_lifecycle_exports, {
|
|
21
|
+
disposeControllerLifecycle: () => disposeControllerLifecycle
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(controller_lifecycle_exports);
|
|
24
|
+
async function disposeControllerLifecycle(target) {
|
|
25
|
+
if (!target || typeof target !== "object" && typeof target !== "function") {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const lifecycle = target;
|
|
29
|
+
if (typeof lifecycle.dispose === "function") {
|
|
30
|
+
await lifecycle.dispose();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (typeof lifecycle.destroy === "function") {
|
|
34
|
+
await lifecycle.destroy();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
38
|
+
0 && (module.exports = {
|
|
39
|
+
disposeControllerLifecycle
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=controller_lifecycle.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/controller/controller_lifecycle.ts"],"sourcesContent":["export interface ControllerLifecycle {\n dispose?(): void | Promise<void>;\n destroy?(): void | Promise<void>;\n}\n\n/**\n * Dispose a controller or controller-like instance if it exposes a lifecycle\n * hook. `dispose` is the preferred Wood lifecycle name; `destroy` is supported\n * for existing page controllers.\n */\nexport async function disposeControllerLifecycle(target: unknown): Promise<void> {\n if (!target || (typeof target !== 'object' && typeof target !== 'function')) {\n return;\n }\n\n const lifecycle = target as ControllerLifecycle;\n if (typeof lifecycle.dispose === 'function') {\n await lifecycle.dispose();\n return;\n }\n if (typeof lifecycle.destroy === 'function') {\n await lifecycle.destroy();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,eAAsB,2BAA2B,QAAgC;AAC/E,MAAI,CAAC,UAAW,OAAO,WAAW,YAAY,OAAO,WAAW,YAAa;AAC3E;AAAA,EACF;AAEA,QAAM,YAAY;AAClB,MAAI,OAAO,UAAU,YAAY,YAAY;AAC3C,UAAM,UAAU,QAAQ;AACxB;AAAA,EACF;AACA,MAAI,OAAO,UAAU,YAAY,YAAY;AAC3C,UAAM,UAAU,QAAQ;AAAA,EAC1B;AACF;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface ControllerLifecycle {
|
|
2
|
+
dispose?(): void | Promise<void>;
|
|
3
|
+
destroy?(): void | Promise<void>;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Dispose a controller or controller-like instance if it exposes a lifecycle
|
|
7
|
+
* hook. `dispose` is the preferred Wood lifecycle name; `destroy` is supported
|
|
8
|
+
* for existing page controllers.
|
|
9
|
+
*/
|
|
10
|
+
declare function disposeControllerLifecycle(target: unknown): Promise<void>;
|
|
11
|
+
|
|
12
|
+
export { type ControllerLifecycle, disposeControllerLifecycle };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface ControllerLifecycle {
|
|
2
|
+
dispose?(): void | Promise<void>;
|
|
3
|
+
destroy?(): void | Promise<void>;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Dispose a controller or controller-like instance if it exposes a lifecycle
|
|
7
|
+
* hook. `dispose` is the preferred Wood lifecycle name; `destroy` is supported
|
|
8
|
+
* for existing page controllers.
|
|
9
|
+
*/
|
|
10
|
+
declare function disposeControllerLifecycle(target: unknown): Promise<void>;
|
|
11
|
+
|
|
12
|
+
export { type ControllerLifecycle, disposeControllerLifecycle };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
async function disposeControllerLifecycle(target) {
|
|
2
|
+
if (!target || typeof target !== "object" && typeof target !== "function") {
|
|
3
|
+
return;
|
|
4
|
+
}
|
|
5
|
+
const lifecycle = target;
|
|
6
|
+
if (typeof lifecycle.dispose === "function") {
|
|
7
|
+
await lifecycle.dispose();
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (typeof lifecycle.destroy === "function") {
|
|
11
|
+
await lifecycle.destroy();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
disposeControllerLifecycle
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=controller_lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/controller/controller_lifecycle.ts"],"sourcesContent":["export interface ControllerLifecycle {\n dispose?(): void | Promise<void>;\n destroy?(): void | Promise<void>;\n}\n\n/**\n * Dispose a controller or controller-like instance if it exposes a lifecycle\n * hook. `dispose` is the preferred Wood lifecycle name; `destroy` is supported\n * for existing page controllers.\n */\nexport async function disposeControllerLifecycle(target: unknown): Promise<void> {\n if (!target || (typeof target !== 'object' && typeof target !== 'function')) {\n return;\n }\n\n const lifecycle = target as ControllerLifecycle;\n if (typeof lifecycle.dispose === 'function') {\n await lifecycle.dispose();\n return;\n }\n if (typeof lifecycle.destroy === 'function') {\n await lifecycle.destroy();\n }\n}\n"],"mappings":"AAUA,eAAsB,2BAA2B,QAAgC;AAC/E,MAAI,CAAC,UAAW,OAAO,WAAW,YAAY,OAAO,WAAW,YAAa;AAC3E;AAAA,EACF;AAEA,QAAM,YAAY;AAClB,MAAI,OAAO,UAAU,YAAY,YAAY;AAC3C,UAAM,UAAU,QAAQ;AACxB;AAAA,EACF;AACA,MAAI,OAAO,UAAU,YAAY,YAAY;AAC3C,UAAM,UAAU,QAAQ;AAAA,EAC1B;AACF;","names":[]}
|
|
@@ -19,13 +19,16 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
var controller_exports = {};
|
|
20
20
|
__export(controller_exports, {
|
|
21
21
|
ControllerResolver: () => import_controller_resolver.ControllerResolver,
|
|
22
|
-
buildControllerArgs: () => import_controller_resolver.buildControllerArgs
|
|
22
|
+
buildControllerArgs: () => import_controller_resolver.buildControllerArgs,
|
|
23
|
+
disposeControllerLifecycle: () => import_controller_lifecycle.disposeControllerLifecycle
|
|
23
24
|
});
|
|
24
25
|
module.exports = __toCommonJS(controller_exports);
|
|
25
26
|
var import_controller_resolver = require("./controller_resolver.cjs");
|
|
27
|
+
var import_controller_lifecycle = require("./controller_lifecycle.cjs");
|
|
26
28
|
// Annotate the CommonJS export names for ESM import in node:
|
|
27
29
|
0 && (module.exports = {
|
|
28
30
|
ControllerResolver,
|
|
29
|
-
buildControllerArgs
|
|
31
|
+
buildControllerArgs,
|
|
32
|
+
disposeControllerLifecycle
|
|
30
33
|
});
|
|
31
34
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/controller/index.ts"],"sourcesContent":["export { ControllerResolver, buildControllerArgs } from './controller_resolver.cjs';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAAwD;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/controller/index.ts"],"sourcesContent":["export { ControllerResolver, buildControllerArgs } from './controller_resolver.cjs';\nexport type { ControllerLifecycle } from './controller_lifecycle.cjs';\nexport { disposeControllerLifecycle } from './controller_lifecycle.cjs';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAAwD;AAExD,kCAA2C;","names":[]}
|
package/dist/controller/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { ControllerResolver, buildControllerArgs } from "./controller_resolver.js";
|
|
2
|
+
import { disposeControllerLifecycle } from "./controller_lifecycle.js";
|
|
2
3
|
export {
|
|
3
4
|
ControllerResolver,
|
|
4
|
-
buildControllerArgs
|
|
5
|
+
buildControllerArgs,
|
|
6
|
+
disposeControllerLifecycle
|
|
5
7
|
};
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/controller/index.ts"],"sourcesContent":["export { ControllerResolver, buildControllerArgs } from './controller_resolver.js';\n"],"mappings":"AAAA,SAAS,oBAAoB,2BAA2B;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/controller/index.ts"],"sourcesContent":["export { ControllerResolver, buildControllerArgs } from './controller_resolver.js';\nexport type { ControllerLifecycle } from './controller_lifecycle.js';\nexport { disposeControllerLifecycle } from './controller_lifecycle.js';\n"],"mappings":"AAAA,SAAS,oBAAoB,2BAA2B;AAExD,SAAS,kCAAkC;","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -50,6 +50,7 @@ __export(index_exports, {
|
|
|
50
50
|
clearContainerRegistryForTests: () => import_runtime.clearContainerRegistryForTests,
|
|
51
51
|
clearTraceHubForTests: () => import_tracing.clearTraceHubForTests,
|
|
52
52
|
createTraceCapture: () => import_tracing.createTraceCapture,
|
|
53
|
+
disposeControllerLifecycle: () => import_controller.disposeControllerLifecycle,
|
|
53
54
|
executeMiddleware: () => import_middleware.executeMiddleware,
|
|
54
55
|
generateControllerRegistration: () => import_codegen4.generateControllerRegistration,
|
|
55
56
|
generatePreload: () => import_codegen.generatePreload,
|
|
@@ -80,6 +81,8 @@ __export(index_exports, {
|
|
|
80
81
|
resolveWoodRemoteDebuggingPort: () => import_dev.resolveWoodRemoteDebuggingPort,
|
|
81
82
|
runtime: () => import_runtime.runtime,
|
|
82
83
|
setApplicationRoot: () => import_runtime.setApplicationRoot,
|
|
84
|
+
setRendererTraceEnabled: () => import_tracing.setRendererTraceEnabled,
|
|
85
|
+
setRendererTraceTransport: () => import_tracing.setRendererTraceTransport,
|
|
83
86
|
startBackendLoop: () => import_bridge.startBackendLoop,
|
|
84
87
|
writeWoodDevMetadata: () => import_dev.writeWoodDevMetadata
|
|
85
88
|
});
|
|
@@ -142,6 +145,7 @@ var import_tracing = require("./tracing/index.js");
|
|
|
142
145
|
clearContainerRegistryForTests,
|
|
143
146
|
clearTraceHubForTests,
|
|
144
147
|
createTraceCapture,
|
|
148
|
+
disposeControllerLifecycle,
|
|
145
149
|
executeMiddleware,
|
|
146
150
|
generateControllerRegistration,
|
|
147
151
|
generatePreload,
|
|
@@ -172,6 +176,8 @@ var import_tracing = require("./tracing/index.js");
|
|
|
172
176
|
resolveWoodRemoteDebuggingPort,
|
|
173
177
|
runtime,
|
|
174
178
|
setApplicationRoot,
|
|
179
|
+
setRendererTraceEnabled,
|
|
180
|
+
setRendererTraceTransport,
|
|
175
181
|
startBackendLoop,
|
|
176
182
|
writeWoodDevMetadata
|
|
177
183
|
});
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// @noego/wood — Declarative Electron desktop apps using the noego ecosystem\n\n// Types\nexport type {\n WoodConfig,\n WindowDef,\n DevConfig,\n ElectronBuilderConfig,\n OperationDef,\n RawOperationsDocument,\n RawModuleDef,\n RawOperationEntry,\n RawModuleOperationEntry,\n ViewDef,\n RawViewsDocument,\n RawViewEntry,\n ParameterDef,\n IpcContext,\n WoodMiddlewareContext,\n WoodMiddlewareFn,\n RequestData,\n ControllerArgs,\n LoaderResult,\n BridgeMessage,\n BridgeRequest,\n BridgeResponse,\n BridgeReady,\n BridgePush,\n BridgeElectronApi,\n SerializedError,\n ContextMenuContext,\n ContextMenuItem,\n ContextMenuEvent,\n} from './types';\n\n// Errors\nexport { WoodAuthError, WoodValidationError, BackendRestartingError } from './types/index.cjs';\n\n// Config\nexport { parseConfig } from './config/index.cjs';\n\n// Parsers\nexport { parseOperations, parseOperationsFile } from './parser/index.cjs';\nexport { parseViews, parseViewsFile } from './parser/index.cjs';\n\n// Router\nexport { WoodRouter } from './router/index.cjs';\n\n// Validation\nexport { SchemaValidator } from './validation/index.cjs';\n\n// Middleware\nexport { MiddlewareResolver, buildMiddlewareContext, executeMiddleware } from './middleware/index.cjs';\n\n// Controller\nexport { ControllerResolver, buildControllerArgs } from './controller/index.cjs';\n\n// Codegen\nexport { generatePreload } from './codegen/index.cjs';\nexport { generateTypes } from './codegen/index.cjs';\nexport { generateTestMock } from './codegen/index.cjs';\nexport { generateControllerRegistration } from './codegen/index.cjs';\nexport type { ControllerRegistrationOptions } from './codegen/index.cjs';\nexport { generateRuntime } from './codegen/index.cjs';\nexport type { RuntimeGeneratorOptions } from './codegen/index.cjs';\nexport { generateRendererViewManifest } from './codegen/index.cjs';\nexport type { RendererViewManifestGeneratorOptions } from './codegen/index.cjs';\nexport { generateRendererControllerRegistration } from './codegen/index.cjs';\nexport type { RendererControllerRegistrationOptions } from './codegen/index.cjs';\nexport { generateRendererApp } from './codegen/index.cjs';\nexport type { RendererAppGeneratorOptions } from './codegen/index.cjs';\n\n// Window\nexport { WindowManager, WindowStateStore } from './window/index.cjs';\nexport type { ScreenLike, WindowBounds } from './window/index.cjs';\n\n// Loader\nexport { LoaderRunner } from './loader/index.cjs';\n\n// Bridge\nexport { BackendBridge, startBackendLoop, pushEvent } from './bridge/index.cjs';\n\n// Dev\nexport {\n WoodDevServer,\n BackendWatcher,\n YamlWatcher,\n DEFAULT_WOOD_REMOTE_DEBUGGING_PORT,\n WOOD_DEV_DIRECTORY,\n WOOD_DEV_METADATA_BASENAME,\n resolveWoodRemoteDebuggingPort,\n resolveWoodDevDirectory,\n resolveWoodDevMetadataPath,\n writeWoodDevMetadata,\n readWoodDevMetadata,\n removeWoodDevMetadata,\n} from './dev/index.js';\nexport type { WoodDevMetadata } from './dev/index.js';\n\n// Runtime\nexport {\n getContainer,\n clearContainerRegistryForTests,\n getApplicationRoot,\n setApplicationRoot,\n clearApplicationRootForTests,\n runtime,\n} from './runtime/index.js';\nexport type {\n GetContainerOptions,\n RuntimeOptions,\n RuntimeResult,\n RegisterRuntimeRouter,\n} from './runtime';\n\n// Navigation\nexport { Navigation, getNavigation, go, goto, goback } from './navigation/index.cjs';\nexport type { NavigationEntry } from './navigation/index.cjs';\n\n// Isomorphic IPC API\nexport { Ipc, getIpc } from './ipc/index.cjs';\nexport type { IpcPushOptions } from './ipc/index.cjs';\n\n// Tracing\nexport {\n FrameworkTracer,\n MainTracer,\n RendererTracer,\n TestTracer,\n TraceProvider,\n TraceProviderConfiguration,\n TraceCapture,\n clearTraceHubForTests,\n createTraceCapture,\n getTraceEvents$,\n} from './tracing/index.js';\nexport type {\n TraceCaptureOptions,\n TraceDispatchResult,\n TraceEvent,\n TraceInput,\n TraceLevel,\n TraceProcess,\n TraceProviderMode,\n TraceRuntime,\n TraceWaitOptions,\n} from './tracing/index.js';\n\n// Testing — available via '@noego/wood/testing' subpath export.\n// Not re-exported here to avoid pulling vitest into production builds.\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA,mBAA2E;AAG3E,oBAA4B;AAG5B,oBAAqD;AACrD,IAAAA,iBAA2C;AAG3C,oBAA2B;AAG3B,wBAAgC;AAGhC,wBAA8E;AAG9E,
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// @noego/wood — Declarative Electron desktop apps using the noego ecosystem\n\n// Types\nexport type {\n WoodConfig,\n WindowDef,\n DevConfig,\n ElectronBuilderConfig,\n OperationDef,\n RawOperationsDocument,\n RawModuleDef,\n RawOperationEntry,\n RawModuleOperationEntry,\n ViewDef,\n RawViewsDocument,\n RawViewEntry,\n ParameterDef,\n IpcContext,\n WoodMiddlewareContext,\n WoodMiddlewareFn,\n RequestData,\n ControllerArgs,\n LoaderResult,\n BridgeMessage,\n BridgeRequest,\n BridgeResponse,\n BridgeReady,\n BridgePush,\n BridgeElectronApi,\n SerializedError,\n ContextMenuContext,\n ContextMenuItem,\n ContextMenuEvent,\n} from './types';\n\n// Errors\nexport { WoodAuthError, WoodValidationError, BackendRestartingError } from './types/index.cjs';\n\n// Config\nexport { parseConfig } from './config/index.cjs';\n\n// Parsers\nexport { parseOperations, parseOperationsFile } from './parser/index.cjs';\nexport { parseViews, parseViewsFile } from './parser/index.cjs';\n\n// Router\nexport { WoodRouter } from './router/index.cjs';\n\n// Validation\nexport { SchemaValidator } from './validation/index.cjs';\n\n// Middleware\nexport { MiddlewareResolver, buildMiddlewareContext, executeMiddleware } from './middleware/index.cjs';\n\n// Controller\nexport { ControllerResolver, buildControllerArgs, disposeControllerLifecycle } from './controller/index.cjs';\nexport type { ControllerLifecycle } from './controller/index.cjs';\n\n// Codegen\nexport { generatePreload } from './codegen/index.cjs';\nexport { generateTypes } from './codegen/index.cjs';\nexport { generateTestMock } from './codegen/index.cjs';\nexport { generateControllerRegistration } from './codegen/index.cjs';\nexport type { ControllerRegistrationOptions } from './codegen/index.cjs';\nexport { generateRuntime } from './codegen/index.cjs';\nexport type { RuntimeGeneratorOptions } from './codegen/index.cjs';\nexport { generateRendererViewManifest } from './codegen/index.cjs';\nexport type { RendererViewManifestGeneratorOptions } from './codegen/index.cjs';\nexport { generateRendererControllerRegistration } from './codegen/index.cjs';\nexport type { RendererControllerRegistrationOptions } from './codegen/index.cjs';\nexport { generateRendererApp } from './codegen/index.cjs';\nexport type { RendererAppGeneratorOptions } from './codegen/index.cjs';\n\n// Window\nexport { WindowManager, WindowStateStore } from './window/index.cjs';\nexport type { ScreenLike, WindowBounds } from './window/index.cjs';\n\n// Loader\nexport { LoaderRunner } from './loader/index.cjs';\n\n// Bridge\nexport { BackendBridge, startBackendLoop, pushEvent } from './bridge/index.cjs';\n\n// Dev\nexport {\n WoodDevServer,\n BackendWatcher,\n YamlWatcher,\n DEFAULT_WOOD_REMOTE_DEBUGGING_PORT,\n WOOD_DEV_DIRECTORY,\n WOOD_DEV_METADATA_BASENAME,\n resolveWoodRemoteDebuggingPort,\n resolveWoodDevDirectory,\n resolveWoodDevMetadataPath,\n writeWoodDevMetadata,\n readWoodDevMetadata,\n removeWoodDevMetadata,\n} from './dev/index.js';\nexport type { WoodDevMetadata } from './dev/index.js';\n\n// Runtime\nexport {\n getContainer,\n clearContainerRegistryForTests,\n getApplicationRoot,\n setApplicationRoot,\n clearApplicationRootForTests,\n runtime,\n} from './runtime/index.js';\nexport type {\n GetContainerOptions,\n RuntimeOptions,\n RuntimeResult,\n RegisterRuntimeRouter,\n} from './runtime';\n\n// Navigation\nexport { Navigation, getNavigation, go, goto, goback } from './navigation/index.cjs';\nexport type { NavigationEntry } from './navigation/index.cjs';\n\n// Isomorphic IPC API\nexport { Ipc, getIpc } from './ipc/index.cjs';\nexport type { IpcPushOptions } from './ipc/index.cjs';\n\n// Tracing\nexport {\n FrameworkTracer,\n MainTracer,\n RendererTracer,\n TestTracer,\n TraceProvider,\n TraceProviderConfiguration,\n TraceCapture,\n clearTraceHubForTests,\n createTraceCapture,\n getTraceEvents$,\n setRendererTraceEnabled,\n setRendererTraceTransport,\n} from './tracing/index.js';\nexport type {\n TraceCaptureOptions,\n TraceDispatchResult,\n TraceEvent,\n TraceInput,\n TraceLevel,\n TraceProcess,\n TraceProviderMode,\n TraceRuntime,\n TraceWaitOptions,\n} from './tracing/index.js';\n\n// Testing — available via '@noego/wood/testing' subpath export.\n// Not re-exported here to avoid pulling vitest into production builds.\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA,mBAA2E;AAG3E,oBAA4B;AAG5B,oBAAqD;AACrD,IAAAA,iBAA2C;AAG3C,oBAA2B;AAG3B,wBAAgC;AAGhC,wBAA8E;AAG9E,wBAAoF;AAIpF,qBAAgC;AAChC,IAAAC,kBAA8B;AAC9B,IAAAA,kBAAiC;AACjC,IAAAA,kBAA+C;AAE/C,IAAAA,kBAAgC;AAEhC,IAAAA,kBAA6C;AAE7C,IAAAA,kBAAuD;AAEvD,IAAAA,kBAAoC;AAIpC,oBAAgD;AAIhD,oBAA6B;AAG7B,oBAA2D;AAG3D,iBAaO;AAIP,qBAOO;AASP,wBAA4D;AAI5D,iBAA4B;AAI5B,qBAaO;","names":["import_parser","import_codegen"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -12,6 +12,7 @@ export { SchemaValidator } from './validation/schema_validator.cjs';
|
|
|
12
12
|
export { MiddlewareResolver } from './middleware/middleware_resolver.cjs';
|
|
13
13
|
export { buildMiddlewareContext, executeMiddleware } from './middleware/middleware_pipeline.cjs';
|
|
14
14
|
export { ControllerResolver, buildControllerArgs } from './controller/controller_resolver.cjs';
|
|
15
|
+
export { ControllerLifecycle, disposeControllerLifecycle } from './controller/controller_lifecycle.cjs';
|
|
15
16
|
export { generatePreload } from './codegen/preload_generator.cjs';
|
|
16
17
|
export { generateTypes } from './codegen/type_generator.cjs';
|
|
17
18
|
export { generateTestMock } from './codegen/test_mock_generator.cjs';
|
|
@@ -32,7 +33,7 @@ export { YamlWatcher } from './dev/yaml_watcher.cjs';
|
|
|
32
33
|
export { GetContainerOptions, clearContainerRegistryForTests, getContainer } from './runtime/get_container.cjs';
|
|
33
34
|
export { clearApplicationRootForTests, getApplicationRoot, setApplicationRoot } from './runtime/application_root.cjs';
|
|
34
35
|
export { RegisterRuntimeRouter, RuntimeOptions, RuntimeResult, runtime } from './runtime/runtime.cjs';
|
|
35
|
-
export { TraceCapture, TraceCaptureOptions, TraceDispatchResult, TraceEvent, TraceInput, TraceLevel, TraceProcess, TraceWaitOptions, clearTraceHubForTests, createTraceCapture, getTraceEvents
|
|
36
|
+
export { TraceCapture, TraceCaptureOptions, TraceDispatchResult, TraceEvent, TraceInput, TraceLevel, TraceProcess, TraceWaitOptions, clearTraceHubForTests, createTraceCapture, getTraceEvents$, setRendererTraceEnabled, setRendererTraceTransport } from './tracing/trace_hub.cjs';
|
|
36
37
|
export { FrameworkTracer, MainTracer, RendererTracer, TestTracer, TraceProvider, TraceProviderConfiguration, TraceProviderMode, TraceRuntime } from './tracing/trace_provider.cjs';
|
|
37
38
|
export { Navigation, NavigationEntry, getNavigation, go, goback, goto } from './navigation/index.cjs';
|
|
38
39
|
export { Ipc, getIpc } from './ipc/index.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export { SchemaValidator } from './validation/schema_validator.js';
|
|
|
12
12
|
export { MiddlewareResolver } from './middleware/middleware_resolver.js';
|
|
13
13
|
export { buildMiddlewareContext, executeMiddleware } from './middleware/middleware_pipeline.js';
|
|
14
14
|
export { ControllerResolver, buildControllerArgs } from './controller/controller_resolver.js';
|
|
15
|
+
export { ControllerLifecycle, disposeControllerLifecycle } from './controller/controller_lifecycle.js';
|
|
15
16
|
export { generatePreload } from './codegen/preload_generator.js';
|
|
16
17
|
export { generateTypes } from './codegen/type_generator.js';
|
|
17
18
|
export { generateTestMock } from './codegen/test_mock_generator.js';
|
|
@@ -32,7 +33,7 @@ export { YamlWatcher } from './dev/yaml_watcher.js';
|
|
|
32
33
|
export { GetContainerOptions, clearContainerRegistryForTests, getContainer } from './runtime/get_container.js';
|
|
33
34
|
export { clearApplicationRootForTests, getApplicationRoot, setApplicationRoot } from './runtime/application_root.js';
|
|
34
35
|
export { RegisterRuntimeRouter, RuntimeOptions, RuntimeResult, runtime } from './runtime/runtime.js';
|
|
35
|
-
export { TraceCapture, TraceCaptureOptions, TraceDispatchResult, TraceEvent, TraceInput, TraceLevel, TraceProcess, TraceWaitOptions, clearTraceHubForTests, createTraceCapture, getTraceEvents
|
|
36
|
+
export { TraceCapture, TraceCaptureOptions, TraceDispatchResult, TraceEvent, TraceInput, TraceLevel, TraceProcess, TraceWaitOptions, clearTraceHubForTests, createTraceCapture, getTraceEvents$, setRendererTraceEnabled, setRendererTraceTransport } from './tracing/trace_hub.js';
|
|
36
37
|
export { FrameworkTracer, MainTracer, RendererTracer, TestTracer, TraceProvider, TraceProviderConfiguration, TraceProviderMode, TraceRuntime } from './tracing/trace_provider.js';
|
|
37
38
|
export { Navigation, NavigationEntry, getNavigation, go, goback, goto } from './navigation/index.js';
|
|
38
39
|
export { Ipc, getIpc } from './ipc/index.js';
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { parseViews, parseViewsFile } from "./parser/index.js";
|
|
|
5
5
|
import { WoodRouter } from "./router/index.js";
|
|
6
6
|
import { SchemaValidator } from "./validation/index.js";
|
|
7
7
|
import { MiddlewareResolver, buildMiddlewareContext, executeMiddleware } from "./middleware/index.js";
|
|
8
|
-
import { ControllerResolver, buildControllerArgs } from "./controller/index.js";
|
|
8
|
+
import { ControllerResolver, buildControllerArgs, disposeControllerLifecycle } from "./controller/index.js";
|
|
9
9
|
import { generatePreload } from "./codegen/index.js";
|
|
10
10
|
import { generateTypes } from "./codegen/index.js";
|
|
11
11
|
import { generateTestMock } from "./codegen/index.js";
|
|
@@ -51,7 +51,9 @@ import {
|
|
|
51
51
|
TraceCapture,
|
|
52
52
|
clearTraceHubForTests,
|
|
53
53
|
createTraceCapture,
|
|
54
|
-
getTraceEvents
|
|
54
|
+
getTraceEvents$,
|
|
55
|
+
setRendererTraceEnabled,
|
|
56
|
+
setRendererTraceTransport
|
|
55
57
|
} from "./tracing/index.js";
|
|
56
58
|
export {
|
|
57
59
|
BackendBridge,
|
|
@@ -86,6 +88,7 @@ export {
|
|
|
86
88
|
clearContainerRegistryForTests,
|
|
87
89
|
clearTraceHubForTests,
|
|
88
90
|
createTraceCapture,
|
|
91
|
+
disposeControllerLifecycle,
|
|
89
92
|
executeMiddleware,
|
|
90
93
|
generateControllerRegistration,
|
|
91
94
|
generatePreload,
|
|
@@ -116,6 +119,8 @@ export {
|
|
|
116
119
|
resolveWoodRemoteDebuggingPort,
|
|
117
120
|
runtime,
|
|
118
121
|
setApplicationRoot,
|
|
122
|
+
setRendererTraceEnabled,
|
|
123
|
+
setRendererTraceTransport,
|
|
119
124
|
startBackendLoop,
|
|
120
125
|
writeWoodDevMetadata
|
|
121
126
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// @noego/wood — Declarative Electron desktop apps using the noego ecosystem\n\n// Types\nexport type {\n WoodConfig,\n WindowDef,\n DevConfig,\n ElectronBuilderConfig,\n OperationDef,\n RawOperationsDocument,\n RawModuleDef,\n RawOperationEntry,\n RawModuleOperationEntry,\n ViewDef,\n RawViewsDocument,\n RawViewEntry,\n ParameterDef,\n IpcContext,\n WoodMiddlewareContext,\n WoodMiddlewareFn,\n RequestData,\n ControllerArgs,\n LoaderResult,\n BridgeMessage,\n BridgeRequest,\n BridgeResponse,\n BridgeReady,\n BridgePush,\n BridgeElectronApi,\n SerializedError,\n ContextMenuContext,\n ContextMenuItem,\n ContextMenuEvent,\n} from './types';\n\n// Errors\nexport { WoodAuthError, WoodValidationError, BackendRestartingError } from './types/index.js';\n\n// Config\nexport { parseConfig } from './config/index.js';\n\n// Parsers\nexport { parseOperations, parseOperationsFile } from './parser/index.js';\nexport { parseViews, parseViewsFile } from './parser/index.js';\n\n// Router\nexport { WoodRouter } from './router/index.js';\n\n// Validation\nexport { SchemaValidator } from './validation/index.js';\n\n// Middleware\nexport { MiddlewareResolver, buildMiddlewareContext, executeMiddleware } from './middleware/index.js';\n\n// Controller\nexport { ControllerResolver, buildControllerArgs } from './controller/index.js';\n\n// Codegen\nexport { generatePreload } from './codegen/index.js';\nexport { generateTypes } from './codegen/index.js';\nexport { generateTestMock } from './codegen/index.js';\nexport { generateControllerRegistration } from './codegen/index.js';\nexport type { ControllerRegistrationOptions } from './codegen/index.js';\nexport { generateRuntime } from './codegen/index.js';\nexport type { RuntimeGeneratorOptions } from './codegen/index.js';\nexport { generateRendererViewManifest } from './codegen/index.js';\nexport type { RendererViewManifestGeneratorOptions } from './codegen/index.js';\nexport { generateRendererControllerRegistration } from './codegen/index.js';\nexport type { RendererControllerRegistrationOptions } from './codegen/index.js';\nexport { generateRendererApp } from './codegen/index.js';\nexport type { RendererAppGeneratorOptions } from './codegen/index.js';\n\n// Window\nexport { WindowManager, WindowStateStore } from './window/index.js';\nexport type { ScreenLike, WindowBounds } from './window/index.js';\n\n// Loader\nexport { LoaderRunner } from './loader/index.js';\n\n// Bridge\nexport { BackendBridge, startBackendLoop, pushEvent } from './bridge/index.js';\n\n// Dev\nexport {\n WoodDevServer,\n BackendWatcher,\n YamlWatcher,\n DEFAULT_WOOD_REMOTE_DEBUGGING_PORT,\n WOOD_DEV_DIRECTORY,\n WOOD_DEV_METADATA_BASENAME,\n resolveWoodRemoteDebuggingPort,\n resolveWoodDevDirectory,\n resolveWoodDevMetadataPath,\n writeWoodDevMetadata,\n readWoodDevMetadata,\n removeWoodDevMetadata,\n} from './dev/index.js';\nexport type { WoodDevMetadata } from './dev/index.js';\n\n// Runtime\nexport {\n getContainer,\n clearContainerRegistryForTests,\n getApplicationRoot,\n setApplicationRoot,\n clearApplicationRootForTests,\n runtime,\n} from './runtime/index.js';\nexport type {\n GetContainerOptions,\n RuntimeOptions,\n RuntimeResult,\n RegisterRuntimeRouter,\n} from './runtime';\n\n// Navigation\nexport { Navigation, getNavigation, go, goto, goback } from './navigation/index.js';\nexport type { NavigationEntry } from './navigation/index.js';\n\n// Isomorphic IPC API\nexport { Ipc, getIpc } from './ipc/index.js';\nexport type { IpcPushOptions } from './ipc/index.js';\n\n// Tracing\nexport {\n FrameworkTracer,\n MainTracer,\n RendererTracer,\n TestTracer,\n TraceProvider,\n TraceProviderConfiguration,\n TraceCapture,\n clearTraceHubForTests,\n createTraceCapture,\n getTraceEvents$,\n} from './tracing/index.js';\nexport type {\n TraceCaptureOptions,\n TraceDispatchResult,\n TraceEvent,\n TraceInput,\n TraceLevel,\n TraceProcess,\n TraceProviderMode,\n TraceRuntime,\n TraceWaitOptions,\n} from './tracing/index.js';\n\n// Testing — available via '@noego/wood/testing' subpath export.\n// Not re-exported here to avoid pulling vitest into production builds.\n"],"mappings":"AAoCA,SAAS,eAAe,qBAAqB,8BAA8B;AAG3E,SAAS,mBAAmB;AAG5B,SAAS,iBAAiB,2BAA2B;AACrD,SAAS,YAAY,sBAAsB;AAG3C,SAAS,kBAAkB;AAG3B,SAAS,uBAAuB;AAGhC,SAAS,oBAAoB,wBAAwB,yBAAyB;AAG9E,SAAS,oBAAoB,
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// @noego/wood — Declarative Electron desktop apps using the noego ecosystem\n\n// Types\nexport type {\n WoodConfig,\n WindowDef,\n DevConfig,\n ElectronBuilderConfig,\n OperationDef,\n RawOperationsDocument,\n RawModuleDef,\n RawOperationEntry,\n RawModuleOperationEntry,\n ViewDef,\n RawViewsDocument,\n RawViewEntry,\n ParameterDef,\n IpcContext,\n WoodMiddlewareContext,\n WoodMiddlewareFn,\n RequestData,\n ControllerArgs,\n LoaderResult,\n BridgeMessage,\n BridgeRequest,\n BridgeResponse,\n BridgeReady,\n BridgePush,\n BridgeElectronApi,\n SerializedError,\n ContextMenuContext,\n ContextMenuItem,\n ContextMenuEvent,\n} from './types';\n\n// Errors\nexport { WoodAuthError, WoodValidationError, BackendRestartingError } from './types/index.js';\n\n// Config\nexport { parseConfig } from './config/index.js';\n\n// Parsers\nexport { parseOperations, parseOperationsFile } from './parser/index.js';\nexport { parseViews, parseViewsFile } from './parser/index.js';\n\n// Router\nexport { WoodRouter } from './router/index.js';\n\n// Validation\nexport { SchemaValidator } from './validation/index.js';\n\n// Middleware\nexport { MiddlewareResolver, buildMiddlewareContext, executeMiddleware } from './middleware/index.js';\n\n// Controller\nexport { ControllerResolver, buildControllerArgs, disposeControllerLifecycle } from './controller/index.js';\nexport type { ControllerLifecycle } from './controller/index.js';\n\n// Codegen\nexport { generatePreload } from './codegen/index.js';\nexport { generateTypes } from './codegen/index.js';\nexport { generateTestMock } from './codegen/index.js';\nexport { generateControllerRegistration } from './codegen/index.js';\nexport type { ControllerRegistrationOptions } from './codegen/index.js';\nexport { generateRuntime } from './codegen/index.js';\nexport type { RuntimeGeneratorOptions } from './codegen/index.js';\nexport { generateRendererViewManifest } from './codegen/index.js';\nexport type { RendererViewManifestGeneratorOptions } from './codegen/index.js';\nexport { generateRendererControllerRegistration } from './codegen/index.js';\nexport type { RendererControllerRegistrationOptions } from './codegen/index.js';\nexport { generateRendererApp } from './codegen/index.js';\nexport type { RendererAppGeneratorOptions } from './codegen/index.js';\n\n// Window\nexport { WindowManager, WindowStateStore } from './window/index.js';\nexport type { ScreenLike, WindowBounds } from './window/index.js';\n\n// Loader\nexport { LoaderRunner } from './loader/index.js';\n\n// Bridge\nexport { BackendBridge, startBackendLoop, pushEvent } from './bridge/index.js';\n\n// Dev\nexport {\n WoodDevServer,\n BackendWatcher,\n YamlWatcher,\n DEFAULT_WOOD_REMOTE_DEBUGGING_PORT,\n WOOD_DEV_DIRECTORY,\n WOOD_DEV_METADATA_BASENAME,\n resolveWoodRemoteDebuggingPort,\n resolveWoodDevDirectory,\n resolveWoodDevMetadataPath,\n writeWoodDevMetadata,\n readWoodDevMetadata,\n removeWoodDevMetadata,\n} from './dev/index.js';\nexport type { WoodDevMetadata } from './dev/index.js';\n\n// Runtime\nexport {\n getContainer,\n clearContainerRegistryForTests,\n getApplicationRoot,\n setApplicationRoot,\n clearApplicationRootForTests,\n runtime,\n} from './runtime/index.js';\nexport type {\n GetContainerOptions,\n RuntimeOptions,\n RuntimeResult,\n RegisterRuntimeRouter,\n} from './runtime';\n\n// Navigation\nexport { Navigation, getNavigation, go, goto, goback } from './navigation/index.js';\nexport type { NavigationEntry } from './navigation/index.js';\n\n// Isomorphic IPC API\nexport { Ipc, getIpc } from './ipc/index.js';\nexport type { IpcPushOptions } from './ipc/index.js';\n\n// Tracing\nexport {\n FrameworkTracer,\n MainTracer,\n RendererTracer,\n TestTracer,\n TraceProvider,\n TraceProviderConfiguration,\n TraceCapture,\n clearTraceHubForTests,\n createTraceCapture,\n getTraceEvents$,\n setRendererTraceEnabled,\n setRendererTraceTransport,\n} from './tracing/index.js';\nexport type {\n TraceCaptureOptions,\n TraceDispatchResult,\n TraceEvent,\n TraceInput,\n TraceLevel,\n TraceProcess,\n TraceProviderMode,\n TraceRuntime,\n TraceWaitOptions,\n} from './tracing/index.js';\n\n// Testing — available via '@noego/wood/testing' subpath export.\n// Not re-exported here to avoid pulling vitest into production builds.\n"],"mappings":"AAoCA,SAAS,eAAe,qBAAqB,8BAA8B;AAG3E,SAAS,mBAAmB;AAG5B,SAAS,iBAAiB,2BAA2B;AACrD,SAAS,YAAY,sBAAsB;AAG3C,SAAS,kBAAkB;AAG3B,SAAS,uBAAuB;AAGhC,SAAS,oBAAoB,wBAAwB,yBAAyB;AAG9E,SAAS,oBAAoB,qBAAqB,kCAAkC;AAIpF,SAAS,uBAAuB;AAChC,SAAS,qBAAqB;AAC9B,SAAS,wBAAwB;AACjC,SAAS,sCAAsC;AAE/C,SAAS,uBAAuB;AAEhC,SAAS,oCAAoC;AAE7C,SAAS,8CAA8C;AAEvD,SAAS,2BAA2B;AAIpC,SAAS,eAAe,wBAAwB;AAIhD,SAAS,oBAAoB;AAG7B,SAAS,eAAe,kBAAkB,iBAAiB;AAG3D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AASP,SAAS,YAAY,eAAe,IAAI,MAAM,cAAc;AAI5D,SAAS,KAAK,cAAc;AAI5B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
|
package/dist/main/index.cjs
CHANGED
|
@@ -38,6 +38,7 @@ var import_logger = require("@noego/logger");
|
|
|
38
38
|
var import_window_state_store = require("../window/window_state_store.js");
|
|
39
39
|
var import_get_container = require("../runtime/get_container.js");
|
|
40
40
|
var import_runtime = require("../runtime/runtime.js");
|
|
41
|
+
var import_tracing = require("../tracing/index.js");
|
|
41
42
|
var import_application_root = require("../runtime/application_root.js");
|
|
42
43
|
var import_renderer_log_dispatcher = require("../runtime/renderer_log_dispatcher.js");
|
|
43
44
|
var import_ipc = require("../ipc/index.js");
|
|
@@ -83,6 +84,8 @@ function startWoodMain(options) {
|
|
|
83
84
|
const windowState = new import_window_state_store.WindowStateStore();
|
|
84
85
|
const windows = /* @__PURE__ */ new Map();
|
|
85
86
|
let mainWindow = null;
|
|
87
|
+
let beforeQuitCleanupComplete = false;
|
|
88
|
+
let beforeQuitCleanupPromise = null;
|
|
86
89
|
let runtimeContext = null;
|
|
87
90
|
let mainBootCleanup;
|
|
88
91
|
for (const stream of [process.stdout, process.stderr]) {
|
|
@@ -302,11 +305,32 @@ function startWoodMain(options) {
|
|
|
302
305
|
} else {
|
|
303
306
|
void win.loadFile(rendererFile);
|
|
304
307
|
}
|
|
308
|
+
if (options.traceTransport === "messageport" && options.rendererTraceEnabled === true) {
|
|
309
|
+
const { port1, port2 } = new import_electron.MessageChannelMain();
|
|
310
|
+
const portHandler = (event) => {
|
|
311
|
+
(0, import_tracing.dispatchRendererTracePayload)(event.data);
|
|
312
|
+
};
|
|
313
|
+
port1.on("message", portHandler);
|
|
314
|
+
port1.start();
|
|
315
|
+
win.webContents.once("did-finish-load", () => {
|
|
316
|
+
if (!win.isDestroyed()) {
|
|
317
|
+
win.webContents.postMessage("__trace-port", null, [port2]);
|
|
318
|
+
logger.info("trace messageport sent to renderer", { windowId });
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
win.on("closed", () => {
|
|
322
|
+
port1.off("message", portHandler);
|
|
323
|
+
port1.close();
|
|
324
|
+
});
|
|
325
|
+
}
|
|
305
326
|
win.on("closed", () => {
|
|
306
327
|
windows.delete(windowId);
|
|
307
328
|
if (windowId === "main") {
|
|
308
329
|
mainWindow = null;
|
|
309
330
|
}
|
|
331
|
+
if (windows.size === 0) {
|
|
332
|
+
import_electron.app.quit();
|
|
333
|
+
}
|
|
310
334
|
});
|
|
311
335
|
logger.info("window created", { windowId });
|
|
312
336
|
return win;
|
|
@@ -377,6 +401,9 @@ function startWoodMain(options) {
|
|
|
377
401
|
controllersDir: resolveRuntimePath(options.controllersDir),
|
|
378
402
|
middlewareDir: resolveRuntimePath(options.middlewareDir),
|
|
379
403
|
...options.traceMinLevel ? { traceMinLevel: options.traceMinLevel } : {},
|
|
404
|
+
...typeof options.rendererTraceEnabled === "boolean" ? { rendererTraceEnabled: options.rendererTraceEnabled } : {},
|
|
405
|
+
...options.rendererTraceMinLevel ? { rendererTraceMinLevel: options.rendererTraceMinLevel } : {},
|
|
406
|
+
...options.traceTransport === "messageport" ? { enableRendererTraceBridge: false } : {},
|
|
380
407
|
onLoad: options.onLoad ?? (async () => {
|
|
381
408
|
throw new Error('Reserved channel "__load" is not configured for this app.');
|
|
382
409
|
}),
|
|
@@ -461,30 +488,48 @@ function startWoodMain(options) {
|
|
|
461
488
|
stack: error instanceof Error ? error.stack : void 0
|
|
462
489
|
});
|
|
463
490
|
});
|
|
464
|
-
|
|
491
|
+
const destroyWindowsForQuit = () => {
|
|
492
|
+
for (const [id, win] of windows) {
|
|
493
|
+
if (!win.isDestroyed()) {
|
|
494
|
+
win.destroy();
|
|
495
|
+
logger.debug("destroyed window on quit", { windowId: id });
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
windows.clear();
|
|
499
|
+
};
|
|
500
|
+
const runBeforeQuitCleanup = async () => {
|
|
501
|
+
(0, import_shared.clearIpcPushSender)();
|
|
502
|
+
if (mainBootCleanup) {
|
|
503
|
+
await mainBootCleanup();
|
|
504
|
+
}
|
|
505
|
+
if (options.onBeforeQuit) {
|
|
506
|
+
await options.onBeforeQuit(runtimeContext);
|
|
507
|
+
}
|
|
508
|
+
};
|
|
509
|
+
import_electron.app.on("before-quit", (event) => {
|
|
465
510
|
if (!runtimeContext) {
|
|
466
511
|
return;
|
|
467
512
|
}
|
|
468
|
-
|
|
513
|
+
if (beforeQuitCleanupComplete) {
|
|
514
|
+
destroyWindowsForQuit();
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
event.preventDefault();
|
|
518
|
+
if (beforeQuitCleanupPromise) {
|
|
519
|
+
return;
|
|
520
|
+
}
|
|
521
|
+
beforeQuitCleanupPromise = (async () => {
|
|
469
522
|
try {
|
|
470
|
-
|
|
471
|
-
if (mainBootCleanup) {
|
|
472
|
-
await mainBootCleanup();
|
|
473
|
-
}
|
|
474
|
-
if (options.onBeforeQuit) {
|
|
475
|
-
await options.onBeforeQuit(runtimeContext);
|
|
476
|
-
}
|
|
523
|
+
await runBeforeQuitCleanup();
|
|
477
524
|
} catch (error) {
|
|
478
525
|
logger.warn("before-quit handler failed", { error: toErrorMessage(error) });
|
|
526
|
+
} finally {
|
|
527
|
+
beforeQuitCleanupComplete = true;
|
|
528
|
+
beforeQuitCleanupPromise = null;
|
|
479
529
|
}
|
|
530
|
+
destroyWindowsForQuit();
|
|
531
|
+
import_electron.app.quit();
|
|
480
532
|
})();
|
|
481
|
-
for (const [id, win] of windows) {
|
|
482
|
-
if (!win.isDestroyed()) {
|
|
483
|
-
win.destroy();
|
|
484
|
-
logger.debug("destroyed window on quit", { windowId: id });
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
windows.clear();
|
|
488
533
|
});
|
|
489
534
|
import_electron.app.on("window-all-closed", () => {
|
|
490
535
|
import_electron.app.quit();
|