@noego/wood 0.6.2 → 0.7.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 +7 -0
- package/dist/browser-test-setup.cjs +29 -0
- package/dist/browser-test-setup.cjs.map +1 -0
- package/dist/browser-test-setup.d.cts +8 -0
- package/dist/browser-test-setup.d.ts +8 -0
- package/dist/browser-test-setup.js +9 -0
- package/dist/browser-test-setup.js.map +1 -0
- package/dist/client/global_polyfill.d.cts +1 -0
- package/dist/client/global_polyfill.d.ts +1 -0
- package/dist/client/index.cjs +7 -0
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.d.cts +7 -4
- package/dist/client/index.d.ts +7 -4
- package/dist/client/index.js +6 -1
- package/dist/client/index.js.map +1 -1
- package/dist/codegen/renderer_app_generator.cjs +97 -24
- package/dist/codegen/renderer_app_generator.cjs.map +1 -1
- package/dist/codegen/renderer_app_generator.js +97 -24
- package/dist/codegen/renderer_app_generator.js.map +1 -1
- package/dist/codegen/type_generator.cjs +9 -0
- package/dist/codegen/type_generator.cjs.map +1 -1
- package/dist/codegen/type_generator.js +9 -0
- package/dist/codegen/type_generator.js.map +1 -1
- package/dist/config/config_parser.cjs +10 -0
- package/dist/config/config_parser.cjs.map +1 -1
- package/dist/config/config_parser.js +10 -0
- package/dist/config/config_parser.js.map +1 -1
- package/dist/fetch.cjs +38 -0
- package/dist/fetch.cjs.map +1 -0
- package/dist/fetch.d.cts +7 -0
- package/dist/fetch.d.ts +7 -0
- package/dist/fetch.js +12 -0
- package/dist/fetch.js.map +1 -0
- package/dist/frontend/frontend_page.cjs +3 -3
- package/dist/frontend/frontend_page.cjs.map +1 -1
- package/dist/frontend/frontend_page.d.cts +1 -1
- package/dist/frontend/frontend_page.d.ts +1 -1
- package/dist/frontend/frontend_page.js +3 -3
- package/dist/frontend/frontend_page.js.map +1 -1
- package/dist/frontend/frontend_surface.cjs +31 -17
- package/dist/frontend/frontend_surface.cjs.map +1 -1
- package/dist/frontend/frontend_surface.d.cts +12 -2
- package/dist/frontend/frontend_surface.d.ts +12 -2
- package/dist/frontend/frontend_surface.js +37 -17
- package/dist/frontend/frontend_surface.js.map +1 -1
- package/dist/frontend/index.d.cts +2 -0
- package/dist/frontend/index.d.ts +2 -0
- package/dist/index.cjs +5 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +25 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/loader/index.cjs +19 -2
- package/dist/loader/index.cjs.map +1 -1
- package/dist/loader/index.d.cts +1 -0
- package/dist/loader/index.d.ts +1 -0
- package/dist/loader/index.js +19 -1
- package/dist/loader/index.js.map +1 -1
- package/dist/loader/loader_orchestration.cjs +82 -0
- package/dist/loader/loader_orchestration.cjs.map +1 -0
- package/dist/loader/loader_orchestration.d.cts +66 -0
- package/dist/loader/loader_orchestration.d.ts +66 -0
- package/dist/loader/loader_orchestration.js +51 -0
- package/dist/loader/loader_orchestration.js.map +1 -0
- package/dist/loader/loader_runner.cjs +46 -41
- package/dist/loader/loader_runner.cjs.map +1 -1
- package/dist/loader/loader_runner.d.cts +12 -6
- package/dist/loader/loader_runner.d.ts +12 -6
- package/dist/loader/loader_runner.js +50 -41
- package/dist/loader/loader_runner.js.map +1 -1
- package/dist/native_browser.types-BY2daUOS.d.ts +189 -0
- package/dist/native_browser.types-vWXtE4rM.d.cts +189 -0
- package/dist/navigation/index.cjs +15 -2
- package/dist/navigation/index.cjs.map +1 -1
- package/dist/navigation/index.d.cts +2 -0
- package/dist/navigation/index.d.ts +2 -0
- package/dist/navigation/index.js +8 -1
- package/dist/navigation/index.js.map +1 -1
- package/dist/runtime/get_container.cjs +2 -0
- package/dist/runtime/get_container.cjs.map +1 -1
- package/dist/runtime/get_container.js +2 -0
- package/dist/runtime/get_container.js.map +1 -1
- package/dist/runtime/index.cjs +5 -0
- package/dist/runtime/index.cjs.map +1 -1
- package/dist/runtime/index.d.cts +2 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.js +3 -0
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/runtime_capabilities.cjs +35 -0
- package/dist/runtime/runtime_capabilities.cjs.map +1 -0
- package/dist/runtime/runtime_capabilities.d.cts +6 -0
- package/dist/runtime/runtime_capabilities.d.ts +6 -0
- package/dist/runtime/runtime_capabilities.js +11 -0
- package/dist/runtime/runtime_capabilities.js.map +1 -0
- package/dist/runtime/runtime_module.cjs +2 -0
- package/dist/runtime/runtime_module.cjs.map +1 -1
- package/dist/runtime/runtime_module.js +2 -0
- package/dist/runtime/runtime_module.js.map +1 -1
- package/dist/test-wood.cjs +150 -0
- package/dist/test-wood.cjs.map +1 -0
- package/dist/test-wood.d.cts +62 -0
- package/dist/test-wood.d.ts +62 -0
- package/dist/test-wood.js +115 -0
- package/dist/test-wood.js.map +1 -0
- package/dist/testing/browser.cjs +92 -163
- package/dist/testing/browser.cjs.map +1 -1
- package/dist/testing/browser.d.cts +14 -13
- package/dist/testing/browser.d.ts +14 -13
- package/dist/testing/browser.js +88 -162
- package/dist/testing/browser.js.map +1 -1
- package/dist/testing/create_controller_harness.d.cts +2 -1
- package/dist/testing/create_controller_harness.d.ts +2 -1
- package/dist/testing/create_router_bridge.cjs +19 -15
- package/dist/testing/create_router_bridge.cjs.map +1 -1
- package/dist/testing/create_router_bridge.d.cts +8 -1
- package/dist/testing/create_router_bridge.d.ts +8 -1
- package/dist/testing/create_router_bridge.js +18 -15
- package/dist/testing/create_router_bridge.js.map +1 -1
- package/dist/testing/index.cjs +12 -4
- package/dist/testing/index.cjs.map +1 -1
- package/dist/testing/index.d.cts +11 -5
- package/dist/testing/index.d.ts +11 -5
- package/dist/testing/index.js +9 -3
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/native_browser/browser_pool.cjs +31 -0
- package/dist/testing/native_browser/browser_pool.cjs.map +1 -0
- package/dist/testing/native_browser/browser_pool.d.cts +1 -0
- package/dist/testing/native_browser/browser_pool.d.ts +1 -0
- package/dist/testing/native_browser/browser_pool.js +6 -0
- package/dist/testing/native_browser/browser_pool.js.map +1 -0
- package/dist/testing/native_browser/happy_dom_tab.cjs +107 -0
- package/dist/testing/native_browser/happy_dom_tab.cjs.map +1 -0
- package/dist/testing/native_browser/happy_dom_tab.d.cts +35 -0
- package/dist/testing/native_browser/happy_dom_tab.d.ts +35 -0
- package/dist/testing/native_browser/happy_dom_tab.js +73 -0
- package/dist/testing/native_browser/happy_dom_tab.js.map +1 -0
- package/dist/testing/native_browser/happy_dom_transfer.cjs +29 -0
- package/dist/testing/native_browser/happy_dom_transfer.cjs.map +1 -0
- package/dist/testing/native_browser/happy_dom_transfer.d.cts +1 -0
- package/dist/testing/native_browser/happy_dom_transfer.d.ts +1 -0
- package/dist/testing/native_browser/happy_dom_transfer.js +5 -0
- package/dist/testing/native_browser/happy_dom_transfer.js.map +1 -0
- package/dist/testing/native_browser/host_transport.cjs +89 -0
- package/dist/testing/native_browser/host_transport.cjs.map +1 -0
- package/dist/testing/native_browser/host_transport.d.cts +44 -0
- package/dist/testing/native_browser/host_transport.d.ts +44 -0
- package/dist/testing/native_browser/host_transport.js +65 -0
- package/dist/testing/native_browser/host_transport.js.map +1 -0
- package/dist/testing/native_browser/native_browser.types.cjs +17 -0
- package/dist/testing/native_browser/native_browser.types.cjs.map +1 -0
- package/dist/testing/native_browser/native_browser.types.d.cts +31 -0
- package/dist/testing/native_browser/native_browser.types.d.ts +31 -0
- package/dist/testing/native_browser/native_browser.types.js +1 -0
- package/dist/testing/native_browser/native_browser.types.js.map +1 -0
- package/dist/testing/native_browser/native_browser_environment.cjs +143 -0
- package/dist/testing/native_browser/native_browser_environment.cjs.map +1 -0
- package/dist/testing/native_browser/native_browser_environment.d.cts +36 -0
- package/dist/testing/native_browser/native_browser_environment.d.ts +36 -0
- package/dist/testing/native_browser/native_browser_environment.js +109 -0
- package/dist/testing/native_browser/native_browser_environment.js.map +1 -0
- package/dist/testing/native_browser/native_browser_lifecycle.cjs +31 -0
- package/dist/testing/native_browser/native_browser_lifecycle.cjs.map +1 -0
- package/dist/testing/native_browser/native_browser_lifecycle.d.cts +1 -0
- package/dist/testing/native_browser/native_browser_lifecycle.d.ts +1 -0
- package/dist/testing/native_browser/native_browser_lifecycle.js +6 -0
- package/dist/testing/native_browser/native_browser_lifecycle.js.map +1 -0
- package/dist/testing/native_browser/playwright_tab.cjs +124 -0
- package/dist/testing/native_browser/playwright_tab.cjs.map +1 -0
- package/dist/testing/native_browser/playwright_tab.d.cts +35 -0
- package/dist/testing/native_browser/playwright_tab.d.ts +35 -0
- package/dist/testing/native_browser/playwright_tab.js +100 -0
- package/dist/testing/native_browser/playwright_tab.js.map +1 -0
- package/dist/testing/native_browser/renderer_compilation.cjs +149 -0
- package/dist/testing/native_browser/renderer_compilation.cjs.map +1 -0
- package/dist/testing/native_browser/renderer_compilation.d.cts +35 -0
- package/dist/testing/native_browser/renderer_compilation.d.ts +35 -0
- package/dist/testing/native_browser/renderer_compilation.js +115 -0
- package/dist/testing/native_browser/renderer_compilation.js.map +1 -0
- package/dist/testing/native_browser/renderer_entry.cjs +148 -0
- package/dist/testing/native_browser/renderer_entry.cjs.map +1 -0
- package/dist/testing/native_browser/renderer_entry.d.cts +13 -0
- package/dist/testing/native_browser/renderer_entry.d.ts +13 -0
- package/dist/testing/native_browser/renderer_entry.js +114 -0
- package/dist/testing/native_browser/renderer_entry.js.map +1 -0
- package/dist/testing/registration_only_root.cjs +61 -5
- package/dist/testing/registration_only_root.cjs.map +1 -1
- package/dist/testing/registration_only_root.d.cts +25 -4
- package/dist/testing/registration_only_root.d.ts +25 -4
- package/dist/testing/registration_only_root.js +60 -5
- package/dist/testing/registration_only_root.js.map +1 -1
- package/dist/testing/runner_importer.cjs +75 -0
- package/dist/testing/runner_importer.cjs.map +1 -0
- package/dist/testing/runner_importer.d.cts +8 -0
- package/dist/testing/runner_importer.d.ts +8 -0
- package/dist/testing/runner_importer.js +41 -0
- package/dist/testing/runner_importer.js.map +1 -0
- package/dist/testing/test_wood_config.cjs +407 -273
- package/dist/testing/test_wood_config.cjs.map +1 -1
- package/dist/testing/test_wood_config.d.cts +18 -123
- package/dist/testing/test_wood_config.d.ts +18 -123
- package/dist/testing/test_wood_config.js +416 -271
- package/dist/testing/test_wood_config.js.map +1 -1
- package/dist/testing/wood_config_source.cjs +12 -0
- package/dist/testing/wood_config_source.cjs.map +1 -1
- package/dist/testing/wood_config_source.d.cts +10 -0
- package/dist/testing/wood_config_source.d.ts +10 -0
- package/dist/testing/wood_config_source.js +12 -0
- package/dist/testing/wood_config_source.js.map +1 -1
- package/dist/testing/wood_env_renderer.cjs +31 -4
- package/dist/testing/wood_env_renderer.cjs.map +1 -1
- package/dist/testing/wood_env_renderer.d.cts +14 -1
- package/dist/testing/wood_env_renderer.d.ts +14 -1
- package/dist/testing/wood_env_renderer.js +31 -4
- package/dist/testing/wood_env_renderer.js.map +1 -1
- package/dist/testing/wood_lazy_runtime.cjs +109 -0
- package/dist/testing/wood_lazy_runtime.cjs.map +1 -0
- package/dist/testing/wood_lazy_runtime.d.cts +36 -0
- package/dist/testing/wood_lazy_runtime.d.ts +36 -0
- package/dist/testing/wood_lazy_runtime.js +84 -0
- package/dist/testing/wood_lazy_runtime.js.map +1 -0
- package/dist/testing/wood_test_selection.cjs +34 -55
- package/dist/testing/wood_test_selection.cjs.map +1 -1
- package/dist/testing/wood_test_selection.d.cts +18 -24
- package/dist/testing/wood_test_selection.d.ts +18 -24
- package/dist/testing/wood_test_selection.js +30 -54
- package/dist/testing/wood_test_selection.js.map +1 -1
- package/dist/testing-api.cjs +17 -0
- package/dist/testing-api.cjs.map +1 -0
- package/dist/testing-api.d.cts +18 -0
- package/dist/testing-api.d.ts +18 -0
- package/dist/testing-api.js +1 -0
- package/dist/testing-api.js.map +1 -0
- package/dist/types/config.cjs.map +1 -1
- package/dist/types/config.d.cts +4 -0
- package/dist/types/config.d.ts +4 -0
- package/docs/native-browser-testing.md +164 -0
- package/package.json +31 -5
- package/src/components/NavigationShell.browser.test.ts +10 -10
- package/src/components/NavigationShell.cleanup.browser.test.ts +57 -0
- package/src/components/NavigationShell.scopes.browser.test.ts +5 -5
- package/src/components/NavigationShell.svelte +50 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/runtime/get_container.ts"],"sourcesContent":["import { createContainer } from '@noego/ioc';\nimport type { IContainer } from '@noego/ioc';\nimport { getLogger } from '@noego/logger';\n\nconst logger = getLogger('wood:runtime:container');\n\nconst CONTAINER_REGISTRY_SYMBOL = Symbol.for('@noego/wood.container.registry');\n\nexport interface GetContainerOptions {\n /** Scope key for the container instance. Defaults to process.cwd(). */\n scope?: string;\n /** Called only when a new scoped container is created. */\n configure?: (container: any) => void;\n}\n\nexport interface CreateWoodRootOptions {\n /** Applied to the fresh root before it is returned. */\n configure?: (container: IContainer) => void;\n}\n\n/**\n * Create an explicit Wood composition root: a fresh real `@noego/ioc`\n * container owned by the caller. This is the canonical construction path —\n * runtime boot, tests, and tools receive/create a root explicitly and pass\n * it down; operation/renderer scopes are children of it.\n *\n * Decorator metadata uses `Symbol.for(...)` keys and the global\n * reflect-metadata registry, so consumer-decorated classes resolve\n * correctly regardless of which package instance created the container —\n * the old `createRequire` consumer-package resolution is unnecessary.\n */\nexport function createWoodRoot(options: CreateWoodRootOptions = {}): IContainer {\n const root = createContainer() as IContainer;\n options.configure?.(root);\n return root;\n}\n\ntype ContainerRegistry = Map<string, any>;\n\nfunction registry(): ContainerRegistry {\n const globalObj = globalThis as typeof globalThis & {\n [CONTAINER_REGISTRY_SYMBOL]?: ContainerRegistry;\n };\n\n if (!globalObj[CONTAINER_REGISTRY_SYMBOL]) {\n globalObj[CONTAINER_REGISTRY_SYMBOL] = new Map<string, any>();\n logger.info('container registry created', { symbol: CONTAINER_REGISTRY_SYMBOL.toString() });\n }\n\n return globalObj[CONTAINER_REGISTRY_SYMBOL]!;\n}\n\n/**\n * COMPAT: return a process-global scoped container from the registry.\n *\n * The canonical architecture owns an explicit root (see createWoodRoot);\n * this global accessor remains as a runtime-boundary convenience while\n * consumers migrate. Note its known trap: `configure` runs only on first\n * creation for a scope key.\n */\nexport function getContainer(options: GetContainerOptions = {}): any {\n const scope = options.scope ?? process.cwd();\n const containers = registry();\n\n const existing = containers.get(scope);\n if (existing) {\n logger.info('container reused', { scope });\n return existing;\n }\n\n const created = createWoodRoot();\n containers.set(scope, created);\n logger.info('container created', { scope });\n\n if (options.configure) {\n options.configure(created);\n logger.info('container configured', { scope });\n }\n\n return created;\n}\n\nexport function clearContainerRegistryForTests(): void {\n const containers = registry();\n containers.clear();\n logger.info('container registry cleared');\n}\n"],"mappings":"AAAA,SAAS,uBAAuB;AAEhC,SAAS,iBAAiB;
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/get_container.ts"],"sourcesContent":["import { createContainer } from '@noego/ioc';\nimport type { IContainer } from '@noego/ioc';\nimport { getLogger } from '@noego/logger';\nimport { installRuntimeCapabilities } from './runtime_capabilities.js';\n\nconst logger = getLogger('wood:runtime:container');\n\nconst CONTAINER_REGISTRY_SYMBOL = Symbol.for('@noego/wood.container.registry');\n\nexport interface GetContainerOptions {\n /** Scope key for the container instance. Defaults to process.cwd(). */\n scope?: string;\n /** Called only when a new scoped container is created. */\n configure?: (container: any) => void;\n}\n\nexport interface CreateWoodRootOptions {\n /** Applied to the fresh root before it is returned. */\n configure?: (container: IContainer) => void;\n}\n\n/**\n * Create an explicit Wood composition root: a fresh real `@noego/ioc`\n * container owned by the caller. This is the canonical construction path —\n * runtime boot, tests, and tools receive/create a root explicitly and pass\n * it down; operation/renderer scopes are children of it.\n *\n * Decorator metadata uses `Symbol.for(...)` keys and the global\n * reflect-metadata registry, so consumer-decorated classes resolve\n * correctly regardless of which package instance created the container —\n * the old `createRequire` consumer-package resolution is unnecessary.\n */\nexport function createWoodRoot(options: CreateWoodRootOptions = {}): IContainer {\n const root = createContainer() as IContainer;\n installRuntimeCapabilities(root);\n options.configure?.(root);\n return root;\n}\n\ntype ContainerRegistry = Map<string, any>;\n\nfunction registry(): ContainerRegistry {\n const globalObj = globalThis as typeof globalThis & {\n [CONTAINER_REGISTRY_SYMBOL]?: ContainerRegistry;\n };\n\n if (!globalObj[CONTAINER_REGISTRY_SYMBOL]) {\n globalObj[CONTAINER_REGISTRY_SYMBOL] = new Map<string, any>();\n logger.info('container registry created', { symbol: CONTAINER_REGISTRY_SYMBOL.toString() });\n }\n\n return globalObj[CONTAINER_REGISTRY_SYMBOL]!;\n}\n\n/**\n * COMPAT: return a process-global scoped container from the registry.\n *\n * The canonical architecture owns an explicit root (see createWoodRoot);\n * this global accessor remains as a runtime-boundary convenience while\n * consumers migrate. Note its known trap: `configure` runs only on first\n * creation for a scope key.\n */\nexport function getContainer(options: GetContainerOptions = {}): any {\n const scope = options.scope ?? process.cwd();\n const containers = registry();\n\n const existing = containers.get(scope);\n if (existing) {\n logger.info('container reused', { scope });\n return existing;\n }\n\n const created = createWoodRoot();\n containers.set(scope, created);\n logger.info('container created', { scope });\n\n if (options.configure) {\n options.configure(created);\n logger.info('container configured', { scope });\n }\n\n return created;\n}\n\nexport function clearContainerRegistryForTests(): void {\n const containers = registry();\n containers.clear();\n logger.info('container registry cleared');\n}\n"],"mappings":"AAAA,SAAS,uBAAuB;AAEhC,SAAS,iBAAiB;AAC1B,SAAS,kCAAkC;AAE3C,MAAM,SAAS,UAAU,wBAAwB;AAEjD,MAAM,4BAA4B,uBAAO,IAAI,gCAAgC;AAyBtE,SAAS,eAAe,UAAiC,CAAC,GAAe;AAC9E,QAAM,OAAO,gBAAgB;AAC7B,6BAA2B,IAAI;AAC/B,UAAQ,YAAY,IAAI;AACxB,SAAO;AACT;AAIA,SAAS,WAA8B;AACrC,QAAM,YAAY;AAIlB,MAAI,CAAC,UAAU,yBAAyB,GAAG;AACzC,cAAU,yBAAyB,IAAI,oBAAI,IAAiB;AAC5D,WAAO,KAAK,8BAA8B,EAAE,QAAQ,0BAA0B,SAAS,EAAE,CAAC;AAAA,EAC5F;AAEA,SAAO,UAAU,yBAAyB;AAC5C;AAUO,SAAS,aAAa,UAA+B,CAAC,GAAQ;AACnE,QAAM,QAAQ,QAAQ,SAAS,QAAQ,IAAI;AAC3C,QAAM,aAAa,SAAS;AAE5B,QAAM,WAAW,WAAW,IAAI,KAAK;AACrC,MAAI,UAAU;AACZ,WAAO,KAAK,oBAAoB,EAAE,MAAM,CAAC;AACzC,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,eAAe;AAC/B,aAAW,IAAI,OAAO,OAAO;AAC7B,SAAO,KAAK,qBAAqB,EAAE,MAAM,CAAC;AAE1C,MAAI,QAAQ,WAAW;AACrB,YAAQ,UAAU,OAAO;AACzB,WAAO,KAAK,wBAAwB,EAAE,MAAM,CAAC;AAAA,EAC/C;AAEA,SAAO;AACT;AAEO,SAAS,iCAAuC;AACrD,QAAM,aAAa,SAAS;AAC5B,aAAW,MAAM;AACjB,SAAO,KAAK,4BAA4B;AAC1C;","names":[]}
|
package/dist/runtime/index.cjs
CHANGED
|
@@ -19,6 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
var runtime_exports = {};
|
|
20
20
|
__export(runtime_exports, {
|
|
21
21
|
ControllerResolver: () => import_runtime_module.ControllerResolver,
|
|
22
|
+
FETCH_RUNTIME: () => import_fetch.FETCH_RUNTIME,
|
|
22
23
|
MiddlewareResolver: () => import_runtime_module.MiddlewareResolver,
|
|
23
24
|
RendererLogDispatcher: () => import_renderer_log_dispatcher.RendererLogDispatcher,
|
|
24
25
|
SchemaValidator: () => import_runtime_module.SchemaValidator,
|
|
@@ -31,6 +32,7 @@ __export(runtime_exports, {
|
|
|
31
32
|
dispatchRendererTracePayload: () => import_tracing.dispatchRendererTracePayload,
|
|
32
33
|
getApplicationRoot: () => import_application_root.getApplicationRoot,
|
|
33
34
|
getContainer: () => import_get_container.getContainer,
|
|
35
|
+
getFetchRuntime: () => import_fetch.getFetchRuntime,
|
|
34
36
|
getRendererConfigExtension: () => import_renderer_config_extension.getRendererConfigExtension,
|
|
35
37
|
getRendererLogDispatcher: () => import_renderer_log_dispatcher.getRendererLogDispatcher,
|
|
36
38
|
getRendererTraceBatchReceiver: () => import_renderer_trace_batch_receiver_registry.getRendererTraceBatchReceiver,
|
|
@@ -50,9 +52,11 @@ var import_renderer_trace_batch_receiver_registry = require("./renderer_trace_ba
|
|
|
50
52
|
var import_renderer_config_extension = require("./renderer_config_extension.js");
|
|
51
53
|
var import_tracing = require("../tracing/index.js");
|
|
52
54
|
var import_runtime_module = require("./runtime_module.js");
|
|
55
|
+
var import_fetch = require("../fetch.js");
|
|
53
56
|
// Annotate the CommonJS export names for ESM import in node:
|
|
54
57
|
0 && (module.exports = {
|
|
55
58
|
ControllerResolver,
|
|
59
|
+
FETCH_RUNTIME,
|
|
56
60
|
MiddlewareResolver,
|
|
57
61
|
RendererLogDispatcher,
|
|
58
62
|
SchemaValidator,
|
|
@@ -65,6 +69,7 @@ var import_runtime_module = require("./runtime_module.js");
|
|
|
65
69
|
dispatchRendererTracePayload,
|
|
66
70
|
getApplicationRoot,
|
|
67
71
|
getContainer,
|
|
72
|
+
getFetchRuntime,
|
|
68
73
|
getRendererConfigExtension,
|
|
69
74
|
getRendererLogDispatcher,
|
|
70
75
|
getRendererTraceBatchReceiver,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/runtime/index.ts"],"sourcesContent":["export { createWoodRoot, getContainer, clearContainerRegistryForTests } from './get_container.js';\nexport type { GetContainerOptions, CreateWoodRootOptions } from './get_container.js';\n\nexport {\n getApplicationRoot,\n setApplicationRoot,\n clearApplicationRootForTests,\n} from './application_root.js';\n\nexport { runtime } from './runtime.js';\nexport type { RuntimeOptions, RuntimeResult, RegisterRuntimeRouter } from './runtime.js';\n\nexport {\n getRendererLogDispatcher,\n RendererLogDispatcher,\n clearRendererLogDispatcherForTests,\n} from './renderer_log_dispatcher.js';\nexport type {\n RendererLogLevel,\n RendererLogEntry,\n RendererLogCallback,\n RendererLogDispatchResult,\n} from './renderer_log_dispatcher.js';\n\nexport {\n clearRendererTraceBatchReceiverForTests,\n getRendererTraceBatchReceiver,\n setRendererTraceBatchReceiver,\n} from './renderer_trace_batch_receiver_registry.js';\n\nexport {\n getRendererConfigExtension,\n resolveRendererConfigExtension,\n setRendererConfigExtension,\n} from './renderer_config_extension.js';\nexport type { RendererConfigExtension } from './renderer_config_extension.js';\n\nexport { dispatchRendererTracePayload } from '../tracing/index.js';\nexport type { TraceDispatchResult } from '../tracing/index.js';\n\nexport { installWoodRuntime, WoodRouter, SchemaValidator, MiddlewareResolver, ControllerResolver } from './runtime_module.js';\nexport type { WoodRuntimeModuleOptions } from './runtime_module.js';\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,2BAA6E;AAG7E,8BAIO;AAEP,qBAAwB;AAGxB,qCAIO;AAQP,oDAIO;AAEP,uCAIO;AAGP,qBAA6C;AAG7C,4BAAwG;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/index.ts"],"sourcesContent":["export { createWoodRoot, getContainer, clearContainerRegistryForTests } from './get_container.js';\nexport type { GetContainerOptions, CreateWoodRootOptions } from './get_container.js';\n\nexport {\n getApplicationRoot,\n setApplicationRoot,\n clearApplicationRootForTests,\n} from './application_root.js';\n\nexport { runtime } from './runtime.js';\nexport type { RuntimeOptions, RuntimeResult, RegisterRuntimeRouter } from './runtime.js';\n\nexport {\n getRendererLogDispatcher,\n RendererLogDispatcher,\n clearRendererLogDispatcherForTests,\n} from './renderer_log_dispatcher.js';\nexport type {\n RendererLogLevel,\n RendererLogEntry,\n RendererLogCallback,\n RendererLogDispatchResult,\n} from './renderer_log_dispatcher.js';\n\nexport {\n clearRendererTraceBatchReceiverForTests,\n getRendererTraceBatchReceiver,\n setRendererTraceBatchReceiver,\n} from './renderer_trace_batch_receiver_registry.js';\n\nexport {\n getRendererConfigExtension,\n resolveRendererConfigExtension,\n setRendererConfigExtension,\n} from './renderer_config_extension.js';\nexport type { RendererConfigExtension } from './renderer_config_extension.js';\n\nexport { dispatchRendererTracePayload } from '../tracing/index.js';\nexport type { TraceDispatchResult } from '../tracing/index.js';\n\nexport { installWoodRuntime, WoodRouter, SchemaValidator, MiddlewareResolver, ControllerResolver } from './runtime_module.js';\nexport type { WoodRuntimeModuleOptions } from './runtime_module.js';\n\nexport { getFetchRuntime, FETCH_RUNTIME } from '../fetch.js';\nexport type { FetchRuntime } from '../fetch.js';\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,2BAA6E;AAG7E,8BAIO;AAEP,qBAAwB;AAGxB,qCAIO;AAQP,oDAIO;AAEP,uCAIO;AAGP,qBAA6C;AAG7C,4BAAwG;AAGxG,mBAA+C;","names":[]}
|
package/dist/runtime/index.d.cts
CHANGED
|
@@ -6,7 +6,9 @@ export { clearRendererTraceBatchReceiverForTests, getRendererTraceBatchReceiver,
|
|
|
6
6
|
export { RendererConfigExtension, getRendererConfigExtension, resolveRendererConfigExtension, setRendererConfigExtension } from './renderer_config_extension.cjs';
|
|
7
7
|
export { T as TraceDispatchResult, o as dispatchRendererTracePayload } from '../trace_hub-Cpo_nVze.cjs';
|
|
8
8
|
export { WoodRuntimeModuleOptions, installWoodRuntime } from './runtime_module.cjs';
|
|
9
|
+
export { getFetchRuntime } from '../fetch.cjs';
|
|
9
10
|
export { ControllerResolver } from '../controller/controller_resolver.cjs';
|
|
11
|
+
export { FETCH_RUNTIME, FetchRuntime } from '@noego/runtime/fetch';
|
|
10
12
|
export { MiddlewareResolver } from '../middleware/middleware_resolver.cjs';
|
|
11
13
|
export { SchemaValidator } from '../validation/schema_validator.cjs';
|
|
12
14
|
export { WoodRouter } from '../router/wood_router.cjs';
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -6,7 +6,9 @@ export { clearRendererTraceBatchReceiverForTests, getRendererTraceBatchReceiver,
|
|
|
6
6
|
export { RendererConfigExtension, getRendererConfigExtension, resolveRendererConfigExtension, setRendererConfigExtension } from './renderer_config_extension.js';
|
|
7
7
|
export { T as TraceDispatchResult, o as dispatchRendererTracePayload } from '../trace_hub-Cpo_nVze.js';
|
|
8
8
|
export { WoodRuntimeModuleOptions, installWoodRuntime } from './runtime_module.js';
|
|
9
|
+
export { getFetchRuntime } from '../fetch.js';
|
|
9
10
|
export { ControllerResolver } from '../controller/controller_resolver.js';
|
|
11
|
+
export { FETCH_RUNTIME, FetchRuntime } from '@noego/runtime/fetch';
|
|
10
12
|
export { MiddlewareResolver } from '../middleware/middleware_resolver.js';
|
|
11
13
|
export { SchemaValidator } from '../validation/schema_validator.js';
|
|
12
14
|
export { WoodRouter } from '../router/wood_router.js';
|
package/dist/runtime/index.js
CHANGED
|
@@ -22,8 +22,10 @@ import {
|
|
|
22
22
|
} from "./renderer_config_extension.js";
|
|
23
23
|
import { dispatchRendererTracePayload } from "../tracing/index.js";
|
|
24
24
|
import { installWoodRuntime, WoodRouter, SchemaValidator, MiddlewareResolver, ControllerResolver } from "./runtime_module.js";
|
|
25
|
+
import { getFetchRuntime, FETCH_RUNTIME } from "../fetch.js";
|
|
25
26
|
export {
|
|
26
27
|
ControllerResolver,
|
|
28
|
+
FETCH_RUNTIME,
|
|
27
29
|
MiddlewareResolver,
|
|
28
30
|
RendererLogDispatcher,
|
|
29
31
|
SchemaValidator,
|
|
@@ -36,6 +38,7 @@ export {
|
|
|
36
38
|
dispatchRendererTracePayload,
|
|
37
39
|
getApplicationRoot,
|
|
38
40
|
getContainer,
|
|
41
|
+
getFetchRuntime,
|
|
39
42
|
getRendererConfigExtension,
|
|
40
43
|
getRendererLogDispatcher,
|
|
41
44
|
getRendererTraceBatchReceiver,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/runtime/index.ts"],"sourcesContent":["export { createWoodRoot, getContainer, clearContainerRegistryForTests } from './get_container.js';\nexport type { GetContainerOptions, CreateWoodRootOptions } from './get_container.js';\n\nexport {\n getApplicationRoot,\n setApplicationRoot,\n clearApplicationRootForTests,\n} from './application_root.js';\n\nexport { runtime } from './runtime.js';\nexport type { RuntimeOptions, RuntimeResult, RegisterRuntimeRouter } from './runtime.js';\n\nexport {\n getRendererLogDispatcher,\n RendererLogDispatcher,\n clearRendererLogDispatcherForTests,\n} from './renderer_log_dispatcher.js';\nexport type {\n RendererLogLevel,\n RendererLogEntry,\n RendererLogCallback,\n RendererLogDispatchResult,\n} from './renderer_log_dispatcher.js';\n\nexport {\n clearRendererTraceBatchReceiverForTests,\n getRendererTraceBatchReceiver,\n setRendererTraceBatchReceiver,\n} from './renderer_trace_batch_receiver_registry.js';\n\nexport {\n getRendererConfigExtension,\n resolveRendererConfigExtension,\n setRendererConfigExtension,\n} from './renderer_config_extension.js';\nexport type { RendererConfigExtension } from './renderer_config_extension.js';\n\nexport { dispatchRendererTracePayload } from '../tracing/index.js';\nexport type { TraceDispatchResult } from '../tracing/index.js';\n\nexport { installWoodRuntime, WoodRouter, SchemaValidator, MiddlewareResolver, ControllerResolver } from './runtime_module.js';\nexport type { WoodRuntimeModuleOptions } from './runtime_module.js';\n"],"mappings":"AAAA,SAAS,gBAAgB,cAAc,sCAAsC;AAG7E;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,eAAe;AAGxB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAQP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,oCAAoC;AAG7C,SAAS,oBAAoB,YAAY,iBAAiB,oBAAoB,0BAA0B;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/index.ts"],"sourcesContent":["export { createWoodRoot, getContainer, clearContainerRegistryForTests } from './get_container.js';\nexport type { GetContainerOptions, CreateWoodRootOptions } from './get_container.js';\n\nexport {\n getApplicationRoot,\n setApplicationRoot,\n clearApplicationRootForTests,\n} from './application_root.js';\n\nexport { runtime } from './runtime.js';\nexport type { RuntimeOptions, RuntimeResult, RegisterRuntimeRouter } from './runtime.js';\n\nexport {\n getRendererLogDispatcher,\n RendererLogDispatcher,\n clearRendererLogDispatcherForTests,\n} from './renderer_log_dispatcher.js';\nexport type {\n RendererLogLevel,\n RendererLogEntry,\n RendererLogCallback,\n RendererLogDispatchResult,\n} from './renderer_log_dispatcher.js';\n\nexport {\n clearRendererTraceBatchReceiverForTests,\n getRendererTraceBatchReceiver,\n setRendererTraceBatchReceiver,\n} from './renderer_trace_batch_receiver_registry.js';\n\nexport {\n getRendererConfigExtension,\n resolveRendererConfigExtension,\n setRendererConfigExtension,\n} from './renderer_config_extension.js';\nexport type { RendererConfigExtension } from './renderer_config_extension.js';\n\nexport { dispatchRendererTracePayload } from '../tracing/index.js';\nexport type { TraceDispatchResult } from '../tracing/index.js';\n\nexport { installWoodRuntime, WoodRouter, SchemaValidator, MiddlewareResolver, ControllerResolver } from './runtime_module.js';\nexport type { WoodRuntimeModuleOptions } from './runtime_module.js';\n\nexport { getFetchRuntime, FETCH_RUNTIME } from '../fetch.js';\nexport type { FetchRuntime } from '../fetch.js';\n"],"mappings":"AAAA,SAAS,gBAAgB,cAAc,sCAAsC;AAG7E;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,eAAe;AAGxB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAQP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,oCAAoC;AAG7C,SAAS,oBAAoB,YAAY,iBAAiB,oBAAoB,0BAA0B;AAGxG,SAAS,iBAAiB,qBAAqB;","names":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
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 runtime_capabilities_exports = {};
|
|
20
|
+
__export(runtime_capabilities_exports, {
|
|
21
|
+
installRuntimeCapabilities: () => installRuntimeCapabilities
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(runtime_capabilities_exports);
|
|
24
|
+
var import_ioc = require("@noego/ioc");
|
|
25
|
+
var import_fetch = require("@noego/runtime/fetch");
|
|
26
|
+
function installRuntimeCapabilities(root) {
|
|
27
|
+
if (!root.isRegistered(import_fetch.FETCH_RUNTIME)) {
|
|
28
|
+
root.registerFunction(import_fetch.FETCH_RUNTIME, import_fetch.nativeFetchRuntime, { loadAs: import_ioc.LoadAs.Singleton });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
32
|
+
0 && (module.exports = {
|
|
33
|
+
installRuntimeCapabilities
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=runtime_capabilities.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/runtime_capabilities.ts"],"sourcesContent":["import { LoadAs, type IContainer } from '@noego/ioc';\nimport { FETCH_RUNTIME, nativeFetchRuntime } from '@noego/runtime/fetch';\n\n/** Baseline host capabilities, independent of router or Electron startup. */\nexport function installRuntimeCapabilities(root: IContainer): void {\n if (!root.isRegistered(FETCH_RUNTIME)) {\n root.registerFunction(FETCH_RUNTIME, nativeFetchRuntime, { loadAs: LoadAs.Singleton });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAwC;AACxC,mBAAkD;AAG3C,SAAS,2BAA2B,MAAwB;AACjE,MAAI,CAAC,KAAK,aAAa,0BAAa,GAAG;AACrC,SAAK,iBAAiB,4BAAe,iCAAoB,EAAE,QAAQ,kBAAO,UAAU,CAAC;AAAA,EACvF;AACF;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { LoadAs } from "@noego/ioc";
|
|
2
|
+
import { FETCH_RUNTIME, nativeFetchRuntime } from "@noego/runtime/fetch";
|
|
3
|
+
function installRuntimeCapabilities(root) {
|
|
4
|
+
if (!root.isRegistered(FETCH_RUNTIME)) {
|
|
5
|
+
root.registerFunction(FETCH_RUNTIME, nativeFetchRuntime, { loadAs: LoadAs.Singleton });
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
installRuntimeCapabilities
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=runtime_capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/runtime_capabilities.ts"],"sourcesContent":["import { LoadAs, type IContainer } from '@noego/ioc';\nimport { FETCH_RUNTIME, nativeFetchRuntime } from '@noego/runtime/fetch';\n\n/** Baseline host capabilities, independent of router or Electron startup. */\nexport function installRuntimeCapabilities(root: IContainer): void {\n if (!root.isRegistered(FETCH_RUNTIME)) {\n root.registerFunction(FETCH_RUNTIME, nativeFetchRuntime, { loadAs: LoadAs.Singleton });\n }\n}\n"],"mappings":"AAAA,SAAS,cAA+B;AACxC,SAAS,eAAe,0BAA0B;AAG3C,SAAS,2BAA2B,MAAwB;AACjE,MAAI,CAAC,KAAK,aAAa,aAAa,GAAG;AACrC,SAAK,iBAAiB,eAAe,oBAAoB,EAAE,QAAQ,OAAO,UAAU,CAAC;AAAA,EACvF;AACF;","names":[]}
|
|
@@ -25,6 +25,7 @@ __export(runtime_module_exports, {
|
|
|
25
25
|
installWoodRuntime: () => installWoodRuntime
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(runtime_module_exports);
|
|
28
|
+
var import_runtime_capabilities = require("./runtime_capabilities.js");
|
|
28
29
|
var import_ioc = require("@noego/ioc");
|
|
29
30
|
var import_wood_router = require("../router/wood_router.js");
|
|
30
31
|
var import_schema_validator = require("../validation/schema_validator.js");
|
|
@@ -34,6 +35,7 @@ function installWoodRuntime(root, options) {
|
|
|
34
35
|
if (typeof root.isRegistered !== "function" || typeof root.registerFunction !== "function") {
|
|
35
36
|
throw new Error("Wood runtime requires an explicit IoC root; use createWoodRoot().");
|
|
36
37
|
}
|
|
38
|
+
(0, import_runtime_capabilities.installRuntimeCapabilities)(root);
|
|
37
39
|
if (!root.isRegistered(import_schema_validator.SchemaValidator)) root.registerFunction(import_schema_validator.SchemaValidator, () => new import_schema_validator.SchemaValidator());
|
|
38
40
|
if (!root.isRegistered(import_middleware_resolver.MiddlewareResolver)) root.registerFunction(import_middleware_resolver.MiddlewareResolver, () => new import_middleware_resolver.MiddlewareResolver(options.middlewareDir));
|
|
39
41
|
if (!root.isRegistered(import_controller_resolver.ControllerResolver)) root.registerFunction(import_controller_resolver.ControllerResolver, () => new import_controller_resolver.ControllerResolver(options.controllersDir, { mode: options.mode }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/runtime/runtime_module.ts"],"sourcesContent":["import { LoadAs, type IContainer } from '@noego/ioc';\nimport { WoodRouter } from '../router/wood_router.js';\nimport { SchemaValidator } from '../validation/schema_validator.js';\nimport { MiddlewareResolver } from '../middleware/middleware_resolver.js';\nimport { ControllerResolver } from '../controller/controller_resolver.js';\n\nexport interface WoodRuntimeModuleOptions {\n controllersDir: string;\n middlewareDir: string;\n mode?: 'bundled' | 'dev';\n registerRuntime(router: WoodRouter): void;\n}\n\n/**\n * Registration-only production module, also installed by testWood before\n * scenario overlays. Resolving WoodRouter starts the selected real pipeline.\n * Existing registrations remain authoritative; token identities are exact.\n */\nexport function installWoodRuntime(root: IContainer, options: WoodRuntimeModuleOptions): void {\n if (typeof root.isRegistered !== 'function' || typeof root.registerFunction !== 'function') {\n throw new Error('Wood runtime requires an explicit IoC root; use createWoodRoot().');\n }\n if (!root.isRegistered(SchemaValidator)) root.registerFunction(SchemaValidator, () => new SchemaValidator());\n if (!root.isRegistered(MiddlewareResolver)) root.registerFunction(MiddlewareResolver, () => new MiddlewareResolver(options.middlewareDir));\n if (!root.isRegistered(ControllerResolver)) root.registerFunction(ControllerResolver, () => new ControllerResolver(options.controllersDir, { mode: options.mode }));\n if (!root.isRegistered(WoodRouter)) {\n root.registerFunction(WoodRouter, (validator: SchemaValidator, middlewareResolver: MiddlewareResolver, controllerResolver: ControllerResolver) => {\n const router = new WoodRouter({ container: root, ...options, validator, middlewareResolver, controllerResolver });\n options.registerRuntime(router);\n router.validateControllers();\n router.precompileSchemas();\n return router;\n }, { loadAs: LoadAs.Scoped, param: [SchemaValidator, MiddlewareResolver, ControllerResolver] });\n }\n}\n\nexport { WoodRouter, SchemaValidator, MiddlewareResolver, ControllerResolver };\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAwC;AACxC,yBAA2B;AAC3B,8BAAgC;AAChC,iCAAmC;AACnC,iCAAmC;AAc5B,SAAS,mBAAmB,MAAkB,SAAyC;AAC5F,MAAI,OAAO,KAAK,iBAAiB,cAAc,OAAO,KAAK,qBAAqB,YAAY;AAC1F,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AACA,MAAI,CAAC,KAAK,aAAa,uCAAe,EAAG,MAAK,iBAAiB,yCAAiB,MAAM,IAAI,wCAAgB,CAAC;AAC3G,MAAI,CAAC,KAAK,aAAa,6CAAkB,EAAG,MAAK,iBAAiB,+CAAoB,MAAM,IAAI,8CAAmB,QAAQ,aAAa,CAAC;AACzI,MAAI,CAAC,KAAK,aAAa,6CAAkB,EAAG,MAAK,iBAAiB,+CAAoB,MAAM,IAAI,8CAAmB,QAAQ,gBAAgB,EAAE,MAAM,QAAQ,KAAK,CAAC,CAAC;AAClK,MAAI,CAAC,KAAK,aAAa,6BAAU,GAAG;AAClC,SAAK,iBAAiB,+BAAY,CAAC,WAA4B,oBAAwC,uBAA2C;AAChJ,YAAM,SAAS,IAAI,8BAAW,EAAE,WAAW,MAAM,GAAG,SAAS,WAAW,oBAAoB,mBAAmB,CAAC;AAChH,cAAQ,gBAAgB,MAAM;AAC9B,aAAO,oBAAoB;AAC3B,aAAO,kBAAkB;AACzB,aAAO;AAAA,IACT,GAAG,EAAE,QAAQ,kBAAO,QAAQ,OAAO,CAAC,yCAAiB,+CAAoB,6CAAkB,EAAE,CAAC;AAAA,EAChG;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/runtime_module.ts"],"sourcesContent":["import { installRuntimeCapabilities } from './runtime_capabilities.js';\nimport { LoadAs, type IContainer } from '@noego/ioc';\nimport { WoodRouter } from '../router/wood_router.js';\nimport { SchemaValidator } from '../validation/schema_validator.js';\nimport { MiddlewareResolver } from '../middleware/middleware_resolver.js';\nimport { ControllerResolver } from '../controller/controller_resolver.js';\n\nexport interface WoodRuntimeModuleOptions {\n controllersDir: string;\n middlewareDir: string;\n mode?: 'bundled' | 'dev';\n registerRuntime(router: WoodRouter): void;\n}\n\n/**\n * Registration-only production module, also installed by testWood before\n * scenario overlays. Resolving WoodRouter starts the selected real pipeline.\n * Existing registrations remain authoritative; token identities are exact.\n */\nexport function installWoodRuntime(root: IContainer, options: WoodRuntimeModuleOptions): void {\n if (typeof root.isRegistered !== 'function' || typeof root.registerFunction !== 'function') {\n throw new Error('Wood runtime requires an explicit IoC root; use createWoodRoot().');\n }\n installRuntimeCapabilities(root);\n if (!root.isRegistered(SchemaValidator)) root.registerFunction(SchemaValidator, () => new SchemaValidator());\n if (!root.isRegistered(MiddlewareResolver)) root.registerFunction(MiddlewareResolver, () => new MiddlewareResolver(options.middlewareDir));\n if (!root.isRegistered(ControllerResolver)) root.registerFunction(ControllerResolver, () => new ControllerResolver(options.controllersDir, { mode: options.mode }));\n if (!root.isRegistered(WoodRouter)) {\n root.registerFunction(WoodRouter, (validator: SchemaValidator, middlewareResolver: MiddlewareResolver, controllerResolver: ControllerResolver) => {\n const router = new WoodRouter({ container: root, ...options, validator, middlewareResolver, controllerResolver });\n options.registerRuntime(router);\n router.validateControllers();\n router.precompileSchemas();\n return router;\n }, { loadAs: LoadAs.Scoped, param: [SchemaValidator, MiddlewareResolver, ControllerResolver] });\n }\n}\n\nexport { WoodRouter, SchemaValidator, MiddlewareResolver, ControllerResolver };\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAA2C;AAC3C,iBAAwC;AACxC,yBAA2B;AAC3B,8BAAgC;AAChC,iCAAmC;AACnC,iCAAmC;AAc5B,SAAS,mBAAmB,MAAkB,SAAyC;AAC5F,MAAI,OAAO,KAAK,iBAAiB,cAAc,OAAO,KAAK,qBAAqB,YAAY;AAC1F,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AACA,8DAA2B,IAAI;AAC/B,MAAI,CAAC,KAAK,aAAa,uCAAe,EAAG,MAAK,iBAAiB,yCAAiB,MAAM,IAAI,wCAAgB,CAAC;AAC3G,MAAI,CAAC,KAAK,aAAa,6CAAkB,EAAG,MAAK,iBAAiB,+CAAoB,MAAM,IAAI,8CAAmB,QAAQ,aAAa,CAAC;AACzI,MAAI,CAAC,KAAK,aAAa,6CAAkB,EAAG,MAAK,iBAAiB,+CAAoB,MAAM,IAAI,8CAAmB,QAAQ,gBAAgB,EAAE,MAAM,QAAQ,KAAK,CAAC,CAAC;AAClK,MAAI,CAAC,KAAK,aAAa,6BAAU,GAAG;AAClC,SAAK,iBAAiB,+BAAY,CAAC,WAA4B,oBAAwC,uBAA2C;AAChJ,YAAM,SAAS,IAAI,8BAAW,EAAE,WAAW,MAAM,GAAG,SAAS,WAAW,oBAAoB,mBAAmB,CAAC;AAChH,cAAQ,gBAAgB,MAAM;AAC9B,aAAO,oBAAoB;AAC3B,aAAO,kBAAkB;AACzB,aAAO;AAAA,IACT,GAAG,EAAE,QAAQ,kBAAO,QAAQ,OAAO,CAAC,yCAAiB,+CAAoB,6CAAkB,EAAE,CAAC;AAAA,EAChG;AACF;","names":[]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { installRuntimeCapabilities } from "./runtime_capabilities.js";
|
|
1
2
|
import { LoadAs } from "@noego/ioc";
|
|
2
3
|
import { WoodRouter } from "../router/wood_router.js";
|
|
3
4
|
import { SchemaValidator } from "../validation/schema_validator.js";
|
|
@@ -7,6 +8,7 @@ function installWoodRuntime(root, options) {
|
|
|
7
8
|
if (typeof root.isRegistered !== "function" || typeof root.registerFunction !== "function") {
|
|
8
9
|
throw new Error("Wood runtime requires an explicit IoC root; use createWoodRoot().");
|
|
9
10
|
}
|
|
11
|
+
installRuntimeCapabilities(root);
|
|
10
12
|
if (!root.isRegistered(SchemaValidator)) root.registerFunction(SchemaValidator, () => new SchemaValidator());
|
|
11
13
|
if (!root.isRegistered(MiddlewareResolver)) root.registerFunction(MiddlewareResolver, () => new MiddlewareResolver(options.middlewareDir));
|
|
12
14
|
if (!root.isRegistered(ControllerResolver)) root.registerFunction(ControllerResolver, () => new ControllerResolver(options.controllersDir, { mode: options.mode }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/runtime/runtime_module.ts"],"sourcesContent":["import { LoadAs, type IContainer } from '@noego/ioc';\nimport { WoodRouter } from '../router/wood_router.js';\nimport { SchemaValidator } from '../validation/schema_validator.js';\nimport { MiddlewareResolver } from '../middleware/middleware_resolver.js';\nimport { ControllerResolver } from '../controller/controller_resolver.js';\n\nexport interface WoodRuntimeModuleOptions {\n controllersDir: string;\n middlewareDir: string;\n mode?: 'bundled' | 'dev';\n registerRuntime(router: WoodRouter): void;\n}\n\n/**\n * Registration-only production module, also installed by testWood before\n * scenario overlays. Resolving WoodRouter starts the selected real pipeline.\n * Existing registrations remain authoritative; token identities are exact.\n */\nexport function installWoodRuntime(root: IContainer, options: WoodRuntimeModuleOptions): void {\n if (typeof root.isRegistered !== 'function' || typeof root.registerFunction !== 'function') {\n throw new Error('Wood runtime requires an explicit IoC root; use createWoodRoot().');\n }\n if (!root.isRegistered(SchemaValidator)) root.registerFunction(SchemaValidator, () => new SchemaValidator());\n if (!root.isRegistered(MiddlewareResolver)) root.registerFunction(MiddlewareResolver, () => new MiddlewareResolver(options.middlewareDir));\n if (!root.isRegistered(ControllerResolver)) root.registerFunction(ControllerResolver, () => new ControllerResolver(options.controllersDir, { mode: options.mode }));\n if (!root.isRegistered(WoodRouter)) {\n root.registerFunction(WoodRouter, (validator: SchemaValidator, middlewareResolver: MiddlewareResolver, controllerResolver: ControllerResolver) => {\n const router = new WoodRouter({ container: root, ...options, validator, middlewareResolver, controllerResolver });\n options.registerRuntime(router);\n router.validateControllers();\n router.precompileSchemas();\n return router;\n }, { loadAs: LoadAs.Scoped, param: [SchemaValidator, MiddlewareResolver, ControllerResolver] });\n }\n}\n\nexport { WoodRouter, SchemaValidator, MiddlewareResolver, ControllerResolver };\n"],"mappings":"AAAA,SAAS,cAA+B;AACxC,SAAS,kBAAkB;AAC3B,SAAS,uBAAuB;AAChC,SAAS,0BAA0B;AACnC,SAAS,0BAA0B;AAc5B,SAAS,mBAAmB,MAAkB,SAAyC;AAC5F,MAAI,OAAO,KAAK,iBAAiB,cAAc,OAAO,KAAK,qBAAqB,YAAY;AAC1F,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AACA,MAAI,CAAC,KAAK,aAAa,eAAe,EAAG,MAAK,iBAAiB,iBAAiB,MAAM,IAAI,gBAAgB,CAAC;AAC3G,MAAI,CAAC,KAAK,aAAa,kBAAkB,EAAG,MAAK,iBAAiB,oBAAoB,MAAM,IAAI,mBAAmB,QAAQ,aAAa,CAAC;AACzI,MAAI,CAAC,KAAK,aAAa,kBAAkB,EAAG,MAAK,iBAAiB,oBAAoB,MAAM,IAAI,mBAAmB,QAAQ,gBAAgB,EAAE,MAAM,QAAQ,KAAK,CAAC,CAAC;AAClK,MAAI,CAAC,KAAK,aAAa,UAAU,GAAG;AAClC,SAAK,iBAAiB,YAAY,CAAC,WAA4B,oBAAwC,uBAA2C;AAChJ,YAAM,SAAS,IAAI,WAAW,EAAE,WAAW,MAAM,GAAG,SAAS,WAAW,oBAAoB,mBAAmB,CAAC;AAChH,cAAQ,gBAAgB,MAAM;AAC9B,aAAO,oBAAoB;AAC3B,aAAO,kBAAkB;AACzB,aAAO;AAAA,IACT,GAAG,EAAE,QAAQ,OAAO,QAAQ,OAAO,CAAC,iBAAiB,oBAAoB,kBAAkB,EAAE,CAAC;AAAA,EAChG;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/runtime_module.ts"],"sourcesContent":["import { installRuntimeCapabilities } from './runtime_capabilities.js';\nimport { LoadAs, type IContainer } from '@noego/ioc';\nimport { WoodRouter } from '../router/wood_router.js';\nimport { SchemaValidator } from '../validation/schema_validator.js';\nimport { MiddlewareResolver } from '../middleware/middleware_resolver.js';\nimport { ControllerResolver } from '../controller/controller_resolver.js';\n\nexport interface WoodRuntimeModuleOptions {\n controllersDir: string;\n middlewareDir: string;\n mode?: 'bundled' | 'dev';\n registerRuntime(router: WoodRouter): void;\n}\n\n/**\n * Registration-only production module, also installed by testWood before\n * scenario overlays. Resolving WoodRouter starts the selected real pipeline.\n * Existing registrations remain authoritative; token identities are exact.\n */\nexport function installWoodRuntime(root: IContainer, options: WoodRuntimeModuleOptions): void {\n if (typeof root.isRegistered !== 'function' || typeof root.registerFunction !== 'function') {\n throw new Error('Wood runtime requires an explicit IoC root; use createWoodRoot().');\n }\n installRuntimeCapabilities(root);\n if (!root.isRegistered(SchemaValidator)) root.registerFunction(SchemaValidator, () => new SchemaValidator());\n if (!root.isRegistered(MiddlewareResolver)) root.registerFunction(MiddlewareResolver, () => new MiddlewareResolver(options.middlewareDir));\n if (!root.isRegistered(ControllerResolver)) root.registerFunction(ControllerResolver, () => new ControllerResolver(options.controllersDir, { mode: options.mode }));\n if (!root.isRegistered(WoodRouter)) {\n root.registerFunction(WoodRouter, (validator: SchemaValidator, middlewareResolver: MiddlewareResolver, controllerResolver: ControllerResolver) => {\n const router = new WoodRouter({ container: root, ...options, validator, middlewareResolver, controllerResolver });\n options.registerRuntime(router);\n router.validateControllers();\n router.precompileSchemas();\n return router;\n }, { loadAs: LoadAs.Scoped, param: [SchemaValidator, MiddlewareResolver, ControllerResolver] });\n }\n}\n\nexport { WoodRouter, SchemaValidator, MiddlewareResolver, ControllerResolver };\n"],"mappings":"AAAA,SAAS,kCAAkC;AAC3C,SAAS,cAA+B;AACxC,SAAS,kBAAkB;AAC3B,SAAS,uBAAuB;AAChC,SAAS,0BAA0B;AACnC,SAAS,0BAA0B;AAc5B,SAAS,mBAAmB,MAAkB,SAAyC;AAC5F,MAAI,OAAO,KAAK,iBAAiB,cAAc,OAAO,KAAK,qBAAqB,YAAY;AAC1F,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AACA,6BAA2B,IAAI;AAC/B,MAAI,CAAC,KAAK,aAAa,eAAe,EAAG,MAAK,iBAAiB,iBAAiB,MAAM,IAAI,gBAAgB,CAAC;AAC3G,MAAI,CAAC,KAAK,aAAa,kBAAkB,EAAG,MAAK,iBAAiB,oBAAoB,MAAM,IAAI,mBAAmB,QAAQ,aAAa,CAAC;AACzI,MAAI,CAAC,KAAK,aAAa,kBAAkB,EAAG,MAAK,iBAAiB,oBAAoB,MAAM,IAAI,mBAAmB,QAAQ,gBAAgB,EAAE,MAAM,QAAQ,KAAK,CAAC,CAAC;AAClK,MAAI,CAAC,KAAK,aAAa,UAAU,GAAG;AAClC,SAAK,iBAAiB,YAAY,CAAC,WAA4B,oBAAwC,uBAA2C;AAChJ,YAAM,SAAS,IAAI,WAAW,EAAE,WAAW,MAAM,GAAG,SAAS,WAAW,oBAAoB,mBAAmB,CAAC;AAChH,cAAQ,gBAAgB,MAAM;AAC9B,aAAO,oBAAoB;AAC3B,aAAO,kBAAkB;AACzB,aAAO;AAAA,IACT,GAAG,EAAE,QAAQ,OAAO,QAAQ,OAAO,CAAC,iBAAiB,oBAAoB,kBAAkB,EAAE,CAAC;AAAA,EAChG;AACF;","names":[]}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var test_wood_exports = {};
|
|
30
|
+
__export(test_wood_exports, {
|
|
31
|
+
WoodTestBuilder: () => WoodTestBuilder,
|
|
32
|
+
testWood: () => testWood
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(test_wood_exports);
|
|
35
|
+
var import_node_url = require("node:url");
|
|
36
|
+
const logs = /* @__PURE__ */ new WeakMap();
|
|
37
|
+
function derive(builder, method, args) {
|
|
38
|
+
const state = logs.get(builder);
|
|
39
|
+
const copied = [...args];
|
|
40
|
+
const optionsIndex = method === "method" ? 3 : 2;
|
|
41
|
+
if (!["select", "use"].includes(method) && copied[optionsIndex] !== void 0) {
|
|
42
|
+
copied[optionsIndex] = Object.freeze({ ...copied[optionsIndex] });
|
|
43
|
+
}
|
|
44
|
+
if (method === "load" && typeof copied[0] !== "string") copied[0] = Object.freeze({ ...copied[0] });
|
|
45
|
+
const child = Object.create(WoodTestBuilder.prototype);
|
|
46
|
+
logs.set(child, {
|
|
47
|
+
config: state.config,
|
|
48
|
+
commands: Object.freeze([...state.commands, Object.freeze({ method, args: Object.freeze(copied) })])
|
|
49
|
+
});
|
|
50
|
+
return Object.freeze(child);
|
|
51
|
+
}
|
|
52
|
+
function plain(value) {
|
|
53
|
+
return !!value && typeof value === "object" && !Array.isArray(value) && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null);
|
|
54
|
+
}
|
|
55
|
+
function copyOwner(owner, input) {
|
|
56
|
+
if (!plain(input) || Reflect.ownKeys(input).some((key) => key !== "module" && key !== "path") || Reflect.ownKeys(input).length > 1) {
|
|
57
|
+
throw new TypeError(`select({ ${owner} }) takes module OR path, or {}`);
|
|
58
|
+
}
|
|
59
|
+
const value = { ...input };
|
|
60
|
+
if (typeof value.module === "string") value.module = Object.freeze([value.module]);
|
|
61
|
+
else if (Array.isArray(value.module)) value.module = Object.freeze([...value.module]);
|
|
62
|
+
if (Array.isArray(value.path)) value.path = Object.freeze([...value.path]);
|
|
63
|
+
return Object.freeze(value);
|
|
64
|
+
}
|
|
65
|
+
function copySelection(selection) {
|
|
66
|
+
if (!plain(selection) || Reflect.ownKeys(selection).some((key) => key !== "main" && key !== "renderer")) {
|
|
67
|
+
throw new TypeError("select requires { main } and/or { renderer }");
|
|
68
|
+
}
|
|
69
|
+
const out = {};
|
|
70
|
+
if ("main" in selection) out.main = copyOwner("main", selection.main);
|
|
71
|
+
if ("renderer" in selection) out.renderer = copyOwner("renderer", selection.renderer);
|
|
72
|
+
if (!("main" in out) && !("renderer" in out)) throw new TypeError("select requires { main } and/or { renderer }");
|
|
73
|
+
return Object.freeze(out);
|
|
74
|
+
}
|
|
75
|
+
function identity(value, what) {
|
|
76
|
+
if (typeof value !== "string" || !value.trim()) throw new TypeError(`${what} requires a nonempty identity`);
|
|
77
|
+
}
|
|
78
|
+
class WoodTestBuilder {
|
|
79
|
+
constructor() {
|
|
80
|
+
}
|
|
81
|
+
fetch(configure) {
|
|
82
|
+
if (typeof configure !== "function") throw new TypeError("fetch() requires a route configuration callback");
|
|
83
|
+
return derive(this, "fetch", [configure]);
|
|
84
|
+
}
|
|
85
|
+
browser(host = "playwright") {
|
|
86
|
+
if (host !== "playwright" && host !== "happy_dom") throw new TypeError("browser() accepts playwright or happy_dom");
|
|
87
|
+
return derive(this, "browser", [host]);
|
|
88
|
+
}
|
|
89
|
+
select(selection) {
|
|
90
|
+
return derive(this, "select", [copySelection(selection)]);
|
|
91
|
+
}
|
|
92
|
+
use(stub) {
|
|
93
|
+
if (!stub || typeof stub !== "object") throw new TypeError("use() expects a testStub() description");
|
|
94
|
+
return derive(this, "use", [stub]);
|
|
95
|
+
}
|
|
96
|
+
class(target, replacement, options) {
|
|
97
|
+
return derive(this, "class", options === void 0 ? [target, replacement] : [target, replacement, options]);
|
|
98
|
+
}
|
|
99
|
+
function(target, replacement, options) {
|
|
100
|
+
return derive(this, "function", options === void 0 ? [target, replacement] : [target, replacement, options]);
|
|
101
|
+
}
|
|
102
|
+
method(target, method, replacement, options) {
|
|
103
|
+
identity(method, "method()");
|
|
104
|
+
return derive(this, "method", options === void 0 ? [target, method, replacement] : [target, method, replacement, options]);
|
|
105
|
+
}
|
|
106
|
+
value(target, replacement, options) {
|
|
107
|
+
return derive(this, "value", options === void 0 ? [target, replacement] : [target, replacement, options]);
|
|
108
|
+
}
|
|
109
|
+
middleware(identity_, replacement, options) {
|
|
110
|
+
identity(identity_, "middleware()");
|
|
111
|
+
return derive(this, "middleware", options === void 0 ? [identity_, replacement] : [identity_, replacement, options]);
|
|
112
|
+
}
|
|
113
|
+
load(identity_, replacement, options) {
|
|
114
|
+
return derive(this, "load", options === void 0 ? [identity_, replacement] : [identity_, replacement, options]);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Load the implementation and replay the recorded calls in order. Under
|
|
118
|
+
* Vitest the build binds to the project-local runner's module registry so
|
|
119
|
+
* production modules keep the identity the test file imported.
|
|
120
|
+
*/
|
|
121
|
+
async build() {
|
|
122
|
+
const state = logs.get(this);
|
|
123
|
+
const implementation = await import("./testing/index.js");
|
|
124
|
+
let builder = implementation.testWood(state.config);
|
|
125
|
+
if (process.env.VITEST) builder = builder.importer(await implementation.vitestModuleImporter(state.config));
|
|
126
|
+
for (const command of state.commands) {
|
|
127
|
+
if (command.method === "use") {
|
|
128
|
+
const { stubEntries } = await import("@noego/testing");
|
|
129
|
+
stubEntries(command.args[0]);
|
|
130
|
+
}
|
|
131
|
+
builder = builder[command.method].apply(builder, [...command.args]);
|
|
132
|
+
}
|
|
133
|
+
const environment = await builder.build();
|
|
134
|
+
const { registerTestResource } = await import("@noego/testing");
|
|
135
|
+
return await registerTestResource(environment, "testWood");
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function testWood(configPath) {
|
|
139
|
+
const config = configPath instanceof URL ? (0, import_node_url.fileURLToPath)(configPath) : typeof configPath === "string" && configPath.startsWith("file:") ? (0, import_node_url.fileURLToPath)(configPath) : configPath;
|
|
140
|
+
if (typeof config !== "string" || !config.trim()) throw new TypeError("testWood requires an original wood.config.yml path or file URL");
|
|
141
|
+
const builder = Object.create(WoodTestBuilder.prototype);
|
|
142
|
+
logs.set(builder, { config, commands: Object.freeze([]) });
|
|
143
|
+
return Object.freeze(builder);
|
|
144
|
+
}
|
|
145
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
146
|
+
0 && (module.exports = {
|
|
147
|
+
WoodTestBuilder,
|
|
148
|
+
testWood
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=test-wood.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/test-wood.ts"],"sourcesContent":["import type { ConfigureFetch } from '@noego/testing/fetch';\n/**\n * Production-safe Wood testing facade, exported from the `@noego/wood` root.\n *\n * Importing `@noego/wood` or declaring a test loads no testing, DOM,\n * Playwright or Electron modules: every call is recorded on an immutable\n * builder and replayed onto the real `@noego/wood/testing` implementation\n * only inside `build()`.\n *\n * The canonical surface is exactly:\n *\n * select({ main?, renderer? }) what exists (module | path | {} per owner)\n * use(testStub()) compose a shared replacement description\n * class / function / method / value exact declared tokens\n * middleware(identity, …) the executable behind a source middleware id\n * load(identity, …) the page/layout companion data loader\n * browser([happy_dom]) native Page (default) or happy-dom Window\n * build() no selection = every declared owner, whole\n *\n * Explicit browser() selects a native renderer host. Without it, renderer\n * selection stays in the fast in-process Node controller tier.\n */\nimport { fileURLToPath } from 'node:url';\nimport type {\n ExecutableReplacement,\n LoaderIdentity,\n MethodDescriptor,\n OwnerSelection,\n ClassToken, ReplacementClass,\n ReplacementFunction,\n ReplacementOptions,\n TestStub,\n} from '@noego/testing';\nimport type { TestWoodBuilder } from './testing/index.js';\nimport type { WoodBrowserHost, WoodTestEnvironmentFor } from './testing/native_browser/native_browser.types.js';\n\nexport interface WoodTestSelection {\n readonly main?: OwnerSelection;\n readonly renderer?: OwnerSelection;\n}\n\ntype Method = 'select' | 'use' | 'class' | 'function' | 'method' | 'value' | 'middleware' | 'load' | 'browser' | 'fetch';\ntype Command = Readonly<{ method: Method; args: readonly unknown[] }>;\nconst logs = new WeakMap<object, { config: string; commands: readonly Command[] }>();\n\nfunction derive<H extends WoodBrowserHost | null>(builder: WoodTestBuilder<H>, method: Method, args: readonly unknown[]): WoodTestBuilder<H> {\n const state = logs.get(builder)!;\n const copied = [...args];\n const optionsIndex = method === 'method' ? 3 : 2;\n if (!['select', 'use'].includes(method) && copied[optionsIndex] !== undefined) {\n copied[optionsIndex] = Object.freeze({ ...(copied[optionsIndex] as ReplacementOptions) });\n }\n if (method === 'load' && typeof copied[0] !== 'string') copied[0] = Object.freeze({ ...(copied[0] as object) });\n const child = Object.create(WoodTestBuilder.prototype) as WoodTestBuilder<H>;\n logs.set(child, {\n config: state.config,\n commands: Object.freeze([...state.commands, Object.freeze({ method, args: Object.freeze(copied) })]),\n });\n return Object.freeze(child);\n}\n\nfunction plain(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value)\n && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null);\n}\nfunction copyOwner(owner: string, input: unknown): OwnerSelection {\n if (!plain(input)\n || Reflect.ownKeys(input).some(key => key !== 'module' && key !== 'path')\n || Reflect.ownKeys(input).length > 1) {\n throw new TypeError(`select({ ${owner} }) takes module OR path, or {}`);\n }\n const value = { ...(input as Record<string, unknown>) };\n if (typeof value.module === 'string') value.module = Object.freeze([value.module]);\n else if (Array.isArray(value.module)) value.module = Object.freeze([...value.module]);\n if (Array.isArray(value.path)) value.path = Object.freeze([...value.path]);\n return Object.freeze(value) as OwnerSelection;\n}\n\n/** Structural copy only; owner contents are validated by the shared contract at build. */\nfunction copySelection(selection: WoodTestSelection): WoodTestSelection {\n if (!plain(selection)\n || Reflect.ownKeys(selection).some(key => key !== 'main' && key !== 'renderer')) {\n throw new TypeError('select requires { main } and/or { renderer }');\n }\n const out: { main?: OwnerSelection; renderer?: OwnerSelection } = {};\n if ('main' in selection) out.main = copyOwner('main', selection.main);\n if ('renderer' in selection) out.renderer = copyOwner('renderer', selection.renderer);\n if (!('main' in out) && !('renderer' in out)) throw new TypeError('select requires { main } and/or { renderer }');\n return Object.freeze(out);\n}\n\nfunction identity(value: unknown, what: string): void {\n if (typeof value !== 'string' || !value.trim()) throw new TypeError(`${what} requires a nonempty identity`);\n}\n\n/** The root-export builder: a recorder over the `@noego/wood/testing` builder's canonical surface. */\nexport class WoodTestBuilder<H extends WoodBrowserHost | null = null> {\n private constructor() {}\n fetch(configure: ConfigureFetch): WoodTestBuilder<H> {\n if (typeof configure !== 'function') throw new TypeError('fetch() requires a route configuration callback');\n return derive(this, 'fetch', [configure]);\n }\n /** No argument = Playwright/Chromium; happy_dom = a native happy-dom Window. */\n browser(): WoodTestBuilder<'playwright'>;\n browser(host: 'playwright'): WoodTestBuilder<'playwright'>;\n browser(host: 'happy_dom'): WoodTestBuilder<'happy_dom'>;\n browser(host: WoodBrowserHost = 'playwright'): WoodTestBuilder<WoodBrowserHost> {\n if (host !== 'playwright' && host !== 'happy_dom') throw new TypeError('browser() accepts playwright or happy_dom');\n return derive(this, 'browser', [host]) as WoodTestBuilder<WoodBrowserHost>;\n }\n select(selection: WoodTestSelection): WoodTestBuilder<H> { return derive(this, 'select', [copySelection(selection)]); }\n use(stub: TestStub): WoodTestBuilder<H> {\n if (!stub || typeof stub !== 'object') throw new TypeError('use() expects a testStub() description');\n return derive(this, 'use', [stub]);\n }\n class<T>(target: ClassToken<T>, replacement: ReplacementClass<T>, options?: ReplacementOptions): WoodTestBuilder<H> {\n return derive(this, 'class', options === undefined ? [target, replacement] : [target, replacement, options]);\n }\n function(target: unknown, replacement: ReplacementFunction, options?: ReplacementOptions): WoodTestBuilder<H> {\n return derive(this, 'function', options === undefined ? [target, replacement] : [target, replacement, options]);\n }\n method(target: unknown, method: string, replacement: MethodDescriptor, options?: ReplacementOptions): WoodTestBuilder<H> {\n identity(method, 'method()');\n return derive(this, 'method', options === undefined ? [target, method, replacement] : [target, method, replacement, options]);\n }\n value(target: unknown, replacement: unknown, options?: ReplacementOptions): WoodTestBuilder<H> {\n return derive(this, 'value', options === undefined ? [target, replacement] : [target, replacement, options]);\n }\n middleware(identity_: string, replacement: ExecutableReplacement, options?: ReplacementOptions): WoodTestBuilder<H> {\n identity(identity_, 'middleware()');\n return derive(this, 'middleware', options === undefined ? [identity_, replacement] : [identity_, replacement, options]);\n }\n load(identity_: LoaderIdentity, replacement: ExecutableReplacement, options?: ReplacementOptions): WoodTestBuilder<H> {\n return derive(this, 'load', options === undefined ? [identity_, replacement] : [identity_, replacement, options]);\n }\n /**\n * Load the implementation and replay the recorded calls in order. Under\n * Vitest the build binds to the project-local runner's module registry so\n * production modules keep the identity the test file imported.\n */\n async build(): Promise<WoodTestEnvironmentFor<H>> {\n const state = logs.get(this)!;\n const implementation = await import('./testing/index.js');\n let builder: TestWoodBuilder = implementation.testWood(state.config);\n if (process.env.VITEST) builder = builder.importer(await implementation.vitestModuleImporter(state.config));\n for (const command of state.commands) {\n if (command.method === 'use') {\n const { stubEntries } = await import('@noego/testing');\n stubEntries(command.args[0] as TestStub); // reject legacy IoC presets on the canonical root facade\n }\n builder = (builder[command.method] as (...args: unknown[]) => TestWoodBuilder).apply(builder, [...command.args]);\n }\n const environment = await builder.build();\n const { registerTestResource } = await import('@noego/testing');\n return await registerTestResource(environment, 'testWood') as WoodTestEnvironmentFor<H>;\n }\n}\n\nexport function testWood(configPath: string | URL): WoodTestBuilder {\n const config = configPath instanceof URL ? fileURLToPath(configPath)\n : typeof configPath === 'string' && configPath.startsWith('file:') ? fileURLToPath(configPath) : configPath;\n if (typeof config !== 'string' || !config.trim()) throw new TypeError('testWood requires an original wood.config.yml path or file URL');\n const builder = Object.create(WoodTestBuilder.prototype) as WoodTestBuilder;\n logs.set(builder, { config, commands: Object.freeze([]) });\n return Object.freeze(builder);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ConfigureFetch } from '@noego/testing/fetch';
|
|
2
|
+
import { OwnerSelection, TestStub, ClassToken, ReplacementClass, ReplacementOptions, ReplacementFunction, MethodDescriptor, ExecutableReplacement, LoaderIdentity } from '@noego/testing';
|
|
3
|
+
import { W as WoodBrowserHost, c as WoodTestEnvironmentFor } from './native_browser.types-vWXtE4rM.cjs';
|
|
4
|
+
import 'playwright';
|
|
5
|
+
import 'happy-dom';
|
|
6
|
+
import './testing/wood_config_source.cjs';
|
|
7
|
+
import './types/config.cjs';
|
|
8
|
+
import './types/operations.cjs';
|
|
9
|
+
import './types/views.cjs';
|
|
10
|
+
import './testing/create_router_bridge.cjs';
|
|
11
|
+
import './router/wood_router.cjs';
|
|
12
|
+
import './types/context.cjs';
|
|
13
|
+
import './validation/schema_validator.cjs';
|
|
14
|
+
import './middleware/middleware_resolver.cjs';
|
|
15
|
+
import './controller/controller_resolver.cjs';
|
|
16
|
+
import './testing-api.cjs';
|
|
17
|
+
import '@noego/ioc';
|
|
18
|
+
import './frontend/frontend_surface.cjs';
|
|
19
|
+
import './navigation/index.cjs';
|
|
20
|
+
import './navigation/layout_preservation.cjs';
|
|
21
|
+
import './navigation/automation_introspection.cjs';
|
|
22
|
+
import './loader/loader_orchestration.cjs';
|
|
23
|
+
import './frontend/page_catalog.cjs';
|
|
24
|
+
import './frontend/work_registry.cjs';
|
|
25
|
+
import './frontend/frontend_lifecycle.cjs';
|
|
26
|
+
import './frontend/frontend_page.cjs';
|
|
27
|
+
import './testing/wood_test_selection.cjs';
|
|
28
|
+
import './testing/wood_env_renderer.cjs';
|
|
29
|
+
import './testing/wood_dom_animation.cjs';
|
|
30
|
+
import './testing/registration_only_root.cjs';
|
|
31
|
+
import './testing/test_wood.cjs';
|
|
32
|
+
|
|
33
|
+
interface WoodTestSelection {
|
|
34
|
+
readonly main?: OwnerSelection;
|
|
35
|
+
readonly renderer?: OwnerSelection;
|
|
36
|
+
}
|
|
37
|
+
/** The root-export builder: a recorder over the `@noego/wood/testing` builder's canonical surface. */
|
|
38
|
+
declare class WoodTestBuilder<H extends WoodBrowserHost | null = null> {
|
|
39
|
+
private constructor();
|
|
40
|
+
fetch(configure: ConfigureFetch): WoodTestBuilder<H>;
|
|
41
|
+
/** No argument = Playwright/Chromium; happy_dom = a native happy-dom Window. */
|
|
42
|
+
browser(): WoodTestBuilder<'playwright'>;
|
|
43
|
+
browser(host: 'playwright'): WoodTestBuilder<'playwright'>;
|
|
44
|
+
browser(host: 'happy_dom'): WoodTestBuilder<'happy_dom'>;
|
|
45
|
+
select(selection: WoodTestSelection): WoodTestBuilder<H>;
|
|
46
|
+
use(stub: TestStub): WoodTestBuilder<H>;
|
|
47
|
+
class<T>(target: ClassToken<T>, replacement: ReplacementClass<T>, options?: ReplacementOptions): WoodTestBuilder<H>;
|
|
48
|
+
function(target: unknown, replacement: ReplacementFunction, options?: ReplacementOptions): WoodTestBuilder<H>;
|
|
49
|
+
method(target: unknown, method: string, replacement: MethodDescriptor, options?: ReplacementOptions): WoodTestBuilder<H>;
|
|
50
|
+
value(target: unknown, replacement: unknown, options?: ReplacementOptions): WoodTestBuilder<H>;
|
|
51
|
+
middleware(identity_: string, replacement: ExecutableReplacement, options?: ReplacementOptions): WoodTestBuilder<H>;
|
|
52
|
+
load(identity_: LoaderIdentity, replacement: ExecutableReplacement, options?: ReplacementOptions): WoodTestBuilder<H>;
|
|
53
|
+
/**
|
|
54
|
+
* Load the implementation and replay the recorded calls in order. Under
|
|
55
|
+
* Vitest the build binds to the project-local runner's module registry so
|
|
56
|
+
* production modules keep the identity the test file imported.
|
|
57
|
+
*/
|
|
58
|
+
build(): Promise<WoodTestEnvironmentFor<H>>;
|
|
59
|
+
}
|
|
60
|
+
declare function testWood(configPath: string | URL): WoodTestBuilder;
|
|
61
|
+
|
|
62
|
+
export { WoodTestBuilder, type WoodTestSelection, testWood };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ConfigureFetch } from '@noego/testing/fetch';
|
|
2
|
+
import { OwnerSelection, TestStub, ClassToken, ReplacementClass, ReplacementOptions, ReplacementFunction, MethodDescriptor, ExecutableReplacement, LoaderIdentity } from '@noego/testing';
|
|
3
|
+
import { W as WoodBrowserHost, c as WoodTestEnvironmentFor } from './native_browser.types-BY2daUOS.js';
|
|
4
|
+
import 'playwright';
|
|
5
|
+
import 'happy-dom';
|
|
6
|
+
import './testing/wood_config_source.js';
|
|
7
|
+
import './types/config.js';
|
|
8
|
+
import './types/operations.js';
|
|
9
|
+
import './types/views.js';
|
|
10
|
+
import './testing/create_router_bridge.js';
|
|
11
|
+
import './router/wood_router.js';
|
|
12
|
+
import './types/context.js';
|
|
13
|
+
import './validation/schema_validator.js';
|
|
14
|
+
import './middleware/middleware_resolver.js';
|
|
15
|
+
import './controller/controller_resolver.js';
|
|
16
|
+
import './testing-api.js';
|
|
17
|
+
import '@noego/ioc';
|
|
18
|
+
import './frontend/frontend_surface.js';
|
|
19
|
+
import './navigation/index.js';
|
|
20
|
+
import './navigation/layout_preservation.js';
|
|
21
|
+
import './navigation/automation_introspection.js';
|
|
22
|
+
import './loader/loader_orchestration.js';
|
|
23
|
+
import './frontend/page_catalog.js';
|
|
24
|
+
import './frontend/work_registry.js';
|
|
25
|
+
import './frontend/frontend_lifecycle.js';
|
|
26
|
+
import './frontend/frontend_page.js';
|
|
27
|
+
import './testing/wood_test_selection.js';
|
|
28
|
+
import './testing/wood_env_renderer.js';
|
|
29
|
+
import './testing/wood_dom_animation.js';
|
|
30
|
+
import './testing/registration_only_root.js';
|
|
31
|
+
import './testing/test_wood.js';
|
|
32
|
+
|
|
33
|
+
interface WoodTestSelection {
|
|
34
|
+
readonly main?: OwnerSelection;
|
|
35
|
+
readonly renderer?: OwnerSelection;
|
|
36
|
+
}
|
|
37
|
+
/** The root-export builder: a recorder over the `@noego/wood/testing` builder's canonical surface. */
|
|
38
|
+
declare class WoodTestBuilder<H extends WoodBrowserHost | null = null> {
|
|
39
|
+
private constructor();
|
|
40
|
+
fetch(configure: ConfigureFetch): WoodTestBuilder<H>;
|
|
41
|
+
/** No argument = Playwright/Chromium; happy_dom = a native happy-dom Window. */
|
|
42
|
+
browser(): WoodTestBuilder<'playwright'>;
|
|
43
|
+
browser(host: 'playwright'): WoodTestBuilder<'playwright'>;
|
|
44
|
+
browser(host: 'happy_dom'): WoodTestBuilder<'happy_dom'>;
|
|
45
|
+
select(selection: WoodTestSelection): WoodTestBuilder<H>;
|
|
46
|
+
use(stub: TestStub): WoodTestBuilder<H>;
|
|
47
|
+
class<T>(target: ClassToken<T>, replacement: ReplacementClass<T>, options?: ReplacementOptions): WoodTestBuilder<H>;
|
|
48
|
+
function(target: unknown, replacement: ReplacementFunction, options?: ReplacementOptions): WoodTestBuilder<H>;
|
|
49
|
+
method(target: unknown, method: string, replacement: MethodDescriptor, options?: ReplacementOptions): WoodTestBuilder<H>;
|
|
50
|
+
value(target: unknown, replacement: unknown, options?: ReplacementOptions): WoodTestBuilder<H>;
|
|
51
|
+
middleware(identity_: string, replacement: ExecutableReplacement, options?: ReplacementOptions): WoodTestBuilder<H>;
|
|
52
|
+
load(identity_: LoaderIdentity, replacement: ExecutableReplacement, options?: ReplacementOptions): WoodTestBuilder<H>;
|
|
53
|
+
/**
|
|
54
|
+
* Load the implementation and replay the recorded calls in order. Under
|
|
55
|
+
* Vitest the build binds to the project-local runner's module registry so
|
|
56
|
+
* production modules keep the identity the test file imported.
|
|
57
|
+
*/
|
|
58
|
+
build(): Promise<WoodTestEnvironmentFor<H>>;
|
|
59
|
+
}
|
|
60
|
+
declare function testWood(configPath: string | URL): WoodTestBuilder;
|
|
61
|
+
|
|
62
|
+
export { WoodTestBuilder, type WoodTestSelection, testWood };
|