@signstack/cli 0.1.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.
- package/README.md +458 -0
- package/bin/run.js +12 -0
- package/dist/apps/signstack-cli/schemas/asset.schema.json +220 -0
- package/dist/apps/signstack-cli/schemas/blueprint.schema.json +485 -0
- package/dist/apps/signstack-cli/schemas/jsonata-function.schema.json +185 -0
- package/dist/apps/signstack-cli/schemas/schema.schema.json +97 -0
- package/dist/apps/signstack-cli/schemas/template.schema.json +295 -0
- package/dist/apps/signstack-cli/src/commands/auth/login.d.ts +25 -0
- package/dist/apps/signstack-cli/src/commands/auth/login.js +229 -0
- package/dist/apps/signstack-cli/src/commands/auth/login.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/auth/logout.d.ts +10 -0
- package/dist/apps/signstack-cli/src/commands/auth/logout.js +59 -0
- package/dist/apps/signstack-cli/src/commands/auth/logout.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/auth/whoami.d.ts +9 -0
- package/dist/apps/signstack-cli/src/commands/auth/whoami.js +85 -0
- package/dist/apps/signstack-cli/src/commands/auth/whoami.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/generate.d.ts +51 -0
- package/dist/apps/signstack-cli/src/commands/generate.js +479 -0
- package/dist/apps/signstack-cli/src/commands/generate.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/preview.d.ts +24 -0
- package/dist/apps/signstack-cli/src/commands/preview.js +162 -0
- package/dist/apps/signstack-cli/src/commands/preview.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/pull.d.ts +28 -0
- package/dist/apps/signstack-cli/src/commands/pull.js +244 -0
- package/dist/apps/signstack-cli/src/commands/pull.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/push.d.ts +46 -0
- package/dist/apps/signstack-cli/src/commands/push.js +460 -0
- package/dist/apps/signstack-cli/src/commands/push.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/run.d.ts +22 -0
- package/dist/apps/signstack-cli/src/commands/run.js +126 -0
- package/dist/apps/signstack-cli/src/commands/run.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/test.d.ts +6 -0
- package/dist/apps/signstack-cli/src/commands/test.js +25 -0
- package/dist/apps/signstack-cli/src/commands/test.js.map +1 -0
- package/dist/apps/signstack-cli/src/commands/validate.d.ts +59 -0
- package/dist/apps/signstack-cli/src/commands/validate.js +558 -0
- package/dist/apps/signstack-cli/src/commands/validate.js.map +1 -0
- package/dist/apps/signstack-cli/src/index.d.ts +1 -0
- package/dist/apps/signstack-cli/src/index.js +2 -0
- package/dist/apps/signstack-cli/src/index.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/api-client.d.ts +77 -0
- package/dist/apps/signstack-cli/src/lib/api-client.js +269 -0
- package/dist/apps/signstack-cli/src/lib/api-client.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/base-command.d.ts +38 -0
- package/dist/apps/signstack-cli/src/lib/base-command.js +135 -0
- package/dist/apps/signstack-cli/src/lib/base-command.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/config.d.ts +47 -0
- package/dist/apps/signstack-cli/src/lib/config.js +106 -0
- package/dist/apps/signstack-cli/src/lib/config.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/entity-data-resolver.d.ts +31 -0
- package/dist/apps/signstack-cli/src/lib/entity-data-resolver.js +107 -0
- package/dist/apps/signstack-cli/src/lib/entity-data-resolver.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/local-resource-loader.d.ts +72 -0
- package/dist/apps/signstack-cli/src/lib/local-resource-loader.js +238 -0
- package/dist/apps/signstack-cli/src/lib/local-resource-loader.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/path-utils.d.ts +4 -0
- package/dist/apps/signstack-cli/src/lib/path-utils.js +7 -0
- package/dist/apps/signstack-cli/src/lib/path-utils.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/payload-builder.d.ts +127 -0
- package/dist/apps/signstack-cli/src/lib/payload-builder.js +545 -0
- package/dist/apps/signstack-cli/src/lib/payload-builder.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/preview-handler.d.ts +95 -0
- package/dist/apps/signstack-cli/src/lib/preview-handler.js +611 -0
- package/dist/apps/signstack-cli/src/lib/preview-handler.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/preview-output-formatter.d.ts +63 -0
- package/dist/apps/signstack-cli/src/lib/preview-output-formatter.js +198 -0
- package/dist/apps/signstack-cli/src/lib/preview-output-formatter.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/public-api-client.d.ts +13 -0
- package/dist/apps/signstack-cli/src/lib/public-api-client.js +39 -0
- package/dist/apps/signstack-cli/src/lib/public-api-client.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/resource-puller.d.ts +131 -0
- package/dist/apps/signstack-cli/src/lib/resource-puller.js +800 -0
- package/dist/apps/signstack-cli/src/lib/resource-puller.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/resource-pusher.d.ts +87 -0
- package/dist/apps/signstack-cli/src/lib/resource-pusher.js +361 -0
- package/dist/apps/signstack-cli/src/lib/resource-pusher.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/resource-scanner.d.ts +29 -0
- package/dist/apps/signstack-cli/src/lib/resource-scanner.js +101 -0
- package/dist/apps/signstack-cli/src/lib/resource-scanner.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/resource-validator.d.ts +44 -0
- package/dist/apps/signstack-cli/src/lib/resource-validator.js +158 -0
- package/dist/apps/signstack-cli/src/lib/resource-validator.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/run-handler.d.ts +47 -0
- package/dist/apps/signstack-cli/src/lib/run-handler.js +266 -0
- package/dist/apps/signstack-cli/src/lib/run-handler.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/safe-path.d.ts +28 -0
- package/dist/apps/signstack-cli/src/lib/safe-path.js +44 -0
- package/dist/apps/signstack-cli/src/lib/safe-path.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/scenario-file.d.ts +35 -0
- package/dist/apps/signstack-cli/src/lib/scenario-file.js +80 -0
- package/dist/apps/signstack-cli/src/lib/scenario-file.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/schema-validator.d.ts +8 -0
- package/dist/apps/signstack-cli/src/lib/schema-validator.js +39 -0
- package/dist/apps/signstack-cli/src/lib/schema-validator.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/url-validator.d.ts +17 -0
- package/dist/apps/signstack-cli/src/lib/url-validator.js +61 -0
- package/dist/apps/signstack-cli/src/lib/url-validator.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/yaml-document-parser.d.ts +25 -0
- package/dist/apps/signstack-cli/src/lib/yaml-document-parser.js +133 -0
- package/dist/apps/signstack-cli/src/lib/yaml-document-parser.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/yaml-transforms.d.ts +3 -0
- package/dist/apps/signstack-cli/src/lib/yaml-transforms.js +32 -0
- package/dist/apps/signstack-cli/src/lib/yaml-transforms.js.map +1 -0
- package/dist/apps/signstack-cli/src/lib/yaml-writer.d.ts +47 -0
- package/dist/apps/signstack-cli/src/lib/yaml-writer.js +160 -0
- package/dist/apps/signstack-cli/src/lib/yaml-writer.js.map +1 -0
- package/dist/apps/signstack-cli/src/types/auth.types.d.ts +48 -0
- package/dist/apps/signstack-cli/src/types/auth.types.js +31 -0
- package/dist/apps/signstack-cli/src/types/auth.types.js.map +1 -0
- package/dist/apps/signstack-cli/src/types/schema.types.d.ts +14 -0
- package/dist/apps/signstack-cli/src/types/schema.types.js +16 -0
- package/dist/apps/signstack-cli/src/types/schema.types.js.map +1 -0
- package/dist/apps/signstack-cli/src/types/yaml.types.d.ts +144 -0
- package/dist/apps/signstack-cli/src/types/yaml.types.js +2 -0
- package/dist/apps/signstack-cli/src/types/yaml.types.js.map +1 -0
- package/dist/libs/common/base/src/index.d.ts +14 -0
- package/dist/libs/common/base/src/index.js +44 -0
- package/dist/libs/common/base/src/index.js.map +1 -0
- package/dist/libs/common/base/src/lib/address.util.d.ts +12 -0
- package/dist/libs/common/base/src/lib/address.util.js +55 -0
- package/dist/libs/common/base/src/lib/address.util.js.map +1 -0
- package/dist/libs/common/base/src/lib/country-code-data.d.ts +5 -0
- package/dist/libs/common/base/src/lib/country-code-data.js +1256 -0
- package/dist/libs/common/base/src/lib/country-code-data.js.map +1 -0
- package/dist/libs/common/base/src/lib/date.util.d.ts +13 -0
- package/dist/libs/common/base/src/lib/date.util.js +135 -0
- package/dist/libs/common/base/src/lib/date.util.js.map +1 -0
- package/dist/libs/common/base/src/lib/headers.d.ts +1 -0
- package/dist/libs/common/base/src/lib/headers.js +5 -0
- package/dist/libs/common/base/src/lib/headers.js.map +1 -0
- package/dist/libs/common/base/src/lib/jsonata.service.d.ts +32 -0
- package/dist/libs/common/base/src/lib/jsonata.service.js +207 -0
- package/dist/libs/common/base/src/lib/jsonata.service.js.map +1 -0
- package/dist/libs/common/base/src/lib/key-validation.constants.d.ts +37 -0
- package/dist/libs/common/base/src/lib/key-validation.constants.js +144 -0
- package/dist/libs/common/base/src/lib/key-validation.constants.js.map +1 -0
- package/dist/libs/common/base/src/lib/phone-util.d.ts +16 -0
- package/dist/libs/common/base/src/lib/phone-util.js +61 -0
- package/dist/libs/common/base/src/lib/phone-util.js.map +1 -0
- package/dist/libs/common/base/src/lib/schema-validation.util.d.ts +24 -0
- package/dist/libs/common/base/src/lib/schema-validation.util.js +155 -0
- package/dist/libs/common/base/src/lib/schema-validation.util.js.map +1 -0
- package/dist/libs/common/base/src/lib/string-builder.d.ts +48 -0
- package/dist/libs/common/base/src/lib/string-builder.js +90 -0
- package/dist/libs/common/base/src/lib/string-builder.js.map +1 -0
- package/dist/libs/common/base/src/lib/util.d.ts +20 -0
- package/dist/libs/common/base/src/lib/util.js +110 -0
- package/dist/libs/common/base/src/lib/util.js.map +1 -0
- package/dist/libs/signstack/base/schemas/asset.schema.json +220 -0
- package/dist/libs/signstack/base/schemas/blueprint.schema.json +485 -0
- package/dist/libs/signstack/base/schemas/jsonata-function.schema.json +185 -0
- package/dist/libs/signstack/base/schemas/schema.schema.json +97 -0
- package/dist/libs/signstack/base/schemas/template.schema.json +295 -0
- package/dist/libs/signstack/base/src/index.d.ts +28 -0
- package/dist/libs/signstack/base/src/index.js +32 -0
- package/dist/libs/signstack/base/src/index.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/constants.d.ts +123 -0
- package/dist/libs/signstack/base/src/lib/constants.js +131 -0
- package/dist/libs/signstack/base/src/lib/constants.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/hash.util.d.ts +58 -0
- package/dist/libs/signstack/base/src/lib/hash.util.js +90 -0
- package/dist/libs/signstack/base/src/lib/hash.util.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/is-schema-renderable.util.d.ts +29 -0
- package/dist/libs/signstack/base/src/lib/is-schema-renderable.util.js +93 -0
- package/dist/libs/signstack/base/src/lib/is-schema-renderable.util.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/ai-chat.d.ts +41 -0
- package/dist/libs/signstack/base/src/lib/models/ai-chat.js +3 -0
- package/dist/libs/signstack/base/src/lib/models/ai-chat.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/api-key.d.ts +54 -0
- package/dist/libs/signstack/base/src/lib/models/api-key.js +18 -0
- package/dist/libs/signstack/base/src/lib/models/api-key.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/asset.d.ts +101 -0
- package/dist/libs/signstack/base/src/lib/models/asset.js +11 -0
- package/dist/libs/signstack/base/src/lib/models/asset.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/auth.d.ts +142 -0
- package/dist/libs/signstack/base/src/lib/models/auth.js +35 -0
- package/dist/libs/signstack/base/src/lib/models/auth.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/base.d.ts +134 -0
- package/dist/libs/signstack/base/src/lib/models/base.js +71 -0
- package/dist/libs/signstack/base/src/lib/models/base.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/blueprint.d.ts +311 -0
- package/dist/libs/signstack/base/src/lib/models/blueprint.js +9 -0
- package/dist/libs/signstack/base/src/lib/models/blueprint.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/file.d.ts +75 -0
- package/dist/libs/signstack/base/src/lib/models/file.js +9 -0
- package/dist/libs/signstack/base/src/lib/models/file.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/jsonata-function.d.ts +111 -0
- package/dist/libs/signstack/base/src/lib/models/jsonata-function.js +19 -0
- package/dist/libs/signstack/base/src/lib/models/jsonata-function.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/marketplace-listing.d.ts +132 -0
- package/dist/libs/signstack/base/src/lib/models/marketplace-listing.js +22 -0
- package/dist/libs/signstack/base/src/lib/models/marketplace-listing.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/membership.d.ts +127 -0
- package/dist/libs/signstack/base/src/lib/models/membership.js +22 -0
- package/dist/libs/signstack/base/src/lib/models/membership.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/namespace.d.ts +87 -0
- package/dist/libs/signstack/base/src/lib/models/namespace.js +57 -0
- package/dist/libs/signstack/base/src/lib/models/namespace.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/organization.d.ts +79 -0
- package/dist/libs/signstack/base/src/lib/models/organization.js +41 -0
- package/dist/libs/signstack/base/src/lib/models/organization.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/render-job.d.ts +88 -0
- package/dist/libs/signstack/base/src/lib/models/render-job.js +3 -0
- package/dist/libs/signstack/base/src/lib/models/render-job.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/resource-edge.d.ts +60 -0
- package/dist/libs/signstack/base/src/lib/models/resource-edge.js +202 -0
- package/dist/libs/signstack/base/src/lib/models/resource-edge.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/scenario.d.ts +138 -0
- package/dist/libs/signstack/base/src/lib/models/scenario.js +14 -0
- package/dist/libs/signstack/base/src/lib/models/scenario.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/schema.d.ts +131 -0
- package/dist/libs/signstack/base/src/lib/models/schema.js +44 -0
- package/dist/libs/signstack/base/src/lib/models/schema.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/shareable-link.d.ts +215 -0
- package/dist/libs/signstack/base/src/lib/models/shareable-link.js +27 -0
- package/dist/libs/signstack/base/src/lib/models/shareable-link.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/subscription.d.ts +279 -0
- package/dist/libs/signstack/base/src/lib/models/subscription.js +105 -0
- package/dist/libs/signstack/base/src/lib/models/subscription.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/template.d.ts +248 -0
- package/dist/libs/signstack/base/src/lib/models/template.js +32 -0
- package/dist/libs/signstack/base/src/lib/models/template.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/user.d.ts +30 -0
- package/dist/libs/signstack/base/src/lib/models/user.js +3 -0
- package/dist/libs/signstack/base/src/lib/models/user.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/webhook.d.ts +223 -0
- package/dist/libs/signstack/base/src/lib/models/webhook.js +62 -0
- package/dist/libs/signstack/base/src/lib/models/webhook.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/models/workflow.d.ts +917 -0
- package/dist/libs/signstack/base/src/lib/models/workflow.js +152 -0
- package/dist/libs/signstack/base/src/lib/models/workflow.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/util.d.ts +92 -0
- package/dist/libs/signstack/base/src/lib/util.js +406 -0
- package/dist/libs/signstack/base/src/lib/util.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/dependency-graph.d.ts +94 -0
- package/dist/libs/signstack/base/src/lib/validation/dependency-graph.js +446 -0
- package/dist/libs/signstack/base/src/lib/validation/dependency-graph.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/graph.types.d.ts +57 -0
- package/dist/libs/signstack/base/src/lib/validation/graph.types.js +8 -0
- package/dist/libs/signstack/base/src/lib/validation/graph.types.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/index.d.ts +9 -0
- package/dist/libs/signstack/base/src/lib/validation/index.js +23 -0
- package/dist/libs/signstack/base/src/lib/validation/index.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/resource-schemas.d.ts +3 -0
- package/dist/libs/signstack/base/src/lib/validation/resource-schemas.js +27 -0
- package/dist/libs/signstack/base/src/lib/validation/resource-schemas.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validation.types.d.ts +57 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validation.types.js +57 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validation.types.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validator.d.ts +38 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validator.js +146 -0
- package/dist/libs/signstack/base/src/lib/validation/schema-validator.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-dependencies.d.ts +22 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-dependencies.js +69 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-dependencies.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-resource-tree.d.ts +37 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-resource-tree.js +250 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-resource-tree.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-template-inputs.d.ts +24 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-template-inputs.js +98 -0
- package/dist/libs/signstack/base/src/lib/validation/validate-template-inputs.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/validation/yaml-document-utils.d.ts +12 -0
- package/dist/libs/signstack/base/src/lib/validation/yaml-document-utils.js +50 -0
- package/dist/libs/signstack/base/src/lib/validation/yaml-document-utils.js.map +1 -0
- package/dist/libs/signstack/base/src/lib/yaml-spec-converter.d.ts +101 -0
- package/dist/libs/signstack/base/src/lib/yaml-spec-converter.js +998 -0
- package/dist/libs/signstack/base/src/lib/yaml-spec-converter.js.map +1 -0
- package/oclif.manifest.json +822 -0
- package/package.json +101 -0
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateResourceTree = validateResourceTree;
|
|
4
|
+
const base_1 = require("../models/base");
|
|
5
|
+
const resource_edge_1 = require("../models/resource-edge");
|
|
6
|
+
const template_1 = require("../models/template");
|
|
7
|
+
const util_1 = require("../util");
|
|
8
|
+
const yaml_1 = require("yaml");
|
|
9
|
+
const yaml_spec_converter_1 = require("../yaml-spec-converter");
|
|
10
|
+
// ── YAML Parsing ──
|
|
11
|
+
function parseYamlToResource(yaml, index) {
|
|
12
|
+
let content;
|
|
13
|
+
try {
|
|
14
|
+
content = (0, yaml_1.parse)(yaml);
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
return {
|
|
18
|
+
error: {
|
|
19
|
+
resourceKey: `yaml[${index}]`,
|
|
20
|
+
resourceKind: 'unknown',
|
|
21
|
+
errors: [{ path: '/', message: `YAML parse error: ${e.message}`, keyword: 'yaml-parse' }],
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
if (!content || typeof content !== 'object') {
|
|
26
|
+
return {
|
|
27
|
+
error: {
|
|
28
|
+
resourceKey: `yaml[${index}]`,
|
|
29
|
+
resourceKind: 'unknown',
|
|
30
|
+
errors: [{ path: '/', message: 'YAML content is not an object', keyword: 'yaml-parse' }],
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const rawKind = typeof content['kind'] === 'string' ? content['kind'] : '';
|
|
35
|
+
const kind = (0, yaml_spec_converter_1.displayNameToResourceKind)(rawKind);
|
|
36
|
+
if (!kind) {
|
|
37
|
+
return {
|
|
38
|
+
error: {
|
|
39
|
+
resourceKey: `yaml[${index}]`,
|
|
40
|
+
resourceKind: rawKind || 'unknown',
|
|
41
|
+
errors: [{ path: '/kind', message: `Unknown resource kind: ${rawKind}`, keyword: 'yaml-parse' }],
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
const rawMeta = (content['metadata'] ?? {});
|
|
46
|
+
const spec = (content['spec'] ?? {});
|
|
47
|
+
return {
|
|
48
|
+
resource: {
|
|
49
|
+
kind,
|
|
50
|
+
metadata: {
|
|
51
|
+
key: rawMeta['key'] ?? '',
|
|
52
|
+
version: rawMeta['version'] ?? '',
|
|
53
|
+
name: rawMeta['name'] ?? '',
|
|
54
|
+
description: rawMeta['description'],
|
|
55
|
+
labels: rawMeta['labels'],
|
|
56
|
+
},
|
|
57
|
+
spec: (0, yaml_spec_converter_1.convertYamlSpec)(kind, spec),
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// ── Main function ──
|
|
62
|
+
/**
|
|
63
|
+
* Validates all resources in a dependency tree.
|
|
64
|
+
*
|
|
65
|
+
* Accepts raw YAML strings and handles parsing internally.
|
|
66
|
+
*
|
|
67
|
+
* Validation layers:
|
|
68
|
+
* 0. YAML parsing & kind resolution
|
|
69
|
+
* 1. Basic metadata validation
|
|
70
|
+
* 2. JSON schema validation (per resource, via raw YAML)
|
|
71
|
+
* 3. Dependency existence (cross-resource)
|
|
72
|
+
* 4. Cross-resource rules (template content, etc.)
|
|
73
|
+
*
|
|
74
|
+
* Collects ALL errors across all resources (no fail-fast).
|
|
75
|
+
*
|
|
76
|
+
* @param yamlStrings - Raw YAML strings, one per resource
|
|
77
|
+
* @param opts.schemaValidator - Optional SchemaValidator for JSON schema checks
|
|
78
|
+
*/
|
|
79
|
+
function validateResourceTree(yamlStrings, opts) {
|
|
80
|
+
const allErrors = [];
|
|
81
|
+
const schemaValidator = opts?.schemaValidator;
|
|
82
|
+
// Layer 0: Parse all YAML strings into ResourceInput objects
|
|
83
|
+
const resources = [];
|
|
84
|
+
const rawYamls = [];
|
|
85
|
+
for (let i = 0; i < yamlStrings.length; i++) {
|
|
86
|
+
const parsed = parseYamlToResource(yamlStrings[i], i);
|
|
87
|
+
if ('error' in parsed) {
|
|
88
|
+
allErrors.push(parsed.error);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
resources.push(parsed.resource);
|
|
92
|
+
rawYamls.push(yamlStrings[i]);
|
|
93
|
+
}
|
|
94
|
+
// Build a lookup set of resource IDs for dependency existence checks
|
|
95
|
+
const resourceIdSet = new Set();
|
|
96
|
+
for (const res of resources) {
|
|
97
|
+
resourceIdSet.add((0, resource_edge_1.toResourceId)(res.kind, res.metadata.key, res.metadata.version));
|
|
98
|
+
}
|
|
99
|
+
// Build a lookup map for cross-resource checks
|
|
100
|
+
const resourceMap = new Map();
|
|
101
|
+
for (const res of resources) {
|
|
102
|
+
const id = (0, resource_edge_1.toResourceId)(res.kind, res.metadata.key, res.metadata.version);
|
|
103
|
+
resourceMap.set(id, res);
|
|
104
|
+
}
|
|
105
|
+
for (let i = 0; i < resources.length; i++) {
|
|
106
|
+
const res = resources[i];
|
|
107
|
+
const errors = [];
|
|
108
|
+
// Layer 1: Basic metadata validation
|
|
109
|
+
if (!res.metadata?.key?.trim()) {
|
|
110
|
+
errors.push({
|
|
111
|
+
path: 'metadata.key',
|
|
112
|
+
message: 'Resource key is required',
|
|
113
|
+
keyword: 'required',
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
if (!res.metadata?.name?.trim() &&
|
|
117
|
+
(res.kind === resource_edge_1.ResourceKind.Blueprint || res.kind === resource_edge_1.ResourceKind.Schema)) {
|
|
118
|
+
errors.push({
|
|
119
|
+
path: 'metadata.name',
|
|
120
|
+
message: 'Resource name is required',
|
|
121
|
+
keyword: 'required',
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
// Layer 2: JSON schema validation via raw YAML
|
|
125
|
+
if (schemaValidator) {
|
|
126
|
+
try {
|
|
127
|
+
const parsed = (0, yaml_1.parse)(rawYamls[i]);
|
|
128
|
+
if (parsed && typeof parsed === 'object') {
|
|
129
|
+
const result = schemaValidator.validate(parsed);
|
|
130
|
+
if (!result.valid) {
|
|
131
|
+
errors.push(...result.errors);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// Parse errors already caught in Layer 0
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Layer 3: Dependency existence
|
|
140
|
+
const deps = getResourceDeps(res.kind, res.spec);
|
|
141
|
+
for (const dep of deps) {
|
|
142
|
+
const depId = (0, resource_edge_1.toResourceId)(dep.kind, dep.key, dep.version);
|
|
143
|
+
if (!resourceIdSet.has(depId)) {
|
|
144
|
+
errors.push({
|
|
145
|
+
path: '/',
|
|
146
|
+
message: `Referenced ${dep.kind} '${dep.key}@${dep.version}' not found`,
|
|
147
|
+
keyword: 'dependency-missing',
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Layer 4: Cross-resource rules
|
|
152
|
+
const crossErrors = validateCrossResourceRules(res, resourceMap);
|
|
153
|
+
errors.push(...crossErrors);
|
|
154
|
+
if (errors.length > 0) {
|
|
155
|
+
allErrors.push({
|
|
156
|
+
resourceKey: res.metadata.key,
|
|
157
|
+
resourceKind: res.kind,
|
|
158
|
+
errors,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
valid: allErrors.length === 0,
|
|
164
|
+
errors: allErrors,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
// ── Helpers ──
|
|
168
|
+
function getResourceDeps(kind, spec) {
|
|
169
|
+
switch (kind) {
|
|
170
|
+
case resource_edge_1.ResourceKind.Blueprint:
|
|
171
|
+
return (0, resource_edge_1.getBlueprintDeps)(spec);
|
|
172
|
+
case resource_edge_1.ResourceKind.Template:
|
|
173
|
+
return (0, resource_edge_1.getTemplateDeps)(spec);
|
|
174
|
+
case resource_edge_1.ResourceKind.Asset:
|
|
175
|
+
return (0, resource_edge_1.getAssetDeps)(spec);
|
|
176
|
+
case resource_edge_1.ResourceKind.JsonataFunction:
|
|
177
|
+
return (0, resource_edge_1.getFunctionDeps)(spec);
|
|
178
|
+
default:
|
|
179
|
+
return [];
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function validateCrossResourceRules(res, resourceMap) {
|
|
183
|
+
const errors = [];
|
|
184
|
+
if (res.kind === resource_edge_1.ResourceKind.Template) {
|
|
185
|
+
const spec = res.spec;
|
|
186
|
+
const templateType = spec?.type ?? template_1.TemplateType.PDF;
|
|
187
|
+
if (templateType === template_1.TemplateType.HTML) {
|
|
188
|
+
const key = spec?.contentKey;
|
|
189
|
+
const version = spec?.contentVersion;
|
|
190
|
+
if (key && version) {
|
|
191
|
+
const assetId = (0, resource_edge_1.toResourceId)(resource_edge_1.ResourceKind.Asset, key, version);
|
|
192
|
+
const asset = resourceMap.get(assetId);
|
|
193
|
+
if (asset && !asset.spec?.content) {
|
|
194
|
+
errors.push({
|
|
195
|
+
path: 'spec.contentKey',
|
|
196
|
+
message: 'HTML template content asset has no content',
|
|
197
|
+
keyword: 'content-missing',
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
errors.push({
|
|
203
|
+
path: 'spec.contentKey',
|
|
204
|
+
message: 'HTML template requires a content asset',
|
|
205
|
+
keyword: 'content-missing',
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
else if (templateType === template_1.TemplateType.PDF) {
|
|
210
|
+
const key = spec?.contentKey;
|
|
211
|
+
const version = spec?.contentVersion;
|
|
212
|
+
if (key && version) {
|
|
213
|
+
const assetId = (0, resource_edge_1.toResourceId)(resource_edge_1.ResourceKind.Asset, key, version);
|
|
214
|
+
const asset = resourceMap.get(assetId);
|
|
215
|
+
const fileId = asset?.spec?.fileId;
|
|
216
|
+
if (!fileId || !util_1.Util.isLiteral(fileId)) {
|
|
217
|
+
errors.push({
|
|
218
|
+
path: 'spec.contentKey',
|
|
219
|
+
message: 'PDF template requires an uploaded PDF file',
|
|
220
|
+
keyword: 'content-missing',
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (res.kind === resource_edge_1.ResourceKind.Asset) {
|
|
227
|
+
const spec = res.spec;
|
|
228
|
+
const assetType = spec?.type ?? base_1.AssetType.Html;
|
|
229
|
+
if (assetType === base_1.AssetType.Image || assetType === base_1.AssetType.Pdf) {
|
|
230
|
+
if (!spec?.fileId) {
|
|
231
|
+
errors.push({
|
|
232
|
+
path: 'spec.fileId',
|
|
233
|
+
message: `${assetType} asset requires an uploaded file`,
|
|
234
|
+
keyword: 'content-missing',
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
if (!(spec?.content ?? '').trim()) {
|
|
240
|
+
errors.push({
|
|
241
|
+
path: 'spec.content',
|
|
242
|
+
message: `${assetType} asset requires content`,
|
|
243
|
+
keyword: 'content-missing',
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return errors;
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=validate-resource-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-resource-tree.js","sourceRoot":"","sources":["../../../../../../../../../libs/signstack/base/src/lib/validation/validate-resource-tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface TemplateInputValidationError {
|
|
2
|
+
blueprintId: string;
|
|
3
|
+
documentKey: string;
|
|
4
|
+
templateKey: string;
|
|
5
|
+
templateVersion: string;
|
|
6
|
+
templateInputKey: string;
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
export interface TemplateInputValidationResult {
|
|
10
|
+
valid: boolean;
|
|
11
|
+
errors: TemplateInputValidationError[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Validate that all required template inputs are properly provided in blueprint documents.
|
|
15
|
+
*
|
|
16
|
+
* A required template input is considered valid if ANY of the following is true:
|
|
17
|
+
* 1) There is an explicit inputMap for the template input
|
|
18
|
+
* 2) There is an implicit match (template input key === blueprint input key)
|
|
19
|
+
*
|
|
20
|
+
* Notes:
|
|
21
|
+
* - inputMap is optional if keys match directly
|
|
22
|
+
* - If explicit mapping is provided, the referenced blueprint input must exist
|
|
23
|
+
*/
|
|
24
|
+
export declare function validateTemplateInputs(yamls: string[]): TemplateInputValidationResult;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateTemplateInputs = validateTemplateInputs;
|
|
4
|
+
const dependency_graph_1 = require("./dependency-graph");
|
|
5
|
+
const yaml_document_utils_1 = require("./yaml-document-utils");
|
|
6
|
+
const schema_validation_types_1 = require("./schema-validation.types");
|
|
7
|
+
/**
|
|
8
|
+
* Validate that all required template inputs are properly provided in blueprint documents.
|
|
9
|
+
*
|
|
10
|
+
* A required template input is considered valid if ANY of the following is true:
|
|
11
|
+
* 1) There is an explicit inputMap for the template input
|
|
12
|
+
* 2) There is an implicit match (template input key === blueprint input key)
|
|
13
|
+
*
|
|
14
|
+
* Notes:
|
|
15
|
+
* - inputMap is optional if keys match directly
|
|
16
|
+
* - If explicit mapping is provided, the referenced blueprint input must exist
|
|
17
|
+
*/
|
|
18
|
+
function validateTemplateInputs(yamls) {
|
|
19
|
+
const errors = [];
|
|
20
|
+
// Parse and deduplicate by ResourceId
|
|
21
|
+
const docMap = new Map();
|
|
22
|
+
for (const yaml of yamls) {
|
|
23
|
+
const doc = (0, yaml_document_utils_1.parseYamlToDocument)(yaml);
|
|
24
|
+
if (doc) {
|
|
25
|
+
docMap.set(doc.id, doc);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const docs = Array.from(docMap.values());
|
|
29
|
+
if (docs.length === 0) {
|
|
30
|
+
return { valid: true, errors: [] };
|
|
31
|
+
}
|
|
32
|
+
// Find all blueprints
|
|
33
|
+
const blueprints = docs.filter((doc) => doc.kind === schema_validation_types_1.SchemaKind.Blueprint);
|
|
34
|
+
for (const blueprint of blueprints) {
|
|
35
|
+
const blueprintSpec = blueprint.content
|
|
36
|
+
.spec;
|
|
37
|
+
if (!blueprintSpec)
|
|
38
|
+
continue;
|
|
39
|
+
const blueprintInputs = blueprintSpec.inputs ?? [];
|
|
40
|
+
const blueprintInputKeys = new Set(blueprintInputs.map((input) => input.key));
|
|
41
|
+
const envelopes = blueprintSpec.envelopes || [];
|
|
42
|
+
for (const envelope of envelopes) {
|
|
43
|
+
const documents = envelope.documents || [];
|
|
44
|
+
for (const document of documents) {
|
|
45
|
+
if (!document.templateKey || !document.templateVersion)
|
|
46
|
+
continue;
|
|
47
|
+
// Find the corresponding template
|
|
48
|
+
const templateId = dependency_graph_1.DependencyGraph.createId(schema_validation_types_1.SchemaKind.Template, document.templateKey, document.templateVersion);
|
|
49
|
+
const template = docMap.get(templateId);
|
|
50
|
+
if (!template)
|
|
51
|
+
continue;
|
|
52
|
+
const templateSpec = template.content.spec;
|
|
53
|
+
if (!templateSpec)
|
|
54
|
+
continue;
|
|
55
|
+
const templateInputs = templateSpec.inputs || [];
|
|
56
|
+
const requiredTemplateInputs = templateInputs.filter((input) => input.required === true);
|
|
57
|
+
const inputMap = document.inputMap || [];
|
|
58
|
+
// Validate each required template input
|
|
59
|
+
for (const templateInput of requiredTemplateInputs) {
|
|
60
|
+
const templateInputKey = templateInput.key;
|
|
61
|
+
const mapping = inputMap.find((m) => m.templateInputKey === templateInputKey);
|
|
62
|
+
const hasExplicitMapping = !!mapping;
|
|
63
|
+
const hasImplicitMatch = blueprintInputKeys.has(templateInputKey);
|
|
64
|
+
// ❌ Fail only if neither mapping nor implicit match exists
|
|
65
|
+
if (!hasExplicitMapping && !hasImplicitMatch) {
|
|
66
|
+
errors.push({
|
|
67
|
+
blueprintId: blueprint.id,
|
|
68
|
+
documentKey: document.key,
|
|
69
|
+
templateKey: document.templateKey,
|
|
70
|
+
templateVersion: document.templateVersion,
|
|
71
|
+
templateInputKey,
|
|
72
|
+
message: `Required template input "${templateInputKey}" is not provided. No mapping found and no matching blueprint input exists.`,
|
|
73
|
+
});
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
// ❌ If explicit mapping exists, validate blueprint input key
|
|
77
|
+
if (hasExplicitMapping &&
|
|
78
|
+
mapping.blueprintInputKey &&
|
|
79
|
+
!blueprintInputKeys.has(mapping.blueprintInputKey)) {
|
|
80
|
+
errors.push({
|
|
81
|
+
blueprintId: blueprint.id,
|
|
82
|
+
documentKey: document.key,
|
|
83
|
+
templateKey: document.templateKey,
|
|
84
|
+
templateVersion: document.templateVersion,
|
|
85
|
+
templateInputKey,
|
|
86
|
+
message: `Template input "${templateInputKey}" is mapped to blueprint input "${mapping.blueprintInputKey}" which does not exist in blueprint inputs`,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
valid: errors.length === 0,
|
|
95
|
+
errors,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=validate-template-inputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-template-inputs.js","sourceRoot":"","sources":["../../../../../../../../../libs/signstack/base/src/lib/validation/validate-template-inputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ParsedDocument } from './graph.types';
|
|
2
|
+
/**
|
|
3
|
+
* Parse a single YAML string into a ParsedDocument.
|
|
4
|
+
* Returns null if the YAML is invalid or not a SignStack resource.
|
|
5
|
+
* filePath defaults to '' for non-file-based usage (e.g., AI chat).
|
|
6
|
+
*/
|
|
7
|
+
export declare function parseYamlToDocument(yamlString: string, filePath?: string): ParsedDocument | null;
|
|
8
|
+
/**
|
|
9
|
+
* Parse multiple YAML strings into ParsedDocuments.
|
|
10
|
+
* Silently skips invalid/unparseable strings.
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseYamlsToDocuments(yamlStrings: string[], filePath?: string): ParsedDocument[];
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseYamlToDocument = parseYamlToDocument;
|
|
4
|
+
exports.parseYamlsToDocuments = parseYamlsToDocuments;
|
|
5
|
+
const yaml_1 = require("yaml");
|
|
6
|
+
const schema_validation_types_1 = require("./schema-validation.types");
|
|
7
|
+
const dependency_graph_1 = require("./dependency-graph");
|
|
8
|
+
const dependency_graph_2 = require("./dependency-graph");
|
|
9
|
+
/**
|
|
10
|
+
* Parse a single YAML string into a ParsedDocument.
|
|
11
|
+
* Returns null if the YAML is invalid or not a SignStack resource.
|
|
12
|
+
* filePath defaults to '' for non-file-based usage (e.g., AI chat).
|
|
13
|
+
*/
|
|
14
|
+
function parseYamlToDocument(yamlString, filePath = '') {
|
|
15
|
+
let content;
|
|
16
|
+
try {
|
|
17
|
+
content = (0, yaml_1.parse)(yamlString);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
if (!content || typeof content !== 'object')
|
|
23
|
+
return null;
|
|
24
|
+
const kind = content['kind'];
|
|
25
|
+
if (!kind || !(0, schema_validation_types_1.isSchemaKind)(kind))
|
|
26
|
+
return null;
|
|
27
|
+
const metadata = content['metadata'];
|
|
28
|
+
const key = metadata?.['key'];
|
|
29
|
+
const version = metadata?.['version'];
|
|
30
|
+
if (!key || !version)
|
|
31
|
+
return null;
|
|
32
|
+
const schemaKind = kind;
|
|
33
|
+
const id = dependency_graph_1.DependencyGraph.createId(schemaKind, key, version);
|
|
34
|
+
const references = (0, dependency_graph_2.extractReferences)(content, schemaKind);
|
|
35
|
+
return { id, kind: schemaKind, key, version, filePath, content, references };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Parse multiple YAML strings into ParsedDocuments.
|
|
39
|
+
* Silently skips invalid/unparseable strings.
|
|
40
|
+
*/
|
|
41
|
+
function parseYamlsToDocuments(yamlStrings, filePath = '') {
|
|
42
|
+
const docs = [];
|
|
43
|
+
for (const yaml of yamlStrings) {
|
|
44
|
+
const doc = parseYamlToDocument(yaml, filePath);
|
|
45
|
+
if (doc)
|
|
46
|
+
docs.push(doc);
|
|
47
|
+
}
|
|
48
|
+
return docs;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=yaml-document-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml-document-utils.js","sourceRoot":"","sources":["../../../../../../../../../libs/signstack/base/src/lib/validation/yaml-document-utils.ts"],"names":[],"mappings":";;AAWA,kDA0BC;AAMD,sDAUC;AArDD,+BAA0C;AAC1C,uEAAqE;AACrE,yDAAqD;AACrD,yDAAuD;AAGvD;;;;GAIG;AACH,SAAgB,mBAAmB,CACjC,UAAkB,EAClB,QAAQ,GAAG,EAAE;IAEb,IAAI,OAAgC,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,GAAG,IAAA,YAAS,EAAC,UAAU,CAA4B,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEzD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAW,CAAC;IACvC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAA,sCAAY,EAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9C,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAwC,CAAC;IAC5E,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAW,CAAC;IACxC,MAAM,OAAO,GAAG,QAAQ,EAAE,CAAC,SAAS,CAAW,CAAC;IAChD,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAElC,MAAM,UAAU,GAAG,IAAkB,CAAC;IACtC,MAAM,EAAE,GAAG,kCAAe,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,IAAA,oCAAiB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAE1D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CACnC,WAAqB,EACrB,QAAQ,GAAG,EAAE;IAEb,MAAM,IAAI,GAAqB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,GAAG;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { type LiteralOrExpression } from './models/base';
|
|
2
|
+
import type { AssetHtmlConfigRefs } from './models/asset';
|
|
3
|
+
import type { BlueprintStep } from './models/blueprint';
|
|
4
|
+
import { JsonataFunctionItemType, JsonataFunctionParamType } from './models/jsonata-function';
|
|
5
|
+
import { ResourceKind } from './models/resource-edge';
|
|
6
|
+
import type { Input, TemplateFieldInfo, TemplateRole } from './models/template';
|
|
7
|
+
export declare function splitKeyVersion(ref: string): {
|
|
8
|
+
key: string;
|
|
9
|
+
version: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function normalizeExpression(value: any): LiteralOrExpression<string> | undefined;
|
|
12
|
+
export declare function extractExpressionString(value: any): string | undefined;
|
|
13
|
+
export declare function extractBlueprintInputKey(value: string): string;
|
|
14
|
+
export declare function resolveRequired(required: LiteralOrExpression<boolean> | undefined): boolean | {
|
|
15
|
+
expression: string;
|
|
16
|
+
};
|
|
17
|
+
export declare function transformInputs(yamlInputs: any[]): Input[];
|
|
18
|
+
/**
|
|
19
|
+
* Like transformInputs but supports expression-based required fields.
|
|
20
|
+
* Used for template inputs where required can be `{ expression: "..." }`.
|
|
21
|
+
* @deprecated Use transformInputs instead — both now support expressions.
|
|
22
|
+
*/
|
|
23
|
+
export declare function transformExpressionInputs(yamlInputs: any[]): Input[];
|
|
24
|
+
export declare function transformRole(role: any): TemplateRole;
|
|
25
|
+
export declare function transformField(field: any): TemplateFieldInfo;
|
|
26
|
+
/**
|
|
27
|
+
* Transforms a map of named asset references (alias → "key@version") into
|
|
28
|
+
* an array of `{ key, version, alias }`. Used for image references, which
|
|
29
|
+
* are always plain string refs in YAML.
|
|
30
|
+
*/
|
|
31
|
+
export declare function transformAssetObjectRefs(yamlRefs: Record<string, any> | undefined): {
|
|
32
|
+
key: string;
|
|
33
|
+
version: string;
|
|
34
|
+
alias: string;
|
|
35
|
+
}[] | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Transforms a map of partial references into an array of
|
|
38
|
+
* `{ key, version, alias, roleMap? }`. Partials support an object form in
|
|
39
|
+
* YAML that carries an optional `roleMap` alongside the asset reference:
|
|
40
|
+
*
|
|
41
|
+
* partials:
|
|
42
|
+
* buyer_sig:
|
|
43
|
+
* asset: signature_block@1.0.0
|
|
44
|
+
* roleMap: { signer: buyer }
|
|
45
|
+
*/
|
|
46
|
+
export declare function transformPartialObjectRefs(yamlRefs: Record<string, any> | undefined): {
|
|
47
|
+
key: string;
|
|
48
|
+
version: string;
|
|
49
|
+
alias: string;
|
|
50
|
+
roleMap?: Record<string, string>;
|
|
51
|
+
}[] | undefined;
|
|
52
|
+
export declare function transformEnvelopes(yamlEnvelopes: any[]): any[];
|
|
53
|
+
export declare function transformParticipants(yamlParticipants: any[]): any[];
|
|
54
|
+
export declare function transformCustomFields(yamlCustomFields: any[]): any[];
|
|
55
|
+
export declare function transformOrchestrationToTree(node: any): BlueprintStep;
|
|
56
|
+
export declare function transformAction(action: any): any;
|
|
57
|
+
export declare function transformJsonataParams(yamlParams: any[]): {
|
|
58
|
+
name: string;
|
|
59
|
+
type: JsonataFunctionParamType;
|
|
60
|
+
itemType?: JsonataFunctionItemType;
|
|
61
|
+
schemaKey?: string;
|
|
62
|
+
schemaVersion?: string;
|
|
63
|
+
}[];
|
|
64
|
+
export declare function transformJsonataReturnType(yamlReturnType: any): {
|
|
65
|
+
type: JsonataFunctionParamType;
|
|
66
|
+
itemType?: JsonataFunctionItemType;
|
|
67
|
+
schemaKey?: string;
|
|
68
|
+
schemaVersion?: string;
|
|
69
|
+
};
|
|
70
|
+
export declare function buildHtmlConfigRefs(spec: any): AssetHtmlConfigRefs | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* Normalize a YAML `functions` block (object map or array form) into the API
|
|
73
|
+
* shape `{ alias, functionKey, functionVersion }[]`.
|
|
74
|
+
*
|
|
75
|
+
* Supported shapes:
|
|
76
|
+
* - Object map: `{ money: "format_currency@1.0.0" }` (key is alias)
|
|
77
|
+
* - Array of strings: `["format_currency@1.0.0"]` (alias = functionKey)
|
|
78
|
+
*/
|
|
79
|
+
export declare function normalizeYamlFunctionsBlock(fns: unknown): {
|
|
80
|
+
alias?: string;
|
|
81
|
+
functionKey: string;
|
|
82
|
+
functionVersion: string;
|
|
83
|
+
}[] | undefined;
|
|
84
|
+
/**
|
|
85
|
+
* Convert a YAML spec to API format based on resource kind.
|
|
86
|
+
* If the spec is already in API format, returns it as-is.
|
|
87
|
+
*/
|
|
88
|
+
export declare function convertYamlSpec(kind: ResourceKind, spec: any): any;
|
|
89
|
+
export declare function displayNameToResourceKind(display: string): ResourceKind | null;
|
|
90
|
+
export declare function resourceKindToDisplayName(kind: ResourceKind): string;
|
|
91
|
+
/**
|
|
92
|
+
* Convert an API-format resource into a YAML-friendly plain object.
|
|
93
|
+
* For resource kinds without special formatting (Template, Blueprint),
|
|
94
|
+
* returns a generic `{ kind, metadata, spec }` structure.
|
|
95
|
+
*/
|
|
96
|
+
export declare function convertResourceToYamlObject(kind: ResourceKind, metadata: any, spec: any): any;
|
|
97
|
+
/**
|
|
98
|
+
* Convert an API-format resource into a YAML string.
|
|
99
|
+
* Convenience wrapper around convertResourceToYamlObject + yamlStringify.
|
|
100
|
+
*/
|
|
101
|
+
export declare function resourceToYaml(kind: ResourceKind, metadata: any, spec: any): string;
|