@ankhorage/contracts 7.9.0 → 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/dist/appManifest/apis.d.ts +3 -0
  4. package/dist/appManifest/apis.d.ts.map +1 -0
  5. package/dist/appManifest/apis.js +81 -0
  6. package/dist/appManifest/apis.js.map +1 -0
  7. package/dist/appManifest/bindings.js +1 -1
  8. package/dist/appManifest/bindings.js.map +1 -1
  9. package/dist/appManifest/data.d.ts +5 -0
  10. package/dist/appManifest/data.d.ts.map +1 -0
  11. package/dist/appManifest/data.js +140 -0
  12. package/dist/appManifest/data.js.map +1 -0
  13. package/dist/appManifest/dataSources.d.ts.map +1 -1
  14. package/dist/appManifest/dataSources.js +23 -120
  15. package/dist/appManifest/dataSources.js.map +1 -1
  16. package/dist/appManifest/infra.d.ts.map +1 -1
  17. package/dist/appManifest/infra.js +2 -0
  18. package/dist/appManifest/infra.js.map +1 -1
  19. package/dist/appManifest.d.ts.map +1 -1
  20. package/dist/appManifest.js +4 -6
  21. package/dist/appManifest.js.map +1 -1
  22. package/dist/bindings.d.ts +2 -2
  23. package/dist/bindings.d.ts.map +1 -1
  24. package/dist/bindings.js.map +1 -1
  25. package/dist/data/apis.d.ts +42 -38
  26. package/dist/data/apis.d.ts.map +1 -1
  27. package/dist/data/apis.js +1 -7
  28. package/dist/data/apis.js.map +1 -1
  29. package/dist/data/diagnostics.d.ts +3 -2
  30. package/dist/data/diagnostics.d.ts.map +1 -1
  31. package/dist/data/diagnostics.js.map +1 -1
  32. package/dist/data/ids.d.ts +1 -0
  33. package/dist/data/ids.d.ts.map +1 -1
  34. package/dist/data/ids.js.map +1 -1
  35. package/dist/data/sources.d.ts +5 -42
  36. package/dist/data/sources.d.ts.map +1 -1
  37. package/dist/data/sources.js.map +1 -1
  38. package/dist/requirements.d.ts +1 -1
  39. package/dist/requirements.d.ts.map +1 -1
  40. package/dist/requirements.js +1 -0
  41. package/dist/requirements.js.map +1 -1
  42. package/dist/types.d.ts +2 -3
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/types.js.map +1 -1
  45. package/package.json +1 -1
  46. package/src/appManifest/apis.ts +98 -0
  47. package/src/appManifest/bindings.ts +1 -1
  48. package/src/appManifest/data.ts +179 -0
  49. package/src/appManifest/dataSources.ts +30 -157
  50. package/src/appManifest/infra.ts +2 -0
  51. package/src/appManifest.test.ts +96 -40
  52. package/src/appManifest.ts +4 -6
  53. package/src/bindings.test.ts +36 -43
  54. package/src/bindings.ts +2 -2
  55. package/src/data/apis.test.ts +55 -45
  56. package/src/data/apis.ts +49 -46
  57. package/src/data/data.test.ts +19 -160
  58. package/src/data/diagnostics.ts +3 -1
  59. package/src/data/ids.ts +1 -0
  60. package/src/data/sources.ts +5 -53
  61. package/src/requirements.test.ts +23 -0
  62. package/src/requirements.ts +1 -0
  63. package/src/types.ts +2 -3
  64. package/dist/appManifest/generatedApis.d.ts +0 -2
  65. package/dist/appManifest/generatedApis.d.ts.map +0 -1
  66. package/dist/appManifest/generatedApis.js +0 -87
  67. package/dist/appManifest/generatedApis.js.map +0 -1
  68. package/src/appManifest/generatedApis.ts +0 -122
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @ankhorage/contracts
2
2
 
3
+ ## 8.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - f932e26: Add the canonical `ebookReader` platform requirement capability for manifest-authored EPUB and PDF reader surfaces.
8
+
9
+ ## 8.0.0
10
+
11
+ ### Major Changes
12
+
13
+ - 1eae0ae: Make `infra.apis[]` the canonical API manifest source, bind API operations by `apiId`, and remove the generated-API, API-flavoured data-source, and global `settings.apiBaseUrl` contract paths while keeping explicit database sources separate.
14
+
3
15
  ## 7.9.0
4
16
 
5
17
  ### Minor Changes
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  # CONTRACTS
5
5
 
