From 426ec30e65040fff85d1d3a82ee11e1e028b41d3 Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Mon, 10 Aug 2026 18:40:25 +0200 Subject: [PATCH 01/13] chore: prepare adm 5 runtime dependency refresh --- .github/workflows/refresh-adm5-lock.yml | 47 +++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 .github/workflows/refresh-adm5-lock.yml diff --git a/.github/workflows/refresh-adm5-lock.yml b/.github/workflows/refresh-adm5-lock.yml new file mode 100644 index 0000000..720bb0d --- /dev/null +++ b/.github/workflows/refresh-adm5-lock.yml @@ -0,0 +1,47 @@ +name: Refresh ADM 5 runtime lockfile + +on: + push: + branches: + - agent/adm-5-generated-api-runtime + +permissions: + contents: read + +jobs: + refresh: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: '1.3.13' + + - name: Update released ADM 5 dependencies + run: | + node <<'NODE' + const fs = require('node:fs'); + const path = 'package.json'; + const pkg = JSON.parse(fs.readFileSync(path, 'utf8')); + pkg.dependencies['@ankhorage/contracts'] = '^4.0.2'; + pkg.dependencies['@ankhorage/data-sources'] = '^1.0.0'; + fs.writeFileSync(path, `${JSON.stringify(pkg, null, 2)}\n`); + NODE + + - name: Refresh lockfile + run: bun install + + - name: Capture worktree + run: zip -qr runtime-worktree.zip . -x '.git/*' 'node_modules/*' + + - name: Upload refreshed worktree + uses: actions/upload-artifact@v4 + with: + name: adm5-runtime-worktree + path: | + package.json + bun.lock + runtime-worktree.zip From 262b5c52edf71d40e287bcfac7d5f66fe5024037 Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Mon, 10 Aug 2026 18:52:47 +0200 Subject: [PATCH 02/13] chore: finalize adm 5 runtime dependency refresh --- .github/workflows/refresh-adm5-lock.yml | 29 +++++++++++-------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/.github/workflows/refresh-adm5-lock.yml b/.github/workflows/refresh-adm5-lock.yml index 720bb0d..23fc3bc 100644 --- a/.github/workflows/refresh-adm5-lock.yml +++ b/.github/workflows/refresh-adm5-lock.yml @@ -6,7 +6,7 @@ on: - agent/adm-5-generated-api-runtime permissions: - contents: read + contents: write jobs: refresh: @@ -14,13 +14,15 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Setup Bun uses: oven-sh/setup-bun@v2 with: bun-version: '1.3.13' - - name: Update released ADM 5 dependencies + - name: Refresh released dependencies run: | node <<'NODE' const fs = require('node:fs'); @@ -30,18 +32,13 @@ jobs: pkg.dependencies['@ankhorage/data-sources'] = '^1.0.0'; fs.writeFileSync(path, `${JSON.stringify(pkg, null, 2)}\n`); NODE + bun install - - name: Refresh lockfile - run: bun install - - - name: Capture worktree - run: zip -qr runtime-worktree.zip . -x '.git/*' 'node_modules/*' - - - name: Upload refreshed worktree - uses: actions/upload-artifact@v4 - with: - name: adm5-runtime-worktree - path: | - package.json - bun.lock - runtime-worktree.zip + - name: Commit dependency boundary + run: | + rm .github/workflows/refresh-adm5-lock.yml + git config user.name 'github-actions[bot]' + git config user.email '41898282+github-actions[bot]@users.noreply.github.com' + git add package.json bun.lock .github/workflows/refresh-adm5-lock.yml + git commit -m 'chore: consume adm 5 contracts and data sources' + git push origin HEAD:agent/adm-5-generated-api-runtime From 891ef61cff0e4295c5b139b136768f768b00fdc6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2026 16:53:11 +0000 Subject: [PATCH 03/13] chore: consume adm 5 contracts and data sources --- .github/workflows/refresh-adm5-lock.yml | 44 ------------------------- bun.lock | 12 +++---- package.json | 4 +-- 3 files changed, 7 insertions(+), 53 deletions(-) delete mode 100644 .github/workflows/refresh-adm5-lock.yml diff --git a/.github/workflows/refresh-adm5-lock.yml b/.github/workflows/refresh-adm5-lock.yml deleted file mode 100644 index 23fc3bc..0000000 --- a/.github/workflows/refresh-adm5-lock.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Refresh ADM 5 runtime lockfile - -on: - push: - branches: - - agent/adm-5-generated-api-runtime - -permissions: - contents: write - -jobs: - refresh: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: '1.3.13' - - - name: Refresh released dependencies - run: | - node <<'NODE' - const fs = require('node:fs'); - const path = 'package.json'; - const pkg = JSON.parse(fs.readFileSync(path, 'utf8')); - pkg.dependencies['@ankhorage/contracts'] = '^4.0.2'; - pkg.dependencies['@ankhorage/data-sources'] = '^1.0.0'; - fs.writeFileSync(path, `${JSON.stringify(pkg, null, 2)}\n`); - NODE - bun install - - - name: Commit dependency boundary - run: | - rm .github/workflows/refresh-adm5-lock.yml - git config user.name 'github-actions[bot]' - git config user.email '41898282+github-actions[bot]@users.noreply.github.com' - git add package.json bun.lock .github/workflows/refresh-adm5-lock.yml - git commit -m 'chore: consume adm 5 contracts and data sources' - git push origin HEAD:agent/adm-5-generated-api-runtime diff --git a/bun.lock b/bun.lock index b15e97a..6a6972b 100644 --- a/bun.lock +++ b/bun.lock @@ -5,8 +5,8 @@ "": { "name": "@ankhorage/runtime", "dependencies": { - "@ankhorage/contracts": "^2.1.0", - "@ankhorage/data-sources": "^0.5.1", + "@ankhorage/contracts": "^4.0.2", + "@ankhorage/data-sources": "^1.0.0", }, "devDependencies": { "@ankhorage/devtools": "^1.0.6", @@ -26,11 +26,11 @@ }, }, "packages": { - "@ankhorage/color-theory": ["@ankhorage/color-theory@0.0.7", "", { "dependencies": { "culori": "^4.0.2" } }, "sha512-fcdJZMmhfbvc9Yhz5vjTolmWYAaCsUaUOq4/P6YDZLHhXer8Mv8y0LaOhWgaXcwq48nrxILGUMOxOl48tRhTmA=="], + "@ankhorage/color-theory": ["@ankhorage/color-theory@0.0.8", "", { "dependencies": { "culori": "^4.0.2" } }, "sha512-+JRLkvBUiPxFrRANyewRZxLv1sU5cKFOc3VBYB+b/eFngLFDIAqXf/a4e0A6gQE+lk6e3wb3FcGQYIyYB1Dqzg=="], - "@ankhorage/contracts": ["@ankhorage/contracts@2.1.0", "", { "dependencies": { "@ankhorage/color-theory": "^0.0.7" } }, "sha512-QGG0atpGDe9+BUWzWvV83Kj309TBOK76yBRbWOoQli8g0LY8QLb7Z4UquD+qVhtWJTp3Y1jHUTEttQ0WjdhY/Q=="], + "@ankhorage/contracts": ["@ankhorage/contracts@4.0.2", "", { "dependencies": { "@ankhorage/color-theory": "^0.0.8" } }, "sha512-mxWLgJ4DYcSe5PRZBmbeqsyJXjBT5mlBkSoYqigNFw750OjiCjs9DfAxK3npapEASuy4uJWsIWdqLlld3KT/ww=="], - "@ankhorage/data-sources": ["@ankhorage/data-sources@0.5.1", "", { "dependencies": { "@ankhorage/contracts": "^1.18.0" } }, "sha512-l1q6qEFtAKlfuxfVe4iXV03Du8aa7x7BERFZELp3VbtY7R82JuKOnckIqvebGug4+hbh6QXlOeI8cnuHag+QAg=="], + "@ankhorage/data-sources": ["@ankhorage/data-sources@1.0.0", "", { "dependencies": { "@ankhorage/contracts": "^4.0.2" } }, "sha512-Kk+GwYkI4UILuijPuHnBr1yXS2pEl+IiUmWRnSvNMeoHPG11HjiS6XYfEJPE7xuiTolmCtHeR0/xiHb1PFl9wA=="], "@ankhorage/devtools": ["@ankhorage/devtools@1.1.0", "", { "dependencies": { "@eslint/js": "^10.0.1", "eslint": "^10.2.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-import": "^2.32.0", "eslint-plugin-prettier": "^5.5.5", "eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-unused-imports": "^4.4.1", "knip": "^6.12.2", "prettier": "^3.8.1", "typescript-eslint": "^8.24.0" }, "bin": { "ankhorage-eslint": "dist/eslint-cli.js", "ankhorage-knip": "dist/knip-cli.js", "ankhorage-prettier": "dist/prettier-cli.js" } }, "sha512-RKI53N+oMHFhpCpHyksozMybaXSudbwAV5InHwSPw49sa+PxTE4l6UOnpfIUOJ8l8qbWuaKYRBF56sPpYbhUgg=="], @@ -1338,8 +1338,6 @@ "zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], - "@ankhorage/data-sources/@ankhorage/contracts": ["@ankhorage/contracts@1.19.1", "", { "dependencies": { "@ankhorage/color-theory": "^0.0.7" } }, "sha512-GwmrUhEAvhjllsV38P/zLrPliru1hzZQsI5sgHDRP5OmvfKL9/gUJ53UuBageYqhW7aeXywacvMXRX9LiqZJfw=="], - "@babel/core/json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], diff --git a/package.json b/package.json index 91213b0..c4a05d9 100644 --- a/package.json +++ b/package.json @@ -59,8 +59,8 @@ "version-packages": "changeset version" }, "dependencies": { - "@ankhorage/contracts": "^2.1.0", - "@ankhorage/data-sources": "^0.5.1" + "@ankhorage/contracts": "^4.0.2", + "@ankhorage/data-sources": "^1.0.0" }, "peerDependencies": { "react": "19.1.0", From b36331bbe9471c724592d58227271087f243d512 Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Mon, 10 Aug 2026 18:54:08 +0200 Subject: [PATCH 04/13] feat: execute generated database operations --- src/runtimeDatabaseOperationExecutor.ts | 373 ++++++++++++++++++++++++ 1 file changed, 373 insertions(+) create mode 100644 src/runtimeDatabaseOperationExecutor.ts diff --git a/src/runtimeDatabaseOperationExecutor.ts b/src/runtimeDatabaseOperationExecutor.ts new file mode 100644 index 0000000..a76af79 --- /dev/null +++ b/src/runtimeDatabaseOperationExecutor.ts @@ -0,0 +1,373 @@ +import type { + BindingValue, + DataOperationConfig, + DataSourceConfig, + DataSourceDiagnostic, + DbAdapter, + DbFilter, + DbRecord, +} from '@ankhorage/contracts'; + +import type { RuntimeBindingOperationExecutionResult } from './runtimeBindings'; + +export async function executeRuntimeDatabaseOperation(args: { + readonly dataSource: DataSourceConfig; + readonly operation: DataOperationConfig; + readonly input: Readonly> | undefined; + readonly databaseAdapters: Readonly> | undefined; +}): Promise { + const plan = resolveOperationPlan(args.dataSource, args.operation); + if (!plan.ok) return plan.result; + + const adapter = args.databaseAdapters?.[plan.adapterId]; + if (adapter === undefined) { + return failure(args, 'missing-adapter', `Database adapter '${plan.adapterId}' is not available.`); + } + + const input = args.input ?? {}; + switch (plan.operation) { + case 'list': + return executeList(adapter, plan, input, args); + case 'read': + return executeRead(adapter, plan, input, args); + case 'create': + return executeCreate(adapter, plan, input, args); + case 'update': + return executeUpdate(adapter, plan, input, args); + case 'delete': + return executeDelete(adapter, plan, input, args); + } +} + +type GeneratedCrudOperation = 'list' | 'read' | 'create' | 'update' | 'delete'; + +interface DatabaseOperationPlan { + readonly adapterId: string; + readonly collection: string; + readonly schema?: string; + readonly operation: GeneratedCrudOperation; + readonly primaryKey?: string; +} + +type OperationPlanResult = + | { + readonly ok: true; + readonly adapterId: string; + readonly collection: string; + readonly schema?: string; + readonly operation: GeneratedCrudOperation; + readonly primaryKey?: string; + } + | { readonly ok: false; readonly result: RuntimeBindingOperationExecutionResult }; + +function resolveOperationPlan( + dataSource: DataSourceConfig, + operation: DataOperationConfig, +): OperationPlanResult { + const metadata = asRecord(operation.metadata); + const adapterId = resolveAdapterId(dataSource); + const collection = metadata?.collection; + const operationKind = metadata?.operation; + const schema = metadata?.schema; + + if (adapterId === undefined) { + return invalidPlan( + dataSource, + operation, + 'Database operation source does not reference an adapter.', + ); + } + if (typeof collection !== 'string' || collection.trim().length === 0) { + return invalidPlan( + dataSource, + operation, + 'Database operation metadata requires a collection.', + ); + } + if (!isGeneratedCrudOperation(operationKind)) { + return invalidPlan( + dataSource, + operation, + 'Database operation metadata requires a generated CRUD operation.', + ); + } + if (schema !== undefined && schema !== null && typeof schema !== 'string') { + return invalidPlan( + dataSource, + operation, + 'Database operation schema metadata must be a string or null.', + ); + } + + const metadataAdapterId = metadata?.adapterId; + if (metadataAdapterId !== undefined && metadataAdapterId !== adapterId) { + return invalidPlan( + dataSource, + operation, + 'Database operation adapter metadata does not match its data source.', + ); + } + + return { + ok: true, + adapterId, + collection, + schema: typeof schema === 'string' ? schema : undefined, + operation: operationKind, + primaryKey: resolvePrimaryKey(operation), + }; +} + +async function executeList( + adapter: DbAdapter, + plan: DatabaseOperationPlan, + input: Readonly>, + args: DatabaseExecutionArgs, +): Promise { + const page = resolvePage(input); + if (!page.ok) return failure(args, 'invalid-config', page.message); + + const result = await adapter.select({ + table: plan.collection, + schema: plan.schema, + page: page.value, + }); + return resolveDbResult(args, result, (records) => records); +} + +async function executeRead( + adapter: DbAdapter, + plan: DatabaseOperationPlan, + input: Readonly>, + args: DatabaseExecutionArgs, +): Promise { + const identity = resolveIdentity(plan, input); + if (!identity.ok) return failure(args, 'invalid-config', identity.message); + + const result = await adapter.findById({ + table: plan.collection, + schema: plan.schema, + id: identity.value, + idField: plan.primaryKey, + }); + return resolveDbResult(args, result, (record) => record); +} + +async function executeCreate( + adapter: DbAdapter, + plan: DatabaseOperationPlan, + input: Readonly>, + args: DatabaseExecutionArgs, +): Promise { + const result = await adapter.insert({ + table: plan.collection, + schema: plan.schema, + values: { ...input }, + }); + return resolveDbResult(args, result, (records) => records[0] ?? null); +} + +async function executeUpdate( + adapter: DbAdapter, + plan: DatabaseOperationPlan, + input: Readonly>, + args: DatabaseExecutionArgs, +): Promise { + const identity = resolveIdentity(plan, input); + if (!identity.ok) return failure(args, 'invalid-config', identity.message); + + const values = omitKey(input, plan.primaryKey); + if (Object.keys(values).length === 0) { + return failure( + args, + 'invalid-config', + 'Generated update operation requires at least one value to update.', + ); + } + + const result = await adapter.update({ + table: plan.collection, + schema: plan.schema, + values, + filters: [createIdentityFilter(plan.primaryKey, identity.value)], + }); + return resolveDbResult(args, result, (records) => records[0] ?? null); +} + +async function executeDelete( + adapter: DbAdapter, + plan: DatabaseOperationPlan, + input: Readonly>, + args: DatabaseExecutionArgs, +): Promise { + const identity = resolveIdentity(plan, input); + if (!identity.ok) return failure(args, 'invalid-config', identity.message); + + const result = await adapter.delete({ + table: plan.collection, + schema: plan.schema, + filters: [createIdentityFilter(plan.primaryKey, identity.value)], + }); + return resolveDbResult(args, result, (records) => ({ deleted: records.length > 0 })); +} + +type DatabaseExecutionArgs = Pick< + Parameters[0], + 'dataSource' | 'operation' +>; + +function resolveDbResult( + args: DatabaseExecutionArgs, + result: + | { readonly ok: true; readonly data: TData } + | { readonly ok: false; readonly error: { readonly message: string } }, + select: (data: TData) => unknown, +): RuntimeBindingOperationExecutionResult { + if (!result.ok) return failure(args, 'database-operation-failed', result.error.message); + + const value = toBindingValue(select(result.data)); + if (value === undefined) { + return failure( + args, + 'invalid-config', + 'Database adapter returned a non-serializable binding value.', + ); + } + return { ok: true, data: value, diagnostics: [] }; +} + +function resolveAdapterId(dataSource: DataSourceConfig): string | undefined { + if (dataSource.kind === 'database') return dataSource.adapter.id; + if (dataSource.kind === 'api' && dataSource.origin === 'generated') return dataSource.adapter.id; + return undefined; +} + +function resolvePrimaryKey(operation: DataOperationConfig): string | undefined { + return operation.request?.parameters?.find((parameter) => parameter.location === 'path')?.name; +} + +function resolveIdentity( + plan: DatabaseOperationPlan, + input: Readonly>, +): + | { readonly ok: true; readonly value: string | number } + | { readonly ok: false; readonly message: string } { + if (plan.primaryKey === undefined) { + return { + ok: false, + message: 'Generated read/update/delete operation requires primary-key metadata.', + }; + } + const value = input[plan.primaryKey]; + return typeof value === 'string' || (typeof value === 'number' && Number.isFinite(value)) + ? { ok: true, value } + : { + ok: false, + message: `Generated operation requires '${plan.primaryKey}' as a string or number.`, + }; +} + +function resolvePage( + input: Readonly>, +): + | { + readonly ok: true; + readonly value: { readonly limit?: number; readonly offset?: number } | undefined; + } + | { readonly ok: false; readonly message: string } { + const limit = input.limit; + const offset = input.offset; + if (!isOptionalPageNumber(limit) || !isOptionalPageNumber(offset)) { + return { + ok: false, + message: 'Generated list operation limit/offset must be non-negative integers.', + }; + } + if (limit === undefined && offset === undefined) return { ok: true, value: undefined }; + return { ok: true, value: { limit, offset } }; +} + +function isOptionalPageNumber(value: BindingValue | undefined): value is number | undefined { + return value === undefined || (typeof value === 'number' && Number.isInteger(value) && value >= 0); +} + +function createIdentityFilter(field: string | undefined, value: string | number): DbFilter { + return { field: field ?? 'id', operator: 'eq', value }; +} + +function omitKey( + input: Readonly>, + key: string | undefined, +): DbRecord { + const values: DbRecord = {}; + for (const [field, value] of Object.entries(input)) { + if (field !== key) values[field] = value; + } + return values; +} + +function isGeneratedCrudOperation(value: unknown): value is GeneratedCrudOperation { + return ( + value === 'list' || + value === 'read' || + value === 'create' || + value === 'update' || + value === 'delete' + ); +} + +function invalidPlan( + dataSource: DataSourceConfig, + operation: DataOperationConfig, + message: string, +): OperationPlanResult { + return { + ok: false, + result: failure({ dataSource, operation }, 'invalid-config', message), + }; +} + +function failure( + args: DatabaseExecutionArgs, + code: string, + message: string, +): RuntimeBindingOperationExecutionResult { + const diagnostic: DataSourceDiagnostic = { + code, + dataSourceId: args.dataSource.id, + endpointId: args.operation.endpointId, + operationId: args.operation.id, + message, + severity: 'error', + }; + return { ok: false, diagnostics: [diagnostic] }; +} + +function asRecord(value: unknown): Readonly> | undefined { + return typeof value === 'object' && value !== null && !Array.isArray(value) + ? (value as Readonly>) + : undefined; +} + +function toBindingValue(value: unknown): BindingValue | undefined { + if (value === null || typeof value === 'string' || typeof value === 'boolean') return value; + if (typeof value === 'number') return Number.isFinite(value) ? value : undefined; + if (Array.isArray(value)) { + const items: BindingValue[] = []; + for (const item of value) { + const converted = toBindingValue(item); + if (converted === undefined) return undefined; + items.push(converted); + } + return items; + } + const record = asRecord(value); + if (record === undefined) return undefined; + const converted: Record = {}; + for (const [key, item] of Object.entries(record)) { + const bindingValue = toBindingValue(item); + if (bindingValue === undefined) return undefined; + converted[key] = bindingValue; + } + return converted; +} From 0e9ee1789673f94bf838709a3dd5b23e74a03334 Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Mon, 10 Aug 2026 18:54:34 +0200 Subject: [PATCH 05/13] feat: route canonical data-source operations --- src/runtimeDataSourceOperations.ts | 99 ++++++++++++++++++------------ 1 file changed, 59 insertions(+), 40 deletions(-) diff --git a/src/runtimeDataSourceOperations.ts b/src/runtimeDataSourceOperations.ts index b451b2b..1a03b7d 100644 --- a/src/runtimeDataSourceOperations.ts +++ b/src/runtimeDataSourceOperations.ts @@ -1,12 +1,14 @@ -import type { BindingValue, DataSourceDiagnostic } from '@ankhorage/contracts'; +import type { BindingValue, DataSourceDiagnostic, DbAdapter } from '@ankhorage/contracts'; import type { EndpointTestCredentialResolver, EndpointTestFetch } from '@ankhorage/data-sources'; import { testEndpoint } from '@ankhorage/data-sources'; import type { RuntimeBindingOperationExecutor } from './runtimeBindings'; +import { executeRuntimeDatabaseOperation } from './runtimeDatabaseOperationExecutor'; export interface RuntimeDataSourceOperationExecutorOptions { - readonly fetch: EndpointTestFetch; + readonly fetch?: EndpointTestFetch; readonly credentialResolver?: EndpointTestCredentialResolver; + readonly databaseAdapters?: Readonly>; } export function createRuntimeDataSourceOperationExecutor( @@ -14,32 +16,26 @@ export function createRuntimeDataSourceOperationExecutor( ): RuntimeBindingOperationExecutor { return async ({ dataSource, endpoint, input, operation }) => { if (endpoint === undefined) { - return { - ok: false, - diagnostics: [ - createRuntimeDataSourceOperationDiagnostic( - operation.dataSourceId, - operation.endpointId, - operation.operationId, - `Endpoint '${operation.endpointId ?? ''}' could not be found.`, - ), - ], - }; + return missingEndpoint(operation.dataSourceId, operation.endpointId, operation.operationId); + } + + const operationConfig = endpoint.operations[operation.operationId]; + if (operationConfig === undefined) { + return missingOperation(operation.dataSourceId, endpoint.id, operation.operationId); } const values = asBindingValueRecord(input); if (input !== undefined && values === undefined) { - return { - ok: false, - diagnostics: [ - createRuntimeDataSourceOperationDiagnostic( - operation.dataSourceId, - endpoint.id, - operation.operationId, - 'Operation input must resolve to an object.', - ), - ], - }; + return invalidInput(operation.dataSourceId, endpoint.id, operation.operationId); + } + + if (operationConfig.protocol === 'database') { + return executeRuntimeDatabaseOperation({ + dataSource, + operation: operationConfig, + input: values, + databaseAdapters: options.databaseAdapters, + }); } const result = await testEndpoint({ @@ -51,35 +47,58 @@ export function createRuntimeDataSourceOperationExecutor( values, }); - if (!result.ok) { - return { - ok: false, - diagnostics: result.diagnostics, - }; - } - - return { - ok: true, - data: result.data ?? null, - diagnostics: result.diagnostics, - }; + return result.ok + ? { ok: true, data: result.data ?? null, diagnostics: result.diagnostics } + : { ok: false, diagnostics: result.diagnostics }; }; } -function createRuntimeDataSourceOperationDiagnostic( +function missingEndpoint(dataSourceId: string, endpointId: string | undefined, operationId: string) { + return failure( + dataSourceId, + endpointId, + operationId, + 'missing-endpoint', + `Endpoint '${endpointId ?? ''}' could not be found.`, + ); +} + +function missingOperation(dataSourceId: string, endpointId: string, operationId: string) { + return failure( + dataSourceId, + endpointId, + operationId, + 'missing-operation', + `Operation '${operationId}' could not be found.`, + ); +} + +function invalidInput(dataSourceId: string, endpointId: string, operationId: string) { + return failure( + dataSourceId, + endpointId, + operationId, + 'invalid-config', + 'Operation input must resolve to an object.', + ); +} + +function failure( dataSourceId: string, endpointId: string | undefined, operationId: string, + code: string, message: string, -): DataSourceDiagnostic { - return { - code: 'invalid-config', +) { + const diagnostic: DataSourceDiagnostic = { + code, dataSourceId, endpointId, operationId, message, severity: 'error', }; + return { ok: false as const, diagnostics: [diagnostic] }; } function asBindingValueRecord( From a2b2e18cd8b17c271bdbdde00d1eac64476e0106 Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Mon, 10 Aug 2026 18:55:02 +0200 Subject: [PATCH 06/13] refactor: remove legacy api seed loaders --- src/RuntimeScreen.tsx | 68 ++++--------------------------------------- 1 file changed, 6 insertions(+), 62 deletions(-) diff --git a/src/RuntimeScreen.tsx b/src/RuntimeScreen.tsx index da861ce..a28cf34 100644 --- a/src/RuntimeScreen.tsx +++ b/src/RuntimeScreen.tsx @@ -1,18 +1,11 @@ -import type { - AppManifest, - ComponentDataBindingRegistry, - PropBinding, - ScreenSpec, - StateAdapter, -} from '@ankhorage/contracts'; +import type { AppManifest, ScreenSpec, StateAdapter } from '@ankhorage/contracts'; import React from 'react'; import type { ComponentRegistry } from './registry'; -import type { RuntimeApiLoaderDefinition } from './runtimeApiLoaders'; -import { useRuntimeApiStateLoaders } from './runtimeApiLoaders'; import { RuntimeRenderer } from './RuntimeRenderer'; import { useRuntimeRendererConfig } from './RuntimeRendererConfig'; -import { resolveScreenApiLoaders, useRuntimeScreenOperationLoaders } from './runtimeScreenLoaders'; +import { useRuntimeScreenOperationLoaders } from './runtimeScreenLoaders'; +import { createRuntimeMemoryStateAdapter } from './runtimeStateAdapter'; export interface RuntimeScreenProps { readonly manifest: AppManifest; @@ -24,18 +17,8 @@ export interface RuntimeScreenProps { export function RuntimeScreen(props: RuntimeScreenProps) { const { manifest, screen, registry, stateAdapter: injectedStateAdapter } = props; const runtimeConfig = useRuntimeRendererConfig(); - const loaders = React.useMemo( - () => [ - ...resolveScreenApiLoaders(screen), - ...resolveApiLoadersFromBindings(manifest.dataBindings), - ], - [manifest.dataBindings, screen], - ); - const { stateAdapter, stateVersion } = useRuntimeApiStateLoaders({ - data: manifest.data, - loaders, - stateAdapter: injectedStateAdapter, - }); + const fallbackStateAdapter = React.useMemo(() => createRuntimeMemoryStateAdapter(), []); + const stateAdapter = injectedStateAdapter ?? fallbackStateAdapter; const screenOperationLoaders = useRuntimeScreenOperationLoaders({ bindingContext: runtimeConfig.bindingContext, dataSources: manifest.dataSources, @@ -47,7 +30,7 @@ export function RuntimeScreen(props: RuntimeScreenProps) { return ( ); } - -function resolveApiLoadersFromBindings( - dataBindings: ComponentDataBindingRegistry | undefined, -): readonly RuntimeApiLoaderDefinition[] { - const loadersByApiId = new Map(); - - for (const componentBinding of Object.values(dataBindings ?? {})) { - for (const binding of Object.values(componentBinding.props ?? {})) { - const loader = resolveApiLoaderFromPropBinding(binding); - if (loader !== null && !loadersByApiId.has(loader.apiId)) { - loadersByApiId.set(loader.apiId, loader); - } - } - } - - return [...loadersByApiId.values()].sort((left, right) => left.apiId.localeCompare(right.apiId)); -} - -function resolveApiLoaderFromPropBinding(binding: PropBinding): RuntimeApiLoaderDefinition | null { - if (binding.source.kind !== 'state') { - return null; - } - - const parts = binding.source.path - .split('.') - .map((part) => part.trim()) - .filter(Boolean); - const [root, apiId, collectionSlot] = parts; - if (root !== 'apis' || apiId === undefined || collectionSlot !== 'current') { - return null; - } - - return { - kind: 'api', - apiId, - mode: 'one', - targetPath: `apis.${apiId}.current`, - }; -} From 3d160997d966fe3d6ba406e89f0c4ecd333b0bba Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Mon, 10 Aug 2026 18:55:32 +0200 Subject: [PATCH 07/13] refactor: remove legacy api loader exports --- src/index.ts | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/index.ts b/src/index.ts index fda8f67..3745094 100644 --- a/src/index.ts +++ b/src/index.ts @@ -22,18 +22,6 @@ export { resolveRuntimeActionValue, wrapRuntimeEventProps, } from './runtimeActionRegistry'; -export type { - RuntimeApiLoaderDefinition, - RuntimeApiLoaderDiagnostic, - RuntimeApiLoaderExecutionResult, - RuntimeApiLoaderMaterializationResult, - RuntimeApiLoaderMode, -} from './runtimeApiLoaders'; -export { - executeRuntimeApiLoaders, - materializeRuntimeApiLoaderState, - useRuntimeApiStateLoaders, -} from './runtimeApiLoaders'; export type { RuntimeBindingOperationExecutionArgs, RuntimeBindingOperationExecutionResult, @@ -119,7 +107,6 @@ export { createPendingRuntimeScreenOperationLoaderState, createRuntimeScreenLoaderRequestKey, executeRuntimeScreenOperationLoaders, - resolveScreenApiLoaders, resolveScreenOperationLoaders, useRuntimeScreenOperationLoaders, } from './runtimeScreenLoaders'; From 0dc80f4c5fa502527339d6e93983242cc7f5784b Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Mon, 10 Aug 2026 18:56:34 +0200 Subject: [PATCH 08/13] test: cover generated database operations --- src/runtimeDataSourceOperations.test.ts | 236 +++++++++++++++++++----- 1 file changed, 191 insertions(+), 45 deletions(-) diff --git a/src/runtimeDataSourceOperations.test.ts b/src/runtimeDataSourceOperations.test.ts index e749035..e658caa 100644 --- a/src/runtimeDataSourceOperations.test.ts +++ b/src/runtimeDataSourceOperations.test.ts @@ -2,16 +2,27 @@ import type { DataEndpointConfig, DataSourceConfig, DataSourceRegistry, + DbAdapter, + DbDeleteInput, + DbFindByIdInput, + DbInsertInput, + DbRecord, + DbResult, + DbSelectInput, + DbUpdateInput, } from '@ankhorage/contracts'; +import { createGeneratedApiDataSource } from '@ankhorage/data-sources'; import { describe, expect, it } from 'bun:test'; import { createRuntimeDataSourceOperationExecutor } from './runtimeDataSourceOperations'; -function createDataSources(): DataSourceRegistry { +function createExternalDataSources(): DataSourceRegistry { return { chess: { id: 'chess', - kind: 'rest', + kind: 'api', + origin: 'external', + protocol: 'rest', baseUrl: 'https://api.ankhorage.com', endpoints: { opening: { @@ -43,28 +54,113 @@ function createDataSources(): DataSourceRegistry { }; } +function createGeneratedDataSource(): DataSourceConfig { + const result = createGeneratedApiDataSource({ + id: 'posts-api', + protocol: 'rest', + basePath: '/api', + database: { id: 'primary-db', kind: 'database' }, + resources: [ + { + id: 'posts', + path: '/posts', + operations: ['list', 'read', 'create', 'update', 'delete'], + collection: { + name: 'posts', + schema: 'public', + primaryKey: 'id', + fields: [ + { name: 'id', type: 'uuid', required: true, unique: true }, + { name: 'title', type: 'text', required: true }, + ], + }, + }, + ], + }); + if (!result.ok) throw new Error('Expected generated API fixture to normalize.'); + return result.data; +} + function getFixtureDataSource(registry: DataSourceRegistry): DataSourceConfig { const dataSource = registry.chess; - if (dataSource === undefined) { - throw new Error('Expected chess data-source fixture to exist.'); - } - + if (dataSource === undefined) throw new Error('Expected chess data-source fixture to exist.'); return dataSource; } -function getFixtureEndpoint(dataSource: DataSourceConfig): DataEndpointConfig { - const endpoint = dataSource.endpoints.opening; - if (endpoint === undefined) { - throw new Error('Expected opening endpoint fixture to exist.'); - } - +function getFixtureEndpoint(dataSource: DataSourceConfig, endpointId = 'opening'): DataEndpointConfig { + const endpoint = dataSource.endpoints[endpointId]; + if (endpoint === undefined) throw new Error(`Expected '${endpointId}' endpoint fixture to exist.`); return endpoint; } +interface DatabaseCalls { + readonly select: DbSelectInput[]; + readonly findById: DbFindByIdInput[]; + readonly insert: DbInsertInput[]; + readonly update: DbUpdateInput[]; + readonly delete: DbDeleteInput[]; +} + +function createDatabaseFixture(): { readonly adapter: DbAdapter; readonly calls: DatabaseCalls } { + const calls: DatabaseCalls = { select: [], findById: [], insert: [], update: [], delete: [] }; + const adapter: DbAdapter = { + capabilities: { transactions: false, returning: true, realtime: false }, + select(input: DbSelectInput): Promise> { + calls.select.push(input); + return Promise.resolve({ ok: true, data: [{ id: 'post-1', title: 'First' } as TRecord] }); + }, + findById( + input: DbFindByIdInput, + ): Promise> { + calls.findById.push(input); + return Promise.resolve({ ok: true, data: { id: input.id, title: 'First' } as TRecord }); + }, + insert( + input: DbInsertInput, + ): Promise> { + calls.insert.push(input as DbInsertInput); + const values = Array.isArray(input.values) ? input.values[0] : input.values; + return Promise.resolve({ ok: true, data: [{ id: 'post-2', ...values } as TRecord] }); + }, + update( + input: DbUpdateInput, + ): Promise> { + calls.update.push(input as DbUpdateInput); + return Promise.resolve({ ok: true, data: [{ id: 'post-1', ...input.values } as TRecord] }); + }, + delete( + input: DbDeleteInput, + ): Promise> { + calls.delete.push(input); + return Promise.resolve({ ok: true, data: [{ id: 'post-1', title: 'First' } as TRecord] }); + }, + }; + return { adapter, calls }; +} + +function createGeneratedExecutor(adapter?: DbAdapter) { + return createRuntimeDataSourceOperationExecutor({ + databaseAdapters: adapter === undefined ? undefined : { 'primary-db': adapter }, + }); +} + +async function executeGeneratedOperation( + operationId: string, + input?: Readonly>, + adapter?: DbAdapter, +) { + const dataSource = createGeneratedDataSource(); + return createGeneratedExecutor(adapter)({ + dataSource, + endpoint: getFixtureEndpoint(dataSource, 'posts'), + input, + operation: { dataSourceId: 'posts-api', endpointId: 'posts', operationId }, + }); +} + describe('createRuntimeDataSourceOperationExecutor', () => { - it('executes REST data-source operations through the data-sources test runner', async () => { - const dataSources = createDataSources(); - const dataSource = getFixtureDataSource(dataSources); + it('executes external REST operations through the data-sources test runner', async () => { + const dataSource = getFixtureDataSource(createExternalDataSources()); const endpoint = getFixtureEndpoint(dataSource); const calls: string[] = []; const executor = createRuntimeDataSourceOperationExecutor({ @@ -73,10 +169,7 @@ describe('createRuntimeDataSourceOperationExecutor', () => { return Promise.resolve({ status: 200, headers: { 'content-type': 'application/json' }, - text: () => - Promise.resolve( - '{"moves":[{"san":"e4","uci":"e2e4","games":1200,"whiteWinRate":0.54}]}', - ), + text: () => Promise.resolve('{"moves":[{"san":"e4"}]}'), }); }, }); @@ -84,9 +177,7 @@ describe('createRuntimeDataSourceOperationExecutor', () => { const result = await executor({ dataSource, endpoint, - input: { - fen: 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1', - }, + input: { fen: 'start' }, operation: { dataSourceId: 'chess', endpointId: 'opening', @@ -94,36 +185,91 @@ describe('createRuntimeDataSourceOperationExecutor', () => { }, }); - expect(calls).toEqual([ - 'GET https://api.ankhorage.com/v1/chess/opening?fen=rnbqkbnr%2Fpppppppp%2F8%2F8%2F8%2F8%2FPPPPPPPP%2FRNBQKBNR%20w%20KQkq%20-%200%201', + expect(calls).toEqual(['GET https://api.ankhorage.com/v1/chess/opening?fen=start']); + expect(result).toEqual({ ok: true, data: { moves: [{ san: 'e4' }] }, diagnostics: [] }); + }); + + it('routes generated list/read operations through the referenced database adapter', async () => { + const { adapter, calls } = createDatabaseFixture(); + + expect(await executeGeneratedOperation('posts.list', { limit: 10, offset: 2 }, adapter)).toEqual({ + ok: true, + data: [{ id: 'post-1', title: 'First' }], + diagnostics: [], + }); + expect(await executeGeneratedOperation('posts.read', { id: 'post-1' }, adapter)).toEqual({ + ok: true, + data: { id: 'post-1', title: 'First' }, + diagnostics: [], + }); + + expect(calls.select).toEqual([ + { table: 'posts', schema: 'public', page: { limit: 10, offset: 2 } }, + ]); + expect(calls.findById).toEqual([ + { table: 'posts', schema: 'public', id: 'post-1', idField: 'id' }, ]); - expect(result).toEqual({ + }); + + it('routes generated create/update/delete operations with canonical result shapes', async () => { + const { adapter, calls } = createDatabaseFixture(); + + expect(await executeGeneratedOperation('posts.create', { title: 'Created' }, adapter)).toEqual({ ok: true, - data: { - moves: [ - { - games: 1200, - san: 'e4', - uci: 'e2e4', - whiteWinRate: 0.54, - }, - ], - }, + data: { id: 'post-2', title: 'Created' }, + diagnostics: [], + }); + expect( + await executeGeneratedOperation('posts.update', { id: 'post-1', title: 'Updated' }, adapter), + ).toEqual({ + ok: true, + data: { id: 'post-1', title: 'Updated' }, + diagnostics: [], + }); + expect(await executeGeneratedOperation('posts.delete', { id: 'post-1' }, adapter)).toEqual({ + ok: true, + data: { deleted: true }, diagnostics: [], }); + + expect(calls.insert).toEqual([ + { table: 'posts', schema: 'public', values: { title: 'Created' } }, + ]); + expect(calls.update).toEqual([ + { + table: 'posts', + schema: 'public', + values: { title: 'Updated' }, + filters: [{ field: 'id', operator: 'eq', value: 'post-1' }], + }, + ]); + expect(calls.delete).toEqual([ + { + table: 'posts', + schema: 'public', + filters: [{ field: 'id', operator: 'eq', value: 'post-1' }], + }, + ]); }); - it('returns diagnostics when event input does not resolve to an object', async () => { - const dataSources = createDataSources(); - const dataSource = getFixtureDataSource(dataSources); + it('returns a missing-adapter diagnostic instead of falling through to HTTP', async () => { + const result = await executeGeneratedOperation('posts.list'); + + expect(result.ok).toBe(false); + if (!result.ok) { + expect(result.diagnostics[0]).toMatchObject({ + code: 'missing-adapter', + dataSourceId: 'posts-api', + endpointId: 'posts', + operationId: 'posts.list', + }); + } + }); + + it('returns diagnostics when operation input does not resolve to an object', async () => { + const dataSource = getFixtureDataSource(createExternalDataSources()); const endpoint = getFixtureEndpoint(dataSource); - const executor = createRuntimeDataSourceOperationExecutor({ - fetch: () => - Promise.resolve({ - status: 200, - text: () => Promise.resolve('{}'), - }), - }); + const executor = createRuntimeDataSourceOperationExecutor({}); const result = await executor({ dataSource, From 0338983fc223e119ae1b793c79d12af3a637ac2b Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Mon, 10 Aug 2026 18:56:56 +0200 Subject: [PATCH 09/13] chore: validate adm 5 runtime migration --- .github/workflows/finalize-adm5-runtime.yml | 101 ++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 .github/workflows/finalize-adm5-runtime.yml diff --git a/.github/workflows/finalize-adm5-runtime.yml b/.github/workflows/finalize-adm5-runtime.yml new file mode 100644 index 0000000..3906c84 --- /dev/null +++ b/.github/workflows/finalize-adm5-runtime.yml @@ -0,0 +1,101 @@ +name: Finalize ADM 5 runtime migration + +on: + push: + branches: + - agent/adm-5-generated-api-runtime + +permissions: + contents: write + +jobs: + finalize: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: '1.3.13' + + - name: Finish Contracts 4 migration + run: | + python <<'PY' + from pathlib import Path + + screen_loaders = Path('src/runtimeScreenLoaders.ts') + text = screen_loaders.read_text() + text = text.replace(' ApiScreenDataLoaderDefinition,\n', '') + start = text.find('export function resolveScreenApiLoaders(') + if start >= 0: + end = text.find('export function resolveScreenOperationLoaders(', start) + if end < 0: + raise SystemExit('Could not locate operation loader boundary') + text = text[:start] + text[end:] + screen_loaders.write_text(text) + + for filename in [ + 'src/runtimeActionRegistry.test.ts', + 'src/runtimeBindings.test.ts', + 'src/runtimeRepeat.test.ts', + 'src/runtimeScreenLoaders.test.ts', + ]: + path = Path(filename) + text = path.read_text() + text = text.replace( + " kind: 'rest',\n", + " kind: 'api',\n origin: 'external',\n protocol: 'rest',\n", + ) + path.write_text(text) + PY + rm src/runtimeApiLoaders.ts src/runtimeApiLoaders.test.ts + cat > .changeset/generated-api-runtime.md <<'EOF' + --- + '@ankhorage/runtime': major + --- + + Consume the canonical Contracts 4 and Data Sources 1 API taxonomy, remove the obsolete `manifest.data.apis` seed-loader surface, and execute database-backed generated API operations through their referenced runtime database adapters. + EOF + + - name: Install dependencies + run: bun install --frozen-lockfile + + - name: Format sources + run: bun run format + + - name: Run build + run: bun run build + + - name: Run typecheck + run: bun run typecheck + + - name: Run lint + run: bun run lint + + - name: Run format check + run: bun run format:check + + - name: Run Knip + run: bun run knip + + - name: Run tests + run: bun run test + + - name: Generate docs + run: bun run docs + + - name: Check changeset + run: bun run changeset:status + + - name: Commit validated migration + run: | + rm .github/workflows/finalize-adm5-runtime.yml + git config user.name 'github-actions[bot]' + git config user.email '41898282+github-actions[bot]@users.noreply.github.com' + git add -A + git commit -m 'feat: execute canonical generated api operations' + git push origin HEAD:agent/adm-5-generated-api-runtime From 2c3904e5c1fd99a286a282bee877c3dd223b99e8 Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Mon, 10 Aug 2026 19:00:05 +0200 Subject: [PATCH 10/13] chore: fix adm 5 migration lint findings --- .github/workflows/finalize-adm5-runtime.yml | 54 +++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/.github/workflows/finalize-adm5-runtime.yml b/.github/workflows/finalize-adm5-runtime.yml index 3906c84..9a203b0 100644 --- a/.github/workflows/finalize-adm5-runtime.yml +++ b/.github/workflows/finalize-adm5-runtime.yml @@ -36,8 +36,62 @@ jobs: if end < 0: raise SystemExit('Could not locate operation loader boundary') text = text[:start] + text[end:] + old_operation_loader = """export function resolveScreenOperationLoaders( + screen: ScreenSpec, + ): readonly OperationScreenDataLoaderDefinition[] { + return (screen.dataLoaders ?? []).filter( + (loader): loader is OperationScreenDataLoaderDefinition => loader.kind === 'operation', + ); + } + """ + new_operation_loader = """export function resolveScreenOperationLoaders( + screen: ScreenSpec, + ): readonly OperationScreenDataLoaderDefinition[] { + return screen.dataLoaders ?? []; + } + """ + text = text.replace(old_operation_loader, new_operation_loader) screen_loaders.write_text(text) + db_executor = Path('src/runtimeDatabaseOperationExecutor.ts') + text = db_executor.read_text() + text = text.replace( + " if (dataSource.kind === 'api' && dataSource.origin === 'generated') return dataSource.adapter.id;", + " if (dataSource.origin === 'generated') return dataSource.adapter.id;", + ) + text = text.replace( + " const limit = input.limit;\n const offset = input.offset;", + " const { limit, offset } = input;", + ) + db_executor.write_text(text) + + data_source_test = Path('src/runtimeDataSourceOperations.test.ts') + text = data_source_test.read_text() + text = text.replace( + """ calls.insert.push(input as DbInsertInput); + const values = Array.isArray(input.values) ? input.values[0] : input.values; + return Promise.resolve({ ok: true, data: [{ id: 'post-2', ...values } as TRecord] }); + """, + """ calls.insert.push(input); + return Promise.resolve({ + ok: true, + data: [{ id: 'post-2', title: 'Created' } as TRecord], + }); + """, + ) + text = text.replace( + """ calls.update.push(input as DbUpdateInput); + return Promise.resolve({ ok: true, data: [{ id: 'post-1', ...input.values } as TRecord] }); + """, + """ calls.update.push(input); + return Promise.resolve({ + ok: true, + data: [{ id: 'post-1', title: 'Updated' } as TRecord], + }); + """, + ) + data_source_test.write_text(text) + for filename in [ 'src/runtimeActionRegistry.test.ts', 'src/runtimeBindings.test.ts', From db973f2276e815071bed2d112a83484646d0e186 Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Mon, 10 Aug 2026 19:01:19 +0200 Subject: [PATCH 11/13] chore: align adm 5 database test generics --- .github/workflows/finalize-adm5-runtime.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/finalize-adm5-runtime.yml b/.github/workflows/finalize-adm5-runtime.yml index 9a203b0..668a9ba 100644 --- a/.github/workflows/finalize-adm5-runtime.yml +++ b/.github/workflows/finalize-adm5-runtime.yml @@ -67,6 +67,10 @@ jobs: data_source_test = Path('src/runtimeDataSourceOperations.test.ts') text = data_source_test.read_text() + text = text.replace( + ' readonly insert: DbInsertInput[];\n readonly update: DbUpdateInput[];', + ' readonly insert: DbInsertInput[];\n readonly update: DbUpdateInput[];', + ) text = text.replace( """ calls.insert.push(input as DbInsertInput); const values = Array.isArray(input.values) ? input.values[0] : input.values; From 7b7f3d9e400c2bcfe1fa6689238509844aa7cb35 Mon Sep 17 00:00:00 2001 From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com> Date: Mon, 10 Aug 2026 19:02:48 +0200 Subject: [PATCH 12/13] chore: verify committed adm 5 changeset --- .github/workflows/finalize-adm5-runtime.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/finalize-adm5-runtime.yml b/.github/workflows/finalize-adm5-runtime.yml index 668a9ba..53a816a 100644 --- a/.github/workflows/finalize-adm5-runtime.yml +++ b/.github/workflows/finalize-adm5-runtime.yml @@ -146,14 +146,16 @@ jobs: - name: Generate docs run: bun run docs - - name: Check changeset - run: bun run changeset:status - - - name: Commit validated migration + - name: Prepare validated migration commit run: | rm .github/workflows/finalize-adm5-runtime.yml git config user.name 'github-actions[bot]' git config user.email '41898282+github-actions[bot]@users.noreply.github.com' git add -A git commit -m 'feat: execute canonical generated api operations' - git push origin HEAD:agent/adm-5-generated-api-runtime + + - name: Check changeset + run: bun run changeset:status + + - name: Push validated migration + run: git push origin HEAD:agent/adm-5-generated-api-runtime From 3e09665e7929b7b80e81bd7be8fbec8b93f200d9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2026 17:03:19 +0000 Subject: [PATCH 13/13] feat: execute canonical generated api operations --- .changeset/generated-api-runtime.md | 5 + .github/workflows/finalize-adm5-runtime.yml | 161 -- README.md | 2 +- paradox/badges/npm.svg | 6 +- paradox/components.md | 2 +- paradox/diagrams/architecture-overview.mmd | 14 +- paradox/diagrams/export-graph.mmd | 29 +- paradox/diagrams/module-relationships.mmd | 11 +- paradox/diagrams/sequences/runtime-screen.mmd | 3 - paradox/exports.json | 323 +--- paradox/exports.md | 287 +-- paradox/index.html | 1077 ++++------- paradox/paradox.json | 1576 +++++++---------- src/runtimeActionRegistry.test.ts | 4 +- src/runtimeApiLoaders.test.ts | 138 -- src/runtimeApiLoaders.ts | 309 ---- src/runtimeBindings.test.ts | 4 +- src/runtimeDataSourceOperations.test.ts | 35 +- src/runtimeDataSourceOperations.ts | 6 +- src/runtimeDatabaseOperationExecutor.ts | 30 +- src/runtimeRepeat.test.ts | 4 +- src/runtimeScreenLoaders.test.ts | 4 +- src/runtimeScreenLoaders.ts | 13 +- 23 files changed, 1260 insertions(+), 2783 deletions(-) create mode 100644 .changeset/generated-api-runtime.md delete mode 100644 .github/workflows/finalize-adm5-runtime.yml delete mode 100644 src/runtimeApiLoaders.test.ts delete mode 100644 src/runtimeApiLoaders.ts diff --git a/.changeset/generated-api-runtime.md b/.changeset/generated-api-runtime.md new file mode 100644 index 0000000..7c13603 --- /dev/null +++ b/.changeset/generated-api-runtime.md @@ -0,0 +1,5 @@ +--- +'@ankhorage/runtime': major +--- + +Consume the canonical Contracts 4 and Data Sources 1 API taxonomy, remove the obsolete `manifest.data.apis` seed-loader surface, and execute database-backed generated API operations through their referenced runtime database adapters. diff --git a/.github/workflows/finalize-adm5-runtime.yml b/.github/workflows/finalize-adm5-runtime.yml deleted file mode 100644 index 53a816a..0000000 --- a/.github/workflows/finalize-adm5-runtime.yml +++ /dev/null @@ -1,161 +0,0 @@ -name: Finalize ADM 5 runtime migration - -on: - push: - branches: - - agent/adm-5-generated-api-runtime - -permissions: - contents: write - -jobs: - finalize: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: '1.3.13' - - - name: Finish Contracts 4 migration - run: | - python <<'PY' - from pathlib import Path - - screen_loaders = Path('src/runtimeScreenLoaders.ts') - text = screen_loaders.read_text() - text = text.replace(' ApiScreenDataLoaderDefinition,\n', '') - start = text.find('export function resolveScreenApiLoaders(') - if start >= 0: - end = text.find('export function resolveScreenOperationLoaders(', start) - if end < 0: - raise SystemExit('Could not locate operation loader boundary') - text = text[:start] + text[end:] - old_operation_loader = """export function resolveScreenOperationLoaders( - screen: ScreenSpec, - ): readonly OperationScreenDataLoaderDefinition[] { - return (screen.dataLoaders ?? []).filter( - (loader): loader is OperationScreenDataLoaderDefinition => loader.kind === 'operation', - ); - } - """ - new_operation_loader = """export function resolveScreenOperationLoaders( - screen: ScreenSpec, - ): readonly OperationScreenDataLoaderDefinition[] { - return screen.dataLoaders ?? []; - } - """ - text = text.replace(old_operation_loader, new_operation_loader) - screen_loaders.write_text(text) - - db_executor = Path('src/runtimeDatabaseOperationExecutor.ts') - text = db_executor.read_text() - text = text.replace( - " if (dataSource.kind === 'api' && dataSource.origin === 'generated') return dataSource.adapter.id;", - " if (dataSource.origin === 'generated') return dataSource.adapter.id;", - ) - text = text.replace( - " const limit = input.limit;\n const offset = input.offset;", - " const { limit, offset } = input;", - ) - db_executor.write_text(text) - - data_source_test = Path('src/runtimeDataSourceOperations.test.ts') - text = data_source_test.read_text() - text = text.replace( - ' readonly insert: DbInsertInput[];\n readonly update: DbUpdateInput[];', - ' readonly insert: DbInsertInput[];\n readonly update: DbUpdateInput[];', - ) - text = text.replace( - """ calls.insert.push(input as DbInsertInput); - const values = Array.isArray(input.values) ? input.values[0] : input.values; - return Promise.resolve({ ok: true, data: [{ id: 'post-2', ...values } as TRecord] }); - """, - """ calls.insert.push(input); - return Promise.resolve({ - ok: true, - data: [{ id: 'post-2', title: 'Created' } as TRecord], - }); - """, - ) - text = text.replace( - """ calls.update.push(input as DbUpdateInput); - return Promise.resolve({ ok: true, data: [{ id: 'post-1', ...input.values } as TRecord] }); - """, - """ calls.update.push(input); - return Promise.resolve({ - ok: true, - data: [{ id: 'post-1', title: 'Updated' } as TRecord], - }); - """, - ) - data_source_test.write_text(text) - - for filename in [ - 'src/runtimeActionRegistry.test.ts', - 'src/runtimeBindings.test.ts', - 'src/runtimeRepeat.test.ts', - 'src/runtimeScreenLoaders.test.ts', - ]: - path = Path(filename) - text = path.read_text() - text = text.replace( - " kind: 'rest',\n", - " kind: 'api',\n origin: 'external',\n protocol: 'rest',\n", - ) - path.write_text(text) - PY - rm src/runtimeApiLoaders.ts src/runtimeApiLoaders.test.ts - cat > .changeset/generated-api-runtime.md <<'EOF' - --- - '@ankhorage/runtime': major - --- - - Consume the canonical Contracts 4 and Data Sources 1 API taxonomy, remove the obsolete `manifest.data.apis` seed-loader surface, and execute database-backed generated API operations through their referenced runtime database adapters. - EOF - - - name: Install dependencies - run: bun install --frozen-lockfile - - - name: Format sources - run: bun run format - - - name: Run build - run: bun run build - - - name: Run typecheck - run: bun run typecheck - - - name: Run lint - run: bun run lint - - - name: Run format check - run: bun run format:check - - - name: Run Knip - run: bun run knip - - - name: Run tests - run: bun run test - - - name: Generate docs - run: bun run docs - - - name: Prepare validated migration commit - run: | - rm .github/workflows/finalize-adm5-runtime.yml - git config user.name 'github-actions[bot]' - git config user.email '41898282+github-actions[bot]@users.noreply.github.com' - git add -A - git commit -m 'feat: execute canonical generated api operations' - - - name: Check changeset - run: bun run changeset:status - - - name: Push validated migration - run: git push origin HEAD:agent/adm-5-generated-api-runtime diff --git a/README.md b/README.md index d91c572..9accbb3 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # @ankhorage/runtime -![license: MIT](./paradox/badges/license.svg) ![npm: v0.2.4](./paradox/badges/npm.svg) ![runtime: bun](./paradox/badges/runtime.svg) ![typescript: strict](./paradox/badges/typescript.svg) ![eslint: checked](./paradox/badges/eslint.svg) ![prettier: checked](./paradox/badges/prettier.svg) ![build: checked](./paradox/badges/build.svg) ![tests: checked](./paradox/badges/tests.svg) ![docs: paradox](./paradox/badges/docs.svg) +![license: MIT](./paradox/badges/license.svg) ![npm: v0.3.0](./paradox/badges/npm.svg) ![runtime: bun](./paradox/badges/runtime.svg) ![typescript: strict](./paradox/badges/typescript.svg) ![eslint: checked](./paradox/badges/eslint.svg) ![prettier: checked](./paradox/badges/prettier.svg) ![build: checked](./paradox/badges/build.svg) ![tests: checked](./paradox/badges/tests.svg) ![docs: paradox](./paradox/badges/docs.svg) Platform-neutral runtime contracts and helpers for Ankhorage generated apps. diff --git a/paradox/badges/npm.svg b/paradox/badges/npm.svg index 31abe22..1f47f8e 100644 --- a/paradox/badges/npm.svg +++ b/paradox/badges/npm.svg @@ -1,7 +1,7 @@ - -npm: v0.2.4 + +npm: v0.3.0 npm -v0.2.4 +v0.3.0 diff --git a/paradox/components.md b/paradox/components.md index 7f53c54..cd4b599 100644 --- a/paradox/components.md +++ b/paradox/components.md @@ -61,7 +61,7 @@ Export paths: `src/index.ts` ## RuntimeScreen -Source: `src/RuntimeScreen.tsx:24:1` +Source: `src/RuntimeScreen.tsx:17:1` Export paths: `src/index.ts` diff --git a/paradox/diagrams/architecture-overview.mmd b/paradox/diagrams/architecture-overview.mmd index be4e4e8..cba79b9 100644 --- a/paradox/diagrams/architecture-overview.mmd +++ b/paradox/diagrams/architecture-overview.mmd @@ -29,26 +29,22 @@ graph TD package__ankhorage_runtime -.-> module_src_runtimeActionRegistry_ts module_src_runtimeActionRegistry_ts --> module_src_runtimeBindings_ts module_src_runtimeActionRegistry_ts --> module_src_RuntimeRendererConfig_tsx - module_src_runtimeApiLoaders_test_ts["src/runtimeApiLoaders.test.ts"] - package__ankhorage_runtime -.-> module_src_runtimeApiLoaders_test_ts - module_src_runtimeApiLoaders_test_ts --> module_src_runtimeApiLoaders_ts - module_src_runtimeApiLoaders_test_ts --> module_src_runtimeBindings_ts - module_src_runtimeApiLoaders_test_ts --> module_src_runtimeStateAdapter_ts - module_src_runtimeApiLoaders_ts["src/runtimeApiLoaders.ts"] - package__ankhorage_runtime -.-> module_src_runtimeApiLoaders_ts - module_src_runtimeApiLoaders_ts --> module_src_runtimeStateAdapter_ts module_src_runtimeBindings_test_ts["src/runtimeBindings.test.ts"] package__ankhorage_runtime -.-> module_src_runtimeBindings_test_ts module_src_runtimeBindings_test_ts --> module_src_runtimeBindings_ts module_src_runtimeBindings_test_ts --> module_src_runtimeNodeProps_ts module_src_runtimeBindings_ts["src/runtimeBindings.ts"] package__ankhorage_runtime -.-> module_src_runtimeBindings_ts + module_src_runtimeDatabaseOperationExecutor_ts["src/runtimeDatabaseOperationExecutor.ts"] + package__ankhorage_runtime -.-> module_src_runtimeDatabaseOperationExecutor_ts + module_src_runtimeDatabaseOperationExecutor_ts --> module_src_runtimeBindings_ts module_src_runtimeDataSourceOperations_test_ts["src/runtimeDataSourceOperations.test.ts"] package__ankhorage_runtime -.-> module_src_runtimeDataSourceOperations_test_ts module_src_runtimeDataSourceOperations_test_ts --> module_src_runtimeDataSourceOperations_ts module_src_runtimeDataSourceOperations_ts["src/runtimeDataSourceOperations.ts"] package__ankhorage_runtime -.-> module_src_runtimeDataSourceOperations_ts module_src_runtimeDataSourceOperations_ts --> module_src_runtimeBindings_ts + module_src_runtimeDataSourceOperations_ts --> module_src_runtimeDatabaseOperationExecutor_ts module_src_runtimeDbPersist_test_ts["src/runtimeDbPersist.test.ts"] package__ankhorage_runtime -.-> module_src_runtimeDbPersist_test_ts module_src_runtimeDbPersist_test_ts --> module_src_runtimeActionRegistry_ts @@ -112,10 +108,10 @@ graph TD module_src_RuntimeScreen_tsx["src/RuntimeScreen.tsx"] package__ankhorage_runtime -.-> module_src_RuntimeScreen_tsx module_src_RuntimeScreen_tsx --> module_src_registry_tsx - module_src_RuntimeScreen_tsx --> module_src_runtimeApiLoaders_ts module_src_RuntimeScreen_tsx --> module_src_RuntimeRenderer_tsx module_src_RuntimeScreen_tsx --> module_src_RuntimeRendererConfig_tsx module_src_RuntimeScreen_tsx --> module_src_runtimeScreenLoaders_ts + module_src_RuntimeScreen_tsx --> module_src_runtimeStateAdapter_ts module_src_runtimeScreenLoaders_arrayPath_test_ts["src/runtimeScreenLoaders.arrayPath.test.ts"] package__ankhorage_runtime -.-> module_src_runtimeScreenLoaders_arrayPath_test_ts module_src_runtimeScreenLoaders_arrayPath_test_ts --> module_src_runtimeBindings_ts diff --git a/paradox/diagrams/export-graph.mmd b/paradox/diagrams/export-graph.mmd index 1cdbee1..aa0373e 100644 --- a/paradox/diagrams/export-graph.mmd +++ b/paradox/diagrams/export-graph.mmd @@ -9,10 +9,9 @@ graph LR module_src_rendering_ts["src/rendering.ts"] module_src_runtimeActionRegistry_test_ts["src/runtimeActionRegistry.test.ts"] module_src_runtimeActionRegistry_ts["src/runtimeActionRegistry.ts"] - module_src_runtimeApiLoaders_test_ts["src/runtimeApiLoaders.test.ts"] - module_src_runtimeApiLoaders_ts["src/runtimeApiLoaders.ts"] module_src_runtimeBindings_test_ts["src/runtimeBindings.test.ts"] module_src_runtimeBindings_ts["src/runtimeBindings.ts"] + module_src_runtimeDatabaseOperationExecutor_ts["src/runtimeDatabaseOperationExecutor.ts"] module_src_runtimeDataSourceOperations_test_ts["src/runtimeDataSourceOperations.test.ts"] module_src_runtimeDataSourceOperations_ts["src/runtimeDataSourceOperations.ts"] module_src_runtimeDbPersist_test_ts["src/runtimeDbPersist.test.ts"] @@ -106,10 +105,6 @@ graph LR module_src_runtimeDbPersist_ts --> export_executeDbPersistAction export_executeDbPersistAction -.-> export_RuntimeActionHandlerArgs export_executeDbPersistAction -.-> export_RuntimeDbPersistExecutionResult - export_executeRuntimeApiLoaders["executeRuntimeApiLoaders"] - module_src_runtimeApiLoaders_ts --> export_executeRuntimeApiLoaders - export_executeRuntimeApiLoaders -.-> export_RuntimeApiLoaderDefinition - export_executeRuntimeApiLoaders -.-> export_RuntimeApiLoaderExecutionResult export_executeRuntimeScreenOperationLoaders["executeRuntimeScreenOperationLoaders"] module_src_runtimeScreenLoaders_ts --> export_executeRuntimeScreenOperationLoaders export_executeRuntimeScreenOperationLoaders -.-> export_RuntimeBindingOperationExecutor @@ -122,10 +117,6 @@ graph LR module_src_ManifestContext_tsx --> export_ManifestContext export_ManifestProvider["ManifestProvider"] module_src_ManifestContext_tsx --> export_ManifestProvider - export_materializeRuntimeApiLoaderState["materializeRuntimeApiLoaderState"] - module_src_runtimeApiLoaders_ts --> export_materializeRuntimeApiLoaderState - export_materializeRuntimeApiLoaderState -.-> export_RuntimeApiLoaderDefinition - export_materializeRuntimeApiLoaderState -.-> export_RuntimeApiLoaderMaterializationResult export_mergeRuntimeRendererConfig["mergeRuntimeRendererConfig"] module_src_RuntimeRendererConfig_tsx --> export_mergeRuntimeRendererConfig export_mergeRuntimeRendererConfig -.-> export_RuntimeRendererConfig @@ -155,8 +146,6 @@ graph LR export_resolveRuntimeBindingValueSync["resolveRuntimeBindingValueSync"] module_src_runtimeBindings_ts --> export_resolveRuntimeBindingValueSync export_resolveRuntimeBindingValueSync -.-> export_RuntimeBindingResolutionContext - export_resolveScreenApiLoaders["resolveScreenApiLoaders"] - module_src_runtimeScreenLoaders_ts --> export_resolveScreenApiLoaders export_resolveScreenOperationLoaders["resolveScreenOperationLoaders"] module_src_runtimeScreenLoaders_ts --> export_resolveScreenOperationLoaders export_RUNTIME_CAPABILITIES["RUNTIME_CAPABILITIES"] @@ -186,18 +175,6 @@ graph LR module_src_runtimeActionRegistry_ts --> export_RuntimeActionResolutionScope export_RuntimeAdapterDescriptor["RuntimeAdapterDescriptor"] module_src_runtimeManifest_ts --> export_RuntimeAdapterDescriptor - export_RuntimeApiLoaderDefinition["RuntimeApiLoaderDefinition"] - module_src_runtimeApiLoaders_ts --> export_RuntimeApiLoaderDefinition - export_RuntimeApiLoaderDiagnostic["RuntimeApiLoaderDiagnostic"] - module_src_runtimeApiLoaders_ts --> export_RuntimeApiLoaderDiagnostic - export_RuntimeApiLoaderExecutionResult["RuntimeApiLoaderExecutionResult"] - module_src_runtimeApiLoaders_ts --> export_RuntimeApiLoaderExecutionResult - export_RuntimeApiLoaderExecutionResult -.-> export_RuntimeApiLoaderDiagnostic - export_RuntimeApiLoaderMaterializationResult["RuntimeApiLoaderMaterializationResult"] - module_src_runtimeApiLoaders_ts --> export_RuntimeApiLoaderMaterializationResult - export_RuntimeApiLoaderMaterializationResult -.-> export_RuntimeApiLoaderDiagnostic - export_RuntimeApiLoaderMode["RuntimeApiLoaderMode"] - module_src_runtimeApiLoaders_ts --> export_RuntimeApiLoaderMode export_RuntimeBindingDescriptor["RuntimeBindingDescriptor"] module_src_runtimeManifest_ts --> export_RuntimeBindingDescriptor export_RuntimeBindingOperationExecutionArgs["RuntimeBindingOperationExecutionArgs"] @@ -303,10 +280,6 @@ graph LR module_src_ManifestContext_tsx --> export_useManifestContext export_useOptionalManifestContext["useOptionalManifestContext"] module_src_ManifestContext_tsx --> export_useOptionalManifestContext - export_useRuntimeApiStateLoaders["useRuntimeApiStateLoaders"] - module_src_runtimeApiLoaders_ts --> export_useRuntimeApiStateLoaders - export_useRuntimeApiStateLoaders -.-> export_RuntimeApiLoaderDefinition - export_useRuntimeApiStateLoaders -.-> export_RuntimeApiLoaderDiagnostic export_useRuntimeRendererConfig["useRuntimeRendererConfig"] module_src_RuntimeRendererConfig_tsx --> export_useRuntimeRendererConfig export_useRuntimeRendererConfig -.-> export_RuntimeRendererConfig diff --git a/paradox/diagrams/module-relationships.mmd b/paradox/diagrams/module-relationships.mmd index e39be8f..eb939a5 100644 --- a/paradox/diagrams/module-relationships.mmd +++ b/paradox/diagrams/module-relationships.mmd @@ -9,10 +9,9 @@ graph LR module_src_rendering_ts["src/rendering.ts"] module_src_runtimeActionRegistry_test_ts["src/runtimeActionRegistry.test.ts"] module_src_runtimeActionRegistry_ts["src/runtimeActionRegistry.ts"] - module_src_runtimeApiLoaders_test_ts["src/runtimeApiLoaders.test.ts"] - module_src_runtimeApiLoaders_ts["src/runtimeApiLoaders.ts"] module_src_runtimeBindings_test_ts["src/runtimeBindings.test.ts"] module_src_runtimeBindings_ts["src/runtimeBindings.ts"] + module_src_runtimeDatabaseOperationExecutor_ts["src/runtimeDatabaseOperationExecutor.ts"] module_src_runtimeDataSourceOperations_test_ts["src/runtimeDataSourceOperations.test.ts"] module_src_runtimeDataSourceOperations_ts["src/runtimeDataSourceOperations.ts"] module_src_runtimeDbPersist_test_ts["src/runtimeDbPersist.test.ts"] @@ -46,14 +45,12 @@ graph LR module_src_runtimeActionRegistry_test_ts --> module_src_runtimeBindings_ts module_src_runtimeActionRegistry_ts --> module_src_runtimeBindings_ts module_src_runtimeActionRegistry_ts --> module_src_RuntimeRendererConfig_tsx - module_src_runtimeApiLoaders_test_ts --> module_src_runtimeApiLoaders_ts - module_src_runtimeApiLoaders_test_ts --> module_src_runtimeBindings_ts - module_src_runtimeApiLoaders_test_ts --> module_src_runtimeStateAdapter_ts - module_src_runtimeApiLoaders_ts --> module_src_runtimeStateAdapter_ts module_src_runtimeBindings_test_ts --> module_src_runtimeBindings_ts module_src_runtimeBindings_test_ts --> module_src_runtimeNodeProps_ts + module_src_runtimeDatabaseOperationExecutor_ts --> module_src_runtimeBindings_ts module_src_runtimeDataSourceOperations_test_ts --> module_src_runtimeDataSourceOperations_ts module_src_runtimeDataSourceOperations_ts --> module_src_runtimeBindings_ts + module_src_runtimeDataSourceOperations_ts --> module_src_runtimeDatabaseOperationExecutor_ts module_src_runtimeDbPersist_test_ts --> module_src_runtimeActionRegistry_ts module_src_runtimeDbPersist_test_ts --> module_src_runtimeDbPersist_ts module_src_runtimeDbPersist_ts --> module_src_RuntimeRendererConfig_tsx @@ -83,10 +80,10 @@ graph LR module_src_runtimeRepeat_test_ts --> module_src_runtimeRepeat_ts module_src_runtimeRepeat_ts --> module_src_runtimeBindings_ts module_src_RuntimeScreen_tsx --> module_src_registry_tsx - module_src_RuntimeScreen_tsx --> module_src_runtimeApiLoaders_ts module_src_RuntimeScreen_tsx --> module_src_RuntimeRenderer_tsx module_src_RuntimeScreen_tsx --> module_src_RuntimeRendererConfig_tsx module_src_RuntimeScreen_tsx --> module_src_runtimeScreenLoaders_ts + module_src_RuntimeScreen_tsx --> module_src_runtimeStateAdapter_ts module_src_runtimeScreenLoaders_arrayPath_test_ts --> module_src_runtimeBindings_ts module_src_runtimeScreenLoaders_arrayPath_test_ts --> module_src_runtimeScreenLoaders_ts module_src_runtimeScreenLoaders_test_ts --> module_src_runtimeBindings_ts diff --git a/paradox/diagrams/sequences/runtime-screen.mmd b/paradox/diagrams/sequences/runtime-screen.mmd index d72020c..de48790 100644 --- a/paradox/diagrams/sequences/runtime-screen.mmd +++ b/paradox/diagrams/sequences/runtime-screen.mmd @@ -2,15 +2,12 @@ sequenceDiagram participant participant_createRuntimeScreenOperationLoaderLifecycle as createRuntimeScreenOperationLoaderLifecycle participant participant_RuntimeScreen as RuntimeScreen participant participant_useContext as useContext - participant participant_useRuntimeApiStateLoaders as useRuntimeApiStateLoaders participant participant_useRuntimeRendererConfig as useRuntimeRendererConfig participant participant_useRuntimeScreenOperationLoaders as useRuntimeScreenOperationLoaders participant_RuntimeScreen->>participant_useRuntimeRendererConfig: useRuntimeRendererConfig() participant_useRuntimeRendererConfig->>participant_useContext: useContext() participant_useContext-->>participant_useRuntimeRendererConfig: return participant_useRuntimeRendererConfig-->>participant_RuntimeScreen: return - participant_RuntimeScreen->>participant_useRuntimeApiStateLoaders: useRuntimeApiStateLoaders() - participant_useRuntimeApiStateLoaders-->>participant_RuntimeScreen: return participant_RuntimeScreen->>participant_useRuntimeScreenOperationLoaders: useRuntimeScreenOperationLoaders() participant_useRuntimeScreenOperationLoaders->>participant_createRuntimeScreenOperationLoaderLifecycle: createRuntimeScreenOperationLoaderLifecycle() participant_createRuntimeScreenOperationLoaderLifecycle-->>participant_useRuntimeScreenOperationLoaders: return diff --git a/paradox/exports.json b/paradox/exports.json index 73e14a3..9bc588f 100644 --- a/paradox/exports.json +++ b/paradox/exports.json @@ -230,7 +230,7 @@ "modulePath": "src/runtimeScreenLoaders.ts", "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 93, + "line": 82, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -333,7 +333,7 @@ "modulePath": "src/runtimeDataSourceOperations.ts", "sourceLocation": { "filePath": "src/runtimeDataSourceOperations.ts", - "line": 12, + "line": 14, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -432,7 +432,7 @@ "modulePath": "src/runtimeScreenLoaders.ts", "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 60, + "line": 49, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -651,38 +651,6 @@ "members": [], "structuredRows": [] }, - { - "name": "executeRuntimeApiLoaders", - "description": null, - "isReadme": false, - "examples": [], - "kind": "function", - "modulePath": "src/runtimeApiLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 100, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": ["RuntimeApiLoaderDefinition", "RuntimeApiLoaderExecutionResult"], - "signatures": [ - { - "label": "(args: { readonly data?: AppDataManifest; readonly loaders: readonly RuntimeApiLoaderDefinition[]; readonly stateAdapter: StateAdapter; }) => RuntimeApiLoaderExecutionResult", - "parameters": [ - { - "name": "args", - "type": "{ readonly data?: AppDataManifest; readonly loaders: readonly RuntimeApiLoaderDefinition[]; readonly stateAdapter: StateAdapter; }", - "required": true, - "description": null - } - ], - "returnType": "RuntimeApiLoaderExecutionResult", - "returnDescription": null - } - ], - "members": [], - "structuredRows": [] - }, { "name": "executeRuntimeScreenOperationLoaders", "description": null, @@ -692,7 +660,7 @@ "modulePath": "src/runtimeScreenLoaders.ts", "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 189, + "line": 178, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -795,38 +763,6 @@ "members": [], "structuredRows": [] }, - { - "name": "materializeRuntimeApiLoaderState", - "description": null, - "isReadme": false, - "examples": [], - "kind": "function", - "modulePath": "src/runtimeApiLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 40, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": ["RuntimeApiLoaderDefinition", "RuntimeApiLoaderMaterializationResult"], - "signatures": [ - { - "label": "(args: { readonly data?: AppDataManifest; readonly loaders: readonly RuntimeApiLoaderDefinition[]; }) => RuntimeApiLoaderMaterializationResult", - "parameters": [ - { - "name": "args", - "type": "{ readonly data?: AppDataManifest; readonly loaders: readonly RuntimeApiLoaderDefinition[]; }", - "required": true, - "description": null - } - ], - "returnType": "RuntimeApiLoaderMaterializationResult", - "returnDescription": null - } - ], - "members": [], - "structuredRows": [] - }, { "name": "mergeRuntimeRendererConfig", "description": null, @@ -1169,38 +1105,6 @@ "members": [], "structuredRows": [] }, - { - "name": "resolveScreenApiLoaders", - "description": null, - "isReadme": false, - "examples": [], - "kind": "function", - "modulePath": "src/runtimeScreenLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeScreenLoaders.ts", - "line": 44, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": [], - "signatures": [ - { - "label": "(screen: ScreenSpec) => readonly ApiScreenDataLoaderDefinition[]", - "parameters": [ - { - "name": "screen", - "type": "ScreenSpec", - "required": true, - "description": null - } - ], - "returnType": "readonly ApiScreenDataLoaderDefinition[]", - "returnDescription": null - } - ], - "members": [], - "structuredRows": [] - }, { "name": "resolveScreenOperationLoaders", "description": null, @@ -1210,7 +1114,7 @@ "modulePath": "src/runtimeScreenLoaders.ts", "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 52, + "line": 43, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -1595,148 +1499,6 @@ ], "structuredRows": [] }, - { - "name": "RuntimeApiLoaderDefinition", - "description": null, - "isReadme": false, - "examples": [], - "kind": "unknown", - "modulePath": "src/runtimeApiLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 17, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": [], - "signatures": [], - "members": [], - "structuredRows": [] - }, - { - "name": "RuntimeApiLoaderDiagnostic", - "description": null, - "isReadme": false, - "examples": [], - "kind": "type", - "modulePath": "src/runtimeApiLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 19, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": [], - "signatures": [], - "members": [ - { - "name": "apiId", - "kind": "property", - "type": "string | undefined", - "required": false, - "description": null - }, - { - "name": "code", - "kind": "property", - "type": "\"invalid-record\" | \"missing-api\" | \"missing-target-path\" | \"state-set-failed\" | \"unsupported-loader\"", - "required": true, - "description": null - }, - { - "name": "message", - "kind": "property", - "type": "string", - "required": true, - "description": null - }, - { - "name": "targetPath", - "kind": "property", - "type": "string | undefined", - "required": false, - "description": null - } - ], - "structuredRows": [] - }, - { - "name": "RuntimeApiLoaderExecutionResult", - "description": null, - "isReadme": false, - "examples": [], - "kind": "type", - "modulePath": "src/runtimeApiLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 31, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": ["RuntimeApiLoaderDiagnostic"], - "signatures": [], - "members": [ - { - "name": "diagnostics", - "kind": "property", - "type": "readonly RuntimeApiLoaderDiagnostic[]", - "required": true, - "description": null - } - ], - "structuredRows": [] - }, - { - "name": "RuntimeApiLoaderMaterializationResult", - "description": null, - "isReadme": false, - "examples": [], - "kind": "type", - "modulePath": "src/runtimeApiLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 35, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": ["RuntimeApiLoaderDiagnostic"], - "signatures": [], - "members": [ - { - "name": "diagnostics", - "kind": "property", - "type": "readonly RuntimeApiLoaderDiagnostic[]", - "required": true, - "description": null - }, - { - "name": "state", - "kind": "property", - "type": "Readonly>", - "required": true, - "description": null - } - ], - "structuredRows": [] - }, - { - "name": "RuntimeApiLoaderMode", - "description": null, - "isReadme": false, - "examples": [], - "kind": "unknown", - "modulePath": "src/runtimeApiLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 15, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": [], - "signatures": [], - "members": [], - "structuredRows": [] - }, { "name": "RuntimeBindingDescriptor", "description": null, @@ -1961,7 +1723,7 @@ { "name": "dataBindings", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, @@ -2043,7 +1805,7 @@ { "name": "dataBindings", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, @@ -2166,7 +1928,7 @@ { "name": "dataBindings", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, @@ -2245,7 +2007,7 @@ "modulePath": "src/runtimeDataSourceOperations.ts", "sourceLocation": { "filePath": "src/runtimeDataSourceOperations.ts", - "line": 7, + "line": 8, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -2259,11 +2021,18 @@ "required": false, "description": null }, + { + "name": "databaseAdapters", + "kind": "property", + "type": "Readonly> | undefined", + "required": false, + "description": null + }, { "name": "fetch", "kind": "property", - "type": "EndpointTestFetch", - "required": true, + "type": "EndpointTestFetch | undefined", + "required": false, "description": null } ], @@ -2452,7 +2221,7 @@ { "name": "dataBindings", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, @@ -2791,14 +2560,14 @@ { "name": "dataBindings", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, { "name": "dataSources", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, @@ -2847,7 +2616,7 @@ { "name": "operationResults", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, @@ -2952,14 +2721,14 @@ { "name": "dataBindings", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, { "name": "dataSources", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, @@ -2987,7 +2756,7 @@ { "name": "executeAction", "kind": "property", - "type": "import(\"/Users/a_rtiphishl_e/git/runtime/src/RuntimeRendererConfig\").RuntimeActionHandler | undefined", + "type": "import(\"/home/runner/work/runtime/runtime/src/RuntimeRendererConfig\").RuntimeActionHandler | undefined", "required": false, "description": null }, @@ -3132,7 +2901,7 @@ "modulePath": "src/RuntimeScreen.tsx", "sourceLocation": { "filePath": "src/RuntimeScreen.tsx", - "line": 24, + "line": 17, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -3164,7 +2933,7 @@ "modulePath": "src/runtimeScreenLoaders.ts", "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 26, + "line": 25, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -3204,7 +2973,7 @@ "modulePath": "src/runtimeScreenLoaders.ts", "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 19, + "line": 18, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -3251,7 +3020,7 @@ "modulePath": "src/RuntimeScreen.tsx", "sourceLocation": { "filePath": "src/RuntimeScreen.tsx", - "line": 17, + "line": 10, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -3396,38 +3165,6 @@ "members": [], "structuredRows": [] }, - { - "name": "useRuntimeApiStateLoaders", - "description": null, - "isReadme": false, - "examples": [], - "kind": "function", - "modulePath": "src/runtimeApiLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 125, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": ["RuntimeApiLoaderDefinition", "RuntimeApiLoaderDiagnostic"], - "signatures": [ - { - "label": "(args: { readonly data?: AppDataManifest; readonly loaders?: readonly RuntimeApiLoaderDefinition[]; readonly stateAdapter?: StateAdapter; }) => { readonly diagnostics: readonly RuntimeApiLoaderDiagnostic[]; readonly stateAdapter: StateAdapter; readonly stateVersion: number; }", - "parameters": [ - { - "name": "args", - "type": "{ readonly data?: AppDataManifest; readonly loaders?: readonly RuntimeApiLoaderDefinition[]; readonly stateAdapter?: StateAdapter; }", - "required": true, - "description": null - } - ], - "returnType": "{ readonly diagnostics: readonly RuntimeApiLoaderDiagnostic[]; readonly stateAdapter: StateAdapter; readonly stateVersion: number; }", - "returnDescription": null - } - ], - "members": [], - "structuredRows": [] - }, { "name": "useRuntimeRendererConfig", "description": null, @@ -3462,7 +3199,7 @@ "modulePath": "src/runtimeScreenLoaders.ts", "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 284, + "line": 273, "column": 1 }, "exportPaths": ["src/index.ts"], diff --git a/paradox/exports.md b/paradox/exports.md index 8ca1d2a..fb88f64 100644 --- a/paradox/exports.md +++ b/paradox/exports.md @@ -84,7 +84,7 @@ Source: `src/runtimeDbPersist.ts:126:1` Kind: `function` Module: `src/runtimeScreenLoaders.ts` -Source: `src/runtimeScreenLoaders.ts:93:1` +Source: `src/runtimeScreenLoaders.ts:82:1` ### Signatures @@ -120,7 +120,7 @@ Source: `src/runtimeBindings.ts:163:1` Kind: `function` Module: `src/runtimeDataSourceOperations.ts` -Source: `src/runtimeDataSourceOperations.ts:12:1` +Source: `src/runtimeDataSourceOperations.ts:14:1` ### Signatures @@ -156,7 +156,7 @@ Source: `src/runtimeStateAdapter.ts:18:1` Kind: `function` Module: `src/runtimeScreenLoaders.ts` -Source: `src/runtimeScreenLoaders.ts:60:1` +Source: `src/runtimeScreenLoaders.ts:49:1` ### Signatures @@ -236,23 +236,11 @@ Source: `src/runtimeDbPersist.ts:48:1` - args: `{ readonly dbAdapter: DbAdapter; readonly handlerArgs: RuntimeActionHandlerArgs; }` - returns: `Promise` -## executeRuntimeApiLoaders - -Kind: `function` -Module: `src/runtimeApiLoaders.ts` -Source: `src/runtimeApiLoaders.ts:100:1` - -### Signatures - -- `(args: { readonly data?: AppDataManifest; readonly loaders: readonly RuntimeApiLoaderDefinition[]; readonly stateAdapter: StateAdapter; }) => RuntimeApiLoaderExecutionResult` - - args: `{ readonly data?: AppDataManifest; readonly loaders: readonly RuntimeApiLoaderDefinition[]; readonly stateAdapter: StateAdapter; }` - - returns: `RuntimeApiLoaderExecutionResult` - ## executeRuntimeScreenOperationLoaders Kind: `function` Module: `src/runtimeScreenLoaders.ts` -Source: `src/runtimeScreenLoaders.ts:189:1` +Source: `src/runtimeScreenLoaders.ts:178:1` ### Signatures @@ -289,18 +277,6 @@ Source: `src/ManifestContext.tsx:12:1` - props: `ManifestContextValue & { children: React.ReactNode; }` - returns: `React.JSX.Element` -## materializeRuntimeApiLoaderState - -Kind: `function` -Module: `src/runtimeApiLoaders.ts` -Source: `src/runtimeApiLoaders.ts:40:1` - -### Signatures - -- `(args: { readonly data?: AppDataManifest; readonly loaders: readonly RuntimeApiLoaderDefinition[]; }) => RuntimeApiLoaderMaterializationResult` - - args: `{ readonly data?: AppDataManifest; readonly loaders: readonly RuntimeApiLoaderDefinition[]; }` - - returns: `RuntimeApiLoaderMaterializationResult` - ## mergeRuntimeRendererConfig Kind: `function` @@ -418,23 +394,11 @@ Source: `src/runtimeBindings.ts:116:1` - diagnostics: `DataSourceDiagnostic[]` (optional) - returns: `unknown` -## resolveScreenApiLoaders - -Kind: `function` -Module: `src/runtimeScreenLoaders.ts` -Source: `src/runtimeScreenLoaders.ts:44:1` - -### Signatures - -- `(screen: ScreenSpec) => readonly ApiScreenDataLoaderDefinition[]` - - screen: `ScreenSpec` - - returns: `readonly ApiScreenDataLoaderDefinition[]` - ## resolveScreenOperationLoaders Kind: `function` Module: `src/runtimeScreenLoaders.ts` -Source: `src/runtimeScreenLoaders.ts:52:1` +Source: `src/runtimeScreenLoaders.ts:43:1` ### Signatures @@ -564,58 +528,6 @@ Source: `src/runtimeManifest.ts:39:1` | kind | property | `string` | yes | | | options | property | `Options \| undefined` | no | | -## RuntimeApiLoaderDefinition - -Kind: `unknown` -Module: `src/runtimeApiLoaders.ts` -Source: `src/runtimeApiLoaders.ts:17:1` - -## RuntimeApiLoaderDiagnostic - -Kind: `type` -Module: `src/runtimeApiLoaders.ts` -Source: `src/runtimeApiLoaders.ts:19:1` - -### Members - -| Name | Kind | Type | Required | Description | -| ---------- | -------- | ---------------------------------------------------------------------------------------------------------- | -------- | ----------- | -| apiId | property | `string \| undefined` | no | | -| code | property | `"invalid-record" \| "missing-api" \| "missing-target-path" \| "state-set-failed" \| "unsupported-loader"` | yes | | -| message | property | `string` | yes | | -| targetPath | property | `string \| undefined` | no | | - -## RuntimeApiLoaderExecutionResult - -Kind: `type` -Module: `src/runtimeApiLoaders.ts` -Source: `src/runtimeApiLoaders.ts:31:1` - -### Members - -| Name | Kind | Type | Required | Description | -| ----------- | -------- | --------------------------------------- | -------- | ----------- | -| diagnostics | property | `readonly RuntimeApiLoaderDiagnostic[]` | yes | | - -## RuntimeApiLoaderMaterializationResult - -Kind: `type` -Module: `src/runtimeApiLoaders.ts` -Source: `src/runtimeApiLoaders.ts:35:1` - -### Members - -| Name | Kind | Type | Required | Description | -| ----------- | -------- | --------------------------------------- | -------- | ----------- | -| diagnostics | property | `readonly RuntimeApiLoaderDiagnostic[]` | yes | | -| state | property | `Readonly>` | yes | | - -## RuntimeApiLoaderMode - -Kind: `unknown` -Module: `src/runtimeApiLoaders.ts` -Source: `src/runtimeApiLoaders.ts:15:1` - ## RuntimeBindingDescriptor Kind: `type` @@ -686,17 +598,17 @@ Source: `src/runtimeBindings.ts:64:1` ### Members -| Name | Kind | Type | Required | Description | -| ---------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- | -| context | property | `Record \| undefined` | no | | -| dataBindings | property | `Readonly> \| undefined` | no | | -| dataSources | property | `Readonly> \| undefined` | no | | -| event | property | `ComponentEventDto \| undefined` | no | | -| executeOperation | property | `RuntimeBindingOperationExecutor \| undefined` | no | | -| node | property | `UiNode` | yes | | -| operationResults | property | `Readonly> \| undefined` | no | | -| props | property | `Record` | yes | | -| stateAdapter | property | `StateAdapter \| undefined` | no | | +| Name | Kind | Type | Required | Description | +| ---------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- | +| context | property | `Record \| undefined` | no | | +| dataBindings | property | `Readonly> \| undefined` | no | | +| dataSources | property | `Readonly> \| undefined` | no | | +| event | property | `ComponentEventDto \| undefined` | no | | +| executeOperation | property | `RuntimeBindingOperationExecutor \| undefined` | no | | +| node | property | `UiNode` | yes | | +| operationResults | property | `Readonly> \| undefined` | no | | +| props | property | `Record` | yes | | +| stateAdapter | property | `StateAdapter \| undefined` | no | | ## RuntimeBindingResolutionContext @@ -706,15 +618,15 @@ Source: `src/runtimeBindings.ts:54:1` ### Members -| Name | Kind | Type | Required | Description | -| ---------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- | -| context | property | `Record \| undefined` | no | | -| dataBindings | property | `Readonly> \| undefined` | no | | -| dataSources | property | `Readonly> \| undefined` | no | | -| event | property | `ComponentEventDto \| undefined` | no | | -| executeOperation | property | `RuntimeBindingOperationExecutor \| undefined` | no | | -| operationResults | property | `Readonly> \| undefined` | no | | -| stateAdapter | property | `StateAdapter \| undefined` | no | | +| Name | Kind | Type | Required | Description | +| ---------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- | +| context | property | `Record \| undefined` | no | | +| dataBindings | property | `Readonly> \| undefined` | no | | +| dataSources | property | `Readonly> \| undefined` | no | | +| event | property | `ComponentEventDto \| undefined` | no | | +| executeOperation | property | `RuntimeBindingOperationExecutor \| undefined` | no | | +| operationResults | property | `Readonly> \| undefined` | no | | +| stateAdapter | property | `StateAdapter \| undefined` | no | | ## RuntimeBindingResolutionResult @@ -743,32 +655,33 @@ Source: `src/runtimeActionRegistry.ts:46:1` ### Members -| Name | Kind | Type | Required | Description | -| -------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- | -| context | property | `Record \| undefined` | no | | -| dataBindings | property | `Readonly> \| undefined` | no | | -| dataSources | property | `Readonly> \| undefined` | no | | -| event | property | `ComponentEventDto` | yes | | -| eventName | property | `string \| undefined` | no | | -| executeAction | property | `RuntimeActionHandler \| undefined` | no | | -| executeOperation | property | `RuntimeBindingOperationExecutor \| undefined` | no | | -| node | property | `UiNode` | yes | | -| operationResults | property | `Readonly> \| undefined` | no | | -| state | property | `Record \| undefined` | no | | -| writeOperationResult | property | `RuntimeBindingOperationResultWriter \| undefined` | no | | +| Name | Kind | Type | Required | Description | +| -------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- | +| context | property | `Record \| undefined` | no | | +| dataBindings | property | `Readonly> \| undefined` | no | | +| dataSources | property | `Readonly> \| undefined` | no | | +| event | property | `ComponentEventDto` | yes | | +| eventName | property | `string \| undefined` | no | | +| executeAction | property | `RuntimeActionHandler \| undefined` | no | | +| executeOperation | property | `RuntimeBindingOperationExecutor \| undefined` | no | | +| node | property | `UiNode` | yes | | +| operationResults | property | `Readonly> \| undefined` | no | | +| state | property | `Record \| undefined` | no | | +| writeOperationResult | property | `RuntimeBindingOperationResultWriter \| undefined` | no | | ## RuntimeDataSourceOperationExecutorOptions Kind: `type` Module: `src/runtimeDataSourceOperations.ts` -Source: `src/runtimeDataSourceOperations.ts:7:1` +Source: `src/runtimeDataSourceOperations.ts:8:1` ### Members -| Name | Kind | Type | Required | Description | -| ------------------ | -------- | --------------------------------------------- | -------- | ----------- | -| credentialResolver | property | `EndpointTestCredentialResolver \| undefined` | no | | -| fetch | property | `EndpointTestFetch` | yes | | +| Name | Kind | Type | Required | Description | +| ------------------ | -------- | -------------------------------------------------- | -------- | ----------- | +| credentialResolver | property | `EndpointTestCredentialResolver \| undefined` | no | | +| databaseAdapters | property | `Readonly> \| undefined` | no | | +| fetch | property | `EndpointTestFetch \| undefined` | no | | ## RuntimeDbPersistError @@ -837,16 +750,16 @@ Source: `src/runtimeActionRegistry.ts:57:1` ### Members -| Name | Kind | Type | Required | Description | -| ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- | -| context | property | `Record \| undefined` | no | | -| dataBindings | property | `Readonly> \| undefined` | no | | -| disableActions | property | `boolean` | yes | | -| dispatchComponentEvent | property | `(args: RuntimeComponentEventDispatchArgs) => Promise \| void` | yes | | -| node | property | `UiNode` | yes | | -| operationResults | property | `Readonly> \| undefined` | no | | -| props | property | `Record` | yes | | -| state | property | `Record \| undefined` | no | | +| Name | Kind | Type | Required | Description | +| ---------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- | +| context | property | `Record \| undefined` | no | | +| dataBindings | property | `Readonly> \| undefined` | no | | +| disableActions | property | `boolean` | yes | | +| dispatchComponentEvent | property | `(args: RuntimeComponentEventDispatchArgs) => Promise \| void` | yes | | +| node | property | `UiNode` | yes | | +| operationResults | property | `Readonly> \| undefined` | no | | +| props | property | `Record` | yes | | +| state | property | `Record \| undefined` | no | | ## RuntimeManifest @@ -934,24 +847,24 @@ Source: `src/RuntimeRendererConfig.tsx:48:1` ### Members -| Name | Kind | Type | Required | Description | -| -------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- | -| actionHandlers | property | `RuntimeActionHandlers \| undefined` | no | | -| bindingContext | property | `Record \| undefined` | no | | -| dataBindings | property | `Readonly> \| undefined` | no | | -| dataSources | property | `Readonly> \| undefined` | no | | -| dbAdapter | property | `DbAdapter \| undefined` | no | | -| dbRealtimeAdapter | property | `DbRealtimeAdapter \| undefined` | no | | -| disableActions | property | `boolean \| undefined` | no | | -| executeAction | property | `RuntimeActionHandler \| undefined` | no | | -| executeOperation | property | `RuntimeBindingOperationExecutor \| undefined` | no | | -| onDiagnostics | property | `((diagnostics: readonly DataSourceDiagnostic[]) => void) \| undefined` | no | | -| operationResults | property | `Readonly> \| undefined` | no | | -| registry | property | `Readonly>> \| undefined` | no | | -| resolveNodeProps | property | `RuntimeNodePropsResolver \| undefined` | no | | -| stateAdapter | property | `StateAdapter \| undefined` | no | | -| wrapNode | property | `((args: RuntimeRendererWrapArgs) => React.ReactNode) \| undefined` | no | | -| writeOperationResult | property | `RuntimeBindingOperationResultWriter \| undefined` | no | | +| Name | Kind | Type | Required | Description | +| -------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- | +| actionHandlers | property | `RuntimeActionHandlers \| undefined` | no | | +| bindingContext | property | `Record \| undefined` | no | | +| dataBindings | property | `Readonly> \| undefined` | no | | +| dataSources | property | `Readonly> \| undefined` | no | | +| dbAdapter | property | `DbAdapter \| undefined` | no | | +| dbRealtimeAdapter | property | `DbRealtimeAdapter \| undefined` | no | | +| disableActions | property | `boolean \| undefined` | no | | +| executeAction | property | `RuntimeActionHandler \| undefined` | no | | +| executeOperation | property | `RuntimeBindingOperationExecutor \| undefined` | no | | +| onDiagnostics | property | `((diagnostics: readonly DataSourceDiagnostic[]) => void) \| undefined` | no | | +| operationResults | property | `Readonly> \| undefined` | no | | +| registry | property | `Readonly>> \| undefined` | no | | +| resolveNodeProps | property | `RuntimeNodePropsResolver \| undefined` | no | | +| stateAdapter | property | `StateAdapter \| undefined` | no | | +| wrapNode | property | `((args: RuntimeRendererWrapArgs) => React.ReactNode) \| undefined` | no | | +| writeOperationResult | property | `RuntimeBindingOperationResultWriter \| undefined` | no | | ## RuntimeRendererConfigProvider @@ -973,23 +886,23 @@ Source: `src/RuntimeRenderer.tsx:49:1` ### Members -| Name | Kind | Type | Required | Description | -| ----------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- | -| bindingContext | property | `Record \| undefined` | no | | -| dataBindings | property | `Readonly> \| undefined` | no | | -| dataSources | property | `Readonly> \| undefined` | no | | -| dbAdapter | property | `DbAdapter \| undefined` | no | | -| dbRealtimeAdapter | property | `DbRealtimeAdapter \| undefined` | no | | -| disableActions | property | `boolean \| undefined` | no | | -| executeAction | property | `import("/Users/a_rtiphishl_e/git/runtime/src/RuntimeRendererConfig").RuntimeActionHandler \| undefined` | no | | -| executeOperation | property | `RuntimeBindingOperationExecutor \| undefined` | no | | -| isRoot | property | `boolean \| undefined` | no | | -| node | property | `UiNode` | yes | | -| onDiagnostics | property | `((diagnostics: readonly DataSourceDiagnostic[]) => void) \| undefined` | no | | -| operationResults | property | `Readonly> \| undefined` | no | | -| registry | property | `Readonly>> \| undefined` | no | | -| stateAdapter | property | `StateAdapter \| undefined` | no | | -| wrapNode | property | `((args: RuntimeRendererWrapArgs) => React.ReactNode) \| undefined` | no | | +| Name | Kind | Type | Required | Description | +| ----------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- | +| bindingContext | property | `Record \| undefined` | no | | +| dataBindings | property | `Readonly> \| undefined` | no | | +| dataSources | property | `Readonly> \| undefined` | no | | +| dbAdapter | property | `DbAdapter \| undefined` | no | | +| dbRealtimeAdapter | property | `DbRealtimeAdapter \| undefined` | no | | +| disableActions | property | `boolean \| undefined` | no | | +| executeAction | property | `import("/home/runner/work/runtime/runtime/src/RuntimeRendererConfig").RuntimeActionHandler \| undefined` | no | | +| executeOperation | property | `RuntimeBindingOperationExecutor \| undefined` | no | | +| isRoot | property | `boolean \| undefined` | no | | +| node | property | `UiNode` | yes | | +| onDiagnostics | property | `((diagnostics: readonly DataSourceDiagnostic[]) => void) \| undefined` | no | | +| operationResults | property | `Readonly> \| undefined` | no | | +| registry | property | `Readonly>> \| undefined` | no | | +| stateAdapter | property | `StateAdapter \| undefined` | no | | +| wrapNode | property | `((args: RuntimeRendererWrapArgs) => React.ReactNode) \| undefined` | no | | ## RuntimeRendererWrapArgs @@ -1022,7 +935,7 @@ Source: `node_modules/@ankhorage/contracts/dist/runtimeCallbacks.d.ts:2:1` Kind: `function` Module: `src/RuntimeScreen.tsx` -Source: `src/RuntimeScreen.tsx:24:1` +Source: `src/RuntimeScreen.tsx:17:1` ### Signatures @@ -1034,7 +947,7 @@ Source: `src/RuntimeScreen.tsx:24:1` Kind: `type` Module: `src/runtimeScreenLoaders.ts` -Source: `src/runtimeScreenLoaders.ts:26:1` +Source: `src/runtimeScreenLoaders.ts:25:1` ### Members @@ -1048,7 +961,7 @@ Source: `src/runtimeScreenLoaders.ts:26:1` Kind: `type` Module: `src/runtimeScreenLoaders.ts` -Source: `src/runtimeScreenLoaders.ts:19:1` +Source: `src/runtimeScreenLoaders.ts:18:1` ### Members @@ -1063,7 +976,7 @@ Source: `src/runtimeScreenLoaders.ts:19:1` Kind: `type` Module: `src/RuntimeScreen.tsx` -Source: `src/RuntimeScreen.tsx:17:1` +Source: `src/RuntimeScreen.tsx:10:1` ### Members @@ -1119,18 +1032,6 @@ Source: `src/ManifestContext.tsx:38:1` - `() => ManifestContextValue | null` - returns: `ManifestContextValue | null` -## useRuntimeApiStateLoaders - -Kind: `function` -Module: `src/runtimeApiLoaders.ts` -Source: `src/runtimeApiLoaders.ts:125:1` - -### Signatures - -- `(args: { readonly data?: AppDataManifest; readonly loaders?: readonly RuntimeApiLoaderDefinition[]; readonly stateAdapter?: StateAdapter; }) => { readonly diagnostics: readonly RuntimeApiLoaderDiagnostic[]; readonly stateAdapter: StateAdapter; readonly stateVersion: number; }` - - args: `{ readonly data?: AppDataManifest; readonly loaders?: readonly RuntimeApiLoaderDefinition[]; readonly stateAdapter?: StateAdapter; }` - - returns: `{ readonly diagnostics: readonly RuntimeApiLoaderDiagnostic[]; readonly stateAdapter: StateAdapter; readonly stateVersion: number; }` - ## useRuntimeRendererConfig Kind: `function` @@ -1146,7 +1047,7 @@ Source: `src/RuntimeRendererConfig.tsx:167:1` Kind: `function` Module: `src/runtimeScreenLoaders.ts` -Source: `src/runtimeScreenLoaders.ts:284:1` +Source: `src/runtimeScreenLoaders.ts:273:1` ### Signatures diff --git a/paradox/index.html b/paradox/index.html index 93456ad..edcc13b 100644 --- a/paradox/index.html +++ b/paradox/index.html @@ -241,12 +241,6 @@

@ankhorage/runtime

23 functions -
  • - -
  • +
  • + +
  • @@ -276,7 +280,7 @@

    @ankhorage/runtime

    data-target="src/runtimeDataSourceOperations.ts" > src/runtimeDataSourceOperations.ts - 4 functions + 7 functions
  • @@ -378,7 +382,7 @@

    @ankhorage/runtime

  • @@ -404,7 +408,7 @@

    @ankhorage/runtime

  • @@ -431,9 +435,9 @@

    @ankhorage/runtime

    Package overview

    -
    97public exports
    +
    88public exports
    5components
    -
    39modules
    +
    38modules
    1entrypoints

    Entrypoints

    @@ -464,7 +468,7 @@

    src/componentRegistry.ts

    src/index.ts

    Configured entrypoint

    @@ -485,26 +489,22 @@

    src/index.ts

    defineRuntimeAdapter, defineRuntimeBinding, dispatchRuntimeComponentEvent, dispatchRuntimeComponentEventWithReporting, - executeDbPersistAction, executeRuntimeApiLoaders, + executeDbPersistAction, executeRuntimeScreenOperationLoaders, listRuntimeCapabilities, ManifestContext, - ManifestProvider, materializeRuntimeApiLoaderState, - mergeRuntimeRendererConfig, resolveBindingInputMap, - resolveDbPersistInput, resolveRuntimeActionPayload, - resolveRuntimeActionValue, resolveRuntimeBindings, - resolveRuntimeBindingsAsync, resolveRuntimeBindingValue, - resolveRuntimeBindingValueSync, resolveScreenApiLoaders, + ManifestProvider, mergeRuntimeRendererConfig, + resolveBindingInputMap, resolveDbPersistInput, + resolveRuntimeActionPayload, resolveRuntimeActionValue, + resolveRuntimeBindings, resolveRuntimeBindingsAsync, + resolveRuntimeBindingValue, + resolveRuntimeBindingValueSync, resolveScreenOperationLoaders, RUNTIME_CAPABILITIES, RUNTIME_MANIFEST_KIND, RuntimeAction, RuntimeActionDescriptor, RuntimeActionExecutor, RuntimeActionHandler, RuntimeActionHandlerArgs, RuntimeActionHandlers, RuntimeActionRegistry, RuntimeActionResolutionArgs, RuntimeActionResolutionScope, - RuntimeAdapterDescriptor, RuntimeApiLoaderDefinition, - RuntimeApiLoaderDiagnostic, - RuntimeApiLoaderExecutionResult, - RuntimeApiLoaderMaterializationResult, - RuntimeApiLoaderMode, RuntimeBindingDescriptor, + RuntimeAdapterDescriptor, RuntimeBindingDescriptor, RuntimeBindingOperationExecutionArgs, RuntimeBindingOperationExecutionResult, RuntimeBindingOperationExecutor, @@ -529,7 +529,7 @@

    src/index.ts

    RuntimeScreenOperationLoaderState, RuntimeScreenProps, shouldRenderRuntimeRepeatEmptyState, useManifest, useManifestContext, useOptionalManifestContext, - useRuntimeApiStateLoaders, useRuntimeRendererConfig, + useRuntimeRendererConfig, useRuntimeScreenOperationLoaders, validateRuntimeBindingOperationRef, wrapRuntimeEventProps

    @@ -622,34 +622,6 @@

    src/runtimeActionRegistry.ts

    RuntimeEventPropWrapArgs, wrapRuntimeEventProps

    -
    -

    src/runtimeApiLoaders.test.ts

    -

    Referenced module

    -

    - Dependencies: src/runtimeApiLoaders.ts, - src/runtimeBindings.ts, src/runtimeStateAdapter.ts -

    -

    Exports: None

    -
    -
    -

    src/runtimeApiLoaders.ts

    -

    Referenced module

    -

    Dependencies: src/runtimeStateAdapter.ts

    -

    - Exports: executeRuntimeApiLoaders, - materializeRuntimeApiLoaderState, - RuntimeApiLoaderDefinition, RuntimeApiLoaderDiagnostic, - RuntimeApiLoaderExecutionResult, - RuntimeApiLoaderMaterializationResult, - RuntimeApiLoaderMode, useRuntimeApiStateLoaders -

    -
    src/runtimeBindings.ts validateRuntimeBindingOperationRef

    +
    +

    src/runtimeDatabaseOperationExecutor.ts

    +

    Referenced module

    +

    Dependencies: src/runtimeBindings.ts

    +

    Exports: executeRuntimeDatabaseOperation

    +
    src/runtimeDataSourceOperations.test.ts

    src/runtimeDataSourceOperations.ts

    Referenced module

    -

    Dependencies: src/runtimeBindings.ts

    +

    + Dependencies: src/runtimeBindings.ts, + src/runtimeDatabaseOperationExecutor.ts +

    Exports: createRuntimeDataSourceOperationExecutor, RuntimeDataSourceOperationExecutorOptions @@ -916,14 +900,14 @@

    src/runtimeRepeatEmptyState.ts

    src/RuntimeScreen.tsx

    Referenced module

    Dependencies: src/registry.tsx, - src/runtimeApiLoaders.ts, src/RuntimeRenderer.tsx, - src/RuntimeRendererConfig.tsx, src/runtimeScreenLoaders.ts + src/RuntimeRenderer.tsx, src/RuntimeRendererConfig.tsx, + src/runtimeScreenLoaders.ts, src/runtimeStateAdapter.ts

    Exports: RuntimeScreen, @@ -956,7 +940,7 @@

    src/runtimeScreenLoaders.test.ts

    src/runtimeScreenLoaders.ts

    Referenced module

    @@ -969,7 +953,7 @@

    src/runtimeScreenLoaders.ts

    createRuntimeScreenLoaderRequestKey, createRuntimeScreenOperationLoaderLifecycle, executeRuntimeScreenOperationLoaders, - resolveScreenApiLoaders, resolveScreenOperationLoaders, + resolveScreenOperationLoaders, RuntimeScreenOperationLoaderExecutionResult, RuntimeScreenOperationLoaderLifecycle, RuntimeScreenOperationLoaderState, @@ -1675,7 +1659,7 @@

    RuntimeComponentEventDispatchArgs

    Readonly<Record<string, - import("/Users/a_rtiphishl_e/git/runtime/node_modules/@ankhorage/contracts/dist/bindings").ComponentDataBinding>> + import("/home/runner/work/runtime/runtime/node_modules/@ankhorage/contracts/dist/bindings").ComponentDataBinding>> | undefined @@ -1797,7 +1781,7 @@

    RuntimeEventPropWrapArgs

    Readonly<Record<string, - import("/Users/a_rtiphishl_e/git/runtime/node_modules/@ankhorage/contracts/dist/bindings").ComponentDataBinding>> + import("/home/runner/work/runtime/runtime/node_modules/@ankhorage/contracts/dist/bindings").ComponentDataBinding>> | undefined @@ -1864,320 +1848,19 @@

    RuntimeEventPropWrapArgs

    id="symbol-wrapruntimeeventprops" data-search="wrapRuntimeEventProps function src/runtimeActionRegistry.ts RuntimeEventPropWrapArgs (args: RuntimeEventPropWrapArgs) => Record<string, unknown>" > -

    wrapRuntimeEventProps

    -

    function • src/runtimeActionRegistry.ts:180:1

    - -

    Export paths: src/index.ts

    -
    - Related symbols: -
      -
    • RuntimeEventPropWrapArgs
    • -
    -
    -
    -
    Signature
    -
    (args: RuntimeEventPropWrapArgs) => Record<string, unknown>
    - - - - - - - - - - - - - - - - - -
    ParameterTypeRequiredDescription
    argsRuntimeEventPropWrapArgsyes
    -

    Returns: Record<string, unknown>

    -
    -
    -
    -
    -

    src/runtimeApiLoaders.ts

    -
    -

    executeRuntimeApiLoaders

    -

    function • src/runtimeApiLoaders.ts:100:1

    - -

    Export paths: src/index.ts

    -
    - Related symbols: -
      -
    • RuntimeApiLoaderDefinition
    • -
    • RuntimeApiLoaderExecutionResult
    • -
    -
    -
    -
    Signature
    -
    -(args: { readonly data?: AppDataManifest; readonly loaders: readonly RuntimeApiLoaderDefinition[]; readonly stateAdapter: StateAdapter; }) => RuntimeApiLoaderExecutionResult
    - - - - - - - - - - - - - - - - - -
    ParameterTypeRequiredDescription
    args - { readonly data?: AppDataManifest; readonly loaders: readonly - RuntimeApiLoaderDefinition[]; readonly stateAdapter: StateAdapter; - } - yes
    -

    Returns: RuntimeApiLoaderExecutionResult

    -
    -
    -
    -

    materializeRuntimeApiLoaderState

    -

    function • src/runtimeApiLoaders.ts:40:1

    - -

    Export paths: src/index.ts

    -
    - Related symbols: -
      -
    • RuntimeApiLoaderDefinition
    • -
    • RuntimeApiLoaderMaterializationResult
    • -
    -
    -
    -
    Signature
    -
    -(args: { readonly data?: AppDataManifest; readonly loaders: readonly RuntimeApiLoaderDefinition[]; }) => RuntimeApiLoaderMaterializationResult
    - - - - - - - - - - - - - - - - - -
    ParameterTypeRequiredDescription
    args - { readonly data?: AppDataManifest; readonly loaders: readonly - RuntimeApiLoaderDefinition[]; } - yes
    -

    - Returns: RuntimeApiLoaderMaterializationResult -

    -
    -
    -
    -

    RuntimeApiLoaderDefinition

    -

    unknown • src/runtimeApiLoaders.ts:17:1

    - -

    Export paths: src/index.ts

    -
    Related symbols: None
    -
    -
    -

    RuntimeApiLoaderDiagnostic

    -

    type • src/runtimeApiLoaders.ts:19:1

    - -

    Export paths: src/index.ts

    -
    Related symbols: None
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    MemberKindTypeRequiredDescription
    apiIdpropertystring | undefinedno
    codeproperty - "invalid-record" | "missing-api" | - "missing-target-path" | "state-set-failed" | - "unsupported-loader" - yes
    messagepropertystringyes
    targetPathpropertystring | undefinedno
    -
    -
    -

    RuntimeApiLoaderExecutionResult

    -

    type • src/runtimeApiLoaders.ts:31:1

    - -

    Export paths: src/index.ts

    -
    - Related symbols: -
      -
    • RuntimeApiLoaderDiagnostic
    • -
    -
    - - - - - - - - - - - - - - - - - - - - -
    MemberKindTypeRequiredDescription
    diagnosticspropertyreadonly RuntimeApiLoaderDiagnostic[]yes
    -
    -
    -

    RuntimeApiLoaderMaterializationResult

    -

    type • src/runtimeApiLoaders.ts:35:1

    - -

    Export paths: src/index.ts

    -
    - Related symbols: -
      -
    • RuntimeApiLoaderDiagnostic
    • -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    MemberKindTypeRequiredDescription
    diagnosticspropertyreadonly RuntimeApiLoaderDiagnostic[]yes
    statepropertyReadonly<Record<string, StateValue>>yes
    -
    -
    -

    RuntimeApiLoaderMode

    -

    unknown • src/runtimeApiLoaders.ts:15:1

    - -

    Export paths: src/index.ts

    -
    Related symbols: None
    -
    -
    -

    useRuntimeApiStateLoaders

    -

    function • src/runtimeApiLoaders.ts:125:1

    +

    wrapRuntimeEventProps

    +

    function • src/runtimeActionRegistry.ts:180:1

    Export paths: src/index.ts

    Related symbols:
      -
    • RuntimeApiLoaderDefinition
    • -
    • RuntimeApiLoaderDiagnostic
    • +
    • RuntimeEventPropWrapArgs
    Signature
    -
    -(args: { readonly data?: AppDataManifest; readonly loaders?: readonly RuntimeApiLoaderDefinition[]; readonly stateAdapter?: StateAdapter; }) => { readonly diagnostics: readonly RuntimeApiLoaderDiagnostic[]; readonly stateAdapter: StateAdapter; readonly stateVersion: number; }
    +
    (args: RuntimeEventPropWrapArgs) => Record<string, unknown>
    @@ -2190,25 +1873,13 @@
    Signature
    - +
    args - { readonly data?: AppDataManifest; readonly loaders?: readonly - RuntimeApiLoaderDefinition[]; readonly stateAdapter?: StateAdapter; - } - RuntimeEventPropWrapArgs yes
    -

    - Returns: - { readonly diagnostics: readonly RuntimeApiLoaderDiagnostic[]; readonly - stateAdapter: StateAdapter; readonly stateVersion: number; } -

    +

    Returns: Record<string, unknown>

    @@ -2651,7 +2322,7 @@

    RuntimeBindingResolutionArgs

    Readonly<Record<string, - import("/Users/a_rtiphishl_e/git/runtime/node_modules/@ankhorage/contracts/dist/bindings").ComponentDataBinding>> + import("/home/runner/work/runtime/runtime/node_modules/@ankhorage/contracts/dist/bindings").ComponentDataBinding>> | undefined @@ -2759,7 +2430,7 @@

    RuntimeBindingResolutionContext

    Readonly<Record<string, - import("/Users/a_rtiphishl_e/git/runtime/node_modules/@ankhorage/contracts/dist/bindings").ComponentDataBinding>> + import("/home/runner/work/runtime/runtime/node_modules/@ankhorage/contracts/dist/bindings").ComponentDataBinding>> | undefined @@ -2907,7 +2578,7 @@

    src/runtimeDataSourceOperations.ts

    data-search="createRuntimeDataSourceOperationExecutor function src/runtimeDataSourceOperations.ts RuntimeBindingOperationExecutor RuntimeDataSourceOperationExecutorOptions (options: RuntimeDataSourceOperationExecutorOptions) => RuntimeBindingOperationExecutor" >

    createRuntimeDataSourceOperationExecutor

    -

    function • src/runtimeDataSourceOperations.ts:12:1

    +

    function • src/runtimeDataSourceOperations.ts:14:1

    Export paths: src/index.ts

    @@ -2948,7 +2619,7 @@
    Signature
    data-search="RuntimeDataSourceOperationExecutorOptions type src/runtimeDataSourceOperations.ts " >

    RuntimeDataSourceOperationExecutorOptions

    -

    type • src/runtimeDataSourceOperations.ts:7:1

    +

    type • src/runtimeDataSourceOperations.ts:8:1

    Export paths: src/index.ts

    Related symbols: None
    @@ -2971,11 +2642,20 @@

    RuntimeDataSourceOperationExecutorOptions

    no + + databaseAdapters + property + + Readonly<Record<string, DbAdapter>> | undefined + + no + + fetch property - EndpointTestFetch - yes + EndpointTestFetch | undefined + no @@ -4083,7 +3763,7 @@

    RuntimeRendererProps

    Readonly<Record<string, - import("/Users/a_rtiphishl_e/git/runtime/node_modules/@ankhorage/contracts/dist/bindings").ComponentDataBinding>> + import("/home/runner/work/runtime/runtime/node_modules/@ankhorage/contracts/dist/bindings").ComponentDataBinding>> | undefined @@ -4096,7 +3776,7 @@

    RuntimeRendererProps

    Readonly<Record<string, - import("/Users/a_rtiphishl_e/git/runtime/node_modules/@ankhorage/contracts/dist/index").DataSourceConfig>> + import("/home/runner/work/runtime/runtime/node_modules/@ankhorage/contracts/dist/index").DataSourceConfig>> | undefined @@ -4129,7 +3809,7 @@

    RuntimeRendererProps

    property import("/Users/a_rtiphishl_e/git/runtime/src/RuntimeRendererConfig").RuntimeActionHandler + >import("/home/runner/work/runtime/runtime/src/RuntimeRendererConfig").RuntimeActionHandler | undefined @@ -4522,7 +4202,7 @@

    RuntimeRendererConfig

    Readonly<Record<string, - import("/Users/a_rtiphishl_e/git/runtime/node_modules/@ankhorage/contracts/dist/bindings").ComponentDataBinding>> + import("/home/runner/work/runtime/runtime/node_modules/@ankhorage/contracts/dist/bindings").ComponentDataBinding>> | undefined @@ -4535,7 +4215,7 @@

    RuntimeRendererConfig

    Readonly<Record<string, - import("/Users/a_rtiphishl_e/git/runtime/node_modules/@ankhorage/contracts/dist/index").DataSourceConfig>> + import("/home/runner/work/runtime/runtime/node_modules/@ankhorage/contracts/dist/index").DataSourceConfig>> | undefined @@ -4595,7 +4275,7 @@

    RuntimeRendererConfig

    Readonly<Record<string, - import("/Users/a_rtiphishl_e/git/runtime/node_modules/@ankhorage/contracts/dist/bindings").BindingValue + import("/home/runner/work/runtime/runtime/node_modules/@ankhorage/contracts/dist/bindings").BindingValue | undefined>> | undefined @@ -4812,7 +4492,7 @@

    src/RuntimeScreen.tsx

    data-search="RuntimeScreen function src/RuntimeScreen.tsx RuntimeScreenProps (props: RuntimeScreenProps) => React.JSX.Element" >

    RuntimeScreen

    -

    function • src/RuntimeScreen.tsx:24:1

    +

    function • src/RuntimeScreen.tsx:17:1

    Export paths: src/index.ts

    @@ -4851,7 +4531,7 @@
    Signature
    data-search="RuntimeScreenProps type src/RuntimeScreen.tsx " >

    RuntimeScreenProps

    -

    type • src/RuntimeScreen.tsx:17:1

    +

    type • src/RuntimeScreen.tsx:10:1

    Export paths: src/index.ts

    Related symbols: None
    @@ -4912,7 +4592,7 @@

    src/runtimeScreenLoaders.ts

    data-search="createPendingRuntimeScreenOperationLoaderState function src/runtimeScreenLoaders.ts RuntimeScreenOperationLoaderState (args: { readonly dependencyKey: string; readonly previousState?: RuntimeScreenOperationLoaderState; }) => RuntimeScreenOperationLoaderState" >

    createPendingRuntimeScreenOperationLoaderState

    -

    function • src/runtimeScreenLoaders.ts:93:1

    +

    function • src/runtimeScreenLoaders.ts:82:1

    Export paths: src/index.ts

    @@ -4957,7 +4637,7 @@
    Signature
    data-search="createRuntimeScreenLoaderRequestKey function src/runtimeScreenLoaders.ts RuntimeBindingOperationResultCache (args: { readonly screenId: string; readonly loaders: readonly OperationScreenDataLoaderDefinition[]; readonly bindingContext?: Record<string, unknown>; readonly operationResults?: RuntimeBindingOperationResultCache; }) => string" >

    createRuntimeScreenLoaderRequestKey

    -

    function • src/runtimeScreenLoaders.ts:60:1

    +

    function • src/runtimeScreenLoaders.ts:49:1

    Export paths: src/index.ts

    @@ -5004,7 +4684,7 @@
    Signature
    data-search='executeRuntimeScreenOperationLoaders function src/runtimeScreenLoaders.ts RuntimeBindingOperationExecutor RuntimeBindingOperationResultCache RuntimeBindingResolutionContext RuntimeScreenOperationLoaderExecutionResult (args: { readonly bindingContext?: Record<string, unknown>; readonly dataSources?: RuntimeBindingResolutionContext["dataSources"]; readonly executeOperation?: RuntimeBindingOperationExecutor; readonly operationResults?: RuntimeBindingOperationResultCache; readonly screen: ScreenSpec; readonly loaders: readonly OperationScreenDataLoaderDefinition[]; }) => Promise<RuntimeScreenOperationLoaderExecutionResult>' >

    executeRuntimeScreenOperationLoaders

    -

    function • src/runtimeScreenLoaders.ts:189:1

    +

    function • src/runtimeScreenLoaders.ts:178:1

    Export paths: src/index.ts

    @@ -5053,49 +4733,13 @@
    Signature

    -
    -

    resolveScreenApiLoaders

    -

    function • src/runtimeScreenLoaders.ts:44:1

    - -

    Export paths: src/index.ts

    -
    Related symbols: None
    -
    -
    Signature
    -
    (screen: ScreenSpec) => readonly ApiScreenDataLoaderDefinition[]
    - - - - - - - - - - - - - - - - - -
    ParameterTypeRequiredDescription
    screenScreenSpecyes
    -

    - Returns: readonly ApiScreenDataLoaderDefinition[] -

    -
    -

    resolveScreenOperationLoaders

    -

    function • src/runtimeScreenLoaders.ts:52:1

    +

    function • src/runtimeScreenLoaders.ts:43:1

    Export paths: src/index.ts

    Related symbols: None
    @@ -5133,7 +4777,7 @@
    Signature
    data-search="RuntimeScreenOperationLoaderExecutionResult type src/runtimeScreenLoaders.ts " >

    RuntimeScreenOperationLoaderExecutionResult

    -

    type • src/runtimeScreenLoaders.ts:26:1

    +

    type • src/runtimeScreenLoaders.ts:25:1

    Export paths: src/index.ts

    Related symbols: None
    @@ -5181,7 +4825,7 @@

    RuntimeScreenOperationLoaderExecutionResult

    data-search="RuntimeScreenOperationLoaderState type src/runtimeScreenLoaders.ts " >

    RuntimeScreenOperationLoaderState

    -

    type • src/runtimeScreenLoaders.ts:19:1

    +

    type • src/runtimeScreenLoaders.ts:18:1

    Export paths: src/index.ts

    Related symbols: None
    @@ -5236,7 +4880,7 @@

    RuntimeScreenOperationLoaderState

    data-search='useRuntimeScreenOperationLoaders function src/runtimeScreenLoaders.ts RuntimeBindingOperationExecutor RuntimeBindingOperationResultCache RuntimeBindingResolutionContext RuntimeScreenOperationLoaderState (args: { readonly bindingContext?: Record<string, unknown>; readonly dataSources?: RuntimeBindingResolutionContext["dataSources"]; readonly executeOperation?: RuntimeBindingOperationExecutor; readonly operationResults?: RuntimeBindingOperationResultCache; readonly onDiagnostics?: (diagnostics: readonly DataSourceDiagnostic[]) => void; readonly screen: ScreenSpec; }) => RuntimeScreenOperationLoaderState' >

    useRuntimeScreenOperationLoaders

    -

    function • src/runtimeScreenLoaders.ts:284:1

    +

    function • src/runtimeScreenLoaders.ts:273:1

    Export paths: src/index.ts

    @@ -5600,7 +5244,7 @@

    RuntimeRendererConfigProvider

    data-search="RuntimeScreen src/RuntimeScreen.tsx manifest AppManifest registry ComponentRegistry | undefined screen ScreenSpec stateAdapter StateAdapter | undefined" >

    RuntimeScreen

    -

    src/RuntimeScreen.tsx:24:1

    +

    src/RuntimeScreen.tsx:17:1

    Export paths: src/index.ts

    @@ -5679,20 +5323,15 @@

    Architecture overview

    package__ankhorage_runtime -.-> module_src_runtimeActionRegistry_ts module_src_runtimeActionRegistry_ts --> module_src_runtimeBindings_ts module_src_runtimeActionRegistry_ts --> module_src_RuntimeRendererConfig_tsx - module_src_runtimeApiLoaders_test_ts["src/runtimeApiLoaders.test.ts"] - package__ankhorage_runtime -.-> module_src_runtimeApiLoaders_test_ts - module_src_runtimeApiLoaders_test_ts --> module_src_runtimeApiLoaders_ts - module_src_runtimeApiLoaders_test_ts --> module_src_runtimeBindings_ts - module_src_runtimeApiLoaders_test_ts --> module_src_runtimeStateAdapter_ts - module_src_runtimeApiLoaders_ts["src/runtimeApiLoaders.ts"] - package__ankhorage_runtime -.-> module_src_runtimeApiLoaders_ts - module_src_runtimeApiLoaders_ts --> module_src_runtimeStateAdapter_ts module_src_runtimeBindings_test_ts["src/runtimeBindings.test.ts"] package__ankhorage_runtime -.-> module_src_runtimeBindings_test_ts module_src_runtimeBindings_test_ts --> module_src_runtimeBindings_ts module_src_runtimeBindings_test_ts --> module_src_runtimeNodeProps_ts module_src_runtimeBindings_ts["src/runtimeBindings.ts"] package__ankhorage_runtime -.-> module_src_runtimeBindings_ts + module_src_runtimeDatabaseOperationExecutor_ts["src/runtimeDatabaseOperationExecutor.ts"] + package__ankhorage_runtime -.-> module_src_runtimeDatabaseOperationExecutor_ts + module_src_runtimeDatabaseOperationExecutor_ts --> module_src_runtimeBindings_ts module_src_runtimeDataSourceOperations_test_ts["src/runtimeDataSourceOperations.test.ts"] package__ankhorage_runtime -.-> module_src_runtimeDataSourceOperations_test_ts module_src_runtimeDataSourceOperations_test_ts --> @@ -5700,6 +5339,8 @@

    Architecture overview

    module_src_runtimeDataSourceOperations_ts["src/runtimeDataSourceOperations.ts"] package__ankhorage_runtime -.-> module_src_runtimeDataSourceOperations_ts module_src_runtimeDataSourceOperations_ts --> module_src_runtimeBindings_ts + module_src_runtimeDataSourceOperations_ts --> + module_src_runtimeDatabaseOperationExecutor_ts module_src_runtimeDbPersist_test_ts["src/runtimeDbPersist.test.ts"] package__ankhorage_runtime -.-> module_src_runtimeDbPersist_test_ts module_src_runtimeDbPersist_test_ts --> module_src_runtimeActionRegistry_ts @@ -5764,10 +5405,10 @@

    Architecture overview

    module_src_RuntimeScreen_tsx["src/RuntimeScreen.tsx"] package__ankhorage_runtime -.-> module_src_RuntimeScreen_tsx module_src_RuntimeScreen_tsx --> module_src_registry_tsx - module_src_RuntimeScreen_tsx --> module_src_runtimeApiLoaders_ts module_src_RuntimeScreen_tsx --> module_src_RuntimeRenderer_tsx module_src_RuntimeScreen_tsx --> module_src_RuntimeRendererConfig_tsx module_src_RuntimeScreen_tsx --> module_src_runtimeScreenLoaders_ts + module_src_RuntimeScreen_tsx --> module_src_runtimeStateAdapter_ts module_src_runtimeScreenLoaders_arrayPath_test_ts["src/runtimeScreenLoaders.arrayPath.test.ts"] package__ankhorage_runtime -.-> module_src_runtimeScreenLoaders_arrayPath_test_ts module_src_runtimeScreenLoaders_arrayPath_test_ts --> @@ -5826,26 +5467,22 @@

    Architecture overview

    package__ankhorage_runtime -.-> module_src_runtimeActionRegistry_ts module_src_runtimeActionRegistry_ts --> module_src_runtimeBindings_ts module_src_runtimeActionRegistry_ts --> module_src_RuntimeRendererConfig_tsx - module_src_runtimeApiLoaders_test_ts["src/runtimeApiLoaders.test.ts"] - package__ankhorage_runtime -.-> module_src_runtimeApiLoaders_test_ts - module_src_runtimeApiLoaders_test_ts --> module_src_runtimeApiLoaders_ts - module_src_runtimeApiLoaders_test_ts --> module_src_runtimeBindings_ts - module_src_runtimeApiLoaders_test_ts --> module_src_runtimeStateAdapter_ts - module_src_runtimeApiLoaders_ts["src/runtimeApiLoaders.ts"] - package__ankhorage_runtime -.-> module_src_runtimeApiLoaders_ts - module_src_runtimeApiLoaders_ts --> module_src_runtimeStateAdapter_ts module_src_runtimeBindings_test_ts["src/runtimeBindings.test.ts"] package__ankhorage_runtime -.-> module_src_runtimeBindings_test_ts module_src_runtimeBindings_test_ts --> module_src_runtimeBindings_ts module_src_runtimeBindings_test_ts --> module_src_runtimeNodeProps_ts module_src_runtimeBindings_ts["src/runtimeBindings.ts"] package__ankhorage_runtime -.-> module_src_runtimeBindings_ts + module_src_runtimeDatabaseOperationExecutor_ts["src/runtimeDatabaseOperationExecutor.ts"] + package__ankhorage_runtime -.-> module_src_runtimeDatabaseOperationExecutor_ts + module_src_runtimeDatabaseOperationExecutor_ts --> module_src_runtimeBindings_ts module_src_runtimeDataSourceOperations_test_ts["src/runtimeDataSourceOperations.test.ts"] package__ankhorage_runtime -.-> module_src_runtimeDataSourceOperations_test_ts module_src_runtimeDataSourceOperations_test_ts --> module_src_runtimeDataSourceOperations_ts module_src_runtimeDataSourceOperations_ts["src/runtimeDataSourceOperations.ts"] package__ankhorage_runtime -.-> module_src_runtimeDataSourceOperations_ts module_src_runtimeDataSourceOperations_ts --> module_src_runtimeBindings_ts + module_src_runtimeDataSourceOperations_ts --> module_src_runtimeDatabaseOperationExecutor_ts module_src_runtimeDbPersist_test_ts["src/runtimeDbPersist.test.ts"] package__ankhorage_runtime -.-> module_src_runtimeDbPersist_test_ts module_src_runtimeDbPersist_test_ts --> module_src_runtimeActionRegistry_ts @@ -5909,10 +5546,10 @@

    Architecture overview

    module_src_RuntimeScreen_tsx["src/RuntimeScreen.tsx"] package__ankhorage_runtime -.-> module_src_RuntimeScreen_tsx module_src_RuntimeScreen_tsx --> module_src_registry_tsx - module_src_RuntimeScreen_tsx --> module_src_runtimeApiLoaders_ts module_src_RuntimeScreen_tsx --> module_src_RuntimeRenderer_tsx module_src_RuntimeScreen_tsx --> module_src_RuntimeRendererConfig_tsx module_src_RuntimeScreen_tsx --> module_src_runtimeScreenLoaders_ts + module_src_RuntimeScreen_tsx --> module_src_runtimeStateAdapter_ts module_src_runtimeScreenLoaders_arrayPath_test_ts["src/runtimeScreenLoaders.arrayPath.test.ts"] package__ankhorage_runtime -.-> module_src_runtimeScreenLoaders_arrayPath_test_ts module_src_runtimeScreenLoaders_arrayPath_test_ts --> module_src_runtimeBindings_ts @@ -5954,10 +5591,9 @@

    Module relationships

    module_src_rendering_ts["src/rendering.ts"] module_src_runtimeActionRegistry_test_ts["src/runtimeActionRegistry.test.ts"] module_src_runtimeActionRegistry_ts["src/runtimeActionRegistry.ts"] - module_src_runtimeApiLoaders_test_ts["src/runtimeApiLoaders.test.ts"] - module_src_runtimeApiLoaders_ts["src/runtimeApiLoaders.ts"] module_src_runtimeBindings_test_ts["src/runtimeBindings.test.ts"] module_src_runtimeBindings_ts["src/runtimeBindings.ts"] + module_src_runtimeDatabaseOperationExecutor_ts["src/runtimeDatabaseOperationExecutor.ts"] module_src_runtimeDataSourceOperations_test_ts["src/runtimeDataSourceOperations.test.ts"] module_src_runtimeDataSourceOperations_ts["src/runtimeDataSourceOperations.ts"] module_src_runtimeDbPersist_test_ts["src/runtimeDbPersist.test.ts"] @@ -5990,48 +5626,47 @@

    Module relationships

    module_src_runtimeActionRegistry_ts module_src_runtimeActionRegistry_test_ts --> module_src_runtimeBindings_ts module_src_runtimeActionRegistry_ts --> module_src_runtimeBindings_ts module_src_runtimeActionRegistry_ts --> - module_src_RuntimeRendererConfig_tsx module_src_runtimeApiLoaders_test_ts --> - module_src_runtimeApiLoaders_ts module_src_runtimeApiLoaders_test_ts --> - module_src_runtimeBindings_ts module_src_runtimeApiLoaders_test_ts --> - module_src_runtimeStateAdapter_ts module_src_runtimeApiLoaders_ts --> - module_src_runtimeStateAdapter_ts module_src_runtimeBindings_test_ts --> + module_src_RuntimeRendererConfig_tsx module_src_runtimeBindings_test_ts --> module_src_runtimeBindings_ts module_src_runtimeBindings_test_ts --> - module_src_runtimeNodeProps_ts module_src_runtimeDataSourceOperations_test_ts --> + module_src_runtimeNodeProps_ts module_src_runtimeDatabaseOperationExecutor_ts --> + module_src_runtimeBindings_ts module_src_runtimeDataSourceOperations_test_ts --> module_src_runtimeDataSourceOperations_ts module_src_runtimeDataSourceOperations_ts - --> module_src_runtimeBindings_ts module_src_runtimeDbPersist_test_ts --> - module_src_runtimeActionRegistry_ts module_src_runtimeDbPersist_test_ts --> - module_src_runtimeDbPersist_ts module_src_runtimeDbPersist_ts --> - module_src_RuntimeRendererConfig_tsx module_src_runtimeEventExecution_test_ts --> - module_src_runtimeEventExecution_ts module_src_runtimeEventExecution_ts --> - module_src_runtimeActionRegistry_ts module_src_runtimeEventExecution_ts --> - module_src_RuntimeRendererConfig_tsx module_src_runtimeNodeProps_test_ts --> - module_src_runtimeNodeProps_ts module_src_runtimeNodeProps_ts --> - module_src_runtimeBindings_ts module_src_runtimeNodeProps_ts --> - module_src_RuntimeRendererConfig_tsx module_src_RuntimeRenderer_test_ts --> - module_src_runtimeRepeatEmptyState_ts module_src_RuntimeRenderer_tsx --> - module_src_registry_tsx module_src_RuntimeRenderer_tsx --> - module_src_rendering_ts module_src_RuntimeRenderer_tsx --> - module_src_runtimeActionRegistry_ts module_src_RuntimeRenderer_tsx --> - module_src_runtimeBindings_ts module_src_RuntimeRenderer_tsx --> - module_src_runtimeDbPersist_ts module_src_RuntimeRenderer_tsx --> - module_src_runtimeEventExecution_ts module_src_RuntimeRenderer_tsx --> - module_src_runtimeNodeProps_ts module_src_RuntimeRenderer_tsx --> - module_src_RuntimeRendererConfig_tsx module_src_RuntimeRenderer_tsx --> - module_src_runtimeRepeat_ts module_src_RuntimeRenderer_tsx --> - module_src_runtimeRepeatDiagnostics_ts module_src_RuntimeRenderer_tsx --> - module_src_runtimeRepeatEmptyState_ts module_src_RuntimeRendererConfig_test_tsx - --> module_src_RuntimeRendererConfig_tsx module_src_RuntimeRendererConfig_tsx - --> module_src_registry_tsx module_src_RuntimeRendererConfig_tsx --> + --> module_src_runtimeBindings_ts module_src_runtimeDataSourceOperations_ts + --> module_src_runtimeDatabaseOperationExecutor_ts + module_src_runtimeDbPersist_test_ts --> module_src_runtimeActionRegistry_ts + module_src_runtimeDbPersist_test_ts --> module_src_runtimeDbPersist_ts + module_src_runtimeDbPersist_ts --> module_src_RuntimeRendererConfig_tsx + module_src_runtimeEventExecution_test_ts --> module_src_runtimeEventExecution_ts + module_src_runtimeEventExecution_ts --> module_src_runtimeActionRegistry_ts + module_src_runtimeEventExecution_ts --> module_src_RuntimeRendererConfig_tsx + module_src_runtimeNodeProps_test_ts --> module_src_runtimeNodeProps_ts + module_src_runtimeNodeProps_ts --> module_src_runtimeBindings_ts + module_src_runtimeNodeProps_ts --> module_src_RuntimeRendererConfig_tsx + module_src_RuntimeRenderer_test_ts --> module_src_runtimeRepeatEmptyState_ts + module_src_RuntimeRenderer_tsx --> module_src_registry_tsx + module_src_RuntimeRenderer_tsx --> module_src_rendering_ts + module_src_RuntimeRenderer_tsx --> module_src_runtimeActionRegistry_ts + module_src_RuntimeRenderer_tsx --> module_src_runtimeBindings_ts + module_src_RuntimeRenderer_tsx --> module_src_runtimeDbPersist_ts + module_src_RuntimeRenderer_tsx --> module_src_runtimeEventExecution_ts + module_src_RuntimeRenderer_tsx --> module_src_runtimeNodeProps_ts + module_src_RuntimeRenderer_tsx --> module_src_RuntimeRendererConfig_tsx + module_src_RuntimeRenderer_tsx --> module_src_runtimeRepeat_ts + module_src_RuntimeRenderer_tsx --> module_src_runtimeRepeatDiagnostics_ts + module_src_RuntimeRenderer_tsx --> module_src_runtimeRepeatEmptyState_ts + module_src_RuntimeRendererConfig_test_tsx --> + module_src_RuntimeRendererConfig_tsx module_src_RuntimeRendererConfig_tsx --> + module_src_registry_tsx module_src_RuntimeRendererConfig_tsx --> module_src_runtimeBindings_ts module_src_runtimeRepeat_test_ts --> module_src_runtimeActionRegistry_ts module_src_runtimeRepeat_test_ts --> module_src_runtimeBindings_ts module_src_runtimeRepeat_test_ts --> module_src_runtimeRepeat_ts module_src_runtimeRepeat_ts --> module_src_runtimeBindings_ts module_src_RuntimeScreen_tsx --> module_src_registry_tsx module_src_RuntimeScreen_tsx --> - module_src_runtimeApiLoaders_ts module_src_RuntimeScreen_tsx --> module_src_RuntimeRenderer_tsx module_src_RuntimeScreen_tsx --> module_src_RuntimeRendererConfig_tsx module_src_RuntimeScreen_tsx --> - module_src_runtimeScreenLoaders_ts module_src_runtimeScreenLoaders_arrayPath_test_ts + module_src_runtimeScreenLoaders_ts module_src_RuntimeScreen_tsx --> + module_src_runtimeStateAdapter_ts module_src_runtimeScreenLoaders_arrayPath_test_ts --> module_src_runtimeBindings_ts module_src_runtimeScreenLoaders_arrayPath_test_ts --> module_src_runtimeScreenLoaders_ts module_src_runtimeScreenLoaders_test_ts --> @@ -6057,10 +5692,9 @@

    Module relationships

    module_src_rendering_ts["src/rendering.ts"] module_src_runtimeActionRegistry_test_ts["src/runtimeActionRegistry.test.ts"] module_src_runtimeActionRegistry_ts["src/runtimeActionRegistry.ts"] - module_src_runtimeApiLoaders_test_ts["src/runtimeApiLoaders.test.ts"] - module_src_runtimeApiLoaders_ts["src/runtimeApiLoaders.ts"] module_src_runtimeBindings_test_ts["src/runtimeBindings.test.ts"] module_src_runtimeBindings_ts["src/runtimeBindings.ts"] + module_src_runtimeDatabaseOperationExecutor_ts["src/runtimeDatabaseOperationExecutor.ts"] module_src_runtimeDataSourceOperations_test_ts["src/runtimeDataSourceOperations.test.ts"] module_src_runtimeDataSourceOperations_ts["src/runtimeDataSourceOperations.ts"] module_src_runtimeDbPersist_test_ts["src/runtimeDbPersist.test.ts"] @@ -6094,14 +5728,12 @@

    Module relationships

    module_src_runtimeActionRegistry_test_ts --> module_src_runtimeBindings_ts module_src_runtimeActionRegistry_ts --> module_src_runtimeBindings_ts module_src_runtimeActionRegistry_ts --> module_src_RuntimeRendererConfig_tsx - module_src_runtimeApiLoaders_test_ts --> module_src_runtimeApiLoaders_ts - module_src_runtimeApiLoaders_test_ts --> module_src_runtimeBindings_ts - module_src_runtimeApiLoaders_test_ts --> module_src_runtimeStateAdapter_ts - module_src_runtimeApiLoaders_ts --> module_src_runtimeStateAdapter_ts module_src_runtimeBindings_test_ts --> module_src_runtimeBindings_ts module_src_runtimeBindings_test_ts --> module_src_runtimeNodeProps_ts + module_src_runtimeDatabaseOperationExecutor_ts --> module_src_runtimeBindings_ts module_src_runtimeDataSourceOperations_test_ts --> module_src_runtimeDataSourceOperations_ts module_src_runtimeDataSourceOperations_ts --> module_src_runtimeBindings_ts + module_src_runtimeDataSourceOperations_ts --> module_src_runtimeDatabaseOperationExecutor_ts module_src_runtimeDbPersist_test_ts --> module_src_runtimeActionRegistry_ts module_src_runtimeDbPersist_test_ts --> module_src_runtimeDbPersist_ts module_src_runtimeDbPersist_ts --> module_src_RuntimeRendererConfig_tsx @@ -6131,10 +5763,10 @@

    Module relationships

    module_src_runtimeRepeat_test_ts --> module_src_runtimeRepeat_ts module_src_runtimeRepeat_ts --> module_src_runtimeBindings_ts module_src_RuntimeScreen_tsx --> module_src_registry_tsx - module_src_RuntimeScreen_tsx --> module_src_runtimeApiLoaders_ts module_src_RuntimeScreen_tsx --> module_src_RuntimeRenderer_tsx module_src_RuntimeScreen_tsx --> module_src_RuntimeRendererConfig_tsx module_src_RuntimeScreen_tsx --> module_src_runtimeScreenLoaders_ts + module_src_RuntimeScreen_tsx --> module_src_runtimeStateAdapter_ts module_src_runtimeScreenLoaders_arrayPath_test_ts --> module_src_runtimeBindings_ts module_src_runtimeScreenLoaders_arrayPath_test_ts --> module_src_runtimeScreenLoaders_ts module_src_runtimeScreenLoaders_test_ts --> module_src_runtimeBindings_ts @@ -6161,10 +5793,9 @@

    Export graph

    module_src_rendering_ts["src/rendering.ts"] module_src_runtimeActionRegistry_test_ts["src/runtimeActionRegistry.test.ts"] module_src_runtimeActionRegistry_ts["src/runtimeActionRegistry.ts"] - module_src_runtimeApiLoaders_test_ts["src/runtimeApiLoaders.test.ts"] - module_src_runtimeApiLoaders_ts["src/runtimeApiLoaders.ts"] module_src_runtimeBindings_test_ts["src/runtimeBindings.test.ts"] module_src_runtimeBindings_ts["src/runtimeBindings.ts"] + module_src_runtimeDatabaseOperationExecutor_ts["src/runtimeDatabaseOperationExecutor.ts"] module_src_runtimeDataSourceOperations_test_ts["src/runtimeDataSourceOperations.test.ts"] module_src_runtimeDataSourceOperations_ts["src/runtimeDataSourceOperations.ts"] module_src_runtimeDbPersist_test_ts["src/runtimeDbPersist.test.ts"] @@ -6271,10 +5902,6 @@

    Export graph

    module_src_runtimeDbPersist_ts --> export_executeDbPersistAction export_executeDbPersistAction -.-> export_RuntimeActionHandlerArgs export_executeDbPersistAction -.-> export_RuntimeDbPersistExecutionResult - export_executeRuntimeApiLoaders["executeRuntimeApiLoaders"] - module_src_runtimeApiLoaders_ts --> export_executeRuntimeApiLoaders - export_executeRuntimeApiLoaders -.-> export_RuntimeApiLoaderDefinition - export_executeRuntimeApiLoaders -.-> export_RuntimeApiLoaderExecutionResult export_executeRuntimeScreenOperationLoaders["executeRuntimeScreenOperationLoaders"] module_src_runtimeScreenLoaders_ts --> export_executeRuntimeScreenOperationLoaders @@ -6289,11 +5916,6 @@

    Export graph

    export_ManifestContext["ManifestContext"] module_src_ManifestContext_tsx --> export_ManifestContext export_ManifestProvider["ManifestProvider"] module_src_ManifestContext_tsx --> export_ManifestProvider - export_materializeRuntimeApiLoaderState["materializeRuntimeApiLoaderState"] - module_src_runtimeApiLoaders_ts --> export_materializeRuntimeApiLoaderState - export_materializeRuntimeApiLoaderState -.-> export_RuntimeApiLoaderDefinition - export_materializeRuntimeApiLoaderState -.-> - export_RuntimeApiLoaderMaterializationResult export_mergeRuntimeRendererConfig["mergeRuntimeRendererConfig"] module_src_RuntimeRendererConfig_tsx --> export_mergeRuntimeRendererConfig export_mergeRuntimeRendererConfig -.-> export_RuntimeRendererConfig @@ -6323,8 +5945,6 @@

    Export graph

    export_resolveRuntimeBindingValueSync["resolveRuntimeBindingValueSync"] module_src_runtimeBindings_ts --> export_resolveRuntimeBindingValueSync export_resolveRuntimeBindingValueSync -.-> export_RuntimeBindingResolutionContext - export_resolveScreenApiLoaders["resolveScreenApiLoaders"] - module_src_runtimeScreenLoaders_ts --> export_resolveScreenApiLoaders export_resolveScreenOperationLoaders["resolveScreenOperationLoaders"] module_src_runtimeScreenLoaders_ts --> export_resolveScreenOperationLoaders export_RUNTIME_CAPABILITIES["RUNTIME_CAPABILITIES"] @@ -6354,19 +5974,6 @@

    Export graph

    module_src_runtimeActionRegistry_ts --> export_RuntimeActionResolutionScope export_RuntimeAdapterDescriptor["RuntimeAdapterDescriptor"] module_src_runtimeManifest_ts --> export_RuntimeAdapterDescriptor - export_RuntimeApiLoaderDefinition["RuntimeApiLoaderDefinition"] - module_src_runtimeApiLoaders_ts --> export_RuntimeApiLoaderDefinition - export_RuntimeApiLoaderDiagnostic["RuntimeApiLoaderDiagnostic"] - module_src_runtimeApiLoaders_ts --> export_RuntimeApiLoaderDiagnostic - export_RuntimeApiLoaderExecutionResult["RuntimeApiLoaderExecutionResult"] - module_src_runtimeApiLoaders_ts --> export_RuntimeApiLoaderExecutionResult - export_RuntimeApiLoaderExecutionResult -.-> export_RuntimeApiLoaderDiagnostic - export_RuntimeApiLoaderMaterializationResult["RuntimeApiLoaderMaterializationResult"] - module_src_runtimeApiLoaders_ts --> export_RuntimeApiLoaderMaterializationResult - export_RuntimeApiLoaderMaterializationResult -.-> - export_RuntimeApiLoaderDiagnostic - export_RuntimeApiLoaderMode["RuntimeApiLoaderMode"] - module_src_runtimeApiLoaders_ts --> export_RuntimeApiLoaderMode export_RuntimeBindingDescriptor["RuntimeBindingDescriptor"] module_src_runtimeManifest_ts --> export_RuntimeBindingDescriptor export_RuntimeBindingOperationExecutionArgs["RuntimeBindingOperationExecutionArgs"] @@ -6475,10 +6082,6 @@

    Export graph

    module_src_ManifestContext_tsx --> export_useManifestContext export_useOptionalManifestContext["useOptionalManifestContext"] module_src_ManifestContext_tsx --> export_useOptionalManifestContext - export_useRuntimeApiStateLoaders["useRuntimeApiStateLoaders"] - module_src_runtimeApiLoaders_ts --> export_useRuntimeApiStateLoaders - export_useRuntimeApiStateLoaders -.-> export_RuntimeApiLoaderDefinition - export_useRuntimeApiStateLoaders -.-> export_RuntimeApiLoaderDiagnostic export_useRuntimeRendererConfig["useRuntimeRendererConfig"] module_src_RuntimeRendererConfig_tsx --> export_useRuntimeRendererConfig export_useRuntimeRendererConfig -.-> export_RuntimeRendererConfig @@ -6510,10 +6113,9 @@

    Export graph

    module_src_rendering_ts["src/rendering.ts"] module_src_runtimeActionRegistry_test_ts["src/runtimeActionRegistry.test.ts"] module_src_runtimeActionRegistry_ts["src/runtimeActionRegistry.ts"] - module_src_runtimeApiLoaders_test_ts["src/runtimeApiLoaders.test.ts"] - module_src_runtimeApiLoaders_ts["src/runtimeApiLoaders.ts"] module_src_runtimeBindings_test_ts["src/runtimeBindings.test.ts"] module_src_runtimeBindings_ts["src/runtimeBindings.ts"] + module_src_runtimeDatabaseOperationExecutor_ts["src/runtimeDatabaseOperationExecutor.ts"] module_src_runtimeDataSourceOperations_test_ts["src/runtimeDataSourceOperations.test.ts"] module_src_runtimeDataSourceOperations_ts["src/runtimeDataSourceOperations.ts"] module_src_runtimeDbPersist_test_ts["src/runtimeDbPersist.test.ts"] @@ -6607,10 +6209,6 @@

    Export graph

    module_src_runtimeDbPersist_ts --> export_executeDbPersistAction export_executeDbPersistAction -.-> export_RuntimeActionHandlerArgs export_executeDbPersistAction -.-> export_RuntimeDbPersistExecutionResult - export_executeRuntimeApiLoaders["executeRuntimeApiLoaders"] - module_src_runtimeApiLoaders_ts --> export_executeRuntimeApiLoaders - export_executeRuntimeApiLoaders -.-> export_RuntimeApiLoaderDefinition - export_executeRuntimeApiLoaders -.-> export_RuntimeApiLoaderExecutionResult export_executeRuntimeScreenOperationLoaders["executeRuntimeScreenOperationLoaders"] module_src_runtimeScreenLoaders_ts --> export_executeRuntimeScreenOperationLoaders export_executeRuntimeScreenOperationLoaders -.-> export_RuntimeBindingOperationExecutor @@ -6623,10 +6221,6 @@

    Export graph

    module_src_ManifestContext_tsx --> export_ManifestContext export_ManifestProvider["ManifestProvider"] module_src_ManifestContext_tsx --> export_ManifestProvider - export_materializeRuntimeApiLoaderState["materializeRuntimeApiLoaderState"] - module_src_runtimeApiLoaders_ts --> export_materializeRuntimeApiLoaderState - export_materializeRuntimeApiLoaderState -.-> export_RuntimeApiLoaderDefinition - export_materializeRuntimeApiLoaderState -.-> export_RuntimeApiLoaderMaterializationResult export_mergeRuntimeRendererConfig["mergeRuntimeRendererConfig"] module_src_RuntimeRendererConfig_tsx --> export_mergeRuntimeRendererConfig export_mergeRuntimeRendererConfig -.-> export_RuntimeRendererConfig @@ -6656,8 +6250,6 @@

    Export graph

    export_resolveRuntimeBindingValueSync["resolveRuntimeBindingValueSync"] module_src_runtimeBindings_ts --> export_resolveRuntimeBindingValueSync export_resolveRuntimeBindingValueSync -.-> export_RuntimeBindingResolutionContext - export_resolveScreenApiLoaders["resolveScreenApiLoaders"] - module_src_runtimeScreenLoaders_ts --> export_resolveScreenApiLoaders export_resolveScreenOperationLoaders["resolveScreenOperationLoaders"] module_src_runtimeScreenLoaders_ts --> export_resolveScreenOperationLoaders export_RUNTIME_CAPABILITIES["RUNTIME_CAPABILITIES"] @@ -6687,18 +6279,6 @@

    Export graph

    module_src_runtimeActionRegistry_ts --> export_RuntimeActionResolutionScope export_RuntimeAdapterDescriptor["RuntimeAdapterDescriptor"] module_src_runtimeManifest_ts --> export_RuntimeAdapterDescriptor - export_RuntimeApiLoaderDefinition["RuntimeApiLoaderDefinition"] - module_src_runtimeApiLoaders_ts --> export_RuntimeApiLoaderDefinition - export_RuntimeApiLoaderDiagnostic["RuntimeApiLoaderDiagnostic"] - module_src_runtimeApiLoaders_ts --> export_RuntimeApiLoaderDiagnostic - export_RuntimeApiLoaderExecutionResult["RuntimeApiLoaderExecutionResult"] - module_src_runtimeApiLoaders_ts --> export_RuntimeApiLoaderExecutionResult - export_RuntimeApiLoaderExecutionResult -.-> export_RuntimeApiLoaderDiagnostic - export_RuntimeApiLoaderMaterializationResult["RuntimeApiLoaderMaterializationResult"] - module_src_runtimeApiLoaders_ts --> export_RuntimeApiLoaderMaterializationResult - export_RuntimeApiLoaderMaterializationResult -.-> export_RuntimeApiLoaderDiagnostic - export_RuntimeApiLoaderMode["RuntimeApiLoaderMode"] - module_src_runtimeApiLoaders_ts --> export_RuntimeApiLoaderMode export_RuntimeBindingDescriptor["RuntimeBindingDescriptor"] module_src_runtimeManifest_ts --> export_RuntimeBindingDescriptor export_RuntimeBindingOperationExecutionArgs["RuntimeBindingOperationExecutionArgs"] @@ -6804,10 +6384,6 @@

    Export graph

    module_src_ManifestContext_tsx --> export_useManifestContext export_useOptionalManifestContext["useOptionalManifestContext"] module_src_ManifestContext_tsx --> export_useOptionalManifestContext - export_useRuntimeApiStateLoaders["useRuntimeApiStateLoaders"] - module_src_runtimeApiLoaders_ts --> export_useRuntimeApiStateLoaders - export_useRuntimeApiStateLoaders -.-> export_RuntimeApiLoaderDefinition - export_useRuntimeApiStateLoaders -.-> export_RuntimeApiLoaderDiagnostic export_useRuntimeRendererConfig["useRuntimeRendererConfig"] module_src_RuntimeRendererConfig_tsx --> export_useRuntimeRendererConfig export_useRuntimeRendererConfig -.-> export_RuntimeRendererConfig @@ -7144,7 +6720,6 @@

    RuntimeScreen sequence

    sequenceDiagram participant participant_createRuntimeScreenOperationLoaderLifecycle as createRuntimeScreenOperationLoaderLifecycle participant participant_RuntimeScreen as RuntimeScreen participant participant_useContext as useContext participant - participant_useRuntimeApiStateLoaders as useRuntimeApiStateLoaders participant participant_useRuntimeRendererConfig as useRuntimeRendererConfig participant participant_useRuntimeScreenOperationLoaders as useRuntimeScreenOperationLoaders participant_RuntimeScreen->>participant_useRuntimeRendererConfig: @@ -7152,9 +6727,6 @@

    RuntimeScreen sequence

    participant_useRuntimeRendererConfig->>participant_useContext: useContext() participant_useContext-->>participant_useRuntimeRendererConfig: return participant_useRuntimeRendererConfig-->>participant_RuntimeScreen: return - participant_RuntimeScreen->>participant_useRuntimeApiStateLoaders: - useRuntimeApiStateLoaders() - participant_useRuntimeApiStateLoaders-->>participant_RuntimeScreen: return participant_RuntimeScreen->>participant_useRuntimeScreenOperationLoaders: useRuntimeScreenOperationLoaders() participant_useRuntimeScreenOperationLoaders->>participant_createRuntimeScreenOperationLoaderLifecycle: @@ -7171,15 +6743,12 @@

    RuntimeScreen sequence

    participant participant_createRuntimeScreenOperationLoaderLifecycle as createRuntimeScreenOperationLoaderLifecycle participant participant_RuntimeScreen as RuntimeScreen participant participant_useContext as useContext - participant participant_useRuntimeApiStateLoaders as useRuntimeApiStateLoaders participant participant_useRuntimeRendererConfig as useRuntimeRendererConfig participant participant_useRuntimeScreenOperationLoaders as useRuntimeScreenOperationLoaders participant_RuntimeScreen->>participant_useRuntimeRendererConfig: useRuntimeRendererConfig() participant_useRuntimeRendererConfig->>participant_useContext: useContext() participant_useContext-->>participant_useRuntimeRendererConfig: return participant_useRuntimeRendererConfig-->>participant_RuntimeScreen: return - participant_RuntimeScreen->>participant_useRuntimeApiStateLoaders: useRuntimeApiStateLoaders() - participant_useRuntimeApiStateLoaders-->>participant_RuntimeScreen: return participant_RuntimeScreen->>participant_useRuntimeScreenOperationLoaders: useRuntimeScreenOperationLoaders() participant_useRuntimeScreenOperationLoaders->>participant_createRuntimeScreenOperationLoaderLifecycle: createRuntimeScreenOperationLoaderLifecycle() participant_createRuntimeScreenOperationLoaderLifecycle-->>participant_useRuntimeScreenOperationLoaders: return @@ -7679,82 +7248,6 @@

    isRecord

    -
    isRecord
    +
    isRecord

    src/runtimeDataSourceOperations.test.ts

    -

    createDataSources

    -

    src/runtimeDataSourceOperations.test.ts:10:1

    +

    createExternalDataSources

    +

    src/runtimeDataSourceOperations.test.ts:19:1

    +

    No description available.

    +
    +
    +

    createGeneratedDataSource

    +

    src/runtimeDataSourceOperations.test.ts:57:1

    No description available.

    createDataSources data-search="getFixtureDataSource src/runtimeDataSourceOperations.test.ts " >

    getFixtureDataSource

    -

    src/runtimeDataSourceOperations.test.ts:46:1

    +

    src/runtimeDataSourceOperations.test.ts:84:1

    No description available.

    getFixtureDataSource data-search="getFixtureEndpoint src/runtimeDataSourceOperations.test.ts " >

    getFixtureEndpoint

    -

    src/runtimeDataSourceOperations.test.ts:55:1

    +

    src/runtimeDataSourceOperations.test.ts:90:1

    +

    No description available.

    +
    +
    +

    createDatabaseFixture

    +

    src/runtimeDataSourceOperations.test.ts:108:1

    +

    No description available.

    +
    +
    +

    createGeneratedExecutor

    +

    src/runtimeDataSourceOperations.test.ts:148:1

    +

    No description available.

    +
    +
    +

    executeGeneratedOperation

    +

    src/runtimeDataSourceOperations.test.ts:154:1

    No description available.

    @@ -7984,15 +7670,30 @@

    src/runtimeDataSourceOperations.ts

    data-search="createRuntimeDataSourceOperationExecutor src/runtimeDataSourceOperations.ts " >

    createRuntimeDataSourceOperationExecutor

    -

    src/runtimeDataSourceOperations.ts:12:1

    +

    src/runtimeDataSourceOperations.ts:14:1

    +

    No description available.

    + +
    +

    missingEndpoint

    +

    src/runtimeDataSourceOperations.ts:56:1

    No description available.

    -

    createRuntimeDataSourceOperationDiagnostic

    -

    src/runtimeDataSourceOperations.ts:69:1

    +

    missingOperation

    +

    src/runtimeDataSourceOperations.ts:70:1

    +

    No description available.

    +
    +
    +

    invalidInput

    +

    src/runtimeDataSourceOperations.ts:80:1

    +

    No description available.

    +
    +
    +

    failure

    +

    src/runtimeDataSourceOperations.ts:90:1

    No description available.

    createRuntimeDataSourceOperationDiagnostic data-search="asBindingValueRecord src/runtimeDataSourceOperations.ts " >

    asBindingValueRecord

    -

    src/runtimeDataSourceOperations.ts:85:1

    +

    src/runtimeDataSourceOperations.ts:108:1

    No description available.

    asBindingValueRecord data-search="isBindingValueRecord src/runtimeDataSourceOperations.ts " >

    isBindingValueRecord

    -

    src/runtimeDataSourceOperations.ts:91:1

    +

    src/runtimeDataSourceOperations.ts:114:1

    No description available.

    @@ -8388,7 +8089,7 @@

    createDataSources

    createRepeatedGridNode

    -

    src/runtimeRepeat.test.ts:44:1

    +

    src/runtimeRepeat.test.ts:46:1

    No description available.

    createRepeatedGridNode data-search="createRepeatedCardBindings src/runtimeRepeat.test.ts " >

    createRepeatedCardBindings

    -

    src/runtimeRepeat.test.ts:70:1

    +

    src/runtimeRepeat.test.ts:72:1

    No description available.

    @@ -8498,23 +8199,7 @@

    shouldRenderRuntimeRepeatEmptyState

    src/RuntimeScreen.tsx

    RuntimeScreen

    -

    src/RuntimeScreen.tsx:24:1

    -

    No description available.

    -
    -
    -

    resolveApiLoadersFromBindings

    -

    src/RuntimeScreen.tsx:62:1

    -

    No description available.

    -
    -
    -

    resolveApiLoaderFromPropBinding

    -

    src/RuntimeScreen.tsx:79:1

    +

    src/RuntimeScreen.tsx:17:1

    No description available.

    @@ -8563,7 +8248,7 @@

    createDataSources

    data-search="createDetailScreenRoot src/runtimeScreenLoaders.test.ts " >

    createDetailScreenRoot

    -

    src/runtimeScreenLoaders.test.ts:62:1

    +

    src/runtimeScreenLoaders.test.ts:64:1

    No description available.

    createDetailScreenRoot data-search="createDetailLoader src/runtimeScreenLoaders.test.ts " >

    createDetailLoader

    -

    src/runtimeScreenLoaders.test.ts:69:1

    +

    src/runtimeScreenLoaders.test.ts:71:1

    No description available.

    createDetailLoader data-search="createCachedOperationInputLoader src/runtimeScreenLoaders.test.ts " >

    createCachedOperationInputLoader

    -

    src/runtimeScreenLoaders.test.ts:86:1

    +

    src/runtimeScreenLoaders.test.ts:88:1

    No description available.

    createCachedOperationInputLoader data-search="createDetailScreen src/runtimeScreenLoaders.test.ts " >

    createDetailScreen

    -

    src/runtimeScreenLoaders.test.ts:106:1

    +

    src/runtimeScreenLoaders.test.ts:108:1

    No description available.

    createDetailScreen data-search="createDetailBindings src/runtimeScreenLoaders.test.ts " >

    createDetailBindings

    -

    src/runtimeScreenLoaders.test.ts:117:1

    +

    src/runtimeScreenLoaders.test.ts:119:1

    No description available.

    createDetailBindings data-search="createRouteBindingContext src/runtimeScreenLoaders.test.ts " >

    createRouteBindingContext

    -

    src/runtimeScreenLoaders.test.ts:149:1

    +

    src/runtimeScreenLoaders.test.ts:151:1

    No description available.

    @@ -8616,20 +8301,12 @@

    createRouteBindingContext

    >

    src/runtimeScreenLoaders.ts

    -
    -

    resolveScreenApiLoaders

    -

    src/runtimeScreenLoaders.ts:44:1

    -

    No description available.

    -

    resolveScreenOperationLoaders

    -

    src/runtimeScreenLoaders.ts:52:1

    +

    src/runtimeScreenLoaders.ts:43:1

    No description available.

    resolveScreenOperationLoaders data-search="createRuntimeScreenLoaderRequestKey src/runtimeScreenLoaders.ts " >

    createRuntimeScreenLoaderRequestKey

    -

    src/runtimeScreenLoaders.ts:60:1

    +

    src/runtimeScreenLoaders.ts:49:1

    No description available.

    createRuntimeScreenLoaderRequestKey data-search="createRuntimeScreenOperationLoaderLifecycle src/runtimeScreenLoaders.ts " >

    createRuntimeScreenOperationLoaderLifecycle

    -

    src/runtimeScreenLoaders.ts:74:1

    +

    src/runtimeScreenLoaders.ts:63:1

    No description available.

    createRuntimeScreenOperationLoaderLifecycle data-search="createIdleRuntimeScreenOperationLoaderState src/runtimeScreenLoaders.ts " >

    createIdleRuntimeScreenOperationLoaderState

    -

    src/runtimeScreenLoaders.ts:81:1

    +

    src/runtimeScreenLoaders.ts:70:1

    No description available.

    createIdleRuntimeScreenOperationLoaderState data-search="createPendingRuntimeScreenOperationLoaderState src/runtimeScreenLoaders.ts " >

    createPendingRuntimeScreenOperationLoaderState

    -

    src/runtimeScreenLoaders.ts:93:1

    +

    src/runtimeScreenLoaders.ts:82:1

    No description available.

    createPendingRuntimeScreenOperationLoaderState data-search="beginRuntimeScreenOperationLoaderRequest src/runtimeScreenLoaders.ts " >

    beginRuntimeScreenOperationLoaderRequest

    -

    src/runtimeScreenLoaders.ts:105:1

    +

    src/runtimeScreenLoaders.ts:94:1

    No description available.

    beginRuntimeScreenOperationLoaderRequest data-search="completeRuntimeScreenOperationLoaderRequest src/runtimeScreenLoaders.ts " >

    completeRuntimeScreenOperationLoaderRequest

    -

    src/runtimeScreenLoaders.ts:162:1

    +

    src/runtimeScreenLoaders.ts:151:1

    No description available.

    completeRuntimeScreenOperationLoaderRequest data-search="executeRuntimeScreenOperationLoaders src/runtimeScreenLoaders.ts " >

    executeRuntimeScreenOperationLoaders

    -

    src/runtimeScreenLoaders.ts:189:1

    +

    src/runtimeScreenLoaders.ts:178:1

    No description available.

    executeRuntimeScreenOperationLoaders data-search="executePreparedRuntimeScreenOperationLoaders src/runtimeScreenLoaders.ts " >

    executePreparedRuntimeScreenOperationLoaders

    -

    src/runtimeScreenLoaders.ts:212:1

    +

    src/runtimeScreenLoaders.ts:201:1

    No description available.

    executePreparedRuntimeScreenOperationLoaders data-search="useRuntimeScreenOperationLoaders src/runtimeScreenLoaders.ts " >

    useRuntimeScreenOperationLoaders

    -

    src/runtimeScreenLoaders.ts:284:1

    +

    src/runtimeScreenLoaders.ts:273:1

    No description available.

    useRuntimeScreenOperationLoaders data-search="createRuntimeScreenOperationLoaderPlan src/runtimeScreenLoaders.ts " >

    createRuntimeScreenOperationLoaderPlan

    -

    src/runtimeScreenLoaders.ts:411:1

    +

    src/runtimeScreenLoaders.ts:400:1

    No description available.

    createRuntimeScreenOperationLoaderPlan data-search="createRuntimeScreenOperationLoaderPlanRequestKey src/runtimeScreenLoaders.ts " >

    createRuntimeScreenOperationLoaderPlanRequestKey

    -

    src/runtimeScreenLoaders.ts:468:1

    +

    src/runtimeScreenLoaders.ts:457:1

    No description available.

    createRuntimeScreenOperationLoaderPlanRequestKey data-search="createScreenOperationLoaderDiagnostic src/runtimeScreenLoaders.ts " >

    createScreenOperationLoaderDiagnostic

    -

    src/runtimeScreenLoaders.ts:483:1

    +

    src/runtimeScreenLoaders.ts:472:1

    No description available.

    createScreenOperationLoaderDiagnostic data-search="createRuntimeScreenOperationLoaderIdleKey src/runtimeScreenLoaders.ts " >

    createRuntimeScreenOperationLoaderIdleKey

    -

    src/runtimeScreenLoaders.ts:498:1

    +

    src/runtimeScreenLoaders.ts:487:1

    No description available.

    stableSerialize

    -

    src/runtimeScreenLoaders.ts:502:1

    +

    src/runtimeScreenLoaders.ts:491:1

    No description available.

    sortSerializableValue

    -

    src/runtimeScreenLoaders.ts:506:1

    +

    src/runtimeScreenLoaders.ts:495:1

    No description available.

    diff --git a/paradox/paradox.json b/paradox/paradox.json index 91cb044..55f0cd0 100644 --- a/paradox/paradox.json +++ b/paradox/paradox.json @@ -12,7 +12,7 @@ { "id": "npm", "label": "npm", - "value": "v0.2.4", + "value": "v0.3.0", "color": "cb3837" }, { @@ -108,12 +108,10 @@ "dispatchRuntimeComponentEvent", "dispatchRuntimeComponentEventWithReporting", "executeDbPersistAction", - "executeRuntimeApiLoaders", "executeRuntimeScreenOperationLoaders", "listRuntimeCapabilities", "ManifestContext", "ManifestProvider", - "materializeRuntimeApiLoaderState", "mergeRuntimeRendererConfig", "resolveBindingInputMap", "resolveDbPersistInput", @@ -123,7 +121,6 @@ "resolveRuntimeBindingsAsync", "resolveRuntimeBindingValue", "resolveRuntimeBindingValueSync", - "resolveScreenApiLoaders", "resolveScreenOperationLoaders", "RUNTIME_CAPABILITIES", "RUNTIME_MANIFEST_KIND", @@ -137,11 +134,6 @@ "RuntimeActionResolutionArgs", "RuntimeActionResolutionScope", "RuntimeAdapterDescriptor", - "RuntimeApiLoaderDefinition", - "RuntimeApiLoaderDiagnostic", - "RuntimeApiLoaderExecutionResult", - "RuntimeApiLoaderMaterializationResult", - "RuntimeApiLoaderMode", "RuntimeBindingDescriptor", "RuntimeBindingOperationExecutionArgs", "RuntimeBindingOperationExecutionResult", @@ -180,7 +172,6 @@ "useManifest", "useManifestContext", "useOptionalManifestContext", - "useRuntimeApiStateLoaders", "useRuntimeRendererConfig", "useRuntimeScreenOperationLoaders", "validateRuntimeBindingOperationRef", @@ -251,31 +242,6 @@ "wrapRuntimeEventProps" ] }, - { - "path": "src/runtimeApiLoaders.test.ts", - "isEntrypoint": false, - "dependencies": [ - "src/runtimeApiLoaders.ts", - "src/runtimeBindings.ts", - "src/runtimeStateAdapter.ts" - ], - "exports": [] - }, - { - "path": "src/runtimeApiLoaders.ts", - "isEntrypoint": false, - "dependencies": ["src/runtimeStateAdapter.ts"], - "exports": [ - "executeRuntimeApiLoaders", - "materializeRuntimeApiLoaderState", - "RuntimeApiLoaderDefinition", - "RuntimeApiLoaderDiagnostic", - "RuntimeApiLoaderExecutionResult", - "RuntimeApiLoaderMaterializationResult", - "RuntimeApiLoaderMode", - "useRuntimeApiStateLoaders" - ] - }, { "path": "src/runtimeBindings.test.ts", "isEntrypoint": false, @@ -309,6 +275,12 @@ "validateRuntimeBindingOperationRef" ] }, + { + "path": "src/runtimeDatabaseOperationExecutor.ts", + "isEntrypoint": false, + "dependencies": ["src/runtimeBindings.ts"], + "exports": ["executeRuntimeDatabaseOperation"] + }, { "path": "src/runtimeDataSourceOperations.test.ts", "isEntrypoint": false, @@ -318,7 +290,7 @@ { "path": "src/runtimeDataSourceOperations.ts", "isEntrypoint": false, - "dependencies": ["src/runtimeBindings.ts"], + "dependencies": ["src/runtimeBindings.ts", "src/runtimeDatabaseOperationExecutor.ts"], "exports": [ "createRuntimeDataSourceOperationExecutor", "RuntimeDataSourceOperationExecutorOptions" @@ -488,10 +460,10 @@ "isEntrypoint": false, "dependencies": [ "src/registry.tsx", - "src/runtimeApiLoaders.ts", "src/RuntimeRenderer.tsx", "src/RuntimeRendererConfig.tsx", - "src/runtimeScreenLoaders.ts" + "src/runtimeScreenLoaders.ts", + "src/runtimeStateAdapter.ts" ], "exports": ["RuntimeScreen", "RuntimeScreenProps"] }, @@ -519,7 +491,6 @@ "createRuntimeScreenLoaderRequestKey", "createRuntimeScreenOperationLoaderLifecycle", "executeRuntimeScreenOperationLoaders", - "resolveScreenApiLoaders", "resolveScreenOperationLoaders", "RuntimeScreenOperationLoaderExecutionResult", "RuntimeScreenOperationLoaderLifecycle", @@ -782,7 +753,7 @@ "modulePath": "src/runtimeScreenLoaders.ts", "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 93, + "line": 82, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -885,7 +856,7 @@ "modulePath": "src/runtimeDataSourceOperations.ts", "sourceLocation": { "filePath": "src/runtimeDataSourceOperations.ts", - "line": 12, + "line": 14, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -984,7 +955,7 @@ "modulePath": "src/runtimeScreenLoaders.ts", "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 60, + "line": 49, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -1203,38 +1174,6 @@ "members": [], "structuredRows": [] }, - { - "name": "executeRuntimeApiLoaders", - "description": null, - "isReadme": false, - "examples": [], - "kind": "function", - "modulePath": "src/runtimeApiLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 100, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": ["RuntimeApiLoaderDefinition", "RuntimeApiLoaderExecutionResult"], - "signatures": [ - { - "label": "(args: { readonly data?: AppDataManifest; readonly loaders: readonly RuntimeApiLoaderDefinition[]; readonly stateAdapter: StateAdapter; }) => RuntimeApiLoaderExecutionResult", - "parameters": [ - { - "name": "args", - "type": "{ readonly data?: AppDataManifest; readonly loaders: readonly RuntimeApiLoaderDefinition[]; readonly stateAdapter: StateAdapter; }", - "required": true, - "description": null - } - ], - "returnType": "RuntimeApiLoaderExecutionResult", - "returnDescription": null - } - ], - "members": [], - "structuredRows": [] - }, { "name": "executeRuntimeScreenOperationLoaders", "description": null, @@ -1244,7 +1183,7 @@ "modulePath": "src/runtimeScreenLoaders.ts", "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 189, + "line": 178, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -1347,38 +1286,6 @@ "members": [], "structuredRows": [] }, - { - "name": "materializeRuntimeApiLoaderState", - "description": null, - "isReadme": false, - "examples": [], - "kind": "function", - "modulePath": "src/runtimeApiLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 40, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": ["RuntimeApiLoaderDefinition", "RuntimeApiLoaderMaterializationResult"], - "signatures": [ - { - "label": "(args: { readonly data?: AppDataManifest; readonly loaders: readonly RuntimeApiLoaderDefinition[]; }) => RuntimeApiLoaderMaterializationResult", - "parameters": [ - { - "name": "args", - "type": "{ readonly data?: AppDataManifest; readonly loaders: readonly RuntimeApiLoaderDefinition[]; }", - "required": true, - "description": null - } - ], - "returnType": "RuntimeApiLoaderMaterializationResult", - "returnDescription": null - } - ], - "members": [], - "structuredRows": [] - }, { "name": "mergeRuntimeRendererConfig", "description": null, @@ -1721,38 +1628,6 @@ "members": [], "structuredRows": [] }, - { - "name": "resolveScreenApiLoaders", - "description": null, - "isReadme": false, - "examples": [], - "kind": "function", - "modulePath": "src/runtimeScreenLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeScreenLoaders.ts", - "line": 44, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": [], - "signatures": [ - { - "label": "(screen: ScreenSpec) => readonly ApiScreenDataLoaderDefinition[]", - "parameters": [ - { - "name": "screen", - "type": "ScreenSpec", - "required": true, - "description": null - } - ], - "returnType": "readonly ApiScreenDataLoaderDefinition[]", - "returnDescription": null - } - ], - "members": [], - "structuredRows": [] - }, { "name": "resolveScreenOperationLoaders", "description": null, @@ -1762,7 +1637,7 @@ "modulePath": "src/runtimeScreenLoaders.ts", "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 52, + "line": 43, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -2147,148 +2022,6 @@ ], "structuredRows": [] }, - { - "name": "RuntimeApiLoaderDefinition", - "description": null, - "isReadme": false, - "examples": [], - "kind": "unknown", - "modulePath": "src/runtimeApiLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 17, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": [], - "signatures": [], - "members": [], - "structuredRows": [] - }, - { - "name": "RuntimeApiLoaderDiagnostic", - "description": null, - "isReadme": false, - "examples": [], - "kind": "type", - "modulePath": "src/runtimeApiLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 19, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": [], - "signatures": [], - "members": [ - { - "name": "apiId", - "kind": "property", - "type": "string | undefined", - "required": false, - "description": null - }, - { - "name": "code", - "kind": "property", - "type": "\"invalid-record\" | \"missing-api\" | \"missing-target-path\" | \"state-set-failed\" | \"unsupported-loader\"", - "required": true, - "description": null - }, - { - "name": "message", - "kind": "property", - "type": "string", - "required": true, - "description": null - }, - { - "name": "targetPath", - "kind": "property", - "type": "string | undefined", - "required": false, - "description": null - } - ], - "structuredRows": [] - }, - { - "name": "RuntimeApiLoaderExecutionResult", - "description": null, - "isReadme": false, - "examples": [], - "kind": "type", - "modulePath": "src/runtimeApiLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 31, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": ["RuntimeApiLoaderDiagnostic"], - "signatures": [], - "members": [ - { - "name": "diagnostics", - "kind": "property", - "type": "readonly RuntimeApiLoaderDiagnostic[]", - "required": true, - "description": null - } - ], - "structuredRows": [] - }, - { - "name": "RuntimeApiLoaderMaterializationResult", - "description": null, - "isReadme": false, - "examples": [], - "kind": "type", - "modulePath": "src/runtimeApiLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 35, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": ["RuntimeApiLoaderDiagnostic"], - "signatures": [], - "members": [ - { - "name": "diagnostics", - "kind": "property", - "type": "readonly RuntimeApiLoaderDiagnostic[]", - "required": true, - "description": null - }, - { - "name": "state", - "kind": "property", - "type": "Readonly>", - "required": true, - "description": null - } - ], - "structuredRows": [] - }, - { - "name": "RuntimeApiLoaderMode", - "description": null, - "isReadme": false, - "examples": [], - "kind": "unknown", - "modulePath": "src/runtimeApiLoaders.ts", - "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 15, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": [], - "signatures": [], - "members": [], - "structuredRows": [] - }, { "name": "RuntimeBindingDescriptor", "description": null, @@ -2513,7 +2246,7 @@ { "name": "dataBindings", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, @@ -2595,7 +2328,7 @@ { "name": "dataBindings", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, @@ -2718,7 +2451,7 @@ { "name": "dataBindings", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, @@ -2797,7 +2530,7 @@ "modulePath": "src/runtimeDataSourceOperations.ts", "sourceLocation": { "filePath": "src/runtimeDataSourceOperations.ts", - "line": 7, + "line": 8, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -2811,11 +2544,18 @@ "required": false, "description": null }, + { + "name": "databaseAdapters", + "kind": "property", + "type": "Readonly> | undefined", + "required": false, + "description": null + }, { "name": "fetch", "kind": "property", - "type": "EndpointTestFetch", - "required": true, + "type": "EndpointTestFetch | undefined", + "required": false, "description": null } ], @@ -3004,7 +2744,7 @@ { "name": "dataBindings", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, @@ -3343,14 +3083,14 @@ { "name": "dataBindings", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, { "name": "dataSources", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, @@ -3399,7 +3139,7 @@ { "name": "operationResults", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, @@ -3504,14 +3244,14 @@ { "name": "dataBindings", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, { "name": "dataSources", "kind": "property", - "type": "Readonly> | undefined", + "type": "Readonly> | undefined", "required": false, "description": null }, @@ -3539,7 +3279,7 @@ { "name": "executeAction", "kind": "property", - "type": "import(\"/Users/a_rtiphishl_e/git/runtime/src/RuntimeRendererConfig\").RuntimeActionHandler | undefined", + "type": "import(\"/home/runner/work/runtime/runtime/src/RuntimeRendererConfig\").RuntimeActionHandler | undefined", "required": false, "description": null }, @@ -3684,7 +3424,7 @@ "modulePath": "src/RuntimeScreen.tsx", "sourceLocation": { "filePath": "src/RuntimeScreen.tsx", - "line": 24, + "line": 17, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -3716,7 +3456,7 @@ "modulePath": "src/runtimeScreenLoaders.ts", "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 26, + "line": 25, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -3756,7 +3496,7 @@ "modulePath": "src/runtimeScreenLoaders.ts", "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 19, + "line": 18, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -3803,7 +3543,7 @@ "modulePath": "src/RuntimeScreen.tsx", "sourceLocation": { "filePath": "src/RuntimeScreen.tsx", - "line": 17, + "line": 10, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -3949,56 +3689,24 @@ "structuredRows": [] }, { - "name": "useRuntimeApiStateLoaders", + "name": "useRuntimeRendererConfig", "description": null, "isReadme": false, "examples": [], "kind": "function", - "modulePath": "src/runtimeApiLoaders.ts", + "modulePath": "src/RuntimeRendererConfig.tsx", "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 125, + "filePath": "src/RuntimeRendererConfig.tsx", + "line": 167, "column": 1 }, "exportPaths": ["src/index.ts"], - "relatedSymbols": ["RuntimeApiLoaderDefinition", "RuntimeApiLoaderDiagnostic"], + "relatedSymbols": ["RuntimeRendererConfig"], "signatures": [ { - "label": "(args: { readonly data?: AppDataManifest; readonly loaders?: readonly RuntimeApiLoaderDefinition[]; readonly stateAdapter?: StateAdapter; }) => { readonly diagnostics: readonly RuntimeApiLoaderDiagnostic[]; readonly stateAdapter: StateAdapter; readonly stateVersion: number; }", - "parameters": [ - { - "name": "args", - "type": "{ readonly data?: AppDataManifest; readonly loaders?: readonly RuntimeApiLoaderDefinition[]; readonly stateAdapter?: StateAdapter; }", - "required": true, - "description": null - } - ], - "returnType": "{ readonly diagnostics: readonly RuntimeApiLoaderDiagnostic[]; readonly stateAdapter: StateAdapter; readonly stateVersion: number; }", - "returnDescription": null - } - ], - "members": [], - "structuredRows": [] - }, - { - "name": "useRuntimeRendererConfig", - "description": null, - "isReadme": false, - "examples": [], - "kind": "function", - "modulePath": "src/RuntimeRendererConfig.tsx", - "sourceLocation": { - "filePath": "src/RuntimeRendererConfig.tsx", - "line": 167, - "column": 1 - }, - "exportPaths": ["src/index.ts"], - "relatedSymbols": ["RuntimeRendererConfig"], - "signatures": [ - { - "label": "() => RuntimeRendererConfig", - "parameters": [], - "returnType": "RuntimeRendererConfig", + "label": "() => RuntimeRendererConfig", + "parameters": [], + "returnType": "RuntimeRendererConfig", "returnDescription": null } ], @@ -4014,7 +3722,7 @@ "modulePath": "src/runtimeScreenLoaders.ts", "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 284, + "line": 273, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -4320,7 +4028,7 @@ "modulePath": "src/RuntimeScreen.tsx", "sourceLocation": { "filePath": "src/RuntimeScreen.tsx", - "line": 24, + "line": 17, "column": 1 }, "exportPaths": ["src/index.ts"], @@ -4705,362 +4413,443 @@ } }, { - "name": "materializeRuntimeApiLoaderState", + "name": "createFakeStateAdapter", "description": null, "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 40, + "filePath": "src/runtimeBindings.test.ts", + "line": 25, "column": 1 } }, { - "name": "executeRuntimeApiLoaders", + "name": "createDataSources", "description": null, "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 100, + "filePath": "src/runtimeBindings.test.ts", + "line": 57, "column": 1 } }, { - "name": "useRuntimeApiStateLoaders", + "name": "resolveRuntimeBindingsAsync", "description": null, "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 125, + "filePath": "src/runtimeBindings.ts", + "line": 74, "column": 1 } }, { - "name": "getGeneratedApiCollectionResource", + "name": "resolveRuntimeBindings", "description": null, "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 157, + "filePath": "src/runtimeBindings.ts", + "line": 89, "column": 1 } }, { - "name": "selectApiLoaderValue", + "name": "resolveRuntimeBindingValue", "description": null, "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 167, + "filePath": "src/runtimeBindings.ts", + "line": 103, "column": 1 } }, { - "name": "normalizePrimitiveId", + "name": "resolveRuntimeBindingValueSync", "description": null, "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 205, + "filePath": "src/runtimeBindings.ts", + "line": 116, "column": 1 } }, { - "name": "deterministicIndex", + "name": "resolveBindingInputMap", "description": null, "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 212, + "filePath": "src/runtimeBindings.ts", + "line": 129, "column": 1 } }, { - "name": "writeObjectPath", + "name": "resolveBindingInputMapSync", "description": null, "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 223, + "filePath": "src/runtimeBindings.ts", + "line": 146, "column": 1 } }, { - "name": "flattenStateEntries", + "name": "createRuntimeBindingOperationKey", "description": null, "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 265, + "filePath": "src/runtimeBindings.ts", + "line": 163, "column": 1 } }, { - "name": "toStateValue", + "name": "validateRuntimeBindingOperationRef", "description": null, "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 275, + "filePath": "src/runtimeBindings.ts", + "line": 169, "column": 1 } }, { - "name": "isUnknownRecord", + "name": "resolveRuntimeBindingValueSource", "description": null, "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 303, + "filePath": "src/runtimeBindings.ts", + "line": 211, "column": 1 } }, { - "name": "isMutableStateRecord", + "name": "resolveRuntimeBindingValueSourceSync", "description": null, "sourceLocation": { - "filePath": "src/runtimeApiLoaders.ts", - "line": 307, + "filePath": "src/runtimeBindings.ts", + "line": 253, "column": 1 } }, { - "name": "createFakeStateAdapter", + "name": "resolveCachedOperationValue", "description": null, "sourceLocation": { - "filePath": "src/runtimeBindings.test.ts", - "line": 25, + "filePath": "src/runtimeBindings.ts", + "line": 284, "column": 1 } }, { - "name": "createDataSources", + "name": "resolveBindingFallback", "description": null, "sourceLocation": { - "filePath": "src/runtimeBindings.test.ts", - "line": 57, + "filePath": "src/runtimeBindings.ts", + "line": 294, "column": 1 } }, { - "name": "resolveRuntimeBindingsAsync", + "name": "resolveBindingFallbackSync", "description": null, "sourceLocation": { "filePath": "src/runtimeBindings.ts", - "line": 74, + "line": 306, "column": 1 } }, { - "name": "resolveRuntimeBindings", + "name": "resolveBindingInputValue", "description": null, "sourceLocation": { "filePath": "src/runtimeBindings.ts", - "line": 89, + "line": 318, "column": 1 } }, { - "name": "resolveRuntimeBindingValue", + "name": "resolveBindingInputValueSync", "description": null, "sourceLocation": { "filePath": "src/runtimeBindings.ts", - "line": 103, + "line": 350, "column": 1 } }, { - "name": "resolveRuntimeBindingValueSync", + "name": "resolveRuntimeBindingOperationSelection", "description": null, "sourceLocation": { "filePath": "src/runtimeBindings.ts", - "line": 116, + "line": 382, "column": 1 } }, { - "name": "resolveBindingInputMap", + "name": "resolveRuntimeBindingEndpoint", "description": null, "sourceLocation": { "filePath": "src/runtimeBindings.ts", - "line": 129, + "line": 400, "column": 1 } }, { - "name": "resolveBindingInputMapSync", + "name": "createRuntimeBindingDiagnostic", "description": null, "sourceLocation": { "filePath": "src/runtimeBindings.ts", - "line": 146, + "line": 411, "column": 1 } }, { - "name": "createRuntimeBindingOperationKey", + "name": "applyBindingValueTransforms", "description": null, "sourceLocation": { "filePath": "src/runtimeBindings.ts", - "line": 163, + "line": 428, "column": 1 } }, { - "name": "validateRuntimeBindingOperationRef", + "name": "applyRuntimeBindingDataPath", "description": null, "sourceLocation": { "filePath": "src/runtimeBindings.ts", - "line": 169, + "line": 446, "column": 1 } }, { - "name": "resolveRuntimeBindingValueSource", + "name": "readPath", "description": null, "sourceLocation": { "filePath": "src/runtimeBindings.ts", - "line": 211, + "line": 454, "column": 1 } }, { - "name": "resolveRuntimeBindingValueSourceSync", + "name": "isArrayIndexPathPart", "description": null, "sourceLocation": { "filePath": "src/runtimeBindings.ts", - "line": 253, + "line": 466, "column": 1 } }, { - "name": "resolveCachedOperationValue", + "name": "asBindingValue", "description": null, "sourceLocation": { "filePath": "src/runtimeBindings.ts", - "line": 284, + "line": 470, "column": 1 } }, { - "name": "resolveBindingFallback", + "name": "isBindingValue", "description": null, "sourceLocation": { "filePath": "src/runtimeBindings.ts", - "line": 294, + "line": 474, "column": 1 } }, { - "name": "resolveBindingFallbackSync", + "name": "isRecord", "description": null, "sourceLocation": { "filePath": "src/runtimeBindings.ts", - "line": 306, + "line": 486, "column": 1 } }, { - "name": "resolveBindingInputValue", + "name": "executeRuntimeDatabaseOperation", "description": null, "sourceLocation": { - "filePath": "src/runtimeBindings.ts", - "line": 318, + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 13, "column": 1 } }, { - "name": "resolveBindingInputValueSync", + "name": "resolveOperationPlan", "description": null, "sourceLocation": { - "filePath": "src/runtimeBindings.ts", - "line": 350, + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 67, "column": 1 } }, { - "name": "resolveRuntimeBindingOperationSelection", + "name": "executeList", "description": null, "sourceLocation": { - "filePath": "src/runtimeBindings.ts", - "line": 382, + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 121, "column": 1 } }, { - "name": "resolveRuntimeBindingEndpoint", + "name": "executeRead", "description": null, "sourceLocation": { - "filePath": "src/runtimeBindings.ts", - "line": 400, + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 138, "column": 1 } }, { - "name": "createRuntimeBindingDiagnostic", + "name": "executeCreate", "description": null, "sourceLocation": { - "filePath": "src/runtimeBindings.ts", - "line": 411, + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 156, "column": 1 } }, { - "name": "applyBindingValueTransforms", + "name": "executeUpdate", "description": null, "sourceLocation": { - "filePath": "src/runtimeBindings.ts", - "line": 428, + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 170, "column": 1 } }, { - "name": "applyRuntimeBindingDataPath", + "name": "executeDelete", "description": null, "sourceLocation": { - "filePath": "src/runtimeBindings.ts", - "line": 446, + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 197, "column": 1 } }, { - "name": "readPath", + "name": "resolveDbResult", "description": null, "sourceLocation": { - "filePath": "src/runtimeBindings.ts", - "line": 454, + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 219, "column": 1 } }, { - "name": "isArrayIndexPathPart", + "name": "resolveAdapterId", "description": null, "sourceLocation": { - "filePath": "src/runtimeBindings.ts", - "line": 466, + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 239, "column": 1 } }, { - "name": "asBindingValue", + "name": "resolvePrimaryKey", "description": null, "sourceLocation": { - "filePath": "src/runtimeBindings.ts", - "line": 470, + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 245, "column": 1 } }, { - "name": "isBindingValue", + "name": "resolveIdentity", "description": null, "sourceLocation": { - "filePath": "src/runtimeBindings.ts", - "line": 474, + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 249, "column": 1 } }, { - "name": "isRecord", + "name": "resolvePage", "description": null, "sourceLocation": { - "filePath": "src/runtimeBindings.ts", - "line": 486, + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 270, "column": 1 } }, { - "name": "createDataSources", + "name": "isOptionalPageNumber", + "description": null, + "sourceLocation": { + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 287, + "column": 1 + } + }, + { + "name": "createIdentityFilter", + "description": null, + "sourceLocation": { + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 293, + "column": 1 + } + }, + { + "name": "omitKey", + "description": null, + "sourceLocation": { + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 297, + "column": 1 + } + }, + { + "name": "isGeneratedCrudOperation", + "description": null, + "sourceLocation": { + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 305, + "column": 1 + } + }, + { + "name": "invalidPlan", + "description": null, + "sourceLocation": { + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 315, + "column": 1 + } + }, + { + "name": "failure", + "description": null, + "sourceLocation": { + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 326, + "column": 1 + } + }, + { + "name": "asRecord", + "description": null, + "sourceLocation": { + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 342, + "column": 1 + } + }, + { + "name": "toBindingValue", + "description": null, + "sourceLocation": { + "filePath": "src/runtimeDatabaseOperationExecutor.ts", + "line": 348, + "column": 1 + } + }, + { + "name": "createExternalDataSources", "description": null, "sourceLocation": { "filePath": "src/runtimeDataSourceOperations.test.ts", - "line": 10, + "line": 19, + "column": 1 + } + }, + { + "name": "createGeneratedDataSource", + "description": null, + "sourceLocation": { + "filePath": "src/runtimeDataSourceOperations.test.ts", + "line": 57, "column": 1 } }, @@ -5069,7 +4858,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeDataSourceOperations.test.ts", - "line": 46, + "line": 84, "column": 1 } }, @@ -5078,7 +4867,34 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeDataSourceOperations.test.ts", - "line": 55, + "line": 90, + "column": 1 + } + }, + { + "name": "createDatabaseFixture", + "description": null, + "sourceLocation": { + "filePath": "src/runtimeDataSourceOperations.test.ts", + "line": 108, + "column": 1 + } + }, + { + "name": "createGeneratedExecutor", + "description": null, + "sourceLocation": { + "filePath": "src/runtimeDataSourceOperations.test.ts", + "line": 148, + "column": 1 + } + }, + { + "name": "executeGeneratedOperation", + "description": null, + "sourceLocation": { + "filePath": "src/runtimeDataSourceOperations.test.ts", + "line": 154, "column": 1 } }, @@ -5087,16 +4903,43 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeDataSourceOperations.ts", - "line": 12, + "line": 14, "column": 1 } }, { - "name": "createRuntimeDataSourceOperationDiagnostic", + "name": "missingEndpoint", "description": null, "sourceLocation": { "filePath": "src/runtimeDataSourceOperations.ts", - "line": 69, + "line": 56, + "column": 1 + } + }, + { + "name": "missingOperation", + "description": null, + "sourceLocation": { + "filePath": "src/runtimeDataSourceOperations.ts", + "line": 70, + "column": 1 + } + }, + { + "name": "invalidInput", + "description": null, + "sourceLocation": { + "filePath": "src/runtimeDataSourceOperations.ts", + "line": 80, + "column": 1 + } + }, + { + "name": "failure", + "description": null, + "sourceLocation": { + "filePath": "src/runtimeDataSourceOperations.ts", + "line": 90, "column": 1 } }, @@ -5105,7 +4948,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeDataSourceOperations.ts", - "line": 85, + "line": 108, "column": 1 } }, @@ -5114,7 +4957,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeDataSourceOperations.ts", - "line": 91, + "line": 114, "column": 1 } }, @@ -5519,7 +5362,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeRepeat.test.ts", - "line": 44, + "line": 46, "column": 1 } }, @@ -5528,7 +5371,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeRepeat.test.ts", - "line": 70, + "line": 72, "column": 1 } }, @@ -5618,25 +5461,7 @@ "description": null, "sourceLocation": { "filePath": "src/RuntimeScreen.tsx", - "line": 24, - "column": 1 - } - }, - { - "name": "resolveApiLoadersFromBindings", - "description": null, - "sourceLocation": { - "filePath": "src/RuntimeScreen.tsx", - "line": 62, - "column": 1 - } - }, - { - "name": "resolveApiLoaderFromPropBinding", - "description": null, - "sourceLocation": { - "filePath": "src/RuntimeScreen.tsx", - "line": 79, + "line": 17, "column": 1 } }, @@ -5672,7 +5497,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.test.ts", - "line": 62, + "line": 64, "column": 1 } }, @@ -5681,7 +5506,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.test.ts", - "line": 69, + "line": 71, "column": 1 } }, @@ -5690,7 +5515,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.test.ts", - "line": 86, + "line": 88, "column": 1 } }, @@ -5699,7 +5524,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.test.ts", - "line": 106, + "line": 108, "column": 1 } }, @@ -5708,7 +5533,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.test.ts", - "line": 117, + "line": 119, "column": 1 } }, @@ -5717,16 +5542,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.test.ts", - "line": 149, - "column": 1 - } - }, - { - "name": "resolveScreenApiLoaders", - "description": null, - "sourceLocation": { - "filePath": "src/runtimeScreenLoaders.ts", - "line": 44, + "line": 151, "column": 1 } }, @@ -5735,7 +5551,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 52, + "line": 43, "column": 1 } }, @@ -5744,7 +5560,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 60, + "line": 49, "column": 1 } }, @@ -5753,7 +5569,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 74, + "line": 63, "column": 1 } }, @@ -5762,7 +5578,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 81, + "line": 70, "column": 1 } }, @@ -5771,7 +5587,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 93, + "line": 82, "column": 1 } }, @@ -5780,7 +5596,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 105, + "line": 94, "column": 1 } }, @@ -5789,7 +5605,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 162, + "line": 151, "column": 1 } }, @@ -5798,7 +5614,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 189, + "line": 178, "column": 1 } }, @@ -5807,7 +5623,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 212, + "line": 201, "column": 1 } }, @@ -5816,7 +5632,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 284, + "line": 273, "column": 1 } }, @@ -5825,7 +5641,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 411, + "line": 400, "column": 1 } }, @@ -5834,7 +5650,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 468, + "line": 457, "column": 1 } }, @@ -5843,7 +5659,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 483, + "line": 472, "column": 1 } }, @@ -5852,7 +5668,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 498, + "line": 487, "column": 1 } }, @@ -5861,7 +5677,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 502, + "line": 491, "column": 1 } }, @@ -5870,7 +5686,7 @@ "description": null, "sourceLocation": { "filePath": "src/runtimeScreenLoaders.ts", - "line": 506, + "line": 495, "column": 1 } }, @@ -6136,14 +5952,6 @@ "description": null, "isReadme": false }, - { - "kind": "export", - "name": "executeRuntimeApiLoaders", - "sourcePath": "src/runtimeApiLoaders.ts", - "symbolName": "executeRuntimeApiLoaders", - "description": null, - "isReadme": false - }, { "kind": "export", "name": "executeRuntimeScreenOperationLoaders", @@ -6168,14 +5976,6 @@ "description": null, "isReadme": false }, - { - "kind": "export", - "name": "materializeRuntimeApiLoaderState", - "sourcePath": "src/runtimeApiLoaders.ts", - "symbolName": "materializeRuntimeApiLoaderState", - "description": null, - "isReadme": false - }, { "kind": "export", "name": "mergeRuntimeRendererConfig", @@ -6248,14 +6048,6 @@ "description": null, "isReadme": false }, - { - "kind": "export", - "name": "resolveScreenApiLoaders", - "sourcePath": "src/runtimeScreenLoaders.ts", - "symbolName": "resolveScreenApiLoaders", - "description": null, - "isReadme": false - }, { "kind": "export", "name": "resolveScreenOperationLoaders", @@ -6320,14 +6112,6 @@ "description": null, "isReadme": false }, - { - "kind": "export", - "name": "useRuntimeApiStateLoaders", - "sourcePath": "src/runtimeApiLoaders.ts", - "symbolName": "useRuntimeApiStateLoaders", - "description": null, - "isReadme": false - }, { "kind": "export", "name": "useRuntimeRendererConfig", @@ -6378,11 +6162,6 @@ "toPath": "src/runtimeActionRegistry.ts", "sourcePath": "src/index.ts" }, - { - "fromPath": "src/index.ts", - "toPath": "src/runtimeApiLoaders.ts", - "sourcePath": "src/index.ts" - }, { "fromPath": "src/index.ts", "toPath": "src/runtimeBindings.ts", @@ -6488,26 +6267,6 @@ "toPath": "src/RuntimeRendererConfig.tsx", "sourcePath": "src/runtimeActionRegistry.ts" }, - { - "fromPath": "src/runtimeApiLoaders.test.ts", - "toPath": "src/runtimeApiLoaders.ts", - "sourcePath": "src/runtimeApiLoaders.test.ts" - }, - { - "fromPath": "src/runtimeApiLoaders.test.ts", - "toPath": "src/runtimeBindings.ts", - "sourcePath": "src/runtimeApiLoaders.test.ts" - }, - { - "fromPath": "src/runtimeApiLoaders.test.ts", - "toPath": "src/runtimeStateAdapter.ts", - "sourcePath": "src/runtimeApiLoaders.test.ts" - }, - { - "fromPath": "src/runtimeApiLoaders.ts", - "toPath": "src/runtimeStateAdapter.ts", - "sourcePath": "src/runtimeApiLoaders.ts" - }, { "fromPath": "src/runtimeBindings.test.ts", "toPath": "src/runtimeBindings.ts", @@ -6518,6 +6277,11 @@ "toPath": "src/runtimeNodeProps.ts", "sourcePath": "src/runtimeBindings.test.ts" }, + { + "fromPath": "src/runtimeDatabaseOperationExecutor.ts", + "toPath": "src/runtimeBindings.ts", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, { "fromPath": "src/runtimeDataSourceOperations.test.ts", "toPath": "src/runtimeDataSourceOperations.ts", @@ -6528,6 +6292,11 @@ "toPath": "src/runtimeBindings.ts", "sourcePath": "src/runtimeDataSourceOperations.ts" }, + { + "fromPath": "src/runtimeDataSourceOperations.ts", + "toPath": "src/runtimeDatabaseOperationExecutor.ts", + "sourcePath": "src/runtimeDataSourceOperations.ts" + }, { "fromPath": "src/runtimeDbPersist.test.ts", "toPath": "src/runtimeActionRegistry.ts", @@ -6675,22 +6444,22 @@ }, { "fromPath": "src/RuntimeScreen.tsx", - "toPath": "src/runtimeApiLoaders.ts", + "toPath": "src/RuntimeRenderer.tsx", "sourcePath": "src/RuntimeScreen.tsx" }, { "fromPath": "src/RuntimeScreen.tsx", - "toPath": "src/RuntimeRenderer.tsx", + "toPath": "src/RuntimeRendererConfig.tsx", "sourcePath": "src/RuntimeScreen.tsx" }, { "fromPath": "src/RuntimeScreen.tsx", - "toPath": "src/RuntimeRendererConfig.tsx", + "toPath": "src/runtimeScreenLoaders.ts", "sourcePath": "src/RuntimeScreen.tsx" }, { "fromPath": "src/RuntimeScreen.tsx", - "toPath": "src/runtimeScreenLoaders.ts", + "toPath": "src/runtimeStateAdapter.ts", "sourcePath": "src/RuntimeScreen.tsx" }, { @@ -7086,205 +6855,61 @@ "fromSymbol": "matchesBindingCondition", "toSymbol": "readBindingConditionSource", "callExpression": "readBindingConditionSource", - "sourcePath": "src/runtimeActionRegistry.ts" - }, - { - "fromSymbol": "readBindingConditionSource", - "toSymbol": "readPath", - "callExpression": "readPath", - "sourcePath": "src/runtimeActionRegistry.ts" - }, - { - "fromSymbol": "readBindingConditionSource", - "toSymbol": "createRuntimeBindingOperationKey", - "callExpression": "createRuntimeBindingOperationKey", - "sourcePath": "src/runtimeActionRegistry.ts" - }, - { - "fromSymbol": "createPayloadForEvent", - "toSymbol": "createBarcodeScannedPayload", - "callExpression": "createBarcodeScannedPayload", - "sourcePath": "src/runtimeActionRegistry.ts" - }, - { - "fromSymbol": "createPayloadForEvent", - "toSymbol": "asRecord", - "callExpression": "asRecord", - "sourcePath": "src/runtimeActionRegistry.ts" - }, - { - "fromSymbol": "createPayloadForEvent", - "toSymbol": "readItemId", - "callExpression": "readItemId", - "sourcePath": "src/runtimeActionRegistry.ts" - }, - { - "fromSymbol": "src/runtimeActionRegistry.ts", - "toSymbol": "isRecord", - "callExpression": "isRecord", - "sourcePath": "src/runtimeActionRegistry.ts" - }, - { - "fromSymbol": "createBarcodeScannedPayload", - "toSymbol": "isRecord", - "callExpression": "isRecord", - "sourcePath": "src/runtimeActionRegistry.ts" - }, - { - "fromSymbol": "readItemId", - "toSymbol": "isRecord", - "callExpression": "isRecord", - "sourcePath": "src/runtimeActionRegistry.ts" - }, - { - "fromSymbol": "asRecord", - "toSymbol": "isRecord", - "callExpression": "isRecord", - "sourcePath": "src/runtimeActionRegistry.ts" - }, - { - "fromSymbol": "src/runtimeApiLoaders.test.ts", - "toSymbol": "describe", - "callExpression": "describe", - "sourcePath": "src/runtimeApiLoaders.test.ts" - }, - { - "fromSymbol": "src/runtimeApiLoaders.test.ts", - "toSymbol": "it", - "callExpression": "it", - "sourcePath": "src/runtimeApiLoaders.test.ts" - }, - { - "fromSymbol": "src/runtimeApiLoaders.test.ts", - "toSymbol": "expect", - "callExpression": "expect", - "sourcePath": "src/runtimeApiLoaders.test.ts" - }, - { - "fromSymbol": "src/runtimeApiLoaders.test.ts", - "toSymbol": "materializeRuntimeApiLoaderState", - "callExpression": "materializeRuntimeApiLoaderState", - "sourcePath": "src/runtimeApiLoaders.test.ts" - }, - { - "fromSymbol": "src/runtimeApiLoaders.test.ts", - "toSymbol": "createRuntimeMemoryStateAdapter", - "callExpression": "createRuntimeMemoryStateAdapter", - "sourcePath": "src/runtimeApiLoaders.test.ts" - }, - { - "fromSymbol": "src/runtimeApiLoaders.test.ts", - "toSymbol": "executeRuntimeApiLoaders", - "callExpression": "executeRuntimeApiLoaders", - "sourcePath": "src/runtimeApiLoaders.test.ts" - }, - { - "fromSymbol": "src/runtimeApiLoaders.test.ts", - "toSymbol": "resolveRuntimeBindings", - "callExpression": "resolveRuntimeBindings", - "sourcePath": "src/runtimeApiLoaders.test.ts" - }, - { - "fromSymbol": "materializeRuntimeApiLoaderState", - "toSymbol": "getGeneratedApiCollectionResource", - "callExpression": "getGeneratedApiCollectionResource", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "materializeRuntimeApiLoaderState", - "toSymbol": "selectApiLoaderValue", - "callExpression": "selectApiLoaderValue", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "materializeRuntimeApiLoaderState", - "toSymbol": "toStateValue", - "callExpression": "toStateValue", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "materializeRuntimeApiLoaderState", - "toSymbol": "writeObjectPath", - "callExpression": "writeObjectPath", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "executeRuntimeApiLoaders", - "toSymbol": "materializeRuntimeApiLoaderState", - "callExpression": "materializeRuntimeApiLoaderState", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "executeRuntimeApiLoaders", - "toSymbol": "flattenStateEntries", - "callExpression": "flattenStateEntries", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "src/runtimeApiLoaders.ts", - "toSymbol": "createRuntimeMemoryStateAdapter", - "callExpression": "createRuntimeMemoryStateAdapter", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "src/runtimeApiLoaders.ts", - "toSymbol": "executeRuntimeApiLoaders", - "callExpression": "executeRuntimeApiLoaders", - "sourcePath": "src/runtimeApiLoaders.ts" + "sourcePath": "src/runtimeActionRegistry.ts" }, { - "fromSymbol": "src/runtimeApiLoaders.ts", - "toSymbol": "setDiagnostics", - "callExpression": "setDiagnostics", - "sourcePath": "src/runtimeApiLoaders.ts" + "fromSymbol": "readBindingConditionSource", + "toSymbol": "readPath", + "callExpression": "readPath", + "sourcePath": "src/runtimeActionRegistry.ts" }, { - "fromSymbol": "src/runtimeApiLoaders.ts", - "toSymbol": "setStateVersion", - "callExpression": "setStateVersion", - "sourcePath": "src/runtimeApiLoaders.ts" + "fromSymbol": "readBindingConditionSource", + "toSymbol": "createRuntimeBindingOperationKey", + "callExpression": "createRuntimeBindingOperationKey", + "sourcePath": "src/runtimeActionRegistry.ts" }, { - "fromSymbol": "selectApiLoaderValue", - "toSymbol": "deterministicIndex", - "callExpression": "deterministicIndex", - "sourcePath": "src/runtimeApiLoaders.ts" + "fromSymbol": "createPayloadForEvent", + "toSymbol": "createBarcodeScannedPayload", + "callExpression": "createBarcodeScannedPayload", + "sourcePath": "src/runtimeActionRegistry.ts" }, { - "fromSymbol": "selectApiLoaderValue", - "toSymbol": "normalizePrimitiveId", - "callExpression": "normalizePrimitiveId", - "sourcePath": "src/runtimeApiLoaders.ts" + "fromSymbol": "createPayloadForEvent", + "toSymbol": "asRecord", + "callExpression": "asRecord", + "sourcePath": "src/runtimeActionRegistry.ts" }, { - "fromSymbol": "src/runtimeApiLoaders.ts", - "toSymbol": "normalizePrimitiveId", - "callExpression": "normalizePrimitiveId", - "sourcePath": "src/runtimeApiLoaders.ts" + "fromSymbol": "createPayloadForEvent", + "toSymbol": "readItemId", + "callExpression": "readItemId", + "sourcePath": "src/runtimeActionRegistry.ts" }, { - "fromSymbol": "writeObjectPath", - "toSymbol": "isMutableStateRecord", - "callExpression": "isMutableStateRecord", - "sourcePath": "src/runtimeApiLoaders.ts" + "fromSymbol": "src/runtimeActionRegistry.ts", + "toSymbol": "isRecord", + "callExpression": "isRecord", + "sourcePath": "src/runtimeActionRegistry.ts" }, { - "fromSymbol": "writeObjectPath", - "toSymbol": "writeObjectPath", - "callExpression": "writeObjectPath", - "sourcePath": "src/runtimeApiLoaders.ts" + "fromSymbol": "createBarcodeScannedPayload", + "toSymbol": "isRecord", + "callExpression": "isRecord", + "sourcePath": "src/runtimeActionRegistry.ts" }, { - "fromSymbol": "toStateValue", - "toSymbol": "toStateValue", - "callExpression": "toStateValue", - "sourcePath": "src/runtimeApiLoaders.ts" + "fromSymbol": "readItemId", + "toSymbol": "isRecord", + "callExpression": "isRecord", + "sourcePath": "src/runtimeActionRegistry.ts" }, { - "fromSymbol": "toStateValue", - "toSymbol": "isUnknownRecord", - "callExpression": "isUnknownRecord", - "sourcePath": "src/runtimeApiLoaders.ts" + "fromSymbol": "asRecord", + "toSymbol": "isRecord", + "callExpression": "isRecord", + "sourcePath": "src/runtimeActionRegistry.ts" }, { "fromSymbol": "src/runtimeBindings.test.ts", @@ -7604,6 +7229,252 @@ "callExpression": "isRecord", "sourcePath": "src/runtimeBindings.ts" }, + { + "fromSymbol": "executeRuntimeDatabaseOperation", + "toSymbol": "resolveOperationPlan", + "callExpression": "resolveOperationPlan", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeRuntimeDatabaseOperation", + "toSymbol": "failure", + "callExpression": "failure", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeRuntimeDatabaseOperation", + "toSymbol": "executeList", + "callExpression": "executeList", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeRuntimeDatabaseOperation", + "toSymbol": "executeRead", + "callExpression": "executeRead", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeRuntimeDatabaseOperation", + "toSymbol": "executeCreate", + "callExpression": "executeCreate", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeRuntimeDatabaseOperation", + "toSymbol": "executeUpdate", + "callExpression": "executeUpdate", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeRuntimeDatabaseOperation", + "toSymbol": "executeDelete", + "callExpression": "executeDelete", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "resolveOperationPlan", + "toSymbol": "asRecord", + "callExpression": "asRecord", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "resolveOperationPlan", + "toSymbol": "resolveAdapterId", + "callExpression": "resolveAdapterId", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "resolveOperationPlan", + "toSymbol": "invalidPlan", + "callExpression": "invalidPlan", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "resolveOperationPlan", + "toSymbol": "isGeneratedCrudOperation", + "callExpression": "isGeneratedCrudOperation", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "resolveOperationPlan", + "toSymbol": "resolvePrimaryKey", + "callExpression": "resolvePrimaryKey", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeList", + "toSymbol": "resolvePage", + "callExpression": "resolvePage", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeList", + "toSymbol": "failure", + "callExpression": "failure", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeList", + "toSymbol": "resolveDbResult", + "callExpression": "resolveDbResult", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeRead", + "toSymbol": "resolveIdentity", + "callExpression": "resolveIdentity", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeRead", + "toSymbol": "failure", + "callExpression": "failure", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeRead", + "toSymbol": "resolveDbResult", + "callExpression": "resolveDbResult", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeCreate", + "toSymbol": "resolveDbResult", + "callExpression": "resolveDbResult", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeUpdate", + "toSymbol": "resolveIdentity", + "callExpression": "resolveIdentity", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeUpdate", + "toSymbol": "failure", + "callExpression": "failure", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeUpdate", + "toSymbol": "omitKey", + "callExpression": "omitKey", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeUpdate", + "toSymbol": "createIdentityFilter", + "callExpression": "createIdentityFilter", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeUpdate", + "toSymbol": "resolveDbResult", + "callExpression": "resolveDbResult", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeDelete", + "toSymbol": "resolveIdentity", + "callExpression": "resolveIdentity", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeDelete", + "toSymbol": "failure", + "callExpression": "failure", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeDelete", + "toSymbol": "createIdentityFilter", + "callExpression": "createIdentityFilter", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "executeDelete", + "toSymbol": "resolveDbResult", + "callExpression": "resolveDbResult", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "resolveDbResult", + "toSymbol": "failure", + "callExpression": "failure", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "resolveDbResult", + "toSymbol": "toBindingValue", + "callExpression": "toBindingValue", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "resolveDbResult", + "toSymbol": "select", + "callExpression": "select", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "resolvePage", + "toSymbol": "isOptionalPageNumber", + "callExpression": "isOptionalPageNumber", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "invalidPlan", + "toSymbol": "failure", + "callExpression": "failure", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "toBindingValue", + "toSymbol": "toBindingValue", + "callExpression": "toBindingValue", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "toBindingValue", + "toSymbol": "asRecord", + "callExpression": "asRecord", + "sourcePath": "src/runtimeDatabaseOperationExecutor.ts" + }, + { + "fromSymbol": "createGeneratedDataSource", + "toSymbol": "createGeneratedApiDataSource", + "callExpression": "createGeneratedApiDataSource", + "sourcePath": "src/runtimeDataSourceOperations.test.ts" + }, + { + "fromSymbol": "createGeneratedExecutor", + "toSymbol": "createRuntimeDataSourceOperationExecutor", + "callExpression": "createRuntimeDataSourceOperationExecutor", + "sourcePath": "src/runtimeDataSourceOperations.test.ts" + }, + { + "fromSymbol": "executeGeneratedOperation", + "toSymbol": "createGeneratedDataSource", + "callExpression": "createGeneratedDataSource", + "sourcePath": "src/runtimeDataSourceOperations.test.ts" + }, + { + "fromSymbol": "executeGeneratedOperation", + "toSymbol": "__type", + "callExpression": "createGeneratedExecutor(adapter)", + "sourcePath": "src/runtimeDataSourceOperations.test.ts" + }, + { + "fromSymbol": "executeGeneratedOperation", + "toSymbol": "createGeneratedExecutor", + "callExpression": "createGeneratedExecutor", + "sourcePath": "src/runtimeDataSourceOperations.test.ts" + }, + { + "fromSymbol": "executeGeneratedOperation", + "toSymbol": "getFixtureEndpoint", + "callExpression": "getFixtureEndpoint", + "sourcePath": "src/runtimeDataSourceOperations.test.ts" + }, { "fromSymbol": "src/runtimeDataSourceOperations.test.ts", "toSymbol": "describe", @@ -7618,14 +7489,14 @@ }, { "fromSymbol": "src/runtimeDataSourceOperations.test.ts", - "toSymbol": "createDataSources", - "callExpression": "createDataSources", + "toSymbol": "getFixtureDataSource", + "callExpression": "getFixtureDataSource", "sourcePath": "src/runtimeDataSourceOperations.test.ts" }, { "fromSymbol": "src/runtimeDataSourceOperations.test.ts", - "toSymbol": "getFixtureDataSource", - "callExpression": "getFixtureDataSource", + "toSymbol": "createExternalDataSources", + "callExpression": "createExternalDataSources", "sourcePath": "src/runtimeDataSourceOperations.test.ts" }, { @@ -7652,10 +7523,28 @@ "callExpression": "expect", "sourcePath": "src/runtimeDataSourceOperations.test.ts" }, + { + "fromSymbol": "src/runtimeDataSourceOperations.test.ts", + "toSymbol": "createDatabaseFixture", + "callExpression": "createDatabaseFixture", + "sourcePath": "src/runtimeDataSourceOperations.test.ts" + }, + { + "fromSymbol": "src/runtimeDataSourceOperations.test.ts", + "toSymbol": "executeGeneratedOperation", + "callExpression": "executeGeneratedOperation", + "sourcePath": "src/runtimeDataSourceOperations.test.ts" + }, + { + "fromSymbol": "src/runtimeDataSourceOperations.ts", + "toSymbol": "missingEndpoint", + "callExpression": "missingEndpoint", + "sourcePath": "src/runtimeDataSourceOperations.ts" + }, { "fromSymbol": "src/runtimeDataSourceOperations.ts", - "toSymbol": "createRuntimeDataSourceOperationDiagnostic", - "callExpression": "createRuntimeDataSourceOperationDiagnostic", + "toSymbol": "missingOperation", + "callExpression": "missingOperation", "sourcePath": "src/runtimeDataSourceOperations.ts" }, { @@ -7664,12 +7553,42 @@ "callExpression": "asBindingValueRecord", "sourcePath": "src/runtimeDataSourceOperations.ts" }, + { + "fromSymbol": "src/runtimeDataSourceOperations.ts", + "toSymbol": "invalidInput", + "callExpression": "invalidInput", + "sourcePath": "src/runtimeDataSourceOperations.ts" + }, + { + "fromSymbol": "src/runtimeDataSourceOperations.ts", + "toSymbol": "executeRuntimeDatabaseOperation", + "callExpression": "executeRuntimeDatabaseOperation", + "sourcePath": "src/runtimeDataSourceOperations.ts" + }, { "fromSymbol": "src/runtimeDataSourceOperations.ts", "toSymbol": "testEndpoint", "callExpression": "testEndpoint", "sourcePath": "src/runtimeDataSourceOperations.ts" }, + { + "fromSymbol": "missingEndpoint", + "toSymbol": "failure", + "callExpression": "failure", + "sourcePath": "src/runtimeDataSourceOperations.ts" + }, + { + "fromSymbol": "missingOperation", + "toSymbol": "failure", + "callExpression": "failure", + "sourcePath": "src/runtimeDataSourceOperations.ts" + }, + { + "fromSymbol": "invalidInput", + "toSymbol": "failure", + "callExpression": "failure", + "sourcePath": "src/runtimeDataSourceOperations.ts" + }, { "fromSymbol": "asBindingValueRecord", "toSymbol": "isBindingValueRecord", @@ -8428,20 +8347,8 @@ }, { "fromSymbol": "src/RuntimeScreen.tsx", - "toSymbol": "resolveScreenApiLoaders", - "callExpression": "resolveScreenApiLoaders", - "sourcePath": "src/RuntimeScreen.tsx" - }, - { - "fromSymbol": "src/RuntimeScreen.tsx", - "toSymbol": "resolveApiLoadersFromBindings", - "callExpression": "resolveApiLoadersFromBindings", - "sourcePath": "src/RuntimeScreen.tsx" - }, - { - "fromSymbol": "RuntimeScreen", - "toSymbol": "useRuntimeApiStateLoaders", - "callExpression": "useRuntimeApiStateLoaders", + "toSymbol": "createRuntimeMemoryStateAdapter", + "callExpression": "createRuntimeMemoryStateAdapter", "sourcePath": "src/RuntimeScreen.tsx" }, { @@ -8450,12 +8357,6 @@ "callExpression": "useRuntimeScreenOperationLoaders", "sourcePath": "src/RuntimeScreen.tsx" }, - { - "fromSymbol": "resolveApiLoadersFromBindings", - "toSymbol": "resolveApiLoaderFromPropBinding", - "callExpression": "resolveApiLoaderFromPropBinding", - "sourcePath": "src/RuntimeScreen.tsx" - }, { "fromSymbol": "createOperationResults", "toSymbol": "createRuntimeBindingOperationKey", @@ -9176,11 +9077,6 @@ "toType": "UiNode", "sourcePath": "src/runtimeActionRegistry.ts" }, - { - "fromSymbol": "RuntimeComponentEventDispatchArgs", - "toType": "Users", - "sourcePath": "src/runtimeActionRegistry.ts" - }, { "fromSymbol": "RuntimeEventPropWrapArgs", "toType": "BindingValue", @@ -9206,11 +9102,6 @@ "toType": "UiNode", "sourcePath": "src/runtimeActionRegistry.ts" }, - { - "fromSymbol": "RuntimeEventPropWrapArgs", - "toType": "Users", - "sourcePath": "src/runtimeActionRegistry.ts" - }, { "fromSymbol": "createComponentEventFromHandlerArgs", "toType": "ComponentEventDto", @@ -9296,81 +9187,6 @@ "toType": "RuntimeEventPropWrapArgs", "sourcePath": "src/runtimeActionRegistry.ts" }, - { - "fromSymbol": "RuntimeApiLoaderExecutionResult", - "toType": "RuntimeApiLoaderDiagnostic", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "RuntimeApiLoaderMaterializationResult", - "toType": "Readonly", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "RuntimeApiLoaderMaterializationResult", - "toType": "RuntimeApiLoaderDiagnostic", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "RuntimeApiLoaderMaterializationResult", - "toType": "StateValue", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "executeRuntimeApiLoaders", - "toType": "AppDataManifest", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "executeRuntimeApiLoaders", - "toType": "RuntimeApiLoaderDefinition", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "executeRuntimeApiLoaders", - "toType": "RuntimeApiLoaderExecutionResult", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "executeRuntimeApiLoaders", - "toType": "StateAdapter", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "materializeRuntimeApiLoaderState", - "toType": "AppDataManifest", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "materializeRuntimeApiLoaderState", - "toType": "RuntimeApiLoaderDefinition", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "materializeRuntimeApiLoaderState", - "toType": "RuntimeApiLoaderMaterializationResult", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "useRuntimeApiStateLoaders", - "toType": "AppDataManifest", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "useRuntimeApiStateLoaders", - "toType": "RuntimeApiLoaderDefinition", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "useRuntimeApiStateLoaders", - "toType": "RuntimeApiLoaderDiagnostic", - "sourcePath": "src/runtimeApiLoaders.ts" - }, - { - "fromSymbol": "useRuntimeApiStateLoaders", - "toType": "StateAdapter", - "sourcePath": "src/runtimeApiLoaders.ts" - }, { "fromSymbol": "RuntimeBindingOperationExecutionArgs", "toType": "BindingOperationRef", @@ -9436,11 +9252,6 @@ "toType": "UiNode", "sourcePath": "src/runtimeBindings.ts" }, - { - "fromSymbol": "RuntimeBindingResolutionArgs", - "toType": "Users", - "sourcePath": "src/runtimeBindings.ts" - }, { "fromSymbol": "RuntimeBindingResolutionContext", "toType": "BindingValue", @@ -9476,11 +9287,6 @@ "toType": "StateAdapter", "sourcePath": "src/runtimeBindings.ts" }, - { - "fromSymbol": "RuntimeBindingResolutionContext", - "toType": "Users", - "sourcePath": "src/runtimeBindings.ts" - }, { "fromSymbol": "RuntimeBindingResolutionResult", "toType": "DataSourceDiagnostic", @@ -9586,6 +9392,11 @@ "toType": "Readonly", "sourcePath": "src/runtimeBindings.ts" }, + { + "fromSymbol": "RuntimeDataSourceOperationExecutorOptions", + "toType": "DbAdapter", + "sourcePath": "src/runtimeDataSourceOperations.ts" + }, { "fromSymbol": "RuntimeDataSourceOperationExecutorOptions", "toType": "EndpointTestCredentialResolver", @@ -9596,6 +9407,11 @@ "toType": "EndpointTestFetch", "sourcePath": "src/runtimeDataSourceOperations.ts" }, + { + "fromSymbol": "RuntimeDataSourceOperationExecutorOptions", + "toType": "Readonly", + "sourcePath": "src/runtimeDataSourceOperations.ts" + }, { "fromSymbol": "createRuntimeDataSourceOperationExecutor", "toType": "RuntimeBindingOperationExecutor", @@ -9901,11 +9717,6 @@ "toType": "UiNode", "sourcePath": "src/RuntimeRenderer.tsx" }, - { - "fromSymbol": "RuntimeRendererProps", - "toType": "Users", - "sourcePath": "src/RuntimeRenderer.tsx" - }, { "fromSymbol": "RuntimeRenderer", "toType": "React", @@ -10046,11 +9857,6 @@ "toType": "StateAdapter", "sourcePath": "src/RuntimeRendererConfig.tsx" }, - { - "fromSymbol": "RuntimeRendererConfig", - "toType": "Users", - "sourcePath": "src/RuntimeRendererConfig.tsx" - }, { "fromSymbol": "RuntimeRendererConfigProvider", "toType": "React", @@ -10221,16 +10027,6 @@ "toType": "ScreenSpec", "sourcePath": "src/runtimeScreenLoaders.ts" }, - { - "fromSymbol": "resolveScreenApiLoaders", - "toType": "ApiScreenDataLoaderDefinition", - "sourcePath": "src/runtimeScreenLoaders.ts" - }, - { - "fromSymbol": "resolveScreenApiLoaders", - "toType": "ScreenSpec", - "sourcePath": "src/runtimeScreenLoaders.ts" - }, { "fromSymbol": "resolveScreenOperationLoaders", "toType": "OperationScreenDataLoaderDefinition", @@ -10356,7 +10152,7 @@ { "fromComponent": "RuntimeScreen", "toComponent": "RuntimeRenderer", - "jsxElement": "", + "jsxElement": "", "sourcePath": "src/RuntimeScreen.tsx" } ] diff --git a/src/runtimeActionRegistry.test.ts b/src/runtimeActionRegistry.test.ts index 19f1b61..8a37a72 100644 --- a/src/runtimeActionRegistry.test.ts +++ b/src/runtimeActionRegistry.test.ts @@ -26,7 +26,9 @@ function createDataSources(): DataSourceRegistry { return { cms: { id: 'cms', - kind: 'rest', + kind: 'api', + origin: 'external', + protocol: 'rest', baseUrl: 'https://cms.example.com', endpoints: { posts: { diff --git a/src/runtimeApiLoaders.test.ts b/src/runtimeApiLoaders.test.ts deleted file mode 100644 index 243babe..0000000 --- a/src/runtimeApiLoaders.test.ts +++ /dev/null @@ -1,138 +0,0 @@ -import type { AppDataManifest, ComponentDataBindingRegistry, UiNode } from '@ankhorage/contracts'; -import { describe, expect, it } from 'bun:test'; - -import { - executeRuntimeApiLoaders, - materializeRuntimeApiLoaderState, - type RuntimeApiLoaderDefinition, -} from './runtimeApiLoaders'; -import { resolveRuntimeBindings } from './runtimeBindings'; -import { createRuntimeMemoryStateAdapter } from './runtimeStateAdapter'; - -const dataManifest: AppDataManifest = { - apis: { - poker_situations: { - id: 'poker_situations', - kind: 'generated', - label: 'Poker situations', - basePath: '/api/poker-situations', - preset: 'crud', - resource: { - kind: 'collection', - collection: { - name: 'poker_situations', - primaryKey: 'id', - fields: [ - { name: 'id', type: 'uuid', required: true, unique: true }, - { name: 'title', type: 'text', required: true }, - { name: 'description', type: 'text', required: true }, - ], - }, - seed: [ - { - id: '11111111-1111-4111-8111-111111111111', - title: 'Button faces a raise', - description: 'Choose the best action with position and stack depth in mind.', - }, - ], - }, - endpoints: [ - { id: 'poker_situations.list', method: 'GET', path: '/', intent: 'list' }, - { id: 'poker_situations.read', method: 'GET', path: '/{id}', intent: 'read' }, - ], - }, - }, -}; - -const currentTaskLoader: RuntimeApiLoaderDefinition = { - kind: 'api', - apiId: 'poker_situations', - mode: 'one', - targetPath: 'apis.poker_situations.current', -}; - -const titleNode: UiNode = { - id: 'title', - type: 'Text', - props: { - text: 'Fallback', - }, -}; - -const titleBinding: ComponentDataBindingRegistry = { - title: { - componentId: 'title', - props: { - text: { - source: { - kind: 'state', - path: 'apis.poker_situations.current.title', - }, - }, - }, - }, -}; - -describe('runtime API loaders', () => { - it('materializes one API seed record into nested state', () => { - expect( - materializeRuntimeApiLoaderState({ - data: dataManifest, - loaders: [currentTaskLoader], - }), - ).toEqual({ - diagnostics: [], - state: { - apis: { - poker_situations: { - current: { - id: '11111111-1111-4111-8111-111111111111', - title: 'Button faces a raise', - description: 'Choose the best action with position and stack depth in mind.', - }, - }, - }, - }, - }); - }); - - it('writes API loader output through a StateAdapter', () => { - const stateAdapter = createRuntimeMemoryStateAdapter(); - - expect( - executeRuntimeApiLoaders({ - data: dataManifest, - loaders: [currentTaskLoader], - stateAdapter, - }), - ).toEqual({ diagnostics: [] }); - - expect(stateAdapter.get('apis.poker_situations.current.title')).toEqual({ - ok: true, - data: 'Button faces a raise', - }); - }); - - it('allows state bindings to read API loader output', () => { - const stateAdapter = createRuntimeMemoryStateAdapter(); - executeRuntimeApiLoaders({ - data: dataManifest, - loaders: [currentTaskLoader], - stateAdapter, - }); - - expect( - resolveRuntimeBindings({ - dataBindings: titleBinding, - node: titleNode, - props: titleNode.props ?? {}, - stateAdapter, - }), - ).toEqual({ - diagnostics: [], - props: { - text: 'Button faces a raise', - }, - }); - }); -}); diff --git a/src/runtimeApiLoaders.ts b/src/runtimeApiLoaders.ts deleted file mode 100644 index 9f5f777..0000000 --- a/src/runtimeApiLoaders.ts +++ /dev/null @@ -1,309 +0,0 @@ -import type { - ApiScreenDataLoaderDefinition, - AppApiCollectionResourceDefinition, - AppApiDefinition, - AppDataManifest, - AppGeneratedApiDefinition, - StateAdapter, - StateResult, - StateValue, -} from '@ankhorage/contracts'; -import React from 'react'; - -import { createRuntimeMemoryStateAdapter } from './runtimeStateAdapter'; - -export type RuntimeApiLoaderMode = 'byId' | 'list' | 'one' | 'random'; - -export type RuntimeApiLoaderDefinition = ApiScreenDataLoaderDefinition; - -export interface RuntimeApiLoaderDiagnostic { - readonly code: - | 'invalid-record' - | 'missing-api' - | 'missing-target-path' - | 'state-set-failed' - | 'unsupported-loader'; - readonly message: string; - readonly apiId?: string; - readonly targetPath?: string; -} - -export interface RuntimeApiLoaderExecutionResult { - readonly diagnostics: readonly RuntimeApiLoaderDiagnostic[]; -} - -export interface RuntimeApiLoaderMaterializationResult { - readonly state: Readonly>; - readonly diagnostics: readonly RuntimeApiLoaderDiagnostic[]; -} - -export function materializeRuntimeApiLoaderState(args: { - readonly data?: AppDataManifest; - readonly loaders: readonly RuntimeApiLoaderDefinition[]; -}): RuntimeApiLoaderMaterializationResult { - const state: Record = {}; - const diagnostics: RuntimeApiLoaderDiagnostic[] = []; - - for (const loader of args.loaders) { - const targetPath = loader.targetPath.trim(); - if (targetPath.length === 0) { - diagnostics.push({ - code: 'missing-target-path', - apiId: loader.apiId, - message: `API loader for ${loader.apiId} must define a target path.`, - }); - continue; - } - - const api = args.data?.apis?.[loader.apiId]; - const resource = getGeneratedApiCollectionResource(api); - if (api?.kind !== 'generated' || resource === null) { - diagnostics.push({ - code: 'missing-api', - apiId: loader.apiId, - targetPath, - message: `Generated API ${loader.apiId} could not be found.`, - }); - continue; - } - - const selectedValue = selectApiLoaderValue({ api, resource, loader, diagnostics, targetPath }); - if (selectedValue === undefined) { - continue; - } - - const stateValue = toStateValue(selectedValue); - if (stateValue === undefined) { - diagnostics.push({ - code: 'invalid-record', - apiId: loader.apiId, - targetPath, - message: `Generated API ${loader.apiId} produced a value that cannot be represented as runtime state.`, - }); - continue; - } - - const setResult = writeObjectPath(state, targetPath, stateValue); - if (!setResult.ok) { - diagnostics.push({ - code: 'state-set-failed', - apiId: loader.apiId, - targetPath, - message: setResult.error.message, - }); - } - } - - return { state, diagnostics }; -} - -export function executeRuntimeApiLoaders(args: { - readonly data?: AppDataManifest; - readonly loaders: readonly RuntimeApiLoaderDefinition[]; - readonly stateAdapter: StateAdapter; -}): RuntimeApiLoaderExecutionResult { - const materialized = materializeRuntimeApiLoaderState({ - data: args.data, - loaders: args.loaders, - }); - const diagnostics: RuntimeApiLoaderDiagnostic[] = [...materialized.diagnostics]; - - for (const [targetPath, value] of flattenStateEntries(materialized.state)) { - const result = args.stateAdapter.set(targetPath, value); - if (!result.ok) { - diagnostics.push({ - code: 'state-set-failed', - targetPath, - message: result.error.message, - }); - } - } - - return { diagnostics }; -} - -export function useRuntimeApiStateLoaders(args: { - readonly data?: AppDataManifest; - readonly loaders?: readonly RuntimeApiLoaderDefinition[]; - readonly stateAdapter?: StateAdapter; -}): { - readonly diagnostics: readonly RuntimeApiLoaderDiagnostic[]; - readonly stateAdapter: StateAdapter; - readonly stateVersion: number; -} { - const fallbackStateAdapter = React.useMemo(() => createRuntimeMemoryStateAdapter(), []); - const stateAdapter = args.stateAdapter ?? fallbackStateAdapter; - const loaders = args.loaders ?? []; - const [stateVersion, setStateVersion] = React.useState(0); - const [diagnostics, setDiagnostics] = React.useState([]); - - React.useEffect(() => { - const result = executeRuntimeApiLoaders({ - data: args.data, - loaders, - stateAdapter, - }); - setDiagnostics(result.diagnostics); - setStateVersion((current) => current + 1); - }, [args.data, loaders, stateAdapter]); - - return { - diagnostics, - stateAdapter, - stateVersion, - }; -} - -function getGeneratedApiCollectionResource( - api: AppApiDefinition | undefined, -): AppApiCollectionResourceDefinition | null { - if (api?.kind !== 'generated' || api.resource?.kind !== 'collection') { - return null; - } - - return api.resource; -} - -function selectApiLoaderValue(args: { - readonly api: AppGeneratedApiDefinition; - readonly resource: AppApiCollectionResourceDefinition; - readonly loader: RuntimeApiLoaderDefinition; - readonly diagnostics: RuntimeApiLoaderDiagnostic[]; - readonly targetPath: string; -}): unknown { - const seed = args.resource.seed ?? []; - const primaryKey = args.resource.collection.primaryKey ?? 'id'; - - switch (args.loader.mode) { - case 'list': - return seed; - case 'one': - return seed[0]; - case 'random': { - const index = deterministicIndex(args.api.id, seed.length); - return index === undefined ? undefined : seed[index]; - } - case 'byId': { - const loaderId = normalizePrimitiveId(args.loader.id); - if (loaderId === undefined) return undefined; - - return seed.find((record) => { - return normalizePrimitiveId(record[primaryKey]) === loaderId; - }); - } - default: - args.diagnostics.push({ - code: 'unsupported-loader', - apiId: args.loader.apiId, - targetPath: args.targetPath, - message: `API loader mode ${String(args.loader.mode)} is not supported.`, - }); - return undefined; - } -} - -function normalizePrimitiveId(value: unknown): string | undefined { - if (typeof value === 'string') return value; - if (typeof value === 'number') return Number.isFinite(value) ? value.toString() : undefined; - if (typeof value === 'boolean') return value ? 'true' : 'false'; - return undefined; -} - -function deterministicIndex(apiId: string, length: number): number | undefined { - if (length === 0) return undefined; - - let hash = 0; - for (const char of apiId) { - hash = (hash * 31 + char.charCodeAt(0)) % length; - } - - return hash; -} - -function writeObjectPath( - target: Record, - path: string, - value: StateValue, -): StateResult { - const parts = path - .split('.') - .map((part) => part.trim()) - .filter(Boolean); - const [head, ...tail] = parts; - - if (head === undefined) { - return { - ok: false, - error: { - code: 'invalid_path', - message: 'State target path must contain at least one segment.', - }, - }; - } - - if (tail.length === 0) { - target[head] = value; - return { ok: true }; - } - - const existing = target[head]; - const child = existing === undefined ? {} : existing; - if (!isMutableStateRecord(child)) { - return { - ok: false, - error: { - code: 'path_conflict', - message: `Cannot set nested state below non-object path segment "${head}".`, - }, - }; - } - - target[head] = child; - return writeObjectPath(child, tail.join('.'), value); -} - -function flattenStateEntries( - source: Readonly>, - prefix = '', -): readonly (readonly [string, StateValue])[] { - return Object.entries(source).flatMap(([key, value]) => { - const path = prefix.length > 0 ? `${prefix}.${key}` : key; - return [[path, value]] as const; - }); -} - -function toStateValue(value: unknown): StateValue | undefined { - if (value === null) return null; - if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') { - return value; - } - - if (Array.isArray(value)) { - const items: StateValue[] = []; - for (const item of value) { - const stateItem = toStateValue(item); - if (stateItem === undefined) return undefined; - items.push(stateItem); - } - return items; - } - - if (!isUnknownRecord(value)) return undefined; - - const record: Record = {}; - for (const [key, entry] of Object.entries(value)) { - const stateEntry = toStateValue(entry); - if (stateEntry === undefined) return undefined; - record[key] = stateEntry; - } - - return record; -} - -function isUnknownRecord(value: unknown): value is Record { - return typeof value === 'object' && value != null && !Array.isArray(value); -} - -function isMutableStateRecord(value: StateValue): value is Record { - return typeof value === 'object' && value != null && !Array.isArray(value); -} diff --git a/src/runtimeBindings.test.ts b/src/runtimeBindings.test.ts index 865f313..479a8b2 100644 --- a/src/runtimeBindings.test.ts +++ b/src/runtimeBindings.test.ts @@ -58,7 +58,9 @@ function createDataSources(): DataSourceRegistry { return { cms: { id: 'cms', - kind: 'rest', + kind: 'api', + origin: 'external', + protocol: 'rest', baseUrl: 'https://cms.example.com', endpoints: { posts: { diff --git a/src/runtimeDataSourceOperations.test.ts b/src/runtimeDataSourceOperations.test.ts index e658caa..47d3106 100644 --- a/src/runtimeDataSourceOperations.test.ts +++ b/src/runtimeDataSourceOperations.test.ts @@ -87,17 +87,21 @@ function getFixtureDataSource(registry: DataSourceRegistry): DataSourceConfig { return dataSource; } -function getFixtureEndpoint(dataSource: DataSourceConfig, endpointId = 'opening'): DataEndpointConfig { +function getFixtureEndpoint( + dataSource: DataSourceConfig, + endpointId = 'opening', +): DataEndpointConfig { const endpoint = dataSource.endpoints[endpointId]; - if (endpoint === undefined) throw new Error(`Expected '${endpointId}' endpoint fixture to exist.`); + if (endpoint === undefined) + throw new Error(`Expected '${endpointId}' endpoint fixture to exist.`); return endpoint; } interface DatabaseCalls { readonly select: DbSelectInput[]; readonly findById: DbFindByIdInput[]; - readonly insert: DbInsertInput[]; - readonly update: DbUpdateInput[]; + readonly insert: DbInsertInput[]; + readonly update: DbUpdateInput[]; readonly delete: DbDeleteInput[]; } @@ -118,19 +122,22 @@ function createDatabaseFixture(): { readonly adapter: DbAdapter; readonly calls: insert( input: DbInsertInput, ): Promise> { - calls.insert.push(input as DbInsertInput); - const values = Array.isArray(input.values) ? input.values[0] : input.values; - return Promise.resolve({ ok: true, data: [{ id: 'post-2', ...values } as TRecord] }); + calls.insert.push(input); + return Promise.resolve({ + ok: true, + data: [{ id: 'post-2', title: 'Created' } as TRecord], + }); }, update( input: DbUpdateInput, ): Promise> { - calls.update.push(input as DbUpdateInput); - return Promise.resolve({ ok: true, data: [{ id: 'post-1', ...input.values } as TRecord] }); + calls.update.push(input); + return Promise.resolve({ + ok: true, + data: [{ id: 'post-1', title: 'Updated' } as TRecord], + }); }, - delete( - input: DbDeleteInput, - ): Promise> { + delete(input: DbDeleteInput): Promise> { calls.delete.push(input); return Promise.resolve({ ok: true, data: [{ id: 'post-1', title: 'First' } as TRecord] }); }, @@ -192,7 +199,9 @@ describe('createRuntimeDataSourceOperationExecutor', () => { it('routes generated list/read operations through the referenced database adapter', async () => { const { adapter, calls } = createDatabaseFixture(); - expect(await executeGeneratedOperation('posts.list', { limit: 10, offset: 2 }, adapter)).toEqual({ + expect( + await executeGeneratedOperation('posts.list', { limit: 10, offset: 2 }, adapter), + ).toEqual({ ok: true, data: [{ id: 'post-1', title: 'First' }], diagnostics: [], diff --git a/src/runtimeDataSourceOperations.ts b/src/runtimeDataSourceOperations.ts index 1a03b7d..d53673a 100644 --- a/src/runtimeDataSourceOperations.ts +++ b/src/runtimeDataSourceOperations.ts @@ -53,7 +53,11 @@ export function createRuntimeDataSourceOperationExecutor( }; } -function missingEndpoint(dataSourceId: string, endpointId: string | undefined, operationId: string) { +function missingEndpoint( + dataSourceId: string, + endpointId: string | undefined, + operationId: string, +) { return failure( dataSourceId, endpointId, diff --git a/src/runtimeDatabaseOperationExecutor.ts b/src/runtimeDatabaseOperationExecutor.ts index a76af79..da1e466 100644 --- a/src/runtimeDatabaseOperationExecutor.ts +++ b/src/runtimeDatabaseOperationExecutor.ts @@ -21,7 +21,11 @@ export async function executeRuntimeDatabaseOperation(args: { const adapter = args.databaseAdapters?.[plan.adapterId]; if (adapter === undefined) { - return failure(args, 'missing-adapter', `Database adapter '${plan.adapterId}' is not available.`); + return failure( + args, + 'missing-adapter', + `Database adapter '${plan.adapterId}' is not available.`, + ); } const input = args.input ?? {}; @@ -78,11 +82,7 @@ function resolveOperationPlan( ); } if (typeof collection !== 'string' || collection.trim().length === 0) { - return invalidPlan( - dataSource, - operation, - 'Database operation metadata requires a collection.', - ); + return invalidPlan(dataSource, operation, 'Database operation metadata requires a collection.'); } if (!isGeneratedCrudOperation(operationKind)) { return invalidPlan( @@ -238,7 +238,7 @@ function resolveDbResult( function resolveAdapterId(dataSource: DataSourceConfig): string | undefined { if (dataSource.kind === 'database') return dataSource.adapter.id; - if (dataSource.kind === 'api' && dataSource.origin === 'generated') return dataSource.adapter.id; + if (dataSource.origin === 'generated') return dataSource.adapter.id; return undefined; } @@ -267,16 +267,13 @@ function resolveIdentity( }; } -function resolvePage( - input: Readonly>, -): +function resolvePage(input: Readonly>): | { readonly ok: true; readonly value: { readonly limit?: number; readonly offset?: number } | undefined; } | { readonly ok: false; readonly message: string } { - const limit = input.limit; - const offset = input.offset; + const { limit, offset } = input; if (!isOptionalPageNumber(limit) || !isOptionalPageNumber(offset)) { return { ok: false, @@ -288,17 +285,16 @@ function resolvePage( } function isOptionalPageNumber(value: BindingValue | undefined): value is number | undefined { - return value === undefined || (typeof value === 'number' && Number.isInteger(value) && value >= 0); + return ( + value === undefined || (typeof value === 'number' && Number.isInteger(value) && value >= 0) + ); } function createIdentityFilter(field: string | undefined, value: string | number): DbFilter { return { field: field ?? 'id', operator: 'eq', value }; } -function omitKey( - input: Readonly>, - key: string | undefined, -): DbRecord { +function omitKey(input: Readonly>, key: string | undefined): DbRecord { const values: DbRecord = {}; for (const [field, value] of Object.entries(input)) { if (field !== key) values[field] = value; diff --git a/src/runtimeRepeat.test.ts b/src/runtimeRepeat.test.ts index 310498f..e43e2e3 100644 --- a/src/runtimeRepeat.test.ts +++ b/src/runtimeRepeat.test.ts @@ -19,7 +19,9 @@ function createDataSources(): DataSourceRegistry { return { 'nutrition-api': { id: 'nutrition-api', - kind: 'rest', + kind: 'api', + origin: 'external', + protocol: 'rest', baseUrl: 'https://nutrition.example.com', endpoints: { products: { diff --git a/src/runtimeScreenLoaders.test.ts b/src/runtimeScreenLoaders.test.ts index ad0eae6..c96a835 100644 --- a/src/runtimeScreenLoaders.test.ts +++ b/src/runtimeScreenLoaders.test.ts @@ -37,7 +37,9 @@ function createDataSources(): DataSourceRegistry { return { 'nutrition-api': { id: 'nutrition-api', - kind: 'rest', + kind: 'api', + origin: 'external', + protocol: 'rest', baseUrl: 'https://nutrition.example.com', endpoints: { products: { diff --git a/src/runtimeScreenLoaders.ts b/src/runtimeScreenLoaders.ts index de8ba06..1ccfd65 100644 --- a/src/runtimeScreenLoaders.ts +++ b/src/runtimeScreenLoaders.ts @@ -1,5 +1,4 @@ import type { - ApiScreenDataLoaderDefinition, BindingValue, DataSourceDiagnostic, OperationScreenDataLoaderDefinition, @@ -41,20 +40,10 @@ const EMPTY_RUNTIME_SCREEN_OPERATION_RESULTS = Object.freeze( {}, ) as RuntimeBindingOperationResultCache; -export function resolveScreenApiLoaders( - screen: ScreenSpec, -): readonly ApiScreenDataLoaderDefinition[] { - return (screen.dataLoaders ?? []).filter( - (loader): loader is ApiScreenDataLoaderDefinition => loader.kind === 'api', - ); -} - export function resolveScreenOperationLoaders( screen: ScreenSpec, ): readonly OperationScreenDataLoaderDefinition[] { - return (screen.dataLoaders ?? []).filter( - (loader): loader is OperationScreenDataLoaderDefinition => loader.kind === 'operation', - ); + return screen.dataLoaders ?? []; } export function createRuntimeScreenLoaderRequestKey(args: {