@ankhorage/runtime 1.0.0 → 1.1.0

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 (41) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +2 -2
  3. package/dist/RuntimeRenderer.d.ts +4 -1
  4. package/dist/RuntimeRenderer.d.ts.map +1 -1
  5. package/dist/RuntimeRenderer.js +32 -13
  6. package/dist/RuntimeRenderer.js.map +1 -1
  7. package/dist/RuntimeRendererConfig.d.ts +4 -1
  8. package/dist/RuntimeRendererConfig.d.ts.map +1 -1
  9. package/dist/RuntimeRendererConfig.js +2 -0
  10. package/dist/RuntimeRendererConfig.js.map +1 -1
  11. package/dist/RuntimeScreen.d.ts.map +1 -1
  12. package/dist/RuntimeScreen.js +1 -1
  13. package/dist/RuntimeScreen.js.map +1 -1
  14. package/dist/index.d.ts +1 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +0 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/readme-usage.js +1 -1
  19. package/dist/readme-usage.js.map +1 -1
  20. package/dist/runtimeMedia.d.ts +13 -0
  21. package/dist/runtimeMedia.d.ts.map +1 -0
  22. package/dist/runtimeMedia.js +80 -0
  23. package/dist/runtimeMedia.js.map +1 -0
  24. package/dist/runtimeMediaCache.d.ts +8 -0
  25. package/dist/runtimeMediaCache.d.ts.map +1 -0
  26. package/dist/runtimeMediaCache.js +14 -0
  27. package/dist/runtimeMediaCache.js.map +1 -0
  28. package/dist/useRuntimeMediaProps.d.ts +9 -0
  29. package/dist/useRuntimeMediaProps.d.ts.map +1 -0
  30. package/dist/useRuntimeMediaProps.js +61 -0
  31. package/dist/useRuntimeMediaProps.js.map +1 -0
  32. package/package.json +4 -3
  33. package/paradox/badges/npm.svg +3 -3
  34. package/paradox/components.md +4 -2
  35. package/paradox/diagrams/architecture-overview.mmd +18 -0
  36. package/paradox/diagrams/export-graph.mmd +13 -19
  37. package/paradox/diagrams/module-relationships.mmd +13 -0
  38. package/paradox/exports.json +116 -213
  39. package/paradox/exports.md +120 -163
  40. package/paradox/index.html +500 -305
  41. package/paradox/paradox.json +674 -319
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimeMedia.js","sourceRoot":"","sources":["../src/runtimeMedia.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isMediaAssetReference,\n type MediaAsset,\n type MediaAssetRegistry,\n} from '@ankhorage/contracts';\n\nexport type RuntimeResolvedMediaValue = string | number | Readonly<Record<string, unknown>>;\n\nexport interface RuntimeMediaAssetResolverArgs {\n readonly asset: MediaAsset;\n}\n\nexport type RuntimeMediaAssetResolver = (\n args: RuntimeMediaAssetResolverArgs,\n) => Promise<RuntimeResolvedMediaValue | null> | RuntimeResolvedMediaValue | null;\n\nexport type RuntimeMediaResolutionCache = WeakMap<\n MediaAsset,\n WeakMap<RuntimeMediaAssetResolver, Promise<RuntimeResolvedMediaValue | null>>\n>;\n\nconst OMIT_MEDIA_VALUE = Symbol('omit-runtime-media-value');\n\nexport function createRuntimeMediaResolutionCache(): RuntimeMediaResolutionCache {\n return new WeakMap();\n}\n\nexport function collectRuntimeMediaReferenceIds(value: unknown): readonly string[] {\n const ids = new Set<string>();\n collectMediaReferenceIds(value, ids);\n return [...ids].sort();\n}\n\nexport function replaceRuntimeMediaReferences(\n value: unknown,\n resolvedById: ReadonlyMap<string, RuntimeResolvedMediaValue>,\n): unknown {\n const replaced = replaceMediaValue(value, resolvedById);\n return replaced === OMIT_MEDIA_VALUE ? undefined : replaced;\n}\n\nexport function resolveRuntimeMediaAsset(\n asset: MediaAsset,\n resolver: RuntimeMediaAssetResolver | undefined,\n cache: RuntimeMediaResolutionCache,\n): Promise<RuntimeResolvedMediaValue | null> {\n if (asset.source.kind === 'url') return Promise.resolve(asset.source.url);\n if (!resolver) return Promise.resolve(null);\n\n let resolverCache = cache.get(asset);\n if (!resolverCache) {\n resolverCache = new WeakMap();\n cache.set(asset, resolverCache);\n }\n\n const cached = resolverCache.get(resolver);\n if (cached) return cached;\n\n const pending = Promise.resolve(resolver({ asset })).catch(() => null);\n resolverCache.set(resolver, pending);\n return pending;\n}\n\nexport function createSyncRuntimeMediaResolutionMap(\n ids: readonly string[],\n mediaAssets: MediaAssetRegistry | undefined,\n): Map<string, RuntimeResolvedMediaValue> {\n const resolved = new Map<string, RuntimeResolvedMediaValue>();\n\n for (const id of ids) {\n const asset = mediaAssets?.[id];\n if (asset?.source.kind === 'url') resolved.set(id, asset.source.url);\n }\n\n return resolved;\n}\n\nfunction collectMediaReferenceIds(value: unknown, ids: Set<string>): void {\n if (isMediaAssetReference(value)) {\n ids.add(value.mediaId.trim());\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item) => collectMediaReferenceIds(item, ids));\n return;\n }\n\n if (!isPlainObject(value)) return;\n Object.values(value).forEach((item) => collectMediaReferenceIds(item, ids));\n}\n\nfunction replaceMediaValue(\n value: unknown,\n resolvedById: ReadonlyMap<string, RuntimeResolvedMediaValue>,\n): unknown {\n if (isMediaAssetReference(value)) {\n return resolvedById.get(value.mediaId.trim()) ?? OMIT_MEDIA_VALUE;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => {\n const replaced = replaceMediaValue(item, resolvedById);\n return replaced === OMIT_MEDIA_VALUE ? undefined : replaced;\n });\n }\n\n if (!isPlainObject(value)) return value;\n\n const result: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) {\n const replaced = replaceMediaValue(item, resolvedById);\n if (replaced !== OMIT_MEDIA_VALUE) result[key] = replaced;\n }\n return result;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n const prototype = Reflect.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { type RuntimeMediaResolutionCache } from './runtimeMedia';
3
+ export declare function useRuntimeMediaResolutionCache(): RuntimeMediaResolutionCache;
4
+ export declare function RuntimeMediaResolutionCacheProvider(props: {
5
+ readonly value: RuntimeMediaResolutionCache;
6
+ readonly children: React.ReactNode;
7
+ }): React.JSX.Element;
8
+ //# sourceMappingURL=runtimeMediaCache.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,14 @@
1
+ import React, { createContext, useContext, useMemo } from 'react';
2
+ import { createRuntimeMediaResolutionCache, } from './runtimeMedia';
3
+ const RuntimeMediaCacheContext = createContext(null);
4
+ export function useRuntimeMediaResolutionCache() {
5
+ const inherited = useContext(RuntimeMediaCacheContext);
6
+ const local = useMemo(() => createRuntimeMediaResolutionCache(), []);
7
+ return inherited ?? local;
8
+ }
9
+ export function RuntimeMediaResolutionCacheProvider(props) {
10
+ return (<RuntimeMediaCacheContext.Provider value={props.value}>
11
+ {props.children}
12
+ </RuntimeMediaCacheContext.Provider>);
13
+ }
14
+ //# sourceMappingURL=runtimeMediaCache.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,9 @@
1
+ import type { MediaAssetRegistry } from '@ankhorage/contracts';
2
+ import { type RuntimeMediaAssetResolver, type RuntimeMediaResolutionCache } from './runtimeMedia';
3
+ export declare function useRuntimeMediaProps(args: {
4
+ readonly props: Record<string, unknown>;
5
+ readonly mediaAssets?: MediaAssetRegistry;
6
+ readonly resolveMediaAsset?: RuntimeMediaAssetResolver;
7
+ readonly cache: RuntimeMediaResolutionCache;
8
+ }): Record<string, unknown>;
9
+ //# sourceMappingURL=useRuntimeMediaProps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRuntimeMediaProps.d.ts","sourceRoot":"","sources":["../src/useRuntimeMediaProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,EAKL,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAEjC,MAAM,gBAAgB,CAAC;AAExB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,2BAA2B,CAAC;CAC7C,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyC1B"}
@@ -0,0 +1,61 @@
1
+ import React from 'react';
2
+ import { collectRuntimeMediaReferenceIds, createSyncRuntimeMediaResolutionMap, replaceRuntimeMediaReferences, resolveRuntimeMediaAsset, } from './runtimeMedia';
3
+ export function useRuntimeMediaProps(args) {
4
+ const ids = collectRuntimeMediaReferenceIds(args.props);
5
+ const idsKey = ids.join('\u0000');
6
+ const [asyncResolved, setAsyncResolved] = React.useState(() => new Map());
7
+ React.useEffect(() => {
8
+ let active = true;
9
+ const effectIds = idsKey.length === 0 ? [] : idsKey.split('\u0000');
10
+ const currentIds = new Set(effectIds);
11
+ setAsyncResolved((current) => filterResolvedValues(current, currentIds));
12
+ for (const id of effectIds) {
13
+ const asset = args.mediaAssets?.[id];
14
+ if (!asset || asset.source.kind === 'url')
15
+ continue;
16
+ void resolveRuntimeMediaAsset(asset, args.resolveMediaAsset, args.cache).then((value) => {
17
+ if (!active || value === null)
18
+ return;
19
+ setAsyncResolved((current) => {
20
+ if (current.get(id) === value)
21
+ return current;
22
+ const next = new Map(current);
23
+ next.set(id, value);
24
+ return next;
25
+ });
26
+ });
27
+ }
28
+ return () => {
29
+ active = false;
30
+ };
31
+ }, [args.cache, args.mediaAssets, args.resolveMediaAsset, idsKey]);
32
+ const resolved = createSyncRuntimeMediaResolutionMap(ids, args.mediaAssets);
33
+ const currentIds = new Set(ids);
34
+ asyncResolved.forEach((value, id) => {
35
+ if (currentIds.has(id))
36
+ resolved.set(id, value);
37
+ });
38
+ const replaced = replaceRuntimeMediaReferences(args.props, resolved);
39
+ return isRecord(replaced) ? replaced : {};
40
+ }
41
+ function filterResolvedValues(current, ids) {
42
+ const next = new Map();
43
+ current.forEach((value, id) => {
44
+ if (ids.has(id))
45
+ next.set(id, value);
46
+ });
47
+ return mapsEqual(current, next) ? current : next;
48
+ }
49
+ function mapsEqual(left, right) {
50
+ if (left.size !== right.size)
51
+ return false;
52
+ for (const [key, value] of left) {
53
+ if (right.get(key) !== value)
54
+ return false;
55
+ }
56
+ return true;
57
+ }
58
+ function isRecord(value) {
59
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
60
+ }
61
+ //# sourceMappingURL=useRuntimeMediaProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRuntimeMediaProps.js","sourceRoot":"","sources":["../src/useRuntimeMediaProps.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MediaAssetRegistry } from '@ankhorage/contracts';\nimport React from 'react';\n\nimport {\n collectRuntimeMediaReferenceIds,\n createSyncRuntimeMediaResolutionMap,\n replaceRuntimeMediaReferences,\n resolveRuntimeMediaAsset,\n type RuntimeMediaAssetResolver,\n type RuntimeMediaResolutionCache,\n type RuntimeResolvedMediaValue,\n} from './runtimeMedia';\n\nexport function useRuntimeMediaProps(args: {\n readonly props: Record<string, unknown>;\n readonly mediaAssets?: MediaAssetRegistry;\n readonly resolveMediaAsset?: RuntimeMediaAssetResolver;\n readonly cache: RuntimeMediaResolutionCache;\n}): Record<string, unknown> {\n const ids = collectRuntimeMediaReferenceIds(args.props);\n const idsKey = ids.join('\\u0000');\n const [asyncResolved, setAsyncResolved] = React.useState(\n () => new Map<string, RuntimeResolvedMediaValue>(),\n );\n\n React.useEffect(() => {\n let active = true;\n const effectIds = idsKey.length === 0 ? [] : idsKey.split('\\u0000');\n const currentIds = new Set(effectIds);\n setAsyncResolved((current) => filterResolvedValues(current, currentIds));\n\n for (const id of effectIds) {\n const asset = args.mediaAssets?.[id];\n if (!asset || asset.source.kind === 'url') continue;\n\n void resolveRuntimeMediaAsset(asset, args.resolveMediaAsset, args.cache).then((value) => {\n if (!active || value === null) return;\n setAsyncResolved((current) => {\n if (current.get(id) === value) return current;\n const next = new Map(current);\n next.set(id, value);\n return next;\n });\n });\n }\n\n return () => {\n active = false;\n };\n }, [args.cache, args.mediaAssets, args.resolveMediaAsset, idsKey]);\n\n const resolved = createSyncRuntimeMediaResolutionMap(ids, args.mediaAssets);\n const currentIds = new Set(ids);\n asyncResolved.forEach((value, id) => {\n if (currentIds.has(id)) resolved.set(id, value);\n });\n\n const replaced = replaceRuntimeMediaReferences(args.props, resolved);\n return isRecord(replaced) ? replaced : {};\n}\n\nfunction filterResolvedValues(\n current: Map<string, RuntimeResolvedMediaValue>,\n ids: ReadonlySet<string>,\n): Map<string, RuntimeResolvedMediaValue> {\n const next = new Map<string, RuntimeResolvedMediaValue>();\n current.forEach((value, id) => {\n if (ids.has(id)) next.set(id, value);\n });\n return mapsEqual(current, next) ? current : next;\n}\n\nfunction mapsEqual(\n left: ReadonlyMap<string, RuntimeResolvedMediaValue>,\n right: ReadonlyMap<string, RuntimeResolvedMediaValue>,\n): boolean {\n if (left.size !== right.size) return false;\n for (const [key, value] of left) {\n if (right.get(key) !== value) return false;\n }\n return true;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ankhorage/runtime",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Platform-neutral runtime renderer, contracts, and helpers for Ankhorage generated apps.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -19,6 +19,7 @@
19
19
  "runtime",
