@ankhorage/studio 0.12.0 → 0.14.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 (183) hide show
  1. package/README.md +9 -1
  2. package/dist/bindingAuthoringContracts.d.ts +37 -0
  3. package/dist/bindingAuthoringContracts.d.ts.map +1 -0
  4. package/dist/bindingAuthoringContracts.js +2 -0
  5. package/dist/bindingAuthoringContracts.js.map +1 -0
  6. package/dist/bindingAuthoringModel.d.ts +7 -0
  7. package/dist/bindingAuthoringModel.d.ts.map +1 -0
  8. package/dist/bindingAuthoringModel.js +7 -0
  9. package/dist/bindingAuthoringModel.js.map +1 -0
  10. package/dist/bindingDiagnosticsModel.d.ts +10 -0
  11. package/dist/bindingDiagnosticsModel.d.ts.map +1 -0
  12. package/dist/bindingDiagnosticsModel.js +116 -0
  13. package/dist/bindingDiagnosticsModel.js.map +1 -0
  14. package/dist/bindingMetadataModel.d.ts +5 -0
  15. package/dist/bindingMetadataModel.d.ts.map +1 -0
  16. package/dist/bindingMetadataModel.js +17 -0
  17. package/dist/bindingMetadataModel.js.map +1 -0
  18. package/dist/bindingMutationModel.d.ts +6 -0
  19. package/dist/bindingMutationModel.d.ts.map +1 -0
  20. package/dist/bindingMutationModel.js +55 -0
  21. package/dist/bindingMutationModel.js.map +1 -0
  22. package/dist/bindingOperationModel.d.ts +10 -0
  23. package/dist/bindingOperationModel.d.ts.map +1 -0
  24. package/dist/bindingOperationModel.js +69 -0
  25. package/dist/bindingOperationModel.js.map +1 -0
  26. package/dist/bindingSchemaModel.d.ts +6 -0
  27. package/dist/bindingSchemaModel.d.ts.map +1 -0
  28. package/dist/bindingSchemaModel.js +95 -0
  29. package/dist/bindingSchemaModel.js.map +1 -0
  30. package/dist/contractGuards.d.ts.map +1 -1
  31. package/dist/contractGuards.js +78 -89
  32. package/dist/contractGuards.js.map +1 -1
  33. package/dist/core/StudioProvider.d.ts.map +1 -1
  34. package/dist/core/StudioProvider.js +18 -2
  35. package/dist/core/StudioProvider.js.map +1 -1
  36. package/dist/core/studioManifestDraftModel.d.ts +1 -2
  37. package/dist/core/studioManifestDraftModel.d.ts.map +1 -1
  38. package/dist/core/studioManifestDraftModel.js +1 -4
  39. package/dist/core/studioManifestDraftModel.js.map +1 -1
  40. package/dist/externalApiApi.d.ts.map +1 -1
  41. package/dist/externalApiApi.js +2 -9
  42. package/dist/externalApiApi.js.map +1 -1
  43. package/dist/externalApiAuthoringContracts.d.ts +3 -3
  44. package/dist/externalApiAuthoringContracts.d.ts.map +1 -1
  45. package/dist/generatedApiAuthoring.d.ts +14 -0
  46. package/dist/generatedApiAuthoring.d.ts.map +1 -0
  47. package/dist/generatedApiAuthoring.js +64 -0
  48. package/dist/generatedApiAuthoring.js.map +1 -0
  49. package/dist/host/dataSources/studioExternalApiService.d.ts.map +1 -1
  50. package/dist/host/dataSources/studioExternalApiService.js +21 -5
  51. package/dist/host/dataSources/studioExternalApiService.js.map +1 -1
  52. package/dist/host/generatedDatabaseRuntime.d.ts +9 -0
  53. package/dist/host/generatedDatabaseRuntime.d.ts.map +1 -0
  54. package/dist/host/generatedDatabaseRuntime.js +12 -0
  55. package/dist/host/generatedDatabaseRuntime.js.map +1 -0
  56. package/dist/host/layout/generatedDatabaseRuntimeSource.d.ts +5 -0
  57. package/dist/host/layout/generatedDatabaseRuntimeSource.d.ts.map +1 -0
  58. package/dist/host/layout/generatedDatabaseRuntimeSource.js +40 -0
  59. package/dist/host/layout/generatedDatabaseRuntimeSource.js.map +1 -0
  60. package/dist/host/layout/layoutGenerator.d.ts.map +1 -1
  61. package/dist/host/layout/layoutGenerator.js +10 -2
  62. package/dist/host/layout/layoutGenerator.js.map +1 -1
  63. package/dist/host/layout/templates/rootLayout.d.ts +1 -0
  64. package/dist/host/layout/templates/rootLayout.d.ts.map +1 -1
  65. package/dist/host/layout/templates/rootLayout.js +2 -1
  66. package/dist/host/layout/templates/rootLayout.js.map +1 -1
  67. package/dist/host/orchestrator/projectManager.d.ts.map +1 -1
  68. package/dist/host/orchestrator/projectManager.js +3 -0
  69. package/dist/host/orchestrator/projectManager.js.map +1 -1
  70. package/dist/host/orchestrator/scaffolder.d.ts +2 -0
  71. package/dist/host/orchestrator/scaffolder.d.ts.map +1 -1
  72. package/dist/host/orchestrator/scaffolder.js +11 -4
  73. package/dist/host/orchestrator/scaffolder.js.map +1 -1
  74. package/dist/host/orchestrator/templates.d.ts +3 -0
  75. package/dist/host/orchestrator/templates.d.ts.map +1 -1
  76. package/dist/host/orchestrator/templates.js +9 -4
  77. package/dist/host/orchestrator/templates.js.map +1 -1
  78. package/dist/index.d.ts +7 -5
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +4 -0
  81. package/dist/index.js.map +1 -1
  82. package/dist/manifestState.d.ts +1 -2
  83. package/dist/manifestState.d.ts.map +1 -1
  84. package/dist/manifestState.js +1 -4
  85. package/dist/manifestState.js.map +1 -1
  86. package/dist/manifestSync.js +1 -1
  87. package/dist/manifestSync.js.map +1 -1
  88. package/dist/studioAdminRouteModel.d.ts +4 -1
  89. package/dist/studioAdminRouteModel.d.ts.map +1 -1
  90. package/dist/studioAdminRouteModel.js +46 -16
  91. package/dist/studioAdminRouteModel.js.map +1 -1
  92. package/dist/ui/admin/AnkhAdminPage.d.ts.map +1 -1
  93. package/dist/ui/admin/AnkhAdminPage.js +3 -1
  94. package/dist/ui/admin/AnkhAdminPage.js.map +1 -1
  95. package/dist/ui/admin/pages/ApisAdminPage.d.ts.map +1 -1
  96. package/dist/ui/admin/pages/ApisAdminPage.js +2 -1
  97. package/dist/ui/admin/pages/ApisAdminPage.js.map +1 -1
  98. package/dist/ui/admin/pages/BindingsAdminPage.d.ts +5 -0
  99. package/dist/ui/admin/pages/BindingsAdminPage.d.ts.map +1 -0
  100. package/dist/ui/admin/pages/BindingsAdminPage.js +38 -0
  101. package/dist/ui/admin/pages/BindingsAdminPage.js.map +1 -0
  102. package/dist/ui/admin/pages/DataSourceCatalogCard.js +13 -5
  103. package/dist/ui/admin/pages/DataSourceCatalogCard.js.map +1 -1
  104. package/dist/ui/admin/pages/DataSourceOperationsCard.d.ts.map +1 -1
  105. package/dist/ui/admin/pages/DataSourceOperationsCard.js +1 -1
  106. package/dist/ui/admin/pages/DataSourceOperationsCard.js.map +1 -1
  107. package/dist/ui/admin/pages/ExternalApiConnectCard.d.ts.map +1 -1
  108. package/dist/ui/admin/pages/ExternalApiConnectCard.js +2 -2
  109. package/dist/ui/admin/pages/ExternalApiConnectCard.js.map +1 -1
  110. package/dist/ui/admin/pages/GeneratedApiAuthoringCard.d.ts +2 -0
  111. package/dist/ui/admin/pages/GeneratedApiAuthoringCard.d.ts.map +1 -0
  112. package/dist/ui/admin/pages/GeneratedApiAuthoringCard.js +36 -0
  113. package/dist/ui/admin/pages/GeneratedApiAuthoringCard.js.map +1 -0
  114. package/dist/ui/admin/pages/GeneratedApiEditor.d.ts +9 -0
  115. package/dist/ui/admin/pages/GeneratedApiEditor.d.ts.map +1 -0
  116. package/dist/ui/admin/pages/GeneratedApiEditor.js +31 -0
  117. package/dist/ui/admin/pages/GeneratedApiEditor.js.map +1 -0
  118. package/dist/ui/admin/pages/GeneratedApiFieldEditor.d.ts +7 -0
  119. package/dist/ui/admin/pages/GeneratedApiFieldEditor.d.ts.map +1 -0
  120. package/dist/ui/admin/pages/GeneratedApiFieldEditor.js +18 -0
  121. package/dist/ui/admin/pages/GeneratedApiFieldEditor.js.map +1 -0
  122. package/dist/ui/admin/pages/GeneratedApiNormalizedOperations.d.ts +5 -0
  123. package/dist/ui/admin/pages/GeneratedApiNormalizedOperations.d.ts.map +1 -0
  124. package/dist/ui/admin/pages/GeneratedApiNormalizedOperations.js +12 -0
  125. package/dist/ui/admin/pages/GeneratedApiNormalizedOperations.js.map +1 -0
  126. package/dist/ui/admin/pages/GeneratedApiResourceEditor.d.ts +8 -0
  127. package/dist/ui/admin/pages/GeneratedApiResourceEditor.d.ts.map +1 -0
  128. package/dist/ui/admin/pages/GeneratedApiResourceEditor.js +27 -0
  129. package/dist/ui/admin/pages/GeneratedApiResourceEditor.js.map +1 -0
  130. package/dist/ui/admin/pages/GeneratedApiToggle.d.ts +6 -0
  131. package/dist/ui/admin/pages/GeneratedApiToggle.d.ts.map +1 -0
  132. package/dist/ui/admin/pages/GeneratedApiToggle.js +8 -0
  133. package/dist/ui/admin/pages/GeneratedApiToggle.js.map +1 -0
  134. package/dist/ui/admin/pages/ManualRestSourceCard.js +1 -1
  135. package/dist/ui/admin/pages/ManualRestSourceCard.js.map +1 -1
  136. package/dist/ui/admin/pages/adminDataSourceOperations.d.ts +3 -0
  137. package/dist/ui/admin/pages/adminDataSourceOperations.d.ts.map +1 -1
  138. package/dist/ui/admin/pages/adminDataSourceOperations.js +5 -0
  139. package/dist/ui/admin/pages/adminDataSourceOperations.js.map +1 -1
  140. package/dist/ui/admin/pages/bindings/BindingDiagnosticsCard.d.ts +5 -0
  141. package/dist/ui/admin/pages/bindings/BindingDiagnosticsCard.d.ts.map +1 -0
  142. package/dist/ui/admin/pages/bindings/BindingDiagnosticsCard.js +8 -0
  143. package/dist/ui/admin/pages/bindings/BindingDiagnosticsCard.js.map +1 -0
  144. package/dist/ui/admin/pages/bindings/EventBindingComposer.d.ts +8 -0
  145. package/dist/ui/admin/pages/bindings/EventBindingComposer.d.ts.map +1 -0
  146. package/dist/ui/admin/pages/bindings/EventBindingComposer.js +60 -0
  147. package/dist/ui/admin/pages/bindings/EventBindingComposer.js.map +1 -0
  148. package/dist/ui/admin/pages/bindings/EventBindingsCard.d.ts +9 -0
  149. package/dist/ui/admin/pages/bindings/EventBindingsCard.d.ts.map +1 -0
  150. package/dist/ui/admin/pages/bindings/EventBindingsCard.js +27 -0
  151. package/dist/ui/admin/pages/bindings/EventBindingsCard.js.map +1 -0
  152. package/dist/ui/admin/pages/bindings/PropertyBindingEditor.d.ts +10 -0
  153. package/dist/ui/admin/pages/bindings/PropertyBindingEditor.d.ts.map +1 -0
  154. package/dist/ui/admin/pages/bindings/PropertyBindingEditor.js +61 -0
  155. package/dist/ui/admin/pages/bindings/PropertyBindingEditor.js.map +1 -0
  156. package/dist/ui/admin/pages/bindings/PropertyBindingsCard.d.ts +9 -0
  157. package/dist/ui/admin/pages/bindings/PropertyBindingsCard.d.ts.map +1 -0
  158. package/dist/ui/admin/pages/bindings/PropertyBindingsCard.js +13 -0
  159. package/dist/ui/admin/pages/bindings/PropertyBindingsCard.js.map +1 -0
  160. package/dist/ui/admin/pages/bindings/bindingAdminStyles.d.ts +28 -0
  161. package/dist/ui/admin/pages/bindings/bindingAdminStyles.d.ts.map +1 -0
  162. package/dist/ui/admin/pages/bindings/bindingAdminStyles.js +29 -0
  163. package/dist/ui/admin/pages/bindings/bindingAdminStyles.js.map +1 -0
  164. package/dist/ui/admin/pages/bindings/bindingEditorModel.d.ts +30 -0
  165. package/dist/ui/admin/pages/bindings/bindingEditorModel.d.ts.map +1 -0
  166. package/dist/ui/admin/pages/bindings/bindingEditorModel.js +107 -0
  167. package/dist/ui/admin/pages/bindings/bindingEditorModel.js.map +1 -0
  168. package/dist/ui/admin/pages/generatedApiEditorModel.d.ts +39 -0
  169. package/dist/ui/admin/pages/generatedApiEditorModel.d.ts.map +1 -0
  170. package/dist/ui/admin/pages/generatedApiEditorModel.js +226 -0
  171. package/dist/ui/admin/pages/generatedApiEditorModel.js.map +1 -0
  172. package/dist/ui/admin/pages/generatedApiEditorStyles.d.ts +34 -0
  173. package/dist/ui/admin/pages/generatedApiEditorStyles.d.ts.map +1 -0
  174. package/dist/ui/admin/pages/generatedApiEditorStyles.js +35 -0
  175. package/dist/ui/admin/pages/generatedApiEditorStyles.js.map +1 -0
  176. package/dist/ui/studioAppBarModel.d.ts +1 -1
  177. package/dist/ui/studioAppBarModel.d.ts.map +1 -1
  178. package/dist/ui/studioAppBarModel.js +4 -1
  179. package/dist/ui/studioAppBarModel.js.map +1 -1
  180. package/dist/ui/useStudioAppBarAugmentation.d.ts.map +1 -1
  181. package/dist/ui/useStudioAppBarAugmentation.js +16 -7
  182. package/dist/ui/useStudioAppBarAugmentation.js.map +1 -1
  183. package/package.json +13 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventBindingsCard.js","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/bindings/EventBindingsCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { PropBinding } from '@ankhorage/contracts';
