@workflow/builders 5.0.0-beta.2 → 5.0.0-beta.20
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/dist/apply-swc-transform.d.ts +8 -3
- package/dist/apply-swc-transform.d.ts.map +1 -1
- package/dist/apply-swc-transform.js +10 -4
- package/dist/base-builder.d.ts +96 -6
- package/dist/base-builder.d.ts.map +1 -1
- package/dist/base-builder.js +534 -50
- package/dist/build-queue.js +1 -1
- package/dist/config-helpers.d.ts +2 -1
- package/dist/config-helpers.d.ts.map +1 -1
- package/dist/config-helpers.js +2 -1
- package/dist/constants.d.ts +27 -5
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +55 -19
- package/dist/constants.test.d.ts +2 -0
- package/dist/constants.test.d.ts.map +1 -0
- package/dist/constants.test.js +33 -0
- package/dist/discover-entries-esbuild-plugin.d.ts.map +1 -1
- package/dist/discover-entries-esbuild-plugin.js +19 -3
- package/dist/discover-entries-esbuild-plugin.test.js +1 -1
- package/dist/esbuild-tsconfig.js +1 -1
- package/dist/esbuild-tsconfig.test.js +1 -1
- package/dist/external-package-warning.test.d.ts +2 -0
- package/dist/external-package-warning.test.d.ts.map +1 -0
- package/dist/external-package-warning.test.js +219 -0
- package/dist/get-input-files.test.js +82 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/module-specifier.d.ts +20 -2
- package/dist/module-specifier.d.ts.map +1 -1
- package/dist/module-specifier.js +92 -17
- package/dist/module-specifier.test.js +45 -3
- package/dist/node-module-esbuild-plugin.d.ts.map +1 -1
- package/dist/node-module-esbuild-plugin.js +73 -23
- package/dist/node-module-esbuild-plugin.test.js +97 -1
- package/dist/pseudo-package-esbuild-plugin.js +1 -1
- package/dist/pseudo-package-esbuild-plugin.test.js +1 -1
- package/dist/request-converter.js +1 -1
- package/dist/resolve-sourcemap.test.d.ts +2 -0
- package/dist/resolve-sourcemap.test.d.ts.map +1 -0
- package/dist/resolve-sourcemap.test.js +194 -0
- package/dist/serde-checker.js +1 -1
- package/dist/standalone.d.ts +0 -3
- package/dist/standalone.d.ts.map +1 -1
- package/dist/standalone.js +11 -40
- package/dist/swc-esbuild-plugin.d.ts +11 -1
- package/dist/swc-esbuild-plugin.d.ts.map +1 -1
- package/dist/swc-esbuild-plugin.js +110 -13
- package/dist/swc-esbuild-plugin.test.js +370 -6
- package/dist/transform-utils.js +1 -1
- package/dist/transform-utils.test.js +1 -1
- package/dist/types.d.ts +39 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/vercel-build-output-api.d.ts +0 -2
- package/dist/vercel-build-output-api.d.ts.map +1 -1
- package/dist/vercel-build-output-api.js +28 -56
- package/dist/workflow-alias.js +1 -1
- package/dist/workflow-alias.test.js +1 -1
- package/dist/workflows-extractor.js +1 -1
- package/package.json +7 -7
- package/dist/apply-swc-transform.js.map +0 -1
- package/dist/base-builder.js.map +0 -1
- package/dist/build-queue.js.map +0 -1
- package/dist/config-helpers.js.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/discover-entries-esbuild-plugin.js.map +0 -1
- package/dist/discover-entries-esbuild-plugin.test.js.map +0 -1
- package/dist/esbuild-tsconfig.js.map +0 -1
- package/dist/esbuild-tsconfig.test.js.map +0 -1
- package/dist/get-input-files.test.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/module-specifier.js.map +0 -1
- package/dist/module-specifier.test.js.map +0 -1
- package/dist/node-module-esbuild-plugin.js.map +0 -1
- package/dist/node-module-esbuild-plugin.test.js.map +0 -1
- package/dist/pseudo-package-esbuild-plugin.js.map +0 -1
- package/dist/pseudo-package-esbuild-plugin.test.js.map +0 -1
- package/dist/request-converter.js.map +0 -1
- package/dist/serde-checker.js.map +0 -1
- package/dist/standalone.js.map +0 -1
- package/dist/swc-esbuild-plugin.js.map +0 -1
- package/dist/swc-esbuild-plugin.test.js.map +0 -1
- package/dist/transform-utils.js.map +0 -1
- package/dist/transform-utils.test.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/vercel-build-output-api.js.map +0 -1
- package/dist/workflow-alias.js.map +0 -1
- package/dist/workflow-alias.test.js.map +0 -1
- package/dist/workflows-extractor.js.map +0 -1
package/dist/serde-checker.js
CHANGED
|
@@ -115,4 +115,4 @@ export function extractClassEntries(manifest) {
|
|
|
115
115
|
}
|
|
116
116
|
return entries;
|
|
117
117
|
}
|
|
118
|
-
//# sourceMappingURL=serde-checker.js.map
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyZGUtY2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zZXJkZS1jaGVja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsT0FBTyxjQUFjLE1BQU0saUJBQWlCLENBQUM7QUFHN0Msa0ZBQWtGO0FBQ2xGLDZFQUE2RTtBQUM3RSxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRTlDLHdFQUF3RTtBQUN4RSxNQUFNLHNCQUFzQixHQUFHLElBQUksTUFBTSxDQUN2QyxnQ0FBZ0MsWUFBWSxvQkFBb0I7SUFDOUQsd0NBQXdDLFlBQVksNEJBQTRCLEVBQ2xGLEdBQUcsQ0FDSixDQUFDO0FBRUYsdUVBQXVFO0FBQ3ZFLE1BQU0scUJBQXFCLEdBQ3pCLHlEQUF5RCxDQUFDO0FBdUM1RDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE9BT3RDO0lBQ0MsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXZELG1FQUFtRTtJQUNuRSxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTNELGlFQUFpRTtJQUNqRSxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVoRCw4REFBOEQ7SUFDOUQsTUFBTSxlQUFlLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRWpFLHdCQUF3QjtJQUN4QixNQUFNLE9BQU8sR0FBNEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2xFLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztRQUU1QixzRUFBc0U7UUFDdEUsSUFBSSxp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QVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQy9ELE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZXJkZSBjb21wbGlhbmNlIGNoZWNrZXIgZm9yIHdvcmtmbG93IGN1c3RvbSBjbGFzcyBzZXJpYWxpemF0aW9uLlxuICpcbiAqIEFuYWx5emVzIHNvdXJjZSBjb2RlIHRvIGRldGVybWluZSBpZiBjbGFzc2VzIHdpdGggV09SS0ZMT1dfU0VSSUFMSVpFIC9cbiAqIFdPUktGTE9XX0RFU0VSSUFMSVpFIGFyZSBjb3JyZWN0bHkgc2V0IHVwIGZvciB0aGUgd29ya2Zsb3cgc2FuZGJveC5cbiAqXG4gKiBVc2VkIGJ5OlxuICogLSBDTEkgYHZhbGlkYXRlYCBjb21tYW5kXG4gKiAtIENMSSBgdHJhbnNmb3JtYCBjb21tYW5kICgtLWNoZWNrLXNlcmRlKVxuICogLSBTV0MgcGxheWdyb3VuZCBzZXJkZSBhbmFseXNpcyBwYW5lbFxuICogLSBCdWlsZC10aW1lIHdhcm5pbmdzIGluIEJhc2VCdWlsZGVyXG4gKi9cblxuaW1wb3J0IGJ1aWx0aW5Nb2R1bGVzIGZyb20gJ2J1aWx0aW4tbW9kdWxlcyc7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93TWFuaWZlc3QgfSBmcm9tICcuL2FwcGx5LXN3Yy10cmFuc2Zvcm0uanMnO1xuXG4vLyBCdWlsZCBhIHJlZ2V4IHRoYXQgbWF0Y2hlcyBOb2RlLmpzIGJ1aWx0LWluIG1vZHVsZSBpbXBvcnRzIGluIHRyYW5zZm9ybWVkIGNvZGUuXG4vLyBIYW5kbGVzIGJvdGggRVNNIChgZnJvbSAnZnMnYCwgYGZyb20gJ25vZGU6ZnMnYCkgYW5kIENKUyAoYHJlcXVpcmUoJ2ZzJylgKVxuY29uc3Qgbm9kZUJ1aWx0aW5zID0gYnVpbHRpbk1vZHVsZXMuam9pbignfCcpO1xuXG4vLyBSZWdleCB0byBleHRyYWN0IHNwZWNpZmljIG1vZHVsZSBuYW1lcyBmcm9tIGltcG9ydC9yZXF1aXJlIHN0YXRlbWVudHNcbmNvbnN0IG5vZGVJbXBvcnRFeHRyYWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICBgKD86ZnJvbVxcXFxzK1snXCJdKD86bm9kZTopPygoPzoke25vZGVCdWlsdGluc30pKD86L1teJ1wiXSopPylbJ1wiXWAgK1xuICAgIGB8cmVxdWlyZVxcXFxzKlxcXFwoXFxcXHMqWydcIl0oPzpub2RlOik/KCg/OiR7bm9kZUJ1aWx0aW5zfSkoPzovW14nXCJdKik/KVsnXCJdXFxcXHMqXFxcXCkpYCxcbiAgJ2cnXG4pO1xuXG4vLyBSZWdleCB0byBkZXRlY3QgY2xhc3MgcmVnaXN0cmF0aW9uIElJRkVzIGdlbmVyYXRlZCBieSB0aGUgU1dDIHBsdWdpblxuY29uc3QgcmVnaXN0cmF0aW9uSWlmZVJlZ2V4ID1cbiAgL1N5bWJvbFxcLmZvclxccypcXChcXHMqW1wiJ113b3JrZmxvdy1jbGFzcy1yZWdpc3RyeVtcIiddXFxzKlxcKS87XG5cbi8qKlxuICogUmVzdWx0IG9mIGNoZWNraW5nIGEgc2luZ2xlIGNsYXNzIGZvciBzZXJkZSBjb21wbGlhbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcmRlQ2xhc3NDaGVja1Jlc3VsdCB7XG4gIC8qKiBUaGUgY2xhc3MgbmFtZSBhcyBkZXRlY3RlZCBpbiB0aGUgc291cmNlICovXG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICAvKiogVGhlIGNsYXNzSWQgYXNzaWduZWQgYnkgdGhlIFNXQyBwbHVnaW4gKGZyb20gdGhlIG1hbmlmZXN0KSAqL1xuICBjbGFzc0lkOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBTV0MgcGx1Z2luIGRldGVjdGVkIHNlcmRlIHN5bWJvbHMgb24gdGhpcyBjbGFzcyAqL1xuICBkZXRlY3RlZDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgYSByZWdpc3RyYXRpb24gSUlGRSB3YXMgZ2VuZXJhdGVkIGluIHRoZSBvdXRwdXQgKi9cbiAgcmVnaXN0ZXJlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE5vZGUuanMgYnVpbHQtaW4gbW9kdWxlIGltcG9ydHMgcmVtYWluaW5nIGluIHRoZSB3b3JrZmxvdy1tb2RlIG91dHB1dC5cbiAgICogSWYgbm9uLWVtcHR5LCB0aGUgY2xhc3MgaXMgTk9UIHdvcmtmbG93LXNhbmRib3ggY29tcGxpYW50LlxuICAgKi9cbiAgbm9kZUltcG9ydHM6IHN0cmluZ1tdO1xuICAvKiogV2hldGhlciB0aGUgY2xhc3MgcGFzc2VzIGFsbCBjb21wbGlhbmNlIGNoZWNrcyAqL1xuICBjb21wbGlhbnQ6IGJvb2xlYW47XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbnMgb2YgYW55IGlzc3VlcyBmb3VuZCAqL1xuICBpc3N1ZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEZ1bGwgcmVzdWx0IG9mIHNlcmRlIGNvbXBsaWFuY2UgYW5hbHlzaXMgZm9yIGEgc291cmNlIGZpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VyZGVDaGVja1Jlc3VsdCB7XG4gIC8qKiBQZXItY2xhc3MgYW5hbHlzaXMgcmVzdWx0cyAqL1xuICBjbGFzc2VzOiBTZXJkZUNsYXNzQ2hlY2tSZXN1bHRbXTtcbiAgLyoqIEFsbCBOb2RlLmpzIGJ1aWx0LWluIGltcG9ydHMgZm91bmQgaW4gdGhlIHdvcmtmbG93LW1vZGUgb3V0cHV0ICovXG4gIGdsb2JhbE5vZGVJbXBvcnRzOiBzdHJpbmdbXTtcbiAgLyoqIFdoZXRoZXIgdGhlIHdvcmtmbG93LW1vZGUgb3V0cHV0IGNvbnRhaW5zIGFueSBzZXJkZS1yZWxhdGVkIGNsYXNzZXMgKi9cbiAgaGFzU2VyZGVDbGFzc2VzOiBib29sZWFuO1xuICAvKiogVGhlIHJhdyB3b3JrZmxvdyBtYW5pZmVzdCBleHRyYWN0ZWQgZnJvbSB0aGUgU1dDIHRyYW5zZm9ybSAqL1xuICBtYW5pZmVzdDogV29ya2Zsb3dNYW5pZmVzdDtcbn1cblxuLyoqXG4gKiBMaWdodHdlaWdodCBzZXJkZSBjb21wbGlhbmNlIGNoZWNrZXIgdGhhdCB3b3JrcyB3aXRoIHByZS1jb21wdXRlZFxuICogU1dDIHRyYW5zZm9ybSByZXN1bHRzLiBUaGlzIGF2b2lkcyByZS1ydW5uaW5nIHRoZSBTV0MgdHJhbnNmb3JtXG4gKiB3aGVuIHRoZSBjYWxsZXIgYWxyZWFkeSBoYXMgdGhlIG91dHB1dHMgKGUuZy4sIHRoZSBwbGF5Z3JvdW5kIG9yIGJ1aWxkZXIpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl6ZVNlcmRlQ29tcGxpYW5jZShvcHRpb25zOiB7XG4gIC8qKiBTb3VyY2UgY29kZSAodXNlZCBmb3IgcGF0dGVybiBkZXRlY3Rpb24pICovXG4gIHNvdXJjZUNvZGU6IHN0cmluZztcbiAgLyoqIFdvcmtmbG93LW1vZGUgdHJhbnNmb3JtZWQgb3V0cHV0ICovXG4gIHdvcmtmbG93Q29kZTogc3RyaW5nO1xuICAvKiogTWFuaWZlc3QgZXh0cmFjdGVkIGZyb20gdGhlIFNXQyB0cmFuc2Zvcm0gKi9cbiAgbWFuaWZlc3Q6IFdvcmtmbG93TWFuaWZlc3Q7XG59KTogU2VyZGVDaGVja1Jlc3VsdCB7XG4gIGNvbnN0IHsgc291cmNlQ29kZSwgd29ya2Zsb3dDb2RlLCBtYW5pZmVzdCB9ID0gb3B0aW9ucztcblxuICAvLyAxLiBFeHRyYWN0IGFsbCBOb2RlLmpzIGJ1aWx0LWluIGltcG9ydHMgZnJvbSB0aGUgd29ya2Zsb3cgb3V0cHV0XG4gIGNvbnN0IGdsb2JhbE5vZGVJbXBvcnRzID0gZXh0cmFjdE5vZGVJbXBvcnRzKHdvcmtmbG93Q29kZSk7XG5cbiAgLy8gMi4gQ2hlY2sgaWYgdGhlIG1hbmlmZXN0IGNvbnRhaW5zIGFueSBzZXJkZS1yZWdpc3RlcmVkIGNsYXNzZXNcbiAgY29uc3QgY2xhc3NFbnRyaWVzID0gZXh0cmFjdENsYXNzRW50cmllcyhtYW5pZmVzdCk7XG4gIGNvbnN0IGhhc1NlcmRlQ2xhc3NlcyA9IGNsYXNzRW50cmllcy5sZW5ndGggPiAwO1xuXG4gIC8vIDMuIENoZWNrIGlmIHRoZSB3b3JrZmxvdyBvdXRwdXQgY29udGFpbnMgcmVnaXN0cmF0aW9uIElJRkVzXG4gIGNvbnN0IGhhc1JlZ2lzdHJhdGlvbiA9IHJlZ2lzdHJhdGlvbklpZmVSZWdleC50ZXN0KHdvcmtmbG93Q29kZSk7XG5cbiAgLy8gNC4gQW5hbHl6ZSBlYWNoIGNsYXNzXG4gIGNvbnN0IGNsYXNzZXM6IFNlcmRlQ2xhc3NDaGVja1Jlc3VsdFtdID0gY2xhc3NFbnRyaWVzLm1hcCgoZW50cnkpID0+IHtcbiAgICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBDaGVjayBmb3IgTm9kZS5qcyBpbXBvcnRzICh0aGVzZSB3aWxsIGZhaWwgaW4gdGhlIHdvcmtmbG93IHNhbmRib3gpXG4gICAgaWYgKGdsb2JhbE5vZGVJbXBvcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlzc3Vlcy5wdXNoKFxuICAgICAgICBgV29ya2Zsb3cgYnVuZGxlIGNvbnRhaW5zIE5vZGUuanMgYnVpbHQtaW4gaW1wb3J0czogJHtnbG9iYWxOb2RlSW1wb3J0cy5qb2luKCcsICcpfS4gYCArXG4gICAgICAgICAgYFRoZXNlIHdpbGwgZmFpbCBhdCBydW50aW1lIGluIHRoZSB3b3JrZmxvdyBzYW5kYm94LiBgICtcbiAgICAgICAgICBgQWRkIFwidXNlIHN0ZXBcIiB0byBtZXRob2RzIHRoYXQgZGVwZW5kIG9uIE5vZGUuanMgQVBJcyBzbyB0aGV5IGFyZSBzdHJpcHBlZCBmcm9tIHRoZSB3b3JrZmxvdyBidW5kbGUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgcmVnaXN0cmF0aW9uXG4gICAgaWYgKCFoYXNSZWdpc3RyYXRpb24pIHtcbiAgICAgIGlzc3Vlcy5wdXNoKFxuICAgICAgICBgTm8gY2xhc3MgcmVnaXN0cmF0aW9uIElJRkUgd2FzIGdlbmVyYXRlZC4gYCArXG4gICAgICAgICAgYEVuc3VyZSBXT1JLRkxPV19TRVJJQUxJWkUgYW5kIFdPUktGTE9XX0RFU0VSSUFMSVpFIGFyZSBkZWZpbmVkIGFzIHN0YXRpYyBtZXRob2RzIGAgK1xuICAgICAgICAgIGBpbnNpZGUgdGhlIGNsYXNzIGJvZHkgdXNpbmcgY29tcHV0ZWQgcHJvcGVydHkgc3ludGF4OiBzdGF0aWMgW1dPUktGTE9XX1NFUklBTElaRV0oLi4uKSB7IC4uLiB9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2xhc3NOYW1lOiBlbnRyeS5jbGFzc05hbWUsXG4gICAgICBjbGFzc0lkOiBlbnRyeS5jbGFzc0lkLFxuICAgICAgZGV0ZWN0ZWQ6IHRydWUsXG4gICAgICByZWdpc3RlcmVkOiBoYXNSZWdpc3RyYXRpb24sXG4gICAgICBub2RlSW1wb3J0czogZ2xvYmFsTm9kZUltcG9ydHMsXG4gICAgICBjb21wbGlhbnQ6IGdsb2JhbE5vZGVJbXBvcnRzLmxlbmd0aCA9PT0gMCAmJiBoYXNSZWdpc3RyYXRpb24sXG4gICAgICBpc3N1ZXMsXG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gNS4gQ2hlY2sgZm9yIGNsYXNzZXMgdGhhdCBoYXZlIHNlcmRlIHBhdHRlcm5zIGluIHNvdXJjZSBidXQgd2VyZW4ndCBkZXRlY3RlZCBieSBTV0NcbiAgY29uc3Qgc291cmNlSGFzU2VyZGVQYXR0ZXJucyA9XG4gICAgL1xcW1xccypXT1JLRkxPV18oPzpTRVJJQUxJWkV8REVTRVJJQUxJWkUpXFxzKlxcXS8udGVzdChzb3VyY2VDb2RlKSB8fFxuICAgIC9TeW1ib2xcXC5mb3JcXHMqXFwoXFxzKlsnXCJdd29ya2Zsb3ctKD86c2VyaWFsaXplfGRlc2VyaWFsaXplKVsnXCJdXFxzKlxcKS8udGVzdChcbiAgICAgIHNvdXJjZUNvZGVcbiAgICApO1xuXG4gIGlmIChzb3VyY2VIYXNTZXJkZVBhdHRlcm5zICYmIGNsYXNzRW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICBjbGFzc2VzLnB1c2goe1xuICAgICAgY2xhc3NOYW1lOiAnPHVua25vd24+JyxcbiAgICAgIGNsYXNzSWQ6ICcnLFxuICAgICAgZGV0ZWN0ZWQ6IGZhbHNlLFxuICAgICAgcmVnaXN0ZXJlZDogZmFsc2UsXG4gICAgICBub2RlSW1wb3J0czogZ2xvYmFsTm9kZUltcG9ydHMsXG4gICAgICBjb21wbGlhbnQ6IGZhbHNlLFxuICAgICAgaXNzdWVzOiBbXG4gICAgICAgIGBTb3VyY2UgY29kZSBjb250YWlucyBXT1JLRkxPV19TRVJJQUxJWkUvV09SS0ZMT1dfREVTRVJJQUxJWkUgcGF0dGVybnMgYnV0IGAgK1xuICAgICAgICAgIGB0aGUgU1dDIHBsdWdpbiBkaWQgbm90IGRldGVjdCBhbnkgc2VyZGUtZW5hYmxlZCBjbGFzc2VzLiBgICtcbiAgICAgICAgICBgRW5zdXJlIHRoZSBzeW1ib2xzIGFyZSBkZWZpbmVkIGFzIHN0YXRpYyBtZXRob2RzIElOU0lERSB0aGUgY2xhc3MgYm9keSwgYCArXG4gICAgICAgICAgYG5vdCBhc3NpZ25lZCBleHRlcm5hbGx5IChlLmcuLCAoTXlDbGFzcyBhcyBhbnkpW1dPUktGTE9XX1NFUklBTElaRV0gPSAuLi4pLmAsXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjbGFzc2VzLFxuICAgIGdsb2JhbE5vZGVJbXBvcnRzLFxuICAgIGhhc1NlcmRlQ2xhc3NlcyxcbiAgICBtYW5pZmVzdCxcbiAgfTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IE5vZGUuanMgYnVpbHQtaW4gbW9kdWxlIG5hbWVzIGZyb20gdHJhbnNmb3JtZWQgY29kZS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE5vZGVJbXBvcnRzKGNvZGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgaW1wb3J0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAvLyBSZXNldCByZWdleCBzdGF0ZVxuICBub2RlSW1wb3J0RXh0cmFjdFJlZ2V4Lmxhc3RJbmRleCA9IDA7XG4gIGZvciAoXG4gICAgbGV0IG1hdGNoID0gbm9kZUltcG9ydEV4dHJhY3RSZWdleC5leGVjKGNvZGUpO1xuICAgIG1hdGNoICE9PSBudWxsO1xuICAgIG1hdGNoID0gbm9kZUltcG9ydEV4dHJhY3RSZWdleC5leGVjKGNvZGUpXG4gICkge1xuICAgIC8vIG1hdGNoWzFdIGlzIGZyb20gdGhlIEVTTSBwYXR0ZXJuLCBtYXRjaFsyXSBpcyBmcm9tIHRoZSBDSlMgcGF0dGVyblxuICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBtYXRjaFsxXSB8fCBtYXRjaFsyXTtcbiAgICBpZiAobW9kdWxlTmFtZSkge1xuICAgICAgLy8gTm9ybWFsaXplIHRvIGJhc2UgbW9kdWxlIG5hbWUgKGUuZy4sICdmcy9wcm9taXNlcycgLT4gJ2ZzJylcbiAgICAgIGltcG9ydHMuYWRkKG1vZHVsZU5hbWUuc3BsaXQoJy8nKVswXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbLi4uaW1wb3J0c10uc29ydCgpO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgY2xhc3MgZW50cmllcyBmcm9tIGEgV29ya2Zsb3dNYW5pZmVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RDbGFzc0VudHJpZXMoXG4gIG1hbmlmZXN0OiBXb3JrZmxvd01hbmlmZXN0XG4pOiBBcnJheTx7IGNsYXNzTmFtZTogc3RyaW5nOyBjbGFzc0lkOiBzdHJpbmc7IGZpbGVOYW1lOiBzdHJpbmcgfT4ge1xuICBjb25zdCBlbnRyaWVzOiBBcnJheTx7XG4gICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgY2xhc3NJZDogc3RyaW5nO1xuICAgIGZpbGVOYW1lOiBzdHJpbmc7XG4gIH0+ID0gW107XG4gIGlmICghbWFuaWZlc3QuY2xhc3NlcykgcmV0dXJuIGVudHJpZXM7XG5cbiAgZm9yIChjb25zdCBbZmlsZU5hbWUsIGNsYXNzZXNdIG9mIE9iamVjdC5lbnRyaWVzKG1hbmlmZXN0LmNsYXNzZXMpKSB7XG4gICAgZm9yIChjb25zdCBbY2xhc3NOYW1lLCB7IGNsYXNzSWQgfV0gb2YgT2JqZWN0LmVudHJpZXMoY2xhc3NlcykpIHtcbiAgICAgIGVudHJpZXMucHVzaCh7IGNsYXNzTmFtZSwgY2xhc3NJZCwgZmlsZU5hbWUgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbnRyaWVzO1xufVxuIl19
|
package/dist/standalone.d.ts
CHANGED
|
@@ -3,9 +3,6 @@ import type { WorkflowConfig } from './types.js';
|
|
|
3
3
|
export declare class StandaloneBuilder extends BaseBuilder {
|
|
4
4
|
constructor(config: WorkflowConfig);
|
|
5
5
|
build(): Promise<void>;
|
|
6
|
-
private mergeManifests;
|
|
7
|
-
private buildStepsBundle;
|
|
8
|
-
private buildWorkflowsBundle;
|
|
9
6
|
private buildWebhookFunction;
|
|
10
7
|
}
|
|
11
8
|
//# sourceMappingURL=standalone.d.ts.map
|
package/dist/standalone.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,iBAAkB,SAAQ,WAAW;gBACpC,MAAM,EAAE,cAAc;IAO5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,iBAAkB,SAAQ,WAAW;gBACpC,MAAM,EAAE,cAAc;IAO5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAiCd,oBAAoB;CAUnC"}
|
package/dist/standalone.js
CHANGED
|
@@ -9,19 +9,19 @@ export class StandaloneBuilder extends BaseBuilder {
|
|
|
9
9
|
async build() {
|
|
10
10
|
const inputFiles = await this.getInputFiles();
|
|
11
11
|
const tsconfigPath = await this.findTsConfigPath();
|
|
12
|
-
const
|
|
12
|
+
const stepsBundlePath = this.resolvePath(this.config.stepsBundlePath);
|
|
13
|
+
const workflowBundlePath = this.resolvePath(this.config.workflowsBundlePath);
|
|
14
|
+
await this.ensureDirectory(stepsBundlePath);
|
|
15
|
+
await this.ensureDirectory(workflowBundlePath);
|
|
16
|
+
console.log('Creating combined bundle');
|
|
17
|
+
const { manifest } = await this.createCombinedBundle({
|
|
13
18
|
inputFiles,
|
|
19
|
+
stepsOutfile: stepsBundlePath,
|
|
20
|
+
flowOutfile: workflowBundlePath,
|
|
14
21
|
tsconfigPath,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const workflowsManifest = await this.buildWorkflowsBundle(options);
|
|
22
|
+
bundleFinalOutput: true,
|
|
23
|
+
});
|
|
18
24
|
await this.buildWebhookFunction();
|
|
19
|
-
// Merge manifests from both bundles
|
|
20
|
-
// Steps bundle discovers classes from default export conditions
|
|
21
|
-
// Workflow bundle discovers classes from 'workflow' export conditions
|
|
22
|
-
const manifest = this.mergeManifests(stepsManifest, workflowsManifest);
|
|
23
|
-
// Build unified manifest from workflow bundle
|
|
24
|
-
const workflowBundlePath = this.resolvePath(this.config.workflowsBundlePath);
|
|
25
25
|
const manifestDir = this.resolvePath('.well-known/workflow/v1');
|
|
26
26
|
await this.createManifest({
|
|
27
27
|
workflowBundlePath,
|
|
@@ -30,35 +30,6 @@ export class StandaloneBuilder extends BaseBuilder {
|
|
|
30
30
|
});
|
|
31
31
|
await this.createClientLibrary();
|
|
32
32
|
}
|
|
33
|
-
mergeManifests(stepsManifest, workflowsManifest) {
|
|
34
|
-
return {
|
|
35
|
-
steps: { ...stepsManifest.steps, ...workflowsManifest.steps },
|
|
36
|
-
workflows: { ...stepsManifest.workflows, ...workflowsManifest.workflows },
|
|
37
|
-
classes: { ...stepsManifest.classes, ...workflowsManifest.classes },
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
async buildStepsBundle({ inputFiles, tsconfigPath, }) {
|
|
41
|
-
console.log('Creating steps bundle at', this.config.stepsBundlePath);
|
|
42
|
-
const stepsBundlePath = this.resolvePath(this.config.stepsBundlePath);
|
|
43
|
-
await this.ensureDirectory(stepsBundlePath);
|
|
44
|
-
const { manifest } = await this.createStepsBundle({
|
|
45
|
-
outfile: stepsBundlePath,
|
|
46
|
-
inputFiles,
|
|
47
|
-
tsconfigPath,
|
|
48
|
-
});
|
|
49
|
-
return manifest;
|
|
50
|
-
}
|
|
51
|
-
async buildWorkflowsBundle({ inputFiles, tsconfigPath, }) {
|
|
52
|
-
console.log('Creating workflows bundle at', this.config.workflowsBundlePath);
|
|
53
|
-
const workflowBundlePath = this.resolvePath(this.config.workflowsBundlePath);
|
|
54
|
-
await this.ensureDirectory(workflowBundlePath);
|
|
55
|
-
const { manifest } = await this.createWorkflowsBundle({
|
|
56
|
-
outfile: workflowBundlePath,
|
|
57
|
-
inputFiles,
|
|
58
|
-
tsconfigPath,
|
|
59
|
-
});
|
|
60
|
-
return manifest;
|
|
61
|
-
}
|
|
62
33
|
async buildWebhookFunction() {
|
|
63
34
|
console.log('Creating webhook bundle at', this.config.webhookBundlePath);
|
|
64
35
|
const webhookBundlePath = this.resolvePath(this.config.webhookBundlePath);
|
|
@@ -68,4 +39,4 @@ export class StandaloneBuilder extends BaseBuilder {
|
|
|
68
39
|
});
|
|
69
40
|
}
|
|
70
41
|
}
|
|
71
|
-
//# sourceMappingURL=
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhbG9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGFuZGFsb25lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdoRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsV0FBVztJQUNoRCxZQUFZLE1BQXNCO1FBQ2hDLEtBQUssQ0FBQztZQUNKLEdBQUcsTUFBTTtZQUNULElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlDLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFbkQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDaEMsQ0FBQztRQUNGLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1QyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUUvQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFeEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDO1lBQ25ELFVBQVU7WUFDVixZQUFZLEVBQUUsZUFBZTtZQUM3QixXQUFXLEVBQUUsa0JBQWtCO1lBQy9CLFlBQVk7WUFDWixpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztRQUVILE1BQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFbEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUN4QixrQkFBa0I7WUFDbEIsV0FBVztZQUNYLFFBQVE7U0FDVCxDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTyxLQUFLLENBQUMsb0JBQW9CO1FBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRXpFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUUsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFOUMsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDN0IsT0FBTyxFQUFFLGlCQUFpQjtTQUMzQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQnVpbGRlciB9IGZyb20gJy4vYmFzZS1idWlsZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dDb25maWcgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGNsYXNzIFN0YW5kYWxvbmVCdWlsZGVyIGV4dGVuZHMgQmFzZUJ1aWxkZXIge1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IFdvcmtmbG93Q29uZmlnKSB7XG4gICAgc3VwZXIoe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgZGlyczogWycuJ10sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpbnB1dEZpbGVzID0gYXdhaXQgdGhpcy5nZXRJbnB1dEZpbGVzKCk7XG4gICAgY29uc3QgdHNjb25maWdQYXRoID0gYXdhaXQgdGhpcy5maW5kVHNDb25maWdQYXRoKCk7XG5cbiAgICBjb25zdCBzdGVwc0J1bmRsZVBhdGggPSB0aGlzLnJlc29sdmVQYXRoKHRoaXMuY29uZmlnLnN0ZXBzQnVuZGxlUGF0aCk7XG4gICAgY29uc3Qgd29ya2Zsb3dCdW5kbGVQYXRoID0gdGhpcy5yZXNvbHZlUGF0aChcbiAgICAgIHRoaXMuY29uZmlnLndvcmtmbG93c0J1bmRsZVBhdGhcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlRGlyZWN0b3J5KHN0ZXBzQnVuZGxlUGF0aCk7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVEaXJlY3Rvcnkod29ya2Zsb3dCdW5kbGVQYXRoKTtcblxuICAgIGNvbnNvbGUubG9nKCdDcmVhdGluZyBjb21iaW5lZCBidW5kbGUnKTtcblxuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IGF3YWl0IHRoaXMuY3JlYXRlQ29tYmluZWRCdW5kbGUoe1xuICAgICAgaW5wdXRGaWxlcyxcbiAgICAgIHN0ZXBzT3V0ZmlsZTogc3RlcHNCdW5kbGVQYXRoLFxuICAgICAgZmxvd091dGZpbGU6IHdvcmtmbG93QnVuZGxlUGF0aCxcbiAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgIGJ1bmRsZUZpbmFsT3V0cHV0OiB0cnVlLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5idWlsZFdlYmhvb2tGdW5jdGlvbigpO1xuXG4gICAgY29uc3QgbWFuaWZlc3REaXIgPSB0aGlzLnJlc29sdmVQYXRoKCcud2VsbC1rbm93bi93b3JrZmxvdy92MScpO1xuICAgIGF3YWl0IHRoaXMuY3JlYXRlTWFuaWZlc3Qoe1xuICAgICAgd29ya2Zsb3dCdW5kbGVQYXRoLFxuICAgICAgbWFuaWZlc3REaXIsXG4gICAgICBtYW5pZmVzdCxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuY3JlYXRlQ2xpZW50TGlicmFyeSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBidWlsZFdlYmhvb2tGdW5jdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZygnQ3JlYXRpbmcgd2ViaG9vayBidW5kbGUgYXQnLCB0aGlzLmNvbmZpZy53ZWJob29rQnVuZGxlUGF0aCk7XG5cbiAgICBjb25zdCB3ZWJob29rQnVuZGxlUGF0aCA9IHRoaXMucmVzb2x2ZVBhdGgodGhpcy5jb25maWcud2ViaG9va0J1bmRsZVBhdGgpO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlRGlyZWN0b3J5KHdlYmhvb2tCdW5kbGVQYXRoKTtcblxuICAgIGF3YWl0IHRoaXMuY3JlYXRlV2ViaG9va0J1bmRsZSh7XG4gICAgICBvdXRmaWxlOiB3ZWJob29rQnVuZGxlUGF0aCxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { Plugin } from 'esbuild';
|
|
2
2
|
import { type WorkflowManifest } from './apply-swc-transform.js';
|
|
3
3
|
export interface SwcPluginOptions {
|
|
4
|
-
mode: 'step' | 'workflow'
|
|
4
|
+
mode: 'step' | 'workflow';
|
|
5
5
|
entriesToBundle?: string[];
|
|
6
6
|
outdir?: string;
|
|
7
7
|
projectRoot?: string;
|
|
8
|
+
moduleSpecifierRoot?: string;
|
|
8
9
|
workflowManifest?: WorkflowManifest;
|
|
9
10
|
/**
|
|
10
11
|
* Rewrite TypeScript extensions (.ts, .tsx, .mts, .cts) to their JS
|
|
@@ -18,6 +19,15 @@ export interface SwcPluginOptions {
|
|
|
18
19
|
* breaks them because the .js file doesn't exist on disk.
|
|
19
20
|
*/
|
|
20
21
|
rewriteTsExtensions?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Bundle project-local files that are transitively imported by step entries.
|
|
24
|
+
*
|
|
25
|
+
* Keep this disabled when a downstream bundler consumes the generated step
|
|
26
|
+
* bundle because that bundler can resolve the externalized local imports.
|
|
27
|
+
* Enable it for direct runtime loading, where Node imports the generated step
|
|
28
|
+
* bundle from disk without a later bundling pass.
|
|
29
|
+
*/
|
|
30
|
+
bundleTransitiveLocalStepDependencies?: boolean;
|
|
21
31
|
/**
|
|
22
32
|
* Absolute file paths of discovered workflow/step/serde entries whose
|
|
23
33
|
* imports must be treated as side-effectful.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swc-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"swc-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAQlC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAkHD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CA+WjE"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { readFile } from 'node:fs/promises';
|
|
2
2
|
import { relative } from 'node:path';
|
|
3
3
|
import { promisify } from 'node:util';
|
|
4
|
+
import { WorkflowBuildError } from '@workflow/errors';
|
|
4
5
|
import enhancedResolveOrig from 'enhanced-resolve';
|
|
5
6
|
import { applySwcTransform, } from './apply-swc-transform.js';
|
|
6
7
|
import { jsTsRegex, parentHasChild, } from './discover-entries-esbuild-plugin.js';
|
|
8
|
+
import { resolveModuleSpecifier } from './module-specifier.js';
|
|
7
9
|
import { resolveWorkflowAliasRelativePath } from './workflow-alias.js';
|
|
8
10
|
const NODE_RESOLVE_OPTIONS = {
|
|
9
11
|
dependencyType: 'commonjs',
|
|
@@ -39,10 +41,54 @@ const NODE_ESM_RESOLVE_OPTIONS = {
|
|
|
39
41
|
dependencyType: 'esm',
|
|
40
42
|
conditionNames: ['node', 'import'],
|
|
41
43
|
};
|
|
44
|
+
function normalizePath(path) {
|
|
45
|
+
return path.replace(/\\/g, '/');
|
|
46
|
+
}
|
|
47
|
+
function formatIdLocation(location) {
|
|
48
|
+
return `${location.filePath}#${location.name}`;
|
|
49
|
+
}
|
|
50
|
+
function assertUniqueManifestIds(entriesByFile, ids, getId, label) {
|
|
51
|
+
const entriesByFileList = Object.entries(entriesByFile || {});
|
|
52
|
+
for (const [filePath, entries] of entriesByFileList) {
|
|
53
|
+
for (const [name, data] of Object.entries(entries)) {
|
|
54
|
+
const id = getId(data);
|
|
55
|
+
const existing = ids.get(id);
|
|
56
|
+
const current = { filePath, name };
|
|
57
|
+
if (existing &&
|
|
58
|
+
(existing.filePath !== current.filePath ||
|
|
59
|
+
existing.name !== current.name)) {
|
|
60
|
+
const idName = label === 'step' ? 'workflow step ID' : 'workflow ID';
|
|
61
|
+
const functionName = `${label} function`;
|
|
62
|
+
const capitalizedLabel = label === 'step' ? 'Step' : 'Workflow';
|
|
63
|
+
throw new WorkflowBuildError(`Duplicate ${idName} "${id}" generated for ${formatIdLocation(existing)} and ${formatIdLocation(current)}.`, {
|
|
64
|
+
hint: `${capitalizedLabel} IDs must be unique across a build. ` +
|
|
65
|
+
`If you own one of the colliding files, rename the ${functionName} or export ` +
|
|
66
|
+
`the package file through a unique package subpath. If the collision is in a ` +
|
|
67
|
+
`transitive dependency you don't control, file an issue with the upstream ` +
|
|
68
|
+
`package or pin to a non-colliding version.`,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
ids.set(id, current);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function mergeWorkflowManifest(target, incoming, stepIds, workflowIds) {
|
|
76
|
+
assertUniqueManifestIds(incoming.steps, stepIds, (data) => data.stepId, 'step');
|
|
77
|
+
assertUniqueManifestIds(incoming.workflows, workflowIds, (data) => data.workflowId, 'workflow');
|
|
78
|
+
target.workflows = Object.assign(target.workflows || {}, incoming.workflows);
|
|
79
|
+
target.steps = Object.assign(target.steps || {}, incoming.steps);
|
|
80
|
+
target.classes = Object.assign(target.classes || {}, incoming.classes);
|
|
81
|
+
}
|
|
42
82
|
export function createSwcPlugin(options) {
|
|
43
83
|
return {
|
|
44
84
|
name: 'swc-workflow-plugin',
|
|
45
85
|
setup(build) {
|
|
86
|
+
let stepIdsForCurrentBuild = new Map();
|
|
87
|
+
let workflowIdsForCurrentBuild = new Map();
|
|
88
|
+
build.onStart(() => {
|
|
89
|
+
stepIdsForCurrentBuild = new Map();
|
|
90
|
+
workflowIdsForCurrentBuild = new Map();
|
|
91
|
+
});
|
|
46
92
|
// everything is external unless explicitly configured
|
|
47
93
|
// to be bundled
|
|
48
94
|
const cjsResolver = promisify(enhancedResolveOrig.create(NODE_RESOLVE_OPTIONS));
|
|
@@ -75,17 +121,33 @@ export function createSwcPlugin(options) {
|
|
|
75
121
|
const specifier = args.path;
|
|
76
122
|
const specifierIsPath = specifier.startsWith('.') || specifier.startsWith('/');
|
|
77
123
|
let resolvedPath;
|
|
78
|
-
//
|
|
79
|
-
//
|
|
80
|
-
|
|
124
|
+
// Path-style specifiers (./foo, ../foo, /abs/path) externalize as
|
|
125
|
+
// relative paths from `outdir`. Bare specifiers (npm packages)
|
|
126
|
+
// externalize as-is so Node can resolve them at runtime.
|
|
127
|
+
const shouldMakeRelative = specifierIsPath;
|
|
81
128
|
if (specifierIsPath) {
|
|
82
129
|
resolvedPath = await enhancedResolve(args.resolveDir, specifier);
|
|
83
130
|
}
|
|
84
131
|
else {
|
|
85
132
|
// Resolve from project root so nested deps aren't externalized
|
|
86
133
|
resolvedPath = await enhancedResolve(build.initialOptions.absWorkingDir || process.cwd(), specifier).catch(() => undefined); // swallow so esbuild fallback below can try
|
|
87
|
-
// Fall back to esbuild for aliases/tsconfig paths
|
|
88
|
-
//
|
|
134
|
+
// Fall back to esbuild for aliases/tsconfig paths.
|
|
135
|
+
//
|
|
136
|
+
// If the specifier resolves to a project-local file via an
|
|
137
|
+
// alias/path mapping (e.g. tsconfig `paths`, esbuild `alias`,
|
|
138
|
+
// self-referencing package names like `@my-pkg/lib/foo`), we
|
|
139
|
+
// bundle it inline rather than externalizing.
|
|
140
|
+
//
|
|
141
|
+
// Externalizing such files is unsafe: we'd emit a relative
|
|
142
|
+
// import to the original source on disk, but that source can
|
|
143
|
+
// contain further alias imports. At runtime, Node's ESM loader
|
|
144
|
+
// doesn't know about tsconfig paths or build-time aliases, so
|
|
145
|
+
// those transitive imports throw `ERR_MODULE_NOT_FOUND` /
|
|
146
|
+
// `Package subpath ... is not defined by "exports"`.
|
|
147
|
+
//
|
|
148
|
+
// Bundling inline ensures alias-based imports are resolved at
|
|
149
|
+
// build time (where the alias map is known) and the runtime
|
|
150
|
+
// never sees an unresolvable specifier.
|
|
89
151
|
if (!resolvedPath) {
|
|
90
152
|
const esbuildResult = await build.resolve(specifier, {
|
|
91
153
|
resolveDir: args.resolveDir,
|
|
@@ -99,15 +161,34 @@ export function createSwcPlugin(options) {
|
|
|
99
161
|
.replace(/\\/g, '/')
|
|
100
162
|
.includes('/node_modules/');
|
|
101
163
|
if (isProjectLocalFile) {
|
|
102
|
-
|
|
103
|
-
|
|
164
|
+
// Let esbuild bundle this aliased project-local file inline
|
|
165
|
+
// (return null to defer to esbuild's normal pipeline). The
|
|
166
|
+
// SWC `onLoad` handler will still process it.
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
else if (options.entriesToBundle &&
|
|
170
|
+
esbuildResult.path?.endsWith('.node')) {
|
|
171
|
+
return {
|
|
172
|
+
external: true,
|
|
173
|
+
path: specifier,
|
|
174
|
+
};
|
|
104
175
|
}
|
|
105
176
|
}
|
|
106
177
|
}
|
|
107
178
|
if (!resolvedPath)
|
|
108
179
|
return null;
|
|
109
180
|
// Normalize to forward slashes for cross-platform comparison
|
|
110
|
-
const normalizedResolvedPath = resolvedPath
|
|
181
|
+
const normalizedResolvedPath = normalizePath(resolvedPath);
|
|
182
|
+
const workingDir = build.initialOptions.absWorkingDir || process.cwd();
|
|
183
|
+
const projectRoot = options.projectRoot || workingDir;
|
|
184
|
+
const moduleSpecifierRoot = options.moduleSpecifierRoot || projectRoot;
|
|
185
|
+
if (options.entriesToBundle &&
|
|
186
|
+
normalizedResolvedPath.endsWith('.node')) {
|
|
187
|
+
return {
|
|
188
|
+
external: true,
|
|
189
|
+
path: specifier,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
111
192
|
// Check if this module is a discovered entry whose SWC-transformed
|
|
112
193
|
// code contains side effects (workflow/step/class registration).
|
|
113
194
|
// Override the package.json "sideEffects": false so esbuild does not
|
|
@@ -128,6 +209,17 @@ export function createSwcPlugin(options) {
|
|
|
128
209
|
shouldBundle = true;
|
|
129
210
|
break;
|
|
130
211
|
}
|
|
212
|
+
// Bundle project-local source files that are imported by a
|
|
213
|
+
// step/serde entry so direct runtime loaders do not see raw TS
|
|
214
|
+
// extensionless imports. Keep package dependencies external
|
|
215
|
+
// unless they are themselves in entriesToBundle or are parents
|
|
216
|
+
// of a discovered workflow/step/serde file via the check above.
|
|
217
|
+
if (options.bundleTransitiveLocalStepDependencies &&
|
|
218
|
+
isProjectLocalFile(normalizedResolvedPath, moduleSpecifierRoot) &&
|
|
219
|
+
parentHasChild(normalizedEntry, normalizedResolvedPath)) {
|
|
220
|
+
shouldBundle = true;
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
131
223
|
}
|
|
132
224
|
if (shouldBundle) {
|
|
133
225
|
// Let esbuild bundle this entry, but override sideEffects if needed.
|
|
@@ -201,6 +293,7 @@ export function createSwcPlugin(options) {
|
|
|
201
293
|
// The filename parameter is used to generate workflowId/stepId, so it must be relative
|
|
202
294
|
const workingDir = build.initialOptions.absWorkingDir || process.cwd();
|
|
203
295
|
const projectRoot = options.projectRoot || workingDir;
|
|
296
|
+
const moduleSpecifierRoot = options.moduleSpecifierRoot || projectRoot;
|
|
204
297
|
// Normalize paths: convert backslashes to forward slashes and remove trailing slashes
|
|
205
298
|
const normalizedWorkingDir = workingDir
|
|
206
299
|
.replace(/\\/g, '/')
|
|
@@ -247,13 +340,11 @@ export function createSwcPlugin(options) {
|
|
|
247
340
|
relativeFilepath = normalizedPath.split('/').pop() || 'unknown.ts';
|
|
248
341
|
}
|
|
249
342
|
const { code: transformedCode, workflowManifest } = await applySwcTransform(relativeFilepath, normalizedSource, options.mode, args.path, // Pass absolute path for module specifier resolution
|
|
250
|
-
projectRoot);
|
|
343
|
+
projectRoot, moduleSpecifierRoot);
|
|
251
344
|
if (!options.workflowManifest) {
|
|
252
345
|
options.workflowManifest = {};
|
|
253
346
|
}
|
|
254
|
-
options.workflowManifest
|
|
255
|
-
options.workflowManifest.steps = Object.assign(options.workflowManifest.steps || {}, workflowManifest.steps);
|
|
256
|
-
options.workflowManifest.classes = Object.assign(options.workflowManifest.classes || {}, workflowManifest.classes);
|
|
347
|
+
mergeWorkflowManifest(options.workflowManifest, workflowManifest, stepIdsForCurrentBuild, workflowIdsForCurrentBuild);
|
|
257
348
|
return {
|
|
258
349
|
contents: transformedCode,
|
|
259
350
|
loader,
|
|
@@ -275,4 +366,10 @@ export function createSwcPlugin(options) {
|
|
|
275
366
|
},
|
|
276
367
|
};
|
|
277
368
|
}
|
|
278
|
-
|
|
369
|
+
function isProjectLocalFile(filePath, projectRoot) {
|
|
370
|
+
if (normalizePath(filePath).includes('/node_modules/')) {
|
|
371
|
+
return false;
|
|
372
|
+
}
|
|
373
|
+
return (resolveModuleSpecifier(filePath, projectRoot).moduleSpecifier === undefined);
|
|
374
|
+
}
|
|
375
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3djLWVzYnVpbGQtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N3Yy1lc2J1aWxkLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sbUJBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsY0FBYyxHQUNmLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUEwQ3ZFLE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsY0FBYyxFQUFFLFVBQVU7SUFDMUIsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO0lBQ3pCLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQztJQUMxQixhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDMUIsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztJQUNuQyxnQkFBZ0IsRUFBRSxDQUFDLGNBQWMsQ0FBQztJQUNsQyxVQUFVLEVBQUU7UUFDVixLQUFLO1FBQ0wsTUFBTTtRQUNOLE1BQU07UUFDTixNQUFNO1FBQ04sTUFBTTtRQUNOLE1BQU07UUFDTixLQUFLO1FBQ0wsTUFBTTtRQUNOLE9BQU87UUFDUCxPQUFPO0tBQ1I7SUFDRCxpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLFFBQVEsRUFBRSxJQUFJO0lBQ2Qs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QkFBcUIsQ0FDbkIsT0FBTyxDQUFDLGdCQUFnQixFQUN4QixnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLDBCQUEwQixDQUMzQixDQUFDO29CQUVGLE9BQU87d0JBQ0wsUUFBUSxFQUFFLGVBQWU7d0JBQ3pCLE1BQU07cUJBQ1AsQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsTUFBTSxZQUFZLEdBQ2hCLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDekQsT0FBTyxDQUFDLEtBQUssQ0FDWCw0QkFBNEIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUN4QyxZQUFZLENBQ2IsQ0FBQztvQkFDRixPQUFPO3dCQUNMLE1BQU0sRUFBRTs0QkFDTjtnQ0FDRSxJQUFJLEVBQUUseUJBQXlCLFlBQVksRUFBRTtnQ0FDN0MsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFOzZCQUNsRDt5QkFDRjtxQkFDRixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxXQUFtQjtJQUMvRCxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU8sQ0FDTCxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FDNUUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB7IFdvcmtmbG93QnVpbGRFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IGVuaGFuY2VkUmVzb2x2ZU9yaWcgZnJvbSAnZW5oYW5jZWQtcmVzb2x2ZSc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHtcbiAgYXBwbHlTd2NUcmFuc2Zvcm0sXG4gIHR5cGUgV29ya2Zsb3dNYW5pZmVzdCxcbn0gZnJvbSAnLi9hcHBseS1zd2MtdHJhbnNmb3JtLmpzJztcbmltcG9ydCB7XG4gIGpzVHNSZWdleCxcbiAgcGFyZW50SGFzQ2hpbGQsXG59IGZyb20gJy4vZGlzY292ZXItZW50cmllcy1lc2J1aWxkLXBsdWdpbi5qcyc7XG5pbXBvcnQgeyByZXNvbHZlTW9kdWxlU3BlY2lmaWVyIH0gZnJvbSAnLi9tb2R1bGUtc3BlY2lmaWVyLmpzJztcbmltcG9ydCB7IHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoIH0gZnJvbSAnLi93b3JrZmxvdy1hbGlhcy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3djUGx1Z2luT3B0aW9ucyB7XG4gIG1vZGU6ICdzdGVwJyB8ICd3b3JrZmxvdyc7XG4gIGVudHJpZXNUb0J1bmRsZT86IHN0cmluZ1tdO1xuICBvdXRkaXI/OiBzdHJpbmc7XG4gIHByb2plY3RSb290Pzogc3RyaW5nO1xuICBtb2R1bGVTcGVjaWZpZXJSb290Pzogc3RyaW5nO1xuICB3b3JrZmxvd01hbmlmZXN0PzogV29ya2Zsb3dNYW5pZmVzdDtcbiAgLyoqXG4gICAqIFJld3JpdGUgVHlwZVNjcmlwdCBleHRlbnNpb25zICgudHMsIC50c3gsIC5tdHMsIC5jdHMpIHRvIHRoZWlyIEpTXG4gICAqIGVxdWl2YWxlbnRzICguanMsIC5tanMsIC5janMpIGluIGV4dGVybmFsaXplZCBpbXBvcnQgcGF0aHMuXG4gICAqXG4gICAqIEVuYWJsZSB0aGlzIHdoZW4gdGhlIG91dHB1dCBidW5kbGUgaXMgY29uc3VtZWQgZGlyZWN0bHkgYnkgTm9kZSdzIG5hdGl2ZVxuICAgKiBFU00gbG9hZGVyIChlLmcuIHZpdGVzdCksIHdoaWNoIGNhbm5vdCByZXNvbHZlIC50cyBleHRlbnNpb25zLlxuICAgKlxuICAgKiBMZWF2ZSBkaXNhYmxlZCAoZGVmYXVsdCkgd2hlbiBhIGRvd25zdHJlYW0gYnVuZGxlciAod2VicGFjaywgVml0ZSwgZXRjLilcbiAgICogaGFuZGxlcyByZXNvbHV0aW9uIOKAlCB0aG9zZSB0b29scyByZXNvbHZlIC50cyBuYXRpdmVseSBhbmQgcmV3cml0aW5nXG4gICAqIGJyZWFrcyB0aGVtIGJlY2F1c2UgdGhlIC5qcyBmaWxlIGRvZXNuJ3QgZXhpc3Qgb24gZGlzay5cbiAgICovXG4gIHJld3JpdGVUc0V4dGVuc2lvbnM/OiBib29sZWFuO1xuICAvKipcbiAgICogQnVuZGxlIHByb2plY3QtbG9jYWwgZmlsZXMgdGhhdCBhcmUgdHJhbnNpdGl2ZWx5IGltcG9ydGVkIGJ5IHN0ZXAgZW50cmllcy5cbiAgICpcbiAgICogS2VlcCB0aGlzIGRpc2FibGVkIHdoZW4gYSBkb3duc3RyZWFtIGJ1bmRsZXIgY29uc3VtZXMgdGhlIGdlbmVyYXRlZCBzdGVwXG4gICAqIGJ1bmRsZSBiZWNhdXNlIHRoYXQgYnVuZGxlciBjYW4gcmVzb2x2ZSB0aGUgZXh0ZXJuYWxpemVkIGxvY2FsIGltcG9ydHMuXG4gICAqIEVuYWJsZSBpdCBmb3IgZGlyZWN0IHJ1bnRpbWUgbG9hZGluZywgd2hlcmUgTm9kZSBpbXBvcnRzIHRoZSBnZW5lcmF0ZWQgc3RlcFxuICAgKiBidW5kbGUgZnJvbSBkaXNrIHdpdGhvdXQgYSBsYXRlciBidW5kbGluZyBwYXNzLlxuICAgKi9cbiAgYnVuZGxlVHJhbnNpdGl2ZUxvY2FsU3RlcERlcGVuZGVuY2llcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBYnNvbHV0ZSBmaWxlIHBhdGhzIG9mIGRpc2NvdmVyZWQgd29ya2Zsb3cvc3RlcC9zZXJkZSBlbnRyaWVzIHdob3NlXG4gICAqIGltcG9ydHMgbXVzdCBiZSB0cmVhdGVkIGFzIHNpZGUtZWZmZWN0ZnVsLlxuICAgKlxuICAgKiBUaGUgU1dDIGNvbXBpbGVyIHRyYW5zZm9ybSBpbmplY3RzIHJlZ2lzdHJhdGlvbiBjYWxscyAod29ya2Zsb3cgSURzLFxuICAgKiBzdGVwIElEcywgY2xhc3Mgc2VyaWFsaXphdGlvbiwgZXRjLikgaW50byB0aGVzZSBmaWxlcy4gV2l0aG91dCB0aGlzXG4gICAqIG92ZXJyaWRlLCBlc2J1aWxkIGhvbm91cnMgYFwic2lkZUVmZmVjdHNcIjogZmFsc2VgIGZyb20gdGhlIHBhY2thZ2Unc1xuICAgKiBgcGFja2FnZS5qc29uYCBhbmQgc2lsZW50bHkgZHJvcHMgYmFyZSBpbXBvcnRzIG9mIHRoZXNlIG1vZHVsZXMuXG4gICAqL1xuICBzaWRlRWZmZWN0RW50cmllcz86IHN0cmluZ1tdO1xufVxuXG5jb25zdCBOT0RFX1JFU09MVkVfT1BUSU9OUyA9IHtcbiAgZGVwZW5kZW5jeVR5cGU6ICdjb21tb25qcycsXG4gIG1vZHVsZXM6IFsnbm9kZV9tb2R1bGVzJ10sXG4gIGV4cG9ydHNGaWVsZHM6IFsnZXhwb3J0cyddLFxuICBpbXBvcnRzRmllbGRzOiBbJ2ltcG9ydHMnXSxcbiAgY29uZGl0aW9uTmFtZXM6IFsnbm9kZScsICdyZXF1aXJlJ10sXG4gIGRlc2NyaXB0aW9uRmlsZXM6IFsncGFja2FnZS5qc29uJ10sXG4gIGV4dGVuc2lvbnM6IFtcbiAgICAnLnRzJyxcbiAgICAnLnRzeCcsXG4gICAgJy5tdHMnLFxuICAgICcuY3RzJyxcbiAgICAnLmNqcycsXG4gICAgJy5tanMnLFxuICAgICcuanMnLFxuICAgICcuanN4JyxcbiAgICAnLmpzb24nLFxuICAgICcubm9kZScsXG4gIF0sXG4gIGVuZm9yY2VFeHRlbnNpb25zOiBmYWxzZSxcbiAgc3ltbGlua3M6IHRydWUsXG4gIG1haW5GaWVsZHM6IFsnbWFpbiddLFxuICBtYWluRmlsZXM6IFsnaW5kZXgnXSxcbiAgcm9vdHM6IFtdLFxuICBmdWxseVNwZWNpZmllZDogZmFsc2UsXG4gIHByZWZlclJlbGF0aXZlOiBmYWxzZSxcbiAgcHJlZmVyQWJzb2x1dGU6IGZhbHNlLFxuICByZXN0cmljdGlvbnM6IFtdLFxufTtcblxuY29uc3QgTk9ERV9FU01fUkVTT0xWRV9PUFRJT05TID0ge1xuICAuLi5OT0RFX1JFU09MVkVfT1BUSU9OUyxcbiAgZGVwZW5kZW5jeVR5cGU6ICdlc20nLFxuICBjb25kaXRpb25OYW1lczogWydub2RlJywgJ2ltcG9ydCddLFxufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG59XG5cbnR5cGUgSWRMb2NhdGlvbiA9IHtcbiAgZmlsZVBhdGg6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gZm9ybWF0SWRMb2NhdGlvbihsb2NhdGlvbjogSWRMb2NhdGlvbik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtsb2NhdGlvbi5maWxlUGF0aH0jJHtsb2NhdGlvbi5uYW1lfWA7XG59XG5cbmZ1bmN0aW9uIGFzc2VydFVuaXF1ZU1hbmlmZXN0SWRzKFxuICBlbnRyaWVzQnlGaWxlOiBXb3JrZmxvd01hbmlmZXN0WydzdGVwcyddIHwgV29ya2Zsb3dNYW5pZmVzdFsnd29ya2Zsb3dzJ10sXG4gIGlkczogTWFwPHN0cmluZywgSWRMb2NhdGlvbj4sXG4gIGdldElkOiAoZGF0YTogeyBzdGVwSWQ6IHN0cmluZyB9IHwgeyB3b3JrZmxvd0lkOiBzdHJpbmcgfSkgPT4gc3RyaW5nLFxuICBsYWJlbDogJ3N0ZXAnIHwgJ3dvcmtmbG93J1xuKTogdm9pZCB7XG4gIGNvbnN0IGVudHJpZXNCeUZpbGVMaXN0ID0gT2JqZWN0LmVudHJpZXMoZW50cmllc0J5RmlsZSB8fCB7fSkgYXMgQXJyYXk8XG4gICAgW3N0cmluZywgUmVjb3JkPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9IHwgeyB3b3JrZmxvd0lkOiBzdHJpbmcgfT5dXG4gID47XG4gIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBlbnRyaWVzXSBvZiBlbnRyaWVzQnlGaWxlTGlzdCkge1xuICAgIGZvciAoY29uc3QgW25hbWUsIGRhdGFdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJpZXMpKSB7XG4gICAgICBjb25zdCBpZCA9IGdldElkKGRhdGEpO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBpZHMuZ2V0KGlkKTtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB7IGZpbGVQYXRoLCBuYW1lIH07XG4gICAgICBpZiAoXG4gICAgICAgIGV4aXN0aW5nICYmXG4gICAgICAgIChleGlzdGluZy5maWxlUGF0aCAhPT0gY3VycmVudC5maWxlUGF0aCB8fFxuICAgICAgICAgIGV4aXN0aW5nLm5hbWUgIT09IGN1cnJlbnQubmFtZSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBpZE5hbWUgPSBsYWJlbCA9PT0gJ3N0ZXAnID8gJ3dvcmtmbG93IHN0ZXAgSUQnIDogJ3dvcmtmbG93IElEJztcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7bGFiZWx9IGZ1bmN0aW9uYDtcbiAgICAgICAgY29uc3QgY2FwaXRhbGl6ZWRMYWJlbCA9IGxhYmVsID09PSAnc3RlcCcgPyAnU3RlcCcgOiAnV29ya2Zsb3cnO1xuICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dCdWlsZEVycm9yKFxuICAgICAgICAgIGBEdXBsaWNhdGUgJHtpZE5hbWV9IFwiJHtpZH1cIiBnZW5lcmF0ZWQgZm9yICR7Zm9ybWF0SWRMb2NhdGlvbihleGlzdGluZyl9IGFuZCAke2Zvcm1hdElkTG9jYXRpb24oY3VycmVudCl9LmAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGludDpcbiAgICAgICAgICAgICAgYCR7Y2FwaXRhbGl6ZWRMYWJlbH0gSURzIG11c3QgYmUgdW5pcXVlIGFjcm9zcyBhIGJ1aWxkLiBgICtcbiAgICAgICAgICAgICAgYElmIHlvdSBvd24gb25lIG9mIHRoZSBjb2xsaWRpbmcgZmlsZXMsIHJlbmFtZSB0aGUgJHtmdW5jdGlvbk5hbWV9IG9yIGV4cG9ydCBgICtcbiAgICAgICAgICAgICAgYHRoZSBwYWNrYWdlIGZpbGUgdGhyb3VnaCBhIHVuaXF1ZSBwYWNrYWdlIHN1YnBhdGguIElmIHRoZSBjb2xsaXNpb24gaXMgaW4gYSBgICtcbiAgICAgICAgICAgICAgYHRyYW5zaXRpdmUgZGVwZW5kZW5jeSB5b3UgZG9uJ3QgY29udHJvbCwgZmlsZSBhbiBpc3N1ZSB3aXRoIHRoZSB1cHN0cmVhbSBgICtcbiAgICAgICAgICAgICAgYHBhY2thZ2Ugb3IgcGluIHRvIGEgbm9uLWNvbGxpZGluZyB2ZXJzaW9uLmAsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWRzLnNldChpZCwgY3VycmVudCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlV29ya2Zsb3dNYW5pZmVzdChcbiAgdGFyZ2V0OiBXb3JrZmxvd01hbmlmZXN0LFxuICBpbmNvbWluZzogV29ya2Zsb3dNYW5pZmVzdCxcbiAgc3RlcElkczogTWFwPHN0cmluZywgSWRMb2NhdGlvbj4sXG4gIHdvcmtmbG93SWRzOiBNYXA8c3RyaW5nLCBJZExvY2F0aW9uPlxuKTogdm9pZCB7XG4gIGFzc2VydFVuaXF1ZU1hbmlmZXN0SWRzKFxuICAgIGluY29taW5nLnN0ZXBzLFxuICAgIHN0ZXBJZHMsXG4gICAgKGRhdGEpID0+IChkYXRhIGFzIHsgc3RlcElkOiBzdHJpbmcgfSkuc3RlcElkLFxuICAgICdzdGVwJ1xuICApO1xuICBhc3NlcnRVbmlxdWVNYW5pZmVzdElkcyhcbiAgICBpbmNvbWluZy53b3JrZmxvd3MsXG4gICAgd29ya2Zsb3dJZHMsXG4gICAgKGRhdGEpID0+IChkYXRhIGFzIHsgd29ya2Zsb3dJZDogc3RyaW5nIH0pLndvcmtmbG93SWQsXG4gICAgJ3dvcmtmbG93J1xuICApO1xuXG4gIHRhcmdldC53b3JrZmxvd3MgPSBPYmplY3QuYXNzaWduKHRhcmdldC53b3JrZmxvd3MgfHwge30sIGluY29taW5nLndvcmtmbG93cyk7XG4gIHRhcmdldC5zdGVwcyA9IE9iamVjdC5hc3NpZ24odGFyZ2V0LnN0ZXBzIHx8IHt9LCBpbmNvbWluZy5zdGVwcyk7XG4gIHRhcmdldC5jbGFzc2VzID0gT2JqZWN0LmFzc2lnbih0YXJnZXQuY2xhc3NlcyB8fCB7fSwgaW5jb21pbmcuY2xhc3Nlcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTd2NQbHVnaW4ob3B0aW9uczogU3djUGx1Z2luT3B0aW9ucyk6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3N3Yy13b3JrZmxvdy1wbHVnaW4nLFxuICAgIHNldHVwKGJ1aWxkKSB7XG4gICAgICBsZXQgc3RlcElkc0ZvckN1cnJlbnRCdWlsZCA9IG5ldyBNYXA8c3RyaW5nLCBJZExvY2F0aW9uPigpO1xuICAgICAgbGV0IHdvcmtmbG93SWRzRm9yQ3VycmVudEJ1aWxkID0gbmV3IE1hcDxzdHJpbmcsIElkTG9jYXRpb24+KCk7XG5cbiAgICAgIGJ1aWxkLm9uU3RhcnQoKCkgPT4ge1xuICAgICAgICBzdGVwSWRzRm9yQ3VycmVudEJ1aWxkID0gbmV3IE1hcCgpO1xuICAgICAgICB3b3JrZmxvd0lkc0ZvckN1cnJlbnRCdWlsZCA9IG5ldyBNYXAoKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBldmVyeXRoaW5nIGlzIGV4dGVybmFsIHVubGVzcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWRcbiAgICAgIC8vIHRvIGJlIGJ1bmRsZWRcbiAgICAgIGNvbnN0IGNqc1Jlc29sdmVyID0gcHJvbWlzaWZ5KFxuICAgICAgICBlbmhhbmNlZFJlc29sdmVPcmlnLmNyZWF0ZShOT0RFX1JFU09MVkVfT1BUSU9OUylcbiAgICAgICk7XG4gICAgICBjb25zdCBlc21SZXNvbHZlciA9IHByb21pc2lmeShcbiAgICAgICAgZW5oYW5jZWRSZXNvbHZlT3JpZy5jcmVhdGUoTk9ERV9FU01fUkVTT0xWRV9PUFRJT05TKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgZW5oYW5jZWRSZXNvbHZlID0gYXN5bmMgKGNvbnRleHQ6IHN0cmluZywgcGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGVzbVJlc29sdmVyKGNvbnRleHQsIHBhdGgpO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcmV0dXJuIGNqc1Jlc29sdmVyKGNvbnRleHQsIHBhdGgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBQcmUtY29tcHV0ZSB0aGUgbm9ybWFsaXplZCBzaWRlLWVmZmVjdCBlbnRyaWVzIHNldCBmb3IgTygxKSBsb29rdXBzLlxuICAgICAgY29uc3Qgbm9ybWFsaXplZFNpZGVFZmZlY3RFbnRyaWVzID0gbmV3IFNldChcbiAgICAgICAgb3B0aW9ucy5zaWRlRWZmZWN0RW50cmllcz8ubWFwKChlKSA9PiBlLnJlcGxhY2UoL1xcXFwvZywgJy8nKSlcbiAgICAgICk7XG5cbiAgICAgIGJ1aWxkLm9uUmVzb2x2ZSh7IGZpbHRlcjogLy4qLyB9LCBhc3luYyAoYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5wbHVnaW5EYXRhPy5za2lwU3djUGx1Z2luKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW9wdGlvbnMuZW50cmllc1RvQnVuZGxlICYmXG4gICAgICAgICAgbm9ybWFsaXplZFNpZGVFZmZlY3RFbnRyaWVzLnNpemUgPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXaGVuIG9ubHkgc2lkZUVmZmVjdEVudHJpZXMgaXMgc2V0IChubyBlbnRyaWVzVG9CdW5kbGUpLCB3ZSBvbmx5XG4gICAgICAgIC8vIG5lZWQgdG8gb3ZlcnJpZGUgc2lkZUVmZmVjdHMgZm9yIHRvcC1sZXZlbCBiYXJlIGltcG9ydHMg4oCUIHR5cGljYWxseVxuICAgICAgICAvLyBmcm9tIHRoZSB2aXJ0dWFsIGVudHJ5LiBTa2lwIHJlc29sdXRpb24gZm9yIHRyYW5zaXRpdmUgaW1wb3J0c1xuICAgICAgICAvLyAoZHluYW1pYyBpbXBvcnRzLCByZXF1aXJlcywgZXRjLikgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuXG4gICAgICAgIGlmICghb3B0aW9ucy5lbnRyaWVzVG9CdW5kbGUgJiYgYXJncy5raW5kICE9PSAnaW1wb3J0LXN0YXRlbWVudCcpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3BlY2lmaWVyID0gYXJncy5wYXRoO1xuICAgICAgICAgIGNvbnN0IHNwZWNpZmllcklzUGF0aCA9XG4gICAgICAgICAgICBzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLicpIHx8IHNwZWNpZmllci5zdGFydHNXaXRoKCcvJyk7XG5cbiAgICAgICAgICBsZXQgcmVzb2x2ZWRQYXRoOiBzdHJpbmcgfCBmYWxzZSB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAvLyBQYXRoLXN0eWxlIHNwZWNpZmllcnMgKC4vZm9vLCAuLi9mb28sIC9hYnMvcGF0aCkgZXh0ZXJuYWxpemUgYXNcbiAgICAgICAgICAvLyByZWxhdGl2ZSBwYXRocyBmcm9tIGBvdXRkaXJgLiBCYXJlIHNwZWNpZmllcnMgKG5wbSBwYWNrYWdlcylcbiAgICAgICAgICAvLyBleHRlcm5hbGl6ZSBhcy1pcyBzbyBOb2RlIGNhbiByZXNvbHZlIHRoZW0gYXQgcnVudGltZS5cbiAgICAgICAgICBjb25zdCBzaG91bGRNYWtlUmVsYXRpdmUgPSBzcGVjaWZpZXJJc1BhdGg7XG5cbiAgICAgICAgICBpZiAoc3BlY2lmaWVySXNQYXRoKSB7XG4gICAgICAgICAgICByZXNvbHZlZFBhdGggPSBhd2FpdCBlbmhhbmNlZFJlc29sdmUoYXJncy5yZXNvbHZlRGlyLCBzcGVjaWZpZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZXNvbHZlIGZyb20gcHJvamVjdCByb290IHNvIG5lc3RlZCBkZXBzIGFyZW4ndCBleHRlcm5hbGl6ZWRcbiAgICAgICAgICAgIHJlc29sdmVkUGF0aCA9IGF3YWl0IGVuaGFuY2VkUmVzb2x2ZShcbiAgICAgICAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYWJzV29ya2luZ0RpciB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgICAgICBzcGVjaWZpZXJcbiAgICAgICAgICAgICkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTsgLy8gc3dhbGxvdyBzbyBlc2J1aWxkIGZhbGxiYWNrIGJlbG93IGNhbiB0cnlcblxuICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGVzYnVpbGQgZm9yIGFsaWFzZXMvdHNjb25maWcgcGF0aHMuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gSWYgdGhlIHNwZWNpZmllciByZXNvbHZlcyB0byBhIHByb2plY3QtbG9jYWwgZmlsZSB2aWEgYW5cbiAgICAgICAgICAgIC8vIGFsaWFzL3BhdGggbWFwcGluZyAoZS5nLiB0c2NvbmZpZyBgcGF0aHNgLCBlc2J1aWxkIGBhbGlhc2AsXG4gICAgICAgICAgICAvLyBzZWxmLXJlZmVyZW5jaW5nIHBhY2thZ2UgbmFtZXMgbGlrZSBgQG15LXBrZy9saWIvZm9vYCksIHdlXG4gICAgICAgICAgICAvLyBidW5kbGUgaXQgaW5saW5lIHJhdGhlciB0aGFuIGV4dGVybmFsaXppbmcuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gRXh0ZXJuYWxpemluZyBzdWNoIGZpbGVzIGlzIHVuc2FmZTogd2UnZCBlbWl0IGEgcmVsYXRpdmVcbiAgICAgICAgICAgIC8vIGltcG9ydCB0byB0aGUgb3JpZ2luYWwgc291cmNlIG9uIGRpc2ssIGJ1dCB0aGF0IHNvdXJjZSBjYW5cbiAgICAgICAgICAgIC8vIGNvbnRhaW4gZnVydGhlciBhbGlhcyBpbXBvcnRzLiBBdCBydW50aW1lLCBOb2RlJ3MgRVNNIGxvYWRlclxuICAgICAgICAgICAgLy8gZG9lc24ndCBrbm93IGFib3V0IHRzY29uZmlnIHBhdGhzIG9yIGJ1aWxkLXRpbWUgYWxpYXNlcywgc29cbiAgICAgICAgICAgIC8vIHRob3NlIHRyYW5zaXRpdmUgaW1wb3J0cyB0aHJvdyBgRVJSX01PRFVMRV9OT1RfRk9VTkRgIC9cbiAgICAgICAgICAgIC8vIGBQYWNrYWdlIHN1YnBhdGggLi4uIGlzIG5vdCBkZWZpbmVkIGJ5IFwiZXhwb3J0c1wiYC5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBCdW5kbGluZyBpbmxpbmUgZW5zdXJlcyBhbGlhcy1iYXNlZCBpbXBvcnRzIGFyZSByZXNvbHZlZCBhdFxuICAgICAgICAgICAgLy8gYnVpbGQgdGltZSAod2hlcmUgdGhlIGFsaWFzIG1hcCBpcyBrbm93bikgYW5kIHRoZSBydW50aW1lXG4gICAgICAgICAgICAvLyBuZXZlciBzZWVzIGFuIHVucmVzb2x2YWJsZSBzcGVjaWZpZXIuXG4gICAgICAgICAgICBpZiAoIXJlc29sdmVkUGF0aCkge1xuICAgICAgICAgICAgICBjb25zdCBlc2J1aWxkUmVzdWx0ID0gYXdhaXQgYnVpbGQucmVzb2x2ZShzcGVjaWZpZXIsIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlRGlyOiBhcmdzLnJlc29sdmVEaXIsXG4gICAgICAgICAgICAgICAga2luZDogYXJncy5raW5kLFxuICAgICAgICAgICAgICAgIHBsdWdpbkRhdGE6IHsgc2tpcFN3Y1BsdWdpbjogdHJ1ZSB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29uc3QgZGlkUmVzb2x2ZSA9XG4gICAgICAgICAgICAgICAgISFlc2J1aWxkUmVzdWx0LnBhdGggJiYgIWVzYnVpbGRSZXN1bHQuZXJyb3JzLmxlbmd0aDtcbiAgICAgICAgICAgICAgY29uc3QgaXNQcm9qZWN0TG9jYWxGaWxlID1cbiAgICAgICAgICAgICAgICBkaWRSZXNvbHZlICYmXG4gICAgICAgICAgICAgICAgIWVzYnVpbGRSZXN1bHQuZXh0ZXJuYWwgJiZcbiAgICAgICAgICAgICAgICAhZXNidWlsZFJlc3VsdC5wYXRoXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gICAgICAgICAgICAgICAgICAuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJyk7XG4gICAgICAgICAgICAgIGlmIChpc1Byb2plY3RMb2NhbEZpbGUpIHtcbiAgICAgICAgICAgICAgICAvLyBMZXQgZXNidWlsZCBidW5kbGUgdGhpcyBhbGlhc2VkIHByb2plY3QtbG9jYWwgZmlsZSBpbmxpbmVcbiAgICAgICAgICAgICAgICAvLyAocmV0dXJuIG51bGwgdG8gZGVmZXIgdG8gZXNidWlsZCdzIG5vcm1hbCBwaXBlbGluZSkuIFRoZVxuICAgICAgICAgICAgICAgIC8vIFNXQyBgb25Mb2FkYCBoYW5kbGVyIHdpbGwgc3RpbGwgcHJvY2VzcyBpdC5cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBvcHRpb25zLmVudHJpZXNUb0J1bmRsZSAmJlxuICAgICAgICAgICAgICAgIGVzYnVpbGRSZXN1bHQucGF0aD8uZW5kc1dpdGgoJy5ub2RlJylcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGV4dGVybmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgcGF0aDogc3BlY2lmaWVyLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXJlc29sdmVkUGF0aCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAvLyBOb3JtYWxpemUgdG8gZm9yd2FyZCBzbGFzaGVzIGZvciBjcm9zcy1wbGF0Zm9ybSBjb21wYXJpc29uXG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZVBhdGgocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICBjb25zdCB3b3JraW5nRGlyID1cbiAgICAgICAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmFic1dvcmtpbmdEaXIgfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICAgICAgICBjb25zdCBwcm9qZWN0Um9vdCA9IG9wdGlvbnMucHJvamVjdFJvb3QgfHwgd29ya2luZ0RpcjtcbiAgICAgICAgICBjb25zdCBtb2R1bGVTcGVjaWZpZXJSb290ID1cbiAgICAgICAgICAgIG9wdGlvbnMubW9kdWxlU3BlY2lmaWVyUm9vdCB8fCBwcm9qZWN0Um9vdDtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG9wdGlvbnMuZW50cmllc1RvQnVuZGxlICYmXG4gICAgICAgICAgICBub3JtYWxpemVkUmVzb2x2ZWRQYXRoLmVuZHNXaXRoKCcubm9kZScpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBleHRlcm5hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGF0aDogc3BlY2lmaWVyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG1vZHVsZSBpcyBhIGRpc2NvdmVyZWQgZW50cnkgd2hvc2UgU1dDLXRyYW5zZm9ybWVkXG4gICAgICAgICAgLy8gY29kZSBjb250YWlucyBzaWRlIGVmZmVjdHMgKHdvcmtmbG93L3N0ZXAvY2xhc3MgcmVnaXN0cmF0aW9uKS5cbiAgICAgICAgICAvLyBPdmVycmlkZSB0aGUgcGFja2FnZS5qc29uIFwic2lkZUVmZmVjdHNcIjogZmFsc2Ugc28gZXNidWlsZCBkb2VzIG5vdFxuICAgICAgICAgIC8vIGRyb3AgYmFyZSBpbXBvcnRzIG9mIHRoZXNlIG1vZHVsZXMuXG4gICAgICAgICAgY29uc3QgaGFzU2lkZUVmZmVjdHMgPSBub3JtYWxpemVkU2lkZUVmZmVjdEVudHJpZXMuaGFzKFxuICAgICAgICAgICAgbm9ybWFsaXplZFJlc29sdmVkUGF0aFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucy5lbnRyaWVzVG9CdW5kbGUpIHtcbiAgICAgICAgICAgIGxldCBzaG91bGRCdW5kbGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnlUb0J1bmRsZSBvZiBvcHRpb25zLmVudHJpZXNUb0J1bmRsZSkge1xuICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRW50cnkgPSBlbnRyeVRvQnVuZGxlLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFJlc29sdmVkUGF0aCA9PT0gbm9ybWFsaXplZEVudHJ5KSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkQnVuZGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IGVudHJ5IGltcG9ydHMgYSBjaGlsZCB0aGF0IG5lZWRzXG4gICAgICAgICAgICAgIC8vIHRvIGJlIGJ1bmRsZWQgdGhlbiBpdCBuZWVkcyB0byBhbHNvIGJlIGJ1bmRsZWQgc29cbiAgICAgICAgICAgICAgLy8gdGhhdCB0aGUgY2hpbGQgY2FuIGhhdmUgb3VyIHRyYW5zZm9ybSBhcHBsaWVkXG4gICAgICAgICAgICAgIGlmIChwYXJlbnRIYXNDaGlsZChub3JtYWxpemVkUmVzb2x2ZWRQYXRoLCBub3JtYWxpemVkRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkQnVuZGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIEJ1bmRsZSBwcm9qZWN0LWxvY2FsIHNvdXJjZSBmaWxlcyB0aGF0IGFyZSBpbXBvcnRlZCBieSBhXG4gICAgICAgICAgICAgIC8vIHN0ZXAvc2VyZGUgZW50cnkgc28gZGlyZWN0IHJ1bnRpbWUgbG9hZGVycyBkbyBub3Qgc2VlIHJhdyBUU1xuICAgICAgICAgICAgICAvLyBleHRlbnNpb25sZXNzIGltcG9ydHMuIEtlZXAgcGFja2FnZSBkZXBlbmRlbmNpZXMgZXh0ZXJuYWxcbiAgICAgICAgICAgICAgLy8gdW5sZXNzIHRoZXkgYXJlIHRoZW1zZWx2ZXMgaW4gZW50cmllc1RvQnVuZGxlIG9yIGFyZSBwYXJlbnRzXG4gICAgICAgICAgICAgIC8vIG9mIGEgZGlzY292ZXJlZCB3b3JrZmxvdy9zdGVwL3NlcmRlIGZpbGUgdmlhIHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuYnVuZGxlVHJhbnNpdGl2ZUxvY2FsU3RlcERlcGVuZGVuY2llcyAmJlxuICAgICAgICAgICAgICAgIGlzUHJvamVjdExvY2FsRmlsZShcbiAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGgsXG4gICAgICAgICAgICAgICAgICBtb2R1bGVTcGVjaWZpZXJSb290XG4gICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgIHBhcmVudEhhc0NoaWxkKG5vcm1hbGl6ZWRFbnRyeSwgbm9ybWFsaXplZFJlc29sdmVkUGF0aClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkQnVuZGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hvdWxkQnVuZGxlKSB7XG4gICAgICAgICAgICAgIC8vIExldCBlc2J1aWxkIGJ1bmRsZSB0aGlzIGVudHJ5LCBidXQgb3ZlcnJpZGUgc2lkZUVmZmVjdHMgaWYgbmVlZGVkLlxuICAgICAgICAgICAgICAvLyBXZSBtdXN0IHJldHVybiB0aGUgcmVzb2x2ZWQgYHBhdGhgIGFsb25nc2lkZSBgc2lkZUVmZmVjdHNgIGJlY2F1c2VcbiAgICAgICAgICAgICAgLy8gcmV0dXJuaW5nIG9ubHkgYHsgc2lkZUVmZmVjdHM6IHRydWUgfWAgd2l0aG91dCBhIHBhdGggY2F1c2VzIGVzYnVpbGRcbiAgICAgICAgICAgICAgLy8gdG8gZmFsbCB0aHJvdWdoIHRvIGl0cyBvd24gcmVzb2x2ZXIsIHdoaWNoIHJlLXJlYWRzIHRoZSBwYWNrYWdlLmpzb25cbiAgICAgICAgICAgICAgLy8gYW5kIGFwcGxpZXMgYFwic2lkZUVmZmVjdHNcIjogZmFsc2VgIGZyb20gdGhlcmUuXG4gICAgICAgICAgICAgIHJldHVybiBoYXNTaWRlRWZmZWN0c1xuICAgICAgICAgICAgICAgID8geyBwYXRoOiByZXNvbHZlZFBhdGgsIHNpZGVFZmZlY3RzOiB0cnVlIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBleHRlcm5hbFBhdGg6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChzaG91bGRNYWtlUmVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgcmVzb2x2ZWQgZmlsZSBsaXZlcyBpbnNpZGUgbm9kZV9tb2R1bGVzLCBsZXRcbiAgICAgICAgICAgICAgLy8gZXNidWlsZCBidW5kbGUgaXQgcmF0aGVyIHRoYW4gZXh0ZXJuYWxpemluZyB3aXRoIGEgZGVlcGx5XG4gICAgICAgICAgICAgIC8vIG5lc3RlZCByZWxhdGl2ZSBwYXRoLiBEb3duc3RyZWFtIGJ1bmRsZXJzIChSb2xsdXAvVml0ZSlcbiAgICAgICAgICAgICAgLy8gY2FuJ3QgcmV3cml0ZSBvcGFxdWUgYF9fcmVxdWlyZSgpYCBjYWxscyBpbiBDSlMgc2hpbXMsIHNvXG4gICAgICAgICAgICAgIC8vIHJlbGF0aXZlIHBhdGhzIGNvbXB1dGVkIGZvciBgb3V0ZGlyYCBicmVhayBvbmNlIHRoZSBvdXRwdXRcbiAgICAgICAgICAgICAgLy8gaXMgcmVidW5kbGVkIHRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeS5cbiAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGguaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gbGV0IGVzYnVpbGQgYnVuZGxlIGl0XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBleHRlcm5hbFBhdGggPSByZWxhdGl2ZShcbiAgICAgICAgICAgICAgICBvcHRpb25zLm91dGRpciB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgICAgICAgIHJlc29sdmVkUGF0aFxuICAgICAgICAgICAgICApLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5yZXdyaXRlVHNFeHRlbnNpb25zKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV3cml0ZSBUeXBlU2NyaXB0IGV4dGVuc2lvbnMgdG8gdGhlaXIgSlMgZXF1aXZhbGVudHMgc28gdGhlXG4gICAgICAgICAgICAgICAgLy8gZXh0ZXJuYWxpemVkIGltcG9ydCBpcyBsb2FkYWJsZSBieSBOb2RlJ3MgbmF0aXZlIEVTTSBsb2FkZXIuXG4gICAgICAgICAgICAgICAgZXh0ZXJuYWxQYXRoID0gZXh0ZXJuYWxQYXRoXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwudHN4PyQvLCAnLmpzJylcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXC5tdHMkLywgJy5tanMnKVxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcLmN0cyQvLCAnLmNqcycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBleHRlcm5hbFBhdGggPSBzcGVjaWZpZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGV4dGVybmFsOiB0cnVlLFxuICAgICAgICAgICAgICBwYXRoOiBleHRlcm5hbFBhdGgsXG4gICAgICAgICAgICAgIHNpZGVFZmZlY3RzOiBoYXNTaWRlRWZmZWN0cyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE5vIGVudHJpZXNUb0J1bmRsZSDigJQgb25seSBvdmVycmlkZSBzaWRlRWZmZWN0cyB3aGVuIG5lZWRlZC5cbiAgICAgICAgICAvLyBXZSBtdXN0IHJldHVybiB0aGUgcmVzb2x2ZWQgYHBhdGhgIGFsb25nc2lkZSBgc2lkZUVmZmVjdHNgIGJlY2F1c2VcbiAgICAgICAgICAvLyByZXR1cm5pbmcgb25seSBgeyBzaWRlRWZmZWN0czogdHJ1ZSB9YCB3aXRob3V0IGEgcGF0aCBjYXVzZXMgZXNidWlsZFxuICAgICAgICAgIC8vIHRvIGZhbGwgdGhyb3VnaCB0byBpdHMgb3duIHJlc29sdmVyLCB3aGljaCByZS1yZWFkcyB0aGUgcGFja2FnZS5qc29uXG4gICAgICAgICAgLy8gYW5kIGFwcGxpZXMgYFwic2lkZUVmZmVjdHNcIjogZmFsc2VgIGZyb20gdGhlcmUuXG4gICAgICAgICAgcmV0dXJuIGhhc1NpZGVFZmZlY3RzXG4gICAgICAgICAgICA/IHsgcGF0aDogcmVzb2x2ZWRQYXRoLCBzaWRlRWZmZWN0czogdHJ1ZSB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEhhbmRsZSBUeXBlU2NyaXB0IGFuZCBKYXZhU2NyaXB0IGZpbGVzXG4gICAgICBidWlsZC5vbkxvYWQoeyBmaWx0ZXI6IGpzVHNSZWdleCB9LCBhc3luYyAoYXJncykgPT4ge1xuICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhIFR5cGVTY3JpcHQgZmlsZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIERldGVybWluZSB0aGUgbG9hZGVyIGJhc2VkIG9uIHRoZSBvdXRwdXRcbiAgICAgICAgICBsZXQgbG9hZGVyOiAnanMnIHwgJ2pzeCcgfCAndHN4JyA9ICdqcyc7XG4gICAgICAgICAgaWYgKGFyZ3MucGF0aC5lbmRzV2l0aCgnLmpzeCcpKSB7XG4gICAgICAgICAgICBsb2FkZXIgPSAnanN4JztcbiAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3MucGF0aC5lbmRzV2l0aCgnLnRzeCcpKSB7XG4gICAgICAgICAgICBsb2FkZXIgPSAndHN4JztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gYXdhaXQgcmVhZEZpbGUoYXJncy5wYXRoLCAndXRmOCcpO1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTb3VyY2UgPSBzb3VyY2VcbiAgICAgICAgICAgIC5yZXBsYWNlKC9yZXF1aXJlXFwoXFxzKihbJ1wiXSlzZXJ2ZXItb25seVxcMVxccypcXCkvZywgJ3ZvaWQgMCcpXG4gICAgICAgICAgICAucmVwbGFjZSgvcmVxdWlyZVxcKFxccyooWydcIl0pY2xpZW50LW9ubHlcXDFcXHMqXFwpL2csICd2b2lkIDAnKTtcblxuICAgICAgICAgIC8vIENhbGN1bGF0ZSByZWxhdGl2ZSBwYXRoIGZvciBTV0MgcGx1Z2luXG4gICAgICAgICAgLy8gVGhlIGZpbGVuYW1lIHBhcmFtZXRlciBpcyB1c2VkIHRvIGdlbmVyYXRlIHdvcmtmbG93SWQvc3RlcElkLCBzbyBpdCBtdXN0IGJlIHJlbGF0aXZlXG4gICAgICAgICAgY29uc3Qgd29ya2luZ0RpciA9XG4gICAgICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5hYnNXb3JraW5nRGlyIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSBvcHRpb25zLnByb2plY3RSb290IHx8IHdvcmtpbmdEaXI7XG4gICAgICAgICAgY29uc3QgbW9kdWxlU3BlY2lmaWVyUm9vdCA9XG4gICAgICAgICAgICBvcHRpb25zLm1vZHVsZVNwZWNpZmllclJvb3QgfHwgcHJvamVjdFJvb3Q7XG4gICAgICAgICAgLy8gTm9ybWFsaXplIHBhdGhzOiBjb252ZXJ0IGJhY2tzbGFzaGVzIHRvIGZvcndhcmQgc2xhc2hlcyBhbmQgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXNcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkV29ya2luZ0RpciA9IHdvcmtpbmdEaXJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gYXJncy5wYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgICAgICAgIC8vIFdpbmRvd3MgZml4OiBBbHdheXMgZG8gY2FzZS1pbnNlbnNpdGl2ZSBwYXRoIGNvbXBhcmlzb24gYXMgdGhlIFBSSU1BUlkgbG9naWNcbiAgICAgICAgICAvLyB0byB3b3JrIGFyb3VuZCBub2RlOnBhdGgucmVsYXRpdmUoKSBub3QgcmVjb2duaXppbmcgcGF0aHMgd2l0aCBkaWZmZXJlbnQgZHJpdmVcbiAgICAgICAgICAvLyBsZXR0ZXIgY2FzaW5nIChlLmcuLCBEOiB2cyBkOikgYXMgYmVpbmcgaW4gdGhlIHNhbWUgdHJlZVxuICAgICAgICAgIGNvbnN0IGxvd2VyV2QgPSBub3JtYWxpemVkV29ya2luZ0Rpci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGNvbnN0IGxvd2VyUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICBsZXQgcmVsYXRpdmVGaWxlcGF0aDogc3RyaW5nO1xuICAgICAgICAgIGlmIChsb3dlclBhdGguc3RhcnRzV2l0aChsb3dlcldkICsgJy8nKSkge1xuICAgICAgICAgICAgLy8gRmlsZSBpcyB1bmRlciB3b3JraW5nIGRpcmVjdG9yeSAtIG1hbnVhbGx5IGNhbGN1bGF0ZSByZWxhdGl2ZSBwYXRoXG4gICAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgd2UgZ2V0IGEgcmVsYXRpdmUgcGF0aCBldmVuIHdpdGggZHJpdmUgbGV0dGVyIGNhc2luZyBpc3N1ZXNcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGggPSBub3JtYWxpemVkUGF0aC5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWRXb3JraW5nRGlyLmxlbmd0aCArIDFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChsb3dlclBhdGggPT09IGxvd2VyV2QpIHtcbiAgICAgICAgICAgIC8vIEZpbGUgSVMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoID0gJy4nO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGaWxlIGlzIG91dHNpZGUgd29ya2luZyBkaXJlY3RvcnkgLSB1c2UgcmVsYXRpdmUoKSBhbmQgc3RyaXAgLi4vIHByZWZpeGVzIGlmIG5lZWRlZFxuICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9IHJlbGF0aXZlKFxuICAgICAgICAgICAgICBub3JtYWxpemVkV29ya2luZ0RpcixcbiAgICAgICAgICAgICAgbm9ybWFsaXplZFBhdGhcbiAgICAgICAgICAgICkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gICAgICAgICAgICAvLyBIYW5kbGUgZmlsZXMgZGlzY292ZXJlZCBvdXRzaWRlIHRoZSB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAgICAgICAgLy8gVGhlc2UgY29tZSBiYWNrIGFzIC4uL3BhdGgvdG8vZmlsZSwgYnV0IHdlIHdhbnQganVzdCBwYXRoL3RvL2ZpbGVcbiAgICAgICAgICAgIGlmIChyZWxhdGl2ZUZpbGVwYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFsaWFzZWRSZWxhdGl2ZVBhdGggPVxuICAgICAgICAgICAgICAgIGF3YWl0IHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoKGFyZ3MucGF0aCwgd29ya2luZ0Rpcik7XG4gICAgICAgICAgICAgIGlmIChhbGlhc2VkUmVsYXRpdmVQYXRoKSB7XG4gICAgICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9IGFsaWFzZWRSZWxhdGl2ZVBhdGg7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9IHJlbGF0aXZlRmlsZXBhdGhcbiAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSAnLi4nKVxuICAgICAgICAgICAgICAgICAgLmpvaW4oJy8nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZpbmFsIHNhZmV0eSBjaGVjayAtIGVuc3VyZSB3ZSBuZXZlciBwYXNzIGFuIGFic29sdXRlIHBhdGggdG8gU1dDXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aC5pbmNsdWRlcygnOicpIHx8XG4gICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoLnN0YXJ0c1dpdGgoJy8nKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgaWYgaXQgZG9lcywgdXNlIGp1c3QgdGhlIGZpbGVuYW1lIGFzIGxhc3QgcmVzb3J0XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBgW0VSUk9SXSByZWxhdGl2ZUZpbGVwYXRoIGlzIHN0aWxsIGFic29sdXRlOiAke3JlbGF0aXZlRmlsZXBhdGh9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGggPSBub3JtYWxpemVkUGF0aC5zcGxpdCgnLycpLnBvcCgpIHx8ICd1bmtub3duLnRzJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7IGNvZGU6IHRyYW5zZm9ybWVkQ29kZSwgd29ya2Zsb3dNYW5pZmVzdCB9ID1cbiAgICAgICAgICAgIGF3YWl0IGFwcGx5U3djVHJhbnNmb3JtKFxuICAgICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoLFxuICAgICAgICAgICAgICBub3JtYWxpemVkU291cmNlLFxuICAgICAgICAgICAgICBvcHRpb25zLm1vZGUsXG4gICAgICAgICAgICAgIGFyZ3MucGF0aCwgLy8gUGFzcyBhYnNvbHV0ZSBwYXRoIGZvciBtb2R1bGUgc3BlY2lmaWVyIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAgICAgICAgIG1vZHVsZVNwZWNpZmllclJvb3RcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoIW9wdGlvbnMud29ya2Zsb3dNYW5pZmVzdCkge1xuICAgICAgICAgICAgb3B0aW9ucy53b3JrZmxvd01hbmlmZXN0ID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVyZ2VXb3JrZmxvd01hbmlmZXN0KFxuICAgICAgICAgICAgb3B0aW9ucy53b3JrZmxvd01hbmlmZXN0LFxuICAgICAgICAgICAgd29ya2Zsb3dNYW5pZmVzdCxcbiAgICAgICAgICAgIHN0ZXBJZHNGb3JDdXJyZW50QnVpbGQsXG4gICAgICAgICAgICB3b3JrZmxvd0lkc0ZvckN1cnJlbnRCdWlsZFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudHM6IHRyYW5zZm9ybWVkQ29kZSxcbiAgICAgICAgICAgIGxvYWRlcixcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGDinYwgU1dDIHRyYW5zZm9ybSBlcnJvciBpbiAke2FyZ3MucGF0aH06YCxcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogYFNXQyB0cmFuc2Zvcm0gZmFpbGVkOiAke2Vycm9yTWVzc2FnZX1gLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB7IGZpbGU6IGFyZ3MucGF0aCwgbGluZTogMCwgY29sdW1uOiAwIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzUHJvamVjdExvY2FsRmlsZShmaWxlUGF0aDogc3RyaW5nLCBwcm9qZWN0Um9vdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChub3JtYWxpemVQYXRoKGZpbGVQYXRoKS5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgcmVzb2x2ZU1vZHVsZVNwZWNpZmllcihmaWxlUGF0aCwgcHJvamVjdFJvb3QpLm1vZHVsZVNwZWNpZmllciA9PT0gdW5kZWZpbmVkXG4gICk7XG59XG4iXX0=
|