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
@@ -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>
-
-
-
- | Parameter |
- Type |
- Required |
- Description |
-
-
-
-
- args |
- RuntimeEventPropWrapArgs |
- yes |
- |
-
-
-
-
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
-
-
-
- | Parameter |
- Type |
- Required |
- Description |
-
-
-
-
- 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
-
-
-
- | Parameter |
- Type |
- Required |
- Description |
-
-
-
-
- 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
-
-
-
-
- | Member |
- 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
- type • src/runtimeApiLoaders.ts:31:1
-
- Export paths: src/index.ts
-
-
Related symbols:
-
- - RuntimeApiLoaderDiagnostic
-
-
-
-
-
-
- | Member |
- Kind |
- Type |
- Required |
- Description |
-
-
-
-
- diagnostics |
- property |
- readonly RuntimeApiLoaderDiagnostic[] |
- yes |
- |
-
-
-
-
-
- RuntimeApiLoaderMaterializationResult
- type • src/runtimeApiLoaders.ts:35:1
-
- Export paths: src/index.ts
-
-
Related symbols:
-
- - RuntimeApiLoaderDiagnostic
-
-
-
-
-
-
- | Member |
- Kind |
- Type |
- Required |
- Description |
-
-
-
-
- diagnostics |
- property |
- readonly RuntimeApiLoaderDiagnostic[] |
- yes |
- |
-
-
- state |
- property |
- Readonly<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[]
-
-
-
- | Parameter |
- Type |
- Required |
- Description |
-
-
-
-
- screen |
- ScreenSpec |
- yes |
- |
-
-
-
-
- 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
-
-
- src/runtimeApiLoaders.ts
-
- materializeRuntimeApiLoaderState
- src/runtimeApiLoaders.ts:40:1
- No description available.
-
-
- executeRuntimeApiLoaders
- src/runtimeApiLoaders.ts:100:1
- No description available.
-
-
- useRuntimeApiStateLoaders
- src/runtimeApiLoaders.ts:125:1
- No description available.
-
-
- getGeneratedApiCollectionResource
- src/runtimeApiLoaders.ts:157:1
- No description available.
-
-
- selectApiLoaderValue
- src/runtimeApiLoaders.ts:167:1
- No description available.
-
-
- normalizePrimitiveId
- src/runtimeApiLoaders.ts:205:1
- No description available.
-
-
- deterministicIndex
- src/runtimeApiLoaders.ts:212:1
- No description available.
-
-
- writeObjectPath
- src/runtimeApiLoaders.ts:223:1
- No description available.
-
-
- flattenStateEntries
- src/runtimeApiLoaders.ts:265:1
- No description available.
-
-
- toStateValue
- src/runtimeApiLoaders.ts:275:1
- No description available.
-
-
- isUnknownRecord
- src/runtimeApiLoaders.ts:303:1
- No description available.
-
-
- isMutableStateRecord
- src/runtimeApiLoaders.ts:307:1
- No description available.
-
-
-
+
+
+ src/runtimeDatabaseOperationExecutor.ts
+
+ executeRuntimeDatabaseOperation
+ src/runtimeDatabaseOperationExecutor.ts:13:1
+ No description available.
+
+
+ resolveOperationPlan
+ src/runtimeDatabaseOperationExecutor.ts:67:1
+ No description available.
+
+
+ executeList
+ src/runtimeDatabaseOperationExecutor.ts:121:1
+ No description available.
+
+
+ executeRead
+ src/runtimeDatabaseOperationExecutor.ts:138:1
+ No description available.
+
+
+ executeCreate
+ src/runtimeDatabaseOperationExecutor.ts:156:1
+ No description available.
+
+
+ executeUpdate
+ src/runtimeDatabaseOperationExecutor.ts:170:1
+ No description available.
+
+
+ executeDelete
+ src/runtimeDatabaseOperationExecutor.ts:197:1
+ No description available.
+
+
+ resolveDbResult
+ src/runtimeDatabaseOperationExecutor.ts:219:1
+ No description available.
+
+
+ resolveAdapterId
+ src/runtimeDatabaseOperationExecutor.ts:239:1
+ No description available.
+
+
+ resolvePrimaryKey
+ src/runtimeDatabaseOperationExecutor.ts:245:1
+ No description available.
+
+
+ resolveIdentity
+ src/runtimeDatabaseOperationExecutor.ts:249:1
+ No description available.
+
+
+ resolvePage
+ src/runtimeDatabaseOperationExecutor.ts:270:1
+ No description available.
+
+
+ isOptionalPageNumber
+ src/runtimeDatabaseOperationExecutor.ts:287:1
+ No description available.
+
+
+ createIdentityFilter
+ src/runtimeDatabaseOperationExecutor.ts:293:1
+ No description available.
+
+
+ omitKey
+ src/runtimeDatabaseOperationExecutor.ts:297:1
+ No description available.
+
+
+ isGeneratedCrudOperation
+ src/runtimeDatabaseOperationExecutor.ts:305:1
+ No description available.
+
+
+ invalidPlan
+ src/runtimeDatabaseOperationExecutor.ts:315:1
+ No description available.
+
+
+ failure
+ src/runtimeDatabaseOperationExecutor.ts:326:1
+ No description available.
+
+
+ asRecord
+ src/runtimeDatabaseOperationExecutor.ts:342:1
+ No description available.
+
+
+ toBindingValue
+ src/runtimeDatabaseOperationExecutor.ts:348:1
+ No description available.
+
+
+
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: {