6
- ![license: MIT](././paradox/badges/license.svg) ![npm: v7.8.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
6
+ ![license: MIT](././paradox/badges/license.svg) ![npm: v8.0.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
7
7
 
8
8
  Serializable app, action, theme, auth, and secret-store contracts for Ankhorage.
9
9
 
@@ -0,0 +1,3 @@
1
+ import type { ApiDefinitionList } from '../data';
2
+ export declare function isApiDefinitionList(value: unknown): value is ApiDefinitionList;
3
+ //# sourceMappingURL=apis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apis.d.ts","sourceRoot":"","sources":["../../src/appManifest/apis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAqBhE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAI9E"}
@@ -0,0 +1,81 @@
1
+ import { isCredentialRef, isDataEndpointRegistry, isDataSchemaRegistry } from './data';
2
+ import { isManifestValue, isOptionalString, isRecord } from './shared';
3
+ const API_BASE_KEYS = [
4
+ 'id',
5
+ 'origin',
6
+ 'protocol',
7
+ 'name',
8
+ 'description',
9
+ 'credential',
10
+ 'endpoints',
11
+ 'schemas',
12
+ 'metadata',
13
+ ];
14
+ const EXTERNAL_REST_KEYS = new Set([...API_BASE_KEYS, 'baseUrl', 'openApi']);
15
+ const EXTERNAL_GRAPHQL_KEYS = new Set([...API_BASE_KEYS, 'endpointUrl', 'introspection']);
16
+ const INTERNAL_REST_KEYS = new Set([...API_BASE_KEYS, 'basePath']);
17
+ const OPEN_API_KEYS = new Set(['url', 'documentId', 'version']);
18
+ const INTROSPECTION_KEYS = new Set(['enabled', 'schemaVersion']);
19
+ export function isApiDefinitionList(value) {
20
+ if (!Array.isArray(value) || !value.every(isApiDefinition))
21
+ return false;
22
+ const ids = value.map((api) => api.id);
23
+ return new Set(ids).size === ids.length;
24
+ }
25
+ function isApiDefinition(value) {
26
+ if (!isApiBaseDefinition(value))
27
+ return false;
28
+ if (value.origin === 'external' && value.protocol === 'rest')
29
+ return isExternalRestApi(value);
30
+ if (value.origin === 'external' && value.protocol === 'graphql') {
31
+ return isExternalGraphQlApi(value);
32
+ }
33
+ if (value.origin === 'internal' && value.protocol === 'rest')
34
+ return isInternalRestApi(value);
35
+ return false;
36
+ }
37
+ function isApiBaseDefinition(value) {
38
+ return (isRecord(value) &&
39
+ isNonEmptyString(value.id) &&
40
+ (value.origin === 'external' || value.origin === 'internal') &&
41
+ (value.protocol === 'graphql' || value.protocol === 'rest') &&
42
+ isOptionalString(value.name) &&
43
+ isOptionalString(value.description) &&
44
+ (value.credential === undefined || isCredentialRef(value.credential)) &&
45
+ isDataEndpointRegistry(value.endpoints) &&
46
+ (value.schemas === undefined || isDataSchemaRegistry(value.schemas)) &&
47
+ (value.metadata === undefined || isManifestValue(value.metadata)));
48
+ }
49
+ function isExternalRestApi(value) {
50
+ return (hasOnlyKeys(value, EXTERNAL_REST_KEYS) &&
51
+ isNonEmptyString(value.baseUrl) &&
52
+ (value.openApi === undefined || isOpenApiDocumentRef(value.openApi)));
53
+ }
54
+ function isExternalGraphQlApi(value) {
55
+ return (hasOnlyKeys(value, EXTERNAL_GRAPHQL_KEYS) &&
56
+ isNonEmptyString(value.endpointUrl) &&
57
+ (value.introspection === undefined || isGraphQlIntrospection(value.introspection)));
58
+ }
59
+ function isInternalRestApi(value) {
60
+ return hasOnlyKeys(value, INTERNAL_REST_KEYS) && isNonEmptyString(value.basePath);
61
+ }
62
+ function isOpenApiDocumentRef(value) {
63
+ return (isRecord(value) &&
64
+ hasOnlyKeys(value, OPEN_API_KEYS) &&
65
+ isOptionalString(value.url) &&
66
+ isOptionalString(value.documentId) &&
67
+ isOptionalString(value.version));
68
+ }
69
+ function isGraphQlIntrospection(value) {
70
+ return (isRecord(value) &&
71
+ hasOnlyKeys(value, INTROSPECTION_KEYS) &&
72
+ typeof value.enabled === 'boolean' &&
73
+ isOptionalString(value.schemaVersion));
74
+ }
75
+ function isNonEmptyString(value) {
76
+ return typeof value === 'string' && value.trim().length > 0;
77
+ }
78
+ function hasOnlyKeys(value, allowed) {
79
+ return Object.keys(value).every((key) => allowed.has(key));
80
+ }
81
+ //# sourceMappingURL=apis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apis.js","sourceRoot":"","sources":["../../src/appManifest/apis.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ApiDefinition, ApiDefinitionList } from '../data';\nimport { isCredentialRef, isDataEndpointRegistry, isDataSchemaRegistry } from './data';\nimport { isManifestValue, isOptionalString, isRecord } from './shared';\n\nconst API_BASE_KEYS = [\n 'id',\n 'origin',\n 'protocol',\n 'name',\n 'description',\n 'credential',\n 'endpoints',\n 'schemas',\n 'metadata',\n] as const;\nconst EXTERNAL_REST_KEYS = new Set([...API_BASE_KEYS, 'baseUrl', 'openApi']);\nconst EXTERNAL_GRAPHQL_KEYS = new Set([...API_BASE_KEYS, 'endpointUrl', 'introspection']);\nconst INTERNAL_REST_KEYS = new Set([...API_BASE_KEYS, 'basePath']);\nconst OPEN_API_KEYS = new Set(['url', 'documentId', 'version']);\nconst INTROSPECTION_KEYS = new Set(['enabled', 'schemaVersion']);\n\nexport function isApiDefinitionList(value: unknown): value is ApiDefinitionList {\n if (!Array.isArray(value) || !value.every(isApiDefinition)) return false;\n const ids = value.map((api) => api.id);\n return new Set(ids).size === ids.length;\n}\n\nfunction isApiDefinition(value: unknown): value is ApiDefinition {\n if (!isApiBaseDefinition(value)) return false;\n if (value.origin === 'external' && value.protocol === 'rest') return isExternalRestApi(value);\n if (value.origin === 'external' && value.protocol === 'graphql') {\n return isExternalGraphQlApi(value);\n }\n if (value.origin === 'internal' && value.protocol === 'rest') return isInternalRestApi(value);\n return false;\n}\n\nfunction isApiBaseDefinition(value: unknown): value is Record<string, unknown> {\n return (\n isRecord(value) &&\n isNonEmptyString(value.id) &&\n (value.origin === 'external' || value.origin === 'internal') &&\n (value.protocol === 'graphql' || value.protocol === 'rest') &&\n isOptionalString(value.name) &&\n isOptionalString(value.description) &&\n (value.credential === undefined || isCredentialRef(value.credential)) &&\n isDataEndpointRegistry(value.endpoints) &&\n (value.schemas === undefined || isDataSchemaRegistry(value.schemas)) &&\n (value.metadata === undefined || isManifestValue(value.metadata))\n );\n}\n\nfunction isExternalRestApi(value: Record<string, unknown>): boolean {\n return (\n hasOnlyKeys(value, EXTERNAL_REST_KEYS) &&\n isNonEmptyString(value.baseUrl) &&\n (value.openApi === undefined || isOpenApiDocumentRef(value.openApi))\n );\n}\n\nfunction isExternalGraphQlApi(value: Record<string, unknown>): boolean {\n return (\n hasOnlyKeys(value, EXTERNAL_GRAPHQL_KEYS) &&\n isNonEmptyString(value.endpointUrl) &&\n (value.introspection === undefined || isGraphQlIntrospection(value.introspection))\n );\n}\n\nfunction isInternalRestApi(value: Record<string, unknown>): boolean {\n return hasOnlyKeys(value, INTERNAL_REST_KEYS) && isNonEmptyString(value.basePath);\n}\n\nfunction isOpenApiDocumentRef(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, OPEN_API_KEYS) &&\n isOptionalString(value.url) &&\n isOptionalString(value.documentId) &&\n isOptionalString(value.version)\n );\n}\n\nfunction isGraphQlIntrospection(value: unknown): boolean {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, INTROSPECTION_KEYS) &&\n typeof value.enabled === 'boolean' &&\n isOptionalString(value.schemaVersion)\n );\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\nfunction hasOnlyKeys(value: Record<string, unknown>, allowed: ReadonlySet<string>): boolean {\n return Object.keys(value).every((key) => allowed.has(key));\n}\n"]}
@@ -57,7 +57,7 @@ function isBindingCondition(value) {
57
57
  }
58
58
  function isBindingOperationRef(value) {
59
59
  return (isRecord(value) &&
60
- typeof value.dataSourceId === 'string' &&
60
+ typeof value.apiId === 'string' &&
61
61
  typeof value.operationId === 'string' &&
62
62
  isOptionalString(value.endpointId));
63
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../src/appManifest/bindings.ts"],"names":[],"mappings":"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","sourcesContent":["import { isManifestValue, isOptionalString, isRecord } from './shared';\n\nexport function isComponentDataBindingRegistry(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every(isComponentDataBinding);\n}\n\nexport function isBindingValueSource(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.kind === 'string' &&\n ['context', 'event', 'literal', 'operation', 'state'].includes(value.kind) &&\n (value.kind === 'literal'\n ? isManifestValue(value.value)\n : value.kind === 'operation'\n ? isBindingOperationRef(value.operation) && isOptionalString(value.path)\n : typeof value.path === 'string')\n );\n}\n\nexport function isScreenDataLoaderDefinition(value: unknown): boolean {\n return (\n isRecord(value) &&\n value.kind === 'operation' &&\n isOptionalString(value.id) &&\n isBindingOperationRef(value.operation) &&\n (value.input === undefined || isBindingInputMap(value.input))\n );\n}\n\nfunction isComponentDataBinding(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.componentId === 'string' &&\n isOptionalString(value.componentType) &&\n (value.props === undefined ||\n (isRecord(value.props) && Object.values(value.props).every(isPropBinding))) &&\n (value.events === undefined ||\n (isRecord(value.events) &&\n Object.values(value.events).every(\n (bindings) => Array.isArray(bindings) && bindings.every(isEventBinding),\n )))\n );\n}\n\nfunction isPropBinding(value: unknown): boolean {\n return (\n isRecord(value) &&\n isBindingValueSource(value.source) &&\n (value.fallback === undefined || isBindingFallback(value.fallback)) &&\n (value.loading === undefined || isBindingLifecycleBehavior(value.loading)) &&\n (value.error === undefined || isBindingLifecycleBehavior(value.error)) &&\n (value.empty === undefined || isBindingLifecycleBehavior(value.empty)) &&\n isOptionalBindingTransforms(value.transforms)\n );\n}\n\nfunction isEventBinding(value: unknown): boolean {\n return (\n isRecord(value) &&\n isEventBindingTarget(value.target) &&\n (value.input === undefined || isBindingInputMap(value.input)) &&\n (value.when === undefined || isBindingCondition(value.when))\n );\n}\n\nfunction isEventBindingTarget(value: unknown): boolean {\n return (\n isRecord(value) &&\n ((value.kind === 'action' && typeof value.type === 'string') ||\n (value.kind === 'operation' && isBindingOperationRef(value.operation)))\n );\n}\n\nfunction isBindingCondition(value: unknown): boolean {\n return (\n isRecord(value) &&\n isBindingValueSource(value.source) &&\n ['eq', 'exists', 'neq', 'notExists'].includes(String(value.operator)) &&\n (value.value === undefined || isManifestValue(value.value))\n );\n}\n\nfunction isBindingOperationRef(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.dataSourceId === 'string' &&\n typeof value.operationId === 'string' &&\n isOptionalString(value.endpointId)\n );\n}\n\nfunction isBindingFallback(value: unknown): boolean {\n return (\n isRecord(value) &&\n (value.value === undefined || isManifestValue(value.value)) &&\n (value.source === undefined || isBindingValueSource(value.source))\n );\n}\n\nfunction isBindingLifecycleBehavior(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.state === 'string' &&\n ['empty', 'error', 'loading'].includes(value.state) &&\n (value.fallback === undefined || isBindingFallback(value.fallback)) &&\n isOptionalString(value.message)\n );\n}\n\nfunction isOptionalBindingTransforms(value: unknown): boolean {\n return (\n value === undefined ||\n (Array.isArray(value) &&\n value.every((transform) => ['lowercase', 'trim', 'uppercase'].includes(String(transform))))\n );\n}\n\nfunction isBindingInputMap(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every(isBindingInputValue);\n}\n\nfunction isBindingInputValue(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.kind === 'string' &&\n ((value.kind === 'array' &&\n Array.isArray(value.items) &&\n value.items.every(isBindingInputValue)) ||\n (value.kind === 'literal' && isManifestValue(value.value)) ||\n (value.kind === 'object' && isBindingInputMap(value.fields)) ||\n (value.kind === 'source' &&\n isBindingValueSource(value.source) &&\n isOptionalBindingTransforms(value.transforms)))\n );\n}\n"]}
1
+ {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../src/appManifest/bindings.ts"],"names":[],"mappings":"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","sourcesContent":["import { isManifestValue, isOptionalString, isRecord } from './shared';\n\nexport function isComponentDataBindingRegistry(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every(isComponentDataBinding);\n}\n\nexport function isBindingValueSource(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.kind === 'string' &&\n ['context', 'event', 'literal', 'operation', 'state'].includes(value.kind) &&\n (value.kind === 'literal'\n ? isManifestValue(value.value)\n : value.kind === 'operation'\n ? isBindingOperationRef(value.operation) && isOptionalString(value.path)\n : typeof value.path === 'string')\n );\n}\n\nexport function isScreenDataLoaderDefinition(value: unknown): boolean {\n return (\n isRecord(value) &&\n value.kind === 'operation' &&\n isOptionalString(value.id) &&\n isBindingOperationRef(value.operation) &&\n (value.input === undefined || isBindingInputMap(value.input))\n );\n}\n\nfunction isComponentDataBinding(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.componentId === 'string' &&\n isOptionalString(value.componentType) &&\n (value.props === undefined ||\n (isRecord(value.props) && Object.values(value.props).every(isPropBinding))) &&\n (value.events === undefined ||\n (isRecord(value.events) &&\n Object.values(value.events).every(\n (bindings) => Array.isArray(bindings) && bindings.every(isEventBinding),\n )))\n );\n}\n\nfunction isPropBinding(value: unknown): boolean {\n return (\n isRecord(value) &&\n isBindingValueSource(value.source) &&\n (value.fallback === undefined || isBindingFallback(value.fallback)) &&\n (value.loading === undefined || isBindingLifecycleBehavior(value.loading)) &&\n (value.error === undefined || isBindingLifecycleBehavior(value.error)) &&\n (value.empty === undefined || isBindingLifecycleBehavior(value.empty)) &&\n isOptionalBindingTransforms(value.transforms)\n );\n}\n\nfunction isEventBinding(value: unknown): boolean {\n return (\n isRecord(value) &&\n isEventBindingTarget(value.target) &&\n (value.input === undefined || isBindingInputMap(value.input)) &&\n (value.when === undefined || isBindingCondition(value.when))\n );\n}\n\nfunction isEventBindingTarget(value: unknown): boolean {\n return (\n isRecord(value) &&\n ((value.kind === 'action' && typeof value.type === 'string') ||\n (value.kind === 'operation' && isBindingOperationRef(value.operation)))\n );\n}\n\nfunction isBindingCondition(value: unknown): boolean {\n return (\n isRecord(value) &&\n isBindingValueSource(value.source) &&\n ['eq', 'exists', 'neq', 'notExists'].includes(String(value.operator)) &&\n (value.value === undefined || isManifestValue(value.value))\n );\n}\n\nfunction isBindingOperationRef(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.apiId === 'string' &&\n typeof value.operationId === 'string' &&\n isOptionalString(value.endpointId)\n );\n}\n\nfunction isBindingFallback(value: unknown): boolean {\n return (\n isRecord(value) &&\n (value.value === undefined || isManifestValue(value.value)) &&\n (value.source === undefined || isBindingValueSource(value.source))\n );\n}\n\nfunction isBindingLifecycleBehavior(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.state === 'string' &&\n ['empty', 'error', 'loading'].includes(value.state) &&\n (value.fallback === undefined || isBindingFallback(value.fallback)) &&\n isOptionalString(value.message)\n );\n}\n\nfunction isOptionalBindingTransforms(value: unknown): boolean {\n return (\n value === undefined ||\n (Array.isArray(value) &&\n value.every((transform) => ['lowercase', 'trim', 'uppercase'].includes(String(transform))))\n );\n}\n\nfunction isBindingInputMap(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every(isBindingInputValue);\n}\n\nfunction isBindingInputValue(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.kind === 'string' &&\n ((value.kind === 'array' &&\n Array.isArray(value.items) &&\n value.items.every(isBindingInputValue)) ||\n (value.kind === 'literal' && isManifestValue(value.value)) ||\n (value.kind === 'object' && isBindingInputMap(value.fields)) ||\n (value.kind === 'source' &&\n isBindingValueSource(value.source) &&\n isOptionalBindingTransforms(value.transforms)))\n );\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export declare function isDataEndpointRegistry(value: unknown): boolean;
2
+ export declare function isDataSchemaRegistry(value: unknown): boolean;
3
+ export declare function isCredentialRef(value: unknown): boolean;
4
+ export declare function isAdapterRef(value: unknown): boolean;
5
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/appManifest/data.ts"],"names":[],"mappings":"AAoBA,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE9D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE5D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQvD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CASpD"}
@@ -0,0 +1,140 @@
1
+ import { isManifestValue, isOptionalBoolean, isOptionalString, isRecord, isStringArray, } from './shared';
2
+ const DATA_SCHEMA_TYPES = new Set([
3
+ 'array',
4
+ 'boolean',
5
+ 'integer',
6
+ 'null',
7
+ 'number',
8
+ 'object',
9
+ 'string',
10
+ ]);
11
+ const OPERATION_INTENTS = new Set(['action', 'create', 'delete', 'read', 'update']);
12
+ const PARAMETER_LOCATIONS = new Set(['body', 'cookie', 'header', 'path', 'query']);
13
+ export function isDataEndpointRegistry(value) {
14
+ return isRecord(value) && Object.values(value).every(isDataEndpointConfig);
15
+ }
16
+ export function isDataSchemaRegistry(value) {
17
+ return isRecord(value) && Object.values(value).every(isDataSchema);
18
+ }
19
+ export function isCredentialRef(value) {
20
+ return (isRecord(value) &&
21
+ typeof value.id === 'string' &&
22
+ typeof value.kind === 'string' &&
23
+ isOptionalString(value.label) &&
24
+ isOptionalString(value.scope));
25
+ }
26
+ export function isAdapterRef(value) {
27
+ return (isRecord(value) &&
28
+ typeof value.id === 'string' &&
29
+ typeof value.kind === 'string' &&
30
+ isOptionalString(value.packageName) &&
31
+ isOptionalString(value.exportName) &&
32
+ (value.config === undefined || isManifestValue(value.config)));
33
+ }
34
+ function isDataEndpointConfig(value) {
35
+ return (isRecord(value) &&
36
+ typeof value.id === 'string' &&
37
+ typeof value.kind === 'string' &&
38
+ isOptionalString(value.name) &&
39
+ isOptionalString(value.description) &&
40
+ isOptionalString(value.baseUrl) &&
41
+ isOptionalString(value.path) &&
42
+ (value.credential === undefined || isCredentialRef(value.credential)) &&
43
+ isRecord(value.operations) &&
44
+ Object.values(value.operations).every(isDataOperationConfig) &&
45
+ (value.metadata === undefined || isManifestValue(value.metadata)));
46
+ }
47
+ function isDataOperationConfig(value) {
48
+ return (isRecord(value) &&
49
+ typeof value.id === 'string' &&
50
+ isOptionalString(value.endpointId) &&
51
+ isOptionalString(value.name) &&
52
+ isOptionalString(value.description) &&
53
+ typeof value.protocol === 'string' &&
54
+ typeof value.intent === 'string' &&
55
+ OPERATION_INTENTS.has(value.intent) &&
56
+ isOptionalString(value.method) &&
57
+ isOptionalString(value.path) &&
58
+ (value.request === undefined || isDataOperationRequest(value.request)) &&
59
+ (value.response === undefined || isDataOperationResponse(value.response)) &&
60
+ (value.pagination === undefined || isRecord(value.pagination)) &&
61
+ (value.credential === undefined || isCredentialRef(value.credential)) &&
62
+ (value.metadata === undefined || isManifestValue(value.metadata)));
63
+ }
64
+ function isDataOperationRequest(value) {
65
+ return (isRecord(value) &&
66
+ isDataSchemaSlot(value) &&
67
+ isOptionalString(value.contentType) &&
68
+ (value.parameters === undefined ||
69
+ (Array.isArray(value.parameters) && value.parameters.every(isDataOperationParameter))));
70
+ }
71
+ function isDataOperationParameter(value) {
72
+ return (isRecord(value) &&
73
+ isDataSchemaSlot(value) &&
74
+ typeof value.name === 'string' &&
75
+ typeof value.location === 'string' &&
76
+ PARAMETER_LOCATIONS.has(value.location) &&
77
+ isOptionalBoolean(value.required) &&
78
+ isOptionalString(value.description) &&
79
+ (value.default === undefined || isManifestValue(value.default)));
80
+ }
81
+ function isDataOperationResponse(value) {
82
+ return (isRecord(value) &&
83
+ isDataSchemaSlot(value) &&
84
+ (value.status === undefined ||
85
+ typeof value.status === 'string' ||
86
+ typeof value.status === 'number') &&
87
+ isOptionalString(value.contentType) &&
88
+ isOptionalString(value.description));
89
+ }
90
+ function isDataSchemaSlot(value) {
91
+ return ((value.schema === undefined || isDataSchema(value.schema)) &&
92
+ (value.schemaRef === undefined || isDataSchemaRef(value.schemaRef)));
93
+ }
94
+ function isDataSchema(value) {
95
+ if (!isRecord(value) || !isDataSchemaType(value.type))
96
+ return false;
97
+ if (!isOptionalSchemaScalars(value))
98
+ return false;
99
+ if (!isOptionalSchemaCollections(value))
100
+ return false;
101
+ return isOptionalSchemaComposition(value);
102
+ }
103
+ function isDataSchemaType(value) {
104
+ if (value === undefined)
105
+ return true;
106
+ if (typeof value === 'string')
107
+ return DATA_SCHEMA_TYPES.has(value);
108
+ return (Array.isArray(value) &&
109
+ value.every((entry) => typeof entry === 'string' && DATA_SCHEMA_TYPES.has(entry)));
110
+ }
111
+ function isOptionalSchemaScalars(value) {
112
+ return (isOptionalString(value.title) &&
113
+ isOptionalString(value.description) &&
114
+ isOptionalString(value.format) &&
115
+ isOptionalBoolean(value.nullable) &&
116
+ (value.const === undefined || isManifestValue(value.const)) &&
117
+ (value.default === undefined || isManifestValue(value.default)) &&
118
+ (value.enum === undefined ||
119
+ (Array.isArray(value.enum) && value.enum.every(isManifestValue))) &&
120
+ (value.ref === undefined || isDataSchemaRef(value.ref)));
121
+ }
122
+ function isOptionalSchemaCollections(value) {
123
+ return ((value.required === undefined || isStringArray(value.required)) &&
124
+ (value.properties === undefined ||
125
+ (isRecord(value.properties) && Object.values(value.properties).every(isDataSchema))) &&
126
+ (value.additionalProperties === undefined ||
127
+ typeof value.additionalProperties === 'boolean' ||
128
+ isDataSchema(value.additionalProperties)) &&
129
+ (value.items === undefined || isDataSchema(value.items)));
130
+ }
131
+ function isOptionalSchemaComposition(value) {
132
+ return ['allOf', 'anyOf', 'oneOf'].every((key) => {
133
+ const entry = value[key];
134
+ return entry === undefined || (Array.isArray(entry) && entry.every(isDataSchema));
135
+ });
136
+ }
137
+ function isDataSchemaRef(value) {
138
+ return isRecord(value) && typeof value.id === 'string';
139
+ }
140
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/appManifest/data.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isManifestValue,\n isOptionalBoolean,\n isOptionalString,\n isRecord,\n isStringArray,\n} from './shared';\n\nconst DATA_SCHEMA_TYPES = new Set([\n 'array',\n 'boolean',\n 'integer',\n 'null',\n 'number',\n 'object',\n 'string',\n]);\nconst OPERATION_INTENTS = new Set(['action', 'create', 'delete', 'read', 'update']);\nconst PARAMETER_LOCATIONS = new Set(['body', 'cookie', 'header', 'path', 'query']);\n\nexport function isDataEndpointRegistry(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every(isDataEndpointConfig);\n}\n\nexport function isDataSchemaRegistry(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every(isDataSchema);\n}\n\nexport function isCredentialRef(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n typeof value.kind === 'string' &&\n isOptionalString(value.label) &&\n isOptionalString(value.scope)\n );\n}\n\nexport function isAdapterRef(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n typeof value.kind === 'string' &&\n isOptionalString(value.packageName) &&\n isOptionalString(value.exportName) &&\n (value.config === undefined || isManifestValue(value.config))\n );\n}\n\nfunction isDataEndpointConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n typeof value.kind === 'string' &&\n isOptionalString(value.name) &&\n isOptionalString(value.description) &&\n isOptionalString(value.baseUrl) &&\n isOptionalString(value.path) &&\n (value.credential === undefined || isCredentialRef(value.credential)) &&\n isRecord(value.operations) &&\n Object.values(value.operations).every(isDataOperationConfig) &&\n (value.metadata === undefined || isManifestValue(value.metadata))\n );\n}\n\nfunction isDataOperationConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n isOptionalString(value.endpointId) &&\n isOptionalString(value.name) &&\n isOptionalString(value.description) &&\n typeof value.protocol === 'string' &&\n typeof value.intent === 'string' &&\n OPERATION_INTENTS.has(value.intent) &&\n isOptionalString(value.method) &&\n isOptionalString(value.path) &&\n (value.request === undefined || isDataOperationRequest(value.request)) &&\n (value.response === undefined || isDataOperationResponse(value.response)) &&\n (value.pagination === undefined || isRecord(value.pagination)) &&\n (value.credential === undefined || isCredentialRef(value.credential)) &&\n (value.metadata === undefined || isManifestValue(value.metadata))\n );\n}\n\nfunction isDataOperationRequest(value: unknown): boolean {\n return (\n isRecord(value) &&\n isDataSchemaSlot(value) &&\n isOptionalString(value.contentType) &&\n (value.parameters === undefined ||\n (Array.isArray(value.parameters) && value.parameters.every(isDataOperationParameter)))\n );\n}\n\nfunction isDataOperationParameter(value: unknown): boolean {\n return (\n isRecord(value) &&\n isDataSchemaSlot(value) &&\n typeof value.name === 'string' &&\n typeof value.location === 'string' &&\n PARAMETER_LOCATIONS.has(value.location) &&\n isOptionalBoolean(value.required) &&\n isOptionalString(value.description) &&\n (value.default === undefined || isManifestValue(value.default))\n );\n}\n\nfunction isDataOperationResponse(value: unknown): boolean {\n return (\n isRecord(value) &&\n isDataSchemaSlot(value) &&\n (value.status === undefined ||\n typeof value.status === 'string' ||\n typeof value.status === 'number') &&\n isOptionalString(value.contentType) &&\n isOptionalString(value.description)\n );\n}\n\nfunction isDataSchemaSlot(value: Record<string, unknown>): boolean {\n return (\n (value.schema === undefined || isDataSchema(value.schema)) &&\n (value.schemaRef === undefined || isDataSchemaRef(value.schemaRef))\n );\n}\n\nfunction isDataSchema(value: unknown): boolean {\n if (!isRecord(value) || !isDataSchemaType(value.type)) return false;\n if (!isOptionalSchemaScalars(value)) return false;\n if (!isOptionalSchemaCollections(value)) return false;\n return isOptionalSchemaComposition(value);\n}\n\nfunction isDataSchemaType(value: unknown): boolean {\n if (value === undefined) return true;\n if (typeof value === 'string') return DATA_SCHEMA_TYPES.has(value);\n return (\n Array.isArray(value) &&\n value.every((entry) => typeof entry === 'string' && DATA_SCHEMA_TYPES.has(entry))\n );\n}\n\nfunction isOptionalSchemaScalars(value: Record<string, unknown>): boolean {\n return (\n isOptionalString(value.title) &&\n isOptionalString(value.description) &&\n isOptionalString(value.format) &&\n isOptionalBoolean(value.nullable) &&\n (value.const === undefined || isManifestValue(value.const)) &&\n (value.default === undefined || isManifestValue(value.default)) &&\n (value.enum === undefined ||\n (Array.isArray(value.enum) && value.enum.every(isManifestValue))) &&\n (value.ref === undefined || isDataSchemaRef(value.ref))\n );\n}\n\nfunction isOptionalSchemaCollections(value: Record<string, unknown>): boolean {\n return (\n (value.required === undefined || isStringArray(value.required)) &&\n (value.properties === undefined ||\n (isRecord(value.properties) && Object.values(value.properties).every(isDataSchema))) &&\n (value.additionalProperties === undefined ||\n typeof value.additionalProperties === 'boolean' ||\n isDataSchema(value.additionalProperties)) &&\n (value.items === undefined || isDataSchema(value.items))\n );\n}\n\nfunction isOptionalSchemaComposition(value: Record<string, unknown>): boolean {\n return ['allOf', 'anyOf', 'oneOf'].every((key) => {\n const entry = value[key];\n return entry === undefined || (Array.isArray(entry) && entry.every(isDataSchema));\n });\n}\n\nfunction isDataSchemaRef(value: unknown): boolean {\n return isRecord(value) && typeof value.id === 'string';\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"dataSources.d.ts","sourceRoot":"","sources":["../../src/appManifest/dataSources.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE5D"}
1
+ {"version":3,"file":"dataSources.d.ts","sourceRoot":"","sources":["../../src/appManifest/dataSources.ts"],"names":[],"mappings":"AAoBA,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK5D"}
@@ -1,133 +1,36 @@
1
- import { isManifestValue, isOptionalBoolean, isOptionalString, isRecord } from './shared';
1
+ import { isAdapterRef, isCredentialRef, isDataEndpointRegistry, isDataSchemaRegistry, } from './data';
2
+ import { isManifestValue, isOptionalString, isRecord } from './shared';
3
+ const DATABASE_SOURCE_KEYS = new Set([
4
+ 'id',
5
+ 'kind',
6
+ 'name',
7
+ 'description',
8
+ 'credential',
9
+ 'adapter',
10
+ 'endpoints',
11
+ 'schemas',
12
+ 'metadata',
13
+ ]);
2
14
  export function isDataSourceRegistry(value) {
3
- return isRecord(value) && Object.values(value).every(isDataSourceConfig);
4
- }
5
- function isDataSourceConfig(value) {
6
- if (!hasBaseDataSourceShape(value))
7
- return false;
8
- if (value.kind === 'database')
9
- return isDatabaseDataSource(value);
10
- if (value.origin === 'generated')
11
- return isGeneratedDataSource(value);
12
- if (value.origin !== 'external')
13
- return false;
14
- return isExternalDataSource(value);
15
- }
16
- function hasBaseDataSourceShape(value) {
17
15
  return (isRecord(value) &&
18
- typeof value.id === 'string' &&
19
- (value.kind === 'api' || value.kind === 'database') &&
20
- isOptionalString(value.name) &&
21
- isOptionalString(value.description) &&
22
- (value.credential === undefined || isCredentialRef(value.credential)) &&
23
- isDataEndpointRegistry(value.endpoints) &&
24
- (value.schemas === undefined || isRecord(value.schemas)) &&
25
- (value.metadata === undefined || isManifestValue(value.metadata)));
16
+ Object.entries(value).every(([id, source]) => isDatabaseDataSource(source) && source.id === id));
26
17
  }