2
+ import { type StudioBindablePropOption, type StudioBindingOperationOption } from '../../../../bindingAuthoringModel';
3
+ export declare function PropertyBindingEditor(props: {
4
+ readonly option: StudioBindablePropOption;
5
+ readonly binding: PropBinding | undefined;
6
+ readonly operations: readonly StudioBindingOperationOption[];
7
+ readonly onChange: (binding: PropBinding) => void;
8
+ readonly onRemove: () => void;
9
+ }): import("react").JSX.Element;
10
+ //# sourceMappingURL=PropertyBindingEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropertyBindingEditor.d.ts","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIxD,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EAClC,MAAM,mCAAmC,CAAC;AAa3C,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,SAAS,4BAA4B,EAAE,CAAC;IAC7D,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC/B,+BAgDA"}
@@ -0,0 +1,61 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Input, Select, Text } from '@ankhorage/zora';
3
+ import { View } from 'react-native';
4
+ import { assessStudioBindingCompatibility, } from '../../../../bindingAuthoringModel';
5
+ import { Field } from '../../adminPagePrimitives';
6
+ import { bindingAdminStyles } from './bindingAdminStyles';
7
+ import { createStudioOperationKey, createStudioPropBindingForSource, findStudioOperationByKey, formatStudioBindingLiteral, parseStudioBindingLiteral, STUDIO_BINDING_SOURCE_OPTIONS, } from './bindingEditorModel';
8
+ export function PropertyBindingEditor(props) {
9
+ const { binding, onChange, onRemove, option, operations } = props;
10
+ const operationOptions = operations.map((operation) => ({
11
+ value: createStudioOperationKey(operation.operation),
12
+ label: operation.label,
13
+ }));
14
+ const sourceKind = binding?.source.kind ?? 'literal';
15
+ return (_jsxs(View, { style: bindingAdminStyles.stack, children: [_jsxs(View, { style: bindingAdminStyles.row, children: [_jsx(View, { style: bindingAdminStyles.grow, children: _jsx(Field, { label: `${option.label} · ${option.meta.value.type}`, children: _jsx(Select, { value: sourceKind, options: STUDIO_BINDING_SOURCE_OPTIONS, onValueChange: (kind) => onChange(createStudioPropBindingForSource(kind, option.meta.value, operations)) }) }) }), binding ? (_jsx(Button, { variant: "ghost", color: "neutral", onPress: onRemove, children: "Remove" })) : null] }), binding ? (_jsx(PropertyBindingSourceFields, { binding: binding, expected: option.meta.value, operations: operations, operationOptions: operationOptions, onChange: onChange })) : (_jsx(Button, { variant: "soft", onPress: () => onChange(createStudioPropBindingForSource('literal', option.meta.value, operations)), children: "Add binding" }))] }));
16
+ }
17
+ function PropertyBindingSourceFields(props) {
18
+ const { binding, expected, onChange, operationOptions, operations } = props;
19
+ const { source } = binding;
20
+ if (source.kind === 'literal') {
21
+ if (expected.type === 'boolean') {
22
+ return (_jsx(Select, { value: String(source.value === true), options: [
23
+ { value: 'false', label: 'False' },
24
+ { value: 'true', label: 'True' },
25
+ ], onValueChange: (value) => onChange({ ...binding, source: { kind: 'literal', value: value === 'true' } }) }));
26
+ }
27
+ return (_jsx(Input, { value: formatStudioBindingLiteral(source.value), onChangeText: (value) => onChange({
28
+ ...binding,
29
+ source: { kind: 'literal', value: parseStudioBindingLiteral(value, expected) },
30
+ }) }));
31
+ }
32
+ if (source.kind === 'state' || source.kind === 'context') {
33
+ return (_jsx(Input, { value: source.path, placeholder: source.kind === 'state' ? 'draft.customer.name' : 'session.user.name', onChangeText: (path) => onChange({ ...binding, source: { ...source, path } }) }));
34
+ }
35
+ if (source.kind === 'event') {
36
+ return (_jsx(Text, { color: "danger", children: "Event sources are not available for persistent property bindings." }));
37
+ }
38
+ const operationKey = createStudioOperationKey(source.operation);
39
+ const operation = findStudioOperationByKey(operations, operationKey);
40
+ const responseOptions = (operation?.responsePaths ?? []).map((response) => {
41
+ const compatibility = assessStudioBindingCompatibility(expected, response.value);
42
+ return {
43
+ value: response.path,
44
+ label: `${response.label} · ${response.value.type}${compatibility === 'incompatible' ? ' · incompatible' : ''}`,
45
+ };
46
+ });
47
+ return (_jsxs(View, { style: bindingAdminStyles.stack, children: [_jsx(Field, { label: "Operation", children: _jsx(Select, { value: operationKey, options: operationOptions, onValueChange: (key) => {
48
+ const selected = findStudioOperationByKey(operations, key);
49
+ if (!selected)
50
+ return;
51
+ onChange({
52
+ ...binding,
53
+ source: {
54
+ kind: 'operation',
55
+ operation: selected.operation,
56
+ path: selected.responsePaths[0]?.path,
57
+ },
58
+ });
59
+ } }) }), _jsx(Field, { label: "Response path", children: _jsx(Select, { value: source.path ?? '', options: responseOptions, onValueChange: (path) => onChange({ ...binding, source: { ...source, path } }) }) }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: operation?.sourceLabel ?? 'The referenced operation is currently unavailable.' })] }));
60
+ }
61
+ //# sourceMappingURL=PropertyBindingEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropertyBindingEditor.js","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/bindings/PropertyBindingEditor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ComponentDataBindingRegistry, UiNode } from '@ankhorage/contracts';
2
+ import { type StudioBindingOperationOption } from '../../../../bindingAuthoringModel';
3
+ export declare function PropertyBindingsCard(props: {
4
+ readonly node: UiNode;
5
+ readonly registry: ComponentDataBindingRegistry;
6
+ readonly operations: readonly StudioBindingOperationOption[];
7
+ readonly onChange: (registry: ComponentDataBindingRegistry) => void;
8
+ }): import("react").JSX.Element;
9
+ //# sourceMappingURL=PropertyBindingsCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropertyBindingsCard.d.ts","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAIjF,OAAO,EAIL,KAAK,4BAA4B,EAClC,MAAM,mCAAmC,CAAC;AAK3C,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,4BAA4B,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,SAAS,4BAA4B,EAAE,CAAC;IAC7D,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,4BAA4B,KAAK,IAAI,CAAC;CACrE,+BAqCA"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Card, Text } from '@ankhorage/zora';
3
+ import { View } from 'react-native';
4
+ import { removeStudioPropBinding, resolveStudioBindableProps, upsertStudioPropBinding, } from '../../../../bindingAuthoringModel';
5
+ import { ZORA_BINDABLE_COMPONENT_META } from '@ankhorage/zora';
6
+ import { bindingAdminStyles } from './bindingAdminStyles';
7
+ import { PropertyBindingEditor } from './PropertyBindingEditor';
8
+ export function PropertyBindingsCard(props) {
9
+ const options = resolveStudioBindableProps(props.node, ZORA_BINDABLE_COMPONENT_META);
10
+ const current = props.registry[props.node.id]?.props ?? {};
11
+ return (_jsx(Card, { title: "Property / data bindings", children: _jsxs(View, { style: bindingAdminStyles.stack, children: [_jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: "Bind only properties explicitly exposed by ZORA metadata to literals, state, context, or canonical operation responses." }), options.map((option) => (_jsxs(View, { style: bindingAdminStyles.stack, children: [_jsx(PropertyBindingEditor, { option: option, binding: current[option.name], operations: props.operations, onChange: (binding) => props.onChange(upsertStudioPropBinding(props.registry, props.node, option.name, binding)), onRemove: () => props.onChange(removeStudioPropBinding(props.registry, props.node, option.name)) }), _jsx(View, { style: bindingAdminStyles.divider })] }, option.name))), options.length === 0 ? (_jsx(Text, { color: "neutral", emphasis: "muted", children: "This component exposes no bindable properties." })) : null] }) }));
12
+ }
13
+ //# sourceMappingURL=PropertyBindingsCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropertyBindingsCard.js","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/bindings/PropertyBindingsCard.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,GAExB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,UAAU,oBAAoB,CAAC,KAKpC;IACC,MAAM,OAAO,GAAG,0BAA0B,CAAC,KAAK,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;IAE3D,OAAO,CACL,KAAC,IAAI,IAAC,KAAK,EAAC,0BAA0B,YACpC,MAAC,IAAI,IAAC,KAAK,EAAE,kBAAkB,CAAC,KAAK,aACnC,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,EAAC,OAAO,EAAC,WAAW,wIAGnD,EACN,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,MAAC,IAAI,IAAmB,KAAK,EAAE,kBAAkB,CAAC,KAAK,aACrD,KAAC,qBAAqB,IACpB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAC7B,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CACpB,KAAK,CAAC,QAAQ,CACZ,uBAAuB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAC1E,EAEH,QAAQ,EAAE,GAAG,EAAE,CACb,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,GAElF,EACF,KAAC,IAAI,IAAC,KAAK,EAAE,kBAAkB,CAAC,OAAO,GAAI,KAdlC,MAAM,CAAC,IAAI,CAef,CACR,CAAC,EACD,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACtB,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,+DAE/B,CACR,CAAC,CAAC,CAAC,IAAI,IACH,GACF,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ export declare const bindingAdminStyles: {
2
+ stack: {
3
+ gap: number;
4
+ };
5
+ compactStack: {
6
+ gap: number;
7
+ };
8
+ row: {
9
+ flexDirection: "row";
10
+ flexWrap: "wrap";
11
+ gap: number;
12
+ alignItems: "flex-end";
13
+ };
14
+ grow: {
15
+ flexGrow: number;
16
+ flexBasis: number;
17
+ };
18
+ actions: {
19
+ flexDirection: "row";
20
+ flexWrap: "wrap";
21
+ gap: number;
22
+ };
23
+ divider: {
24
+ height: number;
25
+ backgroundColor: string;
26
+ };
27
+ };
28
+ //# sourceMappingURL=bindingAdminStyles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindingAdminStyles.d.ts","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/bindings/bindingAdminStyles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B7B,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { StyleSheet } from 'react-native';
2
+ export const bindingAdminStyles = StyleSheet.create({
3
+ stack: {
4
+ gap: 12,
5
+ },
6
+ compactStack: {
7
+ gap: 8,
8
+ },
9
+ row: {
10
+ flexDirection: 'row',
11
+ flexWrap: 'wrap',
12
+ gap: 10,
13
+ alignItems: 'flex-end',
14
+ },
15
+ grow: {
16
+ flexGrow: 1,
17
+ flexBasis: 220,
18
+ },
19
+ actions: {
20
+ flexDirection: 'row',
21
+ flexWrap: 'wrap',
22
+ gap: 8,
23
+ },
24
+ divider: {
25
+ height: 1,
26
+ backgroundColor: 'rgba(127, 127, 127, 0.2)',
27
+ },
28
+ });
29
+ //# sourceMappingURL=bindingAdminStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindingAdminStyles.js","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/bindings/bindingAdminStyles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC;IAClD,KAAK,EAAE;QACL,GAAG,EAAE,EAAE;KACR;IACD,YAAY,EAAE;QACZ,GAAG,EAAE,CAAC;KACP;IACD,GAAG,EAAE;QACH,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,EAAE;QACP,UAAU,EAAE,UAAU;KACvB;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,GAAG;KACf;IACD,OAAO,EAAE;QACP,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,CAAC;KACP;IACD,OAAO,EAAE;QACP,MAAM,EAAE,CAAC;QACT,eAAe,EAAE,0BAA0B;KAC5C;CACF,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { BindingOperationRef, BindingValue, EventBinding, PropBinding, UiBindableValueMeta, UiComponentEventPayloadFieldMeta } from '@ankhorage/contracts';
2
+ import type { StudioBindingInputFieldOption, StudioBindingOperationOption } from '../../../../bindingAuthoringModel';
3
+ export type StudioBindingSourceKind = PropBinding['source']['kind'];
4
+ export type StudioEventInputSourceKind = 'event' | 'literal';
5
+ export declare const STUDIO_BINDING_SOURCE_OPTIONS: readonly {
6
+ value: StudioBindingSourceKind;
7
+ label: string;
8
+ }[];
9
+ export declare function createStudioPropBindingForSource(kind: StudioBindingSourceKind, value: UiBindableValueMeta, operations: readonly StudioBindingOperationOption[]): PropBinding;
10
+ export declare function createStudioEventBinding(args: {
11
+ readonly target: {
12
+ readonly kind: 'action';
13
+ readonly type: string;
14
+ } | {
15
+ readonly kind: 'operation';
16
+ readonly operation: StudioBindingOperationOption['operation'];
17
+ };
18
+ readonly fields: readonly StudioBindingInputFieldOption[];
19
+ readonly drafts: Readonly<Record<string, StudioEventInputDraft>>;
20
+ }): EventBinding;
21
+ export interface StudioEventInputDraft {
22
+ readonly kind: StudioEventInputSourceKind;
23
+ readonly value: string;
24
+ }
25
+ export declare function createStudioEventInputDrafts(fields: readonly StudioBindingInputFieldOption[], eventFields: readonly UiComponentEventPayloadFieldMeta[]): Readonly<Record<string, StudioEventInputDraft>>;
26
+ export declare function parseStudioBindingLiteral(input: string, meta: UiBindableValueMeta): BindingValue;
27
+ export declare function formatStudioBindingLiteral(value: BindingValue): string;
28
+ export declare function createStudioOperationKey(operation: BindingOperationRef): string;
29
+ export declare function findStudioOperationByKey(operations: readonly StudioBindingOperationOption[], key: string): StudioBindingOperationOption | undefined;
30
+ //# sourceMappingURL=bindingEditorModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindingEditorModel.d.ts","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/bindings/bindingEditorModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,gCAAgC,EACjC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EACV,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,mCAAmC,CAAC;AAE3C,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AACpE,MAAM,MAAM,0BAA0B,GAAG,OAAO,GAAG,SAAS,CAAC;AAE7D,eAAO,MAAM,6BAA6B,EAAE,SAAS;IACnD,KAAK,EAAE,uBAAuB,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf,EAKA,CAAC;AAEF,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,uBAAuB,EAC7B,KAAK,EAAE,mBAAmB,EAC1B,UAAU,EAAE,SAAS,4BAA4B,EAAE,GAClD,WAAW,CASb;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,QAAQ,CAAC,MAAM,EACX;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAClD;QAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,4BAA4B,CAAC,WAAW,CAAC,CAAA;KAAE,CAAC;IAClG,QAAQ,CAAC,MAAM,EAAE,SAAS,6BAA6B,EAAE,CAAC;IAC1D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;CAClE,GAAG,YAAY,CAGf;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,SAAS,6BAA6B,EAAE,EAChD,WAAW,EAAE,SAAS,gCAAgC,EAAE,GACvD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAYjD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,YAAY,CAWhG;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAEtE;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,mBAAmB,GAAG,MAAM,CAG/E;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,SAAS,4BAA4B,EAAE,EACnD,GAAG,EAAE,MAAM,GACV,4BAA4B,GAAG,SAAS,CAE1C"}
@@ -0,0 +1,107 @@
1
+ export const STUDIO_BINDING_SOURCE_OPTIONS = [
2
+ { value: 'literal', label: 'Literal' },
3
+ { value: 'state', label: 'State' },
4
+ { value: 'context', label: 'Context' },
5
+ { value: 'operation', label: 'Operation result' },
6
+ ];
7
+ export function createStudioPropBindingForSource(kind, value, operations) {
8
+ if (kind === 'literal')
9
+ return { source: { kind, value: createDefaultBindingValue(value) } };
10
+ if (kind === 'state' || kind === 'context')
11
+ return { source: { kind, path: '' } };
12
+ if (kind === 'event')
13
+ return { source: { kind, path: '' } };
14
+ const [operation] = operations;
15
+ return operation
16
+ ? { source: { kind, operation: operation.operation, path: operation.responsePaths[0]?.path } }
17
+ : { source: { kind: 'context', path: '' } };
18
+ }
19
+ export function createStudioEventBinding(args) {
20
+ const input = createStudioEventInputMap(args.fields, args.drafts);
21
+ return { target: args.target, ...(Object.keys(input).length > 0 ? { input } : {}) };
22
+ }
23
+ export function createStudioEventInputDrafts(fields, eventFields) {
24
+ return Object.fromEntries(fields.map((field) => {
25
+ const matchingEventField = eventFields.find((candidate) => candidate.path === field.name);
26
+ return [
27
+ field.name,
28
+ matchingEventField
29
+ ? { kind: 'event', value: matchingEventField.path }
30
+ : { kind: 'literal', value: '' },
31
+ ];
32
+ }));
33
+ }
34
+ export function parseStudioBindingLiteral(input, meta) {
35
+ if (meta.type === 'boolean')
36
+ return input === 'true';
37
+ if (meta.type === 'number') {
38
+ const number = Number(input);
39
+ return Number.isFinite(number) ? number : 0;
40
+ }
41
+ if (meta.type === 'array')
42
+ return parseStructuredValue(input, []);
43
+ if (meta.type === 'object' || meta.type === 'record' || meta.type === 'imageAsset') {
44
+ return parseStructuredValue(input, {});
45
+ }
46
+ return input;
47
+ }
48
+ export function formatStudioBindingLiteral(value) {
49
+ return typeof value === 'string' ? value : JSON.stringify(value);
50
+ }
51
+ export function createStudioOperationKey(operation) {
52
+ const { dataSourceId, endpointId, operationId } = operation;
53
+ return `${dataSourceId}::${endpointId ?? ''}::${operationId}`;
54
+ }
55
+ export function findStudioOperationByKey(operations, key) {
56
+ return operations.find((option) => createStudioOperationKey(option.operation) === key);
57
+ }
58
+ function createStudioEventInputMap(fields, drafts) {
59
+ return Object.fromEntries(fields.flatMap((field) => {
60
+ const draft = drafts[field.name];
61
+ if (!draft || (!draft.value && !field.required))
62
+ return [];
63
+ return [
64
+ [
65
+ field.name,
66
+ draft.kind === 'event'
67
+ ? { kind: 'source', source: { kind: 'event', path: draft.value } }
68
+ : {
69
+ kind: 'literal',
70
+ value: parseStudioBindingLiteral(draft.value, field.value),
71
+ },
72
+ ],
73
+ ];
74
+ }));
75
+ }
76
+ function createDefaultBindingValue(meta) {
77
+ if (meta.type === 'boolean')
78
+ return false;
79
+ if (meta.type === 'number')
80
+ return 0;
81
+ if (meta.type === 'array')
82
+ return [];
83
+ if (meta.type === 'object' || meta.type === 'record' || meta.type === 'imageAsset')
84
+ return {};
85
+ return '';
86
+ }
87
+ function parseStructuredValue(input, fallback) {
88
+ try {
89
+ const value = JSON.parse(input);
90
+ return isBindingValue(value) ? value : fallback;
91
+ }
92
+ catch {
93
+ return fallback;
94
+ }
95
+ }
96
+ function isBindingValue(value) {
97
+ if (value === null)
98
+ return true;
99
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean')
100
+ return true;
101
+ if (Array.isArray(value))
102
+ return value.every(isBindingValue);
103
+ if (typeof value !== 'object')
104
+ return false;
105
+ return Object.values(value).every(isBindingValue);
106
+ }
107
+ //# sourceMappingURL=bindingEditorModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindingEditorModel.js","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/bindings/bindingEditorModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { DataSourceDiagnostic, DbFieldType, GeneratedApiCrudOperation, GeneratedApiDefinition, GeneratedRestApiDataSourceConfig } from '@ankhorage/contracts';
2
+ export interface GeneratedApiFieldDraft {
3
+ readonly name: string;
4
+ readonly type: DbFieldType;
5
+ readonly required: boolean;
6
+ readonly unique: boolean;
7
+ readonly defaultValueText: string;
8
+ }
9
+ export interface GeneratedApiResourceDraft {
10
+ readonly id: string;
11
+ readonly name: string;
12
+ readonly description: string;
13
+ readonly path: string;
14
+ readonly collectionName: string;
15
+ readonly schema: string;
16
+ readonly primaryKey: string;
17
+ readonly fields: readonly GeneratedApiFieldDraft[];
18
+ readonly operations: readonly GeneratedApiCrudOperation[];
19
+ readonly seedText: string;
20
+ }
21
+ export interface GeneratedApiEditorDraft {
22
+ readonly originalId?: string;
23
+ readonly id: string;
24
+ readonly name: string;
25
+ readonly description: string;
26
+ readonly basePath: string;
27
+ readonly databaseAdapterId: string;
28
+ readonly resources: readonly GeneratedApiResourceDraft[];
29
+ }
30
+ export interface GeneratedApiEditorResolution {
31
+ readonly definition?: GeneratedApiDefinition;
32
+ readonly dataSource?: GeneratedRestApiDataSourceConfig;
33
+ readonly diagnostics: readonly DataSourceDiagnostic[];
34
+ }
35
+ export declare function createGeneratedApiEditorDraft(definition?: GeneratedApiDefinition): GeneratedApiEditorDraft;
36
+ export declare function createGeneratedApiResourceDraft(index?: number): GeneratedApiResourceDraft;
37
+ export declare function createGeneratedApiFieldDraft(): GeneratedApiFieldDraft;
38
+ export declare function resolveGeneratedApiEditorDraft(draft: GeneratedApiEditorDraft): GeneratedApiEditorResolution;
39
+ //# sourceMappingURL=generatedApiEditorModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generatedApiEditorModel.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/generatedApiEditorModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EAEpB,WAAW,EACX,yBAAyB,EACzB,sBAAsB,EAGtB,gCAAgC,EACjC,MAAM,sBAAsB,CAAC;AAO9B,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAC1D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,yBAAyB,EAAE,CAAC;CAC1D;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,sBAAsB,CAAC;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,gCAAgC,CAAC;IACvD,QAAQ,CAAC,WAAW,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACvD;AAED,wBAAgB,6BAA6B,CAC3C,UAAU,CAAC,EAAE,sBAAsB,GAClC,uBAAuB,CAqBzB;AAED,wBAAgB,+BAA+B,CAAC,KAAK,SAAI,GAAG,yBAAyB,CAsBpF;AAED,wBAAgB,4BAA4B,IAAI,sBAAsB,CAQrE;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,uBAAuB,GAC7B,4BAA4B,CAsC9B"}
@@ -0,0 +1,226 @@
1
+ import { GENERATED_API_CRUD_OPERATIONS } from '@ankhorage/contracts';
2
+ import { createGeneratedApiDataSource, validateGeneratedApiDefinition, } from '@ankhorage/data-sources';
3
+ export function createGeneratedApiEditorDraft(definition) {
4
+ if (!definition) {
5
+ return {
6
+ id: '',
7
+ name: '',
8
+ description: '',
9
+ basePath: '/api',
10
+ databaseAdapterId: 'primary-db',
11
+ resources: [createGeneratedApiResourceDraft()],
12
+ };
13
+ }
14
+ return {
15
+ originalId: definition.id,
16
+ id: definition.id,
17
+ name: definition.name ?? '',
18
+ description: definition.description ?? '',
19
+ basePath: definition.basePath,
20
+ databaseAdapterId: definition.database.id,
21
+ resources: definition.resources.map(toResourceDraft),
22
+ };
23
+ }
24
+ export function createGeneratedApiResourceDraft(index = 0) {
25
+ const suffix = index === 0 ? 'items' : `items-${index + 1}`;
26
+ return {
27
+ id: suffix,
28
+ name: '',
29
+ description: '',
30
+ path: `/${suffix}`,
31
+ collectionName: suffix.replaceAll('-', '_'),
32
+ schema: 'public',
33
+ primaryKey: 'id',
34
+ fields: [
35
+ {
36
+ name: 'id',
37
+ type: 'uuid',
38
+ required: true,
39
+ unique: true,
40
+ defaultValueText: '',
41
+ },
42
+ ],
43
+ operations: [...GENERATED_API_CRUD_OPERATIONS],
44
+ seedText: '[]',
45
+ };
46
+ }
47
+ export function createGeneratedApiFieldDraft() {
48
+ return {
49
+ name: '',
50
+ type: 'text',
51
+ required: false,
52
+ unique: false,
53
+ defaultValueText: '',
54
+ };
55
+ }
56
+ export function resolveGeneratedApiEditorDraft(draft) {
57
+ const diagnostics = [];
58
+ const resources = draft.resources.map((resource, resourceIndex) => resolveResourceDraft(draft.id, resource, resourceIndex, diagnostics));
59
+ if (!draft.id.trim()) {
60
+ diagnostics.push(diagnostic(draft.id, 'Generated API ID is required.', 'id'));
61
+ }
62
+ if (!draft.databaseAdapterId.trim()) {
63
+ diagnostics.push(diagnostic(draft.id, 'A database adapter ID is required.', 'database.id'));
64
+ }
65
+ const definition = {
66
+ id: draft.id.trim(),
67
+ protocol: 'rest',
68
+ name: clean(draft.name),
69
+ description: clean(draft.description),
70
+ basePath: draft.basePath.trim(),
71
+ database: { id: draft.databaseAdapterId.trim(), kind: 'database' },
72
+ resources,
73
+ };
74
+ if (diagnostics.some((entry) => entry.severity === 'error')) {
75
+ return {
76
+ definition,
77
+ diagnostics: [...diagnostics, ...validateGeneratedApiDefinition(definition)],
78
+ };
79
+ }
80
+ const projection = createGeneratedApiDataSource(definition);
81
+ if (!projection.ok) {
82
+ return { definition, diagnostics: [...diagnostics, ...projection.diagnostics] };
83
+ }
84
+ return {
85
+ definition,
86
+ dataSource: projection.data,
87
+ diagnostics: [...diagnostics, ...(projection.diagnostics ?? [])],
88
+ };
89
+ }
90
+ function resolveResourceDraft(apiId, draft, resourceIndex, diagnostics) {
91
+ const fields = draft.fields.map((field, fieldIndex) => resolveFieldDraft(apiId, field, resourceIndex, fieldIndex, diagnostics));
92
+ const seed = parseSeed(apiId, draft.seedText, resourceIndex, diagnostics);
93
+ const primaryKey = clean(draft.primaryKey);
94
+ return {
95
+ id: draft.id.trim(),
96
+ name: clean(draft.name),
97
+ description: clean(draft.description),
98
+ path: draft.path.trim(),
99
+ collection: {
100
+ name: draft.collectionName.trim(),
101
+ schema: clean(draft.schema),
102
+ fields,
103
+ primaryKey,
104
+ },
105
+ operations: [...draft.operations],
106
+ seed,
107
+ };
108
+ }
109
+ function resolveFieldDraft(apiId, draft, resourceIndex, fieldIndex, diagnostics) {
110
+ const name = draft.name.trim();
111
+ const parsedDefault = parseDefaultValue(draft);
112
+ if (!parsedDefault.ok) {
113
+ diagnostics.push(diagnostic(apiId, parsedDefault.message, `resources.${resourceIndex}.collection.fields.${fieldIndex}.defaultValue`));
114
+ }
115
+ return {
116
+ name,
117
+ type: draft.type,
118
+ required: draft.required || undefined,
119
+ unique: draft.unique || undefined,
120
+ defaultValue: parsedDefault.ok ? parsedDefault.value : undefined,
121
+ };
122
+ }
123
+ function parseSeed(apiId, seedText, resourceIndex, diagnostics) {
124
+ const normalized = seedText.trim();
125
+ if (!normalized || normalized === '[]')
126
+ return undefined;
127
+ let value;
128
+ try {
129
+ value = JSON.parse(normalized);
130
+ }
131
+ catch {
132
+ diagnostics.push(diagnostic(apiId, 'Seed records must be valid JSON.', `resources.${resourceIndex}.seed`));
133
+ return undefined;
134
+ }
135
+ if (!Array.isArray(value) || !value.every(isSeedRecord)) {
136
+ diagnostics.push(diagnostic(apiId, 'Seed records must be a JSON array of serializable objects.', `resources.${resourceIndex}.seed`));
137
+ return undefined;
138
+ }
139
+ return value;
140
+ }
141
+ function isSeedRecord(value) {
142
+ return isRecord(value) && Object.values(value).every(isDataContractValue);
143
+ }
144
+ function isDataContractValue(value) {
145
+ if (value === null || typeof value === 'string' || typeof value === 'boolean')
146
+ return true;
147
+ if (typeof value === 'number')
148
+ return Number.isFinite(value);
149
+ if (Array.isArray(value))
150
+ return value.every(isDataContractValue);
151
+ return isRecord(value) && Object.values(value).every(isDataContractValue);
152
+ }
153
+ function parseDefaultValue(draft) {
154
+ const value = draft.defaultValueText.trim();
155
+ if (!value)
156
+ return { ok: true, value: undefined };
157
+ if (draft.type === 'text' || draft.type === 'uuid' || draft.type === 'datetime') {
158
+ return { ok: true, value };
159
+ }
160
+ if (draft.type === 'number') {
161
+ const parsed = Number(value);
162
+ return Number.isFinite(parsed)
163
+ ? { ok: true, value: parsed }
164
+ : { ok: false, message: 'Number defaults must be finite numbers.' };
165
+ }
166
+ if (draft.type === 'boolean') {
167
+ if (value === 'true')
168
+ return { ok: true, value: true };
169
+ if (value === 'false')
170
+ return { ok: true, value: false };
171
+ return { ok: false, message: 'Boolean defaults must be true or false.' };
172
+ }
173
+ try {
174
+ const parsed = JSON.parse(value);
175
+ return parsed === null || ['boolean', 'number', 'string'].includes(typeof parsed)
176
+ ? { ok: true, value: parsed }
177
+ : { ok: false, message: 'JSON defaults must be a scalar JSON value.' };
178
+ }
179
+ catch {
180
+ return { ok: false, message: 'JSON defaults must be valid JSON scalars.' };
181
+ }
182
+ }
183
+ function toResourceDraft(resource) {
184
+ return {
185
+ id: resource.id,
186
+ name: resource.name ?? '',
187
+ description: resource.description ?? '',
188
+ path: resource.path,
189
+ collectionName: resource.collection.name,
190
+ schema: resource.collection.schema ?? '',
191
+ primaryKey: resource.collection.primaryKey ?? '',
192
+ fields: resource.collection.fields.map((field) => ({
193
+ name: field.name,
194
+ type: field.type,
195
+ required: field.required ?? false,
196
+ unique: field.unique ?? false,
197
+ defaultValueText: formatDefaultValue(field.defaultValue),
198
+ })),
199
+ operations: [...resource.operations],
200
+ seedText: JSON.stringify(resource.seed ?? [], null, 2),
201
+ };
202
+ }
203
+ function formatDefaultValue(value) {
204
+ if (value === undefined)
205
+ return '';
206
+ if (value === null)
207
+ return 'null';
208
+ return String(value);
209
+ }
210
+ function clean(value) {
211
+ const normalized = value.trim();
212
+ return normalized || undefined;
213
+ }
214
+ function diagnostic(apiId, message, path) {
215
+ return {
216
+ code: 'invalid-config',
217
+ dataSourceId: apiId.trim() || undefined,
218
+ message,
219
+ path,
220
+ severity: 'error',
221
+ };
222
+ }
223
+ function isRecord(value) {
224
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
225
+ }
226
+ //# sourceMappingURL=generatedApiEditorModel.js.map