@workflow/builders 5.0.0-beta.36 → 5.0.0-beta.38

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.
@@ -1,4 +1,4 @@
1
- import { copyFile, mkdir, writeFile } from 'node:fs/promises';
1
+ import { copyFile, mkdir, rm, writeFile } from 'node:fs/promises';
2
2
  import { join, resolve } from 'node:path';
3
3
  import { BaseBuilder } from './base-builder.js';
4
4
  import { getWorkflowQueueTrigger } from './constants.js';
@@ -9,6 +9,11 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
9
9
  const workflowGeneratedDir = join(functionsDir, '.well-known/workflow/v1');
10
10
  // Ensure output directories exist
11
11
  await mkdir(workflowGeneratedDir, { recursive: true });
12
+ // Build caches may still contain the retired standalone step function.
13
+ await rm(join(workflowGeneratedDir, 'step.func'), {
14
+ recursive: true,
15
+ force: true,
16
+ });
12
17
  const inputFiles = await this.getInputFiles();
13
18
  const tsconfigPath = await this.findTsConfigPath();
14
19
  // Create combined bundle in flow.func/
@@ -88,4 +93,4 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
88
93
  this.logBaseBuilderInfo('Webhook function available at /.well-known/workflow/v1/webhook/[token]');
89
94
  }