27
18
  function isDatabaseDataSource(value) {
28
- return (isRecord(value.adapter) && value.adapter.kind === 'database' && isAdapterRef(value.adapter));
29
- }
30
- function isGeneratedDataSource(value) {
31
- return (value.protocol === 'rest' &&
32
- typeof value.generatedApiId === 'string' &&
33
- isRecord(value.adapter) &&
34
- value.adapter.kind === 'database' &&
35
- isAdapterRef(value.adapter));
36
- }
37
- function isExternalDataSource(value) {
38
- if (value.protocol === 'rest') {
39
- return (typeof value.baseUrl === 'string' &&
40
- (value.openApi === undefined || isOpenApiDocumentRef(value.openApi)));
41
- }
42
- if (value.protocol === 'graphql') {
43
- return (typeof value.endpointUrl === 'string' &&
44
- (value.introspection === undefined || isGraphQlIntrospection(value.introspection)));
45
- }
46
- return false;
47
- }
48
- function isOpenApiDocumentRef(value) {
49
- return (isRecord(value) &&
50
- isOptionalString(value.url) &&
51
- isOptionalString(value.documentId) &&
52
- isOptionalString(value.version));
53
- }
54
- function isGraphQlIntrospection(value) {
55
- return (isRecord(value) && typeof value.enabled === 'boolean' && isOptionalString(value.schemaVersion));
56
- }
57
- function isDataEndpointRegistry(value) {
58
- return isRecord(value) && Object.values(value).every(isDataEndpointConfig);
59
- }
60
- function isDataEndpointConfig(value) {
61
- return (isRecord(value) &&
62
- typeof value.id === 'string' &&
63
- typeof value.kind === 'string' &&
64
- isOptionalString(value.name) &&
65
- isOptionalString(value.description) &&
66
- isOptionalString(value.baseUrl) &&
67
- isOptionalString(value.path) &&
68
- (value.credential === undefined || isCredentialRef(value.credential)) &&
69
- isRecord(value.operations) &&
70
- Object.values(value.operations).every(isDataOperationConfig) &&
71
- (value.metadata === undefined || isManifestValue(value.metadata)));
72
- }
73
- function isDataOperationConfig(value) {
74
19
  return (isRecord(value) &&
20
+ hasOnlyKeys(value, DATABASE_SOURCE_KEYS) &&
75
21
  typeof value.id === 'string' &&
76
- isOptionalString(value.endpointId) &&
22
+ value.kind === 'database' &&
77
23
  isOptionalString(value.name) &&
78
24
  isOptionalString(value.description) &&
79
- typeof value.protocol === 'string' &&
80
- typeof value.intent === 'string' &&
81
- ['action', 'create', 'delete', 'read', 'update'].includes(value.intent) &&
82
- isOptionalString(value.method) &&
83
- isOptionalString(value.path) &&
84
- (value.request === undefined || isDataOperationRequest(value.request)) &&
85
- (value.response === undefined || isDataOperationResponse(value.response)) &&
86
- (value.pagination === undefined || isRecord(value.pagination)) &&
87
25
  (value.credential === undefined || isCredentialRef(value.credential)) &&
26
+ isRecord(value.adapter) &&
27
+ value.adapter.kind === 'database' &&
28
+ isAdapterRef(value.adapter) &&
29
+ isDataEndpointRegistry(value.endpoints) &&
30
+ (value.schemas === undefined || isDataSchemaRegistry(value.schemas)) &&
88
31
  (value.metadata === undefined || isManifestValue(value.metadata)));
89
32
  }
