@ankhorage/runtime 1.0.0 → 2.0.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.
- package/CHANGELOG.md +12 -0
- package/README.md +2 -2
- package/dist/RuntimeRenderer.d.ts +5 -2
- package/dist/RuntimeRenderer.d.ts.map +1 -1
- package/dist/RuntimeRenderer.js +40 -21
- package/dist/RuntimeRenderer.js.map +1 -1
- package/dist/RuntimeRendererConfig.d.ts +5 -2
- package/dist/RuntimeRendererConfig.d.ts.map +1 -1
- package/dist/RuntimeRendererConfig.js +3 -1
- package/dist/RuntimeRendererConfig.js.map +1 -1
- package/dist/RuntimeScreen.d.ts.map +1 -1
- package/dist/RuntimeScreen.js +3 -2
- package/dist/RuntimeScreen.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/readme-usage.js +1 -1
- package/dist/readme-usage.js.map +1 -1
- package/dist/runtimeActionRegistry.d.ts +3 -3
- package/dist/runtimeActionRegistry.d.ts.map +1 -1
- package/dist/runtimeActionRegistry.js +9 -24
- package/dist/runtimeActionRegistry.js.map +1 -1
- package/dist/runtimeApiOperations.d.ts +8 -0
- package/dist/runtimeApiOperations.d.ts.map +1 -0
- package/dist/runtimeApiOperations.js +38 -0
- package/dist/runtimeApiOperations.js.map +1 -0
- package/dist/runtimeApiSelection.d.ts +8 -0
- package/dist/runtimeApiSelection.d.ts.map +1 -0
- package/dist/runtimeApiSelection.js +50 -0
- package/dist/runtimeApiSelection.js.map +1 -0
- package/dist/runtimeBindings.d.ts +4 -9
- package/dist/runtimeBindings.d.ts.map +1 -1
- package/dist/runtimeBindings.js +13 -73
- package/dist/runtimeBindings.js.map +1 -1
- package/dist/runtimeMedia.d.ts +13 -0
- package/dist/runtimeMedia.d.ts.map +1 -0
- package/dist/runtimeMedia.js +80 -0
- package/dist/runtimeMedia.js.map +1 -0
- package/dist/runtimeMediaCache.d.ts +8 -0
- package/dist/runtimeMediaCache.d.ts.map +1 -0
- package/dist/runtimeMediaCache.js +14 -0
- package/dist/runtimeMediaCache.js.map +1 -0
- package/dist/runtimeNodeProps.d.ts +2 -2
- package/dist/runtimeNodeProps.d.ts.map +1 -1
- package/dist/runtimeNodeProps.js +1 -1
- package/dist/runtimeNodeProps.js.map +1 -1
- package/dist/runtimeRepeat.d.ts.map +1 -1
- package/dist/runtimeRepeat.js +9 -8
- package/dist/runtimeRepeat.js.map +1 -1
- package/dist/runtimeScreenLoaders.d.ts +2 -2
- package/dist/runtimeScreenLoaders.d.ts.map +1 -1
- package/dist/runtimeScreenLoaders.js +8 -7
- package/dist/runtimeScreenLoaders.js.map +1 -1
- package/dist/useRuntimeMediaProps.d.ts +9 -0
- package/dist/useRuntimeMediaProps.d.ts.map +1 -0
- package/dist/useRuntimeMediaProps.js +61 -0
- package/dist/useRuntimeMediaProps.js.map +1 -0
- package/package.json +8 -7
- package/paradox/badges/npm.svg +3 -3
- package/paradox/components.md +5 -3
- package/paradox/diagrams/architecture-overview.mmd +52 -18
- package/paradox/diagrams/export-graph.mmd +31 -31
- package/paradox/diagrams/module-relationships.mmd +38 -13
- package/paradox/diagrams/sequences/validate-runtime-binding-operation-ref.mmd +9 -6
- package/paradox/exports.json +262 -336
- package/paradox/exports.md +199 -230
- package/paradox/index.html +1627 -1381
- package/paradox/paradox.json +1605 -1458
- package/dist/runtimeDataSourceOperations.d.ts +0 -10
- package/dist/runtimeDataSourceOperations.d.ts.map +0 -1
- package/dist/runtimeDataSourceOperations.js +0 -63
- package/dist/runtimeDataSourceOperations.js.map +0 -1
- package/dist/runtimeDatabaseOperationExecutor.d.ts +0 -9
- package/dist/runtimeDatabaseOperationExecutor.d.ts.map +0 -1
- package/dist/runtimeDatabaseOperationExecutor.js +0 -228
- package/dist/runtimeDatabaseOperationExecutor.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtimeBindings.js","sourceRoot":"","sources":["../src/runtimeBindings.ts"],"names":[],"mappings":"AAyEA,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,IAAkC;IAElC,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,MAAM,aAAa,GAA4B,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElD,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QACvE,MAAM,KAAK,GAAG,MAAM,0BAA0B,CAAC,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAC/E,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,IAAkC;IAElC,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,MAAM,aAAa,GAA4B,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElD,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QACvE,aAAa,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IACvF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAAoB,EACpB,OAAwC,EACxC,cAAsC,EAAE;IAExC,MAAM,KAAK,GAAG,MAAM,gCAAgC,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3F,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAEhF,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAC;IAE5D,OAAO,sBAAsB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,OAAoB,EACpB,OAAwC,EACxC,cAAsC,EAAE;IAExC,MAAM,KAAK,GAAG,oCAAoC,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACzF,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAEhF,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAC;IAE5D,OAAO,0BAA0B,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAAkC,EAClC,OAAwC,EACxC,cAAsC,EAAE;IAExC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE1C,MAAM,MAAM,GAAiC,EAAE,CAAC;IAEhD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,aAAa,GAAG,MAAM,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAClF,IAAI,aAAa,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAkC,EAClC,OAAwC,EACxC,cAAsC,EAAE;IAExC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE1C,MAAM,MAAM,GAAiC,EAAE,CAAC;IAEhD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,aAAa,GAAG,4BAA4B,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAChF,IAAI,aAAa,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,SAA8B;IAE9B,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,UAAU,IAAI,EAAE,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,SAA8B,EAC9B,WAA2C;IAE3C,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO;YACL,8BAA8B,CAAC;gBAC7B,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,gBAAgB,SAAS,CAAC,YAAY,uBAAuB;gBACtE,SAAS;aACV,CAAC;SACH,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,6BAA6B,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACtE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO;YACL,8BAA8B,CAAC;gBAC7B,IAAI,EAAE,kBAAkB;gBACxB,YAAY,EAAE,SAAS,CAAC,YAAY;gBACpC,OAAO,EAAE,aAAa,SAAS,CAAC,UAAU,IAAI,WAAW,uBAAuB;gBAChF,SAAS;aACV,CAAC;SACH,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,SAAS,EAAE,CAAC;QAC7D,OAAO;YACL,8BAA8B,CAAC;gBAC7B,IAAI,EAAE,mBAAmB;gBACzB,YAAY,EAAE,SAAS,CAAC,YAAY;gBACpC,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,OAAO,EAAE,cAAc,SAAS,CAAC,WAAW,uBAAuB;gBACnE,SAAS;aACV,CAAC;SACH,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,gCAAgC,CAC7C,MAA0B,EAC1B,OAAwC,EACxC,WAAmC;IAEnC,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,oCAAoC,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,MAAM,GAAG,2BAA2B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC3C,WAAW,CAAC,IAAI,CACd,8BAA8B,CAAC;YAC7B,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,4DAA4D;YACrE,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CACH,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,uCAAuC,CACvD,MAAM,CAAC,SAAS,EAChB,OAAO,CAAC,WAAW,EACnB,WAAW,CACZ,CAAC;IACF,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE9C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC;QAC5C,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,QAAQ,EAAE,SAAS,CAAC,QAAQ;KAC7B,CAAC,CAAC;IAEH,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAEjC,OAAO,2BAA2B,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,MAA0B,EAC1B,OAAwC,EACxC,WAAmC;IAEnC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,KAAK,OAAO;YACV,OAAO,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,MAAM,GAAG,2BAA2B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5D,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,MAAM,CAAC;YACxC,WAAW,CAAC,IAAI,CACd,8BAA8B,CAAC;gBAC7B,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,qEAAqE;gBAC9E,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAC,CACH,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtD,OAAO,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAClC,MAAmE,EACnE,OAAwC;IAExC,MAAM,YAAY,GAAG,gCAAgC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,CAAC;IAE7D,OAAO,2BAA2B,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,QAAqC,EACrC,OAAwC,EACxC,WAAmC;IAEnC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAEpD,OAAO,gCAAgC,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,0BAA0B,CACjC,QAAqC,EACrC,OAAwC,EACxC,WAAmC;IAEnC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAEpD,OAAO,oCAAoC,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACrF,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,KAAwB,EACxB,OAAwC,EACxC,WAAmC;IAEnC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC;IACjD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,MAAM,gCAAgC,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACzF,OAAO,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAmB,EAAE,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YACzE,IAAI,KAAK,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAiC,EAAE,CAAC;IAEhD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,MAAM,aAAa,GAAG,MAAM,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAClF,IAAI,aAAa,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CACnC,KAAwB,EACxB,OAAwC,EACxC,WAAmC;IAEnC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC;IACjD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,oCAAoC,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACvF,OAAO,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAmB,EAAE,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,4BAA4B,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YACvE,IAAI,KAAK,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAiC,EAAE,CAAC;IAEhD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,MAAM,aAAa,GAAG,4BAA4B,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAChF,IAAI,aAAa,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,uCAAuC,CACrD,SAA8B,EAC9B,WAA2C,EAC3C,WAAmC;IAEnC,MAAM,qBAAqB,GAAG,kCAAkC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACzF,WAAW,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,CAAC;IAC3C,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAEvD,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE/C,OAAO;QACL,UAAU;QACV,QAAQ,EAAE,6BAA6B,CAAC,SAAS,EAAE,UAAU,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CACpC,SAA8B,EAC9B,UAA4B;IAE5B,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAE1F,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAC7C,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,SAAS,CACvE,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CAAC,IAMvC;IACC,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY;QAC9D,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU;QACxD,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW;QACvC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE,OAAO;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAClC,KAAc,EACd,UAAwD;IAExD,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IAEtF,IAAI,YAAY,GAAG,YAAY,CAAC;IAEhC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,SAAS,KAAK,WAAW;YAAE,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QACzE,IAAI,SAAS,KAAK,MAAM;YAAE,YAAY,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QAC7D,IAAI,SAAS,KAAK,WAAW;YAAE,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IAC3E,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,KAA+B,EAC/B,IAAwB;IAExB,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,QAAQ,CAAC,MAAe,EAAE,IAAY;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAU,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE;QAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YAClD,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,OAAO,SAAS,CAAC;QAC9C,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,EAAE,MAAM,CAAC,CAAC;AACb,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACzF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEnC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC","sourcesContent":["import type {\n BindingFallback,\n BindingInputMap,\n BindingInputValue,\n BindingOperationRef,\n BindingValue,\n BindingValueSource,\n BindingValueTransform,\n ComponentDataBindingRegistry,\n ComponentEventDto,\n DataEndpointConfig,\n DataSourceConfig,\n DataSourceDiagnostic,\n DataSourceRegistry,\n PropBinding,\n StateAdapter,\n UiNode,\n} from '@ankhorage/contracts';\n\nexport type RuntimeBindingOperationKey = string;\n\nexport interface RuntimeBindingOperationExecutionArgs {\n readonly operation: BindingOperationRef;\n readonly dataSource: DataSourceConfig;\n readonly endpoint?: DataEndpointConfig;\n readonly input?: BindingValue;\n readonly node?: UiNode;\n}\n\nexport type RuntimeBindingOperationExecutionResult =\n | {\n readonly ok: true;\n readonly data: BindingValue;\n readonly diagnostics?: readonly DataSourceDiagnostic[];\n }\n | {\n readonly ok: false;\n readonly diagnostics: readonly DataSourceDiagnostic[];\n };\n\nexport type RuntimeBindingOperationExecutor = (\n args: RuntimeBindingOperationExecutionArgs,\n) => Promise<RuntimeBindingOperationExecutionResult>;\n\nexport type RuntimeBindingOperationResultCache = Readonly<\n Record<RuntimeBindingOperationKey, BindingValue | undefined>\n>;\n\nexport type RuntimeBindingOperationResultWriter = (\n key: RuntimeBindingOperationKey,\n value: BindingValue,\n) => void;\n\nexport interface RuntimeBindingResolutionContext {\n readonly context?: Record<string, unknown>;\n readonly event?: ComponentEventDto<string, object>;\n readonly stateAdapter?: StateAdapter;\n readonly dataSources?: DataSourceRegistry;\n readonly dataBindings?: ComponentDataBindingRegistry;\n readonly operationResults?: RuntimeBindingOperationResultCache;\n readonly executeOperation?: RuntimeBindingOperationExecutor;\n}\n\nexport interface RuntimeBindingResolutionArgs extends RuntimeBindingResolutionContext {\n readonly node: UiNode;\n readonly props: Record<string, unknown>;\n}\n\nexport interface RuntimeBindingResolutionResult {\n readonly props: Record<string, unknown>;\n readonly diagnostics: readonly DataSourceDiagnostic[];\n}\n\nexport async function resolveRuntimeBindingsAsync(\n args: RuntimeBindingResolutionArgs,\n): Promise<RuntimeBindingResolutionResult> {\n const diagnostics: DataSourceDiagnostic[] = [];\n const resolvedProps: Record<string, unknown> = { ...args.props };\n const binding = args.dataBindings?.[args.node.id];\n\n for (const [prop, propBinding] of Object.entries(binding?.props ?? {})) {\n const value = await resolveRuntimeBindingValue(propBinding, args, diagnostics);\n resolvedProps[prop] = value;\n }\n\n return { props: resolvedProps, diagnostics };\n}\n\nexport function resolveRuntimeBindings(\n args: RuntimeBindingResolutionArgs,\n): RuntimeBindingResolutionResult {\n const diagnostics: DataSourceDiagnostic[] = [];\n const resolvedProps: Record<string, unknown> = { ...args.props };\n const binding = args.dataBindings?.[args.node.id];\n\n for (const [prop, propBinding] of Object.entries(binding?.props ?? {})) {\n resolvedProps[prop] = resolveRuntimeBindingValueSync(propBinding, args, diagnostics);\n }\n\n return { props: resolvedProps, diagnostics };\n}\n\nexport async function resolveRuntimeBindingValue(\n binding: PropBinding,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): Promise<unknown> {\n const value = await resolveRuntimeBindingValueSource(binding.source, context, diagnostics);\n const transformedValue = applyBindingValueTransforms(value, binding.transforms);\n\n if (transformedValue !== undefined) return transformedValue;\n\n return resolveBindingFallback(binding.fallback, context, diagnostics);\n}\n\nexport function resolveRuntimeBindingValueSync(\n binding: PropBinding,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): unknown {\n const value = resolveRuntimeBindingValueSourceSync(binding.source, context, diagnostics);\n const transformedValue = applyBindingValueTransforms(value, binding.transforms);\n\n if (transformedValue !== undefined) return transformedValue;\n\n return resolveBindingFallbackSync(binding.fallback, context, diagnostics);\n}\n\nexport async function resolveBindingInputMap(\n input: BindingInputMap | undefined,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): Promise<BindingValue | undefined> {\n if (input === undefined) return undefined;\n\n const fields: Record<string, BindingValue> = {};\n\n for (const [key, value] of Object.entries(input)) {\n const resolvedValue = await resolveBindingInputValue(value, context, diagnostics);\n if (resolvedValue !== undefined) fields[key] = resolvedValue;\n }\n\n return fields;\n}\n\nexport function resolveBindingInputMapSync(\n input: BindingInputMap | undefined,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): BindingValue | undefined {\n if (input === undefined) return undefined;\n\n const fields: Record<string, BindingValue> = {};\n\n for (const [key, value] of Object.entries(input)) {\n const resolvedValue = resolveBindingInputValueSync(value, context, diagnostics);\n if (resolvedValue !== undefined) fields[key] = resolvedValue;\n }\n\n return fields;\n}\n\nexport function createRuntimeBindingOperationKey(\n operation: BindingOperationRef,\n): RuntimeBindingOperationKey {\n return [operation.dataSourceId, operation.endpointId ?? '', operation.operationId].join(':');\n}\n\nexport function validateRuntimeBindingOperationRef(\n operation: BindingOperationRef,\n dataSources: DataSourceRegistry | undefined,\n): readonly DataSourceDiagnostic[] {\n const dataSource = dataSources?.[operation.dataSourceId];\n if (dataSource === undefined) {\n return [\n createRuntimeBindingDiagnostic({\n code: 'missing-data-source',\n message: `Data source '${operation.dataSourceId}' could not be found.`,\n operation,\n }),\n ];\n }\n\n const endpoint = resolveRuntimeBindingEndpoint(operation, dataSource);\n if (endpoint === undefined) {\n return [\n createRuntimeBindingDiagnostic({\n code: 'missing-endpoint',\n dataSourceId: operation.dataSourceId,\n message: `Endpoint '${operation.endpointId ?? '<default>'}' could not be found.`,\n operation,\n }),\n ];\n }\n\n if (endpoint.operations[operation.operationId] === undefined) {\n return [\n createRuntimeBindingDiagnostic({\n code: 'missing-operation',\n dataSourceId: operation.dataSourceId,\n endpointId: endpoint.id,\n message: `Operation '${operation.operationId}' could not be found.`,\n operation,\n }),\n ];\n }\n\n return [];\n}\n\nasync function resolveRuntimeBindingValueSource(\n source: BindingValueSource,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): Promise<BindingValue | undefined> {\n if (source.kind !== 'operation') {\n return resolveRuntimeBindingValueSourceSync(source, context, diagnostics);\n }\n\n const cached = resolveCachedOperationValue(source, context);\n if (cached !== undefined) return cached;\n\n if (context.executeOperation === undefined) {\n diagnostics.push(\n createRuntimeBindingDiagnostic({\n code: 'missing-adapter',\n message: 'Operation binding requires an injected operation executor.',\n operation: source.operation,\n }),\n );\n return undefined;\n }\n\n const selection = resolveRuntimeBindingOperationSelection(\n source.operation,\n context.dataSources,\n diagnostics,\n );\n if (selection === undefined) return undefined;\n\n const result = await context.executeOperation({\n operation: source.operation,\n dataSource: selection.dataSource,\n endpoint: selection.endpoint,\n });\n\n diagnostics.push(...(result.diagnostics ?? []));\n if (!result.ok) return undefined;\n\n return applyRuntimeBindingDataPath(result.data, source.path);\n}\n\nexport function resolveRuntimeBindingValueSourceSync(\n source: BindingValueSource,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): BindingValue | undefined {\n switch (source.kind) {\n case 'context':\n return asBindingValue(readPath(context.context, source.path));\n case 'event':\n return asBindingValue(readPath(context.event, source.path));\n case 'literal':\n return source.value;\n case 'operation': {\n const cached = resolveCachedOperationValue(source, context);\n if (cached !== undefined) return cached;\n diagnostics.push(\n createRuntimeBindingDiagnostic({\n code: 'missing-adapter',\n message: 'Synchronous operation bindings require preloaded operation results.',\n operation: source.operation,\n }),\n );\n return undefined;\n }\n case 'state': {\n const result = context.stateAdapter?.get(source.path);\n return result?.ok ? asBindingValue(result.data) : undefined;\n }\n }\n}\n\nfunction resolveCachedOperationValue(\n source: Extract<BindingValueSource, { readonly kind: 'operation' }>,\n context: RuntimeBindingResolutionContext,\n): BindingValue | undefined {\n const operationKey = createRuntimeBindingOperationKey(source.operation);\n const cachedValue = context.operationResults?.[operationKey];\n\n return applyRuntimeBindingDataPath(cachedValue, source.path);\n}\n\nasync function resolveBindingFallback(\n fallback: BindingFallback | undefined,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): Promise<unknown> {\n if (fallback === undefined) return undefined;\n if (fallback.value !== undefined) return fallback.value;\n if (fallback.source === undefined) return undefined;\n\n return resolveRuntimeBindingValueSource(fallback.source, context, diagnostics);\n}\n\nfunction resolveBindingFallbackSync(\n fallback: BindingFallback | undefined,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): unknown {\n if (fallback === undefined) return undefined;\n if (fallback.value !== undefined) return fallback.value;\n if (fallback.source === undefined) return undefined;\n\n return resolveRuntimeBindingValueSourceSync(fallback.source, context, diagnostics);\n}\n\nasync function resolveBindingInputValue(\n input: BindingInputValue,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): Promise<BindingValue | undefined> {\n if (input.kind === 'literal') return input.value;\n if (input.kind === 'source') {\n const value = await resolveRuntimeBindingValueSource(input.source, context, diagnostics);\n return applyBindingValueTransforms(value, input.transforms);\n }\n\n if (input.kind === 'array') {\n const items: BindingValue[] = [];\n\n for (const item of input.items) {\n const value = await resolveBindingInputValue(item, context, diagnostics);\n if (value !== undefined) items.push(value);\n }\n\n return items;\n }\n\n const fields: Record<string, BindingValue> = {};\n\n for (const [key, value] of Object.entries(input.fields)) {\n const resolvedValue = await resolveBindingInputValue(value, context, diagnostics);\n if (resolvedValue !== undefined) fields[key] = resolvedValue;\n }\n\n return fields;\n}\n\nfunction resolveBindingInputValueSync(\n input: BindingInputValue,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): BindingValue | undefined {\n if (input.kind === 'literal') return input.value;\n if (input.kind === 'source') {\n const value = resolveRuntimeBindingValueSourceSync(input.source, context, diagnostics);\n return applyBindingValueTransforms(value, input.transforms);\n }\n\n if (input.kind === 'array') {\n const items: BindingValue[] = [];\n\n for (const item of input.items) {\n const value = resolveBindingInputValueSync(item, context, diagnostics);\n if (value !== undefined) items.push(value);\n }\n\n return items;\n }\n\n const fields: Record<string, BindingValue> = {};\n\n for (const [key, value] of Object.entries(input.fields)) {\n const resolvedValue = resolveBindingInputValueSync(value, context, diagnostics);\n if (resolvedValue !== undefined) fields[key] = resolvedValue;\n }\n\n return fields;\n}\n\nexport function resolveRuntimeBindingOperationSelection(\n operation: BindingOperationRef,\n dataSources: DataSourceRegistry | undefined,\n diagnostics: DataSourceDiagnostic[],\n): { readonly dataSource: DataSourceConfig; readonly endpoint?: DataEndpointConfig } | undefined {\n const validationDiagnostics = validateRuntimeBindingOperationRef(operation, dataSources);\n diagnostics.push(...validationDiagnostics);\n if (validationDiagnostics.length > 0) return undefined;\n\n const dataSource = dataSources?.[operation.dataSourceId];\n if (dataSource === undefined) return undefined;\n\n return {\n dataSource,\n endpoint: resolveRuntimeBindingEndpoint(operation, dataSource),\n };\n}\n\nfunction resolveRuntimeBindingEndpoint(\n operation: BindingOperationRef,\n dataSource: DataSourceConfig,\n): DataEndpointConfig | undefined {\n if (operation.endpointId !== undefined) return dataSource.endpoints[operation.endpointId];\n\n return Object.values(dataSource.endpoints).find(\n (endpoint) => endpoint.operations[operation.operationId] !== undefined,\n );\n}\n\nfunction createRuntimeBindingDiagnostic(args: {\n readonly code: DataSourceDiagnostic['code'];\n readonly message: string;\n readonly operation: BindingOperationRef;\n readonly dataSourceId?: string;\n readonly endpointId?: string;\n}): DataSourceDiagnostic {\n return {\n code: args.code,\n dataSourceId: args.dataSourceId ?? args.operation.dataSourceId,\n endpointId: args.endpointId ?? args.operation.endpointId,\n operationId: args.operation.operationId,\n message: args.message,\n severity: 'error',\n };\n}\n\nfunction applyBindingValueTransforms(\n value: unknown,\n transforms: readonly BindingValueTransform[] | undefined,\n): BindingValue | undefined {\n const bindingValue = asBindingValue(value);\n if (typeof bindingValue !== 'string' || transforms === undefined) return bindingValue;\n\n let currentValue = bindingValue;\n\n for (const transform of transforms) {\n if (transform === 'lowercase') currentValue = currentValue.toLowerCase();\n if (transform === 'trim') currentValue = currentValue.trim();\n if (transform === 'uppercase') currentValue = currentValue.toUpperCase();\n }\n\n return currentValue;\n}\n\nexport function applyRuntimeBindingDataPath(\n value: BindingValue | undefined,\n path: string | undefined,\n): BindingValue | undefined {\n if (path === undefined) return value;\n return asBindingValue(readPath(value, path));\n}\n\nfunction readPath(source: unknown, path: string): unknown {\n return path.split('.').reduce<unknown>((currentValue, part) => {\n if (Array.isArray(currentValue)) {\n if (!isArrayIndexPathPart(part)) return undefined;\n return currentValue[Number(part)];\n }\n\n if (!isRecord(currentValue)) return undefined;\n return currentValue[part];\n }, source);\n}\n\nfunction isArrayIndexPathPart(part: string): boolean {\n return /^(0|[1-9]\\d*)$/.test(part);\n}\n\nfunction asBindingValue(value: unknown): BindingValue | undefined {\n return isBindingValue(value) ? value : undefined;\n}\n\nfunction isBindingValue(value: unknown): value is BindingValue {\n if (value === null) return true;\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return true;\n }\n\n if (Array.isArray(value)) return value.every(isBindingValue);\n if (!isRecord(value)) return false;\n\n return Object.values(value).every(isBindingValue);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"runtimeBindings.js","sourceRoot":"","sources":["../src/runtimeBindings.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ApiDefinition,\n ApiDefinitionList,\n BindingFallback,\n BindingInputMap,\n BindingInputValue,\n BindingOperationRef,\n BindingValue,\n BindingValueSource,\n BindingValueTransform,\n ComponentDataBindingRegistry,\n ComponentEventDto,\n DataEndpointConfig,\n DataSourceDiagnostic,\n PropBinding,\n StateAdapter,\n UiNode,\n} from '@ankhorage/contracts';\n\nimport { resolveRuntimeBindingOperationSelection } from './runtimeApiSelection';\n\nexport type RuntimeBindingOperationKey = string;\n\nexport interface RuntimeBindingOperationExecutionArgs {\n readonly operation: BindingOperationRef;\n readonly api: ApiDefinition;\n readonly endpoint: DataEndpointConfig;\n readonly input?: BindingValue;\n readonly node?: UiNode;\n}\n\nexport type RuntimeBindingOperationExecutionResult =\n | {\n readonly ok: true;\n readonly data: BindingValue;\n readonly diagnostics?: readonly DataSourceDiagnostic[];\n }\n | {\n readonly ok: false;\n readonly diagnostics: readonly DataSourceDiagnostic[];\n };\n\nexport type RuntimeBindingOperationExecutor = (\n args: RuntimeBindingOperationExecutionArgs,\n) => Promise<RuntimeBindingOperationExecutionResult>;\n\nexport type RuntimeBindingOperationResultCache = Readonly<\n Record<RuntimeBindingOperationKey, BindingValue | undefined>\n>;\n\nexport type RuntimeBindingOperationResultWriter = (\n key: RuntimeBindingOperationKey,\n value: BindingValue,\n) => void;\n\nexport interface RuntimeBindingResolutionContext {\n readonly context?: Record<string, unknown>;\n readonly event?: ComponentEventDto<string, object>;\n readonly stateAdapter?: StateAdapter;\n readonly apis?: ApiDefinitionList;\n readonly dataBindings?: ComponentDataBindingRegistry;\n readonly operationResults?: RuntimeBindingOperationResultCache;\n readonly executeOperation?: RuntimeBindingOperationExecutor;\n}\n\nexport interface RuntimeBindingResolutionArgs extends RuntimeBindingResolutionContext {\n readonly node: UiNode;\n readonly props: Record<string, unknown>;\n}\n\nexport interface RuntimeBindingResolutionResult {\n readonly props: Record<string, unknown>;\n readonly diagnostics: readonly DataSourceDiagnostic[];\n}\n\nexport async function resolveRuntimeBindingsAsync(\n args: RuntimeBindingResolutionArgs,\n): Promise<RuntimeBindingResolutionResult> {\n const diagnostics: DataSourceDiagnostic[] = [];\n const resolvedProps: Record<string, unknown> = { ...args.props };\n const binding = args.dataBindings?.[args.node.id];\n\n for (const [prop, propBinding] of Object.entries(binding?.props ?? {})) {\n const value = await resolveRuntimeBindingValue(propBinding, args, diagnostics);\n resolvedProps[prop] = value;\n }\n\n return { props: resolvedProps, diagnostics };\n}\n\nexport function resolveRuntimeBindings(\n args: RuntimeBindingResolutionArgs,\n): RuntimeBindingResolutionResult {\n const diagnostics: DataSourceDiagnostic[] = [];\n const resolvedProps: Record<string, unknown> = { ...args.props };\n const binding = args.dataBindings?.[args.node.id];\n\n for (const [prop, propBinding] of Object.entries(binding?.props ?? {})) {\n resolvedProps[prop] = resolveRuntimeBindingValueSync(propBinding, args, diagnostics);\n }\n\n return { props: resolvedProps, diagnostics };\n}\n\nexport async function resolveRuntimeBindingValue(\n binding: PropBinding,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): Promise<unknown> {\n const value = await resolveRuntimeBindingValueSource(binding.source, context, diagnostics);\n const transformedValue = applyBindingValueTransforms(value, binding.transforms);\n\n if (transformedValue !== undefined) return transformedValue;\n\n return resolveBindingFallback(binding.fallback, context, diagnostics);\n}\n\nexport function resolveRuntimeBindingValueSync(\n binding: PropBinding,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): unknown {\n const value = resolveRuntimeBindingValueSourceSync(binding.source, context, diagnostics);\n const transformedValue = applyBindingValueTransforms(value, binding.transforms);\n\n if (transformedValue !== undefined) return transformedValue;\n\n return resolveBindingFallbackSync(binding.fallback, context, diagnostics);\n}\n\nexport async function resolveBindingInputMap(\n input: BindingInputMap | undefined,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): Promise<BindingValue | undefined> {\n if (input === undefined) return undefined;\n\n const fields: Record<string, BindingValue> = {};\n\n for (const [key, value] of Object.entries(input)) {\n const resolvedValue = await resolveBindingInputValue(value, context, diagnostics);\n if (resolvedValue !== undefined) fields[key] = resolvedValue;\n }\n\n return fields;\n}\n\nexport function resolveBindingInputMapSync(\n input: BindingInputMap | undefined,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[] = [],\n): BindingValue | undefined {\n if (input === undefined) return undefined;\n\n const fields: Record<string, BindingValue> = {};\n\n for (const [key, value] of Object.entries(input)) {\n const resolvedValue = resolveBindingInputValueSync(value, context, diagnostics);\n if (resolvedValue !== undefined) fields[key] = resolvedValue;\n }\n\n return fields;\n}\n\nexport function createRuntimeBindingOperationKey(\n operation: BindingOperationRef,\n): RuntimeBindingOperationKey {\n return [operation.apiId, operation.endpointId ?? '', operation.operationId].join(':');\n}\n\nasync function resolveRuntimeBindingValueSource(\n source: BindingValueSource,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): Promise<BindingValue | undefined> {\n if (source.kind !== 'operation') {\n return resolveRuntimeBindingValueSourceSync(source, context, diagnostics);\n }\n\n const cached = resolveCachedOperationValue(source, context);\n if (cached !== undefined) return cached;\n\n if (context.executeOperation === undefined) {\n diagnostics.push(\n createRuntimeBindingDiagnostic(\n source.operation,\n 'missing-adapter',\n 'API operation binding requires an injected operation executor.',\n ),\n );\n return undefined;\n }\n\n const selection = resolveRuntimeBindingOperationSelection(\n source.operation,\n context.apis,\n diagnostics,\n );\n if (selection === undefined) return undefined;\n\n const result = await context.executeOperation({\n api: selection.api,\n endpoint: selection.endpoint,\n operation: source.operation,\n });\n\n diagnostics.push(...(result.diagnostics ?? []));\n if (!result.ok) return undefined;\n\n return applyRuntimeBindingDataPath(result.data, source.path);\n}\n\nexport function resolveRuntimeBindingValueSourceSync(\n source: BindingValueSource,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): BindingValue | undefined {\n switch (source.kind) {\n case 'context':\n return asBindingValue(readPath(context.context, source.path));\n case 'event':\n return asBindingValue(readPath(context.event, source.path));\n case 'literal':\n return source.value;\n case 'operation': {\n const cached = resolveCachedOperationValue(source, context);\n if (cached !== undefined) return cached;\n diagnostics.push(\n createRuntimeBindingDiagnostic(\n source.operation,\n 'missing-adapter',\n 'Synchronous API operation bindings require preloaded operation results.',\n ),\n );\n return undefined;\n }\n case 'state': {\n const result = context.stateAdapter?.get(source.path);\n return result?.ok ? asBindingValue(result.data) : undefined;\n }\n }\n}\n\nfunction resolveCachedOperationValue(\n source: Extract<BindingValueSource, { readonly kind: 'operation' }>,\n context: RuntimeBindingResolutionContext,\n): BindingValue | undefined {\n const operationKey = createRuntimeBindingOperationKey(source.operation);\n const cachedValue = context.operationResults?.[operationKey];\n\n return applyRuntimeBindingDataPath(cachedValue, source.path);\n}\n\nasync function resolveBindingFallback(\n fallback: BindingFallback | undefined,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): Promise<unknown> {\n if (fallback === undefined) return undefined;\n if (fallback.value !== undefined) return fallback.value;\n if (fallback.source === undefined) return undefined;\n\n return resolveRuntimeBindingValueSource(fallback.source, context, diagnostics);\n}\n\nfunction resolveBindingFallbackSync(\n fallback: BindingFallback | undefined,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): unknown {\n if (fallback === undefined) return undefined;\n if (fallback.value !== undefined) return fallback.value;\n if (fallback.source === undefined) return undefined;\n\n return resolveRuntimeBindingValueSourceSync(fallback.source, context, diagnostics);\n}\n\nasync function resolveBindingInputValue(\n input: BindingInputValue,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): Promise<BindingValue | undefined> {\n if (input.kind === 'literal') return input.value;\n if (input.kind === 'source') {\n const value = await resolveRuntimeBindingValueSource(input.source, context, diagnostics);\n return applyBindingValueTransforms(value, input.transforms);\n }\n\n if (input.kind === 'array') {\n const items: BindingValue[] = [];\n\n for (const item of input.items) {\n const value = await resolveBindingInputValue(item, context, diagnostics);\n if (value !== undefined) items.push(value);\n }\n\n return items;\n }\n\n const fields: Record<string, BindingValue> = {};\n\n for (const [key, value] of Object.entries(input.fields)) {\n const resolvedValue = await resolveBindingInputValue(value, context, diagnostics);\n if (resolvedValue !== undefined) fields[key] = resolvedValue;\n }\n\n return fields;\n}\n\nfunction resolveBindingInputValueSync(\n input: BindingInputValue,\n context: RuntimeBindingResolutionContext,\n diagnostics: DataSourceDiagnostic[],\n): BindingValue | undefined {\n if (input.kind === 'literal') return input.value;\n if (input.kind === 'source') {\n const value = resolveRuntimeBindingValueSourceSync(input.source, context, diagnostics);\n return applyBindingValueTransforms(value, input.transforms);\n }\n\n if (input.kind === 'array') {\n const items: BindingValue[] = [];\n\n for (const item of input.items) {\n const value = resolveBindingInputValueSync(item, context, diagnostics);\n if (value !== undefined) items.push(value);\n }\n\n return items;\n }\n\n const fields: Record<string, BindingValue> = {};\n\n for (const [key, value] of Object.entries(input.fields)) {\n const resolvedValue = resolveBindingInputValueSync(value, context, diagnostics);\n if (resolvedValue !== undefined) fields[key] = resolvedValue;\n }\n\n return fields;\n}\n\nfunction createRuntimeBindingDiagnostic(\n operation: BindingOperationRef,\n code: DataSourceDiagnostic['code'],\n message: string,\n): DataSourceDiagnostic {\n return {\n apiId: operation.apiId,\n code,\n endpointId: operation.endpointId,\n message,\n operationId: operation.operationId,\n severity: 'error',\n };\n}\n\nfunction applyBindingValueTransforms(\n value: unknown,\n transforms: readonly BindingValueTransform[] | undefined,\n): BindingValue | undefined {\n const bindingValue = asBindingValue(value);\n if (typeof bindingValue !== 'string' || transforms === undefined) return bindingValue;\n\n let currentValue = bindingValue;\n\n for (const transform of transforms) {\n if (transform === 'lowercase') currentValue = currentValue.toLowerCase();\n if (transform === 'trim') currentValue = currentValue.trim();\n if (transform === 'uppercase') currentValue = currentValue.toUpperCase();\n }\n\n return currentValue;\n}\n\nexport function applyRuntimeBindingDataPath(\n value: BindingValue | undefined,\n path: string | undefined,\n): BindingValue | undefined {\n if (path === undefined) return value;\n return asBindingValue(readPath(value, path));\n}\n\nfunction readPath(source: unknown, path: string): unknown {\n return path.split('.').reduce<unknown>((currentValue, part) => {\n if (Array.isArray(currentValue)) {\n if (!isArrayIndexPathPart(part)) return undefined;\n return currentValue[Number(part)];\n }\n\n if (!isRecord(currentValue)) return undefined;\n return currentValue[part];\n }, source);\n}\n\nfunction isArrayIndexPathPart(part: string): boolean {\n return /^(0|[1-9]\\d*)$/.test(part);\n}\n\nfunction asBindingValue(value: unknown): BindingValue | undefined {\n return isBindingValue(value) ? value : undefined;\n}\n\nfunction isBindingValue(value: unknown): value is BindingValue {\n if (value === null) return true;\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return true;\n }\n\n if (Array.isArray(value)) return value.every(isBindingValue);\n if (!isRecord(value)) return false;\n\n return Object.values(value).every(isBindingValue);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type MediaAsset, type MediaAssetRegistry } from '@ankhorage/contracts';
|
|
2
|
+
export type RuntimeResolvedMediaValue = string | number | Readonly<Record<string, unknown>>;
|
|
3
|
+
export interface RuntimeMediaAssetResolverArgs {
|
|
4
|
+
readonly asset: MediaAsset;
|
|
5
|
+
}
|
|
6
|
+
export type RuntimeMediaAssetResolver = (args: RuntimeMediaAssetResolverArgs) => Promise<RuntimeResolvedMediaValue | null> | RuntimeResolvedMediaValue | null;
|
|
7
|
+
export type RuntimeMediaResolutionCache = WeakMap<MediaAsset, WeakMap<RuntimeMediaAssetResolver, Promise<RuntimeResolvedMediaValue | null>>>;
|
|
8
|
+
export declare function createRuntimeMediaResolutionCache(): RuntimeMediaResolutionCache;
|
|
9
|
+
export declare function collectRuntimeMediaReferenceIds(value: unknown): readonly string[];
|
|
10
|
+
export declare function replaceRuntimeMediaReferences(value: unknown, resolvedById: ReadonlyMap<string, RuntimeResolvedMediaValue>): unknown;
|
|
11
|
+
export declare function resolveRuntimeMediaAsset(asset: MediaAsset, resolver: RuntimeMediaAssetResolver | undefined, cache: RuntimeMediaResolutionCache): Promise<RuntimeResolvedMediaValue | null>;
|
|
12
|
+
export declare function createSyncRuntimeMediaResolutionMap(ids: readonly string[], mediaAssets: MediaAssetRegistry | undefined): Map<string, RuntimeResolvedMediaValue>;
|
|
13
|
+
//# sourceMappingURL=runtimeMedia.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeMedia.d.ts","sourceRoot":"","sources":["../src/runtimeMedia.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE5F,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC5B;AAED,MAAM,MAAM,yBAAyB,GAAG,CACtC,IAAI,EAAE,6BAA6B,KAChC,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,GAAG,yBAAyB,GAAG,IAAI,CAAC;AAElF,MAAM,MAAM,2BAA2B,GAAG,OAAO,CAC/C,UAAU,EACV,OAAO,CAAC,yBAAyB,EAAE,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAC,CAC9E,CAAC;AAIF,wBAAgB,iCAAiC,IAAI,2BAA2B,CAE/E;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAIjF;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,GAC3D,OAAO,CAGT;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,yBAAyB,GAAG,SAAS,EAC/C,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAgB3C;AAED,wBAAgB,mCAAmC,CACjD,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,WAAW,EAAE,kBAAkB,GAAG,SAAS,GAC1C,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CASxC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { isMediaAssetReference, } from '@ankhorage/contracts';
|
|
2
|
+
const OMIT_MEDIA_VALUE = Symbol('omit-runtime-media-value');
|
|
3
|
+
export function createRuntimeMediaResolutionCache() {
|
|
4
|
+
return new WeakMap();
|
|
5
|
+
}
|
|
6
|
+
export function collectRuntimeMediaReferenceIds(value) {
|
|
7
|
+
const ids = new Set();
|
|
8
|
+
collectMediaReferenceIds(value, ids);
|
|
9
|
+
return [...ids].sort();
|
|
10
|
+
}
|
|
11
|
+
export function replaceRuntimeMediaReferences(value, resolvedById) {
|
|
12
|
+
const replaced = replaceMediaValue(value, resolvedById);
|
|
13
|
+
return replaced === OMIT_MEDIA_VALUE ? undefined : replaced;
|
|
14
|
+
}
|
|
15
|
+
export function resolveRuntimeMediaAsset(asset, resolver, cache) {
|
|
16
|
+
if (asset.source.kind === 'url')
|
|
17
|
+
return Promise.resolve(asset.source.url);
|
|
18
|
+
if (!resolver)
|
|
19
|
+
return Promise.resolve(null);
|
|
20
|
+
let resolverCache = cache.get(asset);
|
|
21
|
+
if (!resolverCache) {
|
|
22
|
+
resolverCache = new WeakMap();
|
|
23
|
+
cache.set(asset, resolverCache);
|
|
24
|
+
}
|
|
25
|
+
const cached = resolverCache.get(resolver);
|
|
26
|
+
if (cached)
|
|
27
|
+
return cached;
|
|
28
|
+
const pending = Promise.resolve(resolver({ asset })).catch(() => null);
|
|
29
|
+
resolverCache.set(resolver, pending);
|
|
30
|
+
return pending;
|
|
31
|
+
}
|
|
32
|
+
export function createSyncRuntimeMediaResolutionMap(ids, mediaAssets) {
|
|
33
|
+
const resolved = new Map();
|
|
34
|
+
for (const id of ids) {
|
|
35
|
+
const asset = mediaAssets?.[id];
|
|
36
|
+
if (asset?.source.kind === 'url')
|
|
37
|
+
resolved.set(id, asset.source.url);
|
|
38
|
+
}
|
|
39
|
+
return resolved;
|
|
40
|
+
}
|
|
41
|
+
function collectMediaReferenceIds(value, ids) {
|
|
42
|
+
if (isMediaAssetReference(value)) {
|
|
43
|
+
ids.add(value.mediaId.trim());
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (Array.isArray(value)) {
|
|
47
|
+
value.forEach((item) => collectMediaReferenceIds(item, ids));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (!isPlainObject(value))
|
|
51
|
+
return;
|
|
52
|
+
Object.values(value).forEach((item) => collectMediaReferenceIds(item, ids));
|
|
53
|
+
}
|
|
54
|
+
function replaceMediaValue(value, resolvedById) {
|
|
55
|
+
if (isMediaAssetReference(value)) {
|
|
56
|
+
return resolvedById.get(value.mediaId.trim()) ?? OMIT_MEDIA_VALUE;
|
|
57
|
+
}
|
|
58
|
+
if (Array.isArray(value)) {
|
|
59
|
+
return value.map((item) => {
|
|
60
|
+
const replaced = replaceMediaValue(item, resolvedById);
|
|
61
|
+
return replaced === OMIT_MEDIA_VALUE ? undefined : replaced;
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (!isPlainObject(value))
|
|
65
|
+
return value;
|
|
66
|
+
const result = {};
|
|
67
|
+
for (const [key, item] of Object.entries(value)) {
|
|
68
|
+
const replaced = replaceMediaValue(item, resolvedById);
|
|
69
|
+
if (replaced !== OMIT_MEDIA_VALUE)
|
|
70
|
+
result[key] = replaced;
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
function isPlainObject(value) {
|
|
75
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
76
|
+
return false;
|
|
77
|
+
const prototype = Reflect.getPrototypeOf(value);
|
|
78
|
+
return prototype === Object.prototype || prototype === null;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=runtimeMedia.js.map
|
|
@@ -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"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
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
4
|
export declare function resolveRuntimeNodeProps(args: {
|
|
@@ -8,7 +8,7 @@ export declare function resolveRuntimeNodeProps(args: {
|
|
|
8
8
|
dbAdapter?: DbAdapter;
|
|
9
9
|
dbRealtimeAdapter?: DbRealtimeAdapter;
|
|
10
10
|
bindingContext?: Record<string, unknown>;
|
|
11
|
-
|
|
11
|
+
apis?: ApiDefinitionList;
|
|
12
12
|
dataBindings?: ComponentDataBindingRegistry;
|
|
13
13
|
operationResults?: RuntimeBindingOperationResultCache;
|
|
14
14
|
}): Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtimeNodeProps.d.ts","sourceRoot":"","sources":["../src/runtimeNodeProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,
|
|
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"}
|
package/dist/runtimeNodeProps.js
CHANGED
|
@@ -68,9 +68,9 @@ export function resolveRuntimeNodeProps(args) {
|
|
|
68
68
|
baseProps.style = baseProps.style ? [baseProps.style, node.style] : node.style;
|
|
69
69
|
}
|
|
70
70
|
const bindingResult = resolveRuntimeBindings({
|
|
71
|
+
apis: args.apis,
|
|
71
72
|
context: args.bindingContext,
|
|
72
73
|
dataBindings: args.dataBindings,
|
|
73
|
-
dataSources: args.dataSources,
|
|
74
74
|
node,
|
|
75
75
|
operationResults: args.operationResults,
|
|
76
76
|
props: baseProps,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtimeNodeProps.js","sourceRoot":"","sources":["../src/runtimeNodeProps.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runtimeNodeProps.js","sourceRoot":"","sources":["../src/runtimeNodeProps.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ApiDefinitionList,\n ComponentDataBindingRegistry,\n DbAdapter,\n DbRealtimeAdapter,\n StateAdapter,\n UiNode,\n} from '@ankhorage/contracts';\n\nimport { resolveRuntimeBindings, type RuntimeBindingOperationResultCache } from './runtimeBindings';\nimport type { RuntimeAction, RuntimeRendererConfig } from './RuntimeRendererConfig';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (!isRecord(value)) {\n return false;\n }\n\n const prototype = Reflect.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction hasActionShape(value: unknown): value is RuntimeAction {\n return (\n typeof value === 'object' && value !== null && 'type' in value && typeof value.type === 'string'\n );\n}\n\nfunction isCallbackProp(value: unknown): value is (...args: unknown[]) => unknown {\n return typeof value === 'function';\n}\n\nfunction isNonEmptyActionId(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\nfunction createStringActionPayload(args: unknown[]): { payload?: object } {\n if (args.length === 0) {\n return {};\n }\n\n const [firstArg] = args;\n if (isPlainObject(firstArg)) {\n return { payload: firstArg };\n }\n\n return {\n payload: {\n args,\n },\n };\n}\n\nconst noopRuntimeActionHandler = () => undefined;\n\nfunction resolveImageAssetUrl(value: unknown): string | null {\n if (typeof value === 'string') {\n const url = value.trim();\n return url.length ? url : null;\n }\n\n if (!isRecord(value) || typeof value.kind !== 'string') {\n return null;\n }\n\n if (value.kind === 'url' && typeof value.url === 'string') {\n const url = value.url.trim();\n return url.length ? url : null;\n }\n\n if (value.kind === 'storage' && typeof value.publicUrl === 'string') {\n const publicUrl = value.publicUrl.trim();\n return publicUrl.length ? publicUrl : null;\n }\n\n return null;\n}\n\nexport function resolveRuntimeNodeProps(args: {\n node: UiNode;\n resolveNodeProps?: RuntimeRendererConfig['resolveNodeProps'];\n stateAdapter?: StateAdapter;\n dbAdapter?: DbAdapter;\n dbRealtimeAdapter?: DbRealtimeAdapter;\n bindingContext?: Record<string, unknown>;\n apis?: ApiDefinitionList;\n dataBindings?: ComponentDataBindingRegistry;\n operationResults?: RuntimeBindingOperationResultCache;\n}): Record<string, unknown> {\n const { node, resolveNodeProps } = args;\n\n const baseProps: Record<string, unknown> = {\n testID: node.id,\n ...(node.props ?? {}),\n };\n\n if (node.type === 'Image') {\n const resolvedSource = resolveImageAssetUrl(baseProps.source);\n if (resolvedSource !== null) baseProps.source = resolvedSource;\n else delete baseProps.source;\n }\n\n if (node.style) {\n baseProps.style = baseProps.style ? [baseProps.style, node.style] : node.style;\n }\n\n const bindingResult = resolveRuntimeBindings({\n apis: args.apis,\n context: args.bindingContext,\n dataBindings: args.dataBindings,\n node,\n operationResults: args.operationResults,\n props: baseProps,\n stateAdapter: args.stateAdapter,\n });\n\n return resolveNodeProps\n ? resolveNodeProps({ node, props: bindingResult.props })\n : bindingResult.props;\n}\n\nexport function wrapRuntimeActionProps(args: {\n props: Record<string, unknown>;\n disableActions: boolean;\n handleAction: (action: RuntimeAction) => void;\n actionHandlerCache: WeakMap<object, (...args: unknown[]) => void>;\n functionHandlerCache: WeakMap<(...args: unknown[]) => unknown, (...args: unknown[]) => unknown>;\n}): Record<string, unknown> {\n const { props, disableActions, handleAction, actionHandlerCache, functionHandlerCache } = args;\n const wrappedProps: Record<string, unknown> = { ...props };\n\n Object.keys(wrappedProps).forEach((key) => {\n if (!key.startsWith('on')) {\n return;\n }\n\n const value = wrappedProps[key];\n\n if (disableActions) {\n wrappedProps[key] =\n hasActionShape(value) || isNonEmptyActionId(value) ? noopRuntimeActionHandler : undefined;\n return;\n }\n\n if (hasActionShape(value)) {\n const actionObject = value;\n let actionHandler = actionHandlerCache.get(actionObject);\n if (!actionHandler) {\n actionHandler = () => {\n handleAction(actionObject);\n };\n actionHandlerCache.set(actionObject, actionHandler);\n }\n wrappedProps[key] = actionHandler;\n return;\n }\n\n if (isNonEmptyActionId(value)) {\n const actionId = value.trim();\n wrappedProps[key] = (...handlerArgs: unknown[]) => {\n handleAction({\n type: actionId,\n ...createStringActionPayload(handlerArgs),\n });\n };\n return;\n }\n\n if (isCallbackProp(value)) {\n const handler = value;\n let wrappedHandler = functionHandlerCache.get(handler);\n if (!wrappedHandler) {\n wrappedHandler = (...handlerArgs: unknown[]) => handler(...handlerArgs);\n functionHandlerCache.set(handler, wrappedHandler);\n }\n wrappedProps[key] = wrappedHandler;\n }\n });\n\n return wrappedProps;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtimeRepeat.d.ts","sourceRoot":"","sources":["../src/runtimeRepeat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,MAAM,EACN,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtimeRepeat.d.ts","sourceRoot":"","sources":["../src/runtimeRepeat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,MAAM,EACN,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAIL,KAAK,mCAAmC,EACxC,KAAK,+BAA+B,EACrC,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,8BAA+B,SAAQ,+BAA+B;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,oBAAoB,CAAC,EAAE,mCAAmC,CAAC;CACrE;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACvD;AAED,MAAM,WAAW,4BAA6B,SAAQ,wBAAwB;IAC5E,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;CACtC;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,8BAA8B,GACtC,4BAA4B,CA0C9B;AAED,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CA4DnC;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAK1B;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,MAAM,GAAG,MAAM,CAiBlB"}
|
package/dist/runtimeRepeat.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { resolveRuntimeBindingOperationSelection } from './runtimeApiSelection';
|
|
2
|
+
import { applyRuntimeBindingDataPath, createRuntimeBindingOperationKey, resolveRuntimeBindingValueSourceSync, } from './runtimeBindings';
|
|
2
3
|
export function resolveRuntimeRepeatItemsSync(repeat, context) {
|
|
3
4
|
if (repeat.source.kind !== 'operation') {
|
|
4
5
|
const diagnostics = [];
|
|
@@ -27,7 +28,7 @@ export function resolveRuntimeRepeatItemsSync(repeat, context) {
|
|
|
27
28
|
status: 'ready',
|
|
28
29
|
items: [],
|
|
29
30
|
diagnostics: [
|
|
30
|
-
createRepeatDiagnostic(repeat, 'missing-adapter', 'Repeat operation source requires an injected operation executor.'),
|
|
31
|
+
createRepeatDiagnostic(repeat, 'missing-adapter', 'Repeat API operation source requires an injected operation executor.'),
|
|
31
32
|
],
|
|
32
33
|
};
|
|
33
34
|
}
|
|
@@ -46,19 +47,19 @@ export async function resolveRuntimeRepeatItemsAsync(repeat, context) {
|
|
|
46
47
|
return {
|
|
47
48
|
items: [],
|
|
48
49
|
diagnostics: [
|
|
49
|
-
createRepeatDiagnostic(repeat, 'missing-adapter', 'Repeat operation source requires an injected operation executor.'),
|
|
50
|
+
createRepeatDiagnostic(repeat, 'missing-adapter', 'Repeat API operation source requires an injected operation executor.'),
|
|
50
51
|
],
|
|
51
52
|
};
|
|
52
53
|
}
|
|
53
54
|
const diagnostics = [];
|
|
54
|
-
const selection = resolveRuntimeBindingOperationSelection(repeat.source.operation, context.
|
|
55
|
+
const selection = resolveRuntimeBindingOperationSelection(repeat.source.operation, context.apis, diagnostics);
|
|
55
56
|
if (selection === undefined) {
|
|
56
57
|
return { items: [], diagnostics };
|
|
57
58
|
}
|
|
58
59
|
const result = await context.executeOperation({
|
|
59
|
-
|
|
60
|
-
dataSource: selection.dataSource,
|
|
60
|
+
api: selection.api,
|
|
61
61
|
endpoint: selection.endpoint,
|
|
62
|
+
operation: repeat.source.operation,
|
|
62
63
|
node: context.node,
|
|
63
64
|
});
|
|
64
65
|
diagnostics.push(...(result.diagnostics ?? []));
|
|
@@ -106,10 +107,10 @@ function finalizeRuntimeRepeatItems(repeat, value, diagnostics) {
|
|
|
106
107
|
}
|
|
107
108
|
function createRepeatDiagnostic(repeat, code, message) {
|
|
108
109
|
return {
|
|
109
|
-
|
|
110
|
-
dataSourceId: repeat.source.kind === 'operation' ? repeat.source.operation.dataSourceId : undefined,
|
|
110
|
+
apiId: repeat.source.kind === 'operation' ? repeat.source.operation.apiId : undefined,
|
|
111
111
|
endpointId: repeat.source.kind === 'operation' ? repeat.source.operation.endpointId : undefined,
|
|
112
112
|
operationId: repeat.source.kind === 'operation' ? repeat.source.operation.operationId : undefined,
|
|
113
|
+
code,
|
|
113
114
|
message,
|
|
114
115
|
severity: 'error',
|
|
115
116
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtimeRepeat.js","sourceRoot":"","sources":["../src/runtimeRepeat.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BindingValue,\n DataSourceDiagnostic,\n UiNode,\n UiNodeRepeatSpec,\n} from '@ankhorage/contracts';\n\nimport {\n applyRuntimeBindingDataPath,\n createRuntimeBindingOperationKey,\n resolveRuntimeBindingOperationSelection,\n resolveRuntimeBindingValueSourceSync,\n type RuntimeBindingOperationResultWriter,\n type RuntimeBindingResolutionContext,\n} from './runtimeBindings';\n\nexport interface RuntimeRepeatResolutionContext extends RuntimeBindingResolutionContext {\n readonly node: UiNode;\n readonly writeOperationResult?: RuntimeBindingOperationResultWriter;\n}\n\nexport interface RuntimeRepeatItemsResult {\n readonly items: readonly BindingValue[];\n readonly diagnostics: readonly DataSourceDiagnostic[];\n}\n\nexport interface RuntimeRepeatItemsSyncResult extends RuntimeRepeatItemsResult {\n readonly status: 'ready' | 'pending';\n}\n\nexport function resolveRuntimeRepeatItemsSync(\n repeat: UiNodeRepeatSpec,\n context: RuntimeRepeatResolutionContext,\n): RuntimeRepeatItemsSyncResult {\n if (repeat.source.kind !== 'operation') {\n const diagnostics: DataSourceDiagnostic[] = [];\n const resolved = resolveRuntimeBindingValueSourceSync(repeat.source, context, diagnostics);\n return {\n status: 'ready',\n ...finalizeRuntimeRepeatItems(repeat, resolved, diagnostics),\n };\n }\n\n const operationKey = createRuntimeBindingOperationKey(repeat.source.operation);\n const cached = context.operationResults?.[operationKey];\n if (cached !== undefined) {\n return {\n status: 'ready',\n ...finalizeRuntimeRepeatItems(\n repeat,\n applyRuntimeBindingDataPath(cached, repeat.source.path),\n [],\n ),\n };\n }\n\n if (context.executeOperation !== undefined) {\n return {\n status: 'pending',\n items: [],\n diagnostics: [],\n };\n }\n\n return {\n status: 'ready',\n items: [],\n diagnostics: [\n createRepeatDiagnostic(\n repeat,\n 'missing-adapter',\n 'Repeat operation source requires an injected operation executor.',\n ),\n ],\n };\n}\n\nexport async function resolveRuntimeRepeatItemsAsync(\n repeat: UiNodeRepeatSpec,\n context: RuntimeRepeatResolutionContext,\n): Promise<RuntimeRepeatItemsResult> {\n if (repeat.source.kind !== 'operation') {\n const diagnostics: DataSourceDiagnostic[] = [];\n const resolved = await Promise.resolve(\n resolveRuntimeBindingValueSourceSync(repeat.source, context, diagnostics),\n );\n return finalizeRuntimeRepeatItems(repeat, resolved, diagnostics);\n }\n\n const operationKey = createRuntimeBindingOperationKey(repeat.source.operation);\n const cached = context.operationResults?.[operationKey];\n if (cached !== undefined) {\n return finalizeRuntimeRepeatItems(\n repeat,\n applyRuntimeBindingDataPath(cached, repeat.source.path),\n [],\n );\n }\n\n if (context.executeOperation === undefined) {\n return {\n items: [],\n diagnostics: [\n createRepeatDiagnostic(\n repeat,\n 'missing-adapter',\n 'Repeat operation source requires an injected operation executor.',\n ),\n ],\n };\n }\n\n const diagnostics: DataSourceDiagnostic[] = [];\n const selection = resolveRuntimeBindingOperationSelection(\n repeat.source.operation,\n context.dataSources,\n diagnostics,\n );\n if (selection === undefined) {\n return { items: [], diagnostics };\n }\n\n const result = await context.executeOperation({\n operation: repeat.source.operation,\n dataSource: selection.dataSource,\n endpoint: selection.endpoint,\n node: context.node,\n });\n diagnostics.push(...(result.diagnostics ?? []));\n\n if (!result.ok) {\n return { items: [], diagnostics };\n }\n\n context.writeOperationResult?.(operationKey, result.data);\n return finalizeRuntimeRepeatItems(\n repeat,\n applyRuntimeBindingDataPath(result.data, repeat.source.path),\n diagnostics,\n );\n}\n\nexport function createRuntimeRepeatBindingContext(args: {\n readonly baseContext?: Record<string, unknown>;\n readonly item: BindingValue;\n readonly itemAlias?: string;\n}): Record<string, unknown> {\n return {\n ...(args.baseContext ?? {}),\n [args.itemAlias ?? 'item']: args.item,\n };\n}\n\nexport function resolveRuntimeRepeatItemKey(args: {\n readonly item: BindingValue;\n readonly itemAlias?: string;\n readonly index: number;\n readonly keyPath?: string;\n}): string | number {\n const explicitKey = readRepeatPrimitive(args.item, args.keyPath ?? 'id');\n if (explicitKey !== undefined) {\n return explicitKey;\n }\n\n const fallbackId = readRepeatPrimitive(args.item, 'id');\n if (fallbackId !== undefined) {\n return fallbackId;\n }\n\n const fallbackItemId = readRepeatPrimitive(args.item, 'itemId');\n if (fallbackItemId !== undefined) {\n return fallbackItemId;\n }\n\n return args.index;\n}\n\nfunction finalizeRuntimeRepeatItems(\n repeat: UiNodeRepeatSpec,\n value: BindingValue | undefined,\n diagnostics: readonly DataSourceDiagnostic[],\n): RuntimeRepeatItemsResult {\n if (Array.isArray(value)) {\n return {\n items: value,\n diagnostics,\n };\n }\n\n return {\n items: [],\n diagnostics: [\n ...diagnostics,\n createRepeatDiagnostic(repeat, 'invalid-config', 'Repeat source must resolve to an array.'),\n ],\n };\n}\n\nfunction createRepeatDiagnostic(\n repeat: UiNodeRepeatSpec,\n code: DataSourceDiagnostic['code'],\n message: string,\n): DataSourceDiagnostic {\n return {\n code,\n dataSourceId:\n repeat.source.kind === 'operation' ? repeat.source.operation.dataSourceId : undefined,\n endpointId: repeat.source.kind === 'operation' ? repeat.source.operation.endpointId : undefined,\n operationId:\n repeat.source.kind === 'operation' ? repeat.source.operation.operationId : undefined,\n message,\n severity: 'error',\n };\n}\n\nfunction readRepeatPrimitive(value: BindingValue, path: string): string | number | undefined {\n const resolved = path.split('.').reduce<unknown>((currentValue, part) => {\n if (typeof currentValue !== 'object' || currentValue === null || Array.isArray(currentValue)) {\n return undefined;\n }\n\n return (currentValue as Record<string, unknown>)[part];\n }, value);\n\n if (typeof resolved === 'string' || typeof resolved === 'number') {\n return resolved;\n }\n\n return undefined;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"runtimeRepeat.js","sourceRoot":"","sources":["../src/runtimeRepeat.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BindingValue,\n DataSourceDiagnostic,\n UiNode,\n UiNodeRepeatSpec,\n} from '@ankhorage/contracts';\n\nimport { resolveRuntimeBindingOperationSelection } from './runtimeApiSelection';\nimport {\n applyRuntimeBindingDataPath,\n createRuntimeBindingOperationKey,\n resolveRuntimeBindingValueSourceSync,\n type RuntimeBindingOperationResultWriter,\n type RuntimeBindingResolutionContext,\n} from './runtimeBindings';\n\nexport interface RuntimeRepeatResolutionContext extends RuntimeBindingResolutionContext {\n readonly node: UiNode;\n readonly writeOperationResult?: RuntimeBindingOperationResultWriter;\n}\n\nexport interface RuntimeRepeatItemsResult {\n readonly items: readonly BindingValue[];\n readonly diagnostics: readonly DataSourceDiagnostic[];\n}\n\nexport interface RuntimeRepeatItemsSyncResult extends RuntimeRepeatItemsResult {\n readonly status: 'ready' | 'pending';\n}\n\nexport function resolveRuntimeRepeatItemsSync(\n repeat: UiNodeRepeatSpec,\n context: RuntimeRepeatResolutionContext,\n): RuntimeRepeatItemsSyncResult {\n if (repeat.source.kind !== 'operation') {\n const diagnostics: DataSourceDiagnostic[] = [];\n const resolved = resolveRuntimeBindingValueSourceSync(repeat.source, context, diagnostics);\n return {\n status: 'ready',\n ...finalizeRuntimeRepeatItems(repeat, resolved, diagnostics),\n };\n }\n\n const operationKey = createRuntimeBindingOperationKey(repeat.source.operation);\n const cached = context.operationResults?.[operationKey];\n if (cached !== undefined) {\n return {\n status: 'ready',\n ...finalizeRuntimeRepeatItems(\n repeat,\n applyRuntimeBindingDataPath(cached, repeat.source.path),\n [],\n ),\n };\n }\n\n if (context.executeOperation !== undefined) {\n return {\n status: 'pending',\n items: [],\n diagnostics: [],\n };\n }\n\n return {\n status: 'ready',\n items: [],\n diagnostics: [\n createRepeatDiagnostic(\n repeat,\n 'missing-adapter',\n 'Repeat API operation source requires an injected operation executor.',\n ),\n ],\n };\n}\n\nexport async function resolveRuntimeRepeatItemsAsync(\n repeat: UiNodeRepeatSpec,\n context: RuntimeRepeatResolutionContext,\n): Promise<RuntimeRepeatItemsResult> {\n if (repeat.source.kind !== 'operation') {\n const diagnostics: DataSourceDiagnostic[] = [];\n const resolved = await Promise.resolve(\n resolveRuntimeBindingValueSourceSync(repeat.source, context, diagnostics),\n );\n return finalizeRuntimeRepeatItems(repeat, resolved, diagnostics);\n }\n\n const operationKey = createRuntimeBindingOperationKey(repeat.source.operation);\n const cached = context.operationResults?.[operationKey];\n if (cached !== undefined) {\n return finalizeRuntimeRepeatItems(\n repeat,\n applyRuntimeBindingDataPath(cached, repeat.source.path),\n [],\n );\n }\n\n if (context.executeOperation === undefined) {\n return {\n items: [],\n diagnostics: [\n createRepeatDiagnostic(\n repeat,\n 'missing-adapter',\n 'Repeat API operation source requires an injected operation executor.',\n ),\n ],\n };\n }\n\n const diagnostics: DataSourceDiagnostic[] = [];\n const selection = resolveRuntimeBindingOperationSelection(\n repeat.source.operation,\n context.apis,\n diagnostics,\n );\n if (selection === undefined) {\n return { items: [], diagnostics };\n }\n\n const result = await context.executeOperation({\n api: selection.api,\n endpoint: selection.endpoint,\n operation: repeat.source.operation,\n node: context.node,\n });\n diagnostics.push(...(result.diagnostics ?? []));\n\n if (!result.ok) {\n return { items: [], diagnostics };\n }\n\n context.writeOperationResult?.(operationKey, result.data);\n return finalizeRuntimeRepeatItems(\n repeat,\n applyRuntimeBindingDataPath(result.data, repeat.source.path),\n diagnostics,\n );\n}\n\nexport function createRuntimeRepeatBindingContext(args: {\n readonly baseContext?: Record<string, unknown>;\n readonly item: BindingValue;\n readonly itemAlias?: string;\n}): Record<string, unknown> {\n return {\n ...(args.baseContext ?? {}),\n [args.itemAlias ?? 'item']: args.item,\n };\n}\n\nexport function resolveRuntimeRepeatItemKey(args: {\n readonly item: BindingValue;\n readonly itemAlias?: string;\n readonly index: number;\n readonly keyPath?: string;\n}): string | number {\n const explicitKey = readRepeatPrimitive(args.item, args.keyPath ?? 'id');\n if (explicitKey !== undefined) {\n return explicitKey;\n }\n\n const fallbackId = readRepeatPrimitive(args.item, 'id');\n if (fallbackId !== undefined) {\n return fallbackId;\n }\n\n const fallbackItemId = readRepeatPrimitive(args.item, 'itemId');\n if (fallbackItemId !== undefined) {\n return fallbackItemId;\n }\n\n return args.index;\n}\n\nfunction finalizeRuntimeRepeatItems(\n repeat: UiNodeRepeatSpec,\n value: BindingValue | undefined,\n diagnostics: readonly DataSourceDiagnostic[],\n): RuntimeRepeatItemsResult {\n if (Array.isArray(value)) {\n return {\n items: value,\n diagnostics,\n };\n }\n\n return {\n items: [],\n diagnostics: [\n ...diagnostics,\n createRepeatDiagnostic(repeat, 'invalid-config', 'Repeat source must resolve to an array.'),\n ],\n };\n}\n\nfunction createRepeatDiagnostic(\n repeat: UiNodeRepeatSpec,\n code: DataSourceDiagnostic['code'],\n message: string,\n): DataSourceDiagnostic {\n return {\n apiId: repeat.source.kind === 'operation' ? repeat.source.operation.apiId : undefined,\n endpointId: repeat.source.kind === 'operation' ? repeat.source.operation.endpointId : undefined,\n operationId:\n repeat.source.kind === 'operation' ? repeat.source.operation.operationId : undefined,\n code,\n message,\n severity: 'error',\n };\n}\n\nfunction readRepeatPrimitive(value: BindingValue, path: string): string | number | undefined {\n const resolved = path.split('.').reduce<unknown>((currentValue, part) => {\n if (typeof currentValue !== 'object' || currentValue === null || Array.isArray(currentValue)) {\n return undefined;\n }\n\n return (currentValue as Record<string, unknown>)[part];\n }, value);\n\n if (typeof resolved === 'string' || typeof resolved === 'number') {\n return resolved;\n }\n\n return undefined;\n}\n"]}
|
|
@@ -53,7 +53,7 @@ export declare function completeRuntimeScreenOperationLoaderRequest(args: {
|
|
|
53
53
|
};
|
|
54
54
|
export declare function executeRuntimeScreenOperationLoaders(args: {
|
|
55
55
|
readonly bindingContext?: Record<string, unknown>;
|
|
56
|
-
readonly
|
|
56
|
+
readonly apis?: RuntimeBindingResolutionContext['apis'];
|
|
57
57
|
readonly executeOperation?: RuntimeBindingOperationExecutor;
|
|
58
58
|
readonly operationResults?: RuntimeBindingOperationResultCache;
|
|
59
59
|
readonly screen: ScreenSpec;
|
|
@@ -61,7 +61,7 @@ export declare function executeRuntimeScreenOperationLoaders(args: {
|
|
|
61
61
|
}): Promise<RuntimeScreenOperationLoaderExecutionResult>;
|
|
62
62
|
export declare function useRuntimeScreenOperationLoaders(args: {
|
|
63
63
|
readonly bindingContext?: Record<string, unknown>;
|
|
64
|
-
readonly
|
|
64
|
+
readonly apis?: RuntimeBindingResolutionContext['apis'];
|
|
65
65
|
readonly executeOperation?: RuntimeBindingOperationExecutor;
|
|
66
66
|
readonly operationResults?: RuntimeBindingOperationResultCache;
|
|
67
67
|
readonly onDiagnostics?: (diagnostics: readonly DataSourceDiagnostic[]) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtimeScreenLoaders.d.ts","sourceRoot":"","sources":["../src/runtimeScreenLoaders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EACpB,mCAAmC,EACnC,UAAU,EACX,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtimeScreenLoaders.d.ts","sourceRoot":"","sources":["../src/runtimeScreenLoaders.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { resolveRuntimeBindingOperationSelection } from './runtimeApiSelection';
|
|
3
|
+
import { createRuntimeBindingOperationKey, resolveBindingInputMapSync, } from './runtimeBindings';
|
|
3
4
|
const EMPTY_RUNTIME_SCREEN_OPERATION_LOADER_DIAGNOSTICS = Object.freeze([]);
|
|
4
5
|
const EMPTY_RUNTIME_SCREEN_OPERATION_RESULTS = Object.freeze({});
|
|
5
6
|
export function resolveScreenOperationLoaders(screen) {
|
|
@@ -101,7 +102,7 @@ export async function executeRuntimeScreenOperationLoaders(args) {
|
|
|
101
102
|
screenId: args.screen.id,
|
|
102
103
|
});
|
|
103
104
|
return executePreparedRuntimeScreenOperationLoaders({
|
|
104
|
-
|
|
105
|
+
apis: args.apis,
|
|
105
106
|
executeOperation: args.executeOperation,
|
|
106
107
|
plan,
|
|
107
108
|
screen: args.screen,
|
|
@@ -117,7 +118,7 @@ function executePreparedRuntimeScreenOperationLoaders(args) {
|
|
|
117
118
|
});
|
|
118
119
|
}
|
|
119
120
|
if (args.executeOperation === undefined) {
|
|
120
|
-
diagnostics.push(...args.plan.loaders.map((preparedLoader) => createScreenOperationLoaderDiagnostic(preparedLoader.loader, 'missing-adapter', 'Screen operation loader requires an injected operation executor.')));
|
|
121
|
+
diagnostics.push(...args.plan.loaders.map((preparedLoader) => createScreenOperationLoaderDiagnostic(preparedLoader.loader, 'missing-adapter', 'Screen API operation loader requires an injected operation executor.')));
|
|
121
122
|
return Promise.resolve({
|
|
122
123
|
dependencyKey: args.plan.requestKey,
|
|
123
124
|
diagnostics,
|
|
@@ -128,12 +129,12 @@ function executePreparedRuntimeScreenOperationLoaders(args) {
|
|
|
128
129
|
return (async () => {
|
|
129
130
|
const operationResults = {};
|
|
130
131
|
for (const preparedLoader of args.plan.loaders) {
|
|
131
|
-
const selection = resolveRuntimeBindingOperationSelection(preparedLoader.loader.operation, args.
|
|
132
|
+
const selection = resolveRuntimeBindingOperationSelection(preparedLoader.loader.operation, args.apis, diagnostics);
|
|
132
133
|
if (selection === undefined) {
|
|
133
134
|
continue;
|
|
134
135
|
}
|
|
135
136
|
const result = await executeOperation({
|
|
136
|
-
|
|
137
|
+
api: selection.api,
|
|
137
138
|
endpoint: selection.endpoint,
|
|
138
139
|
input: preparedLoader.input,
|
|
139
140
|
node: args.screen.root,
|
|
@@ -174,7 +175,7 @@ export function useRuntimeScreenOperationLoaders(args) {
|
|
|
174
175
|
const lifecycleRef = React.useRef(createRuntimeScreenOperationLoaderLifecycle());
|
|
175
176
|
const executionArgsByRequestKeyRef = React.useRef({});
|
|
176
177
|
executionArgsByRequestKeyRef.current[requestKey] = {
|
|
177
|
-
|
|
178
|
+
apis: args.apis,
|
|
178
179
|
executeOperation: args.executeOperation,
|
|
179
180
|
plan,
|
|
180
181
|
screen: args.screen,
|
|
@@ -275,8 +276,8 @@ function createRuntimeScreenOperationLoaderPlanRequestKey(args) {
|
|
|
275
276
|
}
|
|
276
277
|
function createScreenOperationLoaderDiagnostic(loader, code, message) {
|
|
277
278
|
return {
|
|
279
|
+
apiId: loader.operation.apiId,
|
|
278
280
|
code,
|
|
279
|
-
dataSourceId: loader.operation.dataSourceId,
|
|
280
281
|
endpointId: loader.operation.endpointId,
|
|
281
282
|
operationId: loader.operation.operationId,
|
|
282
283
|
message,
|