90
95
  }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE1BQU0sT0FBTywyQkFBNEIsU0FBUSxXQUFXO0lBQzFELEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDcEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUUzRSxrQ0FBa0M7UUFDbEMsTUFBTSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV2RCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25ELHVDQUF1QztRQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLG9EQUFvRCxDQUNyRCxDQUFDO1FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDakUsTUFBTSxL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QWMsRUFBRTtZQUN4QyxPQUFPLEVBQUUsV0FBVztZQUNwQixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxTQUFpQjtRQUNyRCwwQ0FBMEM7UUFDMUMsTUFBTSxpQkFBaUIsR0FBRztZQUN4QixPQUFPLEVBQUUsQ0FBQztZQUNWLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxHQUFHLEVBQUUsMERBQTBEO29CQUMvRCxJQUFJLEVBQUUsMENBQTBDO2lCQUNqRDthQUNGO1NBQ0YsQ0FBQztRQUVGLE1BQU0sU0FBUyxDQUNiLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEVBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUMzQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLCtCQUErQixTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxrQkFBa0IsQ0FDckIsOERBQThELENBQy9ELENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLENBQ3JCLHdFQUF3RSxDQUN6RSxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29weUZpbGUsIG1rZGlyLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgQmFzZUJ1aWxkZXIgfSBmcm9tICcuL2Jhc2UtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBnZXRXb3JrZmxvd1F1ZXVlVHJpZ2dlciB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcblxuZXhwb3J0IGNsYXNzIFZlcmNlbEJ1aWxkT3V0cHV0QVBJQnVpbGRlciBleHRlbmRzIEJhc2VCdWlsZGVyIHtcbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3V0cHV0RGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnLnZlcmNlbC9vdXRwdXQnKTtcbiAgICBjb25zdCBmdW5jdGlvbnNEaXIgPSBqb2luKG91dHB1dERpciwgJ2Z1bmN0aW9ucycpO1xuICAgIGNvbnN0IHdvcmtmbG93R2VuZXJhdGVkRGlyID0gam9pbihmdW5jdGlvbnNEaXIsICcud2VsbC1rbm93bi93b3JrZmxvdy92MScpO1xuXG4gICAgLy8gRW5zdXJlIG91dHB1dCBkaXJlY3RvcmllcyBleGlzdFxuICAgIGF3YWl0IG1rZGlyKHdvcmtmbG93R2VuZXJhdGVkRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICBjb25zdCB0c2NvbmZpZ1BhdGggPSBhd2FpdCB0aGlzLmZpbmRUc0NvbmZpZ1BhdGgoKTtcbiAgICAvLyBDcmVhdGUgY29tYmluZWQgYnVuZGxlIGluIGZsb3cuZnVuYy9cbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdDcmVhdGluZyBWZXJjZWwgQnVpbGQgT3V0cHV0IEFQSSBjb21iaW5lZCBmdW5jdGlvbidcbiAgICApO1xuICAgIGNvbnN0IHdvcmtmbG93c0Z1bmNEaXIgPSBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnZmxvdy5mdW5jJyk7XG4gICAgYXdhaXQgbWtkaXIod29ya2Zsb3dzRnVuY0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbWJpbmVkQnVuZGxlKHtcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICBzdGVwc091dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ19fc3RlcF9yZWdpc3RyYXRpb25zLm1qcycpLFxuICAgICAgZmxvd091dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ2luZGV4Lm1qcycpLFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgYnVuZGxlRmluYWxPdXRwdXQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZS5qc29uIGFuZCAudmMtY29uZmlnLmpzb24gZm9yIGNvbWJpbmVkIGZ1bmN0aW9uXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVQYWNrYWdlSnNvbih3b3JrZmxvd3NGdW5jRGlyLCAnbW9kdWxlJyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVWY0NvbmZpZyh3b3JrZmxvd3NGdW5jRGlyLCB7XG4gICAgICBoYW5kbGVyOiAnaW5kZXgubWpzJyxcbiAgICAgIC8vIFNraXAgdGhlIHNvdXJjZS1tYXAtc3VwcG9ydCBydW50aW1lIHNoaW0gd2hlbiBzb3VyY2VtYXBzIGFyZVxuICAgICAgLy8gZGlzYWJsZWQg4oCUIGl0J3MgYSBtZWFuaW5nZnVsIGNodW5rIG9mIHRoZSBmdW5jdGlvbiBidW5kbGUgYW5kXG4gICAgICAvLyBzZXJ2ZXMgbm8gcHVycG9zZSB3aXRob3V0IG1hcHMuXG4gICAgICBzaG91bGRBZGRTb3VyY2VtYXBTdXBwb3J0OiB0aGlzLnNvdXJjZW1hcHNFbmFibGVkLFxuICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtnZXRXb3JrZmxvd1F1ZXVlVHJpZ2dlcigpXSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLmJ1aWxkV2ViaG9va0Z1bmN0aW9uKHsgd29ya2Zsb3dHZW5lcmF0ZWREaXIgfSk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVCdWlsZE91dHB1dENvbmZpZyhvdXRwdXREaXIpO1xuXG4gICAgLy8gR2VuZXJhdGUgdW5pZmllZCBtYW5pZmVzdFxuICAgIGNvbnN0IHdvcmtmbG93QnVuZGxlUGF0aCA9IGpvaW4oXG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICdmbG93LmZ1bmMvaW5kZXgubWpzJ1xuICAgICk7XG4gICAgY29uc3QgbWFuaWZlc3RKc29uID0gYXdhaXQgdGhpcy5jcmVhdGVNYW5pZmVzdCh7XG4gICAgICB3b3JrZmxvd0J1bmRsZVBhdGgsXG4gICAgICBtYW5pZmVzdERpcjogd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICBtYW5pZmVzdCxcbiAgICB9KTtcblxuICAgIC8vIEV4cG9zZSBtYW5pZmVzdCBhcyBhIHN0YXRpYyBmaWxlIHdoZW4gV09SS0ZMT1dfUFVCTElDX01BTklGRVNUPTEuXG4gICAgLy8gVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgc2VydmVzIHN0YXRpYyBmaWxlcyBmcm9tIC52ZXJjZWwvb3V0cHV0L3N0YXRpYy9cbiAgICBpZiAodGhpcy5zaG91bGRFeHBvc2VQdWJsaWNNYW5pZmVzdCAmJiBtYW5pZmVzdEpzb24pIHtcbiAgICAgIGNvbnN0IHN0YXRpY01hbmlmZXN0RGlyID0gam9pbihcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICAnc3RhdGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxJ1xuICAgICAgKTtcbiAgICAgIGF3YWl0IG1rZGlyKHN0YXRpY01hbmlmZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5WRVJDRUxfREVQTE9ZTUVOVF9JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKHN0YXRpY01hbmlmZXN0RGlyLCAnLmdpdGlnbm9yZScpLCAnKicpO1xuICAgICAgfVxuICAgICAgYXdhaXQgY29weUZpbGUoXG4gICAgICAgIGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdtYW5pZmVzdC5qc29uJyksXG4gICAgICAgIGpvaW4oc3RhdGljTWFuaWZlc3REaXIsICdtYW5pZmVzdC5qc29uJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVDbGllbnRMaWJyYXJ5KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkV2ViaG9va0Z1bmN0aW9uKHtcbiAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICBidW5kbGUgPSB0cnVlLFxuICB9OiB7XG4gICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICBidW5kbGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oXG4gICAgICAnQ3JlYXRpbmcgVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgd2ViaG9vayBmdW5jdGlvbidcbiAgICApO1xuICAgIGNvbnN0IHdlYmhvb2tGdW5jRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3dlYmhvb2svW3Rva2VuXS5mdW5jJyk7XG5cbiAgICAvLyBCdW5kbGUgdGhlIHdlYmhvb2sgcm91dGUgd2l0aCBkZXBlbmRlbmNpZXMgcmVzb2x2ZWRcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVdlYmhvb2tCdW5kbGUoe1xuICAgICAgb3V0ZmlsZTogam9pbih3ZWJob29rRnVuY0RpciwgJ2luZGV4Lm1qcycpLFxuICAgICAgYnVuZGxlLCAvLyBCdWlsZCBPdXRwdXQgQVBJIG5lZWRzIGJ1bmRsaW5nIChleGNlcHQgaW4gdGVzdHMpXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZS5qc29uIGFuZCAudmMtY29uZmlnLmpzb24gZm9yIHdlYmhvb2sgZnVuY3Rpb25cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVBhY2thZ2VKc29uKHdlYmhvb2tGdW5jRGlyLCAnbW9kdWxlJyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVWY0NvbmZpZyh3ZWJob29rRnVuY0Rpciwge1xuICAgICAgaGFuZGxlcjogJ2luZGV4Lm1qcycsXG4gICAgICBzaG91bGRBZGRIZWxwZXJzOiBmYWxzZSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUJ1aWxkT3V0cHV0Q29uZmlnKG91dHB1dERpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ3JlYXRlIGNvbmZpZy5qc29uIGZvciBCdWlsZCBPdXRwdXQgQVBJXG4gICAgY29uc3QgYnVpbGRPdXRwdXRDb25maWcgPSB7XG4gICAgICB2ZXJzaW9uOiAzLFxuICAgICAgcm91dGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzcmM6ICdeXFxcXC9cXFxcLndlbGwta25vd25cXFxcL3dvcmtmbG93XFxcXC92MVxcXFwvd2ViaG9va1xcXFwvKFteXFxcXC9dKykkJyxcbiAgICAgICAgICBkZXN0OiAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3dlYmhvb2svW3Rva2VuXScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICBqb2luKG91dHB1dERpciwgJ2NvbmZpZy5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeShidWlsZE91dHB1dENvbmZpZywgbnVsbCwgMilcbiAgICApO1xuXG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oYEJ1aWxkIE91dHB1dCBBUEkgY3JlYXRlZCBhdCAke291dHB1dERpcn1gKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdDb21iaW5lZCBmdW5jdGlvbiBhdmFpbGFibGUgYXQgLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cnXG4gICAgKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdXZWJob29rIGZ1bmN0aW9uIGF2YWlsYWJsZSBhdCAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvd2ViaG9vay9bdG9rZW5dJ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsV0FBVztJQUMxRCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFFM0Usa0NBQWtDO1FBQ2xDLE1BQU0sS0FBSyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkQsdUVBQXVFO1FBQ3ZFLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsRUFBRTtZQUNoRCxTQUFTLEVBQUUsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUs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TUFBTSxFQUFFLG9EQUFvRDtTQUM3RCxDQUFDLENBQUM7UUFFSCwrREFBK0Q7UUFDL0QsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUU7WUFDeEMsT0FBTyxFQUFFLFdBQVc7WUFDcEIsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsdUJBQXVCLENBQUMsU0FBaUI7UUFDckQsMENBQTBDO1FBQzFDLE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsR0FBRyxFQUFFLDBEQUEwRDtvQkFDL0QsSUFBSSxFQUFFLDBDQUEwQztpQkFDakQ7YUFDRjtTQUNGLENBQUM7UUFFRixNQUFNLFNBQVMsQ0FDYixJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxFQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDM0MsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQywrQkFBK0IsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLDhEQUE4RCxDQUMvRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUNyQix3RUFBd0UsQ0FDekUsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcHlGaWxlLCBta2Rpciwgcm0sIHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBCYXNlQnVpbGRlciB9IGZyb20gJy4vYmFzZS1idWlsZGVyLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93UXVldWVUcmlnZ2VyIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG5leHBvcnQgY2xhc3MgVmVyY2VsQnVpbGRPdXRwdXRBUElCdWlsZGVyIGV4dGVuZHMgQmFzZUJ1aWxkZXIge1xuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvdXRwdXREaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICcudmVyY2VsL291dHB1dCcpO1xuICAgIGNvbnN0IGZ1bmN0aW9uc0RpciA9IGpvaW4ob3V0cHV0RGlyLCAnZnVuY3Rpb25zJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dHZW5lcmF0ZWREaXIgPSBqb2luKGZ1bmN0aW9uc0RpciwgJy53ZWxsLWtub3duL3dvcmtmbG93L3YxJyk7XG5cbiAgICAvLyBFbnN1cmUgb3V0cHV0IGRpcmVjdG9yaWVzIGV4aXN0XG4gICAgYXdhaXQgbWtkaXIod29ya2Zsb3dHZW5lcmF0ZWREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIEJ1aWxkIGNhY2hlcyBtYXkgc3RpbGwgY29udGFpbiB0aGUgcmV0aXJlZCBzdGFuZGFsb25lIHN0ZXAgZnVuY3Rpb24uXG4gICAgYXdhaXQgcm0oam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3N0ZXAuZnVuYycpLCB7XG4gICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICBmb3JjZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICBjb25zdCB0c2NvbmZpZ1BhdGggPSBhd2FpdCB0aGlzLmZpbmRUc0NvbmZpZ1BhdGgoKTtcbiAgICAvLyBDcmVhdGUgY29tYmluZWQgYnVuZGxlIGluIGZsb3cuZnVuYy9cbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdDcmVhdGluZyBWZXJjZWwgQnVpbGQgT3V0cHV0IEFQSSBjb21iaW5lZCBmdW5jdGlvbidcbiAgICApO1xuICAgIGNvbnN0IHdvcmtmbG93c0Z1bmNEaXIgPSBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnZmxvdy5mdW5jJyk7XG4gICAgYXdhaXQgbWtkaXIod29ya2Zsb3dzRnVuY0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbWJpbmVkQnVuZGxlKHtcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICBzdGVwc091dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ19fc3RlcF9yZWdpc3RyYXRpb25zLm1qcycpLFxuICAgICAgZmxvd091dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ2luZGV4Lm1qcycpLFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgYnVuZGxlRmluYWxPdXRwdXQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZS5qc29uIGFuZCAudmMtY29uZmlnLmpzb24gZm9yIGNvbWJpbmVkIGZ1bmN0aW9uXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVQYWNrYWdlSnNvbih3b3JrZmxvd3NGdW5jRGlyLCAnbW9kdWxlJyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVWY0NvbmZpZyh3b3JrZmxvd3NGdW5jRGlyLCB7XG4gICAgICBoYW5kbGVyOiAnaW5kZXgubWpzJyxcbiAgICAgIC8vIFNraXAgdGhlIHNvdXJjZS1tYXAtc3VwcG9ydCBydW50aW1lIHNoaW0gd2hlbiBzb3VyY2VtYXBzIGFyZVxuICAgICAgLy8gZGlzYWJsZWQg4oCUIGl0J3MgYSBtZWFuaW5nZnVsIGNodW5rIG9mIHRoZSBmdW5jdGlvbiBidW5kbGUgYW5kXG4gICAgICAvLyBzZXJ2ZXMgbm8gcHVycG9zZSB3aXRob3V0IG1hcHMuXG4gICAgICBzaG91bGRBZGRTb3VyY2VtYXBTdXBwb3J0OiB0aGlzLnNvdXJjZW1hcHNFbmFibGVkLFxuICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtnZXRXb3JrZmxvd1F1ZXVlVHJpZ2dlcigpXSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLmJ1aWxkV2ViaG9va0Z1bmN0aW9uKHsgd29ya2Zsb3dHZW5lcmF0ZWREaXIgfSk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVCdWlsZE91dHB1dENvbmZpZyhvdXRwdXREaXIpO1xuXG4gICAgLy8gR2VuZXJhdGUgdW5pZmllZCBtYW5pZmVzdFxuICAgIGNvbnN0IHdvcmtmbG93QnVuZGxlUGF0aCA9IGpvaW4oXG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICdmbG93LmZ1bmMvaW5kZXgubWpzJ1xuICAgICk7XG4gICAgY29uc3QgbWFuaWZlc3RKc29uID0gYXdhaXQgdGhpcy5jcmVhdGVNYW5pZmVzdCh7XG4gICAgICB3b3JrZmxvd0J1bmRsZVBhdGgsXG4gICAgICBtYW5pZmVzdERpcjogd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICBtYW5pZmVzdCxcbiAgICB9KTtcblxuICAgIC8vIEV4cG9zZSBtYW5pZmVzdCBhcyBhIHN0YXRpYyBmaWxlIHdoZW4gV09SS0ZMT1dfUFVCTElDX01BTklGRVNUPTEuXG4gICAgLy8gVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgc2VydmVzIHN0YXRpYyBmaWxlcyBmcm9tIC52ZXJjZWwvb3V0cHV0L3N0YXRpYy9cbiAgICBpZiAodGhpcy5zaG91bGRFeHBvc2VQdWJsaWNNYW5pZmVzdCAmJiBtYW5pZmVzdEpzb24pIHtcbiAgICAgIGNvbnN0IHN0YXRpY01hbmlmZXN0RGlyID0gam9pbihcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICAnc3RhdGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxJ1xuICAgICAgKTtcbiAgICAgIGF3YWl0IG1rZGlyKHN0YXRpY01hbmlmZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5WRVJDRUxfREVQTE9ZTUVOVF9JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKHN0YXRpY01hbmlmZXN0RGlyLCAnLmdpdGlnbm9yZScpLCAnKicpO1xuICAgICAgfVxuICAgICAgYXdhaXQgY29weUZpbGUoXG4gICAgICAgIGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdtYW5pZmVzdC5qc29uJyksXG4gICAgICAgIGpvaW4oc3RhdGljTWFuaWZlc3REaXIsICdtYW5pZmVzdC5qc29uJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVDbGllbnRMaWJyYXJ5KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkV2ViaG9va0Z1bmN0aW9uKHtcbiAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICBidW5kbGUgPSB0cnVlLFxuICB9OiB7XG4gICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICBidW5kbGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oXG4gICAgICAnQ3JlYXRpbmcgVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgd2ViaG9vayBmdW5jdGlvbidcbiAgICApO1xuICAgIGNvbnN0IHdlYmhvb2tGdW5jRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3dlYmhvb2svW3Rva2VuXS5mdW5jJyk7XG5cbiAgICAvLyBCdW5kbGUgdGhlIHdlYmhvb2sgcm91dGUgd2l0aCBkZXBlbmRlbmNpZXMgcmVzb2x2ZWRcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVdlYmhvb2tCdW5kbGUoe1xuICAgICAgb3V0ZmlsZTogam9pbih3ZWJob29rRnVuY0RpciwgJ2luZGV4Lm1qcycpLFxuICAgICAgYnVuZGxlLCAvLyBCdWlsZCBPdXRwdXQgQVBJIG5lZWRzIGJ1bmRsaW5nIChleGNlcHQgaW4gdGVzdHMpXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZS5qc29uIGFuZCAudmMtY29uZmlnLmpzb24gZm9yIHdlYmhvb2sgZnVuY3Rpb25cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVBhY2thZ2VKc29uKHdlYmhvb2tGdW5jRGlyLCAnbW9kdWxlJyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVWY0NvbmZpZyh3ZWJob29rRnVuY0Rpciwge1xuICAgICAgaGFuZGxlcjogJ2luZGV4Lm1qcycsXG4gICAgICBzaG91bGRBZGRIZWxwZXJzOiBmYWxzZSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUJ1aWxkT3V0cHV0Q29uZmlnKG91dHB1dERpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ3JlYXRlIGNvbmZpZy5qc29uIGZvciBCdWlsZCBPdXRwdXQgQVBJXG4gICAgY29uc3QgYnVpbGRPdXRwdXRDb25maWcgPSB7XG4gICAgICB2ZXJzaW9uOiAzLFxuICAgICAgcm91dGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzcmM6ICdeXFxcXC9cXFxcLndlbGwta25vd25cXFxcL3dvcmtmbG93XFxcXC92MVxcXFwvd2ViaG9va1xcXFwvKFteXFxcXC9dKykkJyxcbiAgICAgICAgICBkZXN0OiAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3dlYmhvb2svW3Rva2VuXScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICBqb2luKG91dHB1dERpciwgJ2NvbmZpZy5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeShidWlsZE91dHB1dENvbmZpZywgbnVsbCwgMilcbiAgICApO1xuXG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oYEJ1aWxkIE91dHB1dCBBUEkgY3JlYXRlZCBhdCAke291dHB1dERpcn1gKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdDb21iaW5lZCBmdW5jdGlvbiBhdmFpbGFibGUgYXQgLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cnXG4gICAgKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdXZWJob29rIGZ1bmN0aW9uIGF2YWlsYWJsZSBhdCAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvd2ViaG9vay9bdG9rZW5dJ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/builders",