90
- function isDataOperationRequest(value) {
91
- return (isRecord(value) &&
92
- isDataSchemaSlot(value) &&
93
- (value.parameters === undefined ||
94
- (Array.isArray(value.parameters) && value.parameters.every(isDataOperationParameter))));
95
- }
96
- function isDataOperationParameter(value) {
97
- return (isRecord(value) &&
98
- isDataSchemaSlot(value) &&
99
- typeof value.name === 'string' &&
100
- typeof value.location === 'string' &&
101
- ['body', 'cookie', 'header', 'path', 'query'].includes(value.location) &&
102
- isOptionalBoolean(value.required) &&
103
- isOptionalString(value.description) &&
104
- (value.default === undefined || isManifestValue(value.default)));
105
- }
106
- function isDataOperationResponse(value) {
107
- return (isRecord(value) &&
108
- isDataSchemaSlot(value) &&
109
- (value.status === undefined ||
110
- typeof value.status === 'string' ||
111
- typeof value.status === 'number') &&
112
- isOptionalString(value.contentType) &&
113
- isOptionalString(value.description));
114
- }
115
- function isDataSchemaSlot(value) {
116
- return isRecord(value) && (value.schema === undefined || isRecord(value.schema));
117
- }
118
- function isCredentialRef(value) {
119
- return (isRecord(value) &&
120
- typeof value.id === 'string' &&
121
- typeof value.kind === 'string' &&
122
- isOptionalString(value.label) &&
123
- isOptionalString(value.scope));
124
- }
125
- function isAdapterRef(value) {
126
- return (isRecord(value) &&
127
- typeof value.id === 'string' &&
128
- typeof value.kind === 'string' &&
129
- isOptionalString(value.packageName) &&
130
- isOptionalString(value.exportName) &&
131
- (value.config === undefined || isManifestValue(value.config)));
33
+ function hasOnlyKeys(value, allowed) {
34
+ return Object.keys(value).every((key) => allowed.has(key));
132
35
  }
133
36
  //# sourceMappingURL=dataSources.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataSources.js","sourceRoot":"","sources":["../../src/appManifest/dataSources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE1F,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACjD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9C,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;QACnD,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;QAC5B,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC;QACnC,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrE,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC;QACvC,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxD,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAClE,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA8B;IAC1D,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAC5F,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAA8B;IAC3D,OAAO,CACL,KAAK,CAAC,QAAQ,KAAK,MAAM;QACzB,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;QACxC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU;QACjC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA8B;IAC1D,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,CACL,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;YACjC,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CACrE,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CACL,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;YACrC,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,sBAAsB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CACnF,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC;QAC3B,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;QAClC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,CAC/F,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;QAC5B,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC;QACnC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC;QAC/B,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;QAC5B,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;QAC1B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC;QAC5D,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAClE,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;QAClC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;QAC5B,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC;QACnC,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;QAClC,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAChC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QACvE,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC;QAC9B,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;QAC5B,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzE,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9D,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAClE,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,gBAAgB,CAAC,KAAK,CAAC;QACvB,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS;YAC7B,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,CACzF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,gBAAgB,CAAC,KAAK,CAAC;QACvB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;QAClC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QACtE,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC;QACjC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC;QACnC,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAChE,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,gBAAgB,CAAC,KAAK,CAAC;QACvB,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;YACzB,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;YAChC,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;QACnC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC;QACnC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CACpC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7B,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAC9B,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC;QACnC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;QAClC,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAC9D,CAAC;AACJ,CAAC","sourcesContent":["import { isManifestValue, isOptionalBoolean, isOptionalString, isRecord } from './shared';\n\nexport function isDataSourceRegistry(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every(isDataSourceConfig);\n}\n\nfunction isDataSourceConfig(value: unknown): boolean {\n if (!hasBaseDataSourceShape(value)) return false;\n if (value.kind === 'database') return isDatabaseDataSource(value);\n if (value.origin === 'generated') return isGeneratedDataSource(value);\n if (value.origin !== 'external') return false;\n return isExternalDataSource(value);\n}\n\nfunction hasBaseDataSourceShape(value: unknown): value is Record<string, unknown> {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n (value.kind === 'api' || value.kind === 'database') &&\n isOptionalString(value.name) &&\n isOptionalString(value.description) &&\n (value.credential === undefined || isCredentialRef(value.credential)) &&\n isDataEndpointRegistry(value.endpoints) &&\n (value.schemas === undefined || isRecord(value.schemas)) &&\n (value.metadata === undefined || isManifestValue(value.metadata))\n );\n}\n\nfunction isDatabaseDataSource(value: Record<string, unknown>): boolean {\n return (\n isRecord(value.adapter) && value.adapter.kind === 'database' && isAdapterRef(value.adapter)\n );\n}\n\nfunction isGeneratedDataSource(value: Record<string, unknown>): boolean {\n return (\n value.protocol === 'rest' &&\n typeof value.generatedApiId === 'string' &&\n isRecord(value.adapter) &&\n value.adapter.kind === 'database' &&\n isAdapterRef(value.adapter)\n );\n}\n\nfunction isExternalDataSource(value: Record<string, unknown>): boolean {\n if (value.protocol === 'rest') {\n return (\n typeof value.baseUrl === 'string' &&\n (value.openApi === undefined || isOpenApiDocumentRef(value.openApi))\n );\n }\n\n if (value.protocol === 'graphql') {\n return (\n typeof value.endpointUrl === 'string' &&\n (value.introspection === undefined || isGraphQlIntrospection(value.introspection))\n );\n }\n\n return false;\n}\n\nfunction isOpenApiDocumentRef(value: unknown): boolean {\n return (\n isRecord(value) &&\n isOptionalString(value.url) &&\n isOptionalString(value.documentId) &&\n isOptionalString(value.version)\n );\n}\n\nfunction isGraphQlIntrospection(value: unknown): boolean {\n return (\n isRecord(value) && typeof value.enabled === 'boolean' && isOptionalString(value.schemaVersion)\n );\n}\n\nfunction isDataEndpointRegistry(value: unknown): boolean {\n return isRecord(value) && Object.values(value).every(isDataEndpointConfig);\n}\n\nfunction isDataEndpointConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n typeof value.kind === 'string' &&\n isOptionalString(value.name) &&\n isOptionalString(value.description) &&\n isOptionalString(value.baseUrl) &&\n isOptionalString(value.path) &&\n (value.credential === undefined || isCredentialRef(value.credential)) &&\n isRecord(value.operations) &&\n Object.values(value.operations).every(isDataOperationConfig) &&\n (value.metadata === undefined || isManifestValue(value.metadata))\n );\n}\n\nfunction isDataOperationConfig(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n isOptionalString(value.endpointId) &&\n isOptionalString(value.name) &&\n isOptionalString(value.description) &&\n typeof value.protocol === 'string' &&\n typeof value.intent === 'string' &&\n ['action', 'create', 'delete', 'read', 'update'].includes(value.intent) &&\n isOptionalString(value.method) &&\n isOptionalString(value.path) &&\n (value.request === undefined || isDataOperationRequest(value.request)) &&\n (value.response === undefined || isDataOperationResponse(value.response)) &&\n (value.pagination === undefined || isRecord(value.pagination)) &&\n (value.credential === undefined || isCredentialRef(value.credential)) &&\n (value.metadata === undefined || isManifestValue(value.metadata))\n );\n}\n\nfunction isDataOperationRequest(value: unknown): boolean {\n return (\n isRecord(value) &&\n isDataSchemaSlot(value) &&\n (value.parameters === undefined ||\n (Array.isArray(value.parameters) && value.parameters.every(isDataOperationParameter)))\n );\n}\n\nfunction isDataOperationParameter(value: unknown): boolean {\n return (\n isRecord(value) &&\n isDataSchemaSlot(value) &&\n typeof value.name === 'string' &&\n typeof value.location === 'string' &&\n ['body', 'cookie', 'header', 'path', 'query'].includes(value.location) &&\n isOptionalBoolean(value.required) &&\n isOptionalString(value.description) &&\n (value.default === undefined || isManifestValue(value.default))\n );\n}\n\nfunction isDataOperationResponse(value: unknown): boolean {\n return (\n isRecord(value) &&\n isDataSchemaSlot(value) &&\n (value.status === undefined ||\n typeof value.status === 'string' ||\n typeof value.status === 'number') &&\n isOptionalString(value.contentType) &&\n isOptionalString(value.description)\n );\n}\n\nfunction isDataSchemaSlot(value: unknown): boolean {\n return isRecord(value) && (value.schema === undefined || isRecord(value.schema));\n}\n\nfunction isCredentialRef(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n typeof value.kind === 'string' &&\n isOptionalString(value.label) &&\n isOptionalString(value.scope)\n );\n}\n\nfunction isAdapterRef(value: unknown): boolean {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n typeof value.kind === 'string' &&\n isOptionalString(value.packageName) &&\n isOptionalString(value.exportName) &&\n (value.config === undefined || isManifestValue(value.config))\n );\n}\n"]}
1
+ {"version":3,"file":"dataSources.js","sourceRoot":"","sources":["../../src/appManifest/dataSources.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEvE,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,IAAI;IACJ,MAAM;IACN,MAAM;IACN,aAAa;IACb,YAAY;IACZ,SAAS;IACT,WAAW;IACX,SAAS;IACT,UAAU;CACX,CAAC,CAAC;AAEH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAChG,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,WAAW,CAAC,KAAK,EAAE,oBAAoB,CAAC;QACxC,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,KAAK,CAAC,IAAI,KAAK,UAAU;QACzB,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;QAC5B,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC;QACnC,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU;QACjC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;QAC3B,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC;QACvC,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAClE,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAA8B,EAAE,OAA4B;IAC/E,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7D,CAAC","sourcesContent":["import {\n isAdapterRef,\n isCredentialRef,\n isDataEndpointRegistry,\n isDataSchemaRegistry,\n} from './data';\nimport { isManifestValue, isOptionalString, isRecord } from './shared';\n\nconst DATABASE_SOURCE_KEYS = new Set([\n 'id',\n 'kind',\n 'name',\n 'description',\n 'credential',\n 'adapter',\n 'endpoints',\n 'schemas',\n 'metadata',\n]);\n\nexport function isDataSourceRegistry(value: unknown): boolean {\n return (\n isRecord(value) &&\n Object.entries(value).every(([id, source]) => isDatabaseDataSource(source) && source.id === id)\n );\n}\n\nfunction isDatabaseDataSource(value: unknown): value is Record<string, unknown> {\n return (\n isRecord(value) &&\n hasOnlyKeys(value, DATABASE_SOURCE_KEYS) &&\n typeof value.id === 'string' &&\n value.kind === 'database' &&\n isOptionalString(value.name) &&\n isOptionalString(value.description) &&\n (value.credential === undefined || isCredentialRef(value.credential)) &&\n isRecord(value.adapter) &&\n value.adapter.kind === 'database' &&\n isAdapterRef(value.adapter) &&\n isDataEndpointRegistry(value.endpoints) &&\n (value.schemas === undefined || isDataSchemaRegistry(value.schemas)) &&\n (value.metadata === undefined || isManifestValue(value.metadata))\n );\n}\n\nfunction hasOnlyKeys(value: Record<string, unknown>, allowed: ReadonlySet<string>): boolean {\n return Object.keys(value).every((key) => allowed.has(key));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"infra.d.ts","sourceRoot":"","sources":["../../src/appManifest/infra.ts"],"names":[],"mappings":"AAmCA,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAevD"}
1
+ {"version":3,"file":"infra.d.ts","sourceRoot":"","sources":["../../src/appManifest/infra.ts"],"names":[],"mappings":"AAoCA,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAgBvD"}
@@ -1,5 +1,6 @@
1
1
  import { AUTH_OAUTH_PROVIDER_IDS } from '../auth';
2
2
  import { AUTH_PROFILE_CREATE_STRATEGIES, AUTH_PROFILE_PRIMARY_KEY_STRATEGIES, AUTH_PROFILE_UPDATE_STRATEGIES, AUTH_SCOPES, AUTH_SIGN_IN_IDENTIFIERS, AUTH_SIGN_UP_POLICIES, AUTHZ_ENGINES, AUTHZ_KINDS, DATABASE_TIERS, STATE_PERSISTENCE_MODES, STORAGE_PROVIDERS, } from '../types';
3
+ import { isApiDefinitionList } from './apis';
3
4
  import { isOptionalBoolean, isOptionalString, isRecord, isStringArray, isStringRecord, } from './shared';
4
5
  const AUTH_OAUTH_PROVIDER_SET = new Set(AUTH_OAUTH_PROVIDER_IDS);
5
6
  const AUTH_PROFILE_CREATE_STRATEGY_SET = new Set(AUTH_PROFILE_CREATE_STRATEGIES);
@@ -21,6 +22,7 @@ export function isInfraManifest(value) {
21
22
  (value.storage === undefined || isStorageSpec(value.storage)) &&
22
23
  (value.state === undefined || isStateSpec(value.state)) &&
23
24
  (value.networking === undefined || isNetworkingSpec(value.networking)) &&
25
+ (value.apis === undefined || isApiDefinitionList(value.apis)) &&
24
26
  Array.isArray(value.modules) &&
25
27
  value.modules.every((moduleId) => typeof moduleId === 'string') &&
26
28
  (value.modulesConfig === undefined || isRecord(value.modulesConfig)) &&