@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.
@@ -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 {};