@workflow/builders 5.0.0-beta.43 → 5.0.0-beta.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/base-builder.d.ts +19 -2
- package/dist/base-builder.d.ts.map +1 -1
- package/dist/base-builder.js +77 -56
- package/dist/constants.d.ts +2 -2
- package/dist/constants.js +3 -3
- package/dist/fast-discovery.d.ts +1 -1
- package/dist/fast-discovery.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/manifest-ids.d.ts +35 -0
- package/dist/manifest-ids.d.ts.map +1 -0
- package/dist/manifest-ids.js +69 -0
- package/dist/manifest-ids.test.d.ts +2 -0
- package/dist/manifest-ids.test.d.ts.map +1 -0
- package/dist/manifest-ids.test.js +86 -0
- package/dist/module-specifier.d.ts +1 -1
- package/dist/module-specifier.js +2 -2
- package/dist/node-module-esbuild-plugin.js +3 -3
- package/dist/optional-otel-api.d.ts +1 -1
- package/dist/optional-otel-api.js +2 -2
- package/dist/optional-typescript.js +2 -2
- package/dist/optional-ws-native.d.ts +1 -1
- package/dist/optional-ws-native.js +2 -2
- package/dist/step-source-registration.test.js +61 -1
- package/dist/swc-esbuild-plugin.d.ts +1 -1
- package/dist/swc-esbuild-plugin.d.ts.map +1 -1
- package/dist/swc-esbuild-plugin.js +14 -42
- package/dist/swc-esbuild-plugin.test.js +81 -1
- package/dist/types.d.ts +3 -3
- package/dist/types.js +1 -1
- package/dist/vercel-build-output-api.js +2 -2
- package/dist/workflow-bundle-boundary.test.d.ts +2 -0
- package/dist/workflow-bundle-boundary.test.d.ts.map +1 -0
- package/dist/workflow-bundle-boundary.test.js +78 -0
- package/dist/write-if-changed.d.ts +20 -0
- package/dist/write-if-changed.d.ts.map +1 -0
- package/dist/write-if-changed.js +44 -0
- package/dist/write-if-changed.test.d.ts +2 -0
- package/dist/write-if-changed.test.d.ts.map +1 -0
- package/dist/write-if-changed.test.js +186 -0
- package/package.json +4 -4
|
@@ -32,7 +32,7 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
|
|
|
32
32
|
await this.createVcConfig(workflowsFuncDir, {
|
|
33
33
|
handler: 'index.mjs',
|
|
34
34
|
// Skip the source-map-support runtime shim when sourcemaps are
|
|
35
|
-
// disabled
|
|
35
|
+
// disabled: it's a meaningful chunk of the function bundle and
|
|
36
36
|
// serves no purpose without maps.
|
|
37
37
|
shouldAddSourcemapSupport: this.sourcemapsEnabled,
|
|
38
38
|
maxDuration: 'max',
|
|
@@ -93,4 +93,4 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
|
|
|
93
93
|
this.logBaseBuilderInfo('Webhook function available at /.well-known/workflow/v1/webhook/[token]');
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsV0FBVztJQUMxRCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFFM0Usa0NBQWtDO1FBQ2xDLE1BQU0sS0FBSyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkQsdUVBQXVFO1FBQ3ZFLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsRUFBRTtZQUNoRCxTQUFTLEVBQUUsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNuRCx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixDQUNyQixvREFBb0QsQ0FDckQsQ0FBQztRQUNGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sS0FBSyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFbkQsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDO1lBQ25ELFVBQVU7WUFDVixZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLDBCQUEwQixDQUFDO1lBQ2hFLFdBQVcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDO1lBQ2hELFlBQVk7WUFDWixpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztRQUVILGdFQUFnRTtRQUNoRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN6RCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUMsT0FBTyxFQUFFLFdBQVc7WUFDcEIsK0RBQStEO1lBQy9ELGdFQUFnRTtZQUNoRSxrQ0FBa0M7WUFDbEMseUJBQXlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUNqRCxXQUFXLEVBQUUsS0FBSztZQUNsQixvQkFBb0IsRUFBRSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDakQsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztTQUM3QixDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUMxRCxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5Qyw0QkFBNEI7UUFDNUIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQzdCLG9CQUFvQixFQUNwQixxQkFBcUIsQ0FDdEIsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUM3QyxrQkFBa0I7WUFDbEIsV0FBVyxFQUFFLG9CQUFvQjtZQUNqQyxRQUFRO1NBQ1QsQ0FBQyxDQUFDO1FBRUgsb0VBQW9FO1FBQ3BFLDBFQUEwRTtRQUMxRSxJQUFJLElBQUksQ0FBQywwQkFBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNwRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FDNUIsU0FBUyxFQUNULGdDQUFnQyxDQUNqQyxDQUFDO1lBQ0YsTUFBTSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsTUFBTSxRQUFRLENBQ1osSUFBSSxDQUFDLG9CQUFvQixFQUFFLGVBQWUsQ0FBQyxFQUMzQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLENBQ3pDLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBQ2pDLG9CQUFvQixFQUNwQixNQUFNLEdBQUcsSUFBSSxHQUlkO1FBQ0MsSUFBSSxDQUFDLGtCQUFrQixDQUNyQixtREFBbUQsQ0FDcEQsQ0FBQztRQUNGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBRTFFLHNEQUFzRDtRQUN0RCxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUM7WUFDMUMsTUFBTSxFQUFFLG9EQUFvRDtTQUM3RCxDQUFDLENBQUM7UUFFSCwrREFBK0Q7UUFDL0QsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUU7WUFDeEMsT0FBTyxFQUFFLFdBQVc7WUFDcEIsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsdUJBQXVCLENBQUMsU0FBaUI7UUFDckQsMENBQTBDO1FBQzFDLE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsR0FBRyxFQUFFLDBEQUEwRDtvQkFDL0QsSUFBSSxFQUFFLDBDQUEwQztpQkFDakQ7YUFDRjtTQUNGLENBQUM7UUFFRixNQUFNLFNBQVMsQ0FDYixJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxFQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDM0MsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQywrQkFBK0IsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLDhEQUE4RCxDQUMvRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUNyQix3RUFBd0UsQ0FDekUsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcHlGaWxlLCBta2Rpciwgcm0sIHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBCYXNlQnVpbGRlciB9IGZyb20gJy4vYmFzZS1idWlsZGVyLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93UXVldWVUcmlnZ2VyIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG5leHBvcnQgY2xhc3MgVmVyY2VsQnVpbGRPdXRwdXRBUElCdWlsZGVyIGV4dGVuZHMgQmFzZUJ1aWxkZXIge1xuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvdXRwdXREaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICcudmVyY2VsL291dHB1dCcpO1xuICAgIGNvbnN0IGZ1bmN0aW9uc0RpciA9IGpvaW4ob3V0cHV0RGlyLCAnZnVuY3Rpb25zJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dHZW5lcmF0ZWREaXIgPSBqb2luKGZ1bmN0aW9uc0RpciwgJy53ZWxsLWtub3duL3dvcmtmbG93L3YxJyk7XG5cbiAgICAvLyBFbnN1cmUgb3V0cHV0IGRpcmVjdG9yaWVzIGV4aXN0XG4gICAgYXdhaXQgbWtkaXIod29ya2Zsb3dHZW5lcmF0ZWREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIEJ1aWxkIGNhY2hlcyBtYXkgc3RpbGwgY29udGFpbiB0aGUgcmV0aXJlZCBzdGFuZGFsb25lIHN0ZXAgZnVuY3Rpb24uXG4gICAgYXdhaXQgcm0oam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3N0ZXAuZnVuYycpLCB7XG4gICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICBmb3JjZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICBjb25zdCB0c2NvbmZpZ1BhdGggPSBhd2FpdCB0aGlzLmZpbmRUc0NvbmZpZ1BhdGgoKTtcbiAgICAvLyBDcmVhdGUgY29tYmluZWQgYnVuZGxlIGluIGZsb3cuZnVuYy9cbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdDcmVhdGluZyBWZXJjZWwgQnVpbGQgT3V0cHV0IEFQSSBjb21iaW5lZCBmdW5jdGlvbidcbiAgICApO1xuICAgIGNvbnN0IHdvcmtmbG93c0Z1bmNEaXIgPSBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnZmxvdy5mdW5jJyk7XG4gICAgYXdhaXQgbWtkaXIod29ya2Zsb3dzRnVuY0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbWJpbmVkQnVuZGxlKHtcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICBzdGVwc091dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ19fc3RlcF9yZWdpc3RyYXRpb25zLm1qcycpLFxuICAgICAgZmxvd091dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ2luZGV4Lm1qcycpLFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgYnVuZGxlRmluYWxPdXRwdXQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZS5qc29uIGFuZCAudmMtY29uZmlnLmpzb24gZm9yIGNvbWJpbmVkIGZ1bmN0aW9uXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVQYWNrYWdlSnNvbih3b3JrZmxvd3NGdW5jRGlyLCAnbW9kdWxlJyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVWY0NvbmZpZyh3b3JrZmxvd3NGdW5jRGlyLCB7XG4gICAgICBoYW5kbGVyOiAnaW5kZXgubWpzJyxcbiAgICAgIC8vIFNraXAgdGhlIHNvdXJjZS1tYXAtc3VwcG9ydCBydW50aW1lIHNoaW0gd2hlbiBzb3VyY2VtYXBzIGFyZVxuICAgICAgLy8gZGlzYWJsZWQg4oCUIGl0J3MgYSBtZWFuaW5nZnVsIGNodW5rIG9mIHRoZSBmdW5jdGlvbiBidW5kbGUgYW5kXG4gICAgICAvLyBzZXJ2ZXMgbm8gcHVycG9zZSB3aXRob3V0IG1hcHMuXG4gICAgICBzaG91bGRBZGRTb3VyY2VtYXBTdXBwb3J0OiB0aGlzLnNvdXJjZW1hcHNFbmFibGVkLFxuICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtnZXRXb3JrZmxvd1F1ZXVlVHJpZ2dlcigpXSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLmJ1aWxkV2ViaG9va0Z1bmN0aW9uKHsgd29ya2Zsb3dHZW5lcmF0ZWREaXIgfSk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVCdWlsZE91dHB1dENvbmZpZyhvdXRwdXREaXIpO1xuXG4gICAgLy8gR2VuZXJhdGUgdW5pZmllZCBtYW5pZmVzdFxuICAgIGNvbnN0IHdvcmtmbG93QnVuZGxlUGF0aCA9IGpvaW4oXG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICdmbG93LmZ1bmMvaW5kZXgubWpzJ1xuICAgICk7XG4gICAgY29uc3QgbWFuaWZlc3RKc29uID0gYXdhaXQgdGhpcy5jcmVhdGVNYW5pZmVzdCh7XG4gICAgICB3b3JrZmxvd0J1bmRsZVBhdGgsXG4gICAgICBtYW5pZmVzdERpcjogd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICBtYW5pZmVzdCxcbiAgICB9KTtcblxuICAgIC8vIEV4cG9zZSBtYW5pZmVzdCBhcyBhIHN0YXRpYyBmaWxlIHdoZW4gV09SS0ZMT1dfUFVCTElDX01BTklGRVNUPTEuXG4gICAgLy8gVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgc2VydmVzIHN0YXRpYyBmaWxlcyBmcm9tIC52ZXJjZWwvb3V0cHV0L3N0YXRpYy9cbiAgICBpZiAodGhpcy5zaG91bGRFeHBvc2VQdWJsaWNNYW5pZmVzdCAmJiBtYW5pZmVzdEpzb24pIHtcbiAgICAgIGNvbnN0IHN0YXRpY01hbmlmZXN0RGlyID0gam9pbihcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICAnc3RhdGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxJ1xuICAgICAgKTtcbiAgICAgIGF3YWl0IG1rZGlyKHN0YXRpY01hbmlmZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5WRVJDRUxfREVQTE9ZTUVOVF9JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKHN0YXRpY01hbmlmZXN0RGlyLCAnLmdpdGlnbm9yZScpLCAnKicpO1xuICAgICAgfVxuICAgICAgYXdhaXQgY29weUZpbGUoXG4gICAgICAgIGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdtYW5pZmVzdC5qc29uJyksXG4gICAgICAgIGpvaW4oc3RhdGljTWFuaWZlc3REaXIsICdtYW5pZmVzdC5qc29uJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVDbGllbnRMaWJyYXJ5KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkV2ViaG9va0Z1bmN0aW9uKHtcbiAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICBidW5kbGUgPSB0cnVlLFxuICB9OiB7XG4gICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICBidW5kbGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oXG4gICAgICAnQ3JlYXRpbmcgVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgd2ViaG9vayBmdW5jdGlvbidcbiAgICApO1xuICAgIGNvbnN0IHdlYmhvb2tGdW5jRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3dlYmhvb2svW3Rva2VuXS5mdW5jJyk7XG5cbiAgICAvLyBCdW5kbGUgdGhlIHdlYmhvb2sgcm91dGUgd2l0aCBkZXBlbmRlbmNpZXMgcmVzb2x2ZWRcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVdlYmhvb2tCdW5kbGUoe1xuICAgICAgb3V0ZmlsZTogam9pbih3ZWJob29rRnVuY0RpciwgJ2luZGV4Lm1qcycpLFxuICAgICAgYnVuZGxlLCAvLyBCdWlsZCBPdXRwdXQgQVBJIG5lZWRzIGJ1bmRsaW5nIChleGNlcHQgaW4gdGVzdHMpXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZS5qc29uIGFuZCAudmMtY29uZmlnLmpzb24gZm9yIHdlYmhvb2sgZnVuY3Rpb25cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVBhY2thZ2VKc29uKHdlYmhvb2tGdW5jRGlyLCAnbW9kdWxlJyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVWY0NvbmZpZyh3ZWJob29rRnVuY0Rpciwge1xuICAgICAgaGFuZGxlcjogJ2luZGV4Lm1qcycsXG4gICAgICBzaG91bGRBZGRIZWxwZXJzOiBmYWxzZSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUJ1aWxkT3V0cHV0Q29uZmlnKG91dHB1dERpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ3JlYXRlIGNvbmZpZy5qc29uIGZvciBCdWlsZCBPdXRwdXQgQVBJXG4gICAgY29uc3QgYnVpbGRPdXRwdXRDb25maWcgPSB7XG4gICAgICB2ZXJzaW9uOiAzLFxuICAgICAgcm91dGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzcmM6ICdeXFxcXC9cXFxcLndlbGwta25vd25cXFxcL3dvcmtmbG93XFxcXC92MVxcXFwvd2ViaG9va1xcXFwvKFteXFxcXC9dKykkJyxcbiAgICAgICAgICBkZXN0OiAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3dlYmhvb2svW3Rva2VuXScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICBqb2luKG91dHB1dERpciwgJ2NvbmZpZy5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeShidWlsZE91dHB1dENvbmZpZywgbnVsbCwgMilcbiAgICApO1xuXG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oYEJ1aWxkIE91dHB1dCBBUEkgY3JlYXRlZCBhdCAke291dHB1dERpcn1gKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdDb21iaW5lZCBmdW5jdGlvbiBhdmFpbGFibGUgYXQgLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cnXG4gICAgKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdXZWJob29rIGZ1bmN0aW9uIGF2YWlsYWJsZSBhdCAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvd2ViaG9vay9bdG9rZW5dJ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsV0FBVztJQUMxRCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFFM0Usa0NBQWtDO1FBQ2xDLE1BQU0sS0FBSyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkQsdUVBQXVFO1FBQ3ZFLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsRUFBRTtZQUNoRCxTQUFTLEVBQUUsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUs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TUFBTSxFQUFFLG9EQUFvRDtTQUM3RCxDQUFDLENBQUM7UUFFSCwrREFBK0Q7UUFDL0QsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUU7WUFDeEMsT0FBTyxFQUFFLFdBQVc7WUFDcEIsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsdUJBQXVCLENBQUMsU0FBaUI7UUFDckQsMENBQTBDO1FBQzFDLE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsR0FBRyxFQUFFLDBEQUEwRDtvQkFDL0QsSUFBSSxFQUFFLDBDQUEwQztpQkFDakQ7YUFDRjtTQUNGLENBQUM7UUFFRixNQUFNLFNBQVMsQ0FDYixJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxFQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDM0MsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQywrQkFBK0IsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLDhEQUE4RCxDQUMvRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUNyQix3RUFBd0UsQ0FDekUsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcHlGaWxlLCBta2Rpciwgcm0sIHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBCYXNlQnVpbGRlciB9IGZyb20gJy4vYmFzZS1idWlsZGVyLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93UXVldWVUcmlnZ2VyIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG5leHBvcnQgY2xhc3MgVmVyY2VsQnVpbGRPdXRwdXRBUElCdWlsZGVyIGV4dGVuZHMgQmFzZUJ1aWxkZXIge1xuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvdXRwdXREaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICcudmVyY2VsL291dHB1dCcpO1xuICAgIGNvbnN0IGZ1bmN0aW9uc0RpciA9IGpvaW4ob3V0cHV0RGlyLCAnZnVuY3Rpb25zJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dHZW5lcmF0ZWREaXIgPSBqb2luKGZ1bmN0aW9uc0RpciwgJy53ZWxsLWtub3duL3dvcmtmbG93L3YxJyk7XG5cbiAgICAvLyBFbnN1cmUgb3V0cHV0IGRpcmVjdG9yaWVzIGV4aXN0XG4gICAgYXdhaXQgbWtkaXIod29ya2Zsb3dHZW5lcmF0ZWREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIEJ1aWxkIGNhY2hlcyBtYXkgc3RpbGwgY29udGFpbiB0aGUgcmV0aXJlZCBzdGFuZGFsb25lIHN0ZXAgZnVuY3Rpb24uXG4gICAgYXdhaXQgcm0oam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3N0ZXAuZnVuYycpLCB7XG4gICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICBmb3JjZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICBjb25zdCB0c2NvbmZpZ1BhdGggPSBhd2FpdCB0aGlzLmZpbmRUc0NvbmZpZ1BhdGgoKTtcbiAgICAvLyBDcmVhdGUgY29tYmluZWQgYnVuZGxlIGluIGZsb3cuZnVuYy9cbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdDcmVhdGluZyBWZXJjZWwgQnVpbGQgT3V0cHV0IEFQSSBjb21iaW5lZCBmdW5jdGlvbidcbiAgICApO1xuICAgIGNvbnN0IHdvcmtmbG93c0Z1bmNEaXIgPSBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnZmxvdy5mdW5jJyk7XG4gICAgYXdhaXQgbWtkaXIod29ya2Zsb3dzRnVuY0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbWJpbmVkQnVuZGxlKHtcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICBzdGVwc091dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ19fc3RlcF9yZWdpc3RyYXRpb25zLm1qcycpLFxuICAgICAgZmxvd091dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ2luZGV4Lm1qcycpLFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgYnVuZGxlRmluYWxPdXRwdXQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZS5qc29uIGFuZCAudmMtY29uZmlnLmpzb24gZm9yIGNvbWJpbmVkIGZ1bmN0aW9uXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVQYWNrYWdlSnNvbih3b3JrZmxvd3NGdW5jRGlyLCAnbW9kdWxlJyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVWY0NvbmZpZyh3b3JrZmxvd3NGdW5jRGlyLCB7XG4gICAgICBoYW5kbGVyOiAnaW5kZXgubWpzJyxcbiAgICAgIC8vIFNraXAgdGhlIHNvdXJjZS1tYXAtc3VwcG9ydCBydW50aW1lIHNoaW0gd2hlbiBzb3VyY2VtYXBzIGFyZVxuICAgICAgLy8gZGlzYWJsZWQ6IGl0J3MgYSBtZWFuaW5nZnVsIGNodW5rIG9mIHRoZSBmdW5jdGlvbiBidW5kbGUgYW5kXG4gICAgICAvLyBzZXJ2ZXMgbm8gcHVycG9zZSB3aXRob3V0IG1hcHMuXG4gICAgICBzaG91bGRBZGRTb3VyY2VtYXBTdXBwb3J0OiB0aGlzLnNvdXJjZW1hcHNFbmFibGVkLFxuICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtnZXRXb3JrZmxvd1F1ZXVlVHJpZ2dlcigpXSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLmJ1aWxkV2ViaG9va0Z1bmN0aW9uKHsgd29ya2Zsb3dHZW5lcmF0ZWREaXIgfSk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVCdWlsZE91dHB1dENvbmZpZyhvdXRwdXREaXIpO1xuXG4gICAgLy8gR2VuZXJhdGUgdW5pZmllZCBtYW5pZmVzdFxuICAgIGNvbnN0IHdvcmtmbG93QnVuZGxlUGF0aCA9IGpvaW4oXG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICdmbG93LmZ1bmMvaW5kZXgubWpzJ1xuICAgICk7XG4gICAgY29uc3QgbWFuaWZlc3RKc29uID0gYXdhaXQgdGhpcy5jcmVhdGVNYW5pZmVzdCh7XG4gICAgICB3b3JrZmxvd0J1bmRsZVBhdGgsXG4gICAgICBtYW5pZmVzdERpcjogd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICBtYW5pZmVzdCxcbiAgICB9KTtcblxuICAgIC8vIEV4cG9zZSBtYW5pZmVzdCBhcyBhIHN0YXRpYyBmaWxlIHdoZW4gV09SS0ZMT1dfUFVCTElDX01BTklGRVNUPTEuXG4gICAgLy8gVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgc2VydmVzIHN0YXRpYyBmaWxlcyBmcm9tIC52ZXJjZWwvb3V0cHV0L3N0YXRpYy9cbiAgICBpZiAodGhpcy5zaG91bGRFeHBvc2VQdWJsaWNNYW5pZmVzdCAmJiBtYW5pZmVzdEpzb24pIHtcbiAgICAgIGNvbnN0IHN0YXRpY01hbmlmZXN0RGlyID0gam9pbihcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICAnc3RhdGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxJ1xuICAgICAgKTtcbiAgICAgIGF3YWl0IG1rZGlyKHN0YXRpY01hbmlmZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5WRVJDRUxfREVQTE9ZTUVOVF9JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKHN0YXRpY01hbmlmZXN0RGlyLCAnLmdpdGlnbm9yZScpLCAnKicpO1xuICAgICAgfVxuICAgICAgYXdhaXQgY29weUZpbGUoXG4gICAgICAgIGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdtYW5pZmVzdC5qc29uJyksXG4gICAgICAgIGpvaW4oc3RhdGljTWFuaWZlc3REaXIsICdtYW5pZmVzdC5qc29uJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVDbGllbnRMaWJyYXJ5KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkV2ViaG9va0Z1bmN0aW9uKHtcbiAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICBidW5kbGUgPSB0cnVlLFxuICB9OiB7XG4gICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICBidW5kbGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oXG4gICAgICAnQ3JlYXRpbmcgVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgd2ViaG9vayBmdW5jdGlvbidcbiAgICApO1xuICAgIGNvbnN0IHdlYmhvb2tGdW5jRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3dlYmhvb2svW3Rva2VuXS5mdW5jJyk7XG5cbiAgICAvLyBCdW5kbGUgdGhlIHdlYmhvb2sgcm91dGUgd2l0aCBkZXBlbmRlbmNpZXMgcmVzb2x2ZWRcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVdlYmhvb2tCdW5kbGUoe1xuICAgICAgb3V0ZmlsZTogam9pbih3ZWJob29rRnVuY0RpciwgJ2luZGV4Lm1qcycpLFxuICAgICAgYnVuZGxlLCAvLyBCdWlsZCBPdXRwdXQgQVBJIG5lZWRzIGJ1bmRsaW5nIChleGNlcHQgaW4gdGVzdHMpXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZS5qc29uIGFuZCAudmMtY29uZmlnLmpzb24gZm9yIHdlYmhvb2sgZnVuY3Rpb25cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVBhY2thZ2VKc29uKHdlYmhvb2tGdW5jRGlyLCAnbW9kdWxlJyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVWY0NvbmZpZyh3ZWJob29rRnVuY0Rpciwge1xuICAgICAgaGFuZGxlcjogJ2luZGV4Lm1qcycsXG4gICAgICBzaG91bGRBZGRIZWxwZXJzOiBmYWxzZSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUJ1aWxkT3V0cHV0Q29uZmlnKG91dHB1dERpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ3JlYXRlIGNvbmZpZy5qc29uIGZvciBCdWlsZCBPdXRwdXQgQVBJXG4gICAgY29uc3QgYnVpbGRPdXRwdXRDb25maWcgPSB7XG4gICAgICB2ZXJzaW9uOiAzLFxuICAgICAgcm91dGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzcmM6ICdeXFxcXC9cXFxcLndlbGwta25vd25cXFxcL3dvcmtmbG93XFxcXC92MVxcXFwvd2ViaG9va1xcXFwvKFteXFxcXC9dKykkJyxcbiAgICAgICAgICBkZXN0OiAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3dlYmhvb2svW3Rva2VuXScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICBqb2luKG91dHB1dERpciwgJ2NvbmZpZy5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeShidWlsZE91dHB1dENvbmZpZywgbnVsbCwgMilcbiAgICApO1xuXG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oYEJ1aWxkIE91dHB1dCBBUEkgY3JlYXRlZCBhdCAke291dHB1dERpcn1gKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdDb21iaW5lZCBmdW5jdGlvbiBhdmFpbGFibGUgYXQgLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cnXG4gICAgKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdXZWJob29rIGZ1bmN0aW9uIGF2YWlsYWJsZSBhdCAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvd2ViaG9vay9bdG9rZW5dJ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-bundle-boundary.test.d.ts","sourceRoot":"","sources":["../src/workflow-bundle-boundary.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
4
|
+
import { BaseBuilder } from './base-builder.js';
|
|
5
|
+
class TestBuilder extends BaseBuilder {
|
|
6
|
+
async build() { }
|
|
7
|
+
createWorkflowBundle(inputFile, outfile, discoveredEntries) {
|
|
8
|
+
return this.createWorkflowsBundle({
|
|
9
|
+
inputFiles: [inputFile],
|
|
10
|
+
outfile,
|
|
11
|
+
bundleFinalOutput: false,
|
|
12
|
+
includeMetafile: true,
|
|
13
|
+
discoveredEntries,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
describe('workflow bundle boundary', () => {
|
|
18
|
+
const repoRoot = resolve(import.meta.dirname, '../../..');
|
|
19
|
+
const outputDirs = [];
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
for (const outputDir of outputDirs) {
|
|
22
|
+
rmSync(outputDir, { recursive: true, force: true });
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
async function getWorkflowBundleInputs(source) {
|
|
26
|
+
// Keep the fixture beneath this package so its workspace dependencies are
|
|
27
|
+
// resolved exactly as they are for a real consumer workflow.
|
|
28
|
+
const outputDir = mkdtempSync(join(import.meta.dirname, '.workflow-pruning-'));
|
|
29
|
+
outputDirs.push(outputDir);
|
|
30
|
+
const inputFile = join(outputDir, 'workflow.ts');
|
|
31
|
+
writeFileSync(inputFile, source);
|
|
32
|
+
const config = {
|
|
33
|
+
buildTarget: 'standalone',
|
|
34
|
+
workingDir: outputDir,
|
|
35
|
+
projectRoot: repoRoot,
|
|
36
|
+
moduleSpecifierRoot: repoRoot,
|
|
37
|
+
dirs: ['.'],
|
|
38
|
+
stepsBundlePath: join(outputDir, 'steps.js'),
|
|
39
|
+
workflowsBundlePath: join(outputDir, 'workflow.js'),
|
|
40
|
+
webhookBundlePath: join(outputDir, 'webhook.js'),
|
|
41
|
+
sourcemap: false,
|
|
42
|
+
};
|
|
43
|
+
const discoveredEntries = {
|
|
44
|
+
discoveredSteps: new Set(),
|
|
45
|
+
discoveredWorkflows: new Set([inputFile]),
|
|
46
|
+
discoveredSerdeFiles: new Set(),
|
|
47
|
+
};
|
|
48
|
+
const { interimBundleMetafile } = await new TestBuilder(config).createWorkflowBundle(inputFile, config.workflowsBundlePath, discoveredEntries);
|
|
49
|
+
expect(interimBundleMetafile).toBeDefined();
|
|
50
|
+
return Object.keys(interimBundleMetafile?.inputs ?? {}).map((input) => input.replaceAll('\\', '/'));
|
|
51
|
+
}
|
|
52
|
+
function expectNoZodInputs(inputs) {
|
|
53
|
+
expect(inputs.filter((input) => input.includes('/node_modules/zod/'))).toEqual([]);
|
|
54
|
+
}
|
|
55
|
+
it('does not bundle world schemas into a minimal workflow', async () => {
|
|
56
|
+
const inputs = await getWorkflowBundleInputs(`export async function minimal() { "use workflow"; return 1; }`);
|
|
57
|
+
expectNoZodInputs(inputs);
|
|
58
|
+
});
|
|
59
|
+
it('does not bundle world schemas for core workflow APIs', async () => {
|
|
60
|
+
const inputs = await getWorkflowBundleInputs(`
|
|
61
|
+
import { createHook, setAttributes } from '@workflow/core';
|
|
62
|
+
|
|
63
|
+
async function basicStep(value: number) {
|
|
64
|
+
"use step";
|
|
65
|
+
return value + 1;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export async function realisticWorkflow() {
|
|
69
|
+
"use workflow";
|
|
70
|
+
await setAttributes({ phase: 'started' });
|
|
71
|
+
const hook = createHook<number>();
|
|
72
|
+
return basicStep(await hook);
|
|
73
|
+
}
|
|
74
|
+
`);
|
|
75
|
+
expectNoZodInputs(inputs);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctYnVuZGxlLWJvdW5kYXJ5LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd29ya2Zsb3ctYnVuZGxlLWJvdW5kYXJ5LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzdELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBMEIsTUFBTSxtQkFBbUIsQ0FBQztBQUd4RSxNQUFNLFdBQVksU0FBUSxXQUFXO0lBQ25DLEtBQUssQ0FBQyxLQUFLLEtBQW1CLENBQUM7SUFFL0Isb0JBQW9CLENBQ2xCLFNBQWlCLEVBQ2pCLE9BQWUsRUFDZixpQkFBb0M7UUFFcEMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7WUFDaEMsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ3ZCLE9BQU87WUFDUCxpQkFBaUIsRUFBRSxLQUFLO1lBQ3hCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGlCQUFpQjtTQUNsQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxRQUFRLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMxRCxNQUFNLFVBQVUsR0FBYSxFQUFFLENBQUM7SUFFaEMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsS0FBSyxVQUFVLHVCQUF1QixDQUFDLE1BQWM7UUFDbkQsMEVBQTBFO1FBQzFFLDZEQUE2RDtRQUM3RCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUNoRCxDQUFDO1FBQ0YsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELGFBQWEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFakMsTUFBTSxNQUFNLEdBQXFCO1lBQy9CLFdBQVcsRUFBRSxZQUFZO1lBQ3pCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLG1CQUFtQixFQUFFLFFBQVE7WUFDN0IsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ1gsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDO1lBQzVDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDO1lBQ25ELGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDO1lBQ2hELFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUM7UUFDRixNQUFNLGlCQUFpQixHQUFzQjtZQUMzQyxlQUFlLEVBQUUsSUFBSSxHQUFHLEVBQUU7WUFDMUIsbUJBQW1CLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxvQkFBb0IsRUFBRSxJQUFJLEdBQUcsRUFBRTtTQUNoQyxDQUFDO1FBRUYsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsTUFBTSxJQUFJLFdBQVcsQ0FDckQsTUFBTSxDQUNQLENBQUMsb0JBQW9CLENBQ3BCLFNBQVMsRUFDVCxNQUFNLENBQUMsbUJBQW1CLEVBQzFCLGlCQUFpQixDQUNsQixDQUFDO1FBRUYsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNwRSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLGlCQUFpQixDQUFDLE1BQWdCO1FBQ3pDLE1BQU0sQ0FDSixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FDL0QsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRSxNQUFNLE1BQU0sR0FBRyxNQUFNLHVCQUF1QixDQUMxQywrREFBK0QsQ0FDaEUsQ0FBQztRQUVGLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0tBYzVDLENBQUMsQ0FBQztRQUVILGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBta2R0ZW1wU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGFmdGVyRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgQmFzZUJ1aWxkZXIsIHR5cGUgRGlzY292ZXJlZEVudHJpZXMgfSBmcm9tICcuL2Jhc2UtYnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YW5kYWxvbmVDb25maWcgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuY2xhc3MgVGVzdEJ1aWxkZXIgZXh0ZW5kcyBCYXNlQnVpbGRlciB7XG4gIGFzeW5jIGJ1aWxkKCk6IFByb21pc2U8dm9pZD4ge31cblxuICBjcmVhdGVXb3JrZmxvd0J1bmRsZShcbiAgICBpbnB1dEZpbGU6IHN0cmluZyxcbiAgICBvdXRmaWxlOiBzdHJpbmcsXG4gICAgZGlzY292ZXJlZEVudHJpZXM6IERpc2NvdmVyZWRFbnRyaWVzXG4gICkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVdvcmtmbG93c0J1bmRsZSh7XG4gICAgICBpbnB1dEZpbGVzOiBbaW5wdXRGaWxlXSxcbiAgICAgIG91dGZpbGUsXG4gICAgICBidW5kbGVGaW5hbE91dHB1dDogZmFsc2UsXG4gICAgICBpbmNsdWRlTWV0YWZpbGU6IHRydWUsXG4gICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICB9KTtcbiAgfVxufVxuXG5kZXNjcmliZSgnd29ya2Zsb3cgYnVuZGxlIGJvdW5kYXJ5JywgKCkgPT4ge1xuICBjb25zdCByZXBvUm9vdCA9IHJlc29sdmUoaW1wb3J0Lm1ldGEuZGlybmFtZSwgJy4uLy4uLy4uJyk7XG4gIGNvbnN0IG91dHB1dERpcnM6IHN0cmluZ1tdID0gW107XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBmb3IgKGNvbnN0IG91dHB1dERpciBvZiBvdXRwdXREaXJzKSB7XG4gICAgICBybVN5bmMob3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcblxuICBhc3luYyBmdW5jdGlvbiBnZXRXb3JrZmxvd0J1bmRsZUlucHV0cyhzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAvLyBLZWVwIHRoZSBmaXh0dXJlIGJlbmVhdGggdGhpcyBwYWNrYWdlIHNvIGl0cyB3b3Jrc3BhY2UgZGVwZW5kZW5jaWVzIGFyZVxuICAgIC8vIHJlc29sdmVkIGV4YWN0bHkgYXMgdGhleSBhcmUgZm9yIGEgcmVhbCBjb25zdW1lciB3b3JrZmxvdy5cbiAgICBjb25zdCBvdXRwdXREaXIgPSBta2R0ZW1wU3luYyhcbiAgICAgIGpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgJy53b3JrZmxvdy1wcnVuaW5nLScpXG4gICAgKTtcbiAgICBvdXRwdXREaXJzLnB1c2gob3V0cHV0RGlyKTtcbiAgICBjb25zdCBpbnB1dEZpbGUgPSBqb2luKG91dHB1dERpciwgJ3dvcmtmbG93LnRzJyk7XG4gICAgd3JpdGVGaWxlU3luYyhpbnB1dEZpbGUsIHNvdXJjZSk7XG5cbiAgICBjb25zdCBjb25maWc6IFN0YW5kYWxvbmVDb25maWcgPSB7XG4gICAgICBidWlsZFRhcmdldDogJ3N0YW5kYWxvbmUnLFxuICAgICAgd29ya2luZ0Rpcjogb3V0cHV0RGlyLFxuICAgICAgcHJvamVjdFJvb3Q6IHJlcG9Sb290LFxuICAgICAgbW9kdWxlU3BlY2lmaWVyUm9vdDogcmVwb1Jvb3QsXG4gICAgICBkaXJzOiBbJy4nXSxcbiAgICAgIHN0ZXBzQnVuZGxlUGF0aDogam9pbihvdXRwdXREaXIsICdzdGVwcy5qcycpLFxuICAgICAgd29ya2Zsb3dzQnVuZGxlUGF0aDogam9pbihvdXRwdXREaXIsICd3b3JrZmxvdy5qcycpLFxuICAgICAgd2ViaG9va0J1bmRsZVBhdGg6IGpvaW4ob3V0cHV0RGlyLCAnd2ViaG9vay5qcycpLFxuICAgICAgc291cmNlbWFwOiBmYWxzZSxcbiAgICB9O1xuICAgIGNvbnN0IGRpc2NvdmVyZWRFbnRyaWVzOiBEaXNjb3ZlcmVkRW50cmllcyA9IHtcbiAgICAgIGRpc2NvdmVyZWRTdGVwczogbmV3IFNldCgpLFxuICAgICAgZGlzY292ZXJlZFdvcmtmbG93czogbmV3IFNldChbaW5wdXRGaWxlXSksXG4gICAgICBkaXNjb3ZlcmVkU2VyZGVGaWxlczogbmV3IFNldCgpLFxuICAgIH07XG5cbiAgICBjb25zdCB7IGludGVyaW1CdW5kbGVNZXRhZmlsZSB9ID0gYXdhaXQgbmV3IFRlc3RCdWlsZGVyKFxuICAgICAgY29uZmlnXG4gICAgKS5jcmVhdGVXb3JrZmxvd0J1bmRsZShcbiAgICAgIGlucHV0RmlsZSxcbiAgICAgIGNvbmZpZy53b3JrZmxvd3NCdW5kbGVQYXRoLFxuICAgICAgZGlzY292ZXJlZEVudHJpZXNcbiAgICApO1xuXG4gICAgZXhwZWN0KGludGVyaW1CdW5kbGVNZXRhZmlsZSkudG9CZURlZmluZWQoKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoaW50ZXJpbUJ1bmRsZU1ldGFmaWxlPy5pbnB1dHMgPz8ge30pLm1hcCgoaW5wdXQpID0+XG4gICAgICBpbnB1dC5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBleHBlY3ROb1pvZElucHV0cyhpbnB1dHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgZXhwZWN0KFxuICAgICAgaW5wdXRzLmZpbHRlcigoaW5wdXQpID0+IGlucHV0LmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzL3pvZC8nKSlcbiAgICApLnRvRXF1YWwoW10pO1xuICB9XG5cbiAgaXQoJ2RvZXMgbm90IGJ1bmRsZSB3b3JsZCBzY2hlbWFzIGludG8gYSBtaW5pbWFsIHdvcmtmbG93JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0cyA9IGF3YWl0IGdldFdvcmtmbG93QnVuZGxlSW5wdXRzKFxuICAgICAgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBtaW5pbWFsKCkgeyBcInVzZSB3b3JrZmxvd1wiOyByZXR1cm4gMTsgfWBcbiAgICApO1xuXG4gICAgZXhwZWN0Tm9ab2RJbnB1dHMoaW5wdXRzKTtcbiAgfSk7XG5cbiAgaXQoJ2RvZXMgbm90IGJ1bmRsZSB3b3JsZCBzY2hlbWFzIGZvciBjb3JlIHdvcmtmbG93IEFQSXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXRzID0gYXdhaXQgZ2V0V29ya2Zsb3dCdW5kbGVJbnB1dHMoYFxuICAgICAgaW1wb3J0IHsgY3JlYXRlSG9vaywgc2V0QXR0cmlidXRlcyB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlJztcblxuICAgICAgYXN5bmMgZnVuY3Rpb24gYmFzaWNTdGVwKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgXCJ1c2Ugc3RlcFwiO1xuICAgICAgICByZXR1cm4gdmFsdWUgKyAxO1xuICAgICAgfVxuXG4gICAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhbGlzdGljV29ya2Zsb3coKSB7XG4gICAgICAgIFwidXNlIHdvcmtmbG93XCI7XG4gICAgICAgIGF3YWl0IHNldEF0dHJpYnV0ZXMoeyBwaGFzZTogJ3N0YXJ0ZWQnIH0pO1xuICAgICAgICBjb25zdCBob29rID0gY3JlYXRlSG9vazxudW1iZXI+KCk7XG4gICAgICAgIHJldHVybiBiYXNpY1N0ZXAoYXdhaXQgaG9vayk7XG4gICAgICB9XG4gICAgYCk7XG5cbiAgICBleHBlY3ROb1pvZElucHV0cyhpbnB1dHMpO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reports whether `targetPath` already holds exactly `content`.
|
|
3
|
+
*
|
|
4
|
+
* Generated files are rewritten on every rebuild, and in dev most rebuilds
|
|
5
|
+
* produce byte-identical output. Rewriting anyway bumps the mtime (and, for
|
|
6
|
+
* the rename-based atomic write, the inode) of a file that lives inside the
|
|
7
|
+
* app directory the dev server watches, so the bundler sees a change and
|
|
8
|
+
* recompiles. Comparing first lets the caller skip the write entirely.
|
|
9
|
+
*
|
|
10
|
+
* Any read failure (missing file, permissions) reports `false`, so the caller
|
|
11
|
+
* falls back to writing.
|
|
12
|
+
*/
|
|
13
|
+
export declare function hasSameContent(targetPath: string, content: string): Promise<boolean>;
|
|
14
|
+
/**
|
|
15
|
+
* `writeFile`, skipped when the file already holds `content`.
|
|
16
|
+
*
|
|
17
|
+
* Returns whether the file was actually written.
|
|
18
|
+
*/
|
|
19
|
+
export declare function writeFileIfChanged(targetPath: string, content: string): Promise<boolean>;
|
|
20
|
+
//# sourceMappingURL=write-if-changed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-if-changed.d.ts","sourceRoot":"","sources":["../src/write-if-changed.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAMlB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { readFile, stat, writeFile } from 'node:fs/promises';
|
|
2
|
+
/**
|
|
3
|
+
* Reports whether `targetPath` already holds exactly `content`.
|
|
4
|
+
*
|
|
5
|
+
* Generated files are rewritten on every rebuild, and in dev most rebuilds
|
|
6
|
+
* produce byte-identical output. Rewriting anyway bumps the mtime (and, for
|
|
7
|
+
* the rename-based atomic write, the inode) of a file that lives inside the
|
|
8
|
+
* app directory the dev server watches, so the bundler sees a change and
|
|
9
|
+
* recompiles. Comparing first lets the caller skip the write entirely.
|
|
10
|
+
*
|
|
11
|
+
* Any read failure (missing file, permissions) reports `false`, so the caller
|
|
12
|
+
* falls back to writing.
|
|
13
|
+
*/
|
|
14
|
+
export async function hasSameContent(targetPath, content) {
|
|
15
|
+
try {
|
|
16
|
+
// Compare bytes rather than decoded strings: utf-8 decoding is lossy, so
|
|
17
|
+
// two different byte sequences can decode to the same string and a real
|
|
18
|
+
// change would be skipped.
|
|
19
|
+
const expected = Buffer.from(content, 'utf8');
|
|
20
|
+
// Reject on size before reading the file, which for the generated bundle
|
|
21
|
+
// is the expensive half.
|
|
22
|
+
const { size } = await stat(targetPath);
|
|
23
|
+
if (size !== expected.byteLength) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
return Buffer.compare(await readFile(targetPath), expected) === 0;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* `writeFile`, skipped when the file already holds `content`.
|
|
34
|
+
*
|
|
35
|
+
* Returns whether the file was actually written.
|
|
36
|
+
*/
|
|
37
|
+
export async function writeFileIfChanged(targetPath, content) {
|
|
38
|
+
if (await hasSameContent(targetPath, content)) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
await writeFile(targetPath, content);
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtaWYtY2hhbmdlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93cml0ZS1pZi1jaGFuZ2VkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTdEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQ2xDLFVBQWtCLEVBQ2xCLE9BQWU7SUFFZixJQUFJLENBQUM7UUFDSCx5RUFBeUU7UUFDekUsd0VBQXdFO1FBQ3hFLDJCQUEyQjtRQUMzQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5Qyx5RUFBeUU7UUFDekUseUJBQXlCO1FBQ3pCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxJQUFJLElBQUksS0FBSyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDakMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUN0QyxVQUFrQixFQUNsQixPQUFlO0lBRWYsSUFBSSxNQUFNLGNBQWMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLFNBQVMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZEZpbGUsIHN0YXQsIHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBgdGFyZ2V0UGF0aGAgYWxyZWFkeSBob2xkcyBleGFjdGx5IGBjb250ZW50YC5cbiAqXG4gKiBHZW5lcmF0ZWQgZmlsZXMgYXJlIHJld3JpdHRlbiBvbiBldmVyeSByZWJ1aWxkLCBhbmQgaW4gZGV2IG1vc3QgcmVidWlsZHNcbiAqIHByb2R1Y2UgYnl0ZS1pZGVudGljYWwgb3V0cHV0LiBSZXdyaXRpbmcgYW55d2F5IGJ1bXBzIHRoZSBtdGltZSAoYW5kLCBmb3JcbiAqIHRoZSByZW5hbWUtYmFzZWQgYXRvbWljIHdyaXRlLCB0aGUgaW5vZGUpIG9mIGEgZmlsZSB0aGF0IGxpdmVzIGluc2lkZSB0aGVcbiAqIGFwcCBkaXJlY3RvcnkgdGhlIGRldiBzZXJ2ZXIgd2F0Y2hlcywgc28gdGhlIGJ1bmRsZXIgc2VlcyBhIGNoYW5nZSBhbmRcbiAqIHJlY29tcGlsZXMuIENvbXBhcmluZyBmaXJzdCBsZXRzIHRoZSBjYWxsZXIgc2tpcCB0aGUgd3JpdGUgZW50aXJlbHkuXG4gKlxuICogQW55IHJlYWQgZmFpbHVyZSAobWlzc2luZyBmaWxlLCBwZXJtaXNzaW9ucykgcmVwb3J0cyBgZmFsc2VgLCBzbyB0aGUgY2FsbGVyXG4gKiBmYWxscyBiYWNrIHRvIHdyaXRpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYXNTYW1lQ29udGVudChcbiAgdGFyZ2V0UGF0aDogc3RyaW5nLFxuICBjb250ZW50OiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIC8vIENvbXBhcmUgYnl0ZXMgcmF0aGVyIHRoYW4gZGVjb2RlZCBzdHJpbmdzOiB1dGYtOCBkZWNvZGluZyBpcyBsb3NzeSwgc29cbiAgICAvLyB0d28gZGlmZmVyZW50IGJ5dGUgc2VxdWVuY2VzIGNhbiBkZWNvZGUgdG8gdGhlIHNhbWUgc3RyaW5nIGFuZCBhIHJlYWxcbiAgICAvLyBjaGFuZ2Ugd291bGQgYmUgc2tpcHBlZC5cbiAgICBjb25zdCBleHBlY3RlZCA9IEJ1ZmZlci5mcm9tKGNvbnRlbnQsICd1dGY4Jyk7XG4gICAgLy8gUmVqZWN0IG9uIHNpemUgYmVmb3JlIHJlYWRpbmcgdGhlIGZpbGUsIHdoaWNoIGZvciB0aGUgZ2VuZXJhdGVkIGJ1bmRsZVxuICAgIC8vIGlzIHRoZSBleHBlbnNpdmUgaGFsZi5cbiAgICBjb25zdCB7IHNpemUgfSA9IGF3YWl0IHN0YXQodGFyZ2V0UGF0aCk7XG4gICAgaWYgKHNpemUgIT09IGV4cGVjdGVkLmJ5dGVMZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKGF3YWl0IHJlYWRGaWxlKHRhcmdldFBhdGgpLCBleHBlY3RlZCkgPT09IDA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIGB3cml0ZUZpbGVgLCBza2lwcGVkIHdoZW4gdGhlIGZpbGUgYWxyZWFkeSBob2xkcyBgY29udGVudGAuXG4gKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBmaWxlIHdhcyBhY3R1YWxseSB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVGaWxlSWZDaGFuZ2VkKFxuICB0YXJnZXRQYXRoOiBzdHJpbmcsXG4gIGNvbnRlbnQ6IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhd2FpdCBoYXNTYW1lQ29udGVudCh0YXJnZXRQYXRoLCBjb250ZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhd2FpdCB3cml0ZUZpbGUodGFyZ2V0UGF0aCwgY29udGVudCk7XG4gIHJldHVybiB0cnVlO1xufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-if-changed.test.d.ts","sourceRoot":"","sources":["../src/write-if-changed.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { chmodSync, mkdtempSync, readdirSync, readFileSync, realpathSync, rmSync, statSync, writeFileSync, } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
5
|
+
import { BaseBuilder } from './base-builder.js';
|
|
6
|
+
import { hasSameContent, writeFileIfChanged } from './write-if-changed.js';
|
|
7
|
+
// Resolve symlinks in tmpdir to avoid macOS /var -> /private/var issues
|
|
8
|
+
const realTmpdir = realpathSync(tmpdir());
|
|
9
|
+
/** Minimal subclass exposing the protected `writeGeneratedFile()`. */
|
|
10
|
+
class TestBuilder extends BaseBuilder {
|
|
11
|
+
async build() {
|
|
12
|
+
// no-op
|
|
13
|
+
}
|
|
14
|
+
writeGeneratedFile(targetPath, content) {
|
|
15
|
+
return super.writeGeneratedFile(targetPath, content);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Stands in for a target whose consumers use the mtime of a generated file as
|
|
20
|
+
* a change signal, such as the Nitro dev handler.
|
|
21
|
+
*/
|
|
22
|
+
class OptedOutBuilder extends TestBuilder {
|
|
23
|
+
get skipsUnchangedGeneratedWrites() {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function makeConfig(workingDir) {
|
|
28
|
+
return {
|
|
29
|
+
buildTarget: 'standalone',
|
|
30
|
+
workingDir,
|
|
31
|
+
dirs: [workingDir],
|
|
32
|
+
stepsBundlePath: join(workingDir, 'steps.js'),
|
|
33
|
+
workflowsBundlePath: join(workingDir, 'workflows.js'),
|
|
34
|
+
webhookBundlePath: join(workingDir, 'webhook.js'),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function createBuilder(workingDir) {
|
|
38
|
+
return new TestBuilder(makeConfig(workingDir));
|
|
39
|
+
}
|
|
40
|
+
function createOptedOutBuilder(workingDir) {
|
|
41
|
+
return new OptedOutBuilder(makeConfig(workingDir));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* mtime resolution varies by filesystem, so compare the full stat identity
|
|
45
|
+
* (mtime in ns plus inode) rather than trusting a millisecond timestamp.
|
|
46
|
+
* `writeGeneratedFile` renames over the target, which changes the inode even
|
|
47
|
+
* when the mtime happens to land in the same tick.
|
|
48
|
+
*/
|
|
49
|
+
function fileIdentity(path) {
|
|
50
|
+
const s = statSync(path, { bigint: true });
|
|
51
|
+
return `${s.mtimeNs}:${s.ino}`;
|
|
52
|
+
}
|
|
53
|
+
let testRoot;
|
|
54
|
+
beforeEach(() => {
|
|
55
|
+
testRoot = mkdtempSync(join(realTmpdir, 'write-if-changed-'));
|
|
56
|
+
});
|
|
57
|
+
afterEach(() => {
|
|
58
|
+
rmSync(testRoot, { recursive: true, force: true });
|
|
59
|
+
});
|
|
60
|
+
describe('hasSameContent', () => {
|
|
61
|
+
it('is false when the file does not exist', async () => {
|
|
62
|
+
await expect(hasSameContent(join(testRoot, 'missing.js'), 'hello')).resolves.toBe(false);
|
|
63
|
+
});
|
|
64
|
+
it('is true for byte-identical content', async () => {
|
|
65
|
+
const target = join(testRoot, 'a.js');
|
|
66
|
+
writeFileSync(target, 'export const a = 1;\n');
|
|
67
|
+
await expect(hasSameContent(target, 'export const a = 1;\n')).resolves.toBe(true);
|
|
68
|
+
});
|
|
69
|
+
it('is false when content differs at the same byte length', async () => {
|
|
70
|
+
const target = join(testRoot, 'a.js');
|
|
71
|
+
writeFileSync(target, 'aaaa');
|
|
72
|
+
await expect(hasSameContent(target, 'aaab')).resolves.toBe(false);
|
|
73
|
+
});
|
|
74
|
+
it('is false when only the length differs', async () => {
|
|
75
|
+
const target = join(testRoot, 'a.js');
|
|
76
|
+
writeFileSync(target, 'aaaa');
|
|
77
|
+
await expect(hasSameContent(target, 'aaaaa')).resolves.toBe(false);
|
|
78
|
+
});
|
|
79
|
+
it('compares utf-8 byte length, not code units', async () => {
|
|
80
|
+
const target = join(testRoot, 'a.js');
|
|
81
|
+
writeFileSync(target, '// é\u{1f600}\n', 'utf-8');
|
|
82
|
+
await expect(hasSameContent(target, '// é\u{1f600}\n')).resolves.toBe(true);
|
|
83
|
+
});
|
|
84
|
+
it('is false for byte-different content that decodes to the same string', async () => {
|
|
85
|
+
// An unpaired surrogate and U+FFFD both decode to the replacement
|
|
86
|
+
// character, so a utf-8 string comparison would call these equal.
|
|
87
|
+
const target = join(testRoot, 'a.js');
|
|
88
|
+
writeFileSync(target, Buffer.from([0x61, 0xf0, 0x90, 0x80]));
|
|
89
|
+
await expect(hasSameContent(target, Buffer.from([0x61, 0xef, 0xbf, 0xbd]).toString())).resolves.toBe(false);
|
|
90
|
+
});
|
|
91
|
+
it('is false when the path is a directory', async () => {
|
|
92
|
+
// Match the directory's own reported size so the check cannot pass by
|
|
93
|
+
// short-circuiting on length before it ever tries to read.
|
|
94
|
+
const sameSizeAsDir = 'x'.repeat(statSync(testRoot).size);
|
|
95
|
+
await expect(hasSameContent(testRoot, sameSizeAsDir)).resolves.toBe(false);
|
|
96
|
+
});
|
|
97
|
+
it('is false when the file cannot be read', async () => {
|
|
98
|
+
const target = join(testRoot, 'locked.js');
|
|
99
|
+
writeFileSync(target, 'secret');
|
|
100
|
+
chmodSync(target, 0o000);
|
|
101
|
+
try {
|
|
102
|
+
// Root ignores the mode bits, so only assert when the read really fails.
|
|
103
|
+
let readable = true;
|
|
104
|
+
try {
|
|
105
|
+
readFileSync(target, 'utf8');
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
readable = false;
|
|
109
|
+
}
|
|
110
|
+
if (readable) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
await expect(hasSameContent(target, 'secret')).resolves.toBe(false);
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
chmodSync(target, 0o600);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
describe('writeFileIfChanged', () => {
|
|
121
|
+
it('creates the file when it does not exist', async () => {
|
|
122
|
+
const target = join(testRoot, 'a.js');
|
|
123
|
+
await expect(writeFileIfChanged(target, 'hello')).resolves.toBe(true);
|
|
124
|
+
expect(readFileSync(target, 'utf8')).toBe('hello');
|
|
125
|
+
});
|
|
126
|
+
it('does not touch the file when content is unchanged', async () => {
|
|
127
|
+
const target = join(testRoot, 'a.js');
|
|
128
|
+
await writeFileIfChanged(target, 'hello');
|
|
129
|
+
const before = fileIdentity(target);
|
|
130
|
+
await expect(writeFileIfChanged(target, 'hello')).resolves.toBe(false);
|
|
131
|
+
expect(fileIdentity(target)).toBe(before);
|
|
132
|
+
});
|
|
133
|
+
it('rewrites the file when content changes', async () => {
|
|
134
|
+
const target = join(testRoot, 'a.js');
|
|
135
|
+
await writeFileIfChanged(target, 'hello');
|
|
136
|
+
await expect(writeFileIfChanged(target, 'goodbye')).resolves.toBe(true);
|
|
137
|
+
expect(readFileSync(target, 'utf8')).toBe('goodbye');
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
describe('writeGeneratedFile', () => {
|
|
141
|
+
// Regression test for the dev watcher thrash: the generated routes live
|
|
142
|
+
// inside the app directory the dev server watches, so a rewrite with
|
|
143
|
+
// identical bytes still invalidates the bundler and forces a recompile.
|
|
144
|
+
it('leaves the file untouched when the generated output is unchanged', async () => {
|
|
145
|
+
const builder = createBuilder(testRoot);
|
|
146
|
+
const target = join(testRoot, 'route.js');
|
|
147
|
+
await builder.writeGeneratedFile(target, 'export const GET = () => {};');
|
|
148
|
+
const before = fileIdentity(target);
|
|
149
|
+
await builder.writeGeneratedFile(target, 'export const GET = () => {};');
|
|
150
|
+
expect(fileIdentity(target)).toBe(before);
|
|
151
|
+
});
|
|
152
|
+
it('leaves no temp files behind when the write is skipped', async () => {
|
|
153
|
+
const builder = createBuilder(testRoot);
|
|
154
|
+
const target = join(testRoot, 'route.js');
|
|
155
|
+
await builder.writeGeneratedFile(target, 'same');
|
|
156
|
+
await builder.writeGeneratedFile(target, 'same');
|
|
157
|
+
expect(readdirSync(testRoot).filter((f) => f.endsWith('.tmp'))).toEqual([]);
|
|
158
|
+
});
|
|
159
|
+
it('still writes when the generated output changes', async () => {
|
|
160
|
+
const builder = createBuilder(testRoot);
|
|
161
|
+
const target = join(testRoot, 'route.js');
|
|
162
|
+
await builder.writeGeneratedFile(target, 'v1');
|
|
163
|
+
await builder.writeGeneratedFile(target, 'v2');
|
|
164
|
+
expect(readFileSync(target, 'utf8')).toBe('v2');
|
|
165
|
+
});
|
|
166
|
+
it('creates the file on first write', async () => {
|
|
167
|
+
const builder = createBuilder(testRoot);
|
|
168
|
+
const target = join(testRoot, 'route.js');
|
|
169
|
+
await builder.writeGeneratedFile(target, 'first');
|
|
170
|
+
expect(readFileSync(target, 'utf8')).toBe('first');
|
|
171
|
+
});
|
|
172
|
+
// The Nitro dev handler cache-busts its import of `steps.mjs` off the mtime
|
|
173
|
+
// of `workflows.mjs`, so that target opts out: skipping the redundant write
|
|
174
|
+
// would freeze the version key and serve stale step code. See
|
|
175
|
+
// `packages/nitro/src/builders.ts`.
|
|
176
|
+
it('still rewrites unchanged output when the target opts out', async () => {
|
|
177
|
+
const builder = createOptedOutBuilder(testRoot);
|
|
178
|
+
const target = join(testRoot, 'workflows.mjs');
|
|
179
|
+
await builder.writeGeneratedFile(target, 'export const a = 1;');
|
|
180
|
+
const before = fileIdentity(target);
|
|
181
|
+
await builder.writeGeneratedFile(target, 'export const a = 1;');
|
|
182
|
+
expect(fileIdentity(target)).not.toBe(before);
|
|
183
|
+
expect(readFileSync(target, 'utf8')).toBe('export const a = 1;');
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtaWYtY2hhbmdlZC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dyaXRlLWlmLWNoYW5nZWQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFDWCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLGFBQWEsR0FDZCxNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRSx3RUFBd0U7QUFDeEUsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFFMUMsc0VBQXNFO0FBQ3RFLE1BQU0sV0FBWSxTQUFRLFdBQVc7SUFDbkMsS0FBSyxDQUFDLEtBQUs7UUFDVCxRQUFRO0lBQ1YsQ0FBQztJQUVNLGtCQUFrQixDQUN2QixVQUFrQixFQUNsQixPQUFlO1FBRWYsT0FBTyxLQUFLLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Q0FDRjtBQUVEOzs7R0FHRztBQUNILE1BQU0sZUFBZ0IsU0FBUSxXQUFXO0lBQ3ZDLElBQXVCLDZCQUE2QjtRQUNsRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRjtBQUVELFNBQVMsVUFBVSxDQUFDLFVBQWtCO0lBQ3BDLE9BQU87UUFDTCxXQUFXLEVBQUUs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QUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVwQyxNQUFNLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUVoRSxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ25FLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjaG1vZFN5bmMsXG4gIG1rZHRlbXBTeW5jLFxuICByZWFkZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jLFxuICByZWFscGF0aFN5bmMsXG4gIHJtU3luYyxcbiAgc3RhdFN5bmMsXG4gIHdyaXRlRmlsZVN5bmMsXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgQmFzZUJ1aWxkZXIgfSBmcm9tICcuL2Jhc2UtYnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YW5kYWxvbmVDb25maWcgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGhhc1NhbWVDb250ZW50LCB3cml0ZUZpbGVJZkNoYW5nZWQgfSBmcm9tICcuL3dyaXRlLWlmLWNoYW5nZWQuanMnO1xuXG4vLyBSZXNvbHZlIHN5bWxpbmtzIGluIHRtcGRpciB0byBhdm9pZCBtYWNPUyAvdmFyIC0+IC9wcml2YXRlL3ZhciBpc3N1ZXNcbmNvbnN0IHJlYWxUbXBkaXIgPSByZWFscGF0aFN5bmModG1wZGlyKCkpO1xuXG4vKiogTWluaW1hbCBzdWJjbGFzcyBleHBvc2luZyB0aGUgcHJvdGVjdGVkIGB3cml0ZUdlbmVyYXRlZEZpbGUoKWAuICovXG5jbGFzcyBUZXN0QnVpbGRlciBleHRlbmRzIEJhc2VCdWlsZGVyIHtcbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gbm8tb3BcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZUdlbmVyYXRlZEZpbGUoXG4gICAgdGFyZ2V0UGF0aDogc3RyaW5nLFxuICAgIGNvbnRlbnQ6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gc3VwZXIud3JpdGVHZW5lcmF0ZWRGaWxlKHRhcmdldFBhdGgsIGNvbnRlbnQpO1xuICB9XG59XG5cbi8qKlxuICogU3RhbmRzIGluIGZvciBhIHRhcmdldCB3aG9zZSBjb25zdW1lcnMgdXNlIHRoZSBtdGltZSBvZiBhIGdlbmVyYXRlZCBmaWxlIGFzXG4gKiBhIGNoYW5nZSBzaWduYWwsIHN1Y2ggYXMgdGhlIE5pdHJvIGRldiBoYW5kbGVyLlxuICovXG5jbGFzcyBPcHRlZE91dEJ1aWxkZXIgZXh0ZW5kcyBUZXN0QnVpbGRlciB7XG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXQgc2tpcHNVbmNoYW5nZWRHZW5lcmF0ZWRXcml0ZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VDb25maWcod29ya2luZ0Rpcjogc3RyaW5nKTogU3RhbmRhbG9uZUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgYnVpbGRUYXJnZXQ6ICdzdGFuZGFsb25lJyxcbiAgICB3b3JraW5nRGlyLFxuICAgIGRpcnM6IFt3b3JraW5nRGlyXSxcbiAgICBzdGVwc0J1bmRsZVBhdGg6IGpvaW4od29ya2luZ0RpciwgJ3N0ZXBzLmpzJyksXG4gICAgd29ya2Zsb3dzQnVuZGxlUGF0aDogam9pbih3b3JraW5nRGlyLCAnd29ya2Zsb3dzLmpzJyksXG4gICAgd2ViaG9va0J1bmRsZVBhdGg6IGpvaW4od29ya2luZ0RpciwgJ3dlYmhvb2suanMnKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVpbGRlcih3b3JraW5nRGlyOiBzdHJpbmcpOiBUZXN0QnVpbGRlciB7XG4gIHJldHVybiBuZXcgVGVzdEJ1aWxkZXIobWFrZUNvbmZpZyh3b3JraW5nRGlyKSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wdGVkT3V0QnVpbGRlcih3b3JraW5nRGlyOiBzdHJpbmcpOiBPcHRlZE91dEJ1aWxkZXIge1xuICByZXR1cm4gbmV3IE9wdGVkT3V0QnVpbGRlcihtYWtlQ29uZmlnKHdvcmtpbmdEaXIpKTtcbn1cblxuLyoqXG4gKiBtdGltZSByZXNvbHV0aW9uIHZhcmllcyBieSBmaWxlc3lzdGVtLCBzbyBjb21wYXJlIHRoZSBmdWxsIHN0YXQgaWRlbnRpdHlcbiAqIChtdGltZSBpbiBucyBwbHVzIGlub2RlKSByYXRoZXIgdGhhbiB0cnVzdGluZyBhIG1pbGxpc2Vjb25kIHRpbWVzdGFtcC5cbiAqIGB3cml0ZUdlbmVyYXRlZEZpbGVgIHJlbmFtZXMgb3ZlciB0aGUgdGFyZ2V0LCB3aGljaCBjaGFuZ2VzIHRoZSBpbm9kZSBldmVuXG4gKiB3aGVuIHRoZSBtdGltZSBoYXBwZW5zIHRvIGxhbmQgaW4gdGhlIHNhbWUgdGljay5cbiAqL1xuZnVuY3Rpb24gZmlsZUlkZW50aXR5KHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHMgPSBzdGF0U3luYyhwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KTtcbiAgcmV0dXJuIGAke3MubXRpbWVOc306JHtzLmlub31gO1xufVxuXG5sZXQgdGVzdFJvb3Q6IHN0cmluZztcblxuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIHRlc3RSb290ID0gbWtkdGVtcFN5bmMoam9pbihyZWFsVG1wZGlyLCAnd3JpdGUtaWYtY2hhbmdlZC0nKSk7XG59KTtcblxuYWZ0ZXJFYWNoKCgpID0+IHtcbiAgcm1TeW5jKHRlc3RSb290LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2hhc1NhbWVDb250ZW50JywgKCkgPT4ge1xuICBpdCgnaXMgZmFsc2Ugd2hlbiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCcsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBoYXNTYW1lQ29udGVudChqb2luKHRlc3RSb290LCAnbWlzc2luZy5qcycpLCAnaGVsbG8nKVxuICAgICkucmVzb2x2ZXMudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdpcyB0cnVlIGZvciBieXRlLWlkZW50aWNhbCBjb250ZW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGpvaW4odGVzdFJvb3QsICdhLmpzJyk7XG4gICAgd3JpdGVGaWxlU3luYyh0YXJnZXQsICdleHBvcnQgY29uc3QgYSA9IDE7XFxuJyk7XG5cbiAgICBhd2FpdCBleHBlY3QoaGFzU2FtZUNvbnRlbnQodGFyZ2V0LCAnZXhwb3J0IGNvbnN0IGEgPSAxO1xcbicpKS5yZXNvbHZlcy50b0JlKFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdpcyBmYWxzZSB3aGVuIGNvbnRlbnQgZGlmZmVycyBhdCB0aGUgc2FtZSBieXRlIGxlbmd0aCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSBqb2luKHRlc3RSb290LCAnYS5qcycpO1xuICAgIHdyaXRlRmlsZVN5bmModGFyZ2V0LCAnYWFhYScpO1xuXG4gICAgYXdhaXQgZXhwZWN0KGhhc1NhbWVDb250ZW50KHRhcmdldCwgJ2FhYWInKSkucmVzb2x2ZXMudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdpcyBmYWxzZSB3aGVuIG9ubHkgdGhlIGxlbmd0aCBkaWZmZXJzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGpvaW4odGVzdFJvb3QsICdhLmpzJyk7XG4gICAgd3JpdGVGaWxlU3luYyh0YXJnZXQsICdhYWFhJyk7XG5cbiAgICBhd2FpdCBleHBlY3QoaGFzU2FtZUNvbnRlbnQodGFyZ2V0LCAnYWFhYWEnKSkucmVzb2x2ZXMudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdjb21wYXJlcyB1dGYtOCBieXRlIGxlbmd0aCwgbm90IGNvZGUgdW5pdHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gam9pbih0ZXN0Um9vdCwgJ2EuanMnKTtcbiAgICB3cml0ZUZpbGVTeW5jKHRhcmdldCwgJy8vIMOpXFx1ezFmNjAwfVxcbicsICd1dGYtOCcpO1xuXG4gICAgYXdhaXQgZXhwZWN0KGhhc1NhbWVDb250ZW50KHRhcmdldCwgJy8vIMOpXFx1ezFmNjAwfVxcbicpKS5yZXNvbHZlcy50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdCgnaXMgZmFsc2UgZm9yIGJ5dGUtZGlmZmVyZW50IGNvbnRlbnQgdGhhdCBkZWNvZGVzIHRvIHRoZSBzYW1lIHN0cmluZycsIGFzeW5jICgpID0+IHtcbiAgICAvLyBBbiB1bnBhaXJlZCBzdXJyb2dhdGUgYW5kIFUrRkZGRCBib3RoIGRlY29kZSB0byB0aGUgcmVwbGFjZW1lbnRcbiAgICAvLyBjaGFyYWN0ZXIsIHNvIGEgdXRmLTggc3RyaW5nIGNvbXBhcmlzb24gd291bGQgY2FsbCB0aGVzZSBlcXVhbC5cbiAgICBjb25zdCB0YXJnZXQgPSBqb2luKHRlc3RSb290LCAnYS5qcycpO1xuICAgIHdyaXRlRmlsZVN5bmModGFyZ2V0LCBCdWZmZXIuZnJvbShbMHg2MSwgMHhmMCwgMHg5MCwgMHg4MF0pKTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGhhc1NhbWVDb250ZW50KHRhcmdldCwgQnVmZmVyLmZyb20oWzB4NjEsIDB4ZWYsIDB4YmYsIDB4YmRdKS50b1N0cmluZygpKVxuICAgICkucmVzb2x2ZXMudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdpcyBmYWxzZSB3aGVuIHRoZSBwYXRoIGlzIGEgZGlyZWN0b3J5JywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIE1hdGNoIHRoZSBkaXJlY3RvcnkncyBvd24gcmVwb3J0ZWQgc2l6ZSBzbyB0aGUgY2hlY2sgY2Fubm90IHBhc3MgYnlcbiAgICAvLyBzaG9ydC1jaXJjdWl0aW5nIG9uIGxlbmd0aCBiZWZvcmUgaXQgZXZlciB0cmllcyB0byByZWFkLlxuICAgIGNvbnN0IHNhbWVTaXplQXNEaXIgPSAneCcucmVwZWF0KHN0YXRTeW5jKHRlc3RSb290KS5zaXplKTtcblxuICAgIGF3YWl0IGV4cGVjdChoYXNTYW1lQ29udGVudCh0ZXN0Um9vdCwgc2FtZVNpemVBc0RpcikpLnJlc29sdmVzLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdCgnaXMgZmFsc2Ugd2hlbiB0aGUgZmlsZSBjYW5ub3QgYmUgcmVhZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSBqb2luKHRlc3RSb290LCAnbG9ja2VkLmpzJyk7XG4gICAgd3JpdGVGaWxlU3luYyh0YXJnZXQsICdzZWNyZXQnKTtcbiAgICBjaG1vZFN5bmModGFyZ2V0LCAwbzAwMCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUm9vdCBpZ25vcmVzIHRoZSBtb2RlIGJpdHMsIHNvIG9ubHkgYXNzZXJ0IHdoZW4gdGhlIHJlYWQgcmVhbGx5IGZhaWxzLlxuICAgICAgbGV0IHJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlYWRGaWxlU3luYyh0YXJnZXQsICd1dGY4Jyk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWFkYWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhd2FpdCBleHBlY3QoaGFzU2FtZUNvbnRlbnQodGFyZ2V0LCAnc2VjcmV0JykpLnJlc29sdmVzLnRvQmUoZmFsc2UpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjaG1vZFN5bmModGFyZ2V0LCAwbzYwMCk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnd3JpdGVGaWxlSWZDaGFuZ2VkJywgKCkgPT4ge1xuICBpdCgnY3JlYXRlcyB0aGUgZmlsZSB3aGVuIGl0IGRvZXMgbm90IGV4aXN0JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGpvaW4odGVzdFJvb3QsICdhLmpzJyk7XG5cbiAgICBhd2FpdCBleHBlY3Qod3JpdGVGaWxlSWZDaGFuZ2VkKHRhcmdldCwgJ2hlbGxvJykpLnJlc29sdmVzLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHJlYWRGaWxlU3luYyh0YXJnZXQsICd1dGY4JykpLnRvQmUoJ2hlbGxvJyk7XG4gIH0pO1xuXG4gIGl0KCdkb2VzIG5vdCB0b3VjaCB0aGUgZmlsZSB3aGVuIGNvbnRlbnQgaXMgdW5jaGFuZ2VkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGpvaW4odGVzdFJvb3QsICdhLmpzJyk7XG4gICAgYXdhaXQgd3JpdGVGaWxlSWZDaGFuZ2VkKHRhcmdldCwgJ2hlbGxvJyk7XG4gICAgY29uc3QgYmVmb3JlID0gZmlsZUlkZW50aXR5KHRhcmdldCk7XG5cbiAgICBhd2FpdCBleHBlY3Qod3JpdGVGaWxlSWZDaGFuZ2VkKHRhcmdldCwgJ2hlbGxvJykpLnJlc29sdmVzLnRvQmUoZmFsc2UpO1xuXG4gICAgZXhwZWN0KGZpbGVJZGVudGl0eSh0YXJnZXQpKS50b0JlKGJlZm9yZSk7XG4gIH0pO1xuXG4gIGl0KCdyZXdyaXRlcyB0aGUgZmlsZSB3aGVuIGNvbnRlbnQgY2hhbmdlcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSBqb2luKHRlc3RSb290LCAnYS5qcycpO1xuICAgIGF3YWl0IHdyaXRlRmlsZUlmQ2hhbmdlZCh0YXJnZXQsICdoZWxsbycpO1xuXG4gICAgYXdhaXQgZXhwZWN0KHdyaXRlRmlsZUlmQ2hhbmdlZCh0YXJnZXQsICdnb29kYnllJykpLnJlc29sdmVzLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHJlYWRGaWxlU3luYyh0YXJnZXQsICd1dGY4JykpLnRvQmUoJ2dvb2RieWUnKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3dyaXRlR2VuZXJhdGVkRmlsZScsICgpID0+IHtcbiAgLy8gUmVncmVzc2lvbiB0ZXN0IGZvciB0aGUgZGV2IHdhdGNoZXIgdGhyYXNoOiB0aGUgZ2VuZXJhdGVkIHJvdXRlcyBsaXZlXG4gIC8vIGluc2lkZSB0aGUgYXBwIGRpcmVjdG9yeSB0aGUgZGV2IHNlcnZlciB3YXRjaGVzLCBzbyBhIHJld3JpdGUgd2l0aFxuICAvLyBpZGVudGljYWwgYnl0ZXMgc3RpbGwgaW52YWxpZGF0ZXMgdGhlIGJ1bmRsZXIgYW5kIGZvcmNlcyBhIHJlY29tcGlsZS5cbiAgaXQoJ2xlYXZlcyB0aGUgZmlsZSB1bnRvdWNoZWQgd2hlbiB0aGUgZ2VuZXJhdGVkIG91dHB1dCBpcyB1bmNoYW5nZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpO1xuICAgIGNvbnN0IHRhcmdldCA9IGpvaW4odGVzdFJvb3QsICdyb3V0ZS5qcycpO1xuXG4gICAgYXdhaXQgYnVpbGRlci53cml0ZUdlbmVyYXRlZEZpbGUodGFyZ2V0LCAnZXhwb3J0IGNvbnN0IEdFVCA9ICgpID0+IHt9OycpO1xuICAgIGNvbnN0IGJlZm9yZSA9IGZpbGVJZGVudGl0eSh0YXJnZXQpO1xuXG4gICAgYXdhaXQgYnVpbGRlci53cml0ZUdlbmVyYXRlZEZpbGUodGFyZ2V0LCAnZXhwb3J0IGNvbnN0IEdFVCA9ICgpID0+IHt9OycpO1xuXG4gICAgZXhwZWN0KGZpbGVJZGVudGl0eSh0YXJnZXQpKS50b0JlKGJlZm9yZSk7XG4gIH0pO1xuXG4gIGl0KCdsZWF2ZXMgbm8gdGVtcCBmaWxlcyBiZWhpbmQgd2hlbiB0aGUgd3JpdGUgaXMgc2tpcHBlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gam9pbih0ZXN0Um9vdCwgJ3JvdXRlLmpzJyk7XG5cbiAgICBhd2FpdCBidWlsZGVyLndyaXRlR2VuZXJhdGVkRmlsZSh0YXJnZXQsICdzYW1lJyk7XG4gICAgYXdhaXQgYnVpbGRlci53cml0ZUdlbmVyYXRlZEZpbGUodGFyZ2V0LCAnc2FtZScpO1xuXG4gICAgZXhwZWN0KHJlYWRkaXJTeW5jKHRlc3RSb290KS5maWx0ZXIoKGYpID0+IGYuZW5kc1dpdGgoJy50bXAnKSkpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdCgnc3RpbGwgd3JpdGVzIHdoZW4gdGhlIGdlbmVyYXRlZCBvdXRwdXQgY2hhbmdlcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gam9pbih0ZXN0Um9vdCwgJ3JvdXRlLmpzJyk7XG5cbiAgICBhd2FpdCBidWlsZGVyLndyaXRlR2VuZXJhdGVkRmlsZSh0YXJnZXQsICd2MScpO1xuICAgIGF3YWl0IGJ1aWxkZXIud3JpdGVHZW5lcmF0ZWRGaWxlKHRhcmdldCwgJ3YyJyk7XG5cbiAgICBleHBlY3QocmVhZEZpbGVTeW5jKHRhcmdldCwgJ3V0ZjgnKSkudG9CZSgndjInKTtcbiAgfSk7XG5cbiAgaXQoJ2NyZWF0ZXMgdGhlIGZpbGUgb24gZmlyc3Qgd3JpdGUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpO1xuICAgIGNvbnN0IHRhcmdldCA9IGpvaW4odGVzdFJvb3QsICdyb3V0ZS5qcycpO1xuXG4gICAgYXdhaXQgYnVpbGRlci53cml0ZUdlbmVyYXRlZEZpbGUodGFyZ2V0LCAnZmlyc3QnKTtcblxuICAgIGV4cGVjdChyZWFkRmlsZVN5bmModGFyZ2V0LCAndXRmOCcpKS50b0JlKCdmaXJzdCcpO1xuICB9KTtcblxuICAvLyBUaGUgTml0cm8gZGV2IGhhbmRsZXIgY2FjaGUtYnVzdHMgaXRzIGltcG9ydCBvZiBgc3RlcHMubWpzYCBvZmYgdGhlIG10aW1lXG4gIC8vIG9mIGB3b3JrZmxvd3MubWpzYCwgc28gdGhhdCB0YXJnZXQgb3B0cyBvdXQ6IHNraXBwaW5nIHRoZSByZWR1bmRhbnQgd3JpdGVcbiAgLy8gd291bGQgZnJlZXplIHRoZSB2ZXJzaW9uIGtleSBhbmQgc2VydmUgc3RhbGUgc3RlcCBjb2RlLiBTZWVcbiAgLy8gYHBhY2thZ2VzL25pdHJvL3NyYy9idWlsZGVycy50c2AuXG4gIGl0KCdzdGlsbCByZXdyaXRlcyB1bmNoYW5nZWQgb3V0cHV0IHdoZW4gdGhlIHRhcmdldCBvcHRzIG91dCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gY3JlYXRlT3B0ZWRPdXRCdWlsZGVyKHRlc3RSb290KTtcbiAgICBjb25zdCB0YXJnZXQgPSBqb2luKHRlc3RSb290LCAnd29ya2Zsb3dzLm1qcycpO1xuXG4gICAgYXdhaXQgYnVpbGRlci53cml0ZUdlbmVyYXRlZEZpbGUodGFyZ2V0LCAnZXhwb3J0IGNvbnN0IGEgPSAxOycpO1xuICAgIGNvbnN0IGJlZm9yZSA9IGZpbGVJZGVudGl0eSh0YXJnZXQpO1xuXG4gICAgYXdhaXQgYnVpbGRlci53cml0ZUdlbmVyYXRlZEZpbGUodGFyZ2V0LCAnZXhwb3J0IGNvbnN0IGEgPSAxOycpO1xuXG4gICAgZXhwZWN0KGZpbGVJZGVudGl0eSh0YXJnZXQpKS5ub3QudG9CZShiZWZvcmUpO1xuICAgIGV4cGVjdChyZWFkRmlsZVN5bmModGFyZ2V0LCAndXRmOCcpKS50b0JlKCdleHBvcnQgY29uc3QgYSA9IDE7Jyk7XG4gIH0pO1xufSk7XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/builders",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.46",
|
|
4
4
|
"description": "Shared builder infrastructure for Workflow SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
"find-up": "7.0.0",
|
|
42
42
|
"json5": "2.2.3",
|
|
43
43
|
"tinyglobby": "0.2.17",
|
|
44
|
-
"@workflow/core": "5.0.0-beta.
|
|
45
|
-
"@workflow/errors": "5.0.0-beta.
|
|
46
|
-
"@workflow/utils": "5.0.0-beta.
|
|
44
|
+
"@workflow/core": "5.0.0-beta.46",
|
|
45
|
+
"@workflow/errors": "5.0.0-beta.18",
|
|
46
|
+
"@workflow/utils": "5.0.0-beta.9",
|
|
47
47
|
"@workflow/swc-plugin": "5.0.0-beta.5"
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|