@pipeline-builder/pipeline-core 3.1.5 → 3.2.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/lib/core/pipeline-helpers.js +7 -2
- package/lib/index.d.ts +1 -0
- package/lib/index.js +3 -1
- package/lib/pipeline/pipeline-builder.js +17 -2
- package/lib/pipeline/stage-builder.d.ts +7 -0
- package/lib/pipeline/stage-builder.js +4 -1
- package/lib/pipeline/step-types.d.ts +34 -0
- package/lib/pipeline/step-types.js +1 -1
- package/lib/template/cache.d.ts +19 -0
- package/lib/template/cache.js +63 -0
- package/lib/template/evaluator.d.ts +32 -0
- package/lib/template/evaluator.js +155 -0
- package/lib/template/index.d.ts +42 -0
- package/lib/template/index.js +153 -0
- package/lib/template/metrics.d.ts +17 -0
- package/lib/template/metrics.js +35 -0
- package/lib/template/plugin-resolver.d.ts +8 -0
- package/lib/template/plugin-resolver.js +52 -0
- package/lib/template/tokenizer.d.ts +49 -0
- package/lib/template/tokenizer.js +237 -0
- package/lib/template/topo-sort.d.ts +17 -0
- package/lib/template/topo-sort.js +91 -0
- package/lib/template/validate.d.ts +45 -0
- package/lib/template/validate.js +101 -0
- package/lib/template/walker.d.ts +24 -0
- package/lib/template/walker.js +76 -0
- package/package.json +4 -4
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
// Copyright 2026 Pipeline Builder Contributors
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9zdGVwLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luRmlsdGVyLCBQbHVnaW4gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhJztcbmltcG9ydCB0eXBlIHsgQ29tcHV0ZVR5cGUgYXMgQ2RrQ29tcHV0ZVR5cGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB0eXBlIHsgSUZpbGVTZXRQcm9kdWNlciB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBBcnRpZmFjdEtleSwgQXJ0aWZhY3RNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZS9hcnRpZmFjdC1tYW5hZ2VyJztcbmltcG9ydCB0eXBlIHsgVW5pcXVlSWQgfSBmcm9tICcuLi9jb3JlL2lkLWdlbmVyYXRvcic7XG5pbXBvcnQgdHlwZSB7IE5ldHdvcmtDb25maWcgfSBmcm9tICcuLi9jb3JlL25ldHdvcmstdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlVHlwZSwgUGx1Z2luVHlwZSwgTWV0YURhdGFUeXBlLCBTb3VyY2VUeXBlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS10eXBlcyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc2VsZWN0aW5nIGFuZCBjb25maWd1cmluZyBhIHBsdWdpblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk9wdGlvbnMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcGx1Z2luIHRvIHVzZVxuICAgKiBNdXN0IG1hdGNoIGEgcmVnaXN0ZXJlZCBwbHVnaW4gaW4gdGhlIGRhdGFiYXNlXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFsaWFzIGZvciB0aGUgcGx1Z2luIGluc3RhbmNlXG4gICAqIFVzZWZ1bCB3aGVuIHVzaW5nIHRoZSBzYW1lIHBsdWdpbiBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZpbHRlciBjcml0ZXJpYSBmb3IgcGx1Z2luIHNlbGVjdGlvblxuICAgKiBDYW4gYmUgdXNlZCB0byBzZWxlY3Qgc3BlY2lmaWMgcGx1Z2luIHZlcnNpb25zIG9yIHZhcmlhbnRzXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXI/OiBQbHVnaW5GaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgbWV0YWRhdGEgdG8gbWVyZ2Ugd2l0aCBwbHVnaW4ncyBkZWZhdWx0IG1ldGFkYXRhXG4gICAqIFRoaXMgbWV0YWRhdGEgd2lsbCBiZSBhdmFpbGFibGUgdG8gdGhlIHBsdWdpbiBkdXJpbmcgZXhlY3V0aW9uXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE1ldGFEYXRhVHlwZTtcbn1cblxuLyoqXG4gKiBTeW50aGVzaXMgc3RlcCBjb25maWd1cmF0aW9uIGNvbWJpbmluZyBzb3VyY2UgYW5kIHBsdWdpbi5cbiAqIEV4dGVuZHMgU3RlcEN1c3RvbWl6YXRpb24gdG8gc3VwcG9ydCBpbmplY3RpbmcgY3VzdG9tIGNvbW1hbmRzIGFuZCBlbnYgdmFyc1xuICogaW50byB0aGUgc3ludGggQ29kZUJ1aWxkIHN0ZXAgKHNhbWUgaG9va3MgYXZhaWxhYmxlIGFzIHN0YWdlIHN0ZXBzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW50aE9wdGlvbnMgZXh0ZW5kcyBTdGVwQ3VzdG9taXphdGlvbiB7XG4gIC8qKlxuICAgKiBTb3VyY2UgY29uZmlndXJhdGlvbiAoUzMsIEdpdEh1Yiwgb3IgQ29kZVN0YXIpXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IFNvdXJjZVR5cGU7XG5cbiAgLyoqXG4gICAqIFBsdWdpbiB0byB1c2UgZm9yIHN5bnRoZXNpc1xuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW5PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1ldGFkYXRhIGZvciB0aGUgc3ludGhlc2lzIHN0ZXBcbiAgICogVGhpcyB3aWxsIGJlIG1lcmdlZCB3aXRoIGdsb2JhbCBtZXRhZGF0YSBhbmQgcGx1Z2luIG1ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE1ldGFEYXRhVHlwZTtcblxuICAvKipcbiAgICogU3RlcC1sZXZlbCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYXBwbGllZCBvbmx5IHRvIHRoZSBzeW50aCBDb2RlQnVpbGQgc3RlcC5cbiAgICogT3ZlcnJpZGVzIHRoZSBwaXBlbGluZS1sZXZlbCBgZGVmYXVsdHMubmV0d29ya2Agd2hlbiBib3RoIGFyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBOZXR3b3JrQ29uZmlnO1xufVxuXG4vKipcbiAqIFBsdWdpbiBzcGVjIGRlZmluaW5nIHBsdWdpbiBiZWhhdmlvciBhbmQgcmVxdWlyZW1lbnRzLlxuICogVGhpcyBpcyB0eXBpY2FsbHkgbG9hZGVkIGZyb20gYSBwbHVnaW4gc3BlYyBmaWxlIChwbHVnaW4tc3BlYy55YW1sKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TcGVjIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcGx1Z2luXG4gICAqIEBleGFtcGxlICdub2RlanMtYnVpbGQnXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIHBsdWdpbiBkb2VzXG4gICAqIEBleGFtcGxlICdCdWlsZHMgYW5kIHRlc3RzIE5vZGUuanMgYXBwbGljYXRpb25zJ1xuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEtleXdvcmRzIGZvciBwbHVnaW4gZGlzY292ZXJ5IGFuZCBjYXRlZ29yaXphdGlvblxuICAgKiBAZXhhbXBsZSBbJ25vZGVqcycsICd0eXBlc2NyaXB0JywgJ2J1aWxkJywgJ3Rlc3QnXVxuICAgKi9cbiAgcmVhZG9ubHkga2V5d29yZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUGx1Z2luIGNhdGVnb3J5IGZvciBBSS1hc3Npc3RlZCBzZWxlY3Rpb24gYW5kIG9yZ2FuaXphdGlvbi5cbiAgICogT25lIG9mOiBsYW5ndWFnZSwgc2VjdXJpdHksIHF1YWxpdHksIHRlc3RpbmcsIGRlcGxveSwgYXJ0aWZhY3QsXG4gICAqICAgICAgICAgaW5mcmFzdHJ1Y3R1cmUsIG1vbml0b3JpbmcsIG5vdGlmaWNhdGlvbiwgYWlcbiAgICovXG4gIHJlYWRvbmx5IGNhdGVnb3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZW1hbnRpYyB2ZXJzaW9uIG9mIHRoZSBwbHVnaW5cbiAgICogQGV4YW1wbGUgJzEuMC4wJ1xuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVHlwZSBvZiBwaXBlbGluZSBzdGVwIHRoaXMgcGx1Z2luIGNyZWF0ZXNcbiAgICogQGRlZmF1bHQgUGx1Z2luVHlwZS5DT0RFX0JVSUxEX1NURVBcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblR5cGU/OiBQbHVnaW5UeXBlO1xuXG4gIC8qKlxuICAgKiBDb2RlQnVpbGQgY29tcHV0ZSByZXNvdXJjZSBzaXplIHRvIHVzZVxuICAgKiBAZGVmYXVsdCBDb21wdXRlVHlwZS5TTUFMTFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHV0ZVR5cGU/OiBDb21wdXRlVHlwZTtcblxuICAvKipcbiAgICogTWF4aW11bSBleGVjdXRpb24gdGltZSBpbiBtaW51dGVzLlxuICAgKiBVc2VkIGFzIGZhbGxiYWNrIHdoZW4gdGhlIHBpcGVsaW5lIHN0ZXAgZG9lc24ndCBzZXQgdGltZW91dC5cbiAgICogQGRlZmF1bHQgNjAgKEFXUyBDb2RlQnVpbGQgZGVmYXVsdClcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoYXQgaGFwcGVucyB3aGVuIHRoaXMgc3RlcCBmYWlscy5cbiAgICogLSAnZmFpbCc6IFN0b3AgdGhlIHBpcGVsaW5lIChkZWZhdWx0KVxuICAgKiAtICd3YXJuJzogTG9nIGEgd2FybmluZyBhbmQgY29udGludWVcbiAgICogLSAnaWdub3JlJzogU2lsZW50bHkgY29udGludWVcbiAgICogQGRlZmF1bHQgJ2ZhaWwnXG4gICAqL1xuICByZWFkb25seSBmYWlsdXJlQmVoYXZpb3I/OiAnZmFpbCcgfCAnd2FybicgfCAnaWdub3JlJztcblxuICAvKipcbiAgICogU2VjcmV0IHJlcXVpcmVtZW50cyBmb3IgdGhpcyBwbHVnaW4uXG4gICAqIERlY2xhcmVzIG5hbWVkIHNlY3JldHMgdGhlIHBsdWdpbiBleHBlY3RzIGF0IGJ1aWxkIHRpbWUuXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRzPzogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHJlcXVpcmVkOiBib29sZWFuOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9PjtcblxuICAvKipcbiAgICogRGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHByaW1hcnkgYnVpbGQgb3V0cHV0IGFydGlmYWN0c1xuICAgKiBAZXhhbXBsZSAnZGlzdCdcbiAgICovXG4gIHJlYWRvbmx5IHByaW1hcnlPdXRwdXREaXJlY3Rvcnk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1ldGFkYXRhIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGR1cmluZyBwbHVnaW4gZXhlY3V0aW9uXG4gICAqIEtleXMgc2hvdWxkIHVzZSB0aGUgZm9ybWF0ICdhd3M6Y2RrOntuYW1lc3BhY2V9OntrZXl9JyAoYWxsIGxvd2VyY2FzZSlcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gRG9ja2VyZmlsZSBvciBEb2NrZXJmaWxlIGNvbnRlbnRcbiAgICogVXNlZCB0byBidWlsZCB0aGUgY29udGFpbmVyIGVudmlyb25tZW50IGZvciB0aGlzIHBsdWdpblxuICAgKi9cbiAgcmVhZG9ubHkgZG9ja2VyZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQ29tbWFuZHMgdG8gcnVuIGR1cmluZyB0aGUgaW5zdGFsbCBwaGFzZVxuICAgKiBUeXBpY2FsbHkgdXNlZCBmb3IgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXNcbiAgICogQGV4YW1wbGUgWyducG0gY2knLCAnbnBtIHJ1biBidWlsZCddXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsQ29tbWFuZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ29tbWFuZHMgdG8gcnVuIGR1cmluZyB0aGUgYnVpbGQvZXhlY3V0aW9uIHBoYXNlXG4gICAqIFRoZXNlIGFyZSB0aGUgbWFpbiBjb21tYW5kcyB0aGF0IHBlcmZvcm0gdGhlIHBsdWdpbidzIHdvcmtcbiAgICogQGV4YW1wbGUgWyducG0gdGVzdCcsICducG0gcnVuIGRlcGxveSddXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIHRoZSBidWlsZCBlbnZpcm9ubWVudFxuICAgKiBAZXhhbXBsZSB7IEFQSV9VUkw6ICdodHRwczovL2FwaS5leGFtcGxlLmNvbScsIExPR19MRVZFTDogJ2luZm8nIH1cbiAgICovXG4gIHJlYWRvbmx5IGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIERvY2tlciBidWlsZCBhcmd1bWVudHMgcGFzc2VkIHZpYSAtLWJ1aWxkLWFyZyBhdCBpbWFnZSBidWlsZCB0aW1lLlxuICAgKiBVc2VkIHRvIHBhcmFtZXRlcml6ZSBEb2NrZXJmaWxlIEFSRyB2YWx1ZXMgd2hlbiBidWlsZGluZyB0aGUgcGx1Z2luIGltYWdlLlxuICAgKiBAZXhhbXBsZSB7IFBZVEhPTl9WRVJTSU9OOiAnMy4xMicsIE5PREVfRU5WOiAncHJvZHVjdGlvbicgfVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRBcmdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBQZXItc3RlcCBjdXN0b21pemF0aW9uIG9wdGlvbnMgZm9yIGNvbW1hbmRzIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKiBDdXN0b20gY29tbWFuZHMgYXJlIGluamVjdGVkIGJlZm9yZS9hZnRlciB0aGUgcGx1Z2luJ3MgY29tbWFuZHMuXG4gKiBDdXN0b20gZW52IHZhcnMgYXJlIG1lcmdlZCBvbiB0b3Agb2YgdGhlIHBsdWdpbidzIGRlZmF1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBDdXN0b21pemF0aW9uIHtcbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBiZWZvcmUgdGhlIHBsdWdpbidzIGluc3RhbGwgY29tbWFuZHMgKi9cbiAgcmVhZG9ubHkgcHJlSW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBhZnRlciB0aGUgcGx1Z2luJ3MgaW5zdGFsbCBjb21tYW5kcyAqL1xuICByZWFkb25seSBwb3N0SW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBiZWZvcmUgdGhlIHBsdWdpbidzIGJ1aWxkIGNvbW1hbmRzICovXG4gIHJlYWRvbmx5IHByZUNvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBhZnRlciB0aGUgcGx1Z2luJ3MgYnVpbGQgY29tbWFuZHMgKi9cbiAgcmVhZG9ubHkgcG9zdENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIEN1c3RvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbWVyZ2VkIG9uIHRvcCBvZiB0aGUgcGx1Z2luJ3MgZW52ICovXG4gIHJlYWRvbmx5IGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogQW4gYWRkaXRpb25hbCBpbnB1dCBhcnRpZmFjdCB3aXRoIGFuIG9wdGlvbmFsIG1vdW50IGRpcmVjdG9yeS5cbiAqIFdoZW4gZGlyZWN0b3J5IGlzIG9taXR0ZWQsIGRlZmF1bHRzIHRvIHRoZSBhcnRpZmFjdCdzIG91dHB1dERpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRpdGlvbmFsSW5wdXRBcnRpZmFjdENvbmZpZyB7XG4gIC8qKiBBcnRpZmFjdCBrZXkgaWRlbnRpZnlpbmcgdGhlIHNvdXJjZSBzdGVwJ3Mgb3V0cHV0ICovXG4gIHJlYWRvbmx5IGFydGlmYWN0OiBBcnRpZmFjdEtleTtcblxuICAvKiogRGlyZWN0b3J5IHRvIG1vdW50IHRoZSBpbnB1dCBhdC4gRGVmYXVsdHMgdG8gYXJ0aWZhY3Qub3V0cHV0RGlyZWN0b3J5IHdoZW4gb21pdHRlZC4gKi9cbiAgcmVhZG9ubHkgZGlyZWN0b3J5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgc2luZ2xlIHN0ZXAgd2l0aGluIGEgcGlwZWxpbmUgc3RhZ2UuXG4gKiBVc2VzIFBsdWdpbk9wdGlvbnMgZm9yIG5hbWUtYmFzZWQgcGx1Z2luIHNlbGVjdGlvbiAocmVzb2x2ZWQgYXQgYnVpbGQgdGltZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VTdGVwT3B0aW9ucyBleHRlbmRzIFN0ZXBDdXN0b21pemF0aW9uIHtcbiAgLyoqIFBsdWdpbiB0byB1c2UgZm9yIHRoaXMgc3RlcCAqL1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbk9wdGlvbnM7XG5cbiAgLyoqIFN0ZXAtbGV2ZWwgbWV0YWRhdGEgbWVyZ2VkIHdpdGggc3RhZ2UgYW5kIGdsb2JhbCBtZXRhZGF0YSAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE1ldGFEYXRhVHlwZTtcblxuICAvKiogT3B0aW9uYWwgbmV0d29yayBjb25maWd1cmF0aW9uIGZvciB0aGlzIHN0ZXAncyBDb2RlQnVpbGQgYWN0aW9uICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBOZXR3b3JrQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBDb2RlQnVpbGQgdGltZW91dCBpbiBtaW51dGVzLlxuICAgKiBAZGVmYXVsdCA2MCAoQVdTIENvZGVCdWlsZCBkZWZhdWx0KVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcblxuICAvKipcbiAgICogUG9zaXRpb24gb2YgdGhpcyBzdGVwIHdpdGhpbiB0aGUgcGlwZWxpbmUgd2F2ZS5cbiAgICogLSAncHJlJzogUnVucyBiZWZvcmUgdGhlIHN0YWdlIGRlcGxveW1lbnQgKGRlZmF1bHQpXG4gICAqIC0gJ3Bvc3QnOiBSdW5zIGFmdGVyIHRoZSBzdGFnZSBkZXBsb3ltZW50XG4gICAqIEBkZWZhdWx0ICdwcmUnXG4gICAqL1xuICByZWFkb25seSBwb3NpdGlvbj86ICdwcmUnIHwgJ3Bvc3QnO1xuXG4gIC8qKiBBcnRpZmFjdCBrZXkgZm9yIHRoaXMgc3RlcCdzIHByaW1hcnkgaW5wdXQgKHJlc29sdmVkIHZpYSBBcnRpZmFjdE1hbmFnZXIpICovXG4gIHJlYWRvbmx5IGlucHV0QXJ0aWZhY3Q/OiBBcnRpZmFjdEtleTtcblxuICAvKiogQWRkaXRpb25hbCBpbnB1dCBhcnRpZmFjdHMgZm9yIHRoaXMgc3RlcC4gRWFjaCBlbnRyeSBzcGVjaWZpZXMgYW4gYXJ0aWZhY3QgYW5kIGFuIG9wdGlvbmFsIG1vdW50IGRpcmVjdG9yeS4gKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbElucHV0QXJ0aWZhY3RzPzogQWRkaXRpb25hbElucHV0QXJ0aWZhY3RDb25maWdbXTtcblxuICAvKiogT3ZlcnJpZGUgdGhlIHBsdWdpbidzIGZhaWx1cmUgYmVoYXZpb3IgZm9yIHRoaXMgc3RlcC4gKi9cbiAgcmVhZG9ubHkgZmFpbHVyZUJlaGF2aW9yPzogJ2ZhaWwnIHwgJ3dhcm4nIHwgJ2lnbm9yZSc7XG59XG5cbi8qKlxuICogQSBwaXBlbGluZSBzdGFnZSBjb250YWluaW5nIG9uZSBvciBtb3JlIGJ1aWxkIHN0ZXBzLlxuICogRWFjaCBzdGFnZSBtYXBzIHRvIGEgQ0RLIFBpcGVsaW5lIHdhdmUsIHdpdGggc3RlcHMgZXhlY3V0aW5nIHdpdGhpbiB0aGUgd2F2ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFnZU9wdGlvbnMge1xuICAvKiogRGlzcGxheSBuYW1lIGZvciB0aGlzIHN0YWdlICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKiBPcHRpb25hbCBhbGlhcyB1c2VkIGZvciB3YXZlL2NvbnN0cnVjdCBJRCBnZW5lcmF0aW9uLiBEZWZhdWx0cyB0byBzdGFnZU5hbWUuICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKiBCdWlsZCBzdGVwcyB0byBleGVjdXRlIHdpdGhpbiB0aGlzIHN0YWdlICovXG4gIHJlYWRvbmx5IHN0ZXBzOiBTdGFnZVN0ZXBPcHRpb25zW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBDb2RlQnVpbGQgc3RlcCBpbiB0aGUgcGlwZWxpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQnVpbGRTdGVwT3B0aW9ucyBleHRlbmRzIFN0ZXBDdXN0b21pemF0aW9uIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIENvZGVCdWlsZCBzdGVwXG4gICAqIFNob3VsZCBiZSBkZXNjcmlwdGl2ZSBhbmQgdW5pcXVlIHdpdGhpbiB0aGUgcGlwZWxpbmVcbiAgICogQGV4YW1wbGUgJ215LW9yZy1teS1wcm9qZWN0LXN5bnRoJ1xuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVW5pcXVlSWQgaW5zdGFuY2UgZm9yIGdlbmVyYXRpbmcgdW5pcXVlIGNvbnN0cnVjdCBJRHNcbiAgICogVXNlZCBmb3IgbmV0d29yayByZXNvdXJjZSBsb29rdXBzIChWUEMsIHN1Ym5ldHMsIHNlY3VyaXR5IGdyb3VwcylcbiAgICovXG4gIHJlYWRvbmx5IHVuaXF1ZUlkOiBVbmlxdWVJZDtcblxuICAvKipcbiAgICogUGx1Z2luIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZGF0YWJhc2VcbiAgICogQ29udGFpbnMgYWxsIHRoZSBwbHVnaW4ncyBzcGVjIGRhdGEgYW5kIHJ1bnRpbWUgaW5mb3JtYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luO1xuXG4gIC8qKlxuICAgKiBDREsgc2NvcGUgdXNlZCB0byBjcmVhdGUgY29uc3RydWN0cyAoVlBDL3N1Ym5ldC9zZWN1cml0eS1ncm91cCBsb29rdXBzKS5cbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG5cbiAgLyoqXG4gICAqIElucHV0IHNvdXJjZSBmb3IgdGhpcyBzdGVwXG4gICAqIFR5cGljYWxseSB0aGUgb3V0cHV0IGZyb20gYSBwcmV2aW91cyBzdGVwIG9yIHRoZSBwaXBlbGluZSBzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IGlucHV0PzogSUZpbGVTZXRQcm9kdWNlcjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBtZXRhZGF0YSB0byBtZXJnZSB3aXRoIHBsdWdpbiBtZXRhZGF0YVxuICAgKiBXaWxsIG92ZXJyaWRlIGNvbmZsaWN0aW5nIGtleXMgZnJvbSBwbHVnaW4gbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTWV0YURhdGFUeXBlO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBDb2RlQnVpbGQgc3RlcC5cbiAgICogV2hlbiBwcm92aWRlZCwgcmVzb2x2ZXMgVlBDLCBzdWJuZXQgc2VsZWN0aW9uLCBhbmQgc2VjdXJpdHkgZ3JvdXBzXG4gICAqIHNvIHRoZSBidWlsZCBydW5zIGluc2lkZSB0aGUgc3BlY2lmaWVkIG5ldHdvcmsuXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrPzogTmV0d29ya0NvbmZpZztcblxuICAvKipcbiAgICogRmFsbGJhY2sgQ29kZUJ1aWxkIGNvbXB1dGUgdHlwZSB3aGVuIHRoZSBwbHVnaW4gZG9lc24ndCBzcGVjaWZ5IG9uZS5cbiAgICogQGRlZmF1bHQgQ29tcHV0ZVR5cGUuU01BTExcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRDb21wdXRlVHlwZT86IENka0NvbXB1dGVUeXBlO1xuXG4gIC8qKlxuICAgKiBDb2RlQnVpbGQgdGltZW91dCBpbiBtaW51dGVzLlxuICAgKiBAZGVmYXVsdCA2MCAoQVdTIENvZGVCdWlsZCBkZWZhdWx0KVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcblxuICAvKiogQWRkaXRpb25hbCBpbnB1dHMgbWFwcGVkIGJ5IGRpcmVjdG9yeSBwYXRoIChyZXNvbHZlZCBGaWxlU2V0cykgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbElucHV0cz86IFJlY29yZDxzdHJpbmcsIElGaWxlU2V0UHJvZHVjZXI+O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhcnRpZmFjdCBtYW5hZ2VyIGZvciB0cmFja2luZyBidWlsZCBvdXRwdXRzXG4gICAqIFdoZW4gcHJvdmlkZWQgYW5kIHByaW1hcnlPdXRwdXREaXJlY3RvcnkgaXMgc2V0LCB0aGUgc3RlcCB3aWxsIGJlIHJlZ2lzdGVyZWRcbiAgICovXG4gIHJlYWRvbmx5IGFydGlmYWN0TWFuYWdlcj86IEFydGlmYWN0TWFuYWdlcjtcblxuICAvKipcbiAgICogU3RhZ2UgbmFtZSBmb3IgYXJ0aWZhY3Qga2V5IGdlbmVyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU3RhZ2UgYWxpYXMgZm9yIGFydGlmYWN0IGtleSBnZW5lcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBzdGFnZUFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQbHVnaW4gYWxpYXMgZm9yIGFydGlmYWN0IGtleSBnZW5lcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5BbGlhcz86IHN0cmluZztcblxuICAvKipcbiAgICogRmFpbHVyZSBiZWhhdmlvciBmb3IgdGhpcyBzdGVwJ3MgYnVpbGQgY29tbWFuZHMuXG4gICAqIEFwcGxpZWQgYXQgc2hlbGwgbGV2ZWw6ICdmYWlsJyA9IGRlZmF1bHQsICd3YXJuJyA9IGxvZyArIGNvbnRpbnVlLCAnaWdub3JlJyA9IHx8IHRydWUuXG4gICAqL1xuICByZWFkb25seSBmYWlsdXJlQmVoYXZpb3I/OiAnZmFpbCcgfCAnd2FybicgfCAnaWdub3JlJztcblxuICAvKiogVGVuYW50IGlkZW50aWZpZXIgZm9yIHJlc29sdmluZyBwZXItb3JnIHNlY3JldHMgZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xufVxuIl19
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9zdGVwLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luRmlsdGVyLCBQbHVnaW4gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhJztcbmltcG9ydCB0eXBlIHsgQ29tcHV0ZVR5cGUgYXMgQ2RrQ29tcHV0ZVR5cGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB0eXBlIHsgSUZpbGVTZXRQcm9kdWNlciB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBBcnRpZmFjdEtleSwgQXJ0aWZhY3RNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZS9hcnRpZmFjdC1tYW5hZ2VyJztcbmltcG9ydCB0eXBlIHsgVW5pcXVlSWQgfSBmcm9tICcuLi9jb3JlL2lkLWdlbmVyYXRvcic7XG5pbXBvcnQgdHlwZSB7IE5ldHdvcmtDb25maWcgfSBmcm9tICcuLi9jb3JlL25ldHdvcmstdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlVHlwZSwgUGx1Z2luVHlwZSwgTWV0YURhdGFUeXBlLCBTb3VyY2VUeXBlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS10eXBlcyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc2VsZWN0aW5nIGFuZCBjb25maWd1cmluZyBhIHBsdWdpblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk9wdGlvbnMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcGx1Z2luIHRvIHVzZVxuICAgKiBNdXN0IG1hdGNoIGEgcmVnaXN0ZXJlZCBwbHVnaW4gaW4gdGhlIGRhdGFiYXNlXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFsaWFzIGZvciB0aGUgcGx1Z2luIGluc3RhbmNlXG4gICAqIFVzZWZ1bCB3aGVuIHVzaW5nIHRoZSBzYW1lIHBsdWdpbiBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZpbHRlciBjcml0ZXJpYSBmb3IgcGx1Z2luIHNlbGVjdGlvblxuICAgKiBDYW4gYmUgdXNlZCB0byBzZWxlY3Qgc3BlY2lmaWMgcGx1Z2luIHZlcnNpb25zIG9yIHZhcmlhbnRzXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXI/OiBQbHVnaW5GaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgbWV0YWRhdGEgdG8gbWVyZ2Ugd2l0aCBwbHVnaW4ncyBkZWZhdWx0IG1ldGFkYXRhXG4gICAqIFRoaXMgbWV0YWRhdGEgd2lsbCBiZSBhdmFpbGFibGUgdG8gdGhlIHBsdWdpbiBkdXJpbmcgZXhlY3V0aW9uXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE1ldGFEYXRhVHlwZTtcbn1cblxuLyoqXG4gKiBTeW50aGVzaXMgc3RlcCBjb25maWd1cmF0aW9uIGNvbWJpbmluZyBzb3VyY2UgYW5kIHBsdWdpbi5cbiAqIEV4dGVuZHMgU3RlcEN1c3RvbWl6YXRpb24gdG8gc3VwcG9ydCBpbmplY3RpbmcgY3VzdG9tIGNvbW1hbmRzIGFuZCBlbnYgdmFyc1xuICogaW50byB0aGUgc3ludGggQ29kZUJ1aWxkIHN0ZXAgKHNhbWUgaG9va3MgYXZhaWxhYmxlIGFzIHN0YWdlIHN0ZXBzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW50aE9wdGlvbnMgZXh0ZW5kcyBTdGVwQ3VzdG9taXphdGlvbiB7XG4gIC8qKlxuICAgKiBTb3VyY2UgY29uZmlndXJhdGlvbiAoUzMsIEdpdEh1Yiwgb3IgQ29kZVN0YXIpXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IFNvdXJjZVR5cGU7XG5cbiAgLyoqXG4gICAqIFBsdWdpbiB0byB1c2UgZm9yIHN5bnRoZXNpc1xuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW5PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1ldGFkYXRhIGZvciB0aGUgc3ludGhlc2lzIHN0ZXBcbiAgICogVGhpcyB3aWxsIGJlIG1lcmdlZCB3aXRoIGdsb2JhbCBtZXRhZGF0YSBhbmQgcGx1Z2luIG1ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE1ldGFEYXRhVHlwZTtcblxuICAvKipcbiAgICogU3RlcC1sZXZlbCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYXBwbGllZCBvbmx5IHRvIHRoZSBzeW50aCBDb2RlQnVpbGQgc3RlcC5cbiAgICogT3ZlcnJpZGVzIHRoZSBwaXBlbGluZS1sZXZlbCBgZGVmYXVsdHMubmV0d29ya2Agd2hlbiBib3RoIGFyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBOZXR3b3JrQ29uZmlnO1xufVxuXG4vKipcbiAqIFBsdWdpbiBzcGVjIGRlZmluaW5nIHBsdWdpbiBiZWhhdmlvciBhbmQgcmVxdWlyZW1lbnRzLlxuICogVGhpcyBpcyB0eXBpY2FsbHkgbG9hZGVkIGZyb20gYSBwbHVnaW4gc3BlYyBmaWxlIChwbHVnaW4tc3BlYy55YW1sKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TcGVjIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcGx1Z2luXG4gICAqIEBleGFtcGxlICdub2RlanMtYnVpbGQnXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIHBsdWdpbiBkb2VzXG4gICAqIEBleGFtcGxlICdCdWlsZHMgYW5kIHRlc3RzIE5vZGUuanMgYXBwbGljYXRpb25zJ1xuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEtleXdvcmRzIGZvciBwbHVnaW4gZGlzY292ZXJ5IGFuZCBjYXRlZ29yaXphdGlvblxuICAgKiBAZXhhbXBsZSBbJ25vZGVqcycsICd0eXBlc2NyaXB0JywgJ2J1aWxkJywgJ3Rlc3QnXVxuICAgKi9cbiAgcmVhZG9ubHkga2V5d29yZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUGx1Z2luIGNhdGVnb3J5IGZvciBBSS1hc3Npc3RlZCBzZWxlY3Rpb24gYW5kIG9yZ2FuaXphdGlvbi5cbiAgICogT25lIG9mOiBsYW5ndWFnZSwgc2VjdXJpdHksIHF1YWxpdHksIHRlc3RpbmcsIGRlcGxveSwgYXJ0aWZhY3QsXG4gICAqICAgICAgICAgaW5mcmFzdHJ1Y3R1cmUsIG1vbml0b3JpbmcsIG5vdGlmaWNhdGlvbiwgYWlcbiAgICovXG4gIHJlYWRvbmx5IGNhdGVnb3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZW1hbnRpYyB2ZXJzaW9uIG9mIHRoZSBwbHVnaW5cbiAgICogQGV4YW1wbGUgJzEuMC4wJ1xuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVHlwZSBvZiBwaXBlbGluZSBzdGVwIHRoaXMgcGx1Z2luIGNyZWF0ZXNcbiAgICogQGRlZmF1bHQgUGx1Z2luVHlwZS5DT0RFX0JVSUxEX1NURVBcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblR5cGU/OiBQbHVnaW5UeXBlO1xuXG4gIC8qKlxuICAgKiBDb2RlQnVpbGQgY29tcHV0ZSByZXNvdXJjZSBzaXplIHRvIHVzZVxuICAgKiBAZGVmYXVsdCBDb21wdXRlVHlwZS5TTUFMTFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHV0ZVR5cGU/OiBDb21wdXRlVHlwZTtcblxuICAvKipcbiAgICogTWF4aW11bSBleGVjdXRpb24gdGltZSBpbiBtaW51dGVzLlxuICAgKiBVc2VkIGFzIGZhbGxiYWNrIHdoZW4gdGhlIHBpcGVsaW5lIHN0ZXAgZG9lc24ndCBzZXQgdGltZW91dC5cbiAgICogQGRlZmF1bHQgNjAgKEFXUyBDb2RlQnVpbGQgZGVmYXVsdClcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoYXQgaGFwcGVucyB3aGVuIHRoaXMgc3RlcCBmYWlscy5cbiAgICogLSAnZmFpbCc6IFN0b3AgdGhlIHBpcGVsaW5lIChkZWZhdWx0KVxuICAgKiAtICd3YXJuJzogTG9nIGEgd2FybmluZyBhbmQgY29udGludWVcbiAgICogLSAnaWdub3JlJzogU2lsZW50bHkgY29udGludWVcbiAgICogQGRlZmF1bHQgJ2ZhaWwnXG4gICAqL1xuICByZWFkb25seSBmYWlsdXJlQmVoYXZpb3I/OiAnZmFpbCcgfCAnd2FybicgfCAnaWdub3JlJztcblxuICAvKipcbiAgICogU2VjcmV0IHJlcXVpcmVtZW50cyBmb3IgdGhpcyBwbHVnaW4uXG4gICAqIERlY2xhcmVzIG5hbWVkIHNlY3JldHMgdGhlIHBsdWdpbiBleHBlY3RzIGF0IGJ1aWxkIHRpbWUuXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRzPzogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHJlcXVpcmVkOiBib29sZWFuOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9PjtcblxuICAvKipcbiAgICogRGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHByaW1hcnkgYnVpbGQgb3V0cHV0IGFydGlmYWN0c1xuICAgKiBAZXhhbXBsZSAnZGlzdCdcbiAgICovXG4gIHJlYWRvbmx5IHByaW1hcnlPdXRwdXREaXJlY3Rvcnk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1ldGFkYXRhIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGR1cmluZyBwbHVnaW4gZXhlY3V0aW9uXG4gICAqIEtleXMgc2hvdWxkIHVzZSB0aGUgZm9ybWF0ICdhd3M6Y2RrOntuYW1lc3BhY2V9OntrZXl9JyAoYWxsIGxvd2VyY2FzZSlcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gRG9ja2VyZmlsZSBvciBEb2NrZXJmaWxlIGNvbnRlbnRcbiAgICogVXNlZCB0byBidWlsZCB0aGUgY29udGFpbmVyIGVudmlyb25tZW50IGZvciB0aGlzIHBsdWdpblxuICAgKi9cbiAgcmVhZG9ubHkgZG9ja2VyZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQ29tbWFuZHMgdG8gcnVuIGR1cmluZyB0aGUgaW5zdGFsbCBwaGFzZVxuICAgKiBUeXBpY2FsbHkgdXNlZCBmb3IgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXNcbiAgICogQGV4YW1wbGUgWyducG0gY2knLCAnbnBtIHJ1biBidWlsZCddXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsQ29tbWFuZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ29tbWFuZHMgdG8gcnVuIGR1cmluZyB0aGUgYnVpbGQvZXhlY3V0aW9uIHBoYXNlXG4gICAqIFRoZXNlIGFyZSB0aGUgbWFpbiBjb21tYW5kcyB0aGF0IHBlcmZvcm0gdGhlIHBsdWdpbidzIHdvcmtcbiAgICogQGV4YW1wbGUgWyducG0gdGVzdCcsICducG0gcnVuIGRlcGxveSddXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIHRoZSBidWlsZCBlbnZpcm9ubWVudFxuICAgKiBAZXhhbXBsZSB7IEFQSV9VUkw6ICdodHRwczovL2FwaS5leGFtcGxlLmNvbScsIExPR19MRVZFTDogJ2luZm8nIH1cbiAgICovXG4gIHJlYWRvbmx5IGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIERvY2tlciBidWlsZCBhcmd1bWVudHMgcGFzc2VkIHZpYSAtLWJ1aWxkLWFyZyBhdCBpbWFnZSBidWlsZCB0aW1lLlxuICAgKiBVc2VkIHRvIHBhcmFtZXRlcml6ZSBEb2NrZXJmaWxlIEFSRyB2YWx1ZXMgd2hlbiBidWlsZGluZyB0aGUgcGx1Z2luIGltYWdlLlxuICAgKiBAZXhhbXBsZSB7IFBZVEhPTl9WRVJTSU9OOiAnMy4xMicsIE5PREVfRU5WOiAncHJvZHVjdGlvbicgfVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRBcmdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogUGlwZWxpbmUgbWV0YWRhdGEga2V5cyB0aGUgcGx1Z2luIHJlZmVyZW5jZXMgdmlhIGB7eyBwaXBlbGluZS5tZXRhZGF0YS5YIH19YC5cbiAgICogRGVjbGFyZWQgYXMgYSBjb250cmFjdCDigJQgcGlwZWxpbmVzIHVzaW5nIHRoaXMgcGx1Z2luIG11c3Qgc3VwcGx5IGFsbFxuICAgKiBsaXN0ZWQga2V5cyB1bmxlc3MgdGhlIHRlbXBsYXRlIHVzZXMgYHwgZGVmYXVsdDogJy4uLidgLlxuICAgKiBAZXhhbXBsZSBbJ2VudicsICduYW1lc3BhY2UnLCAnY2x1c3Rlck5hbWUnXVxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWRNZXRhZGF0YT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQaXBlbGluZSB2YXJzIGtleXMgdGhlIHBsdWdpbiByZWZlcmVuY2VzIHZpYSBge3sgcGlwZWxpbmUudmFycy5YIH19YC5cbiAgICogQGV4YW1wbGUgWydicmFuY2gnLCAnc2xhY2tDaGFubmVsJ11cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkVmFycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB0eXBlIGRlY2xhcmF0aW9ucyBmb3IgdGhlIG1ldGFkYXRhIGtleXMgbGlzdGVkIGluIGByZXF1aXJlZE1ldGFkYXRhYC5cbiAgICogVXNlZCBhdCB1cGxvYWQgdGltZSB0byB2ZXJpZnkgdGhhdCBjb2VyY2lvbiBmaWx0ZXJzIChgfCBudW1iZXJgLCBgfCBib29sYCxcbiAgICogYHwganNvbmApIG1hdGNoIHRoZSBkZWNsYXJlZCB0eXBlIOKAlCBlLmcuIGB7eyBwaXBlbGluZS5tZXRhZGF0YS5jb3VudCB8IG51bWJlciB9fWBcbiAgICogcmVxdWlyZXMgYGNvdW50OiAnbnVtYmVyJ2AgaGVyZSwgb3RoZXJ3aXNlIHRoZSBwbHVnaW4gaXMgcmVqZWN0ZWQuXG4gICAqIEtleXMgbm90IGRlY2xhcmVkIGRlZmF1bHQgdG8gYCdzdHJpbmcnYC5cbiAgICogQGV4YW1wbGUgeyBjb3VudDogJ251bWJlcicsIGVuYWJsZWQ6ICdib29sJyB9XG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YVR5cGVzPzogUmVjb3JkPHN0cmluZywgJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdib29sJyB8ICdqc29uJz47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHR5cGUgZGVjbGFyYXRpb25zIGZvciB2YXJzIGtleXMgKHNhbWUgc2VtYW50aWNzIGFzIGBtZXRhZGF0YVR5cGVzYCkuXG4gICAqL1xuICByZWFkb25seSB2YXJzVHlwZXM/OiBSZWNvcmQ8c3RyaW5nLCAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2wnIHwgJ2pzb24nPjtcbn1cblxuLyoqXG4gKiBQZXItc3RlcCBjdXN0b21pemF0aW9uIG9wdGlvbnMgZm9yIGNvbW1hbmRzIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKiBDdXN0b20gY29tbWFuZHMgYXJlIGluamVjdGVkIGJlZm9yZS9hZnRlciB0aGUgcGx1Z2luJ3MgY29tbWFuZHMuXG4gKiBDdXN0b20gZW52IHZhcnMgYXJlIG1lcmdlZCBvbiB0b3Agb2YgdGhlIHBsdWdpbidzIGRlZmF1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBDdXN0b21pemF0aW9uIHtcbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBiZWZvcmUgdGhlIHBsdWdpbidzIGluc3RhbGwgY29tbWFuZHMgKi9cbiAgcmVhZG9ubHkgcHJlSW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBhZnRlciB0aGUgcGx1Z2luJ3MgaW5zdGFsbCBjb21tYW5kcyAqL1xuICByZWFkb25seSBwb3N0SW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBiZWZvcmUgdGhlIHBsdWdpbidzIGJ1aWxkIGNvbW1hbmRzICovXG4gIHJlYWRvbmx5IHByZUNvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBhZnRlciB0aGUgcGx1Z2luJ3MgYnVpbGQgY29tbWFuZHMgKi9cbiAgcmVhZG9ubHkgcG9zdENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIEN1c3RvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbWVyZ2VkIG9uIHRvcCBvZiB0aGUgcGx1Z2luJ3MgZW52ICovXG4gIHJlYWRvbmx5IGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogQW4gYWRkaXRpb25hbCBpbnB1dCBhcnRpZmFjdCB3aXRoIGFuIG9wdGlvbmFsIG1vdW50IGRpcmVjdG9yeS5cbiAqIFdoZW4gZGlyZWN0b3J5IGlzIG9taXR0ZWQsIGRlZmF1bHRzIHRvIHRoZSBhcnRpZmFjdCdzIG91dHB1dERpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRpdGlvbmFsSW5wdXRBcnRpZmFjdENvbmZpZyB7XG4gIC8qKiBBcnRpZmFjdCBrZXkgaWRlbnRpZnlpbmcgdGhlIHNvdXJjZSBzdGVwJ3Mgb3V0cHV0ICovXG4gIHJlYWRvbmx5IGFydGlmYWN0OiBBcnRpZmFjdEtleTtcblxuICAvKiogRGlyZWN0b3J5IHRvIG1vdW50IHRoZSBpbnB1dCBhdC4gRGVmYXVsdHMgdG8gYXJ0aWZhY3Qub3V0cHV0RGlyZWN0b3J5IHdoZW4gb21pdHRlZC4gKi9cbiAgcmVhZG9ubHkgZGlyZWN0b3J5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgc2luZ2xlIHN0ZXAgd2l0aGluIGEgcGlwZWxpbmUgc3RhZ2UuXG4gKiBVc2VzIFBsdWdpbk9wdGlvbnMgZm9yIG5hbWUtYmFzZWQgcGx1Z2luIHNlbGVjdGlvbiAocmVzb2x2ZWQgYXQgYnVpbGQgdGltZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VTdGVwT3B0aW9ucyBleHRlbmRzIFN0ZXBDdXN0b21pemF0aW9uIHtcbiAgLyoqIFBsdWdpbiB0byB1c2UgZm9yIHRoaXMgc3RlcCAqL1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbk9wdGlvbnM7XG5cbiAgLyoqIFN0ZXAtbGV2ZWwgbWV0YWRhdGEgbWVyZ2VkIHdpdGggc3RhZ2UgYW5kIGdsb2JhbCBtZXRhZGF0YSAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE1ldGFEYXRhVHlwZTtcblxuICAvKiogT3B0aW9uYWwgbmV0d29yayBjb25maWd1cmF0aW9uIGZvciB0aGlzIHN0ZXAncyBDb2RlQnVpbGQgYWN0aW9uICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBOZXR3b3JrQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBDb2RlQnVpbGQgdGltZW91dCBpbiBtaW51dGVzLlxuICAgKiBAZGVmYXVsdCA2MCAoQVdTIENvZGVCdWlsZCBkZWZhdWx0KVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcblxuICAvKipcbiAgICogUG9zaXRpb24gb2YgdGhpcyBzdGVwIHdpdGhpbiB0aGUgcGlwZWxpbmUgd2F2ZS5cbiAgICogLSAncHJlJzogUnVucyBiZWZvcmUgdGhlIHN0YWdlIGRlcGxveW1lbnQgKGRlZmF1bHQpXG4gICAqIC0gJ3Bvc3QnOiBSdW5zIGFmdGVyIHRoZSBzdGFnZSBkZXBsb3ltZW50XG4gICAqIEBkZWZhdWx0ICdwcmUnXG4gICAqL1xuICByZWFkb25seSBwb3NpdGlvbj86ICdwcmUnIHwgJ3Bvc3QnO1xuXG4gIC8qKiBBcnRpZmFjdCBrZXkgZm9yIHRoaXMgc3RlcCdzIHByaW1hcnkgaW5wdXQgKHJlc29sdmVkIHZpYSBBcnRpZmFjdE1hbmFnZXIpICovXG4gIHJlYWRvbmx5IGlucHV0QXJ0aWZhY3Q/OiBBcnRpZmFjdEtleTtcblxuICAvKiogQWRkaXRpb25hbCBpbnB1dCBhcnRpZmFjdHMgZm9yIHRoaXMgc3RlcC4gRWFjaCBlbnRyeSBzcGVjaWZpZXMgYW4gYXJ0aWZhY3QgYW5kIGFuIG9wdGlvbmFsIG1vdW50IGRpcmVjdG9yeS4gKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbElucHV0QXJ0aWZhY3RzPzogQWRkaXRpb25hbElucHV0QXJ0aWZhY3RDb25maWdbXTtcblxuICAvKiogT3ZlcnJpZGUgdGhlIHBsdWdpbidzIGZhaWx1cmUgYmVoYXZpb3IgZm9yIHRoaXMgc3RlcC4gKi9cbiAgcmVhZG9ubHkgZmFpbHVyZUJlaGF2aW9yPzogJ2ZhaWwnIHwgJ3dhcm4nIHwgJ2lnbm9yZSc7XG59XG5cbi8qKlxuICogQSBwaXBlbGluZSBzdGFnZSBjb250YWluaW5nIG9uZSBvciBtb3JlIGJ1aWxkIHN0ZXBzLlxuICogRWFjaCBzdGFnZSBtYXBzIHRvIGEgQ0RLIFBpcGVsaW5lIHdhdmUsIHdpdGggc3RlcHMgZXhlY3V0aW5nIHdpdGhpbiB0aGUgd2F2ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFnZU9wdGlvbnMge1xuICAvKiogRGlzcGxheSBuYW1lIGZvciB0aGlzIHN0YWdlICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKiBPcHRpb25hbCBhbGlhcyB1c2VkIGZvciB3YXZlL2NvbnN0cnVjdCBJRCBnZW5lcmF0aW9uLiBEZWZhdWx0cyB0byBzdGFnZU5hbWUuICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKiBCdWlsZCBzdGVwcyB0byBleGVjdXRlIHdpdGhpbiB0aGlzIHN0YWdlICovXG4gIHJlYWRvbmx5IHN0ZXBzOiBTdGFnZVN0ZXBPcHRpb25zW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBDb2RlQnVpbGQgc3RlcCBpbiB0aGUgcGlwZWxpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQnVpbGRTdGVwT3B0aW9ucyBleHRlbmRzIFN0ZXBDdXN0b21pemF0aW9uIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIENvZGVCdWlsZCBzdGVwXG4gICAqIFNob3VsZCBiZSBkZXNjcmlwdGl2ZSBhbmQgdW5pcXVlIHdpdGhpbiB0aGUgcGlwZWxpbmVcbiAgICogQGV4YW1wbGUgJ215LW9yZy1teS1wcm9qZWN0LXN5bnRoJ1xuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVW5pcXVlSWQgaW5zdGFuY2UgZm9yIGdlbmVyYXRpbmcgdW5pcXVlIGNvbnN0cnVjdCBJRHNcbiAgICogVXNlZCBmb3IgbmV0d29yayByZXNvdXJjZSBsb29rdXBzIChWUEMsIHN1Ym5ldHMsIHNlY3VyaXR5IGdyb3VwcylcbiAgICovXG4gIHJlYWRvbmx5IHVuaXF1ZUlkOiBVbmlxdWVJZDtcblxuICAvKipcbiAgICogUGx1Z2luIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZGF0YWJhc2VcbiAgICogQ29udGFpbnMgYWxsIHRoZSBwbHVnaW4ncyBzcGVjIGRhdGEgYW5kIHJ1bnRpbWUgaW5mb3JtYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luO1xuXG4gIC8qKlxuICAgKiBDREsgc2NvcGUgdXNlZCB0byBjcmVhdGUgY29uc3RydWN0cyAoVlBDL3N1Ym5ldC9zZWN1cml0eS1ncm91cCBsb29rdXBzKS5cbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG5cbiAgLyoqXG4gICAqIElucHV0IHNvdXJjZSBmb3IgdGhpcyBzdGVwXG4gICAqIFR5cGljYWxseSB0aGUgb3V0cHV0IGZyb20gYSBwcmV2aW91cyBzdGVwIG9yIHRoZSBwaXBlbGluZSBzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IGlucHV0PzogSUZpbGVTZXRQcm9kdWNlcjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBtZXRhZGF0YSB0byBtZXJnZSB3aXRoIHBsdWdpbiBtZXRhZGF0YVxuICAgKiBXaWxsIG92ZXJyaWRlIGNvbmZsaWN0aW5nIGtleXMgZnJvbSBwbHVnaW4gbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTWV0YURhdGFUeXBlO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBDb2RlQnVpbGQgc3RlcC5cbiAgICogV2hlbiBwcm92aWRlZCwgcmVzb2x2ZXMgVlBDLCBzdWJuZXQgc2VsZWN0aW9uLCBhbmQgc2VjdXJpdHkgZ3JvdXBzXG4gICAqIHNvIHRoZSBidWlsZCBydW5zIGluc2lkZSB0aGUgc3BlY2lmaWVkIG5ldHdvcmsuXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrPzogTmV0d29ya0NvbmZpZztcblxuICAvKipcbiAgICogRmFsbGJhY2sgQ29kZUJ1aWxkIGNvbXB1dGUgdHlwZSB3aGVuIHRoZSBwbHVnaW4gZG9lc24ndCBzcGVjaWZ5IG9uZS5cbiAgICogQGRlZmF1bHQgQ29tcHV0ZVR5cGUuU01BTExcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRDb21wdXRlVHlwZT86IENka0NvbXB1dGVUeXBlO1xuXG4gIC8qKlxuICAgKiBDb2RlQnVpbGQgdGltZW91dCBpbiBtaW51dGVzLlxuICAgKiBAZGVmYXVsdCA2MCAoQVdTIENvZGVCdWlsZCBkZWZhdWx0KVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcblxuICAvKiogQWRkaXRpb25hbCBpbnB1dHMgbWFwcGVkIGJ5IGRpcmVjdG9yeSBwYXRoIChyZXNvbHZlZCBGaWxlU2V0cykgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbElucHV0cz86IFJlY29yZDxzdHJpbmcsIElGaWxlU2V0UHJvZHVjZXI+O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhcnRpZmFjdCBtYW5hZ2VyIGZvciB0cmFja2luZyBidWlsZCBvdXRwdXRzXG4gICAqIFdoZW4gcHJvdmlkZWQgYW5kIHByaW1hcnlPdXRwdXREaXJlY3RvcnkgaXMgc2V0LCB0aGUgc3RlcCB3aWxsIGJlIHJlZ2lzdGVyZWRcbiAgICovXG4gIHJlYWRvbmx5IGFydGlmYWN0TWFuYWdlcj86IEFydGlmYWN0TWFuYWdlcjtcblxuICAvKipcbiAgICogU3RhZ2UgbmFtZSBmb3IgYXJ0aWZhY3Qga2V5IGdlbmVyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU3RhZ2UgYWxpYXMgZm9yIGFydGlmYWN0IGtleSBnZW5lcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBzdGFnZUFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQbHVnaW4gYWxpYXMgZm9yIGFydGlmYWN0IGtleSBnZW5lcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5BbGlhcz86IHN0cmluZztcblxuICAvKipcbiAgICogRmFpbHVyZSBiZWhhdmlvciBmb3IgdGhpcyBzdGVwJ3MgYnVpbGQgY29tbWFuZHMuXG4gICAqIEFwcGxpZWQgYXQgc2hlbGwgbGV2ZWw6ICdmYWlsJyA9IGRlZmF1bHQsICd3YXJuJyA9IGxvZyArIGNvbnRpbnVlLCAnaWdub3JlJyA9IHx8IHRydWUuXG4gICAqL1xuICByZWFkb25seSBmYWlsdXJlQmVoYXZpb3I/OiAnZmFpbCcgfCAnd2FybicgfCAnaWdub3JlJztcblxuICAvKiogVGVuYW50IGlkZW50aWZpZXIgZm9yIHJlc29sdmluZyBwZXItb3JnIHNlY3JldHMgZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQaXBlbGluZS1sZXZlbCBjb25maWcgdXNlZCBhcyB0aGUgYHBpcGVsaW5lLipgIHNjb3BlIHdoZW4gcmVzb2x2aW5nXG4gICAqIHRlbXBsYXRlIHRva2VucyBpbnNpZGUgcGx1Z2luIHNwZWNzLiBSZXF1aXJlZCDigJQgZXZlcnkgYHt7IHBpcGVsaW5lLiogfX1gXG4gICAqIHJlZmVyZW5jZSBpbiBhIHBsdWdpbiBzcGVjIGlzIGV2YWx1YXRlZCBhZ2FpbnN0IHRoaXMgb2JqZWN0IGF0IHN5bnRoIHRpbWUuXG4gICAqXG4gICAqIENhbGxlcnMgY29uc3RydWN0aW5nIGEgc3RlcCBkaXJlY3RseSBtdXN0IHByb3ZpZGUgdGhlIHBpcGVsaW5lIGlkZW50aXR5XG4gICAqICsgbWV0YWRhdGEgKyB2YXJzIHNvIHRlbXBsYXRlIHJlc29sdXRpb24gaXMgbmV2ZXIgc2lsZW50bHkgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuIl19
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Token } from './tokenizer';
|
|
2
|
+
/**
|
|
3
|
+
* Small LRU cache for parsed token streams. Keys are caller-chosen
|
|
4
|
+
* (typically `${pluginId}:${version}:${fieldPath}`). Capacity is bounded
|
|
5
|
+
* so synth-time resolution in long-running services doesn't leak.
|
|
6
|
+
*/
|
|
7
|
+
export declare class TokenCache {
|
|
8
|
+
private readonly max;
|
|
9
|
+
private readonly map;
|
|
10
|
+
constructor(max?: number);
|
|
11
|
+
get(key: string): Token[] | undefined;
|
|
12
|
+
set(key: string, tokens: Token[]): void;
|
|
13
|
+
invalidate(key: string): void;
|
|
14
|
+
invalidatePrefix(prefix: string): void;
|
|
15
|
+
parse(key: string, source: string): Token[];
|
|
16
|
+
clear(): void;
|
|
17
|
+
get size(): number;
|
|
18
|
+
}
|
|
19
|
+
export declare const defaultTokenCache: TokenCache;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.defaultTokenCache = exports.TokenCache = void 0;
|
|
6
|
+
const tokenizer_1 = require("./tokenizer");
|
|
7
|
+
/**
|
|
8
|
+
* Small LRU cache for parsed token streams. Keys are caller-chosen
|
|
9
|
+
* (typically `${pluginId}:${version}:${fieldPath}`). Capacity is bounded
|
|
10
|
+
* so synth-time resolution in long-running services doesn't leak.
|
|
11
|
+
*/
|
|
12
|
+
class TokenCache {
|
|
13
|
+
max;
|
|
14
|
+
map = new Map();
|
|
15
|
+
constructor(max = 100) {
|
|
16
|
+
this.max = max;
|
|
17
|
+
}
|
|
18
|
+
get(key) {
|
|
19
|
+
const hit = this.map.get(key);
|
|
20
|
+
if (!hit)
|
|
21
|
+
return undefined;
|
|
22
|
+
// Refresh recency by re-inserting
|
|
23
|
+
this.map.delete(key);
|
|
24
|
+
this.map.set(key, hit);
|
|
25
|
+
return hit;
|
|
26
|
+
}
|
|
27
|
+
set(key, tokens) {
|
|
28
|
+
if (this.map.has(key))
|
|
29
|
+
this.map.delete(key);
|
|
30
|
+
this.map.set(key, tokens);
|
|
31
|
+
if (this.map.size > this.max) {
|
|
32
|
+
const oldest = this.map.keys().next().value;
|
|
33
|
+
this.map.delete(oldest);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
invalidate(key) {
|
|
37
|
+
this.map.delete(key);
|
|
38
|
+
}
|
|
39
|
+
invalidatePrefix(prefix) {
|
|
40
|
+
for (const k of Array.from(this.map.keys())) {
|
|
41
|
+
if (k.startsWith(prefix))
|
|
42
|
+
this.map.delete(k);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
parse(key, source) {
|
|
46
|
+
const hit = this.get(key);
|
|
47
|
+
if (hit)
|
|
48
|
+
return hit;
|
|
49
|
+
const tokens = (0, tokenizer_1.tokenize)(source);
|
|
50
|
+
this.set(key, tokens);
|
|
51
|
+
return tokens;
|
|
52
|
+
}
|
|
53
|
+
clear() {
|
|
54
|
+
this.map.clear();
|
|
55
|
+
}
|
|
56
|
+
get size() {
|
|
57
|
+
return this.map.size;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.TokenCache = TokenCache;
|
|
61
|
+
// Shared default cache for callers that don't want to own one.
|
|
62
|
+
exports.defaultTokenCache = new TokenCache();
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7OztBQUV0QywyQ0FBOEM7QUFFOUM7Ozs7R0FJRztBQUNILE1BQWEsVUFBVTtJQUNKLEdBQUcsQ0FBUztJQUNaLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztJQUVsRCxZQUFZLEdBQUcsR0FBRyxHQUFHO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxHQUFHLENBQUMsR0FBVztRQUNiLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDM0Isa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxHQUFHLENBQUMsR0FBVyxFQUFFLE1BQWU7UUFDOUIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFlLENBQUM7WUFDdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVztRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBYztRQUM3QixLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFXLEVBQUUsTUFBYztRQUMvQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksR0FBRztZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUEsb0JBQVEsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDdkIsQ0FBQztDQUNGO0FBbkRELGdDQW1EQztBQUVELCtEQUErRDtBQUNsRCxRQUFBLGlCQUFpQixHQUFHLElBQUksVUFBVSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgdG9rZW5pemUsIFRva2VuIH0gZnJvbSAnLi90b2tlbml6ZXInO1xuXG4vKipcbiAqIFNtYWxsIExSVSBjYWNoZSBmb3IgcGFyc2VkIHRva2VuIHN0cmVhbXMuIEtleXMgYXJlIGNhbGxlci1jaG9zZW5cbiAqICh0eXBpY2FsbHkgYCR7cGx1Z2luSWR9OiR7dmVyc2lvbn06JHtmaWVsZFBhdGh9YCkuIENhcGFjaXR5IGlzIGJvdW5kZWRcbiAqIHNvIHN5bnRoLXRpbWUgcmVzb2x1dGlvbiBpbiBsb25nLXJ1bm5pbmcgc2VydmljZXMgZG9lc24ndCBsZWFrLlxuICovXG5leHBvcnQgY2xhc3MgVG9rZW5DYWNoZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFwID0gbmV3IE1hcDxzdHJpbmcsIFRva2VuW10+KCk7XG5cbiAgY29uc3RydWN0b3IobWF4ID0gMTAwKSB7XG4gICAgdGhpcy5tYXggPSBtYXg7XG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcpOiBUb2tlbltdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBoaXQgPSB0aGlzLm1hcC5nZXQoa2V5KTtcbiAgICBpZiAoIWhpdCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAvLyBSZWZyZXNoIHJlY2VuY3kgYnkgcmUtaW5zZXJ0aW5nXG4gICAgdGhpcy5tYXAuZGVsZXRlKGtleSk7XG4gICAgdGhpcy5tYXAuc2V0KGtleSwgaGl0KTtcbiAgICByZXR1cm4gaGl0O1xuICB9XG5cbiAgc2V0KGtleTogc3RyaW5nLCB0b2tlbnM6IFRva2VuW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tYXAuaGFzKGtleSkpIHRoaXMubWFwLmRlbGV0ZShrZXkpO1xuICAgIHRoaXMubWFwLnNldChrZXksIHRva2Vucyk7XG4gICAgaWYgKHRoaXMubWFwLnNpemUgPiB0aGlzLm1heCkge1xuICAgICAgY29uc3Qgb2xkZXN0ID0gdGhpcy5tYXAua2V5cygpLm5leHQoKS52YWx1ZSBhcyBzdHJpbmc7XG4gICAgICB0aGlzLm1hcC5kZWxldGUob2xkZXN0KTtcbiAgICB9XG4gIH1cblxuICBpbnZhbGlkYXRlKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tYXAuZGVsZXRlKGtleSk7XG4gIH1cblxuICBpbnZhbGlkYXRlUHJlZml4KHByZWZpeDogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBrIG9mIEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKSkge1xuICAgICAgaWYgKGsuc3RhcnRzV2l0aChwcmVmaXgpKSB0aGlzLm1hcC5kZWxldGUoayk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2Uoa2V5OiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKTogVG9rZW5bXSB7XG4gICAgY29uc3QgaGl0ID0gdGhpcy5nZXQoa2V5KTtcbiAgICBpZiAoaGl0KSByZXR1cm4gaGl0O1xuICAgIGNvbnN0IHRva2VucyA9IHRva2VuaXplKHNvdXJjZSk7XG4gICAgdGhpcy5zZXQoa2V5LCB0b2tlbnMpO1xuICAgIHJldHVybiB0b2tlbnM7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLm1hcC5jbGVhcigpO1xuICB9XG5cbiAgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tYXAuc2l6ZTtcbiAgfVxufVxuXG4vLyBTaGFyZWQgZGVmYXVsdCBjYWNoZSBmb3IgY2FsbGVycyB0aGF0IGRvbid0IHdhbnQgdG8gb3duIG9uZS5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VG9rZW5DYWNoZSA9IG5ldyBUb2tlbkNhY2hlKCk7XG4iXX0=
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ErrorCode } from '@pipeline-builder/api-core';
|
|
2
|
+
import { SourcePosition, Token } from './tokenizer';
|
|
3
|
+
export type Scope = Record<string, unknown>;
|
|
4
|
+
export interface EvalError {
|
|
5
|
+
code: ErrorCode;
|
|
6
|
+
message: string;
|
|
7
|
+
field?: string;
|
|
8
|
+
path?: string;
|
|
9
|
+
pos?: SourcePosition;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Look up a dot-separated path inside a scope object. Returns `undefined`
|
|
13
|
+
* if any intermediate segment is missing or not an object.
|
|
14
|
+
*/
|
|
15
|
+
export declare function lookupPath(scope: Scope, path: string[]): unknown;
|
|
16
|
+
/**
|
|
17
|
+
* Resolve a token stream against a scope. Returns the resolved string.
|
|
18
|
+
* Throws `EvalError` when an unresolved path has no default filter.
|
|
19
|
+
*
|
|
20
|
+
* Coercion filters (`| number`, `| bool`, `| json`) only take effect
|
|
21
|
+
* when the template expression is the entire field — e.g.
|
|
22
|
+
* `replicas: "{{ vars.count | number }}"` yields `3` (number) while
|
|
23
|
+
* `replicas: "count={{ vars.count | number }}"` yields `"count=3"`
|
|
24
|
+
* (string, because the template is embedded in surrounding literals).
|
|
25
|
+
* Mixed-literal fields always return a string.
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolve(tokens: Token[], scope: Scope, field?: string): string | number | boolean | null | unknown[] | Record<string, unknown>;
|
|
28
|
+
/**
|
|
29
|
+
* Extract dependency paths from a token stream. Used by the topological
|
|
30
|
+
* sort pass to order resolution of self-referencing documents.
|
|
31
|
+
*/
|
|
32
|
+
export declare function dependencies(tokens: Token[]): string[];
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.lookupPath = lookupPath;
|
|
6
|
+
exports.resolve = resolve;
|
|
7
|
+
exports.dependencies = dependencies;
|
|
8
|
+
const api_core_1 = require("@pipeline-builder/api-core");
|
|
9
|
+
const RESERVED_ROOT_PATHS = new Set(['secrets']);
|
|
10
|
+
/**
|
|
11
|
+
* Look up a dot-separated path inside a scope object. Returns `undefined`
|
|
12
|
+
* if any intermediate segment is missing or not an object.
|
|
13
|
+
*/
|
|
14
|
+
function lookupPath(scope, path) {
|
|
15
|
+
let cur = scope;
|
|
16
|
+
for (const segment of path) {
|
|
17
|
+
if (cur == null || typeof cur !== 'object')
|
|
18
|
+
return undefined;
|
|
19
|
+
cur = cur[segment];
|
|
20
|
+
}
|
|
21
|
+
return cur;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Resolve a token stream against a scope. Returns the resolved string.
|
|
25
|
+
* Throws `EvalError` when an unresolved path has no default filter.
|
|
26
|
+
*
|
|
27
|
+
* Coercion filters (`| number`, `| bool`, `| json`) only take effect
|
|
28
|
+
* when the template expression is the entire field — e.g.
|
|
29
|
+
* `replicas: "{{ vars.count | number }}"` yields `3` (number) while
|
|
30
|
+
* `replicas: "count={{ vars.count | number }}"` yields `"count=3"`
|
|
31
|
+
* (string, because the template is embedded in surrounding literals).
|
|
32
|
+
* Mixed-literal fields always return a string.
|
|
33
|
+
*/
|
|
34
|
+
function resolve(tokens, scope, field) {
|
|
35
|
+
// Whole-field coercion shortcut: only apply coercion when the entire field
|
|
36
|
+
// is a single expression (no surrounding literal text).
|
|
37
|
+
if (tokens.length === 1 && tokens[0].kind === 'expr' && tokens[0].coerce) {
|
|
38
|
+
const tok = tokens[0];
|
|
39
|
+
const raw = resolveOne(tok, scope, field);
|
|
40
|
+
return applyCoercion(raw, tok.coerce, tok, field);
|
|
41
|
+
}
|
|
42
|
+
const parts = [];
|
|
43
|
+
for (const tok of tokens) {
|
|
44
|
+
if (tok.kind === 'literal') {
|
|
45
|
+
parts.push(tok.value);
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const raw = resolveOne(tok, scope, field);
|
|
49
|
+
parts.push(typeof raw === 'string' ? raw : String(raw));
|
|
50
|
+
}
|
|
51
|
+
return parts.join('');
|
|
52
|
+
}
|
|
53
|
+
/** Resolve a single expression token to its string form (no coercion). */
|
|
54
|
+
function resolveOne(tok, scope, field) {
|
|
55
|
+
const root = tok.path[0];
|
|
56
|
+
if (RESERVED_ROOT_PATHS.has(root)) {
|
|
57
|
+
throw makeEvalError({
|
|
58
|
+
code: api_core_1.ErrorCode.TEMPLATE_SECRETS_RESERVED,
|
|
59
|
+
message: `'${root}' is a reserved scope — use the plugin's 'secrets:' field instead`,
|
|
60
|
+
field,
|
|
61
|
+
path: tok.path.join('.'),
|
|
62
|
+
pos: tok.pos,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
const value = lookupPath(scope, tok.path);
|
|
66
|
+
if (value == null || value === '') {
|
|
67
|
+
if (tok.defaultValue !== undefined)
|
|
68
|
+
return tok.defaultValue;
|
|
69
|
+
throw makeEvalError({
|
|
70
|
+
code: api_core_1.ErrorCode.TEMPLATE_UNKNOWN_PATH,
|
|
71
|
+
message: `Template references unknown path '${tok.path.join('.')}' and no default provided`,
|
|
72
|
+
field,
|
|
73
|
+
path: tok.path.join('.'),
|
|
74
|
+
pos: tok.pos,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
if (typeof value === 'object') {
|
|
78
|
+
throw makeEvalError({
|
|
79
|
+
code: api_core_1.ErrorCode.TEMPLATE_TYPE_MISMATCH,
|
|
80
|
+
message: `Template path '${tok.path.join('.')}' resolved to an object; only strings/numbers/booleans are interpolatable`,
|
|
81
|
+
field,
|
|
82
|
+
path: tok.path.join('.'),
|
|
83
|
+
pos: tok.pos,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return String(value);
|
|
87
|
+
}
|
|
88
|
+
/** Apply a whole-field coercion filter to a resolved string value. */
|
|
89
|
+
function applyCoercion(raw, kind, tok, field) {
|
|
90
|
+
switch (kind) {
|
|
91
|
+
case 'number': {
|
|
92
|
+
const n = Number(raw);
|
|
93
|
+
if (!Number.isFinite(n)) {
|
|
94
|
+
throw makeEvalError({
|
|
95
|
+
code: api_core_1.ErrorCode.TEMPLATE_TYPE_MISMATCH,
|
|
96
|
+
message: `'${raw}' cannot be coerced to number at path '${tok.path.join('.')}'`,
|
|
97
|
+
field,
|
|
98
|
+
path: tok.path.join('.'),
|
|
99
|
+
pos: tok.pos,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return n;
|
|
103
|
+
}
|
|
104
|
+
case 'bool': {
|
|
105
|
+
const v = raw.trim().toLowerCase();
|
|
106
|
+
if (v === 'true' || v === '1' || v === 'yes')
|
|
107
|
+
return true;
|
|
108
|
+
if (v === 'false' || v === '0' || v === 'no' || v === '')
|
|
109
|
+
return false;
|
|
110
|
+
throw makeEvalError({
|
|
111
|
+
code: api_core_1.ErrorCode.TEMPLATE_TYPE_MISMATCH,
|
|
112
|
+
message: `'${raw}' cannot be coerced to bool at path '${tok.path.join('.')}'`,
|
|
113
|
+
field,
|
|
114
|
+
path: tok.path.join('.'),
|
|
115
|
+
pos: tok.pos,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
case 'json': {
|
|
119
|
+
try {
|
|
120
|
+
return JSON.parse(raw);
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
throw makeEvalError({
|
|
124
|
+
code: api_core_1.ErrorCode.TEMPLATE_TYPE_MISMATCH,
|
|
125
|
+
message: `'${raw}' is not valid JSON at path '${tok.path.join('.')}': ${err.message}`,
|
|
126
|
+
field,
|
|
127
|
+
path: tok.path.join('.'),
|
|
128
|
+
pos: tok.pos,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Extract dependency paths from a token stream. Used by the topological
|
|
136
|
+
* sort pass to order resolution of self-referencing documents.
|
|
137
|
+
*/
|
|
138
|
+
function dependencies(tokens) {
|
|
139
|
+
const out = [];
|
|
140
|
+
for (const tok of tokens) {
|
|
141
|
+
if (tok.kind === 'expr')
|
|
142
|
+
out.push(tok.path.join('.'));
|
|
143
|
+
}
|
|
144
|
+
return out;
|
|
145
|
+
}
|
|
146
|
+
function makeEvalError(e) {
|
|
147
|
+
const err = new Error(e.message);
|
|
148
|
+
err.name = 'TemplateEvalError';
|
|
149
|
+
err.code = e.code;
|
|
150
|
+
err.field = e.field;
|
|
151
|
+
err.path = e.path;
|
|
152
|
+
err.pos = e.pos;
|
|
153
|
+
return err;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlL2V2YWx1YXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7QUFxQnRDLGdDQU9DO0FBYUQsMEJBdUJDO0FBMEZELG9DQU1DO0FBOUpELHlEQUF1RDtBQWF2RCxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUVqRDs7O0dBR0c7QUFDSCxTQUFnQixVQUFVLENBQUMsS0FBWSxFQUFFLElBQWM7SUFDckQsSUFBSSxHQUFHLEdBQVksS0FBSyxDQUFDO0lBQ3pCLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7UUFDM0IsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUM3RCxHQUFHLEdBQUksR0FBK0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLE9BQU8sQ0FDckIsTUFBZSxFQUNmLEtBQVksRUFDWixLQUFjO0lBRWQsMkVBQTJFO0lBQzNFLHdEQUF3RDtJQUN4RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUUsQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzRSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFzQyxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFDLE9BQU8sYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFH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QyxLQUFLLENBQUM7SUFDcEIsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNoQixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgQ29lcmNlS2luZCwgU291cmNlUG9zaXRpb24sIFRva2VuIH0gZnJvbSAnLi90b2tlbml6ZXInO1xuXG5leHBvcnQgdHlwZSBTY29wZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2YWxFcnJvciB7XG4gIGNvZGU6IEVycm9yQ29kZTtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBmaWVsZD86IHN0cmluZztcbiAgcGF0aD86IHN0cmluZztcbiAgcG9zPzogU291cmNlUG9zaXRpb247XG59XG5cbmNvbnN0IFJFU0VSVkVEX1JPT1RfUEFUSFMgPSBuZXcgU2V0KFsnc2VjcmV0cyddKTtcblxuLyoqXG4gKiBMb29rIHVwIGEgZG90LXNlcGFyYXRlZCBwYXRoIGluc2lkZSBhIHNjb3BlIG9iamVjdC4gUmV0dXJucyBgdW5kZWZpbmVkYFxuICogaWYgYW55IGludGVybWVkaWF0ZSBzZWdtZW50IGlzIG1pc3Npbmcgb3Igbm90IGFuIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvb2t1cFBhdGgoc2NvcGU6IFNjb3BlLCBwYXRoOiBzdHJpbmdbXSk6IHVua25vd24ge1xuICBsZXQgY3VyOiB1bmtub3duID0gc2NvcGU7XG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBwYXRoKSB7XG4gICAgaWYgKGN1ciA9PSBudWxsIHx8IHR5cGVvZiBjdXIgIT09ICdvYmplY3QnKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGN1ciA9IChjdXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3NlZ21lbnRdO1xuICB9XG4gIHJldHVybiBjdXI7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHRva2VuIHN0cmVhbSBhZ2FpbnN0IGEgc2NvcGUuIFJldHVybnMgdGhlIHJlc29sdmVkIHN0cmluZy5cbiAqIFRocm93cyBgRXZhbEVycm9yYCB3aGVuIGFuIHVucmVzb2x2ZWQgcGF0aCBoYXMgbm8gZGVmYXVsdCBmaWx0ZXIuXG4gKlxuICogQ29lcmNpb24gZmlsdGVycyAoYHwgbnVtYmVyYCwgYHwgYm9vbGAsIGB8IGpzb25gKSBvbmx5IHRha2UgZWZmZWN0XG4gKiB3aGVuIHRoZSB0ZW1wbGF0ZSBleHByZXNzaW9uIGlzIHRoZSBlbnRpcmUgZmllbGQg4oCUIGUuZy5cbiAqIGByZXBsaWNhczogXCJ7eyB2YXJzLmNvdW50IHwgbnVtYmVyIH19XCJgIHlpZWxkcyBgM2AgKG51bWJlcikgd2hpbGVcbiAqIGByZXBsaWNhczogXCJjb3VudD17eyB2YXJzLmNvdW50IHwgbnVtYmVyIH19XCJgIHlpZWxkcyBgXCJjb3VudD0zXCJgXG4gKiAoc3RyaW5nLCBiZWNhdXNlIHRoZSB0ZW1wbGF0ZSBpcyBlbWJlZGRlZCBpbiBzdXJyb3VuZGluZyBsaXRlcmFscykuXG4gKiBNaXhlZC1saXRlcmFsIGZpZWxkcyBhbHdheXMgcmV0dXJuIGEgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShcbiAgdG9rZW5zOiBUb2tlbltdLFxuICBzY29wZTogU2NvcGUsXG4gIGZpZWxkPzogc3RyaW5nLFxuKTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmtub3duW10gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIC8vIFdob2xlLWZpZWxkIGNvZXJjaW9uIHNob3J0Y3V0OiBvbmx5IGFwcGx5IGNvZXJjaW9uIHdoZW4gdGhlIGVudGlyZSBmaWVsZFxuICAvLyBpcyBhIHNpbmdsZSBleHByZXNzaW9uIChubyBzdXJyb3VuZGluZyBsaXRlcmFsIHRleHQpLlxuICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMSAmJiB0b2tlbnNbMF0hLmtpbmQgPT09ICdleHByJyAmJiB0b2tlbnNbMF0hLmNvZXJjZSkge1xuICAgIGNvbnN0IHRvayA9IHRva2Vuc1swXSEgYXMgRXh0cmFjdDxUb2tlbiwgeyBraW5kOiAnZXhwcicgfT47XG4gICAgY29uc3QgcmF3ID0gcmVzb2x2ZU9uZSh0b2ssIHNjb3BlLCBmaWVsZCk7XG4gICAgcmV0dXJuIGFwcGx5Q29lcmNpb24ocmF3LCB0b2suY29lcmNlISwgdG9rLCBmaWVsZCk7XG4gIH1cblxuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCB0b2sgb2YgdG9rZW5zKSB7XG4gICAgaWYgKHRvay5raW5kID09PSAnbGl0ZXJhbCcpIHtcbiAgICAgIHBhcnRzLnB1c2godG9rLnZhbHVlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCByYXcgPSByZXNvbHZlT25lKHRvaywgc2NvcGUsIGZpZWxkKTtcbiAgICBwYXJ0cy5wdXNoKHR5cGVvZiByYXcgPT09ICdzdHJpbmcnID8gcmF3IDogU3RyaW5nKHJhdykpO1xuICB9XG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbn1cblxuLyoqIFJlc29sdmUgYSBzaW5nbGUgZXhwcmVzc2lvbiB0b2tlbiB0byBpdHMgc3RyaW5nIGZvcm0gKG5vIGNvZXJjaW9uKS4gKi9cbmZ1bmN0aW9uIHJlc29sdmVPbmUodG9rOiBFeHRyYWN0PFRva2VuLCB7IGtpbmQ6ICdleHByJyB9Piwgc2NvcGU6IFNjb3BlLCBmaWVsZD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJvb3QgPSB0b2sucGF0aFswXSE7XG4gIGlmIChSRVNFUlZFRF9ST09UX1BBVEhTLmhhcyhyb290KSkge1xuICAgIHRocm93IG1ha2VFdmFsRXJyb3Ioe1xuICAgICAgY29kZTogRXJyb3JDb2RlLlRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRUQsXG4gICAgICBtZXNzYWdlOiBgJyR7cm9vdH0nIGlzIGEgcmVzZXJ2ZWQgc2NvcGUg4oCUIHVzZSB0aGUgcGx1Z2luJ3MgJ3NlY3JldHM6JyBmaWVsZCBpbnN0ZWFkYCxcbiAgICAgIGZpZWxkLFxuICAgICAgcGF0aDogdG9rLnBhdGguam9pbignLicpLFxuICAgICAgcG9zOiB0b2sucG9zLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IHZhbHVlID0gbG9va3VwUGF0aChzY29wZSwgdG9rLnBhdGgpO1xuICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICBpZiAodG9rLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdG9rLmRlZmF1bHRWYWx1ZTtcbiAgICB0aHJvdyBtYWtlRXZhbEVycm9yKHtcbiAgICAgIGNvZGU6IEVycm9yQ29kZS5URU1QTEFURV9VTktOT1dOX1BBVEgsXG4gICAgICBtZXNzYWdlOiBgVGVtcGxhdGUgcmVmZXJlbmNlcyB1bmtub3duIHBhdGggJyR7dG9rLnBhdGguam9pbignLicpfScgYW5kIG5vIGRlZmF1bHQgcHJvdmlkZWRgLFxuICAgICAgZmllbGQsXG4gICAgICBwYXRoOiB0b2sucGF0aC5qb2luKCcuJyksXG4gICAgICBwb3M6IHRvay5wb3MsXG4gICAgfSk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBtYWtlRXZhbEVycm9yKHtcbiAgICAgIGNvZGU6IEVycm9yQ29kZS5URU1QTEFURV9UWVBFX01JU01BVENILFxuICAgICAgbWVzc2FnZTogYFRlbXBsYXRlIHBhdGggJyR7dG9rLnBhdGguam9pbignLicpfScgcmVzb2x2ZWQgdG8gYW4gb2JqZWN0OyBvbmx5IHN0cmluZ3MvbnVtYmVycy9ib29sZWFucyBhcmUgaW50ZXJwb2xhdGFibGVgLFxuICAgICAgZmllbGQsXG4gICAgICBwYXRoOiB0b2sucGF0aC5qb2luKCcuJyksXG4gICAgICBwb3M6IHRvay5wb3MsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbi8qKiBBcHBseSBhIHdob2xlLWZpZWxkIGNvZXJjaW9uIGZpbHRlciB0byBhIHJlc29sdmVkIHN0cmluZyB2YWx1ZS4gKi9cbmZ1bmN0aW9uIGFwcGx5Q29lcmNpb24oXG4gIHJhdzogc3RyaW5nLFxuICBraW5kOiBDb2VyY2VLaW5kLFxuICB0b2s6IEV4dHJhY3Q8VG9rZW4sIHsga2luZDogJ2V4cHInIH0+LFxuICBmaWVsZD86IHN0cmluZyxcbik6IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgc3RyaW5nIHwgdW5rbm93bltdIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlICdudW1iZXInOiB7XG4gICAgICBjb25zdCBuID0gTnVtYmVyKHJhdyk7XG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuKSkge1xuICAgICAgICB0aHJvdyBtYWtlRXZhbEVycm9yKHtcbiAgICAgICAgICBjb2RlOiBFcnJvckNvZGUuVEVNUExBVEVfVFlQRV9NSVNNQVRDSCxcbiAgICAgICAgICBtZXNzYWdlOiBgJyR7cmF3fScgY2Fubm90IGJlIGNvZXJjZWQgdG8gbnVtYmVyIGF0IHBhdGggJyR7dG9rLnBhdGguam9pbignLicpfSdgLFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIHBhdGg6IHRvay5wYXRoLmpvaW4oJy4nKSxcbiAgICAgICAgICBwb3M6IHRvay5wb3MsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG47XG4gICAgfVxuICAgIGNhc2UgJ2Jvb2wnOiB7XG4gICAgICBjb25zdCB2ID0gcmF3LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHYgPT09ICd0cnVlJyB8fCB2ID09PSAnMScgfHwgdiA9PT0gJ3llcycpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHYgPT09ICdmYWxzZScgfHwgdiA9PT0gJzAnIHx8IHYgPT09ICdubycgfHwgdiA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICAgIHRocm93IG1ha2VFdmFsRXJyb3Ioe1xuICAgICAgICBjb2RlOiBFcnJvckNvZGUuVEVNUExBVEVfVFlQRV9NSVNNQVRDSCxcbiAgICAgICAgbWVzc2FnZTogYCcke3Jhd30nIGNhbm5vdCBiZSBjb2VyY2VkIHRvIGJvb2wgYXQgcGF0aCAnJHt0b2sucGF0aC5qb2luKCcuJyl9J2AsXG4gICAgICAgIGZpZWxkLFxuICAgICAgICBwYXRoOiB0b2sucGF0aC5qb2luKCcuJyksXG4gICAgICAgIHBvczogdG9rLnBvcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjYXNlICdqc29uJzoge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmF3KSBhcyBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVua25vd25bXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG1ha2VFdmFsRXJyb3Ioe1xuICAgICAgICAgIGNvZGU6IEVycm9yQ29kZS5URU1QTEFURV9UWVBFX01JU01BVENILFxuICAgICAgICAgIG1lc3NhZ2U6IGAnJHtyYXd9JyBpcyBub3QgdmFsaWQgSlNPTiBhdCBwYXRoICcke3Rvay5wYXRoLmpvaW4oJy4nKX0nOiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCxcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBwYXRoOiB0b2sucGF0aC5qb2luKCcuJyksXG4gICAgICAgICAgcG9zOiB0b2sucG9zLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRyYWN0IGRlcGVuZGVuY3kgcGF0aHMgZnJvbSBhIHRva2VuIHN0cmVhbS4gVXNlZCBieSB0aGUgdG9wb2xvZ2ljYWxcbiAqIHNvcnQgcGFzcyB0byBvcmRlciByZXNvbHV0aW9uIG9mIHNlbGYtcmVmZXJlbmNpbmcgZG9jdW1lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVwZW5kZW5jaWVzKHRva2VuczogVG9rZW5bXSk6IHN0cmluZ1tdIHtcbiAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHRvayBvZiB0b2tlbnMpIHtcbiAgICBpZiAodG9rLmtpbmQgPT09ICdleHByJykgb3V0LnB1c2godG9rLnBhdGguam9pbignLicpKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBtYWtlRXZhbEVycm9yKGU6IEV2YWxFcnJvcik6IEVycm9yICYgRXZhbEVycm9yIHtcbiAgY29uc3QgZXJyID0gbmV3IEVycm9yKGUubWVzc2FnZSkgYXMgRXJyb3IgJiBFdmFsRXJyb3I7XG4gIGVyci5uYW1lID0gJ1RlbXBsYXRlRXZhbEVycm9yJztcbiAgZXJyLmNvZGUgPSBlLmNvZGU7XG4gIGVyci5maWVsZCA9IGUuZmllbGQ7XG4gIGVyci5wYXRoID0gZS5wYXRoO1xuICBlcnIucG9zID0gZS5wb3M7XG4gIHJldHVybiBlcnI7XG59XG4iXX0=
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export { tokenize, hasTemplate, TokenizerError, MAX_FIELD_SIZE_BYTES, MAX_PATH_DEPTH, MAX_IDENTIFIER_LENGTH, type Token, type LiteralToken, type ExprToken, type SourcePosition, } from './tokenizer';
|
|
2
|
+
export { resolve, lookupPath, dependencies, type Scope, type EvalError, } from './evaluator';
|
|
3
|
+
export { walkAndBind, type WalkEntry, type FieldPredicate, } from './walker';
|
|
4
|
+
export { topoSort, type TopoNode, type TopoResult, } from './topo-sort';
|
|
5
|
+
export { TokenCache, defaultTokenCache, } from './cache';
|
|
6
|
+
export { validateTemplates, detectCycles, allowedScopeRoots, type TemplateError, type ValidationResult, } from './validate';
|
|
7
|
+
export { recordResolution, templateResolutionsTotal, templateResolutionDurationMs, } from './metrics';
|
|
8
|
+
import { ErrorCode } from '@pipeline-builder/api-core';
|
|
9
|
+
import { type Scope } from './evaluator';
|
|
10
|
+
import { type FieldPredicate } from './walker';
|
|
11
|
+
export interface ResolveResult {
|
|
12
|
+
errors: Array<{
|
|
13
|
+
code: ErrorCode;
|
|
14
|
+
message: string;
|
|
15
|
+
field?: string;
|
|
16
|
+
path?: string;
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolve all templates inside `doc` by mutating string fields in place.
|
|
21
|
+
* `doc` is treated as opaque — only string fields that match `isTemplatable`
|
|
22
|
+
* are rewritten. Returns collected errors (empty array on success).
|
|
23
|
+
*
|
|
24
|
+
* `docType` is used for metrics; pass 'pipeline' or 'plugin'.
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolveTemplates<T extends object>(doc: T, scope: Scope, isTemplatable: FieldPredicate, docType?: 'pipeline' | 'plugin'): ResolveResult;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve a self-referencing document (e.g. pipeline.json where
|
|
29
|
+
* metadata fields reference each other). Topologically orders the
|
|
30
|
+
* resolution so dependencies come first. Mutates `doc` in place.
|
|
31
|
+
*
|
|
32
|
+
* `fieldToScopePath` maps each field (e.g. `metadata.env`) to the scope
|
|
33
|
+
* path it populates (typically the same, sans any array indices).
|
|
34
|
+
*/
|
|
35
|
+
export declare function resolveSelfReferencing<T extends object>(doc: T, scope: Scope, isTemplatable: FieldPredicate, fieldToScopePath: (field: string) => string | null, docType?: 'pipeline' | 'plugin'): ResolveResult;
|
|
36
|
+
/**
|
|
37
|
+
* Inline round-trip helper — parses and resolves a single string against
|
|
38
|
+
* a scope. Returns a string unless a whole-field coercion filter was
|
|
39
|
+
* used (in which case the native type from `| number`, `| bool`, or
|
|
40
|
+
* `| json` is returned).
|
|
41
|
+
*/
|
|
42
|
+
export declare function resolveString(source: string, scope: Scope): string | number | boolean | null | unknown[] | Record<string, unknown>;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.templateResolutionDurationMs = exports.templateResolutionsTotal = exports.recordResolution = exports.allowedScopeRoots = exports.detectCycles = exports.validateTemplates = exports.defaultTokenCache = exports.TokenCache = exports.topoSort = exports.walkAndBind = exports.dependencies = exports.lookupPath = exports.resolve = exports.MAX_IDENTIFIER_LENGTH = exports.MAX_PATH_DEPTH = exports.MAX_FIELD_SIZE_BYTES = exports.TokenizerError = exports.hasTemplate = exports.tokenize = void 0;
|
|
6
|
+
exports.resolveTemplates = resolveTemplates;
|
|
7
|
+
exports.resolveSelfReferencing = resolveSelfReferencing;
|
|
8
|
+
exports.resolveString = resolveString;
|
|
9
|
+
var tokenizer_1 = require("./tokenizer");
|
|
10
|
+
Object.defineProperty(exports, "tokenize", { enumerable: true, get: function () { return tokenizer_1.tokenize; } });
|
|
11
|
+
Object.defineProperty(exports, "hasTemplate", { enumerable: true, get: function () { return tokenizer_1.hasTemplate; } });
|
|
12
|
+
Object.defineProperty(exports, "TokenizerError", { enumerable: true, get: function () { return tokenizer_1.TokenizerError; } });
|
|
13
|
+
Object.defineProperty(exports, "MAX_FIELD_SIZE_BYTES", { enumerable: true, get: function () { return tokenizer_1.MAX_FIELD_SIZE_BYTES; } });
|
|
14
|
+
Object.defineProperty(exports, "MAX_PATH_DEPTH", { enumerable: true, get: function () { return tokenizer_1.MAX_PATH_DEPTH; } });
|
|
15
|
+
Object.defineProperty(exports, "MAX_IDENTIFIER_LENGTH", { enumerable: true, get: function () { return tokenizer_1.MAX_IDENTIFIER_LENGTH; } });
|
|
16
|
+
var evaluator_1 = require("./evaluator");
|
|
17
|
+
Object.defineProperty(exports, "resolve", { enumerable: true, get: function () { return evaluator_1.resolve; } });
|
|
18
|
+
Object.defineProperty(exports, "lookupPath", { enumerable: true, get: function () { return evaluator_1.lookupPath; } });
|
|
19
|
+
Object.defineProperty(exports, "dependencies", { enumerable: true, get: function () { return evaluator_1.dependencies; } });
|
|
20
|
+
var walker_1 = require("./walker");
|
|
21
|
+
Object.defineProperty(exports, "walkAndBind", { enumerable: true, get: function () { return walker_1.walkAndBind; } });
|
|
22
|
+
var topo_sort_1 = require("./topo-sort");
|
|
23
|
+
Object.defineProperty(exports, "topoSort", { enumerable: true, get: function () { return topo_sort_1.topoSort; } });
|
|
24
|
+
var cache_1 = require("./cache");
|
|
25
|
+
Object.defineProperty(exports, "TokenCache", { enumerable: true, get: function () { return cache_1.TokenCache; } });
|
|
26
|
+
Object.defineProperty(exports, "defaultTokenCache", { enumerable: true, get: function () { return cache_1.defaultTokenCache; } });
|
|
27
|
+
var validate_1 = require("./validate");
|
|
28
|
+
Object.defineProperty(exports, "validateTemplates", { enumerable: true, get: function () { return validate_1.validateTemplates; } });
|
|
29
|
+
Object.defineProperty(exports, "detectCycles", { enumerable: true, get: function () { return validate_1.detectCycles; } });
|
|
30
|
+
Object.defineProperty(exports, "allowedScopeRoots", { enumerable: true, get: function () { return validate_1.allowedScopeRoots; } });
|
|
31
|
+
var metrics_1 = require("./metrics");
|
|
32
|
+
Object.defineProperty(exports, "recordResolution", { enumerable: true, get: function () { return metrics_1.recordResolution; } });
|
|
33
|
+
Object.defineProperty(exports, "templateResolutionsTotal", { enumerable: true, get: function () { return metrics_1.templateResolutionsTotal; } });
|
|
34
|
+
Object.defineProperty(exports, "templateResolutionDurationMs", { enumerable: true, get: function () { return metrics_1.templateResolutionDurationMs; } });
|
|
35
|
+
// -- Convenience: high-level resolve() that walks + resolves + measures
|
|
36
|
+
const api_core_1 = require("@pipeline-builder/api-core");
|
|
37
|
+
const evaluator_2 = require("./evaluator");
|
|
38
|
+
const metrics_2 = require("./metrics");
|
|
39
|
+
const tokenizer_2 = require("./tokenizer");
|
|
40
|
+
const topo_sort_2 = require("./topo-sort");
|
|
41
|
+
const walker_2 = require("./walker");
|
|
42
|
+
/**
|
|
43
|
+
* Resolve all templates inside `doc` by mutating string fields in place.
|
|
44
|
+
* `doc` is treated as opaque — only string fields that match `isTemplatable`
|
|
45
|
+
* are rewritten. Returns collected errors (empty array on success).
|
|
46
|
+
*
|
|
47
|
+
* `docType` is used for metrics; pass 'pipeline' or 'plugin'.
|
|
48
|
+
*/
|
|
49
|
+
function resolveTemplates(doc, scope, isTemplatable, docType = 'plugin') {
|
|
50
|
+
const start = Date.now();
|
|
51
|
+
const errors = [];
|
|
52
|
+
const entries = (0, walker_2.walkAndBind)(doc, isTemplatable);
|
|
53
|
+
let success = true;
|
|
54
|
+
for (const entry of entries) {
|
|
55
|
+
try {
|
|
56
|
+
const value = (0, evaluator_2.resolve)(entry.tokens, scope, entry.field);
|
|
57
|
+
entry.set(value);
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
success = false;
|
|
61
|
+
const e = err;
|
|
62
|
+
errors.push({
|
|
63
|
+
code: e.code ?? api_core_1.ErrorCode.TEMPLATE_PARSE_ERROR,
|
|
64
|
+
message: e.message,
|
|
65
|
+
field: entry.field,
|
|
66
|
+
path: e.path,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
(0, metrics_2.recordResolution)(docType, Date.now() - start, success);
|
|
71
|
+
return { errors };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Resolve a self-referencing document (e.g. pipeline.json where
|
|
75
|
+
* metadata fields reference each other). Topologically orders the
|
|
76
|
+
* resolution so dependencies come first. Mutates `doc` in place.
|
|
77
|
+
*
|
|
78
|
+
* `fieldToScopePath` maps each field (e.g. `metadata.env`) to the scope
|
|
79
|
+
* path it populates (typically the same, sans any array indices).
|
|
80
|
+
*/
|
|
81
|
+
function resolveSelfReferencing(doc, scope, isTemplatable, fieldToScopePath, docType = 'pipeline') {
|
|
82
|
+
const start = Date.now();
|
|
83
|
+
const entries = (0, walker_2.walkAndBind)(doc, isTemplatable);
|
|
84
|
+
// Build topo nodes keyed by target scope path
|
|
85
|
+
const nodes = entries
|
|
86
|
+
.map(e => {
|
|
87
|
+
const key = fieldToScopePath(e.field);
|
|
88
|
+
if (!key)
|
|
89
|
+
return null;
|
|
90
|
+
const deps = [];
|
|
91
|
+
for (const t of e.tokens)
|
|
92
|
+
if (t.kind === 'expr')
|
|
93
|
+
deps.push(t.path.join('.'));
|
|
94
|
+
return { key, deps, entry: e };
|
|
95
|
+
})
|
|
96
|
+
.filter((n) => n !== null);
|
|
97
|
+
const { ordered, cycles } = (0, topo_sort_2.topoSort)(nodes.map(n => ({ key: n.key, deps: n.deps })));
|
|
98
|
+
const errors = [];
|
|
99
|
+
if (cycles.length) {
|
|
100
|
+
for (const c of cycles) {
|
|
101
|
+
errors.push({
|
|
102
|
+
code: api_core_1.ErrorCode.TEMPLATE_CYCLE,
|
|
103
|
+
message: `Template cycle detected: ${c.join(' -> ')}`,
|
|
104
|
+
path: c.join(' -> '),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
(0, metrics_2.recordResolution)(docType, Date.now() - start, false);
|
|
108
|
+
return { errors };
|
|
109
|
+
}
|
|
110
|
+
// Resolve in topo order; multiple entries may share a scope key (e.g. one
|
|
111
|
+
// pipeline field could map to the same scope path — unlikely here), so
|
|
112
|
+
// iterate all entries whose key == ordered[i].
|
|
113
|
+
const byKey = new Map();
|
|
114
|
+
for (const n of nodes) {
|
|
115
|
+
const list = byKey.get(n.key) ?? [];
|
|
116
|
+
list.push(n);
|
|
117
|
+
byKey.set(n.key, list);
|
|
118
|
+
}
|
|
119
|
+
let success = true;
|
|
120
|
+
for (const key of ordered) {
|
|
121
|
+
for (const n of byKey.get(key) ?? []) {
|
|
122
|
+
try {
|
|
123
|
+
const value = (0, evaluator_2.resolve)(n.entry.tokens, scope, n.entry.field);
|
|
124
|
+
n.entry.set(value);
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
success = false;
|
|
128
|
+
const e = err;
|
|
129
|
+
errors.push({
|
|
130
|
+
code: e.code ?? api_core_1.ErrorCode.TEMPLATE_PARSE_ERROR,
|
|
131
|
+
message: e.message,
|
|
132
|
+
field: n.entry.field,
|
|
133
|
+
path: e.path,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
(0, metrics_2.recordResolution)(docType, Date.now() - start, success);
|
|
139
|
+
return { errors };
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Inline round-trip helper — parses and resolves a single string against
|
|
143
|
+
* a scope. Returns a string unless a whole-field coercion filter was
|
|
144
|
+
* used (in which case the native type from `| number`, `| bool`, or
|
|
145
|
+
* `| json` is returned).
|
|
146
|
+
*/
|
|
147
|
+
function resolveString(source, scope) {
|
|
148
|
+
if (!(0, tokenizer_2.hasTemplate)(source))
|
|
149
|
+
return source;
|
|
150
|
+
const tokens = (0, tokenizer_2.tokenize)(source);
|
|
151
|
+
return (0, evaluator_2.resolve)(tokens, scope);
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7OztBQTBFdEMsNENBMkJDO0FBVUQsd0RBZ0VDO0FBUUQsc0NBT0M7QUE1TEQseUNBV3FCO0FBVm5CLHFHQUFBLFFBQVEsT0FBQTtBQUNSLHdHQUFBLFdBQVcsT0FBQTtBQUNYLDJHQUFBLGNBQWMsT0FBQTtBQUNkLGlIQUFBLG9CQUFvQixPQUFBO0FBQ3BCLDJHQUFBLGNBQWMsT0FBQTtBQUNkLGtIQUFBLHFCQUFxQixPQUFBO0FBT3ZCLHlDQU1xQjtBQUxuQixvR0FBQSxPQUFPLE9BQUE7QUFDUCx1R0FBQSxVQUFVLE9BQUE7QUFDVix5R0FBQSxZQUFZLE9BQUE7QUFLZCxtQ0FJa0I7QUFIaEIscUdBQUEsV0FBVyxPQUFBO0FBS2IseUNBSXFCO0FBSG5CLHFHQUFBLFFBQVEsT0FBQTtBQUtWLGlDQUdpQjtBQUZmLG1HQUFBLFVBQVUsT0FBQTtBQUNWLDBHQUFBLGlCQUFpQixPQUFBO0FBR25CLHVDQU1vQjtBQUxsQiw2R0FBQSxpQkFBaUIsT0FBQTtBQUNqQix3R0FBQSxZQUFZLE9BQUE7QUFDWiw2R0FBQSxpQkFBaUIsT0FBQTtBQUtuQixxQ0FJbUI7QUFIakIsMkdBQUEsZ0JBQWdCLE9BQUE7QUFDaEIsbUhBQUEsd0JBQXdCLE9BQUE7QUFDeEIsdUhBQUEsNEJBQTRCLE9BQUE7QUFHOUIsd0VBQXdFO0FBRXhFLHlEQUF1RDtBQUN2RCwyQ0FBc0U7QUFDdEUsdUNBQTZDO0FBQzdDLDJDQUEyRDtBQUMzRCwyQ0FBdUM7QUFDdkMscUNBQTREO0FBTTVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGdCQUFnQixDQUM5QixHQUFNLEVBQ04sS0FBWSxFQUNaLGFBQTZCLEVBQzdCLFVBQWlDLFFBQVE7SUFFekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcs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Q3JCLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxHQUFHLEdBQWtELENBQUM7Z0JBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ1YsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksb0JBQVMsQ0FBQyxvQkFBb0I7b0JBQzlDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztvQkFDbEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSztvQkFDcEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO2lCQUNiLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUEsMEJBQWdCLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGFBQWEsQ0FDM0IsTUFBYyxFQUNkLEtBQVk7SUFFWixJQUFJLENBQUMsSUFBQSx1QkFBVyxFQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ3hDLE1BQU0sTUFBTSxHQUFZLElBQUEsb0JBQVEsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxPQUFPLElBQUEsbUJBQWdCLEVBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuZXhwb3J0IHtcbiAgdG9rZW5pemUsXG4gIGhhc1RlbXBsYXRlLFxuICBUb2tlbml6ZXJFcnJvcixcbiAgTUFYX0ZJRUxEX1NJWkVfQllURVMsXG4gIE1BWF9QQVRIX0RFUFRILFxuICBNQVhfSURFTlRJRklFUl9MRU5HVEgsXG4gIHR5cGUgVG9rZW4sXG4gIHR5cGUgTGl0ZXJhbFRva2VuLFxuICB0eXBlIEV4cHJUb2tlbixcbiAgdHlwZSBTb3VyY2VQb3NpdGlvbixcbn0gZnJvbSAnLi90b2tlbml6ZXInO1xuXG5leHBvcnQge1xuICByZXNvbHZlLFxuICBsb29rdXBQYXRoLFxuICBkZXBlbmRlbmNpZXMsXG4gIHR5cGUgU2NvcGUsXG4gIHR5cGUgRXZhbEVycm9yLFxufSBmcm9tICcuL2V2YWx1YXRvcic7XG5cbmV4cG9ydCB7XG4gIHdhbGtBbmRCaW5kLFxuICB0eXBlIFdhbGtFbnRyeSxcbiAgdHlwZSBGaWVsZFByZWRpY2F0ZSxcbn0gZnJvbSAnLi93YWxrZXInO1xuXG5leHBvcnQge1xuICB0b3BvU29ydCxcbiAgdHlwZSBUb3BvTm9kZSxcbiAgdHlwZSBUb3BvUmVzdWx0LFxufSBmcm9tICcuL3RvcG8tc29ydCc7XG5cbmV4cG9ydCB7XG4gIFRva2VuQ2FjaGUsXG4gIGRlZmF1bHRUb2tlbkNhY2hlLFxufSBmcm9tICcuL2NhY2hlJztcblxuZXhwb3J0IHtcbiAgdmFsaWRhdGVUZW1wbGF0ZXMsXG4gIGRldGVjdEN5Y2xlcyxcbiAgYWxsb3dlZFNjb3BlUm9vdHMsXG4gIHR5cGUgVGVtcGxhdGVFcnJvcixcbiAgdHlwZSBWYWxpZGF0aW9uUmVzdWx0LFxufSBmcm9tICcuL3ZhbGlkYXRlJztcblxuZXhwb3J0IHtcbiAgcmVjb3JkUmVzb2x1dGlvbixcbiAgdGVtcGxhdGVSZXNvbHV0aW9uc1RvdGFsLFxuICB0ZW1wbGF0ZVJlc29sdXRpb25EdXJhdGlvbk1zLFxufSBmcm9tICcuL21ldHJpY3MnO1xuXG4vLyAtLSBDb252ZW5pZW5jZTogaGlnaC1sZXZlbCByZXNvbHZlKCkgdGhhdCB3YWxrcyArIHJlc29sdmVzICsgbWVhc3VyZXNcblxuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgcmVzb2x2ZSBhcyBldmFsdWF0b3JSZXNvbHZlLCB0eXBlIFNjb3BlIH0gZnJvbSAnLi9ldmFsdWF0b3InO1xuaW1wb3J0IHsgcmVjb3JkUmVzb2x1dGlvbiB9IGZyb20gJy4vbWV0cmljcyc7XG5pbXBvcnQgeyBoYXNUZW1wbGF0ZSwgdG9rZW5pemUsIFRva2VuIH0gZnJvbSAnLi90b2tlbml6ZXInO1xuaW1wb3J0IHsgdG9wb1NvcnQgfSBmcm9tICcuL3RvcG8tc29ydCc7XG5pbXBvcnQgeyB3YWxrQW5kQmluZCwgdHlwZSBGaWVsZFByZWRpY2F0ZSB9IGZyb20gJy4vd2Fsa2VyJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlUmVzdWx0IHtcbiAgZXJyb3JzOiBBcnJheTx7IGNvZGU6IEVycm9yQ29kZTsgbWVzc2FnZTogc3RyaW5nOyBmaWVsZD86IHN0cmluZzsgcGF0aD86IHN0cmluZyB9Pjtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGFsbCB0ZW1wbGF0ZXMgaW5zaWRlIGBkb2NgIGJ5IG11dGF0aW5nIHN0cmluZyBmaWVsZHMgaW4gcGxhY2UuXG4gKiBgZG9jYCBpcyB0cmVhdGVkIGFzIG9wYXF1ZSDigJQgb25seSBzdHJpbmcgZmllbGRzIHRoYXQgbWF0Y2ggYGlzVGVtcGxhdGFibGVgXG4gKiBhcmUgcmV3cml0dGVuLiBSZXR1cm5zIGNvbGxlY3RlZCBlcnJvcnMgKGVtcHR5IGFycmF5IG9uIHN1Y2Nlc3MpLlxuICpcbiAqIGBkb2NUeXBlYCBpcyB1c2VkIGZvciBtZXRyaWNzOyBwYXNzICdwaXBlbGluZScgb3IgJ3BsdWdpbicuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVGVtcGxhdGVzPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICBkb2M6IFQsXG4gIHNjb3BlOiBTY29wZSxcbiAgaXNUZW1wbGF0YWJsZTogRmllbGRQcmVkaWNhdGUsXG4gIGRvY1R5cGU6ICdwaXBlbGluZScgfCAncGx1Z2luJyA9ICdwbHVnaW4nLFxuKTogUmVzb2x2ZVJlc3VsdCB7XG4gIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZXJyb3JzOiBSZXNvbHZlUmVzdWx0WydlcnJvcnMnXSA9IFtdO1xuICBjb25zdCBlbnRyaWVzID0gd2Fsa0FuZEJpbmQoZG9jLCBpc1RlbXBsYXRhYmxlKTtcbiAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsdWUgPSBldmFsdWF0b3JSZXNvbHZlKGVudHJ5LnRva2Vucywgc2NvcGUsIGVudHJ5LmZpZWxkKTtcbiAgICAgIGVudHJ5LnNldCh2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzdWNjZXNzID0gZmFsc2U7XG4gICAgICBjb25zdCBlID0gZXJyIGFzIEVycm9yICYgeyBjb2RlPzogRXJyb3JDb2RlOyBwYXRoPzogc3RyaW5nIH07XG4gICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgIGNvZGU6IGUuY29kZSA/PyBFcnJvckNvZGUuVEVNUExBVEVfUEFSU0VfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGUubWVzc2FnZSxcbiAgICAgICAgZmllbGQ6IGVudHJ5LmZpZWxkLFxuICAgICAgICBwYXRoOiBlLnBhdGgsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmVjb3JkUmVzb2x1dGlvbihkb2NUeXBlLCBEYXRlLm5vdygpIC0gc3RhcnQsIHN1Y2Nlc3MpO1xuICByZXR1cm4geyBlcnJvcnMgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgc2VsZi1yZWZlcmVuY2luZyBkb2N1bWVudCAoZS5nLiBwaXBlbGluZS5qc29uIHdoZXJlXG4gKiBtZXRhZGF0YSBmaWVsZHMgcmVmZXJlbmNlIGVhY2ggb3RoZXIpLiBUb3BvbG9naWNhbGx5IG9yZGVycyB0aGVcbiAqIHJlc29sdXRpb24gc28gZGVwZW5kZW5jaWVzIGNvbWUgZmlyc3QuIE11dGF0ZXMgYGRvY2AgaW4gcGxhY2UuXG4gKlxuICogYGZpZWxkVG9TY29wZVBhdGhgIG1hcHMgZWFjaCBmaWVsZCAoZS5nLiBgbWV0YWRhdGEuZW52YCkgdG8gdGhlIHNjb3BlXG4gKiBwYXRoIGl0IHBvcHVsYXRlcyAodHlwaWNhbGx5IHRoZSBzYW1lLCBzYW5zIGFueSBhcnJheSBpbmRpY2VzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTZWxmUmVmZXJlbmNpbmc8VCBleHRlbmRzIG9iamVjdD4oXG4gIGRvYzogVCxcbiAgc2NvcGU6IFNjb3BlLFxuICBpc1RlbXBsYXRhYmxlOiBGaWVsZFByZWRpY2F0ZSxcbiAgZmllbGRUb1Njb3BlUGF0aDogKGZpZWxkOiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGwsXG4gIGRvY1R5cGU6ICdwaXBlbGluZScgfCAncGx1Z2luJyA9ICdwaXBlbGluZScsXG4pOiBSZXNvbHZlUmVzdWx0IHtcbiAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlbnRyaWVzID0gd2Fsa0FuZEJpbmQoZG9jLCBpc1RlbXBsYXRhYmxlKTtcbiAgLy8gQnVpbGQgdG9wbyBub2RlcyBrZXllZCBieSB0YXJnZXQgc2NvcGUgcGF0aFxuICBjb25zdCBub2RlcyA9IGVudHJpZXNcbiAgICAubWFwKGUgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gZmllbGRUb1Njb3BlUGF0aChlLmZpZWxkKTtcbiAgICAgIGlmICgha2V5KSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IGRlcHM6IHN0cmluZ1tdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHQgb2YgZS50b2tlbnMpIGlmICh0LmtpbmQgPT09ICdleHByJykgZGVwcy5wdXNoKHQucGF0aC5qb2luKCcuJykpO1xuICAgICAgcmV0dXJuIHsga2V5LCBkZXBzLCBlbnRyeTogZSB9O1xuICAgIH0pXG4gICAgLmZpbHRlcigobik6IG4gaXMgTm9uTnVsbGFibGU8dHlwZW9mIG4+ID0+IG4gIT09IG51bGwpO1xuXG4gIGNvbnN0IHsgb3JkZXJlZCwgY3ljbGVzIH0gPSB0b3BvU29ydChub2Rlcy5tYXAobiA9PiAoeyBrZXk6IG4ua2V5LCBkZXBzOiBuLmRlcHMgfSkpKTtcbiAgY29uc3QgZXJyb3JzOiBSZXNvbHZlUmVzdWx0WydlcnJvcnMnXSA9IFtdO1xuICBpZiAoY3ljbGVzLmxlbmd0aCkge1xuICAgIGZvciAoY29uc3QgYyBvZiBjeWNsZXMpIHtcbiAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgY29kZTogRXJyb3JDb2RlLlRFTVBMQVRFX0NZQ0xFLFxuICAgICAgICBtZXNzYWdlOiBgVGVtcGxhdGUgY3ljbGUgZGV0ZWN0ZWQ6ICR7Yy5qb2luKCcgLT4gJyl9YCxcbiAgICAgICAgcGF0aDogYy5qb2luKCcgLT4gJyksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmVjb3JkUmVzb2x1dGlvbihkb2NUeXBlLCBEYXRlLm5vdygpIC0gc3RhcnQsIGZhbHNlKTtcbiAgICByZXR1cm4geyBlcnJvcnMgfTtcbiAgfVxuXG4gIC8vIFJlc29sdmUgaW4gdG9wbyBvcmRlcjsgbXVsdGlwbGUgZW50cmllcyBtYXkgc2hhcmUgYSBzY29wZSBrZXkgKGUuZy4gb25lXG4gIC8vIHBpcGVsaW5lIGZpZWxkIGNvdWxkIG1hcCB0byB0aGUgc2FtZSBzY29wZSBwYXRoIOKAlCB1bmxpa2VseSBoZXJlKSwgc29cbiAgLy8gaXRlcmF0ZSBhbGwgZW50cmllcyB3aG9zZSBrZXkgPT0gb3JkZXJlZFtpXS5cbiAgY29uc3QgYnlLZXkgPSBuZXcgTWFwPHN0cmluZywgdHlwZW9mIG5vZGVzPigpO1xuICBmb3IgKGNvbnN0IG4gb2Ygbm9kZXMpIHtcbiAgICBjb25zdCBsaXN0ID0gYnlLZXkuZ2V0KG4ua2V5KSA/PyBbXTtcbiAgICBsaXN0LnB1c2gobik7XG4gICAgYnlLZXkuc2V0KG4ua2V5LCBsaXN0KTtcbiAgfVxuXG4gIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgZm9yIChjb25zdCBrZXkgb2Ygb3JkZXJlZCkge1xuICAgIGZvciAoY29uc3QgbiBvZiBieUtleS5nZXQoa2V5KSA/PyBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBldmFsdWF0b3JSZXNvbHZlKG4uZW50cnkudG9rZW5zLCBzY29wZSwgbi5lbnRyeS5maWVsZCk7XG4gICAgICAgIG4uZW50cnkuc2V0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBzdWNjZXNzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGUgPSBlcnIgYXMgRXJyb3IgJiB7IGNvZGU/OiBFcnJvckNvZGU7IHBhdGg/OiBzdHJpbmcgfTtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgIGNvZGU6IGUuY29kZSA/PyBFcnJvckNvZGUuVEVNUExBVEVfUEFSU0VfRVJST1IsXG4gICAgICAgICAgbWVzc2FnZTogZS5tZXNzYWdlLFxuICAgICAgICAgIGZpZWxkOiBuLmVudHJ5LmZpZWxkLFxuICAgICAgICAgIHBhdGg6IGUucGF0aCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJlY29yZFJlc29sdXRpb24oZG9jVHlwZSwgRGF0ZS5ub3coKSAtIHN0YXJ0LCBzdWNjZXNzKTtcbiAgcmV0dXJuIHsgZXJyb3JzIH07XG59XG5cbi8qKlxuICogSW5saW5lIHJvdW5kLXRyaXAgaGVscGVyIOKAlCBwYXJzZXMgYW5kIHJlc29sdmVzIGEgc2luZ2xlIHN0cmluZyBhZ2FpbnN0XG4gKiBhIHNjb3BlLiBSZXR1cm5zIGEgc3RyaW5nIHVubGVzcyBhIHdob2xlLWZpZWxkIGNvZXJjaW9uIGZpbHRlciB3YXNcbiAqIHVzZWQgKGluIHdoaWNoIGNhc2UgdGhlIG5hdGl2ZSB0eXBlIGZyb20gYHwgbnVtYmVyYCwgYHwgYm9vbGAsIG9yXG4gKiBgfCBqc29uYCBpcyByZXR1cm5lZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3RyaW5nKFxuICBzb3VyY2U6IHN0cmluZyxcbiAgc2NvcGU6IFNjb3BlLFxuKTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmtub3duW10gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmICghaGFzVGVtcGxhdGUoc291cmNlKSkgcmV0dXJuIHNvdXJjZTtcbiAgY29uc3QgdG9rZW5zOiBUb2tlbltdID0gdG9rZW5pemUoc291cmNlKTtcbiAgcmV0dXJuIGV2YWx1YXRvclJlc29sdmUodG9rZW5zLCBzY29wZSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prometheus metrics for template resolution. Optional — the module is
|
|
3
|
+
* only wired up when `prom-client` is already present in the host
|
|
4
|
+
* process (as is the case for api-server based services). Falls back to
|
|
5
|
+
* no-op stubs when unavailable so pipeline-core stays usable outside
|
|
6
|
+
* server contexts.
|
|
7
|
+
*/
|
|
8
|
+
interface Counter {
|
|
9
|
+
inc(labels?: Record<string, string>, value?: number): void;
|
|
10
|
+
}
|
|
11
|
+
interface Histogram {
|
|
12
|
+
observe(labels: Record<string, string>, value: number): void;
|
|
13
|
+
}
|
|
14
|
+
export declare const templateResolutionsTotal: Counter;
|
|
15
|
+
export declare const templateResolutionDurationMs: Histogram;
|
|
16
|
+
export declare function recordResolution(doc: 'pipeline' | 'plugin', durationMs: number, success: boolean): void;
|
|
17
|
+
export {};
|