3
- "version": "5.0.0-beta.36",
3
+ "version": "5.0.0-beta.38",
4
4
  "description": "Shared builder infrastructure for Workflow SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -41,12 +41,10 @@
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.36",
45
- "@workflow/errors": "5.0.0-beta.12",
46
- "@workflow/utils": "5.0.0-beta.6",
47
- "@workflow/world-local": "5.0.0-beta.30",
48
- "@workflow/world-vercel": "5.0.0-beta.32",
49
- "@workflow/swc-plugin": "5.0.0-beta.5"
44
+ "@workflow/core": "5.0.0-beta.38",
45
+ "@workflow/utils": "5.0.0-beta.8",
46
+ "@workflow/swc-plugin": "5.0.0-beta.5",
47
+ "@workflow/errors": "5.0.0-beta.14"
50
48
  },
51
49
  "scripts": {
52
50
  "build": "tsc",
@@ -1,15 +0,0 @@
1
- /**
2
- * Banner that defines CJS-style `__filename`/`__dirname` bindings for ESM
3
- * server bundles. Some bundled dependencies (and the statically injected
4
- * world package) reference these identifiers, which don't exist in ESM.
5
- */
6
- export declare const WORKFLOW_NODE_FILENAME_BANNER = "import { fileURLToPath as __wkfFileURLToPath } from 'node:url'; import { dirname as __wkfDirname } from 'node:path'; const __filename = __wkfFileURLToPath(import.meta.url); const __dirname = __wkfDirname(__filename);";
7
- /**
8
- * Full Node-compat banner for ESM server bundles: `__filename`/`__dirname`
9
- * bindings plus a working `require` (via `createRequire`) so bundled
10
- * dependencies that lazily `require()` node builtins (e.g. undici's
11
- * `require('node:http2')`) keep working. See the SvelteKit and Nitro
12
- * plugins for the runtime rationale.
13
- */
14
- export declare const WORKFLOW_NODE_COMPAT_BANNER = "import { createRequire as __wkfCreateRequire } from 'node:module'; import { fileURLToPath as __wkfFileURLToPath } from 'node:url'; import { dirname as __wkfDirname } from 'node:path'; const __filename = __wkfFileURLToPath(import.meta.url); const __dirname = __wkfDirname(__filename); if (typeof require === 'undefined') { globalThis.require = __wkfCreateRequire(import.meta.url); }";
15
- //# sourceMappingURL=node-compat-banner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node-compat-banner.d.ts","sourceRoot":"","sources":["../src/node-compat-banner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,6NACkL,CAAC;AAE7N;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,kYAA0M,CAAC"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Banner that defines CJS-style `__filename`/`__dirname` bindings for ESM
3
- * server bundles. Some bundled dependencies (and the statically injected
4
- * world package) reference these identifiers, which don't exist in ESM.
5
- */
6
- export const WORKFLOW_NODE_FILENAME_BANNER = "import { fileURLToPath as __wkfFileURLToPath } from 'node:url'; import { dirname as __wkfDirname } from 'node:path'; const __filename = __wkfFileURLToPath(import.meta.url); const __dirname = __wkfDirname(__filename);";
7
- /**
8
- * Full Node-compat banner for ESM server bundles: `__filename`/`__dirname`
9
- * bindings plus a working `require` (via `createRequire`) so bundled
10
- * dependencies that lazily `require()` node builtins (e.g. undici's
11
- * `require('node:http2')`) keep working. See the SvelteKit and Nitro
12
- * plugins for the runtime rationale.
13
- */
14
- export const WORKFLOW_NODE_COMPAT_BANNER = `import { createRequire as __wkfCreateRequire } from 'node:module'; ${WORKFLOW_NODE_FILENAME_BANNER} if (typeof require === 'undefined') { globalThis.require = __wkfCreateRequire(import.meta.url); }`;
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jb21wYXQtYmFubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25vZGUtY29tcGF0LWJhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQ3hDLDBOQUEwTixDQUFDO0FBRTdOOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLHNFQUFzRSw2QkFBNkIsb0dBQW9HLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJhbm5lciB0aGF0IGRlZmluZXMgQ0pTLXN0eWxlIGBfX2ZpbGVuYW1lYC9gX19kaXJuYW1lYCBiaW5kaW5ncyBmb3IgRVNNXG4gKiBzZXJ2ZXIgYnVuZGxlcy4gU29tZSBidW5kbGVkIGRlcGVuZGVuY2llcyAoYW5kIHRoZSBzdGF0aWNhbGx5IGluamVjdGVkXG4gKiB3b3JsZCBwYWNrYWdlKSByZWZlcmVuY2UgdGhlc2UgaWRlbnRpZmllcnMsIHdoaWNoIGRvbid0IGV4aXN0IGluIEVTTS5cbiAqL1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX05PREVfRklMRU5BTUVfQkFOTkVSID1cbiAgXCJpbXBvcnQgeyBmaWxlVVJMVG9QYXRoIGFzIF9fd2tmRmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJzsgaW1wb3J0IHsgZGlybmFtZSBhcyBfX3drZkRpcm5hbWUgfSBmcm9tICdub2RlOnBhdGgnOyBjb25zdCBfX2ZpbGVuYW1lID0gX193a2ZGaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7IGNvbnN0IF9fZGlybmFtZSA9IF9fd2tmRGlybmFtZShfX2ZpbGVuYW1lKTtcIjtcblxuLyoqXG4gKiBGdWxsIE5vZGUtY29tcGF0IGJhbm5lciBmb3IgRVNNIHNlcnZlciBidW5kbGVzOiBgX19maWxlbmFtZWAvYF9fZGlybmFtZWBcbiAqIGJpbmRpbmdzIHBsdXMgYSB3b3JraW5nIGByZXF1aXJlYCAodmlhIGBjcmVhdGVSZXF1aXJlYCkgc28gYnVuZGxlZFxuICogZGVwZW5kZW5jaWVzIHRoYXQgbGF6aWx5IGByZXF1aXJlKClgIG5vZGUgYnVpbHRpbnMgKGUuZy4gdW5kaWNpJ3NcbiAqIGByZXF1aXJlKCdub2RlOmh0dHAyJylgKSBrZWVwIHdvcmtpbmcuIFNlZSB0aGUgU3ZlbHRlS2l0IGFuZCBOaXRyb1xuICogcGx1Z2lucyBmb3IgdGhlIHJ1bnRpbWUgcmF0aW9uYWxlLlxuICovXG5leHBvcnQgY29uc3QgV09SS0ZMT1dfTk9ERV9DT01QQVRfQkFOTkVSID0gYGltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgYXMgX193a2ZDcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnOyAke1dPUktGTE9XX05PREVfRklMRU5BTUVfQkFOTkVSfSBpZiAodHlwZW9mIHJlcXVpcmUgPT09ICd1bmRlZmluZWQnKSB7IGdsb2JhbFRoaXMucmVxdWlyZSA9IF9fd2tmQ3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpOyB9YDtcbiJdfQ==
@@ -1,2 +0,0 @@
1
- export declare const WORKFLOW_OPTIONAL_PG_NATIVE_ALIAS: string;
2
- //# sourceMappingURL=optional-pg-native-alias.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"optional-pg-native-alias.d.ts","sourceRoot":"","sources":["../src/optional-pg-native-alias.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iCAAiC,QAE7C,CAAC"}
@@ -1,3 +0,0 @@
1
- import { fileURLToPath } from 'node:url';
2
- export const WORKFLOW_OPTIONAL_PG_NATIVE_ALIAS = fileURLToPath(new URL('./optional-pg-native.js', import.meta.url));
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uYWwtcGctbmF0aXZlLWFsaWFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL29wdGlvbmFsLXBnLW5hdGl2ZS1hbGlhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLGFBQWEsQ0FDNUQsSUFBSSxHQUFHLENBQUMseUJBQXlCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5cbmV4cG9ydCBjb25zdCBXT1JLRkxPV19PUFRJT05BTF9QR19OQVRJVkVfQUxJQVMgPSBmaWxlVVJMVG9QYXRoKFxuICBuZXcgVVJMKCcuL29wdGlvbmFsLXBnLW5hdGl2ZS5qcycsIGltcG9ydC5tZXRhLnVybClcbik7XG4iXX0=
@@ -1,3 +0,0 @@
1
- declare const pgNative: {};
2
- export default pgNative;
3
- //# sourceMappingURL=optional-pg-native.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"optional-pg-native.d.ts","sourceRoot":"","sources":["../src/optional-pg-native.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,QAAQ,IAAK,CAAC;AAEpB,eAAe,QAAQ,CAAC"}
@@ -1,3 +0,0 @@
1
- const pgNative = {};
2
- export default pgNative;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uYWwtcGctbmF0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL29wdGlvbmFsLXBnLW5hdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFFcEIsZUFBZSxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBwZ05hdGl2ZSA9IHt9O1xuXG5leHBvcnQgZGVmYXVsdCBwZ05hdGl2ZTtcbiJdfQ==
@@ -1,20 +0,0 @@
1
- import type * as esbuild from 'esbuild';
2
- export declare const WORKFLOW_WORLD_TARGET_MODULE = "@workflow/core/runtime/world-target";
3
- export declare const WORKFLOW_CORE_RUNTIME_MODULE = "@workflow/core/runtime";
4
- export { getWorldImport, normalizeWorkflowTargetWorldImport, } from '@workflow/utils';
5
- export type WorkflowWorldTargetEnvironment = Record<string, string | undefined>;
6
- export declare function isWorkflowTargetWorldPath(targetWorld: string): boolean;
7
- export declare function ensureWorkflowTargetWorldEnv(env?: WorkflowWorldTargetEnvironment): string;
8
- export declare function resolveWorkflowTargetWorldAlias({ workingDir, targetWorld, }: {
9
- workingDir: string;
10
- targetWorld?: string;
11
- }): string;
12
- export declare function resolveWorkflowCoreRuntimeAlias({ workingDir, }: {
13
- workingDir: string;
14
- }): string;
15
- export declare function createWorkflowWorldTargetEsbuildPlugin({ workingDir, externalPackages, targetWorld, }: {
16
- workingDir: string;
17
- externalPackages?: string[];
18
- targetWorld?: string;
19
- }): esbuild.Plugin;
20
- //# sourceMappingURL=world-target.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"world-target.d.ts","sourceRoot":"","sources":["../src/world-target.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,OAAO,MAAM,SAAS,CAAC;AAExC,eAAO,MAAM,4BAA4B,wCACF,CAAC;AACxC,eAAO,MAAM,4BAA4B,2BAA2B,CAAC;AAErE,OAAO,EACL,cAAc,EACd,kCAAkC,GACnC,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAEhF,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAOtE;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,GAAE,8BAA4C,GAChD,MAAM,CAIR;AA6BD,wBAAgB,+BAA+B,CAAC,EAC9C,UAAU,EACV,WAA4C,GAC7C,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAIT;AAED,wBAAgB,+BAA+B,CAAC,EAC9C,UAAU,GACX,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAET;AAED,wBAAgB,sCAAsC,CAAC,EACrD,UAAU,EACV,gBAAqB,EACrB,WAA4C,GAC7C,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,MAAM,CA0BjB"}
@@ -1,74 +0,0 @@
1
- import { createRequire } from 'node:module';
2
- import { isAbsolute, join, win32 } from 'node:path';
3
- import { getWorldImport, normalizeWorkflowTargetWorldImport, } from '@workflow/utils';
4
- export const WORKFLOW_WORLD_TARGET_MODULE = '@workflow/core/runtime/world-target';
5
- export const WORKFLOW_CORE_RUNTIME_MODULE = '@workflow/core/runtime';
6
- export { getWorldImport, normalizeWorkflowTargetWorldImport, } from '@workflow/utils';
7
- export function isWorkflowTargetWorldPath(targetWorld) {
8
- return (targetWorld.startsWith('./') ||
9
- targetWorld.startsWith('../') ||
10
- isAbsolute(targetWorld) ||
11
- win32.isAbsolute(targetWorld));
12
- }
13
- export function ensureWorkflowTargetWorldEnv(env = process.env) {
14
- const targetWorld = getWorldImport(env);
15
- env.WORKFLOW_TARGET_WORLD = targetWorld;
16
- return targetWorld;
17
- }
18
- /**
19
- * Resolve a module specifier from the app's working directory, falling back
20
- * to this package's own dependencies (for built-in worlds the app doesn't
21
- * depend on directly), and finally to the bare specifier so callers can
22
- * externalize modules that aren't installed.
23
- */
24
- function resolveFromWorkingDir(specifier, workingDir) {
25
- let require;
26
- try {
27
- require = createRequire(join(workingDir, 'package.json'));
28
- }
29
- catch {
30
- require = createRequire(import.meta.url);
31
- }
32
- try {
33
- return require.resolve(specifier, {
34
- paths: [workingDir],
35
- });
36
- }
37
- catch {
38
- try {
39
- return createRequire(import.meta.url).resolve(specifier);
40
- }
41
- catch {
42
- return specifier;
43
- }
44
- }
45
- }
46
- export function resolveWorkflowTargetWorldAlias({ workingDir, targetWorld = ensureWorkflowTargetWorldEnv(), }) {
47
- const normalizedTargetWorld = normalizeWorkflowTargetWorldImport(targetWorld) ?? targetWorld;
48
- return resolveFromWorkingDir(normalizedTargetWorld, workingDir);
49
- }
50
- export function resolveWorkflowCoreRuntimeAlias({ workingDir, }) {
51
- return resolveFromWorkingDir(WORKFLOW_CORE_RUNTIME_MODULE, workingDir);
52
- }
53
- export function createWorkflowWorldTargetEsbuildPlugin({ workingDir, externalPackages = [], targetWorld = ensureWorkflowTargetWorldEnv(), }) {
54
- const normalizedTargetWorld = normalizeWorkflowTargetWorldImport(targetWorld) ?? targetWorld;
55
- return {
56
- name: 'workflow:world-target',
57
- setup(build) {
58
- build.onResolve({ filter: /^@workflow\/core\/runtime\/world-target$/ }, () => {
59
- if (externalPackages.includes(normalizedTargetWorld)) {
60
- return { path: normalizedTargetWorld, external: true };
61
- }
62
- const alias = resolveWorkflowTargetWorldAlias({
63
- workingDir,
64
- targetWorld: normalizedTargetWorld,
65
- });
66
- if (alias === normalizedTargetWorld) {
67
- return { path: normalizedTargetWorld, external: true };
68
- }
69
- return { path: alias };
70
- });
71
- },
72
- };
73
- }
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ybGQtdGFyZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dvcmxkLXRhcmdldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLGtDQUFrQyxHQUNuQyxNQUFNLGlCQUFpQixDQUFDO0FBR3pCLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUN2QyxxQ0FBcUMsQ0FBQztBQUN4QyxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyx3QkFBd0IsQ0FBQztBQUVyRSxPQUFPLEVBQ0wsY0FBYyxFQUNkLGtDQUFrQyxHQUNuQyxNQUFNLGlCQUFpQixDQUFDO0FBSXpCLE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxXQUFtQjtJQUMzRCxPQUFPLENBQ0wsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDNUIsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDN0IsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUN2QixLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUM5QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSw0QkFBNEIsQ0FDMUMsTUFBc0MsT0FBTyxDQUFDLEdBQUc7SUFFakQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLEdBQUcsQ0FBQyxxQkFBcUIsR0FBRyxXQUFXLENBQUM7SUFDeEMsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLFVBQWtCO0lBQ2xFLElBQUksT0FBdUIsQ0FBQztJQUM1QixJQUFJLENBQUM7UUFDSCxPQUFPLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ2hDLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQztTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsSUFBSSxDQUFDO1lBQ0gsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSwrQkFBK0IsQ0FBQyxFQUM5QyxVQUFVLEVBQ1YsV0FBVyxHQUFHLDRCQUE0QixFQUFFLEdBSTdDO0lBQ0MsTUFBTSxxQkFBcUIsR0FDekIsa0NBQWtDLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxDQUFDO0lBQ2pFLE9BQU8scUJBQXFCLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELE1BQU0sVUFBVSwrQkFBK0IsQ0FBQyxFQUM5QyxVQUFVLEdBR1g7SUFDQyxPQUFPLHFCQUFxQixDQUFDLDRCQUE0QixFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLFVBQVUsc0NBQXNDLENBQUMsRUFDckQsVUFBVSxFQUNWLGdCQUFnQixHQUFHLEVBQUUsRUFDckIsV0FBVyxHQUFHLDRCQUE0QixFQUFFLEdBSzdDO0lBQ0MsTUFBTSxxQkFBcUIsR0FDekIsa0NBQWtDLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxDQUFDO0lBRWpFLE9BQU87UUFDTCxJQUFJLEVBQUUsdUJBQXVCO1FBQzdCLEtBQUssQ0FBQyxLQUFLO1lBQ1QsS0FBSyxDQUFDLFNBQVMsQ0FDYixFQUFFLE1BQU0sRUFBRSwwQ0FBMEMsRUFBRSxFQUN0RCxHQUFHLEVBQUU7Z0JBQ0gsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDO29CQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDekQsQ0FBQztnQkFFRCxNQUFNLEtBQUssR0FBRywrQkFBK0IsQ0FBQztvQkFDNUMsVUFBVTtvQkFDVixXQUFXLEVBQUUscUJBQXFCO2lCQUNuQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxLQUFLLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztvQkFDcEMsT0FBTyxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQ3pELENBQUM7Z0JBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN6QixDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5pbXBvcnQgeyBpc0Fic29sdXRlLCBqb2luLCB3aW4zMiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge1xuICBnZXRXb3JsZEltcG9ydCxcbiAgbm9ybWFsaXplV29ya2Zsb3dUYXJnZXRXb3JsZEltcG9ydCxcbn0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcbmltcG9ydCB0eXBlICogYXMgZXNidWlsZCBmcm9tICdlc2J1aWxkJztcblxuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1dPUkxEX1RBUkdFVF9NT0RVTEUgPVxuICAnQHdvcmtmbG93L2NvcmUvcnVudGltZS93b3JsZC10YXJnZXQnO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX0NPUkVfUlVOVElNRV9NT0RVTEUgPSAnQHdvcmtmbG93L2NvcmUvcnVudGltZSc7XG5cbmV4cG9ydCB7XG4gIGdldFdvcmxkSW1wb3J0LFxuICBub3JtYWxpemVXb3JrZmxvd1RhcmdldFdvcmxkSW1wb3J0LFxufSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBXb3JrZmxvd1dvcmxkVGFyZ2V0RW52aXJvbm1lbnQgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNXb3JrZmxvd1RhcmdldFdvcmxkUGF0aCh0YXJnZXRXb3JsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgdGFyZ2V0V29ybGQuc3RhcnRzV2l0aCgnLi8nKSB8fFxuICAgIHRhcmdldFdvcmxkLnN0YXJ0c1dpdGgoJy4uLycpIHx8XG4gICAgaXNBYnNvbHV0ZSh0YXJnZXRXb3JsZCkgfHxcbiAgICB3aW4zMi5pc0Fic29sdXRlKHRhcmdldFdvcmxkKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlV29ya2Zsb3dUYXJnZXRXb3JsZEVudihcbiAgZW52OiBXb3JrZmxvd1dvcmxkVGFyZ2V0RW52aXJvbm1lbnQgPSBwcm9jZXNzLmVudlxuKTogc3RyaW5nIHtcbiAgY29uc3QgdGFyZ2V0V29ybGQgPSBnZXRXb3JsZEltcG9ydChlbnYpO1xuICBlbnYuV09SS0ZMT1dfVEFSR0VUX1dPUkxEID0gdGFyZ2V0V29ybGQ7XG4gIHJldHVybiB0YXJnZXRXb3JsZDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgbW9kdWxlIHNwZWNpZmllciBmcm9tIHRoZSBhcHAncyB3b3JraW5nIGRpcmVjdG9yeSwgZmFsbGluZyBiYWNrXG4gKiB0byB0aGlzIHBhY2thZ2UncyBvd24gZGVwZW5kZW5jaWVzIChmb3IgYnVpbHQtaW4gd29ybGRzIHRoZSBhcHAgZG9lc24ndFxuICogZGVwZW5kIG9uIGRpcmVjdGx5KSwgYW5kIGZpbmFsbHkgdG8gdGhlIGJhcmUgc3BlY2lmaWVyIHNvIGNhbGxlcnMgY2FuXG4gKiBleHRlcm5hbGl6ZSBtb2R1bGVzIHRoYXQgYXJlbid0IGluc3RhbGxlZC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUZyb21Xb3JraW5nRGlyKHNwZWNpZmllcjogc3RyaW5nLCB3b3JraW5nRGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgcmVxdWlyZTogTm9kZUpTLlJlcXVpcmU7XG4gIHRyeSB7XG4gICAgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoam9pbih3b3JraW5nRGlyLCAncGFja2FnZS5qc29uJykpO1xuICB9IGNhdGNoIHtcbiAgICByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVxdWlyZS5yZXNvbHZlKHNwZWNpZmllciwge1xuICAgICAgcGF0aHM6IFt3b3JraW5nRGlyXSxcbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCkucmVzb2x2ZShzcGVjaWZpZXIpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHNwZWNpZmllcjtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXb3JrZmxvd1RhcmdldFdvcmxkQWxpYXMoe1xuICB3b3JraW5nRGlyLFxuICB0YXJnZXRXb3JsZCA9IGVuc3VyZVdvcmtmbG93VGFyZ2V0V29ybGRFbnYoKSxcbn06IHtcbiAgd29ya2luZ0Rpcjogc3RyaW5nO1xuICB0YXJnZXRXb3JsZD86IHN0cmluZztcbn0pOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkVGFyZ2V0V29ybGQgPVxuICAgIG5vcm1hbGl6ZVdvcmtmbG93VGFyZ2V0V29ybGRJbXBvcnQodGFyZ2V0V29ybGQpID8/IHRhcmdldFdvcmxkO1xuICByZXR1cm4gcmVzb2x2ZUZyb21Xb3JraW5nRGlyKG5vcm1hbGl6ZWRUYXJnZXRXb3JsZCwgd29ya2luZ0Rpcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlV29ya2Zsb3dDb3JlUnVudGltZUFsaWFzKHtcbiAgd29ya2luZ0Rpcixcbn06IHtcbiAgd29ya2luZ0Rpcjogc3RyaW5nO1xufSk6IHN0cmluZyB7XG4gIHJldHVybiByZXNvbHZlRnJvbVdvcmtpbmdEaXIoV09SS0ZMT1dfQ09SRV9SVU5USU1FX01PRFVMRSwgd29ya2luZ0Rpcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3JrZmxvd1dvcmxkVGFyZ2V0RXNidWlsZFBsdWdpbih7XG4gIHdvcmtpbmdEaXIsXG4gIGV4dGVybmFsUGFja2FnZXMgPSBbXSxcbiAgdGFyZ2V0V29ybGQgPSBlbnN1cmVXb3JrZmxvd1RhcmdldFdvcmxkRW52KCksXG59OiB7XG4gIHdvcmtpbmdEaXI6IHN0cmluZztcbiAgZXh0ZXJuYWxQYWNrYWdlcz86IHN0cmluZ1tdO1xuICB0YXJnZXRXb3JsZD86IHN0cmluZztcbn0pOiBlc2J1aWxkLlBsdWdpbiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXRXb3JsZCA9XG4gICAgbm9ybWFsaXplV29ya2Zsb3dUYXJnZXRXb3JsZEltcG9ydCh0YXJnZXRXb3JsZCkgPz8gdGFyZ2V0V29ybGQ7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd29ya2Zsb3c6d29ybGQtdGFyZ2V0JyxcbiAgICBzZXR1cChidWlsZCkge1xuICAgICAgYnVpbGQub25SZXNvbHZlKFxuICAgICAgICB7IGZpbHRlcjogL15Ad29ya2Zsb3dcXC9jb3JlXFwvcnVudGltZVxcL3dvcmxkLXRhcmdldCQvIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAoZXh0ZXJuYWxQYWNrYWdlcy5pbmNsdWRlcyhub3JtYWxpemVkVGFyZ2V0V29ybGQpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBwYXRoOiBub3JtYWxpemVkVGFyZ2V0V29ybGQsIGV4dGVybmFsOiB0cnVlIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYWxpYXMgPSByZXNvbHZlV29ya2Zsb3dUYXJnZXRXb3JsZEFsaWFzKHtcbiAgICAgICAgICAgIHdvcmtpbmdEaXIsXG4gICAgICAgICAgICB0YXJnZXRXb3JsZDogbm9ybWFsaXplZFRhcmdldFdvcmxkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChhbGlhcyA9PT0gbm9ybWFsaXplZFRhcmdldFdvcmxkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBwYXRoOiBub3JtYWxpemVkVGFyZ2V0V29ybGQsIGV4dGVybmFsOiB0cnVlIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IHBhdGg6IGFsaWFzIH07XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=world-target.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"world-target.test.d.ts","sourceRoot":"","sources":["../src/world-target.test.ts"],"names":[],"mappings":""}
@@ -1,106 +0,0 @@
1
- import { mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync, } from 'node:fs';
2
- import { tmpdir } from 'node:os';
3
- import { join } from 'node:path';
4
- import { describe, expect, it } from 'vitest';
5
- import { ensureWorkflowTargetWorldEnv, getWorldImport, isWorkflowTargetWorldPath, normalizeWorkflowTargetWorldImport, resolveWorkflowCoreRuntimeAlias, resolveWorkflowTargetWorldAlias, WORKFLOW_CORE_RUNTIME_MODULE, WORKFLOW_WORLD_TARGET_MODULE, } from './world-target.js';
6
- describe('workflow world target', () => {
7
- it('normalizes built-in aliases to package specifiers', () => {
8
- expect(normalizeWorkflowTargetWorldImport('local')).toBe('@workflow/world-local');
9
- expect(normalizeWorkflowTargetWorldImport('vercel')).toBe('@workflow/world-vercel');
10
- expect(normalizeWorkflowTargetWorldImport('@workflow/world-postgres')).toBe('@workflow/world-postgres');
11
- });
12
- it('defaults to local outside Vercel', () => {
13
- expect(getWorldImport({})).toBe('@workflow/world-local');
14
- });
15
- it('defaults to Vercel when deployed on Vercel', () => {
16
- expect(getWorldImport({
17
- VERCEL_DEPLOYMENT_ID: 'dpl_123',
18
- })).toBe('@workflow/world-vercel');
19
- });
20
- it('writes the normalized target back to the env object', () => {
21
- const env = { WORKFLOW_TARGET_WORLD: 'local' };
22
- expect(ensureWorkflowTargetWorldEnv(env)).toBe('@workflow/world-local');
23
- expect(env.WORKFLOW_TARGET_WORLD).toBe('@workflow/world-local');
24
- });
25
- it('resolves package aliases to concrete module paths', () => {
26
- const testDir = mkdtempSync(join(tmpdir(), 'workflow-world-target-'));
27
- const packageDir = join(testDir, 'node_modules/@workflow/world-custom');
28
- mkdirSync(packageDir, { recursive: true });
29
- writeFileSync(join(packageDir, 'package.json'), JSON.stringify({
30
- name: '@workflow/world-custom',
31
- type: 'module',
32
- exports: './index.js',
33
- }));
34
- writeFileSync(join(packageDir, 'index.js'), 'export function createWorld() {}');
35
- const alias = resolveWorkflowTargetWorldAlias({
36
- workingDir: testDir,
37
- targetWorld: '@workflow/world-custom',
38
- });
39
- try {
40
- expect(alias.replace(/\\/g, '/')).toMatch(/node_modules\/@workflow\/world-custom\/index\.js$/);
41
- }
42
- finally {
43
- rmSync(testDir, { recursive: true, force: true });
44
- }
45
- });
46
- it('resolves relative module files from the working directory', () => {
47
- const testDir = mkdtempSync(join(tmpdir(), 'workflow-world-target-'));
48
- const worldFile = join(testDir, 'my-world.ts');
49
- writeFileSync(worldFile, 'export function createWorld() {}');
50
- const alias = resolveWorkflowTargetWorldAlias({
51
- workingDir: testDir,
52
- targetWorld: './my-world.ts',
53
- });
54
- try {
55
- expect(alias).toBe(realpathSync(worldFile));
56
- }
57
- finally {
58
- rmSync(testDir, { recursive: true, force: true });
59
- }
60
- });
61
- it('detects path-like target worlds', () => {
62
- expect(isWorkflowTargetWorldPath('./my-world.ts')).toBe(true);
63
- expect(isWorkflowTargetWorldPath('../my-world.ts')).toBe(true);
64
- expect(isWorkflowTargetWorldPath('/tmp/my-world.ts')).toBe(true);
65
- expect(isWorkflowTargetWorldPath('C:\\repo\\my-world.ts')).toBe(true);
66
- expect(isWorkflowTargetWorldPath('@workflow/world-postgres')).toBe(false);
67
- });
68
- it('keeps unresolved custom aliases externalizable', () => {
69
- expect(resolveWorkflowTargetWorldAlias({
70
- workingDir: process.cwd(),
71
- targetWorld: '@workflow/world-custom',
72
- })).toBe('@workflow/world-custom');
73
- });
74
- it('resolves built-in worlds from the builder package when the app omits them', () => {
75
- const testDir = mkdtempSync(join(tmpdir(), 'workflow-world-target-'));
76
- try {
77
- const alias = resolveWorkflowTargetWorldAlias({
78
- workingDir: testDir,
79
- targetWorld: '@workflow/world-local',
80
- });
81
- expect(alias.replace(/\\/g, '/')).toMatch(/packages\/world-local\/dist\/index\.js$/);
82
- }
83
- finally {
84
- rmSync(testDir, { recursive: true, force: true });
85
- }
86
- });
87
- it('uses the core target module as the alias key', () => {
88
- expect(WORKFLOW_WORLD_TARGET_MODULE).toBe('@workflow/core/runtime/world-target');
89
- });
90
- it('resolves the core runtime module from the builder package when the app omits it', () => {
91
- const testDir = mkdtempSync(join(tmpdir(), 'workflow-world-target-'));
92
- try {
93
- const alias = resolveWorkflowCoreRuntimeAlias({
94
- workingDir: testDir,
95
- });
96
- expect(alias.replace(/\\/g, '/')).toMatch(/packages\/core\/dist\/runtime\.js$/);
97
- }
98
- finally {
99
- rmSync(testDir, { recursive: true, force: true });
100
- }
101
- });
102
- it('uses the core runtime module as the runtime alias key', () => {
103
- expect(WORKFLOW_CORE_RUNTIME_MODULE).toBe('@workflow/core/runtime');
104
- });
105
- });
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ybGQtdGFyZ2V0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd29ybGQtdGFyZ2V0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixhQUFhLEdBQ2QsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLGNBQWMsRUFDZCx5QkFBeUIsRUFDekIsa0NBQWtDLEVBQ2xDLCtCQUErQixFQUMvQiwrQkFBK0IsRUFDL0IsNEJBQTRCLEVBQzVCLDRCQUE0QixHQUM3QixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7SUFDckMsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtRQUMzRCxNQUFNLENBQUMsa0NBQWtDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3RELHVCQUF1QixDQUN4QixDQUFDO1FBQ0YsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN2RCx3QkFBd0IsQ0FDekIsQ0FBQztRQUNGLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN6RSwwQkFBMEIsQ0FDM0IsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsRUFBRTtRQUMxQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFD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QyxDQUFDO1FBQ0osQ0FBQztnQkFBUyxDQUFDO1lBQ1QsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEdBQUcsRUFBRTtRQUN0RCxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxJQUFJLENBQ3ZDLHFDQUFxQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsaUZBQWlGLEVBQUUsR0FBRyxFQUFFO1FBQ3pGLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1FBRXRFLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLCtCQUErQixDQUFDO2dCQUM1QyxVQUFVLEVBQUUsT0FBTzthQUNwQixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3ZDLG9DQUFvQyxDQUNyQyxDQUFDO1FBQ0osQ0FBQztnQkFBUyxDQUFDO1lBQ1QsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsRUFBRTtRQUMvRCxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgbWtkaXJTeW5jLFxuICBta2R0ZW1wU3luYyxcbiAgcmVhbHBhdGhTeW5jLFxuICBybVN5bmMsXG4gIHdyaXRlRmlsZVN5bmMsXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSAndml0ZXN0JztcbmltcG9ydCB7XG4gIGVuc3VyZVdvcmtmbG93VGFyZ2V0V29ybGRFbnYsXG4gIGdldFdvcmxkSW1wb3J0LFxuICBpc1dvcmtmbG93VGFyZ2V0V29ybGRQYXRoLFxuICBub3JtYWxpemVXb3JrZmxvd1RhcmdldFdvcmxkSW1wb3J0LFxuICByZXNvbHZlV29ya2Zsb3dDb3JlUnVudGltZUFsaWFzLFxuICByZXNvbHZlV29ya2Zsb3dUYXJnZXRXb3JsZEFsaWFzLFxuICBXT1JLRkxPV19DT1JFX1JVTlRJTUVfTU9EVUxFLFxuICBXT1JLRkxPV19XT1JMRF9UQVJHRVRfTU9EVUxFLFxufSBmcm9tICcuL3dvcmxkLXRhcmdldC5qcyc7XG5cbmRlc2NyaWJlKCd3b3JrZmxvdyB3b3JsZCB0YXJnZXQnLCAoKSA9PiB7XG4gIGl0KCdub3JtYWxpemVzIGJ1aWx0LWluIGFsaWFzZXMgdG8gcGFja2FnZSBzcGVjaWZpZXJzJywgKCkgPT4ge1xuICAgIGV4cGVjdChub3JtYWxpemVXb3JrZmxvd1RhcmdldFdvcmxkSW1wb3J0KCdsb2NhbCcpKS50b0JlKFxuICAgICAgJ0B3b3JrZmxvdy93b3JsZC1sb2NhbCdcbiAgICApO1xuICAgIGV4cGVjdChub3JtYWxpemVXb3JrZmxvd1RhcmdldFdvcmxkSW1wb3J0KCd2ZXJjZWwnKSkudG9CZShcbiAgICAgICdAd29ya2Zsb3cvd29ybGQtdmVyY2VsJ1xuICAgICk7XG4gICAgZXhwZWN0KG5vcm1hbGl6ZVdvcmtmbG93VGFyZ2V0V29ybGRJbXBvcnQoJ0B3b3JrZmxvdy93b3JsZC1wb3N0Z3JlcycpKS50b0JlKFxuICAgICAgJ0B3b3JrZmxvdy93b3JsZC1wb3N0Z3JlcydcbiAgICApO1xuICB9KTtcblxuICBpdCgnZGVmYXVsdHMgdG8gbG9jYWwgb3V0c2lkZSBWZXJjZWwnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGdldFdvcmxkSW1wb3J0KHt9KSkudG9CZSgnQHdvcmtmbG93L3dvcmxkLWxvY2FsJyk7XG4gIH0pO1xuXG4gIGl0KCdkZWZhdWx0cyB0byBWZXJjZWwgd2hlbiBkZXBsb3llZCBvbiBWZXJjZWwnLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgZ2V0V29ybGRJbXBvcnQoe1xuICAgICAgICBWRVJDRUxfREVQTE9ZTUVOVF9JRDogJ2RwbF8xMjMnLFxuICAgICAgfSlcbiAgICApLnRvQmUoJ0B3b3JrZmxvdy93b3JsZC12ZXJjZWwnKTtcbiAgfSk7XG5cbiAgaXQoJ3dyaXRlcyB0aGUgbm9ybWFsaXplZCB0YXJnZXQgYmFjayB0byB0aGUgZW52IG9iamVjdCcsICgpID0+IHtcbiAgICBjb25zdCBlbnYgPSB7IFdPUktGTE9XX1RBUkdFVF9XT1JMRDogJ2xvY2FsJyB9O1xuXG4gICAgZXhwZWN0KGVuc3VyZVdvcmtmbG93VGFyZ2V0V29ybGRFbnYoZW52KSkudG9CZSgnQHdvcmtmbG93L3dvcmxkLWxvY2FsJyk7XG4gICAgZXhwZWN0KGVudi5XT1JLRkxPV19UQVJHRVRfV09STEQpLnRvQmUoJ0B3b3JrZmxvdy93b3JsZC1sb2NhbCcpO1xuICB9KTtcblxuICBpdCgncmVzb2x2ZXMgcGFja2FnZSBhbGlhc2VzIHRvIGNvbmNyZXRlIG1vZHVsZSBwYXRocycsICgpID0+IHtcbiAgICBjb25zdCB0ZXN0RGlyID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgJ3dvcmtmbG93LXdvcmxkLXRhcmdldC0nKSk7XG4gICAgY29uc3QgcGFja2FnZURpciA9IGpvaW4odGVzdERpciwgJ25vZGVfbW9kdWxlcy9Ad29ya2Zsb3cvd29ybGQtY3VzdG9tJyk7XG4gICAgbWtkaXJTeW5jKHBhY2thZ2VEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIHdyaXRlRmlsZVN5bmMoXG4gICAgICBqb2luKHBhY2thZ2VEaXIsICdwYWNrYWdlLmpzb24nKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbmFtZTogJ0B3b3JrZmxvdy93b3JsZC1jdXN0b20nLFxuICAgICAgICB0eXBlOiAnbW9kdWxlJyxcbiAgICAgICAgZXhwb3J0czogJy4vaW5kZXguanMnLFxuICAgICAgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZVN5bmMoXG4gICAgICBqb2luKHBhY2thZ2VEaXIsICdpbmRleC5qcycpLFxuICAgICAgJ2V4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3JsZCgpIHt9J1xuICAgICk7XG5cbiAgICBjb25zdCBhbGlhcyA9IHJlc29sdmVXb3JrZmxvd1RhcmdldFdvcmxkQWxpYXMoe1xuICAgICAgd29ya2luZ0RpcjogdGVzdERpcixcbiAgICAgIHRhcmdldFdvcmxkOiAnQHdvcmtmbG93L3dvcmxkLWN1c3RvbScsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgZXhwZWN0KGFsaWFzLnJlcGxhY2UoL1xcXFwvZywgJy8nKSkudG9NYXRjaChcbiAgICAgICAgL25vZGVfbW9kdWxlc1xcL0B3b3JrZmxvd1xcL3dvcmxkLWN1c3RvbVxcL2luZGV4XFwuanMkL1xuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcm1TeW5jKHRlc3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdyZXNvbHZlcyByZWxhdGl2ZSBtb2R1bGUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyBkaXJlY3RvcnknLCAoKSA9PiB7XG4gICAgY29uc3QgdGVzdERpciA9IG1rZHRlbXBTeW5jKGpvaW4odG1wZGlyKCksICd3b3JrZmxvdy13b3JsZC10YXJnZXQtJykpO1xuICAgIGNvbnN0IHdvcmxkRmlsZSA9IGpvaW4odGVzdERpciwgJ215LXdvcmxkLnRzJyk7XG4gICAgd3JpdGVGaWxlU3luYyh3b3JsZEZpbGUsICdleHBvcnQgZnVuY3Rpb24gY3JlYXRlV29ybGQoKSB7fScpO1xuXG4gICAgY29uc3QgYWxpYXMgPSByZXNvbHZlV29ya2Zsb3dUYXJnZXRXb3JsZEFsaWFzKHtcbiAgICAgIHdvcmtpbmdEaXI6IHRlc3REaXIsXG4gICAgICB0YXJnZXRXb3JsZDogJy4vbXktd29ybGQudHMnLFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGV4cGVjdChhbGlhcykudG9CZShyZWFscGF0aFN5bmMod29ybGRGaWxlKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJtU3luYyh0ZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnZGV0ZWN0cyBwYXRoLWxpa2UgdGFyZ2V0IHdvcmxkcycsICgpID0+IHtcbiAgICBleHBlY3QoaXNXb3JrZmxvd1RhcmdldFdvcmxkUGF0aCgnLi9teS13b3JsZC50cycpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChpc1dvcmtmbG93VGFyZ2V0V29ybGRQYXRoKCcuLi9teS13b3JsZC50cycpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChpc1dvcmtmbG93VGFyZ2V0V29ybGRQYXRoKCcvdG1wL215LXdvcmxkLnRzJykpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KGlzV29ya2Zsb3dUYXJnZXRXb3JsZFBhdGgoJ0M6XFxcXHJlcG9cXFxcbXktd29ybGQudHMnKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoaXNXb3JrZmxvd1RhcmdldFdvcmxkUGF0aCgnQHdvcmtmbG93L3dvcmxkLXBvc3RncmVzJykpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdCgna2VlcHMgdW5yZXNvbHZlZCBjdXN0b20gYWxpYXNlcyBleHRlcm5hbGl6YWJsZScsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICByZXNvbHZlV29ya2Zsb3dUYXJnZXRXb3JsZEFsaWFzKHtcbiAgICAgICAgd29ya2luZ0RpcjogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgdGFyZ2V0V29ybGQ6ICdAd29ya2Zsb3cvd29ybGQtY3VzdG9tJyxcbiAgICAgIH0pXG4gICAgKS50b0JlKCdAd29ya2Zsb3cvd29ybGQtY3VzdG9tJyk7XG4gIH0pO1xuXG4gIGl0KCdyZXNvbHZlcyBidWlsdC1pbiB3b3JsZHMgZnJvbSB0aGUgYnVpbGRlciBwYWNrYWdlIHdoZW4gdGhlIGFwcCBvbWl0cyB0aGVtJywgKCkgPT4ge1xuICAgIGNvbnN0IHRlc3REaXIgPSBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCAnd29ya2Zsb3ctd29ybGQtdGFyZ2V0LScpKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBhbGlhcyA9IHJlc29sdmVXb3JrZmxvd1RhcmdldFdvcmxkQWxpYXMoe1xuICAgICAgICB3b3JraW5nRGlyOiB0ZXN0RGlyLFxuICAgICAgICB0YXJnZXRXb3JsZDogJ0B3b3JrZmxvdy93b3JsZC1sb2NhbCcsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFsaWFzLnJlcGxhY2UoL1xcXFwvZywgJy8nKSkudG9NYXRjaChcbiAgICAgICAgL3BhY2thZ2VzXFwvd29ybGQtbG9jYWxcXC9kaXN0XFwvaW5kZXhcXC5qcyQvXG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBybVN5bmModGVzdERpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3VzZXMgdGhlIGNvcmUgdGFyZ2V0IG1vZHVsZSBhcyB0aGUgYWxpYXMga2V5JywgKCkgPT4ge1xuICAgIGV4cGVjdChXT1JLRkxPV19XT1JMRF9UQVJHRVRfTU9EVUxFKS50b0JlKFxuICAgICAgJ0B3b3JrZmxvdy9jb3JlL3J1bnRpbWUvd29ybGQtdGFyZ2V0J1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdyZXNvbHZlcyB0aGUgY29yZSBydW50aW1lIG1vZHVsZSBmcm9tIHRoZSBidWlsZGVyIHBhY2thZ2Ugd2hlbiB0aGUgYXBwIG9taXRzIGl0JywgKCkgPT4ge1xuICAgIGNvbnN0IHRlc3REaXIgPSBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCAnd29ya2Zsb3ctd29ybGQtdGFyZ2V0LScpKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBhbGlhcyA9IHJlc29sdmVXb3JrZmxvd0NvcmVSdW50aW1lQWxpYXMoe1xuICAgICAgICB3b3JraW5nRGlyOiB0ZXN0RGlyLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhbGlhcy5yZXBsYWNlKC9cXFxcL2csICcvJykpLnRvTWF0Y2goXG4gICAgICAgIC9wYWNrYWdlc1xcL2NvcmVcXC9kaXN0XFwvcnVudGltZVxcLmpzJC9cbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJtU3luYyh0ZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcblxuICBpdCgndXNlcyB0aGUgY29yZSBydW50aW1lIG1vZHVsZSBhcyB0aGUgcnVudGltZSBhbGlhcyBrZXknLCAoKSA9PiB7XG4gICAgZXhwZWN0KFdPUktGTE9XX0NPUkVfUlVOVElNRV9NT0RVTEUpLnRvQmUoJ0B3b3JrZmxvdy9jb3JlL3J1bnRpbWUnKTtcbiAgfSk7XG59KTtcbiJdfQ==