@pipeline-builder/pipeline-core 4.1.22 → 4.1.23
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/lib/index.d.ts +3 -3
- package/lib/index.js +4 -4
- package/lib/template/draft.d.ts +47 -0
- package/lib/template/draft.js +213 -0
- package/lib/template/index.d.ts +3 -3
- package/lib/template/index.js +2 -2
- package/lib/template/plugin-resolver.d.ts +0 -1
- package/lib/template/plugin-resolver.js +5 -21
- package/lib/testing/exports.json +2 -2
- package/package.json +3 -3
package/lib/index.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export * from './config/app-config.js';
|
|
|
32
32
|
export * from './config/config-types.js';
|
|
33
33
|
export * from './config/service-client.js';
|
|
34
34
|
export { parsePlatformBaseUrl } from './config/infrastructure-config.js';
|
|
35
|
-
export { ComputeType, PluginType, type MetaDataType, type Visibility, TriggerType, MetadataKeys, type MetadataKey
|
|
35
|
+
export { ComputeType, PluginType, type MetaDataType, type Visibility, TriggerType, MetadataKeys, type MetadataKey } from './core/pipeline-types.js';
|
|
36
36
|
export * from './core/role-types.js';
|
|
37
37
|
export * from './core/security-group-types.js';
|
|
38
38
|
export { replaceNonAlphanumeric, extractMetadataEnv, resolveFailureBehavior, wrapCommandsForFailureBehavior, STEP_BOOTSTRAP_CMD } from './core/metadata-helpers.js';
|
|
@@ -40,5 +40,5 @@ export * from './core/step-manifest.js';
|
|
|
40
40
|
export { type ContractValueType, type PluginContract, type ContractScope, type ContractIssue, type ContractScopeProps, pipelineScopeMetadata, pipelineContractScope, contractScopeFromTemplateScope, isContractValueOfType, checkPluginContract, type PluginStepRef, collectPluginSteps, pluginLookupFilter, pluginArtifactAlias, type PluginRefIdentity, sanitizePublisher, } from './core/plugin-contract.js';
|
|
41
41
|
export { unwrapLookup } from './core/plugin-lookup-envelope.js';
|
|
42
42
|
export * from './pipeline/plugin-spec.js';
|
|
43
|
-
export { tokenize, hasTemplate, MAX_FIELD_SIZE_BYTES, MAX_PATH_DEPTH, type Token, type LiteralToken, type ExprToken, type SourcePosition, resolve, dependencies, type Scope, type
|
|
44
|
-
export { resolvePluginTemplates
|
|
43
|
+
export { tokenize, hasTemplate, MAX_FIELD_SIZE_BYTES, MAX_PATH_DEPTH, type Token, type LiteralToken, type ExprToken, type SourcePosition, resolve, dependencies, type Scope, type FieldPredicate, validateTemplates, detectCycles, allowedScopeRoots, type TemplateError, type TemplateValidationResult, type ResolveResult, resolveSelfReferencing, validateTemplateDraft, formatTemplateDraftProblems, type TemplateDraftInput, type TemplateDraftLike, type TemplateDraftProblem, type TemplateDraftProblemKind, type TemplateDraftValidation, } from './template/index.js';
|
|
44
|
+
export { resolvePluginTemplates } from './template/plugin-resolver.js';
|
package/lib/index.js
CHANGED
|
@@ -36,7 +36,7 @@ export * from './config/config-types.js';
|
|
|
36
36
|
export * from './config/service-client.js';
|
|
37
37
|
export { parsePlatformBaseUrl } from './config/infrastructure-config.js';
|
|
38
38
|
// Core types (public surface)
|
|
39
|
-
export { ComputeType, PluginType, TriggerType, MetadataKeys
|
|
39
|
+
export { ComputeType, PluginType, TriggerType, MetadataKeys } from './core/pipeline-types.js';
|
|
40
40
|
export * from './core/role-types.js';
|
|
41
41
|
export * from './core/security-group-types.js';
|
|
42
42
|
export { replaceNonAlphanumeric, extractMetadataEnv, resolveFailureBehavior, wrapCommandsForFailureBehavior, STEP_BOOTSTRAP_CMD } from './core/metadata-helpers.js';
|
|
@@ -46,7 +46,7 @@ export { unwrapLookup } from './core/plugin-lookup-envelope.js';
|
|
|
46
46
|
// Plugin domain type (the synth-time authoring types live in the `/cdk` entry)
|
|
47
47
|
export * from './pipeline/plugin-spec.js';
|
|
48
48
|
// Template engine — synth-time scripting for pipeline config + plugin specs
|
|
49
|
-
export { tokenize, hasTemplate, MAX_FIELD_SIZE_BYTES, MAX_PATH_DEPTH, resolve, dependencies, validateTemplates, detectCycles, allowedScopeRoots, resolveSelfReferencing, } from './template/index.js';
|
|
49
|
+
export { tokenize, hasTemplate, MAX_FIELD_SIZE_BYTES, MAX_PATH_DEPTH, resolve, dependencies, validateTemplates, detectCycles, allowedScopeRoots, resolveSelfReferencing, validateTemplateDraft, formatTemplateDraftProblems, } from './template/index.js';
|
|
50
50
|
// A plugin's `{{ … }}` resolution against a pipeline scope (synth, `plugin test`)
|
|
51
|
-
export { resolvePluginTemplates
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
export { resolvePluginTemplates } from './template/plugin-resolver.js';
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxnQkFBZ0I7QUFDaEIsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFekUsOEJBQThCO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFzQyxXQUFXLEVBQUUsWUFBWSxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BKLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsOEJBQThCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwSyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLE9BQU8sRUFNTCxxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBRW5CLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBRW5CLGlCQUFpQixHQUNsQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVoRSwrRUFBK0U7QUFDL0UsY0FBYywyQkFBMkIsQ0FBQztBQUUxQyw0RUFBNEU7QUFDNUUsT0FBTyxFQUNMLFFBQVEsRUFDUixXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLGNBQWMsRUFLZCxPQUFPLEVBQ1AsWUFBWSxFQUdaLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osaUJBQWlCLEVBSWpCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsMkJBQTJCLEdBTTVCLE1BQU0scUJBQXFCLENBQUM7QUFDN0Isa0ZBQWtGO0FBQ2xGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogQG1vZHVsZSBAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlXG4gKlxuICogQXBwbGljYXRpb24gY29uZmlndXJhdGlvbiwgcGlwZWxpbmUgZG9tYWluIHR5cGVzLCBhbmQgdGhlIHRlbXBsYXRlIGVuZ2luZS5cbiAqXG4gKiBUaGlzIGVudHJ5IHBvaW50IGlzIGRlbGliZXJhdGVseSBGUkVFIG9mIGBhd3MtY2RrLWxpYmAuIFRoZSBDREsgY29uc3RydWN0cyBsaXZlXG4gKiBiZWhpbmQgYSBzZXBhcmF0ZSBzdWJwYXRoIOKAlCBgQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZS9jZGtgIOKAlCBiZWNhdXNlIHRoZVxuICogQVBJIHNlcnZpY2VzIGNvbnN1bWUgdGhpcyBwYWNrYWdlIGZvciBjb25maWcgYW5kIGRvbWFpbiB0eXBlcyBvbmx5LCBhbmQgYW5cbiAqIGBleHBvcnQgKmAgb2YgdGhlIGNvbnN0cnVjdHMgZnJvbSBoZXJlIHB1dCB0aGUgd2hvbGUgb2YgYGF3cy1jZGstbGliYCBvbiB0aGVcbiAqIGltcG9ydCBncmFwaCBvZiBldmVyeSBzZXJ2aWNlIHRoYXQgcmVhZCBzbyBtdWNoIGFzIGEgcG9ydCBudW1iZXIuIEFueXRoaW5nIHRoYXRcbiAqIGltcG9ydHMgYGF3cy1jZGstbGliYCwgYXQgdHlwZSBsZXZlbCBvciB2YWx1ZSBsZXZlbCwgYmVsb25ncyBpbiBgY2RrLnRzYC5cbiAqXG4gKiAqKkNvbmZpZyoqXG4gKiAtIENvbmZpZyDigJQgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiBzaW5nbGV0b24gKGVudmlyb25tZW50LWRyaXZlbilcbiAqIC0gQ29uZmlnVHlwZXMg4oCUIHR5cGVkIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlc1xuICpcbiAqICoqVHlwZXMqKlxuICogLSBQaXBlbGluZVR5cGUsIENvbXB1dGVUeXBlLCBQbHVnaW5UeXBlLCBWaXNpYmlsaXR5IOKAlCBwaXBlbGluZSBkb21haW4gZW51bXNcbiAqIC0gUm9sZVR5cGVzLCBTZWN1cml0eUdyb3VwVHlwZXMg4oCUIGluZnJhc3RydWN0dXJlIHR5cGUgZGVmaW5pdGlvbnNcbiAqIC0gUGx1Z2luU3BlYyDigJQgYSBwbHVnaW4ncyBkZWNsYXJlZCBjb250cmFjdFxuICogLSBJZEdlbmVyYXRvciDigJQgZGV0ZXJtaW5pc3RpYyBJRCBnZW5lcmF0aW9uXG4gKlxuICogKipIZWxwZXJzKipcbiAqIC0gcmVwbGFjZU5vbkFscGhhbnVtZXJpYywgZXh0cmFjdE1ldGFkYXRhRW52IOKAlCBzdHJpbmcgYW5kIG1ldGFkYXRhIHV0aWxpdGllc1xuICogLSByZXNvbHZlRmFpbHVyZUJlaGF2aW9yLCB3cmFwQ29tbWFuZHNGb3JGYWlsdXJlQmVoYXZpb3Ig4oCUIGEgc3RlcCdzIGZhaWx1cmVCZWhhdmlvciwgYXMgQ29kZUJ1aWxkIHJ1bnMgaXRcbiAqXG4gKiBUaGUgUG9zdGdyZXMvRHJpenpsZSBkYXRhIGxheWVyIChkYiwgc2NoZW1hLCBDcnVkU2VydmljZSwgcXVlcnkgYnVpbGRlcnMsXG4gKiBmaWx0ZXIvY29tcGxpYW5jZSB0eXBlcywgZXRjLikgaXMgTk9UIHJlLWV4cG9ydGVkIGhlcmUg4oCUIGltcG9ydCB0aG9zZVxuICogZGlyZWN0bHkgZnJvbSBgQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YWAuXG4gKi9cblxuLy8gQ29uZmlndXJhdGlvblxuZXhwb3J0ICogZnJvbSAnLi9jb25maWcvYXBwLWNvbmZpZy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZy9jb25maWctdHlwZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWcvc2VydmljZS1jbGllbnQuanMnO1xuZXhwb3J0IHsgcGFyc2VQbGF0Zm9ybUJhc2VVcmwgfSBmcm9tICcuL2NvbmZpZy9pbmZyYXN0cnVjdHVyZS1jb25maWcuanMnO1xuXG4vLyBDb3JlIHR5cGVzIChwdWJsaWMgc3VyZmFjZSlcbmV4cG9ydCB7IENvbXB1dGVUeXBlLCBQbHVnaW5UeXBlLCB0eXBlIE1ldGFEYXRhVHlwZSwgdHlwZSBWaXNpYmlsaXR5LCBUcmlnZ2VyVHlwZSwgTWV0YWRhdGFLZXlzLCB0eXBlIE1ldGFkYXRhS2V5IH0gZnJvbSAnLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29yZS9yb2xlLXR5cGVzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29yZS9zZWN1cml0eS1ncm91cC10eXBlcy5qcyc7XG5leHBvcnQgeyByZXBsYWNlTm9uQWxwaGFudW1lcmljLCBleHRyYWN0TWV0YWRhdGFFbnYsIHJlc29sdmVGYWlsdXJlQmVoYXZpb3IsIHdyYXBDb21tYW5kc0ZvckZhaWx1cmVCZWhhdmlvciwgU1RFUF9CT09UU1RSQVBfQ01EIH0gZnJvbSAnLi9jb3JlL21ldGFkYXRhLWhlbHBlcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlL3N0ZXAtbWFuaWZlc3QuanMnO1xuZXhwb3J0IHtcbiAgdHlwZSBDb250cmFjdFZhbHVlVHlwZSxcbiAgdHlwZSBQbHVnaW5Db250cmFjdCxcbiAgdHlwZSBDb250cmFjdFNjb3BlLFxuICB0eXBlIENvbnRyYWN0SXNzdWUsXG4gIHR5cGUgQ29udHJhY3RTY29wZVByb3BzLFxuICBwaXBlbGluZVNjb3BlTWV0YWRhdGEsXG4gIHBpcGVsaW5lQ29udHJhY3RTY29wZSxcbiAgY29udHJhY3RTY29wZUZyb21UZW1wbGF0ZVNjb3BlLFxuICBpc0NvbnRyYWN0VmFsdWVPZlR5cGUsXG4gIGNoZWNrUGx1Z2luQ29udHJhY3QsXG4gIHR5cGUgUGx1Z2luU3RlcFJlZixcbiAgY29sbGVjdFBsdWdpblN0ZXBzLFxuICBwbHVnaW5Mb29rdXBGaWx0ZXIsXG4gIHBsdWdpbkFydGlmYWN0QWxpYXMsXG4gIHR5cGUgUGx1Z2luUmVmSWRlbnRpdHksXG4gIHNhbml0aXplUHVibGlzaGVyLFxufSBmcm9tICcuL2NvcmUvcGx1Z2luLWNvbnRyYWN0LmpzJztcbmV4cG9ydCB7IHVud3JhcExvb2t1cCB9IGZyb20gJy4vY29yZS9wbHVnaW4tbG9va3VwLWVudmVsb3BlLmpzJztcblxuLy8gUGx1Z2luIGRvbWFpbiB0eXBlICh0aGUgc3ludGgtdGltZSBhdXRob3JpbmcgdHlwZXMgbGl2ZSBpbiB0aGUgYC9jZGtgIGVudHJ5KVxuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS9wbHVnaW4tc3BlYy5qcyc7XG5cbi8vIFRlbXBsYXRlIGVuZ2luZSDigJQgc3ludGgtdGltZSBzY3JpcHRpbmcgZm9yIHBpcGVsaW5lIGNvbmZpZyArIHBsdWdpbiBzcGVjc1xuZXhwb3J0IHtcbiAgdG9rZW5pemUsXG4gIGhhc1RlbXBsYXRlLFxuICBNQVhfRklFTERfU0laRV9CWVRFUyxcbiAgTUFYX1BBVEhfREVQVEgsXG4gIHR5cGUgVG9rZW4sXG4gIHR5cGUgTGl0ZXJhbFRva2VuLFxuICB0eXBlIEV4cHJUb2tlbixcbiAgdHlwZSBTb3VyY2VQb3NpdGlvbixcbiAgcmVzb2x2ZSxcbiAgZGVwZW5kZW5jaWVzLFxuICB0eXBlIFNjb3BlLFxuICB0eXBlIEZpZWxkUHJlZGljYXRlLFxuICB2YWxpZGF0ZVRlbXBsYXRlcyxcbiAgZGV0ZWN0Q3ljbGVzLFxuICBhbGxvd2VkU2NvcGVSb290cyxcbiAgdHlwZSBUZW1wbGF0ZUVycm9yLFxuICB0eXBlIFRlbXBsYXRlVmFsaWRhdGlvblJlc3VsdCxcbiAgdHlwZSBSZXNvbHZlUmVzdWx0LFxuICByZXNvbHZlU2VsZlJlZmVyZW5jaW5nLFxuICB2YWxpZGF0ZVRlbXBsYXRlRHJhZnQsXG4gIGZvcm1hdFRlbXBsYXRlRHJhZnRQcm9ibGVtcyxcbiAgdHlwZSBUZW1wbGF0ZURyYWZ0SW5wdXQsXG4gIHR5cGUgVGVtcGxhdGVEcmFmdExpa2UsXG4gIHR5cGUgVGVtcGxhdGVEcmFmdFByb2JsZW0sXG4gIHR5cGUgVGVtcGxhdGVEcmFmdFByb2JsZW1LaW5kLFxuICB0eXBlIFRlbXBsYXRlRHJhZnRWYWxpZGF0aW9uLFxufSBmcm9tICcuL3RlbXBsYXRlL2luZGV4LmpzJztcbi8vIEEgcGx1Z2luJ3MgYHt7IOKApiB9fWAgcmVzb2x1dGlvbiBhZ2FpbnN0IGEgcGlwZWxpbmUgc2NvcGUgKHN5bnRoLCBgcGx1Z2luIHRlc3RgKVxuZXhwb3J0IHsgcmVzb2x2ZVBsdWdpblRlbXBsYXRlcyB9IGZyb20gJy4vdGVtcGxhdGUvcGx1Z2luLXJlc29sdmVyLmpzJztcbiJdfQ==
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** What went wrong. See the module header for what each kind means. */
|
|
2
|
+
export type TemplateDraftProblemKind = 'invalid-props' | 'parse' | 'reserved-scope' | 'unknown-scope' | 'cycle' | 'undeclared-variable' | 'duplicate-input' | 'invalid-input-name' | 'unused-input';
|
|
3
|
+
/** One problem found in a drafted template. */
|
|
4
|
+
export interface TemplateDraftProblem {
|
|
5
|
+
readonly kind: TemplateDraftProblemKind;
|
|
6
|
+
/** `error` blocks the draft; `warning` is worth saying but not fatal. */
|
|
7
|
+
readonly severity: 'error' | 'warning';
|
|
8
|
+
readonly message: string;
|
|
9
|
+
/** Dotted path of the offending field inside `props`, when there is one. */
|
|
10
|
+
readonly field?: string;
|
|
11
|
+
readonly line?: number;
|
|
12
|
+
readonly col?: number;
|
|
13
|
+
/** The `{{ path }}` that caused it. */
|
|
14
|
+
readonly path?: string;
|
|
15
|
+
/** For `cycle`: the scope keys forming the loop. */
|
|
16
|
+
readonly cycle?: readonly string[];
|
|
17
|
+
/** For the variable/input kinds: the `vars.<name>` involved. */
|
|
18
|
+
readonly variable?: string;
|
|
19
|
+
}
|
|
20
|
+
/** One declared input, read defensively — a draft's `inputs` is untrusted. */
|
|
21
|
+
export interface TemplateDraftInput {
|
|
22
|
+
readonly name?: unknown;
|
|
23
|
+
}
|
|
24
|
+
/** The part of a drafted template this validator reads. */
|
|
25
|
+
export interface TemplateDraftLike {
|
|
26
|
+
/** The template body: a BuilderProps carrying `{{ vars.* }}` placeholders. */
|
|
27
|
+
readonly props?: unknown;
|
|
28
|
+
/** The declared `vars.*` contract. */
|
|
29
|
+
readonly inputs?: readonly TemplateDraftInput[] | null;
|
|
30
|
+
}
|
|
31
|
+
/** The verdict on a drafted template. */
|
|
32
|
+
export interface TemplateDraftValidation {
|
|
33
|
+
/** True when no problem has `severity: 'error'`. */
|
|
34
|
+
readonly valid: boolean;
|
|
35
|
+
readonly problems: readonly TemplateDraftProblem[];
|
|
36
|
+
/** Every `vars.<name>` the body references, sorted. */
|
|
37
|
+
readonly referencedVariables: readonly string[];
|
|
38
|
+
/** Every well-formed `inputs[].name`, in declaration order. */
|
|
39
|
+
readonly declaredInputs: readonly string[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Validate a drafted pipeline template. Never throws: a malformed draft comes
|
|
43
|
+
* back as problems, because the caller's job is to report them, not to crash.
|
|
44
|
+
*/
|
|
45
|
+
export declare function validateTemplateDraft(draft: TemplateDraftLike): TemplateDraftValidation;
|
|
46
|
+
/** One readable line per problem, for a tool result or an error body. */
|
|
47
|
+
export declare function formatTemplateDraftProblems(problems: readonly TemplateDraftProblem[]): string[];
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* Service-side validation of a DRAFTED pipeline template — the one entry point
|
|
5
|
+
* a caller needs to ask "would this template survive being created and then
|
|
6
|
+
* instantiated?" before it is offered to anyone.
|
|
7
|
+
*
|
|
8
|
+
* It exists because a drafted template (the ask agent's `propose_template`, a
|
|
9
|
+
* CLI-authored file, an import) is otherwise checked only against a shape
|
|
10
|
+
* schema. A shape schema cannot see that `{{ vars.REGION }}` is referenced but
|
|
11
|
+
* never declared in `inputs`, or that two metadata values reference each other
|
|
12
|
+
* in a cycle: both are accepted at create time and only fail later, at synth,
|
|
13
|
+
* far from whoever wrote them.
|
|
14
|
+
*
|
|
15
|
+
* What it reports:
|
|
16
|
+
* - `parse` — malformed `{{ … }}` anywhere in the body, at its line/col.
|
|
17
|
+
* - `reserved-scope` — `{{ secrets.* }}`, which the engine reserves.
|
|
18
|
+
* - `unknown-scope` — a self-referencing field pointing at a root that is
|
|
19
|
+
* neither `metadata` nor `vars`; the pipeline create
|
|
20
|
+
* path rejects exactly these.
|
|
21
|
+
* - `cycle` — self-references that cannot be ordered.
|
|
22
|
+
* - `undeclared-variable` — `{{ vars.X }}` with no matching `inputs[].name` and
|
|
23
|
+
* no default in `props.vars`, so instantiation can
|
|
24
|
+
* never supply it.
|
|
25
|
+
* - `duplicate-input` / `invalid-input-name` — an input that cannot be filled:
|
|
26
|
+
* a repeated name, or one the grammar cannot express
|
|
27
|
+
* as `{{ vars.<name> }}`.
|
|
28
|
+
* - `unused-input` — declared but never referenced. A WARNING: the
|
|
29
|
+
* template still works, it just asks for something
|
|
30
|
+
* it ignores.
|
|
31
|
+
*
|
|
32
|
+
* Errors mean "do not offer this"; warnings mean "say so and let the author
|
|
33
|
+
* decide". `valid` reflects errors only.
|
|
34
|
+
*/
|
|
35
|
+
import { TokenizerError, tokenize } from './tokenizer.js';
|
|
36
|
+
import { detectCycles } from './validate.js';
|
|
37
|
+
import { visitStrings } from './walker.js';
|
|
38
|
+
/** The template grammar's identifier rule (tokenizer.ts): `[a-zA-Z_][a-zA-Z0-9_]{0,63}`. */
|
|
39
|
+
const IDENTIFIER = /^[a-zA-Z_][a-zA-Z0-9_]{0,63}$/;
|
|
40
|
+
/** The roots a self-referencing pipeline field may address (same set the pipeline create path allows). */
|
|
41
|
+
const SELF_SCOPE_ROOTS = ['metadata', 'vars'];
|
|
42
|
+
/** The metadata layers synth merges, in the order it merges them. */
|
|
43
|
+
const METADATA_PREFIXES = ['global.', 'defaults.metadata.', 'synth.metadata.'];
|
|
44
|
+
/** The first path segment of `rest` — `A.B` and `A[0]` both yield `A`. */
|
|
45
|
+
function firstSegment(rest) {
|
|
46
|
+
const match = /^[^.[]+/.exec(rest);
|
|
47
|
+
return match ? match[0] : rest;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The scope key a templatable field WRITES, or null when the field is not
|
|
51
|
+
* self-referencing. `global.env`, `defaults.metadata.env` and
|
|
52
|
+
* `synth.metadata.env` all write `metadata.env` — that is how synth layers
|
|
53
|
+
* them — so a cycle through any layer is found.
|
|
54
|
+
*/
|
|
55
|
+
function selfScopeKey(field) {
|
|
56
|
+
if (field === 'project')
|
|
57
|
+
return 'project';
|
|
58
|
+
for (const prefix of METADATA_PREFIXES) {
|
|
59
|
+
if (field.startsWith(prefix))
|
|
60
|
+
return `metadata.${firstSegment(field.slice(prefix.length))}`;
|
|
61
|
+
}
|
|
62
|
+
if (field.startsWith('vars.'))
|
|
63
|
+
return `vars.${firstSegment(field.slice('vars.'.length))}`;
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
function isRecord(value) {
|
|
67
|
+
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Validate a drafted pipeline template. Never throws: a malformed draft comes
|
|
71
|
+
* back as problems, because the caller's job is to report them, not to crash.
|
|
72
|
+
*/
|
|
73
|
+
export function validateTemplateDraft(draft) {
|
|
74
|
+
const problems = [];
|
|
75
|
+
const referenced = new Set();
|
|
76
|
+
if (!isRecord(draft.props)) {
|
|
77
|
+
return {
|
|
78
|
+
valid: false,
|
|
79
|
+
problems: [{ kind: 'invalid-props', severity: 'error', message: 'Template body (props) must be an object' }],
|
|
80
|
+
referencedVariables: [],
|
|
81
|
+
declaredInputs: [],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const props = draft.props;
|
|
85
|
+
// -- Pass 1: every string in the body, so a malformed `{{` is caught wherever
|
|
86
|
+
// it is — not only in the fields the pipeline create path happens to check.
|
|
87
|
+
let parseFailed = false;
|
|
88
|
+
visitStrings(props, () => true, (field, source) => {
|
|
89
|
+
let tokens;
|
|
90
|
+
try {
|
|
91
|
+
tokens = tokenize(source);
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
parseFailed = true;
|
|
95
|
+
const pos = err instanceof TokenizerError ? err.pos : undefined;
|
|
96
|
+
problems.push({
|
|
97
|
+
kind: 'parse',
|
|
98
|
+
severity: 'error',
|
|
99
|
+
message: err instanceof Error ? err.message : String(err),
|
|
100
|
+
field,
|
|
101
|
+
...(pos && { line: pos.line, col: pos.col }),
|
|
102
|
+
});
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const selfReferencing = selfScopeKey(field) !== null;
|
|
106
|
+
for (const token of tokens) {
|
|
107
|
+
if (token.kind !== 'expr')
|
|
108
|
+
continue;
|
|
109
|
+
const root = token.path[0];
|
|
110
|
+
const path = token.path.join('.');
|
|
111
|
+
if (root === 'secrets') {
|
|
112
|
+
problems.push({
|
|
113
|
+
kind: 'reserved-scope',
|
|
114
|
+
severity: 'error',
|
|
115
|
+
message: '\'secrets\' is a reserved scope — a template body must not reference it',
|
|
116
|
+
field,
|
|
117
|
+
path,
|
|
118
|
+
line: token.pos.line,
|
|
119
|
+
col: token.pos.col,
|
|
120
|
+
});
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (root === 'vars' && token.path.length > 1)
|
|
124
|
+
referenced.add(token.path[1]);
|
|
125
|
+
if (selfReferencing && !SELF_SCOPE_ROOTS.includes(root)) {
|
|
126
|
+
problems.push({
|
|
127
|
+
kind: 'unknown-scope',
|
|
128
|
+
severity: 'error',
|
|
129
|
+
message: `Template references unknown scope root '${root}' (a pipeline field may reference ${SELF_SCOPE_ROOTS.join(' or ')} only)`,
|
|
130
|
+
field,
|
|
131
|
+
path,
|
|
132
|
+
line: token.pos.line,
|
|
133
|
+
col: token.pos.col,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
// -- Pass 2: cycles among the self-referencing fields. Skipped when anything
|
|
139
|
+
// failed to parse — the cycle walker tokenizes eagerly and would throw on
|
|
140
|
+
// the same bad field that pass 1 already reported.
|
|
141
|
+
if (!parseFailed) {
|
|
142
|
+
for (const err of detectCycles(props, (field) => selfScopeKey(field) !== null, selfScopeKey)) {
|
|
143
|
+
problems.push({
|
|
144
|
+
kind: 'cycle',
|
|
145
|
+
severity: 'error',
|
|
146
|
+
message: err.message,
|
|
147
|
+
field: err.field,
|
|
148
|
+
...(err.cycle && { cycle: err.cycle }),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// -- Pass 3: the declared inputs. An input the grammar cannot express, or one
|
|
153
|
+
// declared twice, can never be filled in — both are errors, not warnings.
|
|
154
|
+
const declared = [];
|
|
155
|
+
const seen = new Set();
|
|
156
|
+
for (const input of draft.inputs ?? []) {
|
|
157
|
+
const name = input?.name;
|
|
158
|
+
if (typeof name !== 'string' || !IDENTIFIER.test(name)) {
|
|
159
|
+
problems.push({
|
|
160
|
+
kind: 'invalid-input-name',
|
|
161
|
+
severity: 'error',
|
|
162
|
+
message: `Declared input ${JSON.stringify(name)} is not a usable variable name (${IDENTIFIER.source})`,
|
|
163
|
+
...(typeof name === 'string' && { variable: name }),
|
|
164
|
+
});
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
if (seen.has(name)) {
|
|
168
|
+
problems.push({ kind: 'duplicate-input', severity: 'error', message: `Declared input '${name}' appears more than once`, variable: name });
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
seen.add(name);
|
|
172
|
+
declared.push(name);
|
|
173
|
+
}
|
|
174
|
+
// -- Pass 4: the contract between body and inputs. A var the body references
|
|
175
|
+
// is supplied either by a declared input or by a default already sitting in
|
|
176
|
+
// `props.vars`; anything else has no way of ever getting a value.
|
|
177
|
+
const defaulted = isRecord(props.vars) ? Object.keys(props.vars) : [];
|
|
178
|
+
const supplied = new Set([...declared, ...defaulted]);
|
|
179
|
+
for (const variable of [...referenced].sort()) {
|
|
180
|
+
if (supplied.has(variable))
|
|
181
|
+
continue;
|
|
182
|
+
problems.push({
|
|
183
|
+
kind: 'undeclared-variable',
|
|
184
|
+
severity: 'error',
|
|
185
|
+
message: `Template references {{ vars.${variable} }} but declares no input named '${variable}'`,
|
|
186
|
+
variable,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
for (const name of declared) {
|
|
190
|
+
if (referenced.has(name))
|
|
191
|
+
continue;
|
|
192
|
+
problems.push({
|
|
193
|
+
kind: 'unused-input',
|
|
194
|
+
severity: 'warning',
|
|
195
|
+
message: `Declared input '${name}' is never referenced as {{ vars.${name} }}`,
|
|
196
|
+
variable: name,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
valid: !problems.some((p) => p.severity === 'error'),
|
|
201
|
+
problems,
|
|
202
|
+
referencedVariables: [...referenced].sort(),
|
|
203
|
+
declaredInputs: declared,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/** One readable line per problem, for a tool result or an error body. */
|
|
207
|
+
export function formatTemplateDraftProblems(problems) {
|
|
208
|
+
return problems.map((p) => {
|
|
209
|
+
const where = p.field ? `${p.field}${p.line !== undefined ? `:${p.line}:${p.col}` : ''}` : p.kind;
|
|
210
|
+
return `[${where}] ${p.message}`;
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvZHJhZnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBd0QzQyw0RkFBNEY7QUFDNUYsTUFBTSxVQUFVLEdBQUcsK0JBQStCLENBQUM7QUFFbkQsMEdBQTBHO0FBQzFHLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFOUMscUVBQXFFO0FBQ3JFLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUUvRSwwRUFBMEU7QUFDMUUsU0FBUyxZQUFZLENBQUMsSUFBWTtJQUNoQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNqQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxLQUFhO0lBQ2pDLElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMxQyxLQUFLLE1BQU0sTUFBTSxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDdkMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sWUFBWSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FB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QUFDO0lBRUQsT0FBTztRQUNMLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDO1FBQ3BELFFBQVE7UUFDUixtQkFBbUIsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFO1FBQzNDLGNBQWMsRUFBRSxRQUFRO0tBQ3pCLENBQUM7QUFDSixDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxRQUF5QztJQUNuRixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUN4QixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2xHLE9BQU8sSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25DLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFNlcnZpY2Utc2lkZSB2YWxpZGF0aW9uIG9mIGEgRFJBRlRFRCBwaXBlbGluZSB0ZW1wbGF0ZSDigJQgdGhlIG9uZSBlbnRyeSBwb2ludFxuICogYSBjYWxsZXIgbmVlZHMgdG8gYXNrIFwid291bGQgdGhpcyB0ZW1wbGF0ZSBzdXJ2aXZlIGJlaW5nIGNyZWF0ZWQgYW5kIHRoZW5cbiAqIGluc3RhbnRpYXRlZD9cIiBiZWZvcmUgaXQgaXMgb2ZmZXJlZCB0byBhbnlvbmUuXG4gKlxuICogSXQgZXhpc3RzIGJlY2F1c2UgYSBkcmFmdGVkIHRlbXBsYXRlICh0aGUgYXNrIGFnZW50J3MgYHByb3Bvc2VfdGVtcGxhdGVgLCBhXG4gKiBDTEktYXV0aG9yZWQgZmlsZSwgYW4gaW1wb3J0KSBpcyBvdGhlcndpc2UgY2hlY2tlZCBvbmx5IGFnYWluc3QgYSBzaGFwZVxuICogc2NoZW1hLiBBIHNoYXBlIHNjaGVtYSBjYW5ub3Qgc2VlIHRoYXQgYHt7IHZhcnMuUkVHSU9OIH19YCBpcyByZWZlcmVuY2VkIGJ1dFxuICogbmV2ZXIgZGVjbGFyZWQgaW4gYGlucHV0c2AsIG9yIHRoYXQgdHdvIG1ldGFkYXRhIHZhbHVlcyByZWZlcmVuY2UgZWFjaCBvdGhlclxuICogaW4gYSBjeWNsZTogYm90aCBhcmUgYWNjZXB0ZWQgYXQgY3JlYXRlIHRpbWUgYW5kIG9ubHkgZmFpbCBsYXRlciwgYXQgc3ludGgsXG4gKiBmYXIgZnJvbSB3aG9ldmVyIHdyb3RlIHRoZW0uXG4gKlxuICogV2hhdCBpdCByZXBvcnRzOlxuICogIC0gYHBhcnNlYCAgICAgICAgICAgICAgICDigJQgbWFsZm9ybWVkIGB7eyDigKYgfX1gIGFueXdoZXJlIGluIHRoZSBib2R5LCBhdCBpdHMgbGluZS9jb2wuXG4gKiAgLSBgcmVzZXJ2ZWQtc2NvcGVgICAgICAgIOKAlCBge3sgc2VjcmV0cy4qIH19YCwgd2hpY2ggdGhlIGVuZ2luZSByZXNlcnZlcy5cbiAqICAtIGB1bmtub3duLXNjb3BlYCAgICAgICAg4oCUIGEgc2VsZi1yZWZlcmVuY2luZyBmaWVsZCBwb2ludGluZyBhdCBhIHJvb3QgdGhhdCBpc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5laXRoZXIgYG1ldGFkYXRhYCBub3IgYHZhcnNgOyB0aGUgcGlwZWxpbmUgY3JlYXRlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCByZWplY3RzIGV4YWN0bHkgdGhlc2UuXG4gKiAgLSBgY3ljbGVgICAgICAgICAgICAgICAgIOKAlCBzZWxmLXJlZmVyZW5jZXMgdGhhdCBjYW5ub3QgYmUgb3JkZXJlZC5cbiAqICAtIGB1bmRlY2xhcmVkLXZhcmlhYmxlYCAg4oCUIGB7eyB2YXJzLlggfX1gIHdpdGggbm8gbWF0Y2hpbmcgYGlucHV0c1tdLm5hbWVgIGFuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vIGRlZmF1bHQgaW4gYHByb3BzLnZhcnNgLCBzbyBpbnN0YW50aWF0aW9uIGNhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldmVyIHN1cHBseSBpdC5cbiAqICAtIGBkdXBsaWNhdGUtaW5wdXRgIC8gYGludmFsaWQtaW5wdXQtbmFtZWAg4oCUIGFuIGlucHV0IHRoYXQgY2Fubm90IGJlIGZpbGxlZDpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHJlcGVhdGVkIG5hbWUsIG9yIG9uZSB0aGUgZ3JhbW1hciBjYW5ub3QgZXhwcmVzc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGB7eyB2YXJzLjxuYW1lPiB9fWAuXG4gKiAgLSBgdW51c2VkLWlucHV0YCAgICAgICAgIOKAlCBkZWNsYXJlZCBidXQgbmV2ZXIgcmVmZXJlbmNlZC4gQSBXQVJOSU5HOiB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSBzdGlsbCB3b3JrcywgaXQganVzdCBhc2tzIGZvciBzb21ldGhpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBpZ25vcmVzLlxuICpcbiAqIEVycm9ycyBtZWFuIFwiZG8gbm90IG9mZmVyIHRoaXNcIjsgd2FybmluZ3MgbWVhbiBcInNheSBzbyBhbmQgbGV0IHRoZSBhdXRob3JcbiAqIGRlY2lkZVwiLiBgdmFsaWRgIHJlZmxlY3RzIGVycm9ycyBvbmx5LlxuICovXG5cbmltcG9ydCB7IFRva2VuaXplckVycm9yLCB0b2tlbml6ZSB9IGZyb20gJy4vdG9rZW5pemVyLmpzJztcbmltcG9ydCB7IGRldGVjdEN5Y2xlcyB9IGZyb20gJy4vdmFsaWRhdGUuanMnO1xuaW1wb3J0IHsgdmlzaXRTdHJpbmdzIH0gZnJvbSAnLi93YWxrZXIuanMnO1xuXG4vKiogV2hhdCB3ZW50IHdyb25nLiBTZWUgdGhlIG1vZHVsZSBoZWFkZXIgZm9yIHdoYXQgZWFjaCBraW5kIG1lYW5zLiAqL1xuZXhwb3J0IHR5cGUgVGVtcGxhdGVEcmFmdFByb2JsZW1LaW5kID1cbiAgfCAnaW52YWxpZC1wcm9wcydcbiAgfCAncGFyc2UnXG4gIHwgJ3Jlc2VydmVkLXNjb3BlJ1xuICB8ICd1bmtub3duLXNjb3BlJ1xuICB8ICdjeWNsZSdcbiAgfCAndW5kZWNsYXJlZC12YXJpYWJsZSdcbiAgfCAnZHVwbGljYXRlLWlucHV0J1xuICB8ICdpbnZhbGlkLWlucHV0LW5hbWUnXG4gIHwgJ3VudXNlZC1pbnB1dCc7XG5cbi8qKiBPbmUgcHJvYmxlbSBmb3VuZCBpbiBhIGRyYWZ0ZWQgdGVtcGxhdGUuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlRHJhZnRQcm9ibGVtIHtcbiAgcmVhZG9ubHkga2luZDogVGVtcGxhdGVEcmFmdFByb2JsZW1LaW5kO1xuICAvKiogYGVycm9yYCBibG9ja3MgdGhlIGRyYWZ0OyBgd2FybmluZ2AgaXMgd29ydGggc2F5aW5nIGJ1dCBub3QgZmF0YWwuICovXG4gIHJlYWRvbmx5IHNldmVyaXR5OiAnZXJyb3InIHwgJ3dhcm5pbmcnO1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBEb3R0ZWQgcGF0aCBvZiB0aGUgb2ZmZW5kaW5nIGZpZWxkIGluc2lkZSBgcHJvcHNgLCB3aGVuIHRoZXJlIGlzIG9uZS4gKi9cbiAgcmVhZG9ubHkgZmllbGQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxpbmU/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvbD86IG51bWJlcjtcbiAgLyoqIFRoZSBge3sgcGF0aCB9fWAgdGhhdCBjYXVzZWQgaXQuICovXG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG4gIC8qKiBGb3IgYGN5Y2xlYDogdGhlIHNjb3BlIGtleXMgZm9ybWluZyB0aGUgbG9vcC4gKi9cbiAgcmVhZG9ubHkgY3ljbGU/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIEZvciB0aGUgdmFyaWFibGUvaW5wdXQga2luZHM6IHRoZSBgdmFycy48bmFtZT5gIGludm9sdmVkLiAqL1xuICByZWFkb25seSB2YXJpYWJsZT86IHN0cmluZztcbn1cblxuLyoqIE9uZSBkZWNsYXJlZCBpbnB1dCwgcmVhZCBkZWZlbnNpdmVseSDigJQgYSBkcmFmdCdzIGBpbnB1dHNgIGlzIHVudHJ1c3RlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVEcmFmdElucHV0IHtcbiAgcmVhZG9ubHkgbmFtZT86IHVua25vd247XG59XG5cbi8qKiBUaGUgcGFydCBvZiBhIGRyYWZ0ZWQgdGVtcGxhdGUgdGhpcyB2YWxpZGF0b3IgcmVhZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlRHJhZnRMaWtlIHtcbiAgLyoqIFRoZSB0ZW1wbGF0ZSBib2R5OiBhIEJ1aWxkZXJQcm9wcyBjYXJyeWluZyBge3sgdmFycy4qIH19YCBwbGFjZWhvbGRlcnMuICovXG4gIHJlYWRvbmx5IHByb3BzPzogdW5rbm93bjtcbiAgLyoqIFRoZSBkZWNsYXJlZCBgdmFycy4qYCBjb250cmFjdC4gKi9cbiAgcmVhZG9ubHkgaW5wdXRzPzogcmVhZG9ubHkgVGVtcGxhdGVEcmFmdElucHV0W10gfCBudWxsO1xufVxuXG4vKiogVGhlIHZlcmRpY3Qgb24gYSBkcmFmdGVkIHRlbXBsYXRlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZURyYWZ0VmFsaWRhdGlvbiB7XG4gIC8qKiBUcnVlIHdoZW4gbm8gcHJvYmxlbSBoYXMgYHNldmVyaXR5OiAnZXJyb3InYC4gKi9cbiAgcmVhZG9ubHkgdmFsaWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHByb2JsZW1zOiByZWFkb25seSBUZW1wbGF0ZURyYWZ0UHJvYmxlbVtdO1xuICAvKiogRXZlcnkgYHZhcnMuPG5hbWU+YCB0aGUgYm9keSByZWZlcmVuY2VzLCBzb3J0ZWQuICovXG4gIHJlYWRvbmx5IHJlZmVyZW5jZWRWYXJpYWJsZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogRXZlcnkgd2VsbC1mb3JtZWQgYGlucHV0c1tdLm5hbWVgLCBpbiBkZWNsYXJhdGlvbiBvcmRlci4gKi9cbiAgcmVhZG9ubHkgZGVjbGFyZWRJbnB1dHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKiogVGhlIHRlbXBsYXRlIGdyYW1tYXIncyBpZGVudGlmaWVyIHJ1bGUgKHRva2VuaXplci50cyk6IGBbYS16QS1aX11bYS16QS1aMC05X117MCw2M31gLiAqL1xuY29uc3QgSURFTlRJRklFUiA9IC9eW2EtekEtWl9dW2EtekEtWjAtOV9dezAsNjN9JC87XG5cbi8qKiBUaGUgcm9vdHMgYSBzZWxmLXJlZmVyZW5jaW5nIHBpcGVsaW5lIGZpZWxkIG1heSBhZGRyZXNzIChzYW1lIHNldCB0aGUgcGlwZWxpbmUgY3JlYXRlIHBhdGggYWxsb3dzKS4gKi9cbmNvbnN0IFNFTEZfU0NPUEVfUk9PVFMgPSBbJ21ldGFkYXRhJywgJ3ZhcnMnXTtcblxuLyoqIFRoZSBtZXRhZGF0YSBsYXllcnMgc3ludGggbWVyZ2VzLCBpbiB0aGUgb3JkZXIgaXQgbWVyZ2VzIHRoZW0uICovXG5jb25zdCBNRVRBREFUQV9QUkVGSVhFUyA9IFsnZ2xvYmFsLicsICdkZWZhdWx0cy5tZXRhZGF0YS4nLCAnc3ludGgubWV0YWRhdGEuJ107XG5cbi8qKiBUaGUgZmlyc3QgcGF0aCBzZWdtZW50IG9mIGByZXN0YCDigJQgYEEuQmAgYW5kIGBBWzBdYCBib3RoIHlpZWxkIGBBYC4gKi9cbmZ1bmN0aW9uIGZpcnN0U2VnbWVudChyZXN0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IC9eW14uW10rLy5leGVjKHJlc3QpO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFswXSA6IHJlc3Q7XG59XG5cbi8qKlxuICogVGhlIHNjb3BlIGtleSBhIHRlbXBsYXRhYmxlIGZpZWxkIFdSSVRFUywgb3IgbnVsbCB3aGVuIHRoZSBmaWVsZCBpcyBub3RcbiAqIHNlbGYtcmVmZXJlbmNpbmcuIGBnbG9iYWwuZW52YCwgYGRlZmF1bHRzLm1ldGFkYXRhLmVudmAgYW5kXG4gKiBgc3ludGgubWV0YWRhdGEuZW52YCBhbGwgd3JpdGUgYG1ldGFkYXRhLmVudmAg4oCUIHRoYXQgaXMgaG93IHN5bnRoIGxheWVyc1xuICogdGhlbSDigJQgc28gYSBjeWNsZSB0aHJvdWdoIGFueSBsYXllciBpcyBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gc2VsZlNjb3BlS2V5KGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKGZpZWxkID09PSAncHJvamVjdCcpIHJldHVybiAncHJvamVjdCc7XG4gIGZvciAoY29uc3QgcHJlZml4IG9mIE1FVEFEQVRBX1BSRUZJWEVTKSB7XG4gICAgaWYgKGZpZWxkLnN0YXJ0c1dpdGgocHJlZml4KSkgcmV0dXJuIGBtZXRhZGF0YS4ke2ZpcnN0U2VnbWVudChmaWVsZC5zbGljZShwcmVmaXgubGVuZ3RoKSl9YDtcbiAgfVxuICBpZiAoZmllbGQuc3RhcnRzV2l0aCgndmFycy4nKSkgcmV0dXJuIGB2YXJzLiR7Zmlyc3RTZWdtZW50KGZpZWxkLnNsaWNlKCd2YXJzLicubGVuZ3RoKSl9YDtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzUmVjb3JkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGRyYWZ0ZWQgcGlwZWxpbmUgdGVtcGxhdGUuIE5ldmVyIHRocm93czogYSBtYWxmb3JtZWQgZHJhZnQgY29tZXNcbiAqIGJhY2sgYXMgcHJvYmxlbXMsIGJlY2F1c2UgdGhlIGNhbGxlcidzIGpvYiBpcyB0byByZXBvcnQgdGhlbSwgbm90IHRvIGNyYXNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUZW1wbGF0ZURyYWZ0KGRyYWZ0OiBUZW1wbGF0ZURyYWZ0TGlrZSk6IFRlbXBsYXRlRHJhZnRWYWxpZGF0aW9uIHtcbiAgY29uc3QgcHJvYmxlbXM6IFRlbXBsYXRlRHJhZnRQcm9ibGVtW10gPSBbXTtcbiAgY29uc3QgcmVmZXJlbmNlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGlmICghaXNSZWNvcmQoZHJhZnQucHJvcHMpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgIHByb2JsZW1zOiBbeyBraW5kOiAnaW52YWxpZC1wcm9wcycsIHNldmVyaXR5OiAnZXJyb3InLCBtZXNzYWdlOiAnVGVtcGxhdGUgYm9keSAocHJvcHMpIG11c3QgYmUgYW4gb2JqZWN0JyB9XSxcbiAgICAgIHJlZmVyZW5jZWRWYXJpYWJsZXM6IFtdLFxuICAgICAgZGVjbGFyZWRJbnB1dHM6IFtdLFxuICAgIH07XG4gIH1cbiAgY29uc3QgcHJvcHMgPSBkcmFmdC5wcm9wcztcblxuICAvLyAtLSBQYXNzIDE6IGV2ZXJ5IHN0cmluZyBpbiB0aGUgYm9keSwgc28gYSBtYWxmb3JtZWQgYHt7YCBpcyBjYXVnaHQgd2hlcmV2ZXJcbiAgLy8gICAgaXQgaXMg4oCUIG5vdCBvbmx5IGluIHRoZSBmaWVsZHMgdGhlIHBpcGVsaW5lIGNyZWF0ZSBwYXRoIGhhcHBlbnMgdG8gY2hlY2suXG4gIGxldCBwYXJzZUZhaWxlZCA9IGZhbHNlO1xuICB2aXNpdFN0cmluZ3MocHJvcHMsICgpID0+IHRydWUsIChmaWVsZCwgc291cmNlKSA9PiB7XG4gICAgbGV0IHRva2VucztcbiAgICB0cnkge1xuICAgICAgdG9rZW5zID0gdG9rZW5pemUoc291cmNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHBhcnNlRmFpbGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHBvcyA9IGVyciBpbnN0YW5jZW9mIFRva2VuaXplckVycm9yID8gZXJyLnBvcyA6IHVuZGVmaW5lZDtcbiAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICBraW5kOiAncGFyc2UnLFxuICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgbWVzc2FnZTogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgICBmaWVsZCxcbiAgICAgICAgLi4uKHBvcyAmJiB7IGxpbmU6IHBvcy5saW5lLCBjb2w6IHBvcy5jb2wgfSksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZlJlZmVyZW5jaW5nID0gc2VsZlNjb3BlS2V5KGZpZWxkKSAhPT0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgaWYgKHRva2VuLmtpbmQgIT09ICdleHByJykgY29udGludWU7XG4gICAgICBjb25zdCByb290ID0gdG9rZW4ucGF0aFswXSE7XG4gICAgICBjb25zdCBwYXRoID0gdG9rZW4ucGF0aC5qb2luKCcuJyk7XG4gICAgICBpZiAocm9vdCA9PT0gJ3NlY3JldHMnKSB7XG4gICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgIGtpbmQ6ICdyZXNlcnZlZC1zY29wZScsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogJ1xcJ3NlY3JldHNcXCcgaXMgYSByZXNlcnZlZCBzY29wZSDigJQgYSB0ZW1wbGF0ZSBib2R5IG11c3Qgbm90IHJlZmVyZW5jZSBpdCcsXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBsaW5lOiB0b2tlbi5wb3MubGluZSxcbiAgICAgICAgICBjb2w6IHRva2VuLnBvcy5jb2wsXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyb290ID09PSAndmFycycgJiYgdG9rZW4ucGF0aC5sZW5ndGggPiAxKSByZWZlcmVuY2VkLmFkZCh0b2tlbi5wYXRoWzFdISk7XG4gICAgICBpZiAoc2VsZlJlZmVyZW5jaW5nICYmICFTRUxGX1NDT1BFX1JPT1RTLmluY2x1ZGVzKHJvb3QpKSB7XG4gICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgIGtpbmQ6ICd1bmtub3duLXNjb3BlJyxcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICBtZXNzYWdlOiBgVGVtcGxhdGUgcmVmZXJlbmNlcyB1bmtub3duIHNjb3BlIHJvb3QgJyR7cm9vdH0nIChhIHBpcGVsaW5lIGZpZWxkIG1heSByZWZlcmVuY2UgJHtTRUxGX1NDT1BFX1JPT1RTLmpvaW4oJyBvciAnKX0gb25seSlgLFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgbGluZTogdG9rZW4ucG9zLmxpbmUsXG4gICAgICAgICAgY29sOiB0b2tlbi5wb3MuY29sLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIC0tIFBhc3MgMjogY3ljbGVzIGFtb25nIHRoZSBzZWxmLXJlZmVyZW5jaW5nIGZpZWxkcy4gU2tpcHBlZCB3aGVuIGFueXRoaW5nXG4gIC8vICAgIGZhaWxlZCB0byBwYXJzZSDigJQgdGhlIGN5Y2xlIHdhbGtlciB0b2tlbml6ZXMgZWFnZXJseSBhbmQgd291bGQgdGhyb3cgb25cbiAgLy8gICAgdGhlIHNhbWUgYmFkIGZpZWxkIHRoYXQgcGFzcyAxIGFscmVhZHkgcmVwb3J0ZWQuXG4gIGlmICghcGFyc2VGYWlsZWQpIHtcbiAgICBmb3IgKGNvbnN0IGVyciBvZiBkZXRlY3RDeWNsZXMocHJvcHMsIChmaWVsZCkgPT4gc2VsZlNjb3BlS2V5KGZpZWxkKSAhPT0gbnVsbCwgc2VsZlNjb3BlS2V5KSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgIGtpbmQ6ICdjeWNsZScsXG4gICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgZmllbGQ6IGVyci5maWVsZCxcbiAgICAgICAgLi4uKGVyci5jeWNsZSAmJiB7IGN5Y2xlOiBlcnIuY3ljbGUgfSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyAtLSBQYXNzIDM6IHRoZSBkZWNsYXJlZCBpbnB1dHMuIEFuIGlucHV0IHRoZSBncmFtbWFyIGNhbm5vdCBleHByZXNzLCBvciBvbmVcbiAgLy8gICAgZGVjbGFyZWQgdHdpY2UsIGNhbiBuZXZlciBiZSBmaWxsZWQgaW4g4oCUIGJvdGggYXJlIGVycm9ycywgbm90IHdhcm5pbmdzLlxuICBjb25zdCBkZWNsYXJlZDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGlucHV0IG9mIGRyYWZ0LmlucHV0cyA/PyBbXSkge1xuICAgIGNvbnN0IG5hbWUgPSBpbnB1dD8ubmFtZTtcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8ICFJREVOVElGSUVSLnRlc3QobmFtZSkpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICBraW5kOiAnaW52YWxpZC1pbnB1dC1uYW1lJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6IGBEZWNsYXJlZCBpbnB1dCAke0pTT04uc3RyaW5naWZ5KG5hbWUpfSBpcyBub3QgYSB1c2FibGUgdmFyaWFibGUgbmFtZSAoJHtJREVOVElGSUVSLnNvdXJjZX0pYCxcbiAgICAgICAgLi4uKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiB7IHZhcmlhYmxlOiBuYW1lIH0pLFxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHNlZW4uaGFzKG5hbWUpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHsga2luZDogJ2R1cGxpY2F0ZS1pbnB1dCcsIHNldmVyaXR5OiAnZXJyb3InLCBtZXNzYWdlOiBgRGVjbGFyZWQgaW5wdXQgJyR7bmFtZX0nIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2VgLCB2YXJpYWJsZTogbmFtZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBzZWVuLmFkZChuYW1lKTtcbiAgICBkZWNsYXJlZC5wdXNoKG5hbWUpO1xuICB9XG5cbiAgLy8gLS0gUGFzcyA0OiB0aGUgY29udHJhY3QgYmV0d2VlbiBib2R5IGFuZCBpbnB1dHMuIEEgdmFyIHRoZSBib2R5IHJlZmVyZW5jZXNcbiAgLy8gICAgaXMgc3VwcGxpZWQgZWl0aGVyIGJ5IGEgZGVjbGFyZWQgaW5wdXQgb3IgYnkgYSBkZWZhdWx0IGFscmVhZHkgc2l0dGluZyBpblxuICAvLyAgICBgcHJvcHMudmFyc2A7IGFueXRoaW5nIGVsc2UgaGFzIG5vIHdheSBvZiBldmVyIGdldHRpbmcgYSB2YWx1ZS5cbiAgY29uc3QgZGVmYXVsdGVkID0gaXNSZWNvcmQocHJvcHMudmFycykgPyBPYmplY3Qua2V5cyhwcm9wcy52YXJzKSA6IFtdO1xuICBjb25zdCBzdXBwbGllZCA9IG5ldyBTZXQoWy4uLmRlY2xhcmVkLCAuLi5kZWZhdWx0ZWRdKTtcbiAgZm9yIChjb25zdCB2YXJpYWJsZSBvZiBbLi4ucmVmZXJlbmNlZF0uc29ydCgpKSB7XG4gICAgaWYgKHN1cHBsaWVkLmhhcyh2YXJpYWJsZSkpIGNvbnRpbnVlO1xuICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAga2luZDogJ3VuZGVjbGFyZWQtdmFyaWFibGUnLFxuICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiBgVGVtcGxhdGUgcmVmZXJlbmNlcyB7eyB2YXJzLiR7dmFyaWFibGV9IH19IGJ1dCBkZWNsYXJlcyBubyBpbnB1dCBuYW1lZCAnJHt2YXJpYWJsZX0nYCxcbiAgICAgIHZhcmlhYmxlLFxuICAgIH0pO1xuICB9XG4gIGZvciAoY29uc3QgbmFtZSBvZiBkZWNsYXJlZCkge1xuICAgIGlmIChyZWZlcmVuY2VkLmhhcyhuYW1lKSkgY29udGludWU7XG4gICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICBraW5kOiAndW51c2VkLWlucHV0JyxcbiAgICAgIHNldmVyaXR5OiAnd2FybmluZycsXG4gICAgICBtZXNzYWdlOiBgRGVjbGFyZWQgaW5wdXQgJyR7bmFtZX0nIGlzIG5ldmVyIHJlZmVyZW5jZWQgYXMge3sgdmFycy4ke25hbWV9IH19YCxcbiAgICAgIHZhcmlhYmxlOiBuYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2YWxpZDogIXByb2JsZW1zLnNvbWUoKHApID0+IHAuc2V2ZXJpdHkgPT09ICdlcnJvcicpLFxuICAgIHByb2JsZW1zLFxuICAgIHJlZmVyZW5jZWRWYXJpYWJsZXM6IFsuLi5yZWZlcmVuY2VkXS5zb3J0KCksXG4gICAgZGVjbGFyZWRJbnB1dHM6IGRlY2xhcmVkLFxuICB9O1xufVxuXG4vKiogT25lIHJlYWRhYmxlIGxpbmUgcGVyIHByb2JsZW0sIGZvciBhIHRvb2wgcmVzdWx0IG9yIGFuIGVycm9yIGJvZHkuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGVtcGxhdGVEcmFmdFByb2JsZW1zKHByb2JsZW1zOiByZWFkb25seSBUZW1wbGF0ZURyYWZ0UHJvYmxlbVtdKTogc3RyaW5nW10ge1xuICByZXR1cm4gcHJvYmxlbXMubWFwKChwKSA9PiB7XG4gICAgY29uc3Qgd2hlcmUgPSBwLmZpZWxkID8gYCR7cC5maWVsZH0ke3AubGluZSAhPT0gdW5kZWZpbmVkID8gYDoke3AubGluZX06JHtwLmNvbH1gIDogJyd9YCA6IHAua2luZDtcbiAgICByZXR1cm4gYFske3doZXJlfV0gJHtwLm1lc3NhZ2V9YDtcbiAgfSk7XG59XG4iXX0=
|
package/lib/template/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { tokenize, hasTemplate, MAX_FIELD_SIZE_BYTES, MAX_PATH_DEPTH, type Token, type LiteralToken, type ExprToken, type SourcePosition, } from './tokenizer.js';
|
|
2
|
-
export { resolve, dependencies, type Scope,
|
|
3
|
-
export { type
|
|
4
|
-
export { type TopoNode, type TopoResult, } from './topo-sort.js';
|
|
2
|
+
export { resolve, dependencies, type Scope, } from './evaluator.js';
|
|
3
|
+
export { type FieldPredicate, } from './walker.js';
|
|
5
4
|
export { validateTemplates, detectCycles, allowedScopeRoots, type TemplateError, type TemplateValidationResult, } from './validate.js';
|
|
5
|
+
export { validateTemplateDraft, formatTemplateDraftProblems, type TemplateDraftInput, type TemplateDraftLike, type TemplateDraftProblem, type TemplateDraftProblemKind, type TemplateDraftValidation, } from './draft.js';
|
|
6
6
|
import { ErrorCode } from '@pipeline-builder/api-core';
|
|
7
7
|
import { type Scope } from './evaluator.js';
|
|
8
8
|
import { type FieldPredicate } from './walker.js';
|
package/lib/template/index.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
export { tokenize, hasTemplate, MAX_FIELD_SIZE_BYTES, MAX_PATH_DEPTH, } from './tokenizer.js';
|
|
4
4
|
export { resolve, dependencies, } from './evaluator.js';
|
|
5
5
|
export {} from './walker.js';
|
|
6
|
-
export {} from './topo-sort.js';
|
|
7
6
|
export { validateTemplates, detectCycles, allowedScopeRoots, } from './validate.js';
|
|
7
|
+
export { validateTemplateDraft, formatTemplateDraftProblems, } from './draft.js';
|
|
8
8
|
// -- Convenience: high-level resolve() that walks + resolves + measures
|
|
9
9
|
import { ErrorCode } from '@pipeline-builder/api-core';
|
|
10
10
|
import { resolve as evaluatorResolve } from './evaluator.js';
|
|
@@ -102,4 +102,4 @@ export function resolveSelfReferencing(doc, scope, isTemplatable, fieldToScopePa
|
|
|
102
102
|
}
|
|
103
103
|
return { errors };
|
|
104
104
|
}
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsY0FBYyxHQUtmLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLE9BQU8sRUFDUCxZQUFZLEdBR2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBR04sTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUdOLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osaUJBQWlCLEdBR2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLHdFQUF3RTtBQUV4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sSUFBSSxnQkFBZ0IsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQU0vRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixHQUFNLEVBQ04sS0FBWSxFQUNaLGFBQTZCO0lBRTdCLE1BQU0sTUFBTSxHQUE0QixFQUFFLENBQUM7SUFDM0MsNEVBQTRFO0lBQzVFLDZFQUE2RTtJQUM3RSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RCxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxF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Q0FBQyxDQUFDLENBQUM7UUFDYixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDMUIsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQztnQkFDSCxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLEdBQUcsR0FBa0QsQ0FBQztnQkFDN0QsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDVixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsb0JBQW9CO29CQUM5QyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87b0JBQ2xCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs7b0JBQ3BCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtpQkFDYixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQge1xuICB0b2tlbml6ZSxcbiAgaGFzVGVtcGxhdGUsXG4gIE1BWF9GSUVMRF9TSVpFX0JZVEVTLFxuICBNQVhfUEFUSF9ERVBUSCxcbiAgdHlwZSBUb2tlbixcbiAgdHlwZSBMaXRlcmFsVG9rZW4sXG4gIHR5cGUgRXhwclRva2VuLFxuICB0eXBlIFNvdXJjZVBvc2l0aW9uLFxufSBmcm9tICcuL3Rva2VuaXplci5qcyc7XG5cbmV4cG9ydCB7XG4gIHJlc29sdmUsXG4gIGRlcGVuZGVuY2llcyxcbiAgdHlwZSBTY29wZSxcbiAgdHlwZSBFdmFsRXJyb3IsXG59IGZyb20gJy4vZXZhbHVhdG9yLmpzJztcblxuZXhwb3J0IHtcbiAgdHlwZSBXYWxrRW50cnksXG4gIHR5cGUgRmllbGRQcmVkaWNhdGUsXG59IGZyb20gJy4vd2Fsa2VyLmpzJztcblxuZXhwb3J0IHtcbiAgdHlwZSBUb3BvTm9kZSxcbiAgdHlwZSBUb3BvUmVzdWx0LFxufSBmcm9tICcuL3RvcG8tc29ydC5qcyc7XG5cbmV4cG9ydCB7XG4gIHZhbGlkYXRlVGVtcGxhdGVzLFxuICBkZXRlY3RDeWNsZXMsXG4gIGFsbG93ZWRTY29wZVJvb3RzLFxuICB0eXBlIFRlbXBsYXRlRXJyb3IsXG4gIHR5cGUgVGVtcGxhdGVWYWxpZGF0aW9uUmVzdWx0LFxufSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcblxuLy8gLS0gQ29udmVuaWVuY2U6IGhpZ2gtbGV2ZWwgcmVzb2x2ZSgpIHRoYXQgd2Fsa3MgKyByZXNvbHZlcyArIG1lYXN1cmVzXG5cbmltcG9ydCB7IEVycm9yQ29kZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHJlc29sdmUgYXMgZXZhbHVhdG9yUmVzb2x2ZSwgdHlwZSBTY29wZSB9IGZyb20gJy4vZXZhbHVhdG9yLmpzJztcbmltcG9ydCB7IHRvcG9Tb3J0IH0gZnJvbSAnLi90b3BvLXNvcnQuanMnO1xuaW1wb3J0IHsgd2Fsa0FuZEJpbmQsIHR5cGUgRmllbGRQcmVkaWNhdGUgfSBmcm9tICcuL3dhbGtlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZVJlc3VsdCB7XG4gIGVycm9yczogQXJyYXk8eyBjb2RlOiBFcnJvckNvZGU7IG1lc3NhZ2U6IHN0cmluZzsgZmllbGQ/OiBzdHJpbmc7IHBhdGg/OiBzdHJpbmcgfT47XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhbGwgdGVtcGxhdGVzIGluc2lkZSBgZG9jYCBieSBtdXRhdGluZyBzdHJpbmcgZmllbGRzIGluIHBsYWNlLlxuICogYGRvY2AgaXMgdHJlYXRlZCBhcyBvcGFxdWUg4oCUIG9ubHkgc3RyaW5nIGZpZWxkcyB0aGF0IG1hdGNoIGBpc1RlbXBsYXRhYmxlYFxuICogYXJlIHJld3JpdHRlbi4gUmV0dXJucyBjb2xsZWN0ZWQgZXJyb3JzIChlbXB0eSBhcnJheSBvbiBzdWNjZXNzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVUZW1wbGF0ZXM8VCBleHRlbmRzIG9iamVjdD4oXG4gIGRvYzogVCxcbiAgc2NvcGU6IFNjb3BlLFxuICBpc1RlbXBsYXRhYmxlOiBGaWVsZFByZWRpY2F0ZSxcbik6IFJlc29sdmVSZXN1bHQge1xuICBjb25zdCBlcnJvcnM6IFJlc29sdmVSZXN1bHRbJ2Vycm9ycyddID0gW107XG4gIC8vIGluY2x1ZGVMaXRlcmFsT25seTogbGl0ZXJhbC1vbmx5IGZpZWxkcyAoYSBiYXJlIGB7e3t7YCBlc2NhcGUpIHN0aWxsIG5lZWRcbiAgLy8gcmV3cml0aW5nIHNvIHRoZSB0b2tlbml6ZXIncyBge3t7e2Ag4oaSIGB7e2AgdW5lc2NhcGUgbGFuZHMgaW4gdGhlIGRvY3VtZW50LlxuICBjb25zdCBlbnRyaWVzID0gd2Fsa0FuZEJpbmQoZG9jLCBpc1RlbXBsYXRhYmxlLCB0cnVlKTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZXZhbHVhdG9yUmVzb2x2ZShlbnRyeS50b2tlbnMsIHNjb3BlLCBlbnRyeS5maWVsZCk7XG4gICAgICBlbnRyeS5zZXQodmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgZSA9IGVyciBhcyBFcnJvciAmIHsgY29kZT86IEVycm9yQ29kZTsgcGF0aD86IHN0cmluZyB9O1xuICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICBjb2RlOiBlLmNvZGUgPz8gRXJyb3JDb2RlLlRFTVBMQVRFX1BBUlNFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBlLm1lc3NhZ2UsXG4gICAgICAgIGZpZWxkOiBlbnRyeS5maWVsZCxcbiAgICAgICAgcGF0aDogZS5wYXRoLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGVycm9ycyB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBzZWxmLXJlZmVyZW5jaW5nIGRvY3VtZW50IChlLmcuIHBpcGVsaW5lLmpzb24gd2hlcmVcbiAqIG1ldGFkYXRhIGZpZWxkcyByZWZlcmVuY2UgZWFjaCBvdGhlcikuIFRvcG9sb2dpY2FsbHkgb3JkZXJzIHRoZVxuICogcmVzb2x1dGlvbiBzbyBkZXBlbmRlbmNpZXMgY29tZSBmaXJzdC4gTXV0YXRlcyBgZG9jYCBpbiBwbGFjZS5cbiAqXG4gKiBgZmllbGRUb1Njb3BlUGF0aGAgbWFwcyBlYWNoIGZpZWxkIChlLmcuIGBtZXRhZGF0YS5lbnZgKSB0byB0aGUgc2NvcGVcbiAqIHBhdGggaXQgcG9wdWxhdGVzICh0eXBpY2FsbHkgdGhlIHNhbWUsIHNhbnMgYW55IGFycmF5IGluZGljZXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNlbGZSZWZlcmVuY2luZzxUIGV4dGVuZHMgb2JqZWN0PihcbiAgZG9jOiBULFxuICBzY29wZTogU2NvcGUsXG4gIGlzVGVtcGxhdGFibGU6IEZpZWxkUHJlZGljYXRlLFxuICBmaWVsZFRvU2NvcGVQYXRoOiAoZmllbGQ6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbCxcbik6IFJlc29sdmVSZXN1bHQge1xuICAvLyBpbmNsdWRlTGl0ZXJhbE9ubHk6IGEgc2VsZi1yZWZlcmVuY2luZyBmaWVsZCB0aGF0IGlzIG9ubHkgYSBge3t7e2AgZXNjYXBlXG4gIC8vIHN0aWxsIG5lZWRzIGl0cyB1bmVzY2FwZSB3cml0dGVuIGJhY2sgKHNhbWUgcmF0aW9uYWxlIGFzIHJlc29sdmVUZW1wbGF0ZXMpLlxuICBjb25zdCBlbnRyaWVzID0gd2Fsa0FuZEJpbmQoZG9jLCBpc1RlbXBsYXRhYmxlLCB0cnVlKTtcbiAgLy8gQnVpbGQgdG9wbyBub2RlcyBrZXllZCBieSB0YXJnZXQgc2NvcGUgcGF0aFxuICBjb25zdCBub2RlcyA9IGVudHJpZXNcbiAgICAubWFwKGUgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gZmllbGRUb1Njb3BlUGF0aChlLmZpZWxkKTtcbiAgICAgIGlmICgha2V5KSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IGRlcHM6IHN0cmluZ1tdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHQgb2YgZS50b2tlbnMpIGlmICh0LmtpbmQgPT09ICdleHByJykgZGVwcy5wdXNoKHQucGF0aC5qb2luKCcuJykpO1xuICAgICAgcmV0dXJuIHsga2V5LCBkZXBzLCBlbnRyeTogZSB9O1xuICAgIH0pXG4gICAgLmZpbHRlcigobik6IG4gaXMgTm9uTnVsbGFibGU8dHlwZW9mIG4+ID0+IG4gIT09IG51bGwpO1xuXG4gIGNvbnN0IHsgb3JkZXJlZCwgY3ljbGVzIH0gPSB0b3BvU29ydChub2Rlcy5tYXAobiA9PiAoeyBrZXk6IG4ua2V5LCBkZXBzOiBuLmRlcHMgfSkpKTtcbiAgY29uc3QgZXJyb3JzOiBSZXNvbHZlUmVzdWx0WydlcnJvcnMnXSA9IFtdO1xuICBpZiAoY3ljbGVzLmxlbmd0aCkge1xuICAgIGZvciAoY29uc3QgYyBvZiBjeWNsZXMpIHtcbiAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgY29kZTogRXJyb3JDb2RlLlRFTVBMQVRFX0NZQ0xFLFxuICAgICAgICBtZXNzYWdlOiBgVGVtcGxhdGUgY3ljbGUgZGV0ZWN0ZWQ6ICR7Yy5qb2luKCcgLT4gJyl9YCxcbiAgICAgICAgcGF0aDogYy5qb2luKCcgLT4gJyksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZXJyb3JzIH07XG4gIH1cblxuICAvLyBSZXNvbHZlIGluIHRvcG8gb3JkZXI7IG11bHRpcGxlIGVudHJpZXMgbWF5IHNoYXJlIGEgc2NvcGUga2V5IChlLmcuIG9uZVxuICAvLyBwaXBlbGluZSBmaWVsZCBjb3VsZCBtYXAgdG8gdGhlIHNhbWUgc2NvcGUgcGF0aCDigJQgdW5saWtlbHkgaGVyZSksIHNvXG4gIC8vIGl0ZXJhdGUgYWxsIGVudHJpZXMgd2hvc2Uga2V5ID09IG9yZGVyZWRbaV0uXG4gIGNvbnN0IGJ5S2V5ID0gbmV3IE1hcDxzdHJpbmcsIHR5cGVvZiBub2Rlcz4oKTtcbiAgZm9yIChjb25zdCBuIG9mIG5vZGVzKSB7XG4gICAgY29uc3QgbGlzdCA9IGJ5S2V5LmdldChuLmtleSkgPz8gW107XG4gICAgbGlzdC5wdXNoKG4pO1xuICAgIGJ5S2V5LnNldChuLmtleSwgbGlzdCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBvcmRlcmVkKSB7XG4gICAgZm9yIChjb25zdCBuIG9mIGJ5S2V5LmdldChrZXkpID8/IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2YWx1YXRvclJlc29sdmUobi5lbnRyeS50b2tlbnMsIHNjb3BlLCBuLmVudHJ5LmZpZWxkKTtcbiAgICAgICAgbi5lbnRyeS5zZXQodmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IGUgPSBlcnIgYXMgRXJyb3IgJiB7IGNvZGU/OiBFcnJvckNvZGU7IHBhdGg/OiBzdHJpbmcgfTtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgIGNvZGU6IGUuY29kZSA/PyBFcnJvckNvZGUuVEVNUExBVEVfUEFSU0VfRVJST1IsXG4gICAgICAgICAgbWVzc2FnZTogZS5tZXNzYWdlLFxuICAgICAgICAgIGZpZWxkOiBuLmVudHJ5LmZpZWxkLFxuICAgICAgICAgIHBhdGg6IGUucGF0aCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGVycm9ycyB9O1xufVxuXG4iXX0=
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsY0FBYyxHQUtmLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLE9BQU8sRUFDUCxZQUFZLEdBRWIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBRU4sTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osaUJBQWlCLEdBR2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsMkJBQTJCLEdBTTVCLE1BQU0sWUFBWSxDQUFDO0FBRXBCLHdFQUF3RTtBQUV4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sSUFBSSxnQkFBZ0IsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQU0vRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixHQUFNLEVBQ04sS0FBWSxFQUNaLGFBQTZCO0lBRTdCLE1BQU0sTUFBTSxHQUE0QixFQUFFLENBQUM7SUFDM0MsNEVBQTRFO0lBQzVFLDZFQUE2RTtJQUM3RSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RCxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtB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Q3BDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDMUIsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQztnQkFDSCxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLEdBQUcsR0FBa0QsQ0FBQztnQkFDN0QsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDVixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsb0JBQW9CO29CQUM5QyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87b0JBQ2xCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs7b0JBQ3BCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtpQkFDYixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQge1xuICB0b2tlbml6ZSxcbiAgaGFzVGVtcGxhdGUsXG4gIE1BWF9GSUVMRF9TSVpFX0JZVEVTLFxuICBNQVhfUEFUSF9ERVBUSCxcbiAgdHlwZSBUb2tlbixcbiAgdHlwZSBMaXRlcmFsVG9rZW4sXG4gIHR5cGUgRXhwclRva2VuLFxuICB0eXBlIFNvdXJjZVBvc2l0aW9uLFxufSBmcm9tICcuL3Rva2VuaXplci5qcyc7XG5cbmV4cG9ydCB7XG4gIHJlc29sdmUsXG4gIGRlcGVuZGVuY2llcyxcbiAgdHlwZSBTY29wZSxcbn0gZnJvbSAnLi9ldmFsdWF0b3IuanMnO1xuXG5leHBvcnQge1xuICB0eXBlIEZpZWxkUHJlZGljYXRlLFxufSBmcm9tICcuL3dhbGtlci5qcyc7XG5cbmV4cG9ydCB7XG4gIHZhbGlkYXRlVGVtcGxhdGVzLFxuICBkZXRlY3RDeWNsZXMsXG4gIGFsbG93ZWRTY29wZVJvb3RzLFxuICB0eXBlIFRlbXBsYXRlRXJyb3IsXG4gIHR5cGUgVGVtcGxhdGVWYWxpZGF0aW9uUmVzdWx0LFxufSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcblxuZXhwb3J0IHtcbiAgdmFsaWRhdGVUZW1wbGF0ZURyYWZ0LFxuICBmb3JtYXRUZW1wbGF0ZURyYWZ0UHJvYmxlbXMsXG4gIHR5cGUgVGVtcGxhdGVEcmFmdElucHV0LFxuICB0eXBlIFRlbXBsYXRlRHJhZnRMaWtlLFxuICB0eXBlIFRlbXBsYXRlRHJhZnRQcm9ibGVtLFxuICB0eXBlIFRlbXBsYXRlRHJhZnRQcm9ibGVtS2luZCxcbiAgdHlwZSBUZW1wbGF0ZURyYWZ0VmFsaWRhdGlvbixcbn0gZnJvbSAnLi9kcmFmdC5qcyc7XG5cbi8vIC0tIENvbnZlbmllbmNlOiBoaWdoLWxldmVsIHJlc29sdmUoKSB0aGF0IHdhbGtzICsgcmVzb2x2ZXMgKyBtZWFzdXJlc1xuXG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyByZXNvbHZlIGFzIGV2YWx1YXRvclJlc29sdmUsIHR5cGUgU2NvcGUgfSBmcm9tICcuL2V2YWx1YXRvci5qcyc7XG5pbXBvcnQgeyB0b3BvU29ydCB9IGZyb20gJy4vdG9wby1zb3J0LmpzJztcbmltcG9ydCB7IHdhbGtBbmRCaW5kLCB0eXBlIEZpZWxkUHJlZGljYXRlIH0gZnJvbSAnLi93YWxrZXIuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVSZXN1bHQge1xuICBlcnJvcnM6IEFycmF5PHsgY29kZTogRXJyb3JDb2RlOyBtZXNzYWdlOiBzdHJpbmc7IGZpZWxkPzogc3RyaW5nOyBwYXRoPzogc3RyaW5nIH0+O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYWxsIHRlbXBsYXRlcyBpbnNpZGUgYGRvY2AgYnkgbXV0YXRpbmcgc3RyaW5nIGZpZWxkcyBpbiBwbGFjZS5cbiAqIGBkb2NgIGlzIHRyZWF0ZWQgYXMgb3BhcXVlIOKAlCBvbmx5IHN0cmluZyBmaWVsZHMgdGhhdCBtYXRjaCBgaXNUZW1wbGF0YWJsZWBcbiAqIGFyZSByZXdyaXR0ZW4uIFJldHVybnMgY29sbGVjdGVkIGVycm9ycyAoZW1wdHkgYXJyYXkgb24gc3VjY2VzcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVGVtcGxhdGVzPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICBkb2M6IFQsXG4gIHNjb3BlOiBTY29wZSxcbiAgaXNUZW1wbGF0YWJsZTogRmllbGRQcmVkaWNhdGUsXG4pOiBSZXNvbHZlUmVzdWx0IHtcbiAgY29uc3QgZXJyb3JzOiBSZXNvbHZlUmVzdWx0WydlcnJvcnMnXSA9IFtdO1xuICAvLyBpbmNsdWRlTGl0ZXJhbE9ubHk6IGxpdGVyYWwtb25seSBmaWVsZHMgKGEgYmFyZSBge3t7e2AgZXNjYXBlKSBzdGlsbCBuZWVkXG4gIC8vIHJld3JpdGluZyBzbyB0aGUgdG9rZW5pemVyJ3MgYHt7e3tgIOKGkiBge3tgIHVuZXNjYXBlIGxhbmRzIGluIHRoZSBkb2N1bWVudC5cbiAgY29uc3QgZW50cmllcyA9IHdhbGtBbmRCaW5kKGRvYywgaXNUZW1wbGF0YWJsZSwgdHJ1ZSk7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGV2YWx1YXRvclJlc29sdmUoZW50cnkudG9rZW5zLCBzY29wZSwgZW50cnkuZmllbGQpO1xuICAgICAgZW50cnkuc2V0KHZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IGUgPSBlcnIgYXMgRXJyb3IgJiB7IGNvZGU/OiBFcnJvckNvZGU7IHBhdGg/OiBzdHJpbmcgfTtcbiAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgY29kZTogZS5jb2RlID8/IEVycm9yQ29kZS5URU1QTEFURV9QQVJTRV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogZS5tZXNzYWdlLFxuICAgICAgICBmaWVsZDogZW50cnkuZmllbGQsXG4gICAgICAgIHBhdGg6IGUucGF0aCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBlcnJvcnMgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgc2VsZi1yZWZlcmVuY2luZyBkb2N1bWVudCAoZS5nLiBwaXBlbGluZS5qc29uIHdoZXJlXG4gKiBtZXRhZGF0YSBmaWVsZHMgcmVmZXJlbmNlIGVhY2ggb3RoZXIpLiBUb3BvbG9naWNhbGx5IG9yZGVycyB0aGVcbiAqIHJlc29sdXRpb24gc28gZGVwZW5kZW5jaWVzIGNvbWUgZmlyc3QuIE11dGF0ZXMgYGRvY2AgaW4gcGxhY2UuXG4gKlxuICogYGZpZWxkVG9TY29wZVBhdGhgIG1hcHMgZWFjaCBmaWVsZCAoZS5nLiBgbWV0YWRhdGEuZW52YCkgdG8gdGhlIHNjb3BlXG4gKiBwYXRoIGl0IHBvcHVsYXRlcyAodHlwaWNhbGx5IHRoZSBzYW1lLCBzYW5zIGFueSBhcnJheSBpbmRpY2VzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTZWxmUmVmZXJlbmNpbmc8VCBleHRlbmRzIG9iamVjdD4oXG4gIGRvYzogVCxcbiAgc2NvcGU6IFNjb3BlLFxuICBpc1RlbXBsYXRhYmxlOiBGaWVsZFByZWRpY2F0ZSxcbiAgZmllbGRUb1Njb3BlUGF0aDogKGZpZWxkOiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGwsXG4pOiBSZXNvbHZlUmVzdWx0IHtcbiAgLy8gaW5jbHVkZUxpdGVyYWxPbmx5OiBhIHNlbGYtcmVmZXJlbmNpbmcgZmllbGQgdGhhdCBpcyBvbmx5IGEgYHt7e3tgIGVzY2FwZVxuICAvLyBzdGlsbCBuZWVkcyBpdHMgdW5lc2NhcGUgd3JpdHRlbiBiYWNrIChzYW1lIHJhdGlvbmFsZSBhcyByZXNvbHZlVGVtcGxhdGVzKS5cbiAgY29uc3QgZW50cmllcyA9IHdhbGtBbmRCaW5kKGRvYywgaXNUZW1wbGF0YWJsZSwgdHJ1ZSk7XG4gIC8vIEJ1aWxkIHRvcG8gbm9kZXMga2V5ZWQgYnkgdGFyZ2V0IHNjb3BlIHBhdGhcbiAgY29uc3Qgbm9kZXMgPSBlbnRyaWVzXG4gICAgLm1hcChlID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGZpZWxkVG9TY29wZVBhdGgoZS5maWVsZCk7XG4gICAgICBpZiAoIWtleSkgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBkZXBzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0IG9mIGUudG9rZW5zKSBpZiAodC5raW5kID09PSAnZXhwcicpIGRlcHMucHVzaCh0LnBhdGguam9pbignLicpKTtcbiAgICAgIHJldHVybiB7IGtleSwgZGVwcywgZW50cnk6IGUgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoKG4pOiBuIGlzIE5vbk51bGxhYmxlPHR5cGVvZiBuPiA9PiBuICE9PSBudWxsKTtcblxuICBjb25zdCB7IG9yZGVyZWQsIGN5Y2xlcyB9ID0gdG9wb1NvcnQobm9kZXMubWFwKG4gPT4gKHsga2V5OiBuLmtleSwgZGVwczogbi5kZXBzIH0pKSk7XG4gIGNvbnN0IGVycm9yczogUmVzb2x2ZVJlc3VsdFsnZXJyb3JzJ10gPSBbXTtcbiAgaWYgKGN5Y2xlcy5sZW5ndGgpIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgY3ljbGVzKSB7XG4gICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6IEVycm9yQ29kZS5URU1QTEFURV9DWUNMRSxcbiAgICAgICAgbWVzc2FnZTogYFRlbXBsYXRlIGN5Y2xlIGRldGVjdGVkOiAke2Muam9pbignIC0+ICcpfWAsXG4gICAgICAgIHBhdGg6IGMuam9pbignIC0+ICcpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7IGVycm9ycyB9O1xuICB9XG5cbiAgLy8gUmVzb2x2ZSBpbiB0b3BvIG9yZGVyOyBtdWx0aXBsZSBlbnRyaWVzIG1heSBzaGFyZSBhIHNjb3BlIGtleSAoZS5nLiBvbmVcbiAgLy8gcGlwZWxpbmUgZmllbGQgY291bGQgbWFwIHRvIHRoZSBzYW1lIHNjb3BlIHBhdGgg4oCUIHVubGlrZWx5IGhlcmUpLCBzb1xuICAvLyBpdGVyYXRlIGFsbCBlbnRyaWVzIHdob3NlIGtleSA9PSBvcmRlcmVkW2ldLlxuICBjb25zdCBieUtleSA9IG5ldyBNYXA8c3RyaW5nLCB0eXBlb2Ygbm9kZXM+KCk7XG4gIGZvciAoY29uc3QgbiBvZiBub2Rlcykge1xuICAgIGNvbnN0IGxpc3QgPSBieUtleS5nZXQobi5rZXkpID8/IFtdO1xuICAgIGxpc3QucHVzaChuKTtcbiAgICBieUtleS5zZXQobi5rZXksIGxpc3QpO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2Ygb3JkZXJlZCkge1xuICAgIGZvciAoY29uc3QgbiBvZiBieUtleS5nZXQoa2V5KSA/PyBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmFsdWF0b3JSZXNvbHZlKG4uZW50cnkudG9rZW5zLCBzY29wZSwgbi5lbnRyeS5maWVsZCk7XG4gICAgICAgIG4uZW50cnkuc2V0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBlID0gZXJyIGFzIEVycm9yICYgeyBjb2RlPzogRXJyb3JDb2RlOyBwYXRoPzogc3RyaW5nIH07XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICBjb2RlOiBlLmNvZGUgPz8gRXJyb3JDb2RlLlRFTVBMQVRFX1BBUlNFX0VSUk9SLFxuICAgICAgICAgIG1lc3NhZ2U6IGUubWVzc2FnZSxcbiAgICAgICAgICBmaWVsZDogbi5lbnRyeS5maWVsZCxcbiAgICAgICAgICBwYXRoOiBlLnBhdGgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4geyBlcnJvcnMgfTtcbn1cblxuIl19
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { Plugin } from '@pipeline-builder/pipeline-data';
|
|
2
|
-
export declare function isPluginTemplatableField(field: string): boolean;
|
|
3
2
|
/**
|
|
4
3
|
* Return a shallow clone of `plugin` with all `{{ ... }}` templates
|
|
5
4
|
* resolved against the given pipeline scope. Caller must pre-populate
|
|
@@ -1,26 +1,10 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
// Which plugin fields accept `{{ ... }}` is the plugin spec's TEMPLATE
|
|
4
|
+
// CONTRACT, owned by api-core so the upload check, the CLI and this resolver
|
|
5
|
+
// can't disagree about it. Do not re-declare the field list here.
|
|
6
|
+
import { isPluginTemplatableField } from '@pipeline-builder/api-core';
|
|
3
7
|
import { resolveSelfReferencing, resolveTemplates } from './index.js';
|
|
4
|
-
/**
|
|
5
|
-
* Fields inside a Plugin record that accept `{{ ... }}` templates.
|
|
6
|
-
*
|
|
7
|
-
* Pure-string leaves only. `name`, `version`, `pluginType`, `computeType`,
|
|
8
|
-
* `timeout`, `secrets`, `failureBehavior`, `requiredMetadata`, `requiredVars`
|
|
9
|
-
* stay literal. `metadata.*` is excluded because CDK-metadata values are
|
|
10
|
-
* structural, not user-interpolated.
|
|
11
|
-
*/
|
|
12
|
-
const TEMPLATABLE_FIELDS = [
|
|
13
|
-
'description',
|
|
14
|
-
'commands', // string[]
|
|
15
|
-
'installCommands', // string[]
|
|
16
|
-
'env', // Record<string, string>
|
|
17
|
-
'buildArgs', // Record<string, string>
|
|
18
|
-
];
|
|
19
|
-
export function isPluginTemplatableField(field) {
|
|
20
|
-
// `commands` / `installCommands` are arrays of strings → entries like 'commands[0]'
|
|
21
|
-
// `env` / `buildArgs` are objects → entries like 'env.STAGE'
|
|
22
|
-
return TEMPLATABLE_FIELDS.some(f => field === f || field.startsWith(`${f}[`) || field.startsWith(`${f}.`));
|
|
23
|
-
}
|
|
24
8
|
/**
|
|
25
9
|
* Return a shallow clone of `plugin` with all `{{ ... }}` templates
|
|
26
10
|
* resolved against the given pipeline scope. Caller must pre-populate
|
|
@@ -59,4 +43,4 @@ export function resolvePluginTemplates(plugin, pipelineScope) {
|
|
|
59
43
|
}
|
|
60
44
|
return clone;
|
|
61
45
|
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlL3BsdWdpbi1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLHVFQUF1RTtBQUN2RSw2RUFBNkU7QUFDN0Usa0VBQWtFO0FBQ2xFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0RTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxNQUFjLEVBQ2QsYUFBc0M7SUFFdEMsa0VBQWtFO0lBQ2xFLDJFQUEyRTtJQUMzRSxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFxQyxDQUFDO0lBRTFFLHNFQUFzRTtJQUN0RSw2RUFBNkU7SUFDN0UseUVBQXlFO0lBQ3pFLHdFQUF3RTtJQUN4RSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksRUFBRSxDQUEyQixDQUFDO0lBQ3hELE1BQU0sS0FBSyxHQUFHO1FBQ1osR0FBRyxhQUFhO1FBQ2hCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ3RELEdBQUc7S0FDSixDQUFDO0lBRUYsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSwrRUFBK0U7SUFDL0UsOERBQThEO0lBQzlELE1BQU0sT0FBTyxHQUFHLHNCQUFzQixDQUNwQyxFQUFFLEdBQUcsRUFBRSxFQUNQLEtBQUssRUFDTCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLEtBQUssSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUN0RCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUNqQixDQUFDO0lBRUYsNEVBQTRFO0lBQzVFLDZFQUE2RTtJQUM3RSw0RUFBNEU7SUFDNUUsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQzNCLEtBQUssRUFDTCxLQUFLLEVBQ0wsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDN0YsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QiwyRUFBMkU7UUFDM0UsMEVBQTBFO1FBQzFFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUUsQ0FBQztRQUNyQixNQUFNLEdBQUcsR0FBRyx5Q0FBeUMsTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzSCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLy8gV2hpY2ggcGx1Z2luIGZpZWxkcyBhY2NlcHQgYHt7IC4uLiB9fWAgaXMgdGhlIHBsdWdpbiBzcGVjJ3MgVEVNUExBVEVcbi8vIENPTlRSQUNULCBvd25lZCBieSBhcGktY29yZSBzbyB0aGUgdXBsb2FkIGNoZWNrLCB0aGUgQ0xJIGFuZCB0aGlzIHJlc29sdmVyXG4vLyBjYW4ndCBkaXNhZ3JlZSBhYm91dCBpdC4gRG8gbm90IHJlLWRlY2xhcmUgdGhlIGZpZWxkIGxpc3QgaGVyZS5cbmltcG9ydCB7IGlzUGx1Z2luVGVtcGxhdGFibGVGaWVsZCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgeyByZXNvbHZlU2VsZlJlZmVyZW5jaW5nLCByZXNvbHZlVGVtcGxhdGVzIH0gZnJvbSAnLi9pbmRleC5qcyc7XG5cbi8qKlxuICogUmV0dXJuIGEgc2hhbGxvdyBjbG9uZSBvZiBgcGx1Z2luYCB3aXRoIGFsbCBge3sgLi4uIH19YCB0ZW1wbGF0ZXNcbiAqIHJlc29sdmVkIGFnYWluc3QgdGhlIGdpdmVuIHBpcGVsaW5lIHNjb3BlLiBDYWxsZXIgbXVzdCBwcmUtcG9wdWxhdGVcbiAqIGBwaXBlbGluZVNjb3BlYCB3aXRoIGB7IHBpcGVsaW5lLCBwbHVnaW4sIGVudiB9YCBrZXlzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBsdWdpblRlbXBsYXRlcyhcbiAgcGx1Z2luOiBQbHVnaW4sXG4gIHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogUGx1Z2luIHtcbiAgLy8gRGVlcCBjbG9uZSBzbyBtdXRhdGlvbnMgZG9uJ3QgbGVhayBiYWNrIHRvIHRoZSBjYWxsZXIncyBQbHVnaW4uXG4gIC8vIFN0cnVjdHVyYWwgZmllbGRzIHdlIGNhcmUgYWJvdXQgYXJlIHBsYWluIEpTT047IHN0cnVjdHVyZWRDbG9uZSBpcyBzYWZlLlxuICBjb25zdCBjbG9uZSA9IHN0cnVjdHVyZWRDbG9uZShwbHVnaW4pIGFzIFBsdWdpbiAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8vIFRoZSBgZW52YCBzY29wZSByb290IElTIHRoZSBjbG9uZSdzIGVudiBtYXAsIG5vdCB0aGUgb3JpZ2luYWw6IHdpdGhcbiAgLy8gYHBsdWdpbi5lbnZgIOKAlCB0aGUgVU5SRVNPTFZFRCB2YWx1ZXMg4oCUIGBCOiAne3sgZW52LkEgfX0nYCB3b3VsZCBzdWJzdGl0dXRlXG4gIC8vIEEncyByYXcgdGVtcGxhdGUgdGV4dCwgYmFraW5nIHRoZSBsaXRlcmFsIGB7eyDigKYgfX1gIGludG8gdGhlIENvZGVCdWlsZFxuICAvLyBlbnZpcm9ubWVudCBhbmQgc2hlbGwgY29tbWFuZHMgd2l0aCBubyBlcnJvci4gQSBjeWNsZSAoQeKGlEIpIGxpa2V3aXNlLlxuICBjb25zdCBlbnYgPSAoY2xvbmUuZW52ID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBjb25zdCBzY29wZSA9IHtcbiAgICAuLi5waXBlbGluZVNjb3BlLFxuICAgIHBsdWdpbjogeyBuYW1lOiBwbHVnaW4ubmFtZSwgdmVyc2lvbjogcGx1Z2luLnZlcnNpb24gfSxcbiAgICBlbnYsXG4gIH07XG5cbiAgLy8gUGFzcyAxIOKAlCBgZW52YCBmaXJzdCwgYXMgYSBzZWxmLXJlZmVyZW5jaW5nIGRvY3VtZW50OiB0b3BvbG9naWNhbGx5IG9yZGVyZWRcbiAgLy8gc28gZWFjaCB2YWx1ZSByZXNvbHZlcyBhZnRlciB0aGUgb25lcyBpdCByZWFkcywgd2l0aCBjeWNsZXMgcmVwb3J0ZWQgcmF0aGVyXG4gIC8vIHRoYW4gc2lsZW50bHkgbGVmdCBhcyB0ZW1wbGF0ZSB0ZXh0LiBSZXNvbHZpbmcgd3JpdGVzIGJhY2sgaW50byBgZW52YCwgd2hpY2hcbiAgLy8gaXMgdGhlIHNjb3BlIHJvb3QsIHNvIGxhdGVyIHJlZmVyZW5jZXMgc2VlIHJlc29sdmVkIHZhbHVlcy5cbiAgY29uc3QgZW52UGFzcyA9IHJlc29sdmVTZWxmUmVmZXJlbmNpbmcoXG4gICAgeyBlbnYgfSxcbiAgICBzY29wZSxcbiAgICAoZmllbGQpID0+IGZpZWxkID09PSAnZW52JyB8fCBmaWVsZC5zdGFydHNXaXRoKCdlbnYuJyksXG4gICAgKGZpZWxkKSA9PiBmaWVsZCxcbiAgKTtcblxuICAvLyBQYXNzIDIg4oCUIGV2ZXJ5dGhpbmcgZWxzZSwgYWdhaW5zdCB0aGUgbm93LXJlc29sdmVkIGBlbnZgLiBgZW52YCBpdHNlbGYgaXNcbiAgLy8gZXhjbHVkZWQ6IGl0cyB2YWx1ZXMgYXJlIGZpbmFsLCBhbmQgb25lIHByb2R1Y2VkIGJ5IGFuIGVzY2FwZSAoYHt7e3t4fX1gIOKGklxuICAvLyBge3t4fX1gKSBtdXN0IG5vdCBiZSB0b2tlbml6ZWQgYSBzZWNvbmQgdGltZSBhcyBpZiBpdCB3ZXJlIGFuIGV4cHJlc3Npb24uXG4gIGNvbnN0IHJlc3QgPSByZXNvbHZlVGVtcGxhdGVzKFxuICAgIGNsb25lLFxuICAgIHNjb3BlLFxuICAgIChmaWVsZCkgPT4gaXNQbHVnaW5UZW1wbGF0YWJsZUZpZWxkKGZpZWxkKSAmJiAhKGZpZWxkID09PSAnZW52JyB8fCBmaWVsZC5zdGFydHNXaXRoKCdlbnYuJykpLFxuICApO1xuXG4gIGNvbnN0IGVycm9ycyA9IFsuLi5lbnZQYXNzLmVycm9ycywgLi4ucmVzdC5lcnJvcnNdO1xuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBGaXJzdCBlcnJvciB3aW5zIOKAlCByZXNvbHZlciBlcnJvcnMgc2hvdWxkIG5ldmVyIGJlIGJhdGNoZWQgYXQgc3ludGggdGltZVxuICAgIC8vIGJlY2F1c2UgYSBicm9rZW4gdGVtcGxhdGUgaXMgYSBwcm9ncmFtbWVyIGVycm9yLCBub3QgYSB2YWxpZGF0aW9uIHN0ZXAuXG4gICAgY29uc3QgZSA9IGVycm9yc1swXSE7XG4gICAgY29uc3QgbXNnID0gYFRlbXBsYXRlIHJlc29sdXRpb24gZmFpbGVkIGluIHBsdWdpbiBcIiR7cGx1Z2luLm5hbWV9XCIgYXQgZmllbGQgJyR7ZS5maWVsZCA/PyBlLnBhdGggPz8gJ2Vudid9JzogJHtlLm1lc3NhZ2V9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfVxuICByZXR1cm4gY2xvbmU7XG59XG4iXX0=
|
package/lib/testing/exports.json
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
"entries": {
|
|
4
4
|
".": {
|
|
5
5
|
"allowedScopeRoots": "function",
|
|
6
|
-
"CDK_METADATA_PREFIX": "value",
|
|
7
6
|
"checkPluginContract": "function",
|
|
8
7
|
"collectPluginSteps": "function",
|
|
9
8
|
"ComputeType": "value",
|
|
@@ -14,9 +13,9 @@
|
|
|
14
13
|
"dependencies": "function",
|
|
15
14
|
"detectCycles": "function",
|
|
16
15
|
"extractMetadataEnv": "function",
|
|
16
|
+
"formatTemplateDraftProblems": "function",
|
|
17
17
|
"hasTemplate": "function",
|
|
18
18
|
"isContractValueOfType": "function",
|
|
19
|
-
"isPluginTemplatableField": "function",
|
|
20
19
|
"MAX_FIELD_SIZE_BYTES": "value",
|
|
21
20
|
"MAX_PATH_DEPTH": "value",
|
|
22
21
|
"MetadataKeys": "value",
|
|
@@ -40,6 +39,7 @@
|
|
|
40
39
|
"tokenize": "function",
|
|
41
40
|
"TriggerType": "value",
|
|
42
41
|
"unwrapLookup": "function",
|
|
42
|
+
"validateTemplateDraft": "function",
|
|
43
43
|
"validateTemplates": "function",
|
|
44
44
|
"wrapCommandsForFailureBehavior": "function"
|
|
45
45
|
},
|
package/package.json
CHANGED
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"axios": "1.20.0",
|
|
35
35
|
"jsonwebtoken": "9.0.3",
|
|
36
|
-
"@pipeline-builder/api-core": "4.1.
|
|
37
|
-
"@pipeline-builder/pipeline-data": "4.1.
|
|
36
|
+
"@pipeline-builder/api-core": "4.1.21",
|
|
37
|
+
"@pipeline-builder/pipeline-data": "4.1.23"
|
|
38
38
|
},
|
|
39
39
|
"keywords": [
|
|
40
40
|
"ci-cd",
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
]
|
|
98
98
|
}
|
|
99
99
|
},
|
|
100
|
-
"version": "4.1.
|
|
100
|
+
"version": "4.1.23",
|
|
101
101
|
"bugs": {
|
|
102
102
|
"url": "https://github.com/mwashburn160/pipeline-builder/issues"
|
|
103
103
|
},
|