20
20
  "manifest",
21
21
  "bindings",
22
+ "media",
22
23
  "adapters",
23
24
  "typescript"
24
25
  ],
@@ -59,7 +60,7 @@
59
60
  "version-packages": "changeset version"
60
61
  },
61
62
  "dependencies": {
62
- "@ankhorage/contracts": "^4.0.2",
63
+ "@ankhorage/contracts": "^7.4.0",
63
64
  "@ankhorage/data-sources": "^1.0.0"
64
65
  },
65
66
  "peerDependencies": {
@@ -68,7 +69,7 @@
68
69
  },
69
70
  "devDependencies": {
70
71
  "@ankhorage/devtools": "^1.0.6",
71
- "@ankhorage/paradox": "^0.1.10",
72
+ "@ankhorage/paradox": "^0.1.21",
72
73
  "@changesets/cli": "^2.31.0",
73
74
  "@types/bun": "^1.3.13",
74
75
  "@types/node": "^25.6.0",
@@ -1,7 +1,7 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="90" height="20" role="img" aria-label="npm: v0.3.0">
2
- <title>npm: v0.3.0</title>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="90" height="20" role="img" aria-label="npm: v1.0.0">
2
+ <title>npm: v1.0.0</title>
3
3
  <rect width="38" height="20" fill="#374151"/>
4
4
  <rect x="38" width="52" height="20" fill="#cb3837"/>
5
5
  <text x="19" y="14" fill="#ffffff" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" font-size="11" text-anchor="middle">npm</text>
6
- <text x="64" y="14" fill="#ffffff" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" font-size="11" text-anchor="middle">v0.3.0</text>
6
+ <text x="64" y="14" fill="#ffffff" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" font-size="11" text-anchor="middle">v1.0.0</text>
7
7
  </svg>
@@ -26,7 +26,7 @@ Export paths: `src/index.ts`
26
26
 
27
27
  ## RuntimeRenderer
28
28
 
29
- Source: `src/RuntimeRenderer.tsx:67:1`
29
+ Source: `src/RuntimeRenderer.tsx:76:1`
30
30
 
31
31
  Export paths: `src/index.ts`
32
32
 
@@ -41,16 +41,18 @@ Export paths: `src/index.ts`
41
41
  | executeAction | `RuntimeActionExecutor \| undefined` | no | — | |
42
42
  | executeOperation | `RuntimeBindingOperationExecutor \| undefined` | no | — | |
43
43
  | isRoot | `boolean \| undefined` | no | — | |
44
+ | mediaAssets | `MediaAssetRegistry \| undefined` | no | — | |
44
45
  | node | `UiNode` | yes | — | |
45
46
  | onDiagnostics | `(diagnostics: readonly DataSourceDiagnostic[]) => void \| undefined` | no | — | |
46
47
  | operationResults | `RuntimeBindingOperationResultCache \| undefined` | no | — | |
47
48
  | registry | `ComponentRegistry \| undefined` | no | — | |
49
+ | resolveMediaAsset | `RuntimeMediaAssetResolver \| undefined` | no | — | |
48
50
  | stateAdapter | `StateAdapter \| undefined` | no | — | |
49
51
  | wrapNode | `(args: RuntimeRendererWrapArgs) => React.ReactNode \| undefined` | no | — | |
50
52
 
51
53
  ## RuntimeRendererConfigProvider
52
54
 
53
- Source: `src/RuntimeRendererConfig.tsx:152:1`
55
+ Source: `src/RuntimeRendererConfig.tsx:158:1`
54
56
 
55
57
  Export paths: `src/index.ts`
56
58
 
@@ -61,6 +61,17 @@ graph TD
61
61
  module_src_runtimeEventExecution_ts --> module_src_RuntimeRendererConfig_tsx
62
62
  module_src_runtimeManifest_ts["src/runtimeManifest.ts"]
63
63
  package__ankhorage_runtime -.-> module_src_runtimeManifest_ts
64
+ module_src_runtimeMedia_test_ts["src/runtimeMedia.test.ts"]
65
+ package__ankhorage_runtime -.-> module_src_runtimeMedia_test_ts
66
+ module_src_runtimeMedia_test_ts --> module_src_runtimeMedia_ts
67
+ module_src_runtimeMedia_ts["src/runtimeMedia.ts"]
68
+ package__ankhorage_runtime -.-> module_src_runtimeMedia_ts
69
+ module_src_runtimeMediaCache_tsx["src/runtimeMediaCache.tsx"]
70
+ package__ankhorage_runtime -.-> module_src_runtimeMediaCache_tsx
71
+ module_src_runtimeMediaCache_tsx --> module_src_runtimeMedia_ts
72
+ module_src_runtimeMediaConfig_test_ts["src/runtimeMediaConfig.test.ts"]
73
+ package__ankhorage_runtime -.-> module_src_runtimeMediaConfig_test_ts
74
+ module_src_runtimeMediaConfig_test_ts --> module_src_RuntimeRendererConfig_tsx
64
75
  module_src_runtimeNodeProps_test_ts["src/runtimeNodeProps.test.ts"]
65
76
  package__ankhorage_runtime -.-> module_src_runtimeNodeProps_test_ts
66
77
  module_src_runtimeNodeProps_test_ts --> module_src_runtimeNodeProps_ts
@@ -81,11 +92,14 @@ graph TD
81
92
  module_src_RuntimeRenderer_tsx --> module_src_runtimeBindings_ts
82
93
  module_src_RuntimeRenderer_tsx --> module_src_runtimeDbPersist_ts
83
94
  module_src_RuntimeRenderer_tsx --> module_src_runtimeEventExecution_ts
95
+ module_src_RuntimeRenderer_tsx --> module_src_runtimeMedia_ts
96
+ module_src_RuntimeRenderer_tsx --> module_src_runtimeMediaCache_tsx
84
97
  module_src_RuntimeRenderer_tsx --> module_src_runtimeNodeProps_ts
85
98
  module_src_RuntimeRenderer_tsx --> module_src_RuntimeRendererConfig_tsx
86
99
  module_src_RuntimeRenderer_tsx --> module_src_runtimeRepeat_ts
87
100
  module_src_RuntimeRenderer_tsx --> module_src_runtimeRepeatDiagnostics_ts
88
101
  module_src_RuntimeRenderer_tsx --> module_src_runtimeRepeatEmptyState_ts
102
+ module_src_RuntimeRenderer_tsx --> module_src_useRuntimeMediaProps_ts
89
103
  module_src_RuntimeRendererConfig_test_tsx["src/RuntimeRendererConfig.test.tsx"]
90
104
  package__ankhorage_runtime -.-> module_src_RuntimeRendererConfig_test_tsx
91
105
  module_src_RuntimeRendererConfig_test_tsx --> module_src_RuntimeRendererConfig_tsx
@@ -93,6 +107,7 @@ graph TD
93
107
  package__ankhorage_runtime -.-> module_src_RuntimeRendererConfig_tsx
94
108
  module_src_RuntimeRendererConfig_tsx --> module_src_registry_tsx
95
109
  module_src_RuntimeRendererConfig_tsx --> module_src_runtimeBindings_ts
110
+ module_src_RuntimeRendererConfig_tsx --> module_src_runtimeMedia_ts
96
111
  module_src_runtimeRepeat_test_ts["src/runtimeRepeat.test.ts"]
97
112
  package__ankhorage_runtime -.-> module_src_runtimeRepeat_test_ts
98
113
  module_src_runtimeRepeat_test_ts --> module_src_runtimeActionRegistry_ts
@@ -130,6 +145,9 @@ graph TD
130
145
  module_src_runtimeStateAdapterConfig_test_ts --> module_src_runtimeBindings_ts
131
146
  module_src_runtimeStateAdapterConfig_test_ts --> module_src_runtimeNodeProps_ts
132
147
  module_src_runtimeStateAdapterConfig_test_ts --> module_src_RuntimeRendererConfig_tsx
148
+ module_src_useRuntimeMediaProps_ts["src/useRuntimeMediaProps.ts"]
149
+ package__ankhorage_runtime -.-> module_src_useRuntimeMediaProps_ts
150
+ module_src_useRuntimeMediaProps_ts --> module_src_runtimeMedia_ts
133
151
  module_tests_runtime_test_ts["tests/runtime.test.ts"]
134
152
  package__ankhorage_runtime -.-> module_tests_runtime_test_ts
135
153
  module_tests_runtime_test_ts --> module_src_runtimeManifest_ts
@@ -19,6 +19,10 @@ graph LR
19
19
  module_src_runtimeEventExecution_test_ts["src/runtimeEventExecution.test.ts"]
20
20
  module_src_runtimeEventExecution_ts["src/runtimeEventExecution.ts"]
21
21
  module_src_runtimeManifest_ts["src/runtimeManifest.ts"]
22
+ module_src_runtimeMedia_test_ts["src/runtimeMedia.test.ts"]
23
+ module_src_runtimeMedia_ts["src/runtimeMedia.ts"]
24
+ module_src_runtimeMediaCache_tsx["src/runtimeMediaCache.tsx"]
25
+ module_src_runtimeMediaConfig_test_ts["src/runtimeMediaConfig.test.ts"]
22
26
  module_src_runtimeNodeProps_test_ts["src/runtimeNodeProps.test.ts"]
23
27
  module_src_runtimeNodeProps_ts["src/runtimeNodeProps.ts"]
24
28
  module_src_runtimePackageIsolation_test_ts["src/runtimePackageIsolation.test.ts"]
@@ -36,6 +40,7 @@ graph LR
36
40
  module_src_runtimeScreenLoaders_ts["src/runtimeScreenLoaders.ts"]
37
41
  module_src_runtimeStateAdapter_ts["src/runtimeStateAdapter.ts"]
38
42
  module_src_runtimeStateAdapterConfig_test_ts["src/runtimeStateAdapterConfig.test.ts"]
43
+ module_src_useRuntimeMediaProps_ts["src/useRuntimeMediaProps.ts"]
39
44
  module_tests_runtime_test_ts["tests/runtime.test.ts"]
40
45
  export_ComponentRegistry["ComponentRegistry"]
41
46
  module_src_componentRegistry_ts --> export_ComponentRegistry
@@ -73,25 +78,12 @@ graph LR
73
78
  module_src_runtimeDataSourceOperations_ts --> export_createRuntimeDataSourceOperationExecutor
74
79
  export_createRuntimeDataSourceOperationExecutor -.-> export_RuntimeBindingOperationExecutor
75
80
  export_createRuntimeDataSourceOperationExecutor -.-> export_RuntimeDataSourceOperationExecutorOptions
76
- export_createRuntimeManifest["createRuntimeManifest"]
77
- module_src_runtimeManifest_ts --> export_createRuntimeManifest
78
- export_createRuntimeManifest -.-> export_RuntimeManifest
79
- export_createRuntimeManifest -.-> export_RuntimeManifestInput
80
81
  export_createRuntimeMemoryStateAdapter["createRuntimeMemoryStateAdapter"]
81
82
  module_src_runtimeStateAdapter_ts --> export_createRuntimeMemoryStateAdapter
82
83
  export_createRuntimeMemoryStateAdapter -.-> export_RuntimeMemoryStateAdapterOptions
83
84
  export_createRuntimeScreenLoaderRequestKey["createRuntimeScreenLoaderRequestKey"]
84
85
  module_src_runtimeScreenLoaders_ts --> export_createRuntimeScreenLoaderRequestKey
85
86
  export_createRuntimeScreenLoaderRequestKey -.-> export_RuntimeBindingOperationResultCache
86
- export_defineRuntimeAction["defineRuntimeAction"]
87
- module_src_runtimeManifest_ts --> export_defineRuntimeAction
88
- export_defineRuntimeAction -.-> export_RuntimeActionDescriptor
89
- export_defineRuntimeAdapter["defineRuntimeAdapter"]
90
- module_src_runtimeManifest_ts --> export_defineRuntimeAdapter
91
- export_defineRuntimeAdapter -.-> export_RuntimeAdapterDescriptor
92
- export_defineRuntimeBinding["defineRuntimeBinding"]
93
- module_src_runtimeManifest_ts --> export_defineRuntimeBinding
94
- export_defineRuntimeBinding -.-> export_RuntimeBindingDescriptor
95
87
  export_dispatchRuntimeComponentEvent["dispatchRuntimeComponentEvent"]
96
88
  module_src_runtimeActionRegistry_ts --> export_dispatchRuntimeComponentEvent
97
89
  export_dispatchRuntimeComponentEvent -.-> export_RuntimeActionHandlers
@@ -111,8 +103,6 @@ graph LR
111
103
  export_executeRuntimeScreenOperationLoaders -.-> export_RuntimeBindingOperationResultCache
112
104
  export_executeRuntimeScreenOperationLoaders -.-> export_RuntimeBindingResolutionContext
113
105
  export_executeRuntimeScreenOperationLoaders -.-> export_RuntimeScreenOperationLoaderExecutionResult
114
- export_listRuntimeCapabilities["listRuntimeCapabilities"]
115
- module_src_runtimeManifest_ts --> export_listRuntimeCapabilities
116
106
  export_ManifestContext["ManifestContext"]
117
107
  module_src_ManifestContext_tsx --> export_ManifestContext
118
108
  export_ManifestProvider["ManifestProvider"]
@@ -148,10 +138,6 @@ graph LR
148
138
  export_resolveRuntimeBindingValueSync -.-> export_RuntimeBindingResolutionContext
149
139
  export_resolveScreenOperationLoaders["resolveScreenOperationLoaders"]
150
140
  module_src_runtimeScreenLoaders_ts --> export_resolveScreenOperationLoaders
151
- export_RUNTIME_CAPABILITIES["RUNTIME_CAPABILITIES"]
152
- module_src_runtimeManifest_ts --> export_RUNTIME_CAPABILITIES
153
- export_RUNTIME_MANIFEST_KIND["RUNTIME_MANIFEST_KIND"]
154
- module_src_runtimeManifest_ts --> export_RUNTIME_MANIFEST_KIND
155
141
  export_RuntimeAction["RuntimeAction"]
156
142
  module_src_RuntimeRendererConfig_tsx --> export_RuntimeAction
157
143
  export_RuntimeActionDescriptor["RuntimeActionDescriptor"]
@@ -235,6 +221,10 @@ graph LR
235
221
  export_RuntimeManifestInput -.-> export_RuntimeBindingDescriptor
236
222
  export_RuntimeManifestInput -.-> export_RuntimeDiagnostic
237
223
  export_RuntimeManifestInput -.-> export_RuntimeManifestConfig
224
+ export_RuntimeMediaAssetResolver["RuntimeMediaAssetResolver"]
225
+ module_src_runtimeMedia_ts --> export_RuntimeMediaAssetResolver
226
+ export_RuntimeMediaAssetResolverArgs["RuntimeMediaAssetResolverArgs"]
227
+ module_src_runtimeMedia_ts --> export_RuntimeMediaAssetResolverArgs
238
228
  export_RuntimeMemoryStateAdapterOptions["RuntimeMemoryStateAdapterOptions"]
239
229
  module_src_runtimeStateAdapter_ts --> export_RuntimeMemoryStateAdapterOptions
240
230
  export_RuntimeNodePropsResolver["RuntimeNodePropsResolver"]
@@ -248,6 +238,7 @@ graph LR
248
238
  export_RuntimeRendererConfig -.-> export_RuntimeActionHandlers
249
239
  export_RuntimeRendererConfig -.-> export_RuntimeBindingOperationExecutor
250
240
  export_RuntimeRendererConfig -.-> export_RuntimeBindingOperationResultWriter
241
+ export_RuntimeRendererConfig -.-> export_RuntimeMediaAssetResolver
251
242
  export_RuntimeRendererConfig -.-> export_RuntimeNodePropsResolver
252
243
  export_RuntimeRendererConfig -.-> export_RuntimeRendererWrapArgs
253
244
  export_RuntimeRendererConfigProvider["RuntimeRendererConfigProvider"]
@@ -257,10 +248,13 @@ graph LR
257
248
  module_src_RuntimeRenderer_tsx --> export_RuntimeRendererProps
258
249
  export_RuntimeRendererProps -.-> export_RuntimeActionHandler
259
250
  export_RuntimeRendererProps -.-> export_RuntimeBindingOperationExecutor
251
+ export_RuntimeRendererProps -.-> export_RuntimeMediaAssetResolver
260
252
  export_RuntimeRendererProps -.-> export_RuntimeRendererConfig
261
253
  export_RuntimeRendererProps -.-> export_RuntimeRendererWrapArgs
262
254
  export_RuntimeRendererWrapArgs["RuntimeRendererWrapArgs"]
263
255
  module_src_RuntimeRendererConfig_tsx --> export_RuntimeRendererWrapArgs
256
+ export_RuntimeResolvedMediaValue["RuntimeResolvedMediaValue"]
257
+ module_src_runtimeMedia_ts --> export_RuntimeResolvedMediaValue
264
258
  export_RuntimeResolveNodePropsArgs["RuntimeResolveNodePropsArgs"]
265
259
  module_node_modules__ankhorage_contracts_dist_runtimeCallbacks_d_ts --> export_RuntimeResolveNodePropsArgs
266
260
  export_RuntimeScreen["RuntimeScreen"]
@@ -19,6 +19,10 @@ graph LR
19
19
  module_src_runtimeEventExecution_test_ts["src/runtimeEventExecution.test.ts"]
20
20
  module_src_runtimeEventExecution_ts["src/runtimeEventExecution.ts"]
21
21
  module_src_runtimeManifest_ts["src/runtimeManifest.ts"]
22
+ module_src_runtimeMedia_test_ts["src/runtimeMedia.test.ts"]
23
+ module_src_runtimeMedia_ts["src/runtimeMedia.ts"]
24
+ module_src_runtimeMediaCache_tsx["src/runtimeMediaCache.tsx"]
25
+ module_src_runtimeMediaConfig_test_ts["src/runtimeMediaConfig.test.ts"]
22
26
  module_src_runtimeNodeProps_test_ts["src/runtimeNodeProps.test.ts"]
23
27
  module_src_runtimeNodeProps_ts["src/runtimeNodeProps.ts"]
24
28
  module_src_runtimePackageIsolation_test_ts["src/runtimePackageIsolation.test.ts"]
@@ -36,6 +40,7 @@ graph LR
36
40
  module_src_runtimeScreenLoaders_ts["src/runtimeScreenLoaders.ts"]
37
41
  module_src_runtimeStateAdapter_ts["src/runtimeStateAdapter.ts"]
38
42
  module_src_runtimeStateAdapterConfig_test_ts["src/runtimeStateAdapterConfig.test.ts"]
43
+ module_src_useRuntimeMediaProps_ts["src/useRuntimeMediaProps.ts"]
39
44
  module_tests_runtime_test_ts["tests/runtime.test.ts"]
40
45
  module_src_registry_test_ts --> module_src_registry_tsx
41
46
  module_src_rendering_test_ts --> module_src_registry_tsx
@@ -57,6 +62,9 @@ graph LR
57
62
  module_src_runtimeEventExecution_test_ts --> module_src_runtimeEventExecution_ts
58
63
  module_src_runtimeEventExecution_ts --> module_src_runtimeActionRegistry_ts
59
64
  module_src_runtimeEventExecution_ts --> module_src_RuntimeRendererConfig_tsx
65
+ module_src_runtimeMedia_test_ts --> module_src_runtimeMedia_ts
66
+ module_src_runtimeMediaCache_tsx --> module_src_runtimeMedia_ts
67
+ module_src_runtimeMediaConfig_test_ts --> module_src_RuntimeRendererConfig_tsx
60
68
  module_src_runtimeNodeProps_test_ts --> module_src_runtimeNodeProps_ts
61
69
  module_src_runtimeNodeProps_ts --> module_src_runtimeBindings_ts
62
70
  module_src_runtimeNodeProps_ts --> module_src_RuntimeRendererConfig_tsx
@@ -67,14 +75,18 @@ graph LR
67
75
  module_src_RuntimeRenderer_tsx --> module_src_runtimeBindings_ts
68
76
  module_src_RuntimeRenderer_tsx --> module_src_runtimeDbPersist_ts
69
77
  module_src_RuntimeRenderer_tsx --> module_src_runtimeEventExecution_ts
78
+ module_src_RuntimeRenderer_tsx --> module_src_runtimeMedia_ts
79
+ module_src_RuntimeRenderer_tsx --> module_src_runtimeMediaCache_tsx
70
80
  module_src_RuntimeRenderer_tsx --> module_src_runtimeNodeProps_ts
71
81
  module_src_RuntimeRenderer_tsx --> module_src_RuntimeRendererConfig_tsx
72
82
  module_src_RuntimeRenderer_tsx --> module_src_runtimeRepeat_ts
73
83
  module_src_RuntimeRenderer_tsx --> module_src_runtimeRepeatDiagnostics_ts
74
84
  module_src_RuntimeRenderer_tsx --> module_src_runtimeRepeatEmptyState_ts
85
+ module_src_RuntimeRenderer_tsx --> module_src_useRuntimeMediaProps_ts
75
86
  module_src_RuntimeRendererConfig_test_tsx --> module_src_RuntimeRendererConfig_tsx
76
87
  module_src_RuntimeRendererConfig_tsx --> module_src_registry_tsx
77
88
  module_src_RuntimeRendererConfig_tsx --> module_src_runtimeBindings_ts
89
+ module_src_RuntimeRendererConfig_tsx --> module_src_runtimeMedia_ts
78
90
  module_src_runtimeRepeat_test_ts --> module_src_runtimeActionRegistry_ts
79
91
  module_src_runtimeRepeat_test_ts --> module_src_runtimeBindings_ts
80
92
  module_src_runtimeRepeat_test_ts --> module_src_runtimeRepeat_ts
@@ -92,4 +104,5 @@ graph LR
92
104
  module_src_runtimeStateAdapterConfig_test_ts --> module_src_runtimeBindings_ts
93
105
  module_src_runtimeStateAdapterConfig_test_ts --> module_src_runtimeNodeProps_ts
94
106
  module_src_runtimeStateAdapterConfig_test_ts --> module_src_RuntimeRendererConfig_tsx
107
+ module_src_useRuntimeMediaProps_ts --> module_src_runtimeMedia_ts
95
108
  module_tests_runtime_test_ts --> module_src_runtimeManifest_ts