@ankhorage/runtime 2.1.0 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/dist/ManifestContext.d.ts.map +1 -1
  4. package/dist/ManifestContext.js +6 -6
  5. package/dist/ManifestContext.js.map +1 -1
  6. package/dist/RuntimeRenderer.d.ts.map +1 -1
  7. package/dist/RuntimeRenderer.js +22 -38
  8. package/dist/RuntimeRenderer.js.map +1 -1
  9. package/dist/RuntimeRendererConfig.d.ts.map +1 -1
  10. package/dist/RuntimeRendererConfig.js +4 -6
  11. package/dist/RuntimeRendererConfig.js.map +1 -1
  12. package/dist/RuntimeScreen.js +1 -1
  13. package/dist/RuntimeScreen.js.map +1 -1
  14. package/dist/runtimeMediaCache.d.ts.map +1 -1
  15. package/dist/runtimeMediaCache.js +3 -5
  16. package/dist/runtimeMediaCache.js.map +1 -1
  17. package/dist/runtimeNodeProps.d.ts +6 -1
  18. package/dist/runtimeNodeProps.d.ts.map +1 -1
  19. package/dist/runtimeNodeProps.js +6 -5
  20. package/dist/runtimeNodeProps.js.map +1 -1
  21. package/dist/runtimeScreenLoaders.d.ts.map +1 -1
  22. package/dist/runtimeScreenLoaders.js +24 -28
  23. package/dist/runtimeScreenLoaders.js.map +1 -1
  24. package/dist/useRuntimeMediaProps.d.ts.map +1 -1
  25. package/dist/useRuntimeMediaProps.js +11 -27
  26. package/dist/useRuntimeMediaProps.js.map +1 -1
  27. package/package.json +21 -9
  28. package/paradox/badges/npm.svg +3 -3
  29. package/paradox/components.md +1 -1
  30. package/paradox/diagrams/architecture-overview.mmd +14 -0
  31. package/paradox/diagrams/export-graph.mmd +5 -0
  32. package/paradox/diagrams/module-relationships.mmd +9 -0
  33. package/paradox/diagrams/sequences/runtime-renderer-config-provider.mmd +3 -3
  34. package/paradox/diagrams/sequences/runtime-screen.mmd +3 -3
  35. package/paradox/diagrams/sequences/use-manifest-context.mmd +3 -3
  36. package/paradox/diagrams/sequences/use-manifest.mmd +3 -3
  37. package/paradox/diagrams/sequences/use-optional-manifest-context.mmd +3 -3
  38. package/paradox/diagrams/sequences/use-runtime-renderer-config.mmd +3 -3
  39. package/paradox/exports.json +12 -12
  40. package/paradox/exports.md +12 -12
  41. package/paradox/index.html +250 -89
  42. package/paradox/paradox.json +376 -108
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @ankhorage/runtime
2
2
 
3
+ ## 2.2.1
4
+
5
+ ### Patch Changes
6
+
7
+ - c3567e9: Support the React Native 0.86 patch line as a peer while validating the package against the canonical React Native 0.86.3 application baseline.
8
+
9
+ ## 2.2.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 47c80a1: Move Runtime to the React 19.2.3, React Native 0.86.2, React Native Web 0.21, and TypeScript 6 consumer baseline while preserving its Expo-unaware renderer, event, binding, and package contracts.
14
+
3
15
  ## 2.1.0
4
16
 
5
17
  ### Minor Changes
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  # @ankhorage/runtime
5
5
 
6
- ![license: MIT](./paradox/badges/license.svg) ![npm: v1.1.0](./paradox/badges/npm.svg) ![runtime: bun](./paradox/badges/runtime.svg) ![typescript: strict](./paradox/badges/typescript.svg) ![eslint: checked](./paradox/badges/eslint.svg) ![prettier: checked](./paradox/badges/prettier.svg) ![build: checked](./paradox/badges/build.svg) ![tests: checked](./paradox/badges/tests.svg) ![docs: paradox](./paradox/badges/docs.svg)
6
+ ![license: MIT](./paradox/badges/license.svg) ![npm: v2.2.0](./paradox/badges/npm.svg) ![runtime: bun](./paradox/badges/runtime.svg) ![typescript: strict](./paradox/badges/typescript.svg) ![eslint: checked](./paradox/badges/eslint.svg) ![prettier: checked](./paradox/badges/prettier.svg) ![build: checked](./paradox/badges/build.svg) ![tests: checked](./paradox/badges/tests.svg) ![docs: paradox](./paradox/badges/docs.svg)
7
7
 
8
8
  Platform-neutral runtime contracts and helpers for Ankhorage generated apps.
9
9
 
