@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,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getResourceSchemaValidator = exports.validateResourceTree = exports.parseYamlsToDocuments = exports.parseYamlToDocument = exports.validateTemplateInputs = exports.validateDependencies = exports.extractReferences = exports.DependencyGraph = exports.SchemaValidator = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
tslib_1.__exportStar(require("./schema-validation.types"), exports);
|
|
6
|
+
var schema_validator_1 = require("./schema-validator");
|
|
7
|
+
Object.defineProperty(exports, "SchemaValidator", { enumerable: true, get: function () { return schema_validator_1.SchemaValidator; } });
|
|
8
|
+
tslib_1.__exportStar(require("./graph.types"), exports);
|
|
9
|
+
var dependency_graph_1 = require("./dependency-graph");
|
|
10
|
+
Object.defineProperty(exports, "DependencyGraph", { enumerable: true, get: function () { return dependency_graph_1.DependencyGraph; } });
|
|
11
|
+
Object.defineProperty(exports, "extractReferences", { enumerable: true, get: function () { return dependency_graph_1.extractReferences; } });
|
|
12
|
+
var validate_dependencies_1 = require("./validate-dependencies");
|
|
13
|
+
Object.defineProperty(exports, "validateDependencies", { enumerable: true, get: function () { return validate_dependencies_1.validateDependencies; } });
|
|
14
|
+
var validate_template_inputs_1 = require("./validate-template-inputs");
|
|
15
|
+
Object.defineProperty(exports, "validateTemplateInputs", { enumerable: true, get: function () { return validate_template_inputs_1.validateTemplateInputs; } });
|
|
16
|
+
var yaml_document_utils_1 = require("./yaml-document-utils");
|
|
17
|
+
Object.defineProperty(exports, "parseYamlToDocument", { enumerable: true, get: function () { return yaml_document_utils_1.parseYamlToDocument; } });
|
|
18
|
+
Object.defineProperty(exports, "parseYamlsToDocuments", { enumerable: true, get: function () { return yaml_document_utils_1.parseYamlsToDocuments; } });
|
|
19
|
+
var validate_resource_tree_1 = require("./validate-resource-tree");
|
|
20
|
+
Object.defineProperty(exports, "validateResourceTree", { enumerable: true, get: function () { return validate_resource_tree_1.validateResourceTree; } });
|
|
21
|
+
var resource_schemas_1 = require("./resource-schemas");
|
|
22
|
+
Object.defineProperty(exports, "getResourceSchemaValidator", { enumerable: true, get: function () { return resource_schemas_1.getResourceSchemaValidator; } });
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../../libs/signstack/base/src/lib/validation/index.ts"],"names":[],"mappings":";;;;AAAA,oEAA0C;AAC1C,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AACxB,wDAA8B;AAC9B,uDAAwE;AAA/D,mHAAA,eAAe,OAAA;AAAE,qHAAA,iBAAiB,OAAA;AAC3C,iEAIiC;AAH/B,6HAAA,oBAAoB,OAAA;AAItB,uEAIoC;AAHlC,kIAAA,sBAAsB,OAAA;AAIxB,6DAAmF;AAA1E,0HAAA,mBAAmB,OAAA;AAAE,4HAAA,qBAAqB,OAAA;AACnD,mEAKkC;AAJhC,8HAAA,oBAAoB,OAAA;AAKtB,uDAAgE;AAAvD,8HAAA,0BAA0B,OAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getResourceSchemaValidator = getResourceSchemaValidator;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const schema_validation_types_1 = require("./schema-validation.types");
|
|
6
|
+
const schema_validator_1 = require("./schema-validator");
|
|
7
|
+
const blueprint_schema_json_1 = tslib_1.__importDefault(require("../../../schemas/blueprint.schema.json"));
|
|
8
|
+
const template_schema_json_1 = tslib_1.__importDefault(require("../../../schemas/template.schema.json"));
|
|
9
|
+
const schema_schema_json_1 = tslib_1.__importDefault(require("../../../schemas/schema.schema.json"));
|
|
10
|
+
const asset_schema_json_1 = tslib_1.__importDefault(require("../../../schemas/asset.schema.json"));
|
|
11
|
+
const jsonata_function_schema_json_1 = tslib_1.__importDefault(require("../../../schemas/jsonata-function.schema.json"));
|
|
12
|
+
const SCHEMAS = new Map([
|
|
13
|
+
[schema_validation_types_1.SchemaKind.Blueprint, blueprint_schema_json_1.default],
|
|
14
|
+
[schema_validation_types_1.SchemaKind.Template, template_schema_json_1.default],
|
|
15
|
+
[schema_validation_types_1.SchemaKind.Schema, schema_schema_json_1.default],
|
|
16
|
+
[schema_validation_types_1.SchemaKind.Asset, asset_schema_json_1.default],
|
|
17
|
+
[schema_validation_types_1.SchemaKind.JsonataFunction, jsonata_function_schema_json_1.default],
|
|
18
|
+
]);
|
|
19
|
+
let _validator = null;
|
|
20
|
+
/** Get a shared SchemaValidator pre-loaded with all resource schemas. */
|
|
21
|
+
function getResourceSchemaValidator() {
|
|
22
|
+
if (!_validator) {
|
|
23
|
+
_validator = new schema_validator_1.SchemaValidator(SCHEMAS);
|
|
24
|
+
}
|
|
25
|
+
return _validator;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=resource-schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-schemas.js","sourceRoot":"","sources":["../../../../../../../../../libs/signstack/base/src/lib/validation/resource-schemas.ts"],"names":[],"mappings":";;AAoBA,gEAKC;;AAzBD,uEAAuD;AACvD,yDAAqD;AAErD,2GAAqE;AACrE,yGAAmE;AACnE,qGAA+D;AAC/D,mGAA6D;AAC7D,yHAAkF;AAElF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAqB;IAC1C,CAAC,oCAAU,CAAC,SAAS,EAAE,+BAAe,CAAC;IACvC,CAAC,oCAAU,CAAC,QAAQ,EAAE,8BAAc,CAAC;IACrC,CAAC,oCAAU,CAAC,MAAM,EAAE,4BAAY,CAAC;IACjC,CAAC,oCAAU,CAAC,KAAK,EAAE,2BAAW,CAAC;IAC/B,CAAC,oCAAU,CAAC,eAAe,EAAE,sCAAqB,CAAC;CACpD,CAAC,CAAC;AAEH,IAAI,UAAU,GAA2B,IAAI,CAAC;AAE9C,yEAAyE;AACzE,SAAgB,0BAA0B;IACxC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,IAAI,kCAAe,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared SignStack YAML validation types.
|
|
3
|
+
* Used by both the CLI and the backend API for schema validation.
|
|
4
|
+
*/
|
|
5
|
+
/** Resource kinds that have corresponding JSON schemas */
|
|
6
|
+
export declare enum SchemaKind {
|
|
7
|
+
Blueprint = "Blueprint",
|
|
8
|
+
Template = "Template",
|
|
9
|
+
Schema = "Schema",
|
|
10
|
+
Asset = "Asset",
|
|
11
|
+
JsonataFunction = "JsonataFunction"
|
|
12
|
+
}
|
|
13
|
+
/** Maps each SchemaKind to its JSON schema filename */
|
|
14
|
+
export declare const SCHEMA_FILE_MAP: Record<SchemaKind, string>;
|
|
15
|
+
/** Check if a string is a valid SchemaKind */
|
|
16
|
+
export declare function isSchemaKind(kind: string): kind is SchemaKind;
|
|
17
|
+
/** Get all available SchemaKind values */
|
|
18
|
+
export declare function getAvailableSchemaKinds(): SchemaKind[];
|
|
19
|
+
/** Categories of validation errors */
|
|
20
|
+
export declare enum ValidationErrorKeyword {
|
|
21
|
+
KindDetection = "kind-detection",
|
|
22
|
+
SchemaLoad = "schema-load",
|
|
23
|
+
FileRead = "file-read",
|
|
24
|
+
YamlParse = "yaml-parse",
|
|
25
|
+
EmptyFile = "empty-file",
|
|
26
|
+
Type = "type",
|
|
27
|
+
DependencyMissing = "dependency-missing",
|
|
28
|
+
CircularDependency = "circular-dependency",
|
|
29
|
+
FileReferenceMissing = "file-reference-missing",
|
|
30
|
+
DraftDependency = "draft-dependency",
|
|
31
|
+
Enum = "enum",
|
|
32
|
+
AdditionalProperties = "additionalProperties",
|
|
33
|
+
Pattern = "pattern",
|
|
34
|
+
PropertyNames = "propertyNames",
|
|
35
|
+
Required = "required"
|
|
36
|
+
}
|
|
37
|
+
/** A single validation error */
|
|
38
|
+
export interface ValidationError {
|
|
39
|
+
path: string;
|
|
40
|
+
message: string;
|
|
41
|
+
keyword: string;
|
|
42
|
+
params?: Record<string, unknown>;
|
|
43
|
+
}
|
|
44
|
+
/** Result of validating a single resource */
|
|
45
|
+
export interface ValidationResult {
|
|
46
|
+
valid: boolean;
|
|
47
|
+
errors: ValidationError[];
|
|
48
|
+
schemaKind: SchemaKind | 'unknown';
|
|
49
|
+
/** File path — set by CLI, empty string for backend usage */
|
|
50
|
+
filePath: string;
|
|
51
|
+
/** Document index for multi-document YAML files */
|
|
52
|
+
documentIndex?: number;
|
|
53
|
+
/** Resource metadata.key for display */
|
|
54
|
+
resourceKey?: string;
|
|
55
|
+
/** Resource metadata.version for display */
|
|
56
|
+
resourceVersion?: string;
|
|
57
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared SignStack YAML validation types.
|
|
4
|
+
* Used by both the CLI and the backend API for schema validation.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ValidationErrorKeyword = exports.SCHEMA_FILE_MAP = exports.SchemaKind = void 0;
|
|
8
|
+
exports.isSchemaKind = isSchemaKind;
|
|
9
|
+
exports.getAvailableSchemaKinds = getAvailableSchemaKinds;
|
|
10
|
+
/** Resource kinds that have corresponding JSON schemas */
|
|
11
|
+
var SchemaKind;
|
|
12
|
+
(function (SchemaKind) {
|
|
13
|
+
SchemaKind["Blueprint"] = "Blueprint";
|
|
14
|
+
SchemaKind["Template"] = "Template";
|
|
15
|
+
SchemaKind["Schema"] = "Schema";
|
|
16
|
+
SchemaKind["Asset"] = "Asset";
|
|
17
|
+
SchemaKind["JsonataFunction"] = "JsonataFunction";
|
|
18
|
+
})(SchemaKind || (exports.SchemaKind = SchemaKind = {}));
|
|
19
|
+
/** Maps each SchemaKind to its JSON schema filename */
|
|
20
|
+
exports.SCHEMA_FILE_MAP = {
|
|
21
|
+
[SchemaKind.Blueprint]: 'blueprint.schema.json',
|
|
22
|
+
[SchemaKind.Template]: 'template.schema.json',
|
|
23
|
+
[SchemaKind.Schema]: 'schema.schema.json',
|
|
24
|
+
[SchemaKind.Asset]: 'asset.schema.json',
|
|
25
|
+
[SchemaKind.JsonataFunction]: 'jsonata-function.schema.json',
|
|
26
|
+
};
|
|
27
|
+
/** Check if a string is a valid SchemaKind */
|
|
28
|
+
function isSchemaKind(kind) {
|
|
29
|
+
return Object.values(SchemaKind).includes(kind);
|
|
30
|
+
}
|
|
31
|
+
/** Get all available SchemaKind values */
|
|
32
|
+
function getAvailableSchemaKinds() {
|
|
33
|
+
return Object.values(SchemaKind);
|
|
34
|
+
}
|
|
35
|
+
/** Categories of validation errors */
|
|
36
|
+
var ValidationErrorKeyword;
|
|
37
|
+
(function (ValidationErrorKeyword) {
|
|
38
|
+
// Custom SignStack keywords
|
|
39
|
+
ValidationErrorKeyword["KindDetection"] = "kind-detection";
|
|
40
|
+
ValidationErrorKeyword["SchemaLoad"] = "schema-load";
|
|
41
|
+
ValidationErrorKeyword["FileRead"] = "file-read";
|
|
42
|
+
ValidationErrorKeyword["YamlParse"] = "yaml-parse";
|
|
43
|
+
ValidationErrorKeyword["EmptyFile"] = "empty-file";
|
|
44
|
+
ValidationErrorKeyword["Type"] = "type";
|
|
45
|
+
// Dependency graph validation
|
|
46
|
+
ValidationErrorKeyword["DependencyMissing"] = "dependency-missing";
|
|
47
|
+
ValidationErrorKeyword["CircularDependency"] = "circular-dependency";
|
|
48
|
+
ValidationErrorKeyword["FileReferenceMissing"] = "file-reference-missing";
|
|
49
|
+
ValidationErrorKeyword["DraftDependency"] = "draft-dependency";
|
|
50
|
+
// AJV schema validation keywords (used for error message enhancement)
|
|
51
|
+
ValidationErrorKeyword["Enum"] = "enum";
|
|
52
|
+
ValidationErrorKeyword["AdditionalProperties"] = "additionalProperties";
|
|
53
|
+
ValidationErrorKeyword["Pattern"] = "pattern";
|
|
54
|
+
ValidationErrorKeyword["PropertyNames"] = "propertyNames";
|
|
55
|
+
ValidationErrorKeyword["Required"] = "required";
|
|
56
|
+
})(ValidationErrorKeyword || (exports.ValidationErrorKeyword = ValidationErrorKeyword = {}));
|
|
57
|
+
//# sourceMappingURL=schema-validation.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-validation.types.js","sourceRoot":"","sources":["../../../../../../../../../libs/signstack/base/src/lib/validation/schema-validation.types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAqBH,oCAEC;AAGD,0DAEC;AA1BD,0DAA0D;AAC1D,IAAY,UAMX;AAND,WAAY,UAAU;IACpB,qCAAuB,CAAA;IACvB,mCAAqB,CAAA;IACrB,+BAAiB,CAAA;IACjB,6BAAe,CAAA;IACf,iDAAmC,CAAA;AACrC,CAAC,EANW,UAAU,0BAAV,UAAU,QAMrB;AAED,uDAAuD;AAC1C,QAAA,eAAe,GAA+B;IACzD,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,uBAAuB;IAC/C,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,sBAAsB;IAC7C,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,oBAAoB;IACzC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,mBAAmB;IACvC,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,8BAA8B;CAC7D,CAAC;AAEF,8CAA8C;AAC9C,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAkB,CAAC,CAAC;AAChE,CAAC;AAED,0CAA0C;AAC1C,SAAgB,uBAAuB;IACrC,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACnC,CAAC;AAED,sCAAsC;AACtC,IAAY,sBAmBX;AAnBD,WAAY,sBAAsB;IAChC,4BAA4B;IAC5B,0DAAgC,CAAA;IAChC,oDAA0B,CAAA;IAC1B,gDAAsB,CAAA;IACtB,kDAAwB,CAAA;IACxB,kDAAwB,CAAA;IACxB,uCAAa,CAAA;IACb,8BAA8B;IAC9B,kEAAwC,CAAA;IACxC,oEAA0C,CAAA;IAC1C,yEAA+C,CAAA;IAC/C,8DAAoC,CAAA;IACpC,sEAAsE;IACtE,uCAAa,CAAA;IACb,uEAA6C,CAAA;IAC7C,6CAAmB,CAAA;IACnB,yDAA+B,CAAA;IAC/B,+CAAqB,CAAA;AACvB,CAAC,EAnBW,sBAAsB,sCAAtB,sBAAsB,QAmBjC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { SchemaKind, type ValidationResult } from './schema-validation.types';
|
|
2
|
+
/**
|
|
3
|
+
* Framework-agnostic schema validator for SignStack YAML resources.
|
|
4
|
+
* Accepts pre-loaded JSON schema objects and validates parsed content against them.
|
|
5
|
+
*
|
|
6
|
+
* File I/O is the caller's responsibility — this class is pure validation logic
|
|
7
|
+
* with no Node.js built-in dependencies, so it can be used in any environment.
|
|
8
|
+
*
|
|
9
|
+
* Used by:
|
|
10
|
+
* - CLI: loads schema files from disk, passes them here
|
|
11
|
+
* - Backend: loads schema files from disk, passes them here
|
|
12
|
+
*/
|
|
13
|
+
export declare class SchemaValidator {
|
|
14
|
+
private readonly ajv;
|
|
15
|
+
private readonly schemas;
|
|
16
|
+
constructor(schemas?: Map<SchemaKind, object> | Record<SchemaKind, object>);
|
|
17
|
+
/**
|
|
18
|
+
* Register a JSON schema for a given resource kind.
|
|
19
|
+
* Can be called after construction to lazily add schemas.
|
|
20
|
+
*/
|
|
21
|
+
addSchema(kind: SchemaKind, schema: object): void;
|
|
22
|
+
/**
|
|
23
|
+
* Detect the schema kind from parsed content by reading the 'kind' field.
|
|
24
|
+
*/
|
|
25
|
+
detectSchemaKind(content: Record<string, unknown>): SchemaKind | null;
|
|
26
|
+
/**
|
|
27
|
+
* Validate parsed content against the appropriate JSON schema.
|
|
28
|
+
*
|
|
29
|
+
* @param content Parsed YAML/JSON object to validate
|
|
30
|
+
* @param filePath File path for error reporting (use '' for non-file contexts)
|
|
31
|
+
* @param schemaKind Optional override — skips auto-detection
|
|
32
|
+
* @param documentIndex Optional index for multi-document YAML
|
|
33
|
+
*/
|
|
34
|
+
validate(content: Record<string, unknown>, filePath?: string, schemaKind?: SchemaKind, documentIndex?: number): ValidationResult;
|
|
35
|
+
private formatErrors;
|
|
36
|
+
private formatSingleError;
|
|
37
|
+
private createErrorResult;
|
|
38
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SchemaValidator = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const _2020_1 = tslib_1.__importDefault(require("ajv/dist/2020"));
|
|
6
|
+
const ajv_formats_1 = tslib_1.__importDefault(require("ajv-formats"));
|
|
7
|
+
const schema_validation_types_1 = require("./schema-validation.types");
|
|
8
|
+
/** Default error message when validation fails without a specific message */
|
|
9
|
+
const DEFAULT_ERROR_MESSAGE = 'Unknown validation error';
|
|
10
|
+
/** AJV configuration — shared across CLI and backend */
|
|
11
|
+
const AJV_OPTIONS = {
|
|
12
|
+
allErrors: true,
|
|
13
|
+
strict: true,
|
|
14
|
+
strictRequired: false,
|
|
15
|
+
strictTypes: false,
|
|
16
|
+
verbose: true,
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Framework-agnostic schema validator for SignStack YAML resources.
|
|
20
|
+
* Accepts pre-loaded JSON schema objects and validates parsed content against them.
|
|
21
|
+
*
|
|
22
|
+
* File I/O is the caller's responsibility — this class is pure validation logic
|
|
23
|
+
* with no Node.js built-in dependencies, so it can be used in any environment.
|
|
24
|
+
*
|
|
25
|
+
* Used by:
|
|
26
|
+
* - CLI: loads schema files from disk, passes them here
|
|
27
|
+
* - Backend: loads schema files from disk, passes them here
|
|
28
|
+
*/
|
|
29
|
+
class SchemaValidator {
|
|
30
|
+
ajv;
|
|
31
|
+
schemas = new Map();
|
|
32
|
+
constructor(schemas) {
|
|
33
|
+
this.ajv = new _2020_1.default(AJV_OPTIONS);
|
|
34
|
+
(0, ajv_formats_1.default)(this.ajv);
|
|
35
|
+
if (schemas) {
|
|
36
|
+
if (schemas instanceof Map) {
|
|
37
|
+
schemas.forEach((schema, kind) => this.schemas.set(kind, schema));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
for (const [kind, schema] of Object.entries(schemas)) {
|
|
41
|
+
this.schemas.set(kind, schema);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Register a JSON schema for a given resource kind.
|
|
48
|
+
* Can be called after construction to lazily add schemas.
|
|
49
|
+
*/
|
|
50
|
+
addSchema(kind, schema) {
|
|
51
|
+
this.schemas.set(kind, schema);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Detect the schema kind from parsed content by reading the 'kind' field.
|
|
55
|
+
*/
|
|
56
|
+
detectSchemaKind(content) {
|
|
57
|
+
const kind = content['kind'];
|
|
58
|
+
if (typeof kind !== 'string')
|
|
59
|
+
return null;
|
|
60
|
+
return (0, schema_validation_types_1.isSchemaKind)(kind) ? kind : null;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Validate parsed content against the appropriate JSON schema.
|
|
64
|
+
*
|
|
65
|
+
* @param content Parsed YAML/JSON object to validate
|
|
66
|
+
* @param filePath File path for error reporting (use '' for non-file contexts)
|
|
67
|
+
* @param schemaKind Optional override — skips auto-detection
|
|
68
|
+
* @param documentIndex Optional index for multi-document YAML
|
|
69
|
+
*/
|
|
70
|
+
validate(content, filePath = '', schemaKind, documentIndex) {
|
|
71
|
+
// 1. Detect or use provided schema kind
|
|
72
|
+
const detectedKind = schemaKind ?? this.detectSchemaKind(content);
|
|
73
|
+
if (!detectedKind) {
|
|
74
|
+
const availableKinds = (0, schema_validation_types_1.getAvailableSchemaKinds)().join(', ');
|
|
75
|
+
return this.createErrorResult(filePath, `Unable to detect schema kind. The 'kind' field is missing or invalid. Available kinds: ${availableKinds}`, schema_validation_types_1.ValidationErrorKeyword.KindDetection, 'unknown', documentIndex);
|
|
76
|
+
}
|
|
77
|
+
// 2. Look up the pre-loaded JSON schema
|
|
78
|
+
const schema = this.schemas.get(detectedKind);
|
|
79
|
+
if (!schema) {
|
|
80
|
+
return this.createErrorResult(filePath, `No schema registered for kind '${detectedKind}'. Register it with addSchema() or pass it in the constructor.`, schema_validation_types_1.ValidationErrorKeyword.SchemaLoad, detectedKind, documentIndex);
|
|
81
|
+
}
|
|
82
|
+
// 3. Compile and validate
|
|
83
|
+
const validateFn = this.ajv.compile(schema);
|
|
84
|
+
const valid = validateFn(content) === true;
|
|
85
|
+
// 4. Extract metadata for display
|
|
86
|
+
const metadata = content['metadata'];
|
|
87
|
+
const resourceKey = metadata?.['key'];
|
|
88
|
+
const resourceVersion = metadata?.['version'];
|
|
89
|
+
return {
|
|
90
|
+
valid,
|
|
91
|
+
errors: valid ? [] : this.formatErrors(validateFn.errors),
|
|
92
|
+
schemaKind: detectedKind,
|
|
93
|
+
filePath,
|
|
94
|
+
documentIndex,
|
|
95
|
+
resourceKey,
|
|
96
|
+
resourceVersion,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// ─── Private helpers ───────────────────────────────────────────────
|
|
100
|
+
formatErrors(errors) {
|
|
101
|
+
if (!errors?.length)
|
|
102
|
+
return [];
|
|
103
|
+
return errors.map((error) => this.formatSingleError(error));
|
|
104
|
+
}
|
|
105
|
+
formatSingleError(error) {
|
|
106
|
+
let message = error.message ?? DEFAULT_ERROR_MESSAGE;
|
|
107
|
+
const params = error.params;
|
|
108
|
+
// Enhance messages for common AJV validation keywords
|
|
109
|
+
if (error.keyword === schema_validation_types_1.ValidationErrorKeyword.Enum && params?.['allowedValues']) {
|
|
110
|
+
const allowed = params['allowedValues']
|
|
111
|
+
.map((v) => JSON.stringify(v))
|
|
112
|
+
.join(', ');
|
|
113
|
+
message = `${message}. Allowed values: ${allowed}`;
|
|
114
|
+
}
|
|
115
|
+
else if (error.keyword === schema_validation_types_1.ValidationErrorKeyword.AdditionalProperties && params?.['additionalProperty']) {
|
|
116
|
+
message = `Unknown property '${params['additionalProperty']}'. ${message}`;
|
|
117
|
+
}
|
|
118
|
+
else if (error.keyword === schema_validation_types_1.ValidationErrorKeyword.Pattern && params?.['pattern']) {
|
|
119
|
+
const value = error.data;
|
|
120
|
+
const valuePart = value != null ? ` (got '${value}')` : '';
|
|
121
|
+
message = `${message}${valuePart}. Expected pattern: ${params['pattern']}`;
|
|
122
|
+
}
|
|
123
|
+
else if (error.keyword === schema_validation_types_1.ValidationErrorKeyword.PropertyNames && params?.['propertyName']) {
|
|
124
|
+
const name = params['propertyName'];
|
|
125
|
+
message = `Invalid property name '${name}' at ${error.instancePath || '/'}. Property names must be snake_case (e.g., my_key)`;
|
|
126
|
+
}
|
|
127
|
+
const instancePath = error.instancePath;
|
|
128
|
+
return {
|
|
129
|
+
path: instancePath || '/',
|
|
130
|
+
message,
|
|
131
|
+
keyword: error.keyword,
|
|
132
|
+
params,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
createErrorResult(filePath, message, keyword, schemaKind, documentIndex) {
|
|
136
|
+
return {
|
|
137
|
+
valid: false,
|
|
138
|
+
errors: [{ path: '/', message, keyword }],
|
|
139
|
+
schemaKind,
|
|
140
|
+
filePath,
|
|
141
|
+
documentIndex,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
exports.SchemaValidator = SchemaValidator;
|
|
146
|
+
//# sourceMappingURL=schema-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../../../../../../../../libs/signstack/base/src/lib/validation/schema-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { TemplateInputValidationError } from './validate-template-inputs';
|
|
2
|
+
export interface DependencyValidationError {
|
|
3
|
+
resource: string;
|
|
4
|
+
dependency: string;
|
|
5
|
+
message: string;
|
|
6
|
+
}
|
|
7
|
+
export interface DependencyValidationResult {
|
|
8
|
+
valid: boolean;
|
|
9
|
+
errors: DependencyValidationError[];
|
|
10
|
+
templateInputErrors?: TemplateInputValidationError[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Validate cross-resource dependencies from a list of YAML strings.
|
|
14
|
+
*
|
|
15
|
+
* Parses all YAMLs, builds a dependency graph, and checks for:
|
|
16
|
+
* - Missing dependencies
|
|
17
|
+
* - Circular dependencies
|
|
18
|
+
* - Draft dependency violations (versioned resources depending on drafts)
|
|
19
|
+
*
|
|
20
|
+
* When duplicate ResourceIds exist, the last occurrence wins.
|
|
21
|
+
*/
|
|
22
|
+
export declare function validateDependencies(yamls: string[]): DependencyValidationResult;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateDependencies = validateDependencies;
|
|
4
|
+
const dependency_graph_1 = require("./dependency-graph");
|
|
5
|
+
const yaml_document_utils_1 = require("./yaml-document-utils");
|
|
6
|
+
const validate_template_inputs_1 = require("./validate-template-inputs");
|
|
7
|
+
/**
|
|
8
|
+
* Validate cross-resource dependencies from a list of YAML strings.
|
|
9
|
+
*
|
|
10
|
+
* Parses all YAMLs, builds a dependency graph, and checks for:
|
|
11
|
+
* - Missing dependencies
|
|
12
|
+
* - Circular dependencies
|
|
13
|
+
* - Draft dependency violations (versioned resources depending on drafts)
|
|
14
|
+
*
|
|
15
|
+
* When duplicate ResourceIds exist, the last occurrence wins.
|
|
16
|
+
*/
|
|
17
|
+
function validateDependencies(yamls) {
|
|
18
|
+
const errors = [];
|
|
19
|
+
// Parse and deduplicate by ResourceId (last occurrence wins)
|
|
20
|
+
const docMap = new Map();
|
|
21
|
+
for (const yaml of yamls) {
|
|
22
|
+
const doc = (0, yaml_document_utils_1.parseYamlToDocument)(yaml);
|
|
23
|
+
if (doc) {
|
|
24
|
+
docMap.set(doc.id, doc);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const docs = Array.from(docMap.values());
|
|
28
|
+
if (docs.length === 0) {
|
|
29
|
+
return { valid: true, errors: [] };
|
|
30
|
+
}
|
|
31
|
+
const graph = dependency_graph_1.DependencyGraph.fromDocuments(docs);
|
|
32
|
+
// Check for missing dependencies
|
|
33
|
+
const missing = graph.getMissingDependencies();
|
|
34
|
+
for (const [resourceId, missingDeps] of missing) {
|
|
35
|
+
for (const depId of missingDeps) {
|
|
36
|
+
errors.push({
|
|
37
|
+
resource: resourceId,
|
|
38
|
+
dependency: depId,
|
|
39
|
+
message: `Resource "${resourceId}" references "${depId}" which does not exist in the provided resources.`,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Check for circular dependencies
|
|
44
|
+
const cycles = graph.detectCycles();
|
|
45
|
+
for (const cycle of cycles) {
|
|
46
|
+
errors.push({
|
|
47
|
+
resource: cycle[0],
|
|
48
|
+
dependency: cycle[cycle.length - 1],
|
|
49
|
+
message: `Circular dependency detected: ${cycle.join(' → ')}`,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
// Check for draft dependency violations
|
|
53
|
+
const draftErrors = graph.validateDraftDependencies();
|
|
54
|
+
for (const err of draftErrors) {
|
|
55
|
+
errors.push({
|
|
56
|
+
resource: err.sourceId,
|
|
57
|
+
dependency: err.dependencyId,
|
|
58
|
+
message: err.message,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// Check for template input validation
|
|
62
|
+
const templateInputValidation = (0, validate_template_inputs_1.validateTemplateInputs)(yamls);
|
|
63
|
+
return {
|
|
64
|
+
valid: errors.length === 0 && templateInputValidation.valid,
|
|
65
|
+
errors,
|
|
66
|
+
templateInputErrors: templateInputValidation.errors,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=validate-dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-dependencies.js","sourceRoot":"","sources":["../../../../../../../../../libs/signstack/base/src/lib/validation/validate-dependencies.ts"],"names":[],"mappings":";;AA2BA,oDA8DC;AAxFD,yDAAqD;AACrD,+DAA4D;AAC5D,yEAAkG;AAclG;;;;;;;;;GASG;AACH,SAAgB,oBAAoB,CAClC,KAAe;IAEf,MAAM,MAAM,GAAgC,EAAE,CAAC;IAE/C,6DAA6D;IAC7D,MAAM,MAAM,GAAG,IAAI,GAAG,EAA8B,CAAC;IACrD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAA,yCAAmB,EAAC,IAAI,CAAC,CAAC;QACtC,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,KAAK,GAAG,kCAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAElD,iCAAiC;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,OAAO,EAAE,CAAC;QAChD,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,UAAU;gBACpB,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,aAAa,UAAU,iBAAiB,KAAK,mDAAmD;aAC1G,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YAClB,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACnC,OAAO,EAAE,iCAAiC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,wCAAwC;IACxC,MAAM,WAAW,GAAG,KAAK,CAAC,yBAAyB,EAAE,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,UAAU,EAAE,GAAG,CAAC,YAAY;YAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC;IACL,CAAC;IAED,sCAAsC;IACtC,MAAM,uBAAuB,GAAG,IAAA,iDAAsB,EAAC,KAAK,CAAC,CAAC;IAE9D,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,uBAAuB,CAAC,KAAK;QAC3D,MAAM;QACN,mBAAmB,EAAE,uBAAuB,CAAC,MAAM;KACpD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ResourceMetadata } from '../models/base';
|
|
2
|
+
import type { SchemaValidator } from './schema-validator';
|
|
3
|
+
import type { ValidationError } from './schema-validation.types';
|
|
4
|
+
export interface ResourceTreeValidationError {
|
|
5
|
+
resourceKey: string;
|
|
6
|
+
resourceKind: string;
|
|
7
|
+
errors: ValidationError[];
|
|
8
|
+
}
|
|
9
|
+
export interface ResourceTreeValidationResult {
|
|
10
|
+
valid: boolean;
|
|
11
|
+
errors: ResourceTreeValidationError[];
|
|
12
|
+
}
|
|
13
|
+
export interface ResourceInput {
|
|
14
|
+
kind: string;
|
|
15
|
+
metadata: ResourceMetadata;
|
|
16
|
+
spec: any;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Validates all resources in a dependency tree.
|
|
20
|
+
*
|
|
21
|
+
* Accepts raw YAML strings and handles parsing internally.
|
|
22
|
+
*
|
|
23
|
+
* Validation layers:
|
|
24
|
+
* 0. YAML parsing & kind resolution
|
|
25
|
+
* 1. Basic metadata validation
|
|
26
|
+
* 2. JSON schema validation (per resource, via raw YAML)
|
|
27
|
+
* 3. Dependency existence (cross-resource)
|
|
28
|
+
* 4. Cross-resource rules (template content, etc.)
|
|
29
|
+
*
|
|
30
|
+
* Collects ALL errors across all resources (no fail-fast).
|
|
31
|
+
*
|
|
32
|
+
* @param yamlStrings - Raw YAML strings, one per resource
|
|
33
|
+
* @param opts.schemaValidator - Optional SchemaValidator for JSON schema checks
|
|
34
|
+
*/
|
|
35
|
+
export declare function validateResourceTree(yamlStrings: string[], opts?: {
|
|
36
|
+
schemaValidator?: SchemaValidator;
|
|
37
|
+
}): ResourceTreeValidationResult;
|