@@ -1 +1 @@
1
- {"version":3,"file":"ManifestContext.d.ts","sourceRoot":"","sources":["../src/ManifestContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAoC,MAAM,OAAO,CAAC;AAEzD,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,eAAe,4CAAmD,CAAC;AAEhF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,GAAG;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBAQ3F;AAED,wBAAgB,WAAW,gBAM1B;AAED,wBAAgB,kBAAkB,yBAMjC;AAED,wBAAgB,0BAA0B,gCAEzC"}
1
+ {"version":3,"file":"ManifestContext.d.ts","sourceRoot":"","sources":["../src/ManifestContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAA6B,MAAM,OAAO,CAAC;AAElD,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,eAAe,4CAAmD,CAAC;AAEhF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,GAAG;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBAQ3F;AAED,wBAAgB,WAAW,gBAM1B;AAED,wBAAgB,kBAAkB,yBAMjC;AAED,wBAAgB,0BAA0B,gCAEzC"}
@@ -1,26 +1,26 @@
1
- import React, { createContext, useContext } from 'react';
1
+ import React, { createContext, use } from 'react';
2
2
  export const ManifestContext = createContext(null);
3
3
  export function ManifestProvider(props) {
4
4
  const { manifest, activeScreenId, onScreenChange, children } = props;
5
- return (<ManifestContext.Provider value={{ manifest, activeScreenId, onScreenChange }}>
5
+ return (<ManifestContext value={{ manifest, activeScreenId, onScreenChange }}>
6
6
  {children}
7
- </ManifestContext.Provider>);
7
+ </ManifestContext>);
8
8
  }
9
9
  export function useManifest() {
10
- const context = useContext(ManifestContext);
10
+ const context = use(ManifestContext);
11
11
  if (!context) {
12
12
  throw new Error('useManifest must be used within a ManifestProvider');
13
13
  }
14
14
  return context.manifest;
15
15
  }
16
16
  export function useManifestContext() {
17
- const context = useContext(ManifestContext);
17
+ const context = use(ManifestContext);
18
18
  if (!context) {
19
19
  throw new Error('useManifestContext must be used within a ManifestProvider');
20
20
  }
21
21
  return context;
22
22
  }
23
23
  export function useOptionalManifestContext() {
24
- return useContext(ManifestContext);
24
+ return use(ManifestContext);
25
25
  }
26
26
  //# sourceMappingURL=ManifestContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ManifestContext.js","sourceRoot":"","sources":["../src/ManifestContext.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAQzD,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAA8B,IAAI,CAAC,CAAC;AAEhF,MAAM,UAAU,gBAAgB,CAAC,KAA2D;IAC1F,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAErE,OAAO,CACL,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CAC5E;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,eAAe,CAAC,QAAQ,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,OAAO,CAAC,QAAQ,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,OAAO,UAAU,CAAC,eAAe,CAAC,CAAC;AACrC,CAAC","sourcesContent":["import type { AppManifest } from '@ankhorage/contracts';\nimport React, { createContext, useContext } from 'react';\n\ninterface ManifestContextValue {\n manifest: AppManifest;\n activeScreenId?: string;\n onScreenChange?: (screenId: string) => void;\n}\n\nexport const ManifestContext = createContext<ManifestContextValue | null>(null);\n\nexport function ManifestProvider(props: ManifestContextValue & { children: React.ReactNode }) {\n const { manifest, activeScreenId, onScreenChange, children } = props;\n\n return (\n <ManifestContext.Provider value={{ manifest, activeScreenId, onScreenChange }}>\n {children}\n </ManifestContext.Provider>\n );\n}\n\nexport function useManifest() {\n const context = useContext(ManifestContext);\n if (!context) {\n throw new Error('useManifest must be used within a ManifestProvider');\n }\n return context.manifest;\n}\n\nexport function useManifestContext() {\n const context = useContext(ManifestContext);\n if (!context) {\n throw new Error('useManifestContext must be used within a ManifestProvider');\n }\n return context;\n}\n\nexport function useOptionalManifestContext() {\n return useContext(ManifestContext);\n}\n"]}
1
+ {"version":3,"file":"ManifestContext.js","sourceRoot":"","sources":["../src/ManifestContext.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAQlD,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAA8B,IAAI,CAAC,CAAC;AAEhF,MAAM,UAAU,gBAAgB,CAAC,KAA2D;IAC1F,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAErE,OAAO,CACL,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CACnE;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,eAAe,CAAC,CACnB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC;IACrC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,OAAO,CAAC,QAAQ,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC;IACrC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,OAAO,GAAG,CAAC,eAAe,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["import type { AppManifest } from '@ankhorage/contracts';\nimport React, { createContext, use } from 'react';\n\ninterface ManifestContextValue {\n manifest: AppManifest;\n activeScreenId?: string;\n onScreenChange?: (screenId: string) => void;\n}\n\nexport const ManifestContext = createContext<ManifestContextValue | null>(null);\n\nexport function ManifestProvider(props: ManifestContextValue & { children: React.ReactNode }) {\n const { manifest, activeScreenId, onScreenChange, children } = props;\n\n return (\n <ManifestContext value={{ manifest, activeScreenId, onScreenChange }}>\n {children}\n </ManifestContext>\n );\n}\n\nexport function useManifest() {\n const context = use(ManifestContext);\n if (!context) {\n throw new Error('useManifest must be used within a ManifestProvider');\n }\n return context.manifest;\n}\n\nexport function useManifestContext() {\n const context = use(ManifestContext);\n if (!context) {\n throw new Error('useManifestContext must be used within a ManifestProvider');\n }\n return context;\n}\n\nexport function useOptionalManifestContext() {\n return use(ManifestContext);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeRenderer.d.ts","sourceRoot":"","sources":["../src/RuntimeRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAEjB,4BAA4B,EAC5B,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,MAAM,EACP,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAUpD,OAAO,KAAK,EACV,+BAA+B,EAE/B,kCAAkC,EACnC,MAAM,mBAAmB,CAAC;AAK3B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAEL,KAAK,qBAAqB,EAE1B,KAAK,uBAAuB,EAE7B,MAAM,yBAAyB,CAAC;AAcjC,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,KAAK,CAAC,SAAS,CAAC;IAC9D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IAC9C,gBAAgB,CAAC,EAAE,kCAAkC,CAAC;IACtD,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,gBAAgB,CAAC,EAAE,+BAA+B,CAAC;IACnD,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,oBAAoB,EAAE,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,qBAkX1D"}
1
+ {"version":3,"file":"RuntimeRenderer.d.ts","sourceRoot":"","sources":["../src/RuntimeRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAEjB,4BAA4B,EAC5B,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,MAAM,EACP,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAUpD,OAAO,KAAK,EACV,+BAA+B,EAE/B,kCAAkC,EACnC,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAOhE,OAAO,EAEL,KAAK,qBAAqB,EAE1B,KAAK,uBAAuB,EAE7B,MAAM,yBAAyB,CAAC;AAWjC,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,KAAK,CAAC,SAAS,CAAC;IAC9D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IAC9C,gBAAgB,CAAC,EAAE,kCAAkC,CAAC;IACtD,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,gBAAgB,CAAC,EAAE,+BAA+B,CAAC;IACnD,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,oBAAoB,EAAE,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,qBAmX1D"}
@@ -2,14 +2,14 @@ import React from 'react';
2
2
  import { StyleSheet, Text, View } from 'react-native';
3
3
  import { getUnknownComponentDiagnostic, resolveRenderedChildren, resolveRuntimeRegistry, } from './rendering';
4
4
  import { wrapRuntimeEventProps, } from './runtimeActionRegistry';
5
+ import { createDbPersistActionHandler } from './runtimeDbPersist';
6
+ import { dispatchRuntimeComponentEventWithReporting } from './runtimeEventExecution';
5
7
  import { RuntimeMediaResolutionCacheProvider, useRuntimeMediaResolutionCache, } from './runtimeMediaCache';
6
8
  import { resolveRuntimeNodeProps, wrapRuntimeActionProps } from './runtimeNodeProps';
7
9
  import { mergeRuntimeRendererConfig, RuntimeRendererConfigProvider, useRuntimeRendererConfig, } from './RuntimeRendererConfig';
8
- import { dispatchRuntimeComponentEventWithReporting } from './runtimeEventExecution';
9
10
  import { createRuntimeRepeatBindingContext, resolveRuntimeRepeatItemKey, resolveRuntimeRepeatItemsAsync, resolveRuntimeRepeatItemsSync, } from './runtimeRepeat';
10
11
  import { createRepeatDiagnosticsKey } from './runtimeRepeatDiagnostics';
11
12
  import { shouldRenderRuntimeRepeatEmptyState } from './runtimeRepeatEmptyState';
12
- import { createDbPersistActionHandler } from './runtimeDbPersist';
13
13
  import { useRuntimeMediaProps } from './useRuntimeMediaProps';
14
14
  export function RuntimeRenderer(props) {
15
15
  const { node, isRoot = false, registry, disableActions = false, wrapNode, dbAdapter, dbRealtimeAdapter, stateAdapter, bindingContext, apis, dataBindings, mediaAssets, resolveMediaAsset, operationResults, executeAction, executeOperation, onDiagnostics, } = props;
@@ -23,8 +23,6 @@ export function RuntimeRenderer(props) {
23
23
  [key]: value,
24
24
  }));
25
25
  }, []);
26
- const actionHandlerCacheRef = React.useRef(new WeakMap());
27
- const functionHandlerCacheRef = React.useRef(new WeakMap());
28
26
  const effectiveOperationResults = React.useMemo(() => ({
29
27
  ...(inheritedOperationResults ?? {}),
30
28
  ...(operationResults ?? {}),
@@ -85,7 +83,7 @@ export function RuntimeRenderer(props) {
85
83
  if (handler) {
86
84
  await handler(actionArgs);
87
85
  }
88
- }, [effectiveActionHandlers, effectiveConfig.executeAction]);
86
+ }, [effectiveActionHandlers, effectiveConfig]);
89
87
  const dispatchRuntimeEvent = React.useCallback(async (eventArgs) => {
90
88
  await dispatchRuntimeComponentEventWithReporting({
91
89
  ...eventArgs,
@@ -98,30 +96,17 @@ export function RuntimeRenderer(props) {
98
96
  operationResults: eventArgs.operationResults ?? effectiveConfig.operationResults,
99
97
  writeOperationResult: eventArgs.writeOperationResult ?? effectiveConfig.writeOperationResult,
100
98
  });
101
- }, [
102
- effectiveActionHandlers,
103
- effectiveConfig.apis,
104
- effectiveConfig.dataBindings,
105
- effectiveConfig.executeAction,
106
- effectiveConfig.executeOperation,
107
- effectiveConfig.onDiagnostics,
108
- effectiveConfig.operationResults,
109
- effectiveConfig.writeOperationResult,
110
- executeRuntimeAction,
111
- ]);
112
- const executeRuntimeActionRef = React.useRef(executeRuntimeAction);
113
- const dispatchRuntimeEventRef = React.useRef(dispatchRuntimeEvent);
99
+ }, [effectiveActionHandlers, effectiveConfig, executeRuntimeAction]);
100
+ const actionHandlerCache = React.useMemo(() => new WeakMap(), []);
101
+ const functionHandlerCache = React.useMemo(() => new WeakMap(), []);
102
+ const handleAction = React.useCallback((action) => {
103
+ void executeRuntimeAction({ action });
104
+ }, [executeRuntimeAction]);
114
105
  const effectiveRegistry = React.useMemo(() => resolveRuntimeRegistry({
115
106
  propRegistry: registry,
116
107
  configRegistry: effectiveConfig.registry,
117
108
  }), [effectiveConfig.registry, registry]);
118
109
  const Component = effectiveRegistry[node.type];
119
- React.useEffect(() => {
120
- executeRuntimeActionRef.current = executeRuntimeAction;
121
- }, [executeRuntimeAction]);
122
- React.useEffect(() => {
123
- dispatchRuntimeEventRef.current = dispatchRuntimeEvent;
124
- }, [dispatchRuntimeEvent]);
125
110
  const repeatSyncResult = React.useMemo(() => {
126
111
  const { repeat } = node;
127
112
  if (!repeat) {
@@ -147,6 +132,7 @@ export function RuntimeRenderer(props) {
147
132
  effectiveConfig.writeOperationResult,
148
133
  node,
149
134
  ]);
135
+ const repeatRequestToken = React.useMemo(() => (node.repeat && repeatSyncResult?.status === 'pending' ? {} : null), [node.repeat, repeatSyncResult]);
150
136
  const [asyncRepeatResult, setAsyncRepeatResult] = React.useState(null);
151
137
  const repeatRequestIdRef = React.useRef(0);
152
138
  const lastRepeatDiagnosticsKeyRef = React.useRef(null);
@@ -154,8 +140,7 @@ export function RuntimeRenderer(props) {
154
140
  repeatRequestIdRef.current += 1;
155
141
  const requestId = repeatRequestIdRef.current;
156
142
  const { repeat } = node;
157
- if (!repeat || repeatSyncResult?.status !== 'pending') {
158
- setAsyncRepeatResult(null);
143
+ if (!repeat || repeatRequestToken === null) {
159
144
  return undefined;
160
145
  }
161
146
  void (async () => {
@@ -172,7 +157,7 @@ export function RuntimeRenderer(props) {
172
157
  if (repeatRequestIdRef.current !== requestId) {
173
158
  return;
174
159
  }
175
- setAsyncRepeatResult(result);
160
+ setAsyncRepeatResult({ ...result, requestToken: repeatRequestToken });
176
161
  })();
177
162
  return () => {
178
163
  repeatRequestIdRef.current += 1;
@@ -186,11 +171,12 @@ export function RuntimeRenderer(props) {
186
171
  effectiveConfig.stateAdapter,
187
172
  effectiveConfig.writeOperationResult,
188
173
  node,
189
- repeatSyncResult,
174
+ repeatRequestToken,
190
175
  ]);
176
+ const currentAsyncRepeatResult = asyncRepeatResult?.requestToken === repeatRequestToken ? asyncRepeatResult : null;
191
177
  const repeatDiagnostics = repeatSyncResult?.status === 'ready'
192
178
  ? repeatSyncResult.diagnostics
193
- : asyncRepeatResult?.diagnostics;
179
+ : currentAsyncRepeatResult?.diagnostics;
194
180
  React.useEffect(() => {
195
181
  if (!node.repeat || repeatDiagnostics === undefined) {
196
182
  return;
@@ -201,7 +187,7 @@ export function RuntimeRenderer(props) {
201
187
  }
202
188
  lastRepeatDiagnosticsKeyRef.current = diagnosticsKey;
203
189
  effectiveConfig.onDiagnostics?.(repeatDiagnostics);
204
- }, [effectiveConfig.onDiagnostics, node.repeat, repeatDiagnostics]);
190
+ }, [effectiveConfig, node, repeatDiagnostics]);
205
191
  const bindingResolvedProps = resolveRuntimeNodeProps({
206
192
  apis: effectiveConfig.apis,
207
193
  bindingContext: effectiveConfig.bindingContext,
@@ -229,7 +215,7 @@ export function RuntimeRenderer(props) {
229
215
  <Text style={styles.errorMeta}>{diagnostic.detail}</Text>
230
216
  </View>);
231
217
  }
232
- const repeatItems = repeatSyncResult?.status === 'ready' ? repeatSyncResult.items : asyncRepeatResult?.items;
218
+ const repeatItems = repeatSyncResult?.status === 'ready' ? repeatSyncResult.items : currentAsyncRepeatResult?.items;
233
219
  const shouldRenderRepeatEmptyState = shouldRenderRuntimeRepeatEmptyState({
234
220
  diagnostics: repeatDiagnostics,
235
221
  items: repeatItems,
@@ -237,7 +223,7 @@ export function RuntimeRenderer(props) {
237
223
  ? 'ready'
238
224
  : repeatSyncResult?.status === 'pending'
239
225
  ? 'pending'
240
- : asyncRepeatResult
226
+ : currentAsyncRepeatResult
241
227
  ? 'ready'
242
228
  : undefined,
243
229
  });
@@ -264,18 +250,16 @@ export function RuntimeRenderer(props) {
264
250
  const propsWithActions = wrapRuntimeActionProps({
265
251
  props: resolvedProps,
266
252
  disableActions: effectiveConfig.disableActions === true,
267
- handleAction: (action) => {
268
- void executeRuntimeActionRef.current({ action });
269
- },
270
- actionHandlerCache: actionHandlerCacheRef.current,
271
- functionHandlerCache: functionHandlerCacheRef.current,
253
+ handleAction,
254
+ actionHandlerCache,
255
+ functionHandlerCache,
272
256
  });
273
257
  const propsWithEvents = wrapRuntimeEventProps({
274
258
  context: effectiveConfig.bindingContext,
275
259
  dataBindings: effectiveConfig.dataBindings,
276
260
  props: propsWithActions,
277
261
  disableActions: effectiveConfig.disableActions === true,
278
- dispatchComponentEvent: (eventArgs) => dispatchRuntimeEventRef.current(eventArgs),
262
+ dispatchComponentEvent: dispatchRuntimeEvent,
279
263
  node,
280
264
  });
281
265
  const componentChildren = resolveRenderedChildren({
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeRenderer.js","sourceRoot":"","sources":["../src/RuntimeRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import type {\n ApiDefinitionList,\n BindingValue,\n ComponentDataBindingRegistry,\n DataSourceDiagnostic,\n DbAdapter,\n DbRealtimeAdapter,\n MediaAssetRegistry,\n StateAdapter,\n UiNode,\n} from '@ankhorage/contracts';\nimport React from 'react';\nimport { StyleSheet, Text, View } from 'react-native';\n\nimport type { ComponentRegistry } from './registry';\nimport {\n getUnknownComponentDiagnostic,\n resolveRenderedChildren,\n resolveRuntimeRegistry,\n} from './rendering';\nimport {\n type RuntimeComponentEventDispatchArgs,\n wrapRuntimeEventProps,\n} from './runtimeActionRegistry';\nimport type {\n RuntimeBindingOperationExecutor,\n RuntimeBindingOperationKey,\n RuntimeBindingOperationResultCache,\n} from './runtimeBindings';\nimport {\n RuntimeMediaResolutionCacheProvider,\n useRuntimeMediaResolutionCache,\n} from './runtimeMediaCache';\nimport type { RuntimeMediaAssetResolver } from './runtimeMedia';\nimport { resolveRuntimeNodeProps, wrapRuntimeActionProps } from './runtimeNodeProps';\nimport {\n mergeRuntimeRendererConfig,\n type RuntimeActionExecutor,\n RuntimeRendererConfigProvider,\n type RuntimeRendererWrapArgs,\n useRuntimeRendererConfig,\n} from './RuntimeRendererConfig';\nimport { dispatchRuntimeComponentEventWithReporting } from './runtimeEventExecution';\nimport {\n createRuntimeRepeatBindingContext,\n resolveRuntimeRepeatItemKey,\n resolveRuntimeRepeatItemsAsync,\n resolveRuntimeRepeatItemsSync,\n} from './runtimeRepeat';\nimport { createRepeatDiagnosticsKey } from './runtimeRepeatDiagnostics';\nimport { shouldRenderRuntimeRepeatEmptyState } from './runtimeRepeatEmptyState';\nimport { createDbPersistActionHandler } from './runtimeDbPersist';\nimport type { RuntimeActionHandlerArgs } from './RuntimeRendererConfig';\nimport { useRuntimeMediaProps } from './useRuntimeMediaProps';\n\nexport interface RuntimeRendererProps {\n node: UiNode;\n isRoot?: boolean;\n registry?: ComponentRegistry;\n disableActions?: boolean;\n wrapNode?: (args: RuntimeRendererWrapArgs) => React.ReactNode;\n dbAdapter?: DbAdapter;\n dbRealtimeAdapter?: DbRealtimeAdapter;\n stateAdapter?: StateAdapter;\n bindingContext?: Record<string, unknown>;\n apis?: ApiDefinitionList;\n dataBindings?: ComponentDataBindingRegistry;\n mediaAssets?: MediaAssetRegistry;\n resolveMediaAsset?: RuntimeMediaAssetResolver;\n operationResults?: RuntimeBindingOperationResultCache;\n executeAction?: RuntimeActionExecutor;\n executeOperation?: RuntimeBindingOperationExecutor;\n onDiagnostics?: (diagnostics: readonly DataSourceDiagnostic[]) => void;\n}\n\nexport function RuntimeRenderer(props: RuntimeRendererProps) {\n const {\n node,\n isRoot = false,\n registry,\n disableActions = false,\n wrapNode,\n dbAdapter,\n dbRealtimeAdapter,\n stateAdapter,\n bindingContext,\n apis,\n dataBindings,\n mediaAssets,\n resolveMediaAsset,\n operationResults,\n executeAction,\n executeOperation,\n onDiagnostics,\n } = props;\n const inheritedConfig = useRuntimeRendererConfig();\n const mediaResolutionCache = useRuntimeMediaResolutionCache();\n const inheritedOperationResults = inheritedConfig.operationResults;\n const [localOperationResults, setLocalOperationResults] =\n React.useState<RuntimeBindingOperationResultCache>({});\n const writeLocalOperationResult = React.useCallback(\n (key: RuntimeBindingOperationKey, value: BindingValue) => {\n setLocalOperationResults((currentResults) => ({\n ...currentResults,\n [key]: value,\n }));\n },\n [],\n );\n const actionHandlerCacheRef = React.useRef(new WeakMap<object, (...args: unknown[]) => void>());\n const functionHandlerCacheRef = React.useRef(\n new WeakMap<(...args: unknown[]) => unknown, (...args: unknown[]) => unknown>(),\n );\n const effectiveOperationResults = React.useMemo(\n () => ({\n ...(inheritedOperationResults ?? {}),\n ...(operationResults ?? {}),\n ...localOperationResults,\n }),\n [inheritedOperationResults, localOperationResults, operationResults],\n );\n const explicitConfig = React.useMemo(\n () => ({\n apis,\n bindingContext,\n dataBindings,\n dbAdapter,\n dbRealtimeAdapter,\n disableActions,\n executeAction,\n executeOperation,\n mediaAssets,\n operationResults: effectiveOperationResults,\n onDiagnostics,\n registry,\n resolveMediaAsset,\n stateAdapter,\n wrapNode,\n writeOperationResult: inheritedConfig.writeOperationResult ?? writeLocalOperationResult,\n }),\n [\n apis,\n bindingContext,\n dataBindings,\n dbAdapter,\n dbRealtimeAdapter,\n disableActions,\n executeAction,\n effectiveOperationResults,\n executeOperation,\n inheritedConfig.writeOperationResult,\n mediaAssets,\n onDiagnostics,\n registry,\n resolveMediaAsset,\n stateAdapter,\n wrapNode,\n writeLocalOperationResult,\n ],\n );\n const effectiveConfig = React.useMemo(\n () => mergeRuntimeRendererConfig(explicitConfig, inheritedConfig),\n [explicitConfig, inheritedConfig],\n );\n const effectiveActionHandlers = React.useMemo(() => {\n if (!effectiveConfig.dbAdapter) {\n return effectiveConfig.actionHandlers;\n }\n\n return {\n 'db.persist': createDbPersistActionHandler({ dbAdapter: effectiveConfig.dbAdapter }),\n ...(effectiveConfig.actionHandlers ?? {}),\n };\n }, [effectiveConfig.actionHandlers, effectiveConfig.dbAdapter]);\n const executeRuntimeAction = React.useCallback(\n async (actionArgs: RuntimeActionHandlerArgs) => {\n if (effectiveConfig.executeAction) {\n await effectiveConfig.executeAction(actionArgs);\n return;\n }\n\n const handler = effectiveActionHandlers?.[actionArgs.action.type];\n if (handler) {\n await handler(actionArgs);\n }\n },\n [effectiveActionHandlers, effectiveConfig.executeAction],\n );\n const dispatchRuntimeEvent = React.useCallback(\n async (eventArgs: RuntimeComponentEventDispatchArgs) => {\n await dispatchRuntimeComponentEventWithReporting({\n ...eventArgs,\n actionHandlers: effectiveActionHandlers,\n apis: eventArgs.apis ?? effectiveConfig.apis,\n dataBindings: eventArgs.dataBindings ?? effectiveConfig.dataBindings,\n executeAction: effectiveConfig.executeAction ?? executeRuntimeAction,\n executeOperation: eventArgs.executeOperation ?? effectiveConfig.executeOperation,\n onDiagnostics: effectiveConfig.onDiagnostics,\n operationResults: eventArgs.operationResults ?? effectiveConfig.operationResults,\n writeOperationResult:\n eventArgs.writeOperationResult ?? effectiveConfig.writeOperationResult,\n });\n },\n [\n effectiveActionHandlers,\n effectiveConfig.apis,\n effectiveConfig.dataBindings,\n effectiveConfig.executeAction,\n effectiveConfig.executeOperation,\n effectiveConfig.onDiagnostics,\n effectiveConfig.operationResults,\n effectiveConfig.writeOperationResult,\n executeRuntimeAction,\n ],\n );\n const executeRuntimeActionRef = React.useRef(executeRuntimeAction);\n const dispatchRuntimeEventRef = React.useRef(dispatchRuntimeEvent);\n const effectiveRegistry = React.useMemo(\n () =>\n resolveRuntimeRegistry({\n propRegistry: registry,\n configRegistry: effectiveConfig.registry,\n }),\n [effectiveConfig.registry, registry],\n );\n const Component = effectiveRegistry[node.type];\n\n React.useEffect(() => {\n executeRuntimeActionRef.current = executeRuntimeAction;\n }, [executeRuntimeAction]);\n\n React.useEffect(() => {\n dispatchRuntimeEventRef.current = dispatchRuntimeEvent;\n }, [dispatchRuntimeEvent]);\n\n const repeatSyncResult = React.useMemo(() => {\n const { repeat } = node;\n if (!repeat) {\n return null;\n }\n\n return resolveRuntimeRepeatItemsSync(repeat, {\n apis: effectiveConfig.apis,\n context: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n executeOperation: effectiveConfig.executeOperation,\n node,\n operationResults: effectiveConfig.operationResults,\n stateAdapter: effectiveConfig.stateAdapter,\n writeOperationResult: effectiveConfig.writeOperationResult,\n });\n }, [\n effectiveConfig.apis,\n effectiveConfig.bindingContext,\n effectiveConfig.dataBindings,\n effectiveConfig.executeOperation,\n effectiveConfig.operationResults,\n effectiveConfig.stateAdapter,\n effectiveConfig.writeOperationResult,\n node,\n ]);\n const [asyncRepeatResult, setAsyncRepeatResult] = React.useState<{\n readonly items: readonly BindingValue[];\n readonly diagnostics: readonly DataSourceDiagnostic[];\n } | null>(null);\n const repeatRequestIdRef = React.useRef(0);\n const lastRepeatDiagnosticsKeyRef = React.useRef<string | null>(null);\n\n React.useEffect(() => {\n repeatRequestIdRef.current += 1;\n const requestId = repeatRequestIdRef.current;\n const { repeat } = node;\n\n if (!repeat || repeatSyncResult?.status !== 'pending') {\n setAsyncRepeatResult(null);\n return undefined;\n }\n\n void (async () => {\n const result = await resolveRuntimeRepeatItemsAsync(repeat, {\n apis: effectiveConfig.apis,\n context: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n executeOperation: effectiveConfig.executeOperation,\n node,\n operationResults: effectiveConfig.operationResults,\n stateAdapter: effectiveConfig.stateAdapter,\n writeOperationResult: effectiveConfig.writeOperationResult,\n });\n\n if (repeatRequestIdRef.current !== requestId) {\n return;\n }\n\n setAsyncRepeatResult(result);\n })();\n\n return () => {\n repeatRequestIdRef.current += 1;\n };\n }, [\n effectiveConfig.apis,\n effectiveConfig.bindingContext,\n effectiveConfig.dataBindings,\n effectiveConfig.executeOperation,\n effectiveConfig.operationResults,\n effectiveConfig.stateAdapter,\n effectiveConfig.writeOperationResult,\n node,\n repeatSyncResult,\n ]);\n const repeatDiagnostics =\n repeatSyncResult?.status === 'ready'\n ? repeatSyncResult.diagnostics\n : asyncRepeatResult?.diagnostics;\n\n React.useEffect(() => {\n if (!node.repeat || repeatDiagnostics === undefined) {\n return;\n }\n\n const diagnosticsKey = createRepeatDiagnosticsKey(node.id, repeatDiagnostics);\n if (lastRepeatDiagnosticsKeyRef.current === diagnosticsKey) {\n return;\n }\n\n lastRepeatDiagnosticsKeyRef.current = diagnosticsKey;\n effectiveConfig.onDiagnostics?.(repeatDiagnostics);\n }, [effectiveConfig.onDiagnostics, node.repeat, repeatDiagnostics]);\n\n const bindingResolvedProps = resolveRuntimeNodeProps({\n apis: effectiveConfig.apis,\n bindingContext: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n dbAdapter: effectiveConfig.dbAdapter,\n dbRealtimeAdapter: effectiveConfig.dbRealtimeAdapter,\n node,\n operationResults: effectiveConfig.operationResults,\n stateAdapter: effectiveConfig.stateAdapter,\n });\n const mediaResolvedProps = useRuntimeMediaProps({\n cache: mediaResolutionCache,\n mediaAssets: effectiveConfig.mediaAssets,\n props: bindingResolvedProps,\n resolveMediaAsset: effectiveConfig.resolveMediaAsset,\n });\n const resolvedProps = effectiveConfig.resolveNodeProps\n ? effectiveConfig.resolveNodeProps({ node, props: mediaResolvedProps })\n : mediaResolvedProps;\n\n if (!Component) {\n const diagnostic = getUnknownComponentDiagnostic(node.type, effectiveRegistry);\n return (\n <View style={styles.errorBox}>\n <Text style={styles.errorTitle}>{diagnostic.title}</Text>\n <Text style={styles.errorText}>{diagnostic.suggestion}</Text>\n <Text style={styles.errorMeta}>{diagnostic.detail}</Text>\n </View>\n );\n }\n\n const repeatItems =\n repeatSyncResult?.status === 'ready' ? repeatSyncResult.items : asyncRepeatResult?.items;\n const shouldRenderRepeatEmptyState = shouldRenderRuntimeRepeatEmptyState({\n diagnostics: repeatDiagnostics,\n items: repeatItems,\n status:\n repeatSyncResult?.status === 'ready'\n ? 'ready'\n : repeatSyncResult?.status === 'pending'\n ? 'pending'\n : asyncRepeatResult\n ? 'ready'\n : undefined,\n });\n const renderedChildren = node.repeat\n ? repeatItems && repeatItems.length > 0\n ? repeatItems.flatMap((item, itemIndex) =>\n (node.children ?? []).map((child) => {\n const itemAlias = node.repeat?.itemAlias ?? 'item';\n const repeatKey = resolveRuntimeRepeatItemKey({\n item,\n itemAlias,\n index: itemIndex,\n keyPath: node.repeat?.keyPath,\n });\n\n return (\n <RuntimeRenderer\n key={`${child.id}:${String(repeatKey)}`}\n node={child}\n registry={effectiveRegistry}\n bindingContext={createRuntimeRepeatBindingContext({\n baseContext: effectiveConfig.bindingContext,\n item,\n itemAlias,\n })}\n />\n );\n }),\n )\n : shouldRenderRepeatEmptyState\n ? node.repeat.empty?.map((child) => (\n <RuntimeRenderer key={child.id} node={child} registry={effectiveRegistry} />\n ))\n : undefined\n : node.children?.map((child) => (\n <RuntimeRenderer key={child.id} node={child} registry={effectiveRegistry} />\n ));\n\n const propsWithActions = wrapRuntimeActionProps({\n props: resolvedProps,\n disableActions: effectiveConfig.disableActions === true,\n handleAction: (action) => {\n void executeRuntimeActionRef.current({ action });\n },\n actionHandlerCache: actionHandlerCacheRef.current,\n functionHandlerCache: functionHandlerCacheRef.current,\n });\n const propsWithEvents = wrapRuntimeEventProps({\n context: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n props: propsWithActions,\n disableActions: effectiveConfig.disableActions === true,\n dispatchComponentEvent: (eventArgs) => dispatchRuntimeEventRef.current(eventArgs),\n node,\n });\n\n const componentChildren = resolveRenderedChildren({\n propChildren: propsWithEvents.children as React.ReactNode,\n renderedChildren,\n });\n\n let content: React.ReactNode = <Component {...propsWithEvents}>{componentChildren}</Component>;\n if (effectiveConfig.wrapNode) {\n content = effectiveConfig.wrapNode({ node, rendered: content, isRoot });\n }\n\n return (\n <RuntimeMediaResolutionCacheProvider value={mediaResolutionCache}>\n <RuntimeRendererConfigProvider value={explicitConfig}>\n {content}\n </RuntimeRendererConfigProvider>\n </RuntimeMediaResolutionCacheProvider>\n );\n}\n\nconst styles = StyleSheet.create({\n errorBox: {\n borderColor: '#ef4444',\n borderRadius: 8,\n borderWidth: 1,\n margin: 8,\n padding: 8,\n },\n errorTitle: {\n color: '#991b1b',\n fontSize: 13,\n fontWeight: '700',\n marginBottom: 4,\n },\n errorText: {\n color: '#ef4444',\n fontWeight: '600',\n },\n errorMeta: {\n color: '#7f1d1d',\n fontSize: 12,\n marginTop: 4,\n },\n});\n"]}
1
+ {"version":3,"file":"RuntimeRenderer.js","sourceRoot":"","sources":["../src/RuntimeRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import type {\n ApiDefinitionList,\n BindingValue,\n ComponentDataBindingRegistry,\n DataSourceDiagnostic,\n DbAdapter,\n DbRealtimeAdapter,\n MediaAssetRegistry,\n StateAdapter,\n UiNode,\n} from '@ankhorage/contracts';\nimport React from 'react';\nimport { StyleSheet, Text, View } from 'react-native';\n\nimport type { ComponentRegistry } from './registry';\nimport {\n getUnknownComponentDiagnostic,\n resolveRenderedChildren,\n resolveRuntimeRegistry,\n} from './rendering';\nimport {\n type RuntimeComponentEventDispatchArgs,\n wrapRuntimeEventProps,\n} from './runtimeActionRegistry';\nimport type {\n RuntimeBindingOperationExecutor,\n RuntimeBindingOperationKey,\n RuntimeBindingOperationResultCache,\n} from './runtimeBindings';\nimport { createDbPersistActionHandler } from './runtimeDbPersist';\nimport { dispatchRuntimeComponentEventWithReporting } from './runtimeEventExecution';\nimport type { RuntimeMediaAssetResolver } from './runtimeMedia';\nimport {\n RuntimeMediaResolutionCacheProvider,\n useRuntimeMediaResolutionCache,\n} from './runtimeMediaCache';\nimport { resolveRuntimeNodeProps, wrapRuntimeActionProps } from './runtimeNodeProps';\nimport type { RuntimeActionHandlerArgs } from './RuntimeRendererConfig';\nimport {\n mergeRuntimeRendererConfig,\n type RuntimeActionExecutor,\n RuntimeRendererConfigProvider,\n type RuntimeRendererWrapArgs,\n useRuntimeRendererConfig,\n} from './RuntimeRendererConfig';\nimport {\n createRuntimeRepeatBindingContext,\n resolveRuntimeRepeatItemKey,\n resolveRuntimeRepeatItemsAsync,\n resolveRuntimeRepeatItemsSync,\n} from './runtimeRepeat';\nimport { createRepeatDiagnosticsKey } from './runtimeRepeatDiagnostics';\nimport { shouldRenderRuntimeRepeatEmptyState } from './runtimeRepeatEmptyState';\nimport { useRuntimeMediaProps } from './useRuntimeMediaProps';\n\nexport interface RuntimeRendererProps {\n node: UiNode;\n isRoot?: boolean;\n registry?: ComponentRegistry;\n disableActions?: boolean;\n wrapNode?: (args: RuntimeRendererWrapArgs) => React.ReactNode;\n dbAdapter?: DbAdapter;\n dbRealtimeAdapter?: DbRealtimeAdapter;\n stateAdapter?: StateAdapter;\n bindingContext?: Record<string, unknown>;\n apis?: ApiDefinitionList;\n dataBindings?: ComponentDataBindingRegistry;\n mediaAssets?: MediaAssetRegistry;\n resolveMediaAsset?: RuntimeMediaAssetResolver;\n operationResults?: RuntimeBindingOperationResultCache;\n executeAction?: RuntimeActionExecutor;\n executeOperation?: RuntimeBindingOperationExecutor;\n onDiagnostics?: (diagnostics: readonly DataSourceDiagnostic[]) => void;\n}\n\nexport function RuntimeRenderer(props: RuntimeRendererProps) {\n const {\n node,\n isRoot = false,\n registry,\n disableActions = false,\n wrapNode,\n dbAdapter,\n dbRealtimeAdapter,\n stateAdapter,\n bindingContext,\n apis,\n dataBindings,\n mediaAssets,\n resolveMediaAsset,\n operationResults,\n executeAction,\n executeOperation,\n onDiagnostics,\n } = props;\n const inheritedConfig = useRuntimeRendererConfig();\n const mediaResolutionCache = useRuntimeMediaResolutionCache();\n const inheritedOperationResults = inheritedConfig.operationResults;\n const [localOperationResults, setLocalOperationResults] =\n React.useState<RuntimeBindingOperationResultCache>({});\n const writeLocalOperationResult = React.useCallback(\n (key: RuntimeBindingOperationKey, value: BindingValue) => {\n setLocalOperationResults((currentResults) => ({\n ...currentResults,\n [key]: value,\n }));\n },\n [],\n );\n const effectiveOperationResults = React.useMemo(\n () => ({\n ...(inheritedOperationResults ?? {}),\n ...(operationResults ?? {}),\n ...localOperationResults,\n }),\n [inheritedOperationResults, localOperationResults, operationResults],\n );\n const explicitConfig = React.useMemo(\n () => ({\n apis,\n bindingContext,\n dataBindings,\n dbAdapter,\n dbRealtimeAdapter,\n disableActions,\n executeAction,\n executeOperation,\n mediaAssets,\n operationResults: effectiveOperationResults,\n onDiagnostics,\n registry,\n resolveMediaAsset,\n stateAdapter,\n wrapNode,\n writeOperationResult: inheritedConfig.writeOperationResult ?? writeLocalOperationResult,\n }),\n [\n apis,\n bindingContext,\n dataBindings,\n dbAdapter,\n dbRealtimeAdapter,\n disableActions,\n executeAction,\n effectiveOperationResults,\n executeOperation,\n inheritedConfig.writeOperationResult,\n mediaAssets,\n onDiagnostics,\n registry,\n resolveMediaAsset,\n stateAdapter,\n wrapNode,\n writeLocalOperationResult,\n ],\n );\n const effectiveConfig = React.useMemo(\n () => mergeRuntimeRendererConfig(explicitConfig, inheritedConfig),\n [explicitConfig, inheritedConfig],\n );\n const effectiveActionHandlers = React.useMemo(() => {\n if (!effectiveConfig.dbAdapter) {\n return effectiveConfig.actionHandlers;\n }\n\n return {\n 'db.persist': createDbPersistActionHandler({ dbAdapter: effectiveConfig.dbAdapter }),\n ...(effectiveConfig.actionHandlers ?? {}),\n };\n }, [effectiveConfig.actionHandlers, effectiveConfig.dbAdapter]);\n const executeRuntimeAction = React.useCallback(\n async (actionArgs: RuntimeActionHandlerArgs) => {\n if (effectiveConfig.executeAction) {\n await effectiveConfig.executeAction(actionArgs);\n return;\n }\n\n const handler = effectiveActionHandlers?.[actionArgs.action.type];\n if (handler) {\n await handler(actionArgs);\n }\n },\n [effectiveActionHandlers, effectiveConfig],\n );\n const dispatchRuntimeEvent = React.useCallback(\n async (eventArgs: RuntimeComponentEventDispatchArgs) => {\n await dispatchRuntimeComponentEventWithReporting({\n ...eventArgs,\n actionHandlers: effectiveActionHandlers,\n apis: eventArgs.apis ?? effectiveConfig.apis,\n dataBindings: eventArgs.dataBindings ?? effectiveConfig.dataBindings,\n executeAction: effectiveConfig.executeAction ?? executeRuntimeAction,\n executeOperation: eventArgs.executeOperation ?? effectiveConfig.executeOperation,\n onDiagnostics: effectiveConfig.onDiagnostics,\n operationResults: eventArgs.operationResults ?? effectiveConfig.operationResults,\n writeOperationResult:\n eventArgs.writeOperationResult ?? effectiveConfig.writeOperationResult,\n });\n },\n [effectiveActionHandlers, effectiveConfig, executeRuntimeAction],\n );\n const actionHandlerCache = React.useMemo(\n () =>\n new WeakMap<\n object,\n {\n readonly handleAction: (action: RuntimeActionHandlerArgs['action']) => void;\n readonly handler: (...args: unknown[]) => void;\n }\n >(),\n [],\n );\n const functionHandlerCache = React.useMemo(\n () => new WeakMap<(...args: unknown[]) => unknown, (...args: unknown[]) => unknown>(),\n [],\n );\n const handleAction = React.useCallback(\n (action: RuntimeActionHandlerArgs['action']) => {\n void executeRuntimeAction({ action });\n },\n [executeRuntimeAction],\n );\n const effectiveRegistry = React.useMemo(\n () =>\n resolveRuntimeRegistry({\n propRegistry: registry,\n configRegistry: effectiveConfig.registry,\n }),\n [effectiveConfig.registry, registry],\n );\n const Component = effectiveRegistry[node.type];\n\n const repeatSyncResult = React.useMemo(() => {\n const { repeat } = node;\n if (!repeat) {\n return null;\n }\n\n return resolveRuntimeRepeatItemsSync(repeat, {\n apis: effectiveConfig.apis,\n context: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n executeOperation: effectiveConfig.executeOperation,\n node,\n operationResults: effectiveConfig.operationResults,\n stateAdapter: effectiveConfig.stateAdapter,\n writeOperationResult: effectiveConfig.writeOperationResult,\n });\n }, [\n effectiveConfig.apis,\n effectiveConfig.bindingContext,\n effectiveConfig.dataBindings,\n effectiveConfig.executeOperation,\n effectiveConfig.operationResults,\n effectiveConfig.stateAdapter,\n effectiveConfig.writeOperationResult,\n node,\n ]);\n const repeatRequestToken = React.useMemo(\n () => (node.repeat && repeatSyncResult?.status === 'pending' ? {} : null),\n [node.repeat, repeatSyncResult],\n );\n const [asyncRepeatResult, setAsyncRepeatResult] = React.useState<{\n readonly requestToken: object;\n readonly items: readonly BindingValue[];\n readonly diagnostics: readonly DataSourceDiagnostic[];\n } | null>(null);\n const repeatRequestIdRef = React.useRef(0);\n const lastRepeatDiagnosticsKeyRef = React.useRef<string | null>(null);\n\n React.useEffect(() => {\n repeatRequestIdRef.current += 1;\n const requestId = repeatRequestIdRef.current;\n const { repeat } = node;\n\n if (!repeat || repeatRequestToken === null) {\n return undefined;\n }\n\n void (async () => {\n const result = await resolveRuntimeRepeatItemsAsync(repeat, {\n apis: effectiveConfig.apis,\n context: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n executeOperation: effectiveConfig.executeOperation,\n node,\n operationResults: effectiveConfig.operationResults,\n stateAdapter: effectiveConfig.stateAdapter,\n writeOperationResult: effectiveConfig.writeOperationResult,\n });\n\n if (repeatRequestIdRef.current !== requestId) {\n return;\n }\n\n setAsyncRepeatResult({ ...result, requestToken: repeatRequestToken });\n })();\n\n return () => {\n repeatRequestIdRef.current += 1;\n };\n }, [\n effectiveConfig.apis,\n effectiveConfig.bindingContext,\n effectiveConfig.dataBindings,\n effectiveConfig.executeOperation,\n effectiveConfig.operationResults,\n effectiveConfig.stateAdapter,\n effectiveConfig.writeOperationResult,\n node,\n repeatRequestToken,\n ]);\n const currentAsyncRepeatResult =\n asyncRepeatResult?.requestToken === repeatRequestToken ? asyncRepeatResult : null;\n const repeatDiagnostics =\n repeatSyncResult?.status === 'ready'\n ? repeatSyncResult.diagnostics\n : currentAsyncRepeatResult?.diagnostics;\n\n React.useEffect(() => {\n if (!node.repeat || repeatDiagnostics === undefined) {\n return;\n }\n\n const diagnosticsKey = createRepeatDiagnosticsKey(node.id, repeatDiagnostics);\n if (lastRepeatDiagnosticsKeyRef.current === diagnosticsKey) {\n return;\n }\n\n lastRepeatDiagnosticsKeyRef.current = diagnosticsKey;\n effectiveConfig.onDiagnostics?.(repeatDiagnostics);\n }, [effectiveConfig, node, repeatDiagnostics]);\n\n const bindingResolvedProps = resolveRuntimeNodeProps({\n apis: effectiveConfig.apis,\n bindingContext: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n dbAdapter: effectiveConfig.dbAdapter,\n dbRealtimeAdapter: effectiveConfig.dbRealtimeAdapter,\n node,\n operationResults: effectiveConfig.operationResults,\n stateAdapter: effectiveConfig.stateAdapter,\n });\n const mediaResolvedProps = useRuntimeMediaProps({\n cache: mediaResolutionCache,\n mediaAssets: effectiveConfig.mediaAssets,\n props: bindingResolvedProps,\n resolveMediaAsset: effectiveConfig.resolveMediaAsset,\n });\n const resolvedProps = effectiveConfig.resolveNodeProps\n ? effectiveConfig.resolveNodeProps({ node, props: mediaResolvedProps })\n : mediaResolvedProps;\n\n if (!Component) {\n const diagnostic = getUnknownComponentDiagnostic(node.type, effectiveRegistry);\n return (\n <View style={styles.errorBox}>\n <Text style={styles.errorTitle}>{diagnostic.title}</Text>\n <Text style={styles.errorText}>{diagnostic.suggestion}</Text>\n <Text style={styles.errorMeta}>{diagnostic.detail}</Text>\n </View>\n );\n }\n\n const repeatItems =\n repeatSyncResult?.status === 'ready' ? repeatSyncResult.items : currentAsyncRepeatResult?.items;\n const shouldRenderRepeatEmptyState = shouldRenderRuntimeRepeatEmptyState({\n diagnostics: repeatDiagnostics,\n items: repeatItems,\n status:\n repeatSyncResult?.status === 'ready'\n ? 'ready'\n : repeatSyncResult?.status === 'pending'\n ? 'pending'\n : currentAsyncRepeatResult\n ? 'ready'\n : undefined,\n });\n const renderedChildren = node.repeat\n ? repeatItems && repeatItems.length > 0\n ? repeatItems.flatMap((item, itemIndex) =>\n (node.children ?? []).map((child) => {\n const itemAlias = node.repeat?.itemAlias ?? 'item';\n const repeatKey = resolveRuntimeRepeatItemKey({\n item,\n itemAlias,\n index: itemIndex,\n keyPath: node.repeat?.keyPath,\n });\n\n return (\n <RuntimeRenderer\n key={`${child.id}:${String(repeatKey)}`}\n node={child}\n registry={effectiveRegistry}\n bindingContext={createRuntimeRepeatBindingContext({\n baseContext: effectiveConfig.bindingContext,\n item,\n itemAlias,\n })}\n />\n );\n }),\n )\n : shouldRenderRepeatEmptyState\n ? node.repeat.empty?.map((child) => (\n <RuntimeRenderer key={child.id} node={child} registry={effectiveRegistry} />\n ))\n : undefined\n : node.children?.map((child) => (\n <RuntimeRenderer key={child.id} node={child} registry={effectiveRegistry} />\n ));\n\n const propsWithActions = wrapRuntimeActionProps({\n props: resolvedProps,\n disableActions: effectiveConfig.disableActions === true,\n handleAction,\n actionHandlerCache,\n functionHandlerCache,\n });\n const propsWithEvents = wrapRuntimeEventProps({\n context: effectiveConfig.bindingContext,\n dataBindings: effectiveConfig.dataBindings,\n props: propsWithActions,\n disableActions: effectiveConfig.disableActions === true,\n dispatchComponentEvent: dispatchRuntimeEvent,\n node,\n });\n\n const componentChildren = resolveRenderedChildren({\n propChildren: propsWithEvents.children as React.ReactNode,\n renderedChildren,\n });\n\n let content: React.ReactNode = <Component {...propsWithEvents}>{componentChildren}</Component>;\n if (effectiveConfig.wrapNode) {\n content = effectiveConfig.wrapNode({ node, rendered: content, isRoot });\n }\n\n return (\n <RuntimeMediaResolutionCacheProvider value={mediaResolutionCache}>\n <RuntimeRendererConfigProvider value={explicitConfig}>\n {content}\n </RuntimeRendererConfigProvider>\n </RuntimeMediaResolutionCacheProvider>\n );\n}\n\nconst styles = StyleSheet.create({\n errorBox: {\n borderColor: '#ef4444',\n borderRadius: 8,\n borderWidth: 1,\n margin: 8,\n padding: 8,\n },\n errorTitle: {\n color: '#991b1b',\n fontSize: 13,\n fontWeight: '700',\n marginBottom: 4,\n },\n errorText: {\n color: '#ef4444',\n fontWeight: '600',\n },\n errorMeta: {\n color: '#7f1d1d',\n fontSize: 12,\n marginTop: 4,\n },\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeRendererConfig.d.ts","sourceRoot":"","sources":["../src/RuntimeRendererConfig.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RuntimeRendererConfig.d.ts","sourceRoot":"","sources":["../src/RuntimeRendererConfig.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,iBAAiB,EACjB,4BAA4B,EAC5B,iBAAiB,EACjB,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,MAAM,EACP,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,KAA6B,MAAM,OAAO,CAAC;AAElD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EACV,+BAA+B,EAC/B,kCAAkC,EAClC,mCAAmC,EACpC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAEhE,YAAY,EACV,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1F,MAAM,MAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE,wBAAwB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC5F,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AACzE,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAEzD,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,KAAK,CAAC,SAAS,CAAC;IAC9D,gBAAgB,CAAC,EAAE,wBAAwB,CAAC;IAC5C,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IAC9C,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,gBAAgB,CAAC,EAAE,kCAAkC,CAAC;IACtD,oBAAoB,CAAC,EAAE,mCAAmC,CAAC;IAC3D,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,gBAAgB,CAAC,EAAE,+BAA+B,CAAC;IACnD,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,oBAAoB,EAAE,KAAK,IAAI,CAAC;CACxE;AAQD,wBAAgB,8BAA8B,CAC5C,aAAa,CAAC,EAAE,qBAAqB,CAAC,UAAU,CAAC,EACjD,aAAa,CAAC,EAAE,qBAAqB,CAAC,UAAU,CAAC,GAChD,qBAAqB,CAAC,UAAU,CAAC,CAUnC;AAED,wBAAgB,+BAA+B,CAC7C,aAAa,CAAC,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,EACzD,iBAAiB,CAAC,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,GAC5D,qBAAqB,CAAC,kBAAkB,CAAC,CAa3C;AAED,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,qBAAqB,GAAG,SAAS,EAC9C,eAAe,EAAE,qBAAqB,GAAG,SAAS,GACjD,qBAAqB,CA2CvB;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,KAAK,EAAE,qBAAqB,CAAC;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,qBAQA;AAED,wBAAgB,wBAAwB,IAAI,qBAAqB,CAEhE"}
@@ -1,4 +1,4 @@
1
- import React, { createContext, useContext } from 'react';
1
+ import React, { createContext, use } from 'react';
2
2
  const EMPTY_RUNTIME_RENDERER_CONFIG = {};
3
3
  const RuntimeRendererConfigContext = createContext(EMPTY_RUNTIME_RENDERER_CONFIG);
4
4
  export function composeRuntimeRendererWrapNode(innerWrapNode, outerWrapNode) {
@@ -52,14 +52,12 @@ export function mergeRuntimeRendererConfig(localConfig, inheritedConfig) {
52
52
  }
53
53
  export function RuntimeRendererConfigProvider(props) {
54
54
  const { value, children } = props;
55
- const inheritedConfig = useContext(RuntimeRendererConfigContext);
55
+ const inheritedConfig = use(RuntimeRendererConfigContext);
56
56
  const mergedConfig = mergeRuntimeRendererConfig(value, inheritedConfig);
57
- return (<RuntimeRendererConfigContext.Provider value={mergedConfig}>
58
- {children}
59
- </RuntimeRendererConfigContext.Provider>);
57
+ return (<RuntimeRendererConfigContext value={mergedConfig}>{children}</RuntimeRendererConfigContext>);
60
58
  }
61
59
  export function useRuntimeRendererConfig() {
62
- return useContext(RuntimeRendererConfigContext);
60
+ return use(RuntimeRendererConfigContext);
63
61
  }
64
62
  function mergeRecordConfig(inherited, local) {
65
63
  if (!inherited && !local)
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeRendererConfig.js","sourceRoot":"","sources":["../src/RuntimeRendererConfig.tsx"],"names":[],"mappings":"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","sourcesContent":["import type {\n Action,\n ApiDefinitionList,\n ComponentDataBindingRegistry,\n ComponentEventDto,\n DataSourceDiagnostic,\n DbAdapter,\n DbRealtimeAdapter,\n MediaAssetRegistry,\n StateAdapter,\n UiNode,\n} from '@ankhorage/contracts';\nimport type {\n RuntimeNodePropsResolver,\n RuntimeResolveNodePropsArgs,\n} from '@ankhorage/contracts/runtime';\nimport React, { createContext, useContext } from 'react';\n\nimport type { ComponentRegistry } from './registry';\nimport type {\n RuntimeBindingOperationExecutor,\n RuntimeBindingOperationResultCache,\n RuntimeBindingOperationResultWriter,\n} from './runtimeBindings';\nimport type { RuntimeMediaAssetResolver } from './runtimeMedia';\n\nexport type {\n RuntimeNodePropsResolver,\n RuntimeResolveNodePropsArgs,\n} from '@ankhorage/contracts/runtime';\n\nexport interface RuntimeRendererWrapArgs {\n node: UiNode;\n rendered: React.ReactNode;\n isRoot: boolean;\n}\n\nexport interface RuntimeActionHandlerArgs {\n action: RuntimeAction;\n event?: ComponentEventDto<string, object>;\n node?: UiNode;\n resolvedPayload?: object;\n}\n\nexport type RuntimeAction = Action | { readonly type: string; readonly payload?: object };\nexport type RuntimeActionHandler = (args: RuntimeActionHandlerArgs) => Promise<void> | void;\nexport type RuntimeActionHandlers = Record<string, RuntimeActionHandler>;\nexport type RuntimeActionExecutor = RuntimeActionHandler;\n\nexport interface RuntimeRendererConfig {\n disableActions?: boolean;\n registry?: ComponentRegistry;\n wrapNode?: (args: RuntimeRendererWrapArgs) => React.ReactNode;\n resolveNodeProps?: RuntimeNodePropsResolver;\n resolveMediaAsset?: RuntimeMediaAssetResolver;\n mediaAssets?: MediaAssetRegistry;\n actionHandlers?: RuntimeActionHandlers;\n dbAdapter?: DbAdapter;\n dbRealtimeAdapter?: DbRealtimeAdapter;\n stateAdapter?: StateAdapter;\n bindingContext?: Record<string, unknown>;\n apis?: ApiDefinitionList;\n dataBindings?: ComponentDataBindingRegistry;\n operationResults?: RuntimeBindingOperationResultCache;\n writeOperationResult?: RuntimeBindingOperationResultWriter;\n executeAction?: RuntimeActionExecutor;\n executeOperation?: RuntimeBindingOperationExecutor;\n onDiagnostics?: (diagnostics: readonly DataSourceDiagnostic[]) => void;\n}\n\nconst EMPTY_RUNTIME_RENDERER_CONFIG: RuntimeRendererConfig = {};\n\nconst RuntimeRendererConfigContext = createContext<RuntimeRendererConfig>(\n EMPTY_RUNTIME_RENDERER_CONFIG,\n);\n\nexport function composeRuntimeRendererWrapNode(\n innerWrapNode?: RuntimeRendererConfig['wrapNode'],\n outerWrapNode?: RuntimeRendererConfig['wrapNode'],\n): RuntimeRendererConfig['wrapNode'] {\n if (!innerWrapNode) {\n return outerWrapNode;\n }\n\n if (!outerWrapNode) {\n return innerWrapNode;\n }\n\n return (args) => outerWrapNode({ ...args, rendered: innerWrapNode(args) });\n}\n\nexport function composeRuntimeNodePropsResolver(\n localResolver?: RuntimeRendererConfig['resolveNodeProps'],\n inheritedResolver?: RuntimeRendererConfig['resolveNodeProps'],\n): RuntimeRendererConfig['resolveNodeProps'] {\n if (!localResolver) {\n return inheritedResolver;\n }\n\n if (!inheritedResolver) {\n return localResolver;\n }\n\n return (args) => {\n const inheritedProps = inheritedResolver(args);\n return localResolver({ ...args, props: inheritedProps });\n };\n}\n\nexport function mergeRuntimeRendererConfig(\n localConfig: RuntimeRendererConfig | undefined,\n inheritedConfig: RuntimeRendererConfig | undefined,\n): RuntimeRendererConfig {\n if (!localConfig && !inheritedConfig) {\n return EMPTY_RUNTIME_RENDERER_CONFIG;\n }\n\n const actionHandlers = mergeRecordConfig(\n inheritedConfig?.actionHandlers,\n localConfig?.actionHandlers,\n );\n const bindingContext = mergeRecordConfig(\n inheritedConfig?.bindingContext,\n localConfig?.bindingContext,\n );\n const operationResults = mergeRecordConfig(\n inheritedConfig?.operationResults,\n localConfig?.operationResults,\n );\n\n return {\n disableActions:\n localConfig?.disableActions === true || inheritedConfig?.disableActions === true,\n registry: localConfig?.registry ?? inheritedConfig?.registry,\n wrapNode: composeRuntimeRendererWrapNode(localConfig?.wrapNode, inheritedConfig?.wrapNode),\n resolveNodeProps: composeRuntimeNodePropsResolver(\n localConfig?.resolveNodeProps,\n inheritedConfig?.resolveNodeProps,\n ),\n resolveMediaAsset: localConfig?.resolveMediaAsset ?? inheritedConfig?.resolveMediaAsset,\n mediaAssets: localConfig?.mediaAssets ?? inheritedConfig?.mediaAssets,\n actionHandlers,\n dbAdapter: localConfig?.dbAdapter ?? inheritedConfig?.dbAdapter,\n dbRealtimeAdapter: localConfig?.dbRealtimeAdapter ?? inheritedConfig?.dbRealtimeAdapter,\n stateAdapter: localConfig?.stateAdapter ?? inheritedConfig?.stateAdapter,\n bindingContext,\n apis: localConfig?.apis ?? inheritedConfig?.apis,\n dataBindings: localConfig?.dataBindings ?? inheritedConfig?.dataBindings,\n operationResults,\n writeOperationResult:\n localConfig?.writeOperationResult ?? inheritedConfig?.writeOperationResult,\n executeAction: localConfig?.executeAction ?? inheritedConfig?.executeAction,\n executeOperation: localConfig?.executeOperation ?? inheritedConfig?.executeOperation,\n onDiagnostics: localConfig?.onDiagnostics ?? inheritedConfig?.onDiagnostics,\n };\n}\n\nexport function RuntimeRendererConfigProvider(props: {\n value: RuntimeRendererConfig;\n children: React.ReactNode;\n}) {\n const { value, children } = props;\n const inheritedConfig = useContext(RuntimeRendererConfigContext);\n const mergedConfig = mergeRuntimeRendererConfig(value, inheritedConfig);\n\n return (\n <RuntimeRendererConfigContext.Provider value={mergedConfig}>\n {children}\n </RuntimeRendererConfigContext.Provider>\n );\n}\n\nexport function useRuntimeRendererConfig(): RuntimeRendererConfig {\n return useContext(RuntimeRendererConfigContext);\n}\n\nfunction mergeRecordConfig<TValue>(\n inherited: Readonly<Record<string, TValue>> | undefined,\n local: Readonly<Record<string, TValue>> | undefined,\n): Record<string, TValue> | undefined {\n if (!inherited && !local) return undefined;\n\n return {\n ...(inherited ?? {}),\n ...(local ?? {}),\n };\n}\n"]}
1
+ {"version":3,"file":"RuntimeRendererConfig.js","sourceRoot":"","sources":["../src/RuntimeRendererConfig.tsx"],"names":[],"mappings":"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","sourcesContent":["import type {\n Action,\n ApiDefinitionList,\n ComponentDataBindingRegistry,\n ComponentEventDto,\n DataSourceDiagnostic,\n DbAdapter,\n DbRealtimeAdapter,\n MediaAssetRegistry,\n StateAdapter,\n UiNode,\n} from '@ankhorage/contracts';\nimport type { RuntimeNodePropsResolver } from '@ankhorage/contracts/runtime';\nimport React, { createContext, use } from 'react';\n\nimport type { ComponentRegistry } from './registry';\nimport type {\n RuntimeBindingOperationExecutor,\n RuntimeBindingOperationResultCache,\n RuntimeBindingOperationResultWriter,\n} from './runtimeBindings';\nimport type { RuntimeMediaAssetResolver } from './runtimeMedia';\n\nexport type {\n RuntimeNodePropsResolver,\n RuntimeResolveNodePropsArgs,\n} from '@ankhorage/contracts/runtime';\n\nexport interface RuntimeRendererWrapArgs {\n node: UiNode;\n rendered: React.ReactNode;\n isRoot: boolean;\n}\n\nexport interface RuntimeActionHandlerArgs {\n action: RuntimeAction;\n event?: ComponentEventDto<string, object>;\n node?: UiNode;\n resolvedPayload?: object;\n}\n\nexport type RuntimeAction = Action | { readonly type: string; readonly payload?: object };\nexport type RuntimeActionHandler = (args: RuntimeActionHandlerArgs) => Promise<void> | void;\nexport type RuntimeActionHandlers = Record<string, RuntimeActionHandler>;\nexport type RuntimeActionExecutor = RuntimeActionHandler;\n\nexport interface RuntimeRendererConfig {\n disableActions?: boolean;\n registry?: ComponentRegistry;\n wrapNode?: (args: RuntimeRendererWrapArgs) => React.ReactNode;\n resolveNodeProps?: RuntimeNodePropsResolver;\n resolveMediaAsset?: RuntimeMediaAssetResolver;\n mediaAssets?: MediaAssetRegistry;\n actionHandlers?: RuntimeActionHandlers;\n dbAdapter?: DbAdapter;\n dbRealtimeAdapter?: DbRealtimeAdapter;\n stateAdapter?: StateAdapter;\n bindingContext?: Record<string, unknown>;\n apis?: ApiDefinitionList;\n dataBindings?: ComponentDataBindingRegistry;\n operationResults?: RuntimeBindingOperationResultCache;\n writeOperationResult?: RuntimeBindingOperationResultWriter;\n executeAction?: RuntimeActionExecutor;\n executeOperation?: RuntimeBindingOperationExecutor;\n onDiagnostics?: (diagnostics: readonly DataSourceDiagnostic[]) => void;\n}\n\nconst EMPTY_RUNTIME_RENDERER_CONFIG: RuntimeRendererConfig = {};\n\nconst RuntimeRendererConfigContext = createContext<RuntimeRendererConfig>(\n EMPTY_RUNTIME_RENDERER_CONFIG,\n);\n\nexport function composeRuntimeRendererWrapNode(\n innerWrapNode?: RuntimeRendererConfig['wrapNode'],\n outerWrapNode?: RuntimeRendererConfig['wrapNode'],\n): RuntimeRendererConfig['wrapNode'] {\n if (!innerWrapNode) {\n return outerWrapNode;\n }\n\n if (!outerWrapNode) {\n return innerWrapNode;\n }\n\n return (args) => outerWrapNode({ ...args, rendered: innerWrapNode(args) });\n}\n\nexport function composeRuntimeNodePropsResolver(\n localResolver?: RuntimeRendererConfig['resolveNodeProps'],\n inheritedResolver?: RuntimeRendererConfig['resolveNodeProps'],\n): RuntimeRendererConfig['resolveNodeProps'] {\n if (!localResolver) {\n return inheritedResolver;\n }\n\n if (!inheritedResolver) {\n return localResolver;\n }\n\n return (args) => {\n const inheritedProps = inheritedResolver(args);\n return localResolver({ ...args, props: inheritedProps });\n };\n}\n\nexport function mergeRuntimeRendererConfig(\n localConfig: RuntimeRendererConfig | undefined,\n inheritedConfig: RuntimeRendererConfig | undefined,\n): RuntimeRendererConfig {\n if (!localConfig && !inheritedConfig) {\n return EMPTY_RUNTIME_RENDERER_CONFIG;\n }\n\n const actionHandlers = mergeRecordConfig(\n inheritedConfig?.actionHandlers,\n localConfig?.actionHandlers,\n );\n const bindingContext = mergeRecordConfig(\n inheritedConfig?.bindingContext,\n localConfig?.bindingContext,\n );\n const operationResults = mergeRecordConfig(\n inheritedConfig?.operationResults,\n localConfig?.operationResults,\n );\n\n return {\n disableActions:\n localConfig?.disableActions === true || inheritedConfig?.disableActions === true,\n registry: localConfig?.registry ?? inheritedConfig?.registry,\n wrapNode: composeRuntimeRendererWrapNode(localConfig?.wrapNode, inheritedConfig?.wrapNode),\n resolveNodeProps: composeRuntimeNodePropsResolver(\n localConfig?.resolveNodeProps,\n inheritedConfig?.resolveNodeProps,\n ),\n resolveMediaAsset: localConfig?.resolveMediaAsset ?? inheritedConfig?.resolveMediaAsset,\n mediaAssets: localConfig?.mediaAssets ?? inheritedConfig?.mediaAssets,\n actionHandlers,\n dbAdapter: localConfig?.dbAdapter ?? inheritedConfig?.dbAdapter,\n dbRealtimeAdapter: localConfig?.dbRealtimeAdapter ?? inheritedConfig?.dbRealtimeAdapter,\n stateAdapter: localConfig?.stateAdapter ?? inheritedConfig?.stateAdapter,\n bindingContext,\n apis: localConfig?.apis ?? inheritedConfig?.apis,\n dataBindings: localConfig?.dataBindings ?? inheritedConfig?.dataBindings,\n operationResults,\n writeOperationResult:\n localConfig?.writeOperationResult ?? inheritedConfig?.writeOperationResult,\n executeAction: localConfig?.executeAction ?? inheritedConfig?.executeAction,\n executeOperation: localConfig?.executeOperation ?? inheritedConfig?.executeOperation,\n onDiagnostics: localConfig?.onDiagnostics ?? inheritedConfig?.onDiagnostics,\n };\n}\n\nexport function RuntimeRendererConfigProvider(props: {\n value: RuntimeRendererConfig;\n children: React.ReactNode;\n}) {\n const { value, children } = props;\n const inheritedConfig = use(RuntimeRendererConfigContext);\n const mergedConfig = mergeRuntimeRendererConfig(value, inheritedConfig);\n\n return (\n <RuntimeRendererConfigContext value={mergedConfig}>{children}</RuntimeRendererConfigContext>\n );\n}\n\nexport function useRuntimeRendererConfig(): RuntimeRendererConfig {\n return use(RuntimeRendererConfigContext);\n}\n\nfunction mergeRecordConfig<TValue>(\n inherited: Readonly<Record<string, TValue>> | undefined,\n local: Readonly<Record<string, TValue>> | undefined,\n): Record<string, TValue> | undefined {\n if (!inherited && !local) return undefined;\n\n return {\n ...(inherited ?? {}),\n ...(local ?? {}),\n };\n}\n"]}
@@ -8,7 +8,7 @@ export function RuntimeScreen(props) {
8
8
  const runtimeConfig = useRuntimeRendererConfig();
9
9
  const fallbackStateAdapter = React.useMemo(() => createRuntimeMemoryStateAdapter(), []);
10
10
  const stateAdapter = injectedStateAdapter ?? fallbackStateAdapter;
11
- const apis = manifest.infra?.apis;
11
+ const { apis } = manifest.infra;
12
12
  const screenOperationLoaders = useRuntimeScreenOperationLoaders({
13
13
  apis,
14
14
  bindingContext: runtimeConfig.bindingContext,
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeScreen.js","sourceRoot":"","sources":["../src/RuntimeScreen.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AASxE,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,oBAAoB,EAAE,GAAG,KAAK,CAAC;IACjF,MAAM,aAAa,GAAG,wBAAwB,EAAE,CAAC;IACjD,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,+BAA+B,EAAE,EAAE,EAAE,CAAC,CAAC;IACxF,MAAM,YAAY,GAAG,oBAAoB,IAAI,oBAAoB,CAAC;IAClE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IAClC,MAAM,sBAAsB,GAAG,gCAAgC,CAAC;QAC9D,IAAI;QACJ,cAAc,EAAE,aAAa,CAAC,cAAc;QAC5C,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;QAChD,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;QAChD,aAAa,EAAE,aAAa,CAAC,aAAa;QAC1C,MAAM;KACP,CAAC,CAAC;IAEH,OAAO,CACL,CAAC,eAAe,CACd,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,sBAAsB,CAAC,aAAa,EAAE,CAAC,CAC5D,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAClB,MAAM,CACN,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,YAAY,CAAC,CAAC,YAAY,CAAC,CAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,CACX,YAAY,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CACpC,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CACpC,gBAAgB,CAAC,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,EAC1D,CACH,CAAC;AACJ,CAAC","sourcesContent":["import type { AppManifest, ScreenSpec, StateAdapter } from '@ankhorage/contracts';\nimport React from 'react';\n\nimport type { ComponentRegistry } from './registry';\nimport { RuntimeRenderer } from './RuntimeRenderer';\nimport { useRuntimeRendererConfig } from './RuntimeRendererConfig';\nimport { useRuntimeScreenOperationLoaders } from './runtimeScreenLoaders';\nimport { createRuntimeMemoryStateAdapter } from './runtimeStateAdapter';\n\nexport interface RuntimeScreenProps {\n readonly manifest: AppManifest;\n readonly screen: ScreenSpec;\n readonly registry?: ComponentRegistry;\n readonly stateAdapter?: StateAdapter;\n}\n\nexport function RuntimeScreen(props: RuntimeScreenProps) {\n const { manifest, screen, registry, stateAdapter: injectedStateAdapter } = props;\n const runtimeConfig = useRuntimeRendererConfig();\n const fallbackStateAdapter = React.useMemo(() => createRuntimeMemoryStateAdapter(), []);\n const stateAdapter = injectedStateAdapter ?? fallbackStateAdapter;\n const apis = manifest.infra?.apis;\n const screenOperationLoaders = useRuntimeScreenOperationLoaders({\n apis,\n bindingContext: runtimeConfig.bindingContext,\n executeOperation: runtimeConfig.executeOperation,\n operationResults: runtimeConfig.operationResults,\n onDiagnostics: runtimeConfig.onDiagnostics,\n screen,\n });\n\n return (\n <RuntimeRenderer\n key={`${screen.id}:${screenOperationLoaders.renderVersion}`}\n node={screen.root}\n isRoot\n registry={registry}\n stateAdapter={stateAdapter}\n apis={apis}\n dataBindings={manifest.dataBindings}\n mediaAssets={manifest.media?.assets}\n operationResults={screenOperationLoaders.operationResults}\n />\n );\n}\n"]}
1
+ {"version":3,"file":"RuntimeScreen.js","sourceRoot":"","sources":["../src/RuntimeScreen.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AASxE,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,oBAAoB,EAAE,GAAG,KAAK,CAAC;IACjF,MAAM,aAAa,GAAG,wBAAwB,EAAE,CAAC;IACjD,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,+BAA+B,EAAE,EAAE,EAAE,CAAC,CAAC;IACxF,MAAM,YAAY,GAAG,oBAAoB,IAAI,oBAAoB,CAAC;IAClE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;IAChC,MAAM,sBAAsB,GAAG,gCAAgC,CAAC;QAC9D,IAAI;QACJ,cAAc,EAAE,aAAa,CAAC,cAAc;QAC5C,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;QAChD,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;QAChD,aAAa,EAAE,aAAa,CAAC,aAAa;QAC1C,MAAM;KACP,CAAC,CAAC;IAEH,OAAO,CACL,CAAC,eAAe,CACd,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,sBAAsB,CAAC,aAAa,EAAE,CAAC,CAC5D,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAClB,MAAM,CACN,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,YAAY,CAAC,CAAC,YAAY,CAAC,CAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,CACX,YAAY,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CACpC,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CACpC,gBAAgB,CAAC,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,EAC1D,CACH,CAAC;AACJ,CAAC","sourcesContent":["import type { AppManifest, ScreenSpec, StateAdapter } from '@ankhorage/contracts';\nimport React from 'react';\n\nimport type { ComponentRegistry } from './registry';\nimport { RuntimeRenderer } from './RuntimeRenderer';\nimport { useRuntimeRendererConfig } from './RuntimeRendererConfig';\nimport { useRuntimeScreenOperationLoaders } from './runtimeScreenLoaders';\nimport { createRuntimeMemoryStateAdapter } from './runtimeStateAdapter';\n\nexport interface RuntimeScreenProps {\n readonly manifest: AppManifest;\n readonly screen: ScreenSpec;\n readonly registry?: ComponentRegistry;\n readonly stateAdapter?: StateAdapter;\n}\n\nexport function RuntimeScreen(props: RuntimeScreenProps) {\n const { manifest, screen, registry, stateAdapter: injectedStateAdapter } = props;\n const runtimeConfig = useRuntimeRendererConfig();\n const fallbackStateAdapter = React.useMemo(() => createRuntimeMemoryStateAdapter(), []);\n const stateAdapter = injectedStateAdapter ?? fallbackStateAdapter;\n const { apis } = manifest.infra;\n const screenOperationLoaders = useRuntimeScreenOperationLoaders({\n apis,\n bindingContext: runtimeConfig.bindingContext,\n executeOperation: runtimeConfig.executeOperation,\n operationResults: runtimeConfig.operationResults,\n onDiagnostics: runtimeConfig.onDiagnostics,\n screen,\n });\n\n return (\n <RuntimeRenderer\n key={`${screen.id}:${screenOperationLoaders.renderVersion}`}\n node={screen.root}\n isRoot\n registry={registry}\n stateAdapter={stateAdapter}\n apis={apis}\n dataBindings={manifest.dataBindings}\n mediaAssets={manifest.media?.assets}\n operationResults={screenOperationLoaders.operationResults}\n />\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeMediaCache.d.ts","sourceRoot":"","sources":["../src/runtimeMediaCache.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6C,MAAM,OAAO,CAAC;AAElE,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,gBAAgB,CAAC;AAIxB,wBAAgB,8BAA8B,IAAI,2BAA2B,CAI5E;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE;IACzD,QAAQ,CAAC,KAAK,EAAE,2BAA2B,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CACpC,qBAMA"}
1
+ {"version":3,"file":"runtimeMediaCache.d.ts","sourceRoot":"","sources":["../src/runtimeMediaCache.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,gBAAgB,CAAC;AAIxB,wBAAgB,8BAA8B,IAAI,2BAA2B,CAI5E;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE;IACzD,QAAQ,CAAC,KAAK,EAAE,2BAA2B,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CACpC,qBAEA"}
@@ -1,14 +1,12 @@
1
- import React, { createContext, useContext, useMemo } from 'react';
1
+ import React, { createContext, use, useMemo } from 'react';
2
2
  import { createRuntimeMediaResolutionCache, } from './runtimeMedia';
3
3
  const RuntimeMediaCacheContext = createContext(null);
4
4
  export function useRuntimeMediaResolutionCache() {
5
- const inherited = useContext(RuntimeMediaCacheContext);
5
+ const inherited = use(RuntimeMediaCacheContext);
6
6
  const local = useMemo(() => createRuntimeMediaResolutionCache(), []);
7
7
  return inherited ?? local;
8
8
  }
9
9
  export function RuntimeMediaResolutionCacheProvider(props) {
10
- return (<RuntimeMediaCacheContext.Provider value={props.value}>
11
- {props.children}
12
- </RuntimeMediaCacheContext.Provider>);
10
+ return <RuntimeMediaCacheContext value={props.value}>{props.children}</RuntimeMediaCacheContext>;
13
11
  }
14
12
  //# sourceMappingURL=runtimeMediaCache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeMediaCache.js","sourceRoot":"","sources":["../src/runtimeMediaCache.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAElE,OAAO,EACL,iCAAiC,GAElC,MAAM,gBAAgB,CAAC;AAExB,MAAM,wBAAwB,GAAG,aAAa,CAAqC,IAAI,CAAC,CAAC;AAEzF,MAAM,UAAU,8BAA8B;IAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,wBAAwB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,iCAAiC,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,OAAO,SAAS,IAAI,KAAK,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,mCAAmC,CAAC,KAGnD;IACC,OAAO,CACL,CAAC,wBAAwB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CACpD;MAAA,CAAC,KAAK,CAAC,QAAQ,CACjB;IAAA,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CACrC,CAAC;AACJ,CAAC","sourcesContent":["import React, { createContext, useContext, useMemo } from 'react';\n\nimport {\n createRuntimeMediaResolutionCache,\n type RuntimeMediaResolutionCache,\n} from './runtimeMedia';\n\nconst RuntimeMediaCacheContext = createContext<RuntimeMediaResolutionCache | null>(null);\n\nexport function useRuntimeMediaResolutionCache(): RuntimeMediaResolutionCache {\n const inherited = useContext(RuntimeMediaCacheContext);\n const local = useMemo(() => createRuntimeMediaResolutionCache(), []);\n return inherited ?? local;\n}\n\nexport function RuntimeMediaResolutionCacheProvider(props: {\n readonly value: RuntimeMediaResolutionCache;\n readonly children: React.ReactNode;\n}) {\n return (\n <RuntimeMediaCacheContext.Provider value={props.value}>\n {props.children}\n </RuntimeMediaCacheContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"file":"runtimeMediaCache.js","sourceRoot":"","sources":["../src/runtimeMediaCache.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EACL,iCAAiC,GAElC,MAAM,gBAAgB,CAAC;AAExB,MAAM,wBAAwB,GAAG,aAAa,CAAqC,IAAI,CAAC,CAAC;AAEzF,MAAM,UAAU,8BAA8B;IAC5C,MAAM,SAAS,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,iCAAiC,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,OAAO,SAAS,IAAI,KAAK,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,mCAAmC,CAAC,KAGnD;IACC,OAAO,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,wBAAwB,CAAC,CAAC;AACnG,CAAC","sourcesContent":["import React, { createContext, use, useMemo } from 'react';\n\nimport {\n createRuntimeMediaResolutionCache,\n type RuntimeMediaResolutionCache,\n} from './runtimeMedia';\n\nconst RuntimeMediaCacheContext = createContext<RuntimeMediaResolutionCache | null>(null);\n\nexport function useRuntimeMediaResolutionCache(): RuntimeMediaResolutionCache {\n const inherited = use(RuntimeMediaCacheContext);\n const local = useMemo(() => createRuntimeMediaResolutionCache(), []);\n return inherited ?? local;\n}\n\nexport function RuntimeMediaResolutionCacheProvider(props: {\n readonly value: RuntimeMediaResolutionCache;\n readonly children: React.ReactNode;\n}) {\n return <RuntimeMediaCacheContext value={props.value}>{props.children}</RuntimeMediaCacheContext>;\n}\n"]}
@@ -1,6 +1,10 @@
1
1
  import type { ApiDefinitionList, ComponentDataBindingRegistry, DbAdapter, DbRealtimeAdapter, StateAdapter, UiNode } from '@ankhorage/contracts';
2
2
  import { type RuntimeBindingOperationResultCache } from './runtimeBindings';
3
3
  import type { RuntimeAction, RuntimeRendererConfig } from './RuntimeRendererConfig';
4
+ interface RuntimeActionHandlerCacheEntry {
5
+ readonly handleAction: (action: RuntimeAction) => void;
6
+ readonly handler: (...args: unknown[]) => void;
7
+ }
4
8
  export declare function resolveRuntimeNodeProps(args: {
5
9
  node: UiNode;
6
10
  resolveNodeProps?: RuntimeRendererConfig['resolveNodeProps'];
@@ -16,7 +20,8 @@ export declare function wrapRuntimeActionProps(args: {
16
20
  props: Record<string, unknown>;
17
21
  disableActions: boolean;
18
22
  handleAction: (action: RuntimeAction) => void;
19
- actionHandlerCache: WeakMap<object, (...args: unknown[]) => void>;
23
+ actionHandlerCache: WeakMap<object, RuntimeActionHandlerCacheEntry>;
20
24
  functionHandlerCache: WeakMap<(...args: unknown[]) => unknown, (...args: unknown[]) => unknown>;
21
25
  }): Record<string, unknown>;
26
+ export {};
22
27
  //# sourceMappingURL=runtimeNodeProps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeNodeProps.d.ts","sourceRoot":"","sources":["../src/runtimeNodeProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,4BAA4B,EAC5B,SAAS,EACT,iBAAiB,EACjB,YAAY,EACZ,MAAM,EACP,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAA0B,KAAK,kCAAkC,EAAE,MAAM,mBAAmB,CAAC;AACpG,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAuEpF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;IAC7D,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,gBAAgB,CAAC,EAAE,kCAAkC,CAAC;CACvD,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+B1B;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,kBAAkB,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;IAClE,oBAAoB,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,CAAC;CACjG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqD1B"}
1
+ {"version":3,"file":"runtimeNodeProps.d.ts","sourceRoot":"","sources":["../src/runtimeNodeProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,4BAA4B,EAC5B,SAAS,EACT,iBAAiB,EACjB,YAAY,EACZ,MAAM,EACP,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAA0B,KAAK,kCAAkC,EAAE,MAAM,mBAAmB,CAAC;AACpG,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEpF,UAAU,8BAA8B;IACtC,QAAQ,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IACvD,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CAChD;AAuED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;IAC7D,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,gBAAgB,CAAC,EAAE,kCAAkC,CAAC;CACvD,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+B1B;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,kBAAkB,EAAE,OAAO,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;IACpE,oBAAoB,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,CAAC;CACjG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsD1B"}
@@ -95,14 +95,15 @@ export function wrapRuntimeActionProps(args) {
95
95
  }
96
96
  if (hasActionShape(value)) {
97
97
  const actionObject = value;
98
- let actionHandler = actionHandlerCache.get(actionObject);
99
- if (!actionHandler) {
100
- actionHandler = () => {
98
+ let cachedActionHandler = actionHandlerCache.get(actionObject);
99
+ if (cachedActionHandler?.handleAction !== handleAction) {
100
+ const actionHandler = () => {
101
101
  handleAction(actionObject);
102
102
  };
103
- actionHandlerCache.set(actionObject, actionHandler);
103
+ cachedActionHandler = { handleAction, handler: actionHandler };
104
+ actionHandlerCache.set(actionObject, cachedActionHandler);
104
105
  }
105
- wrappedProps[key] = actionHandler;
106
+ wrappedProps[key] = cachedActionHandler.handler;
106
107
  return;
107
108
  }
108
109
  if (isNonEmptyActionId(value)) {