@workflow/world-testing 5.0.0-beta.6 → 5.0.0-beta.8

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.
@@ -19,4 +19,4 @@ export function addition(world) {
19
19
  expect(output).toEqual(3);
20
20
  });
21
21
  }
22
- //# sourceMappingURL=addition.mjs.map
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkaXRpb24ubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkZGl0aW9uLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFhO0lBQ3BDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RCxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FDaEMsdUJBQXVCLEVBQ3ZCLFVBQVUsRUFDVixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDUCxDQUFDO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUMxQixLQUFLLElBQUksRUFBRTtZQUNULE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUMsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQ0Q7WUFDRSxRQUFRLEVBQUUsR0FBRztZQUNiLE9BQU8sRUFBRSxNQUFNO1NBQ2hCLENBQ0YsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sMEJBQTBCLENBQzdDLEdBQUcsQ0FBQyxNQUFPLEVBQ1gsR0FBRyxDQUFDLEtBQUssRUFDVCxTQUFTLENBQ1YsQ0FBQztRQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0LCB0ZXN0LCB2aSB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgeyBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZSB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHsgY3JlYXRlRmV0Y2hlciwgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuL3V0aWwubWpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZGl0aW9uKHdvcmxkOiBzdHJpbmcpIHtcbiAgdGVzdCgncnVucyBhbiBhZGRpdGlvbicsIHsgdGltZW91dDogMzBfMDAwIH0sIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcih7IHdvcmxkIH0pLnRoZW4oY3JlYXRlRmV0Y2hlcik7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VydmVyLmludm9rZShcbiAgICAgICd3b3JrZmxvd3MvYWRkaXRpb24udHMnLFxuICAgICAgJ2FkZGl0aW9uJyxcbiAgICAgIFsxLCAyXVxuICAgICk7XG4gICAgZXhwZWN0KHJlc3VsdC5ydW5JZCkudG9NYXRjaCgvXndydW5fLisvKTtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBydW4gPSBhd2FpdCBzZXJ2ZXIuZ2V0UnVuKHJlc3VsdC5ydW5JZCk7XG4gICAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgICAgZXhwZWN0KHJ1bi5vdXRwdXQpLnRvQmVJbnN0YW5jZU9mKFVpbnQ4QXJyYXkpO1xuICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaW50ZXJ2YWw6IDIwMCxcbiAgICAgICAgdGltZW91dDogMjVfMDAwLFxuICAgICAgfVxuICAgICk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUoXG4gICAgICBydW4ub3V0cHV0ISxcbiAgICAgIHJ1bi5ydW5JZCxcbiAgICAgIHVuZGVmaW5lZFxuICAgICk7XG4gICAgZXhwZWN0KG91dHB1dCkudG9FcXVhbCgzKTtcbiAgfSk7XG59XG4iXX0=
@@ -28,4 +28,4 @@ export function errors(world) {
28
28
  expect(output.retryableResult.duration).toBeGreaterThanOrEqual(2000);
29
29
  });
30
30
  }
31
- //# sourceMappingURL=errors.mjs.map
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV4RCxNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQWE7SUFDbEMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2pFLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUNoQyxrQ0FBa0MsRUFDbEMsZ0NBQWdDLEVBQ2hDLEVBQUUsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUMxQixLQUFLLElBQUksRUFBRTtZQUNULE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBc0I7Z0JBQzdDLE1BQU0sRUFBRSxXQUFXO2FBQ3BCLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUNEO1lBQ0UsUUFBUSxFQUFFLEdBQUc7WUFDYixPQUFPLEVBQUUsTUFBTTtTQUNoQixDQUNGLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sMEJBQTBCLENBQzlDLEdBQUcsQ0FBQyxNQUFPLEVBQ1gsR0FBRyxDQUFDLEtBQUssRUFDVCxTQUFTLENBQ1YsQ0FBUSxDQUFDO1FBQ1YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNyQixhQUFhLEVBQUUsSUFBSTtZQUNuQixlQUFlLEVBQUU7Z0JBQ2YsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO2dCQUM1QixhQUFhLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7YUFDaEM7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleHBlY3QsIHRlc3QsIHZpIH0gZnJvbSAndml0ZXN0JztcbmltcG9ydCB7IGh5ZHJhdGVXb3JrZmxvd1JldHVyblZhbHVlIH0gZnJvbSAnQHdvcmtmbG93L2NvcmUvc2VyaWFsaXphdGlvbic7XG5pbXBvcnQgeyBjcmVhdGVGZXRjaGVyLCBzdGFydFNlcnZlciB9IGZyb20gJy4vdXRpbC5tanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JzKHdvcmxkOiBzdHJpbmcpIHtcbiAgdGVzdCgncmV0cmlhYmxlIGFuZCBmYXRhbCBlcnJvcnMnLCB7IHRpbWVvdXQ6IDU5XzAwMCB9LCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoeyB3b3JsZCB9KS50aGVuKGNyZWF0ZUZldGNoZXIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlcnZlci5pbnZva2UoXG4gICAgICAnd29ya2Zsb3dzL3JldHJpYWJsZS1hbmQtZmF0YWwudHMnLFxuICAgICAgJ3JldHJ5YWJsZUFuZEZhdGFsRXJyb3JXb3JrZmxvdycsXG4gICAgICBbXVxuICAgICk7XG4gICAgZXhwZWN0KHJlc3VsdC5ydW5JZCkudG9NYXRjaCgvXndydW5fLisvKTtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBydW4gPSBhd2FpdCBzZXJ2ZXIuZ2V0UnVuKHJlc3VsdC5ydW5JZCk7XG4gICAgICAgIGV4cGVjdChydW4pLnRvTWF0Y2hPYmplY3Q8UGFydGlhbDx0eXBlb2YgcnVuPj4oe1xuICAgICAgICAgIHN0YXR1czogJ2NvbXBsZXRlZCcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaW50ZXJ2YWw6IDIwMCxcbiAgICAgICAgdGltZW91dDogNTBfMDAwLFxuICAgICAgfVxuICAgICk7XG4gICAgY29uc3Qgb3V0cHV0ID0gKGF3YWl0IGh5ZHJhdGVXb3JrZmxvd1JldHVyblZhbHVlKFxuICAgICAgcnVuLm91dHB1dCEsXG4gICAgICBydW4ucnVuSWQsXG4gICAgICB1bmRlZmluZWRcbiAgICApKSBhcyBhbnk7XG4gICAgZXhwZWN0KG91dHB1dCkudG9FcXVhbCh7XG4gICAgICBnb3RGYXRhbEVycm9yOiB0cnVlLFxuICAgICAgcmV0cnlhYmxlUmVzdWx0OiB7XG4gICAgICAgIGF0dGVtcHQ6IDIsXG4gICAgICAgIGR1cmF0aW9uOiBleHBlY3QuYW55KE51bWJlciksXG4gICAgICAgIHN0ZXBTdGFydGVkQXQ6IGV4cGVjdC5hbnkoRGF0ZSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChvdXRwdXQucmV0cnlhYmxlUmVzdWx0LmR1cmF0aW9uKS50b0JlR3JlYXRlclRoYW5PckVxdWFsKDIwMDApO1xuICB9KTtcbn1cbiJdfQ==
@@ -71,4 +71,4 @@ export function hooks(world) {
71
71
  });
72
72
  });
73
73
  }
74
- //# sourceMappingURL=hooks.mjs.map
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3MubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFMUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXhELE1BQU0sVUFBVSxLQUFLLENBQUMsS0FBYTtJQUNqQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsS0FBSyxFQUFFLENBQUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUNoQyxvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUNwQixDQUFDO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBUSxDQUFDO1FBQ2xELE1BQU0saUJBQWlCLEdBQUcsRUFBZSxDQUFDO1FBRTFDLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDVixJQUFJLEtBQUssRUFBRSxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxHQUFHLEVBQUUsS0FBSyxLQUFLLGFBQWEsRUFBRSxDQUFDO29CQUNqQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3RCLFNBQVM7Z0JBQ1gsQ0FBQztnQkFFRCxJQUFJLEdBQUcsRUFBRSxLQUFLLEtBQUssYUFBYSxFQUFFLENBQUM7b0JBQ2pDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3BDLFNBQVM7Z0JBQ1gsQ0FBQztnQkFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDZCxtQ0FBbUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFFMUIsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNWLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBYyxLQUFLLEVBQUU7Z0JBQzFDLElBQUksRUFBRSxlQUFlO2FBQ3RCLENBQUMsQ0FBQztZQUNILE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBYyxLQUFLLEVBQUU7Z0JBQzFDLElBQUksRUFBRSxnQkFBZ0I7YUFDdkIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFjLEtBQUssRUFBRTtnQkFDMUMsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLElBQUksRUFBRSxJQUFJO2FBQ1gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVMLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FDMUIsS0FBSyxJQUFJLEVBQUU7WUFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQXNCO2dCQUM3QyxNQUFNLEVBQUUsV0FBVzthQUNwQixDQUFDLENBQUM7WUFDSCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFDRDtZQUNFLFFBQVEsRUFBRSxHQUFHO1lBQ2IsT0FBTyxFQUFFLE1BQU07U0FDaEIsQ0FDRixDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsTUFBTSwwQkFBMEIsQ0FDN0MsR0FBRyxDQUFDLE1BQU8sRUFDWCxHQUFHLENBQUMsS0FBSyxFQUNULFNBQVMsQ0FDVixDQUFDO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNyQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRTtpQkFDekI7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFO2lCQUN6QjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsZUFBZTtvQkFDckIsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFO29CQUN4QixJQUFJLEVBQUUsSUFBSTtpQkFDWDthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0LCB0ZXN0LCB2aSB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgeyBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZSB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHR5cGUgeyBIb29rIH0gZnJvbSAnLi4vd29ya2Zsb3dzL2hvb2tzLnRzJztcbmltcG9ydCB7IGpzb25saW5lcyB9IGZyb20gJy4vanNvbmxpbmVzLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVGZXRjaGVyLCBzdGFydFNlcnZlciB9IGZyb20gJy4vdXRpbC5tanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaG9va3Mod29ybGQ6IHN0cmluZykge1xuICB0ZXN0KCdob29rcycsIHsgdGltZW91dDogNjBfMDAwIH0sIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcih7IHdvcmxkIH0pLnRoZW4oY3JlYXRlRmV0Y2hlcik7XG4gICAgY29uc3QgdG9rZW4gPSBEYXRlLm5vdygpLnRvU3RyaW5nKDM2KTtcbiAgICBjb25zdCBjdXN0b21EYXRhID0gYG15LWN1c3RvbS1kYXRhLSR7dG9rZW59YDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZXJ2ZXIuaW52b2tlKFxuICAgICAgJ3dvcmtmbG93cy9ob29rcy50cycsXG4gICAgICAnY29sbGVjdFdpdGhIb29rJyxcbiAgICAgIFt0b2tlbiwgY3VzdG9tRGF0YV1cbiAgICApO1xuICAgIGV4cGVjdChyZXN1bHQucnVuSWQpLnRvTWF0Y2goL153cnVuXy4rLyk7XG4gICAgY29uc3QgcmVhZGFibGUgPSBhd2FpdCBzZXJ2ZXIuZ2V0UmVhZGFibGUocmVzdWx0LnJ1bklkKTtcbiAgICBjb25zdCBldmVudHMgPSBqc29ubGluZXMocmVhZGFibGUpO1xuICAgIGNvbnN0IGhvb2tDcmVhdGVkID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzPHZvaWQ+KCk7XG4gICAgY29uc3QgaG9va1Jlc3VtZWRFdmVudHMgPSBbXSBhcyB1bmtub3duW107XG5cbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIGF3YWl0IChjb25zdCBvYmogb2YgZXZlbnRzKSB7XG4gICAgICAgIGlmIChvYmo/LmV2ZW50ID09PSAnaG9va0NyZWF0ZWQnKSB7XG4gICAgICAgICAgaG9va0NyZWF0ZWQucmVzb2x2ZSgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9iaj8uZXZlbnQgPT09ICdob29rUmVzdW1lZCcpIHtcbiAgICAgICAgICBob29rUmVzdW1lZEV2ZW50cy5wdXNoKG9iai5wYXlsb2FkKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCd1bmhhbmRsZWQgZXZlbnQnLCBvYmopO1xuICAgICAgfVxuICAgIH0pKCkuY2F0Y2goKCkgPT4ge1xuICAgICAgLy8gaWdub3JlIGVycm9ycyBmb3IgcmVhZGluZyBzdHJlYW1cbiAgICB9KTtcblxuICAgIGF3YWl0IGhvb2tDcmVhdGVkLnByb21pc2U7XG5cbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgc2VydmVyLnJlc3VtZUhvb2s8dHlwZW9mIEhvb2s+KHRva2VuLCB7XG4gICAgICAgIGRhdGE6ICdmaXJzdCBwYXlsb2FkJyxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgc2VydmVyLnJlc3VtZUhvb2s8dHlwZW9mIEhvb2s+KHRva2VuLCB7XG4gICAgICAgIGRhdGE6ICdzZWNvbmQgcGF5bG9hZCcsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHNlcnZlci5yZXN1bWVIb29rPHR5cGVvZiBIb29rPih0b2tlbiwge1xuICAgICAgICBkYXRhOiAndGhpcmQgcGF5bG9hZCcsXG4gICAgICAgIGRvbmU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KSgpO1xuXG4gICAgY29uc3QgcnVuID0gYXdhaXQgdmkud2FpdEZvcihcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgc2VydmVyLmdldFJ1bihyZXN1bHQucnVuSWQpO1xuICAgICAgICBleHBlY3QocnVuKS50b01hdGNoT2JqZWN0PFBhcnRpYWw8dHlwZW9mIHJ1bj4+KHtcbiAgICAgICAgICBzdGF0dXM6ICdjb21wbGV0ZWQnLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJ1bjtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGludGVydmFsOiAyMDAsXG4gICAgICAgIHRpbWVvdXQ6IDU5XzAwMCxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUoXG4gICAgICBydW4ub3V0cHV0ISxcbiAgICAgIHJ1bi5ydW5JZCxcbiAgICAgIHVuZGVmaW5lZFxuICAgICk7XG4gICAgZXhwZWN0KG91dHB1dCkudG9FcXVhbCh7XG4gICAgICBjb2xsZWN0ZWQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRhdGE6ICdmaXJzdCBwYXlsb2FkJyxcbiAgICAgICAgICBtZXRhZGF0YTogeyBjdXN0b21EYXRhIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhOiAnc2Vjb25kIHBheWxvYWQnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IGN1c3RvbURhdGEgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGRhdGE6ICd0aGlyZCBwYXlsb2FkJyxcbiAgICAgICAgICBtZXRhZGF0YTogeyBjdXN0b21EYXRhIH0sXG4gICAgICAgICAgZG9uZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH0pO1xufVxuIl19
@@ -22,4 +22,4 @@ export function idempotency(world) {
22
22
  });
23
23
  });
24
24
  }
25
- //# sourceMappingURL=idempotency.mjs.map
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbXBvdGVuY3kubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lkZW1wb3RlbmN5Lm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFhO0lBQ3ZDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUMxQixLQUFLLElBQUksRUFBRTtZQUNULE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBc0I7Z0JBQzdDLE1BQU0sRUFBRSxXQUFXO2FBQ3BCLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUNEO1lBQ0UsUUFBUSxFQUFFLEdBQUc7WUFDYixPQUFPLEVBQUUsTUFBTTtTQUNoQixDQUNGLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLDBCQUEwQixDQUM3QyxHQUFHLENBQUMsTUFBTyxFQUNYLEdBQUcsQ0FBQyxLQUFLLEVBQ1QsU0FBUyxDQUNWLENBQUM7UUFFRixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0LCB0ZXN0LCB2aSB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgeyBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZSB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHsgY3JlYXRlRmV0Y2hlciwgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuL3V0aWwubWpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW1wb3RlbmN5KHdvcmxkOiBzdHJpbmcpIHtcbiAgdGVzdCgnaWRlbXBvdGVuY3knLCB7IHRpbWVvdXQ6IDYwXzAwMCB9LCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoeyB3b3JsZCB9KS50aGVuKGNyZWF0ZUZldGNoZXIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlcnZlci5pbnZva2UoJ3dvcmtmbG93cy9ub29wLnRzJywgJ2Jyb2tlbldmJywgWzEsIDJdKTtcbiAgICBleHBlY3QocmVzdWx0LnJ1bklkKS50b01hdGNoKC9ed3J1bl8uKy8pO1xuICAgIGNvbnN0IHJ1biA9IGF3YWl0IHZpLndhaXRGb3IoXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1biA9IGF3YWl0IHNlcnZlci5nZXRSdW4ocmVzdWx0LnJ1bklkKTtcbiAgICAgICAgZXhwZWN0KHJ1bikudG9NYXRjaE9iamVjdDxQYXJ0aWFsPHR5cGVvZiBydW4+Pih7XG4gICAgICAgICAgc3RhdHVzOiAnY29tcGxldGVkJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBydW47XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpbnRlcnZhbDogMjAwLFxuICAgICAgICB0aW1lb3V0OiA1OV8wMDAsXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGh5ZHJhdGVXb3JrZmxvd1JldHVyblZhbHVlKFxuICAgICAgcnVuLm91dHB1dCEsXG4gICAgICBydW4ucnVuSWQsXG4gICAgICB1bmRlZmluZWRcbiAgICApO1xuXG4gICAgZXhwZWN0KG91dHB1dCkudG9FcXVhbCh7XG4gICAgICBudW1iZXJzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyMCB9LCAoKSA9PiBleHBlY3QuYW55KE51bWJlcikpLFxuICAgIH0pO1xuICB9KTtcbn1cbiJdfQ==
@@ -12,4 +12,4 @@ export function createTestSuite(pkgName) {
12
12
  errors(pkgName);
13
13
  inlineExecution(pkgName);
14
14
  }
15
- //# sourceMappingURL=index.mjs.map
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luZGV4Lm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBZTtJQUM3QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNmLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEIsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZGRpdGlvbiB9IGZyb20gJy4vYWRkaXRpb24ubWpzJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJy4vZXJyb3JzLm1qcyc7XG5pbXBvcnQgeyBob29rcyB9IGZyb20gJy4vaG9va3MubWpzJztcbmltcG9ydCB7IGlkZW1wb3RlbmN5IH0gZnJvbSAnLi9pZGVtcG90ZW5jeS5tanMnO1xuaW1wb3J0IHsgaW5saW5lRXhlY3V0aW9uIH0gZnJvbSAnLi9pbmxpbmUtZXhlY3V0aW9uLm1qcyc7XG5pbXBvcnQgeyBudWxsQnl0ZSB9IGZyb20gJy4vbnVsbC1ieXRlLm1qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUZXN0U3VpdGUocGtnTmFtZTogc3RyaW5nKSB7XG4gIGFkZGl0aW9uKHBrZ05hbWUpO1xuICBpZGVtcG90ZW5jeShwa2dOYW1lKTtcbiAgaG9va3MocGtnTmFtZSk7XG4gIG51bGxCeXRlKHBrZ05hbWUpO1xuICBlcnJvcnMocGtnTmFtZSk7XG4gIGlubGluZUV4ZWN1dGlvbihwa2dOYW1lKTtcbn1cbiJdfQ==
@@ -205,4 +205,4 @@ function matchCount(logs, pattern, runId) {
205
205
  }
206
206
  return n;
207
207
  }
208
- //# sourceMappingURL=inline-batches-debug.mjs.map
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWJhdGNoZXMtZGVidWcubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lubGluZS1iYXRjaGVzLWRlYnVnLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQWE7SUFDOUMsSUFBSSxDQUNGLG1FQUFtRSxFQUNuRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDbkIsS0FBSyxJQUFJLEVBQUU7UUFDVCxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQztZQUMvQixLQUFLO1lBQ0wsR0FBRyxFQUFFO2dCQUNILEtBQUssRUFBRSxvQkFBb0I7YUFDNUI7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUNoQywrQkFBK0IsRUFDL0IsNEJBQTRCLEVBQzVCLEVBQUUsQ0FDSCxDQUFDO1FBRUYsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUMxQixLQUFLLElBQUksRUFBRTtZQUNULE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQ0QsRUFBRSxRQUFR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QUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsU0FBUztRQUN4QyxDQUFDO1FBQ0QsQ0FBQyxFQUFFLENBQUM7SUFDTixDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0LCB0ZXN0LCB2aSB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgeyBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZSB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHsgY3JlYXRlRmV0Y2hlciwgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuL3V0aWwubWpzJztcblxuLyoqXG4gKiBJbnN0cnVtZW50ZWQgdGVzdDogcnVucyBgdGhyZWVCYXRjaGVzT2ZGaXZlV29ya2Zsb3dgIHdpdGhcbiAqIERFQlVHPXdvcmtmbG93OnJ1bnRpbWU6KiBhbmQgcHJpbnRzIGEgc3VtbWFyeSBvZiBWMiBoYW5kbGVyIGJlaGF2aW9yOlxuICogICAtIHRvdGFsIGZsb3cgaW52b2NhdGlvbnNcbiAqICAgLSBwZXItaW52b2NhdGlvbiByZXBsYXkgaXRlcmF0aW9uc1xuICogICAtIGV2ZW50IGxvYWRzIChmdWxsIHZzIGluY3JlbWVudGFsKSBhbmQgc2l6ZXNcbiAqICAgLSByZWR1bmRhbnQvc2tpcHBlZCBzdGVwIGV4ZWN1dGlvbnNcbiAqICAgLSBjb25jdXJyZW50IFwiYWxsIHBhcmFsbGVsIHN0ZXBzIGRvbmVcIiByZXBsYXkgcmFjZXNcbiAqICAgLSB1bmNvbnN1bWVkLWV2ZW50IHNraXBzXG4gKlxuICogTm90IHBhcnQgb2YgdGhlIGRlZmF1bHQgc3VpdGU7IHJ1biB3aXRoOlxuICogICBwbnBtIHZpdGVzdCBydW4gcGFja2FnZXMvd29ybGQtdGVzdGluZy90ZXN0L2lubGluZS1iYXRjaGVzLWRlYnVnLnRlc3QudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlubGluZUJhdGNoZXNEZWJ1Zyh3b3JsZDogc3RyaW5nKSB7XG4gIHRlc3QoXG4gICAgJ3RocmVlIGJhdGNoZXMgb2YgZml2ZSBwYXJhbGxlbCBzdGVwcyDigJQgcmVwb3J0IFYyIGhhbmRsZXIgYmVoYXZpb3InLFxuICAgIHsgdGltZW91dDogNjBfMDAwIH0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoe1xuICAgICAgICB3b3JsZCxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgREVCVUc6ICd3b3JrZmxvdzpydW50aW1lOionLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVGZXRjaGVyKHNlcnZlcik7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5pbnZva2UoXG4gICAgICAgICd3b3JrZmxvd3MvaW5saW5lLWV4ZWN1dGlvbi50cycsXG4gICAgICAgICd0aHJlZUJhdGNoZXNPZkZpdmVXb3JrZmxvdycsXG4gICAgICAgIFtdXG4gICAgICApO1xuXG4gICAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgY2xpZW50LmdldFJ1bihyZXN1bHQucnVuSWQpO1xuICAgICAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgICB9LFxuICAgICAgICB7IGludGVydmFsOiAyMDAsIHRpbWVvdXQ6IDU5XzAwMCB9XG4gICAgICApO1xuXG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZShcbiAgICAgICAgcnVuLm91dHB1dCEsXG4gICAgICAgIHJ1bi5ydW5JZCxcbiAgICAgICAgdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgLy8gRXhwZWN0ZWQgb3V0cHV0OiAzIGJhdGNoZXMgw5cgWzExLCAyMSwgMzEsIDQxLCA1MV0gfCBbMTIsIDIyLCAuLi5dIHwgLi4uXG4gICAgICBleHBlY3Qob3V0cHV0KS50b0VxdWFsKFtcbiAgICAgICAgMTEsIDIxLCAzMSwgNDEsIDUxLCAxMiwgMjIsIDMyLCA0MiwgNTIsIDEzLCAyMywgMzMsIDQzLCA1MyxcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCBmbG93SW52b2NhdGlvbnMgPSBhd2FpdCBjbGllbnQuZ2V0Rmxvd0ludm9jYXRpb25Db3VudChyZXN1bHQucnVuSWQpO1xuXG4gICAgICAvLyBXYWl0IGEgc2hvcnQgbW9tZW50IHRvIGZsdXNoIGxhdGUgbG9nIGxpbmVzXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCA1MDApKTtcbiAgICAgIGNvbnN0IGxvZ3MgPSBzZXJ2ZXIuZ2V0T3V0cHV0KCk7XG5cbiAgICAgIC8vIC0tLSBQYXJzZSBsb2cgbGluZXMgLS0tXG5cbiAgICAgIC8vIDEpIFJlcGxheSBpdGVyYXRpb25zICsgdGhlIGBldmVudENvdW50YCBwYXNzZWQgaW50byBlYWNoIHJlcGxheS5cbiAgICAgIC8vIFRoZSBydW50aW1lIGxvZ3M6IFwiU3RhcnRpbmcgd29ya2Zsb3cgcmVwbGF5XCIgd2l0aCBgZXZlbnRDb3VudDogTmAuXG4gICAgICBjb25zdCByZXBsYXlFdmVudENvdW50czogbnVtYmVyW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsb2dzLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICBpZiAoIWxpbmUuaW5jbHVkZXMocmVzdWx0LnJ1bklkKSkgY29udGludWU7XG4gICAgICAgIGlmICghbGluZS5pbmNsdWRlcygnU3RhcnRpbmcgd29ya2Zsb3cgcmVwbGF5JykpIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gZXZlbnRDb3VudCBpcyBvZnRlbiBvbiB0aGUgbmV4dCBsaW5lIGluIGEgbXVsdGktbGluZSBvYmplY3QgbGl0ZXJhbFxuICAgICAgLy8gKGNvbnNvbGUuZGVidWcgcHJpbnRzIHRoZSBzZWNvbmQgYXJndW1lbnQgd2l0aCB1dGlsLmluc3BlY3QpLiBQdWxsIGFsbFxuICAgICAgLy8gZXZlbnRDb3VudCBvY2N1cnJlbmNlcyB0aGF0IGFyZSB3aXRoaW4gfjYgbGluZXMgb2YgYSByZXBsYXkgc3RhcnRcbiAgICAgIC8vIGxpbmUgcmVmZXJlbmNpbmcgdGhpcyBydW5JZC5cbiAgICAgIGNvbnN0IGxpbmVzID0gbG9ncy5zcGxpdCgnXFxuJyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghbGluZXNbaV0hLmluY2x1ZGVzKCdTdGFydGluZyB3b3JrZmxvdyByZXBsYXknKSkgY29udGludWU7XG4gICAgICAgIC8vIGZpbmQgdGhlIHJ1bklkIGluIHRoZSBzdXJyb3VuZGluZyA4IGxpbmVzXG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IGxpbmVzLnNsaWNlKGksIGkgKyA4KS5qb2luKCdcXG4nKTtcbiAgICAgICAgaWYgKCF3aW5kb3cuaW5jbHVkZXMocmVzdWx0LnJ1bklkKSkgY29udGludWU7XG4gICAgICAgIGNvbnN0IG0gPSB3aW5kb3cubWF0Y2goL2V2ZW50Q291bnQ6XFxzKihcXGQrKS8pO1xuICAgICAgICBpZiAobSkgcmVwbGF5RXZlbnRDb3VudHMucHVzaChOdW1iZXIucGFyc2VJbnQobVsxXSEsIDEwKSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXBsYXlTdGFydHMgPSByZXBsYXlFdmVudENvdW50cy5sZW5ndGg7XG5cbiAgICAgIC8vIDMpIFwiQWxsIHBhcmFsbGVsIHN0ZXBzIGRvbmUsIHJlcGxheWluZyBpbmxpbmVcIiAocGVyLXJ1bilcbiAgICAgIGNvbnN0IGFsbERvbmVJbmxpbmVSZXBsYXlzID0gbWF0Y2hDb3VudChcbiAgICAgICAgbG9ncyxcbiAgICAgICAgL0FsbCBwYXJhbGxlbCBzdGVwcyBkb25lLCByZXBsYXlpbmcgaW5saW5lL2csXG4gICAgICAgIHJlc3VsdC5ydW5JZFxuICAgICAgKTtcblxuICAgICAgLy8gNCkgXCJCYWNrZ3JvdW5kIHN0ZXAgZG9uZSBidXQgb3RoZXIgc3RlcHMgcGVuZGluZ1wiIChwZXItcnVuKVxuICAgICAgY29uc3QgYmFja2dyb3VuZFN0ZXBQZW5kaW5nUmV0dXJucyA9IG1hdGNoQ291bnQoXG4gICAgICAgIGxvZ3MsXG4gICAgICAgIC9CYWNrZ3JvdW5kIHN0ZXAgZG9uZSBidXQgb3RoZXIgc3RlcHMgcGVuZGluZy9nLFxuICAgICAgICByZXN1bHQucnVuSWRcbiAgICAgICk7XG5cbiAgICAgIC8vIDUpIFN0ZXAgc2tpcHBlZCBiZWNhdXNlIHN0ZXAgd2FzIGFscmVhZHkgaW4gdGVybWluYWwgc3RhdGVcbiAgICAgIC8vIChiYWNrZ3JvdW5kIGhhbmRsZXIgYXJyaXZlZCBhZnRlciBpbmxpbmUgcGF0aCBhbHJlYWR5IGNvbXBsZXRlZCBpdCkuXG4gICAgICAvLyBUaGlzIGlzIGVtaXR0ZWQgZnJvbSB0aGUgc3RlcF9zdGFydGVkIGNvbmZsaWN0IHBhdGggaW4gc3RlcC1leGVjdXRvci50c1xuICAgICAgLy8gKFwiU3RlcCBpbiB0ZXJtaW5hbCBzdGF0ZSwgc2tpcHBpbmdcIikuIFRoZSBzdGVwX2NvbXBsZXRlZCA0MDkgcGF0aFxuICAgICAgLy8gKFwiVHJpZWQgY29tcGxldGluZyBzdGVwLCBidXQgc3RlcCBoYXMgYWxyZWFkeSBmaW5pc2hlZFwiKSBmaXJlcyBvbmx5XG4gICAgICAvLyB3aGVuIHR3byBoYW5kbGVycyBib3RoIHJhbiB0aGUgc3RlcCBib2R5IGNvbmN1cnJlbnRseS5cbiAgICAgIGNvbnN0IHN0ZXBzU2tpcHBlZEFscmVhZHlEb25lID0gbWF0Y2hDb3VudChcbiAgICAgICAgbG9ncyxcbiAgICAgICAgL1N0ZXAgaW4gdGVybWluYWwgc3RhdGUsIHNraXBwaW5nL2csXG4gICAgICAgIHJlc3VsdC5ydW5JZFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0ZXBDb21wbGV0ZWRSYWNlcyA9IG1hdGNoQ291bnQoXG4gICAgICAgIGxvZ3MsXG4gICAgICAgIC9UcmllZCBjb21wbGV0aW5nIHN0ZXAsIGJ1dCBzdGVwIGhhcyBhbHJlYWR5IGZpbmlzaGVkL2csXG4gICAgICAgIHJlc3VsdC5ydW5JZFxuICAgICAgKTtcblxuICAgICAgLy8gNikgVW5jb25zdW1lZCBldmVudCBza2lwcyAoZGVidWcgbWVzc2FnZSBlbWl0dGVkIGJ5IHdvcmtmbG93LnRzIHNraXAgbG9naWMpXG4gICAgICBjb25zdCB1bmNvbnN1bWVkRXZlbnRTa2lwcyA9IG1hdGNoQ291bnQoXG4gICAgICAgIGxvZ3MsXG4gICAgICAgIC9Ta2lwcGluZyB1bmNvbnN1bWVkIHN0ZXAgZXZlbnQvZyxcbiAgICAgICAgcmVzdWx0LnJ1bklkXG4gICAgICApO1xuXG4gICAgICAvLyA3KSBIb29rL3N0ZXAgc3RhcnRlZCB3aXRoIGFscmVhZHktcnVubmluZzogdmlhIGNvbmN1cnJlbnQgaGFuZGxlclxuICAgICAgY29uc3QgbWF4RGVsaXZlcmllcyA9IG1hdGNoQ291bnQobG9ncywgL01heCByZXRyaWVzIHJlYWNoZWQvZyk7XG5cbiAgICAgIGNvbnNvbGUubG9nKCdcXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcbiAgICAgIGNvbnNvbGUubG9nKCdWMiBoYW5kbGVyIGJlaGF2aW9yIOKAlCAzIGJhdGNoZXMgw5cgNSBzdGVwcycpO1xuICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpO1xuICAgICAgY29uc29sZS5sb2coYEZsb3cgaGFuZGxlciBpbnZvY2F0aW9uczogJHtmbG93SW52b2NhdGlvbnN9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgUmVwbGF5IGl0ZXJhdGlvbnMgKHRvdGFsKTogJHtyZXBsYXlTdGFydHN9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgRXZlbnQgY291bnRzIHBlciByZXBsYXk6IFske3JlcGxheUV2ZW50Q291bnRzLmpvaW4oJywgJyl9XWApO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBcIkFsbCBzdGVwcyBkb25lLCByZXBsYXkgaW5saW5lXCIgaGl0czogJHthbGxEb25lSW5saW5lUmVwbGF5c31gXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBcIkJhY2tncm91bmQgc3RlcCBwZW5kaW5nLCByZXR1cm5cIiBoaXRzOiAke2JhY2tncm91bmRTdGVwUGVuZGluZ1JldHVybnN9YFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgU3RlcCBza2lwcGVkIChhbHJlYWR5IHRlcm1pbmFsLCBzdGVwX3N0YXJ0ZWQgNDA5KTogJHtzdGVwc1NraXBwZWRBbHJlYWR5RG9uZX1gXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBTdGVwIGJvZHkgcmFuIHR3aWNlIChzdGVwX2NvbXBsZXRlZCA0MDkpOiAgICAgICAgICAgJHtzdGVwQ29tcGxldGVkUmFjZXN9YFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgVW5jb25zdW1lZCBldmVudHMgc2tpcHBlZCBieSBjb25zdW1lcjogJHt1bmNvbnN1bWVkRXZlbnRTa2lwc31gXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coYE1heCByZXRyaWVzIHJlYWNoZWQgKGJhZCk6ICR7bWF4RGVsaXZlcmllc31gKTtcbiAgICAgIGNvbnNvbGUubG9nKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4nKTtcblxuICAgICAgLy8gQWxzbyBwcmludCB0aGUga2V5IHRpbWVsaW5lOiBvbmUgbGluZSBwZXIgXCJzaWduaWZpY2FudFwiIHJ1bnRpbWVcbiAgICAgIC8vIGRlYnVnIGV2ZW50LCBpbiBvcmRlci4gTWFueSBkZWJ1ZyBsaW5lcyBwdXQgdGhlIHJ1bklkIGluIHRoZVxuICAgICAgLy8gbWV0YWRhdGEgb2JqZWN0IG9uIGEgZm9sbG93aW5nIGxpbmUsIHNvIGxvb2sgYXQgYSBzbWFsbCBmb3J3YXJkXG4gICAgICAvLyB3aW5kb3cgYXJvdW5kIGVhY2ggbWF0Y2guXG4gICAgICBjb25zdCB0aW1lbGluZTogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbnN0IHNpZ1JlZ2V4ID1cbiAgICAgICAgL1N0YXJ0aW5nIHdvcmtmbG93IHJlcGxheXxBbGwgcGFyYWxsZWwgc3RlcHMgZG9uZXxCYWNrZ3JvdW5kIHN0ZXAgZG9uZSBidXR8V29ya2Zsb3cgc3VzcGVuZGVkfFdvcmtmbG93IHJlcGxheSBjb21wbGV0ZWR8UnVuIGFscmVhZHkgZmluaXNoZWQsIHNraXBwaW5nIGJhY2tncm91bmQgc3RlcHxTdGVwIGluIHRlcm1pbmFsIHN0YXRlfFRyaWVkIGNvbXBsZXRpbmcgc3RlcHxNYXggcmV0cmllcyByZWFjaGVkfFNraXBwaW5nIHVuY29uc3VtZWQgc3RlcCBldmVudC87XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghc2lnUmVnZXgudGVzdChsaW5lc1tpXSEpKSBjb250aW51ZTtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gbGluZXMuc2xpY2UoaSwgaSArIDgpLmpvaW4oJ1xcbicpO1xuICAgICAgICBpZiAoIXdpbmRvdy5pbmNsdWRlcyhyZXN1bHQucnVuSWQpKSBjb250aW51ZTtcbiAgICAgICAgdGltZWxpbmUucHVzaChsaW5lc1tpXSEpO1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coJy0tLSBUaW1lbGluZSAocnVudGltZSBkZWJ1ZyBldmVudHMgZm9yIHRoaXMgcnVuKSAtLS0nKTtcbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiB0aW1lbGluZSkge1xuICAgICAgICBjb25zdCBzaG9ydCA9IGxpbmUucmVwbGFjZSgvXFxzKy9nLCAnICcpLnNsaWNlKDAsIDE4MCk7XG4gICAgICAgIGNvbnNvbGUubG9nKHNob3J0KTtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKGBUaW1lbGluZSBlbnRyaWVzOiAke3RpbWVsaW5lLmxlbmd0aH1gKTtcbiAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuJyk7XG5cbiAgICAgIC8vIFJhdyBjb3VudHMg4oCUIHRvdGFsIG9jY3VycmVuY2VzIGluIHRoZSB3aG9sZSBsb2cgcmVnYXJkbGVzcyBvZiBydW5JZFxuICAgICAgLy8gKGZvciBzYW5pdHktY2hlY2tpbmcgdGhlIHdpbmRvd2VkIG1hdGNoZXIgYWJvdmUpLlxuICAgICAgY29uc3QgcmF3VW5jb25zdW1lZCA9IChcbiAgICAgICAgbG9ncy5tYXRjaCgvU2tpcHBpbmcgdW5jb25zdW1lZCBzdGVwIGV2ZW50L2cpIHx8IFtdXG4gICAgICApLmxlbmd0aDtcbiAgICAgIGNvbnN0IHJhd0FsbERvbmUgPSAoXG4gICAgICAgIGxvZ3MubWF0Y2goL0FsbCBwYXJhbGxlbCBzdGVwcyBkb25lLCByZXBsYXlpbmcgaW5saW5lL2cpIHx8IFtdXG4gICAgICApLmxlbmd0aDtcbiAgICAgIGNvbnN0IHJhd1BlbmRpbmcgPSAoXG4gICAgICAgIGxvZ3MubWF0Y2goL0JhY2tncm91bmQgc3RlcCBkb25lIGJ1dCBvdGhlciBzdGVwcyBwZW5kaW5nL2cpIHx8IFtdXG4gICAgICApLmxlbmd0aDtcbiAgICAgIGNvbnN0IHJhd1Rlcm1pbmFsID0gKFxuICAgICAgICBsb2dzLm1hdGNoKC9TdGVwIGluIHRlcm1pbmFsIHN0YXRlLCBza2lwcGluZy9nKSB8fCBbXVxuICAgICAgKS5sZW5ndGg7XG4gICAgICBjb25zdCByYXdDb21wbGV0ZWQ0MDkgPSAoXG4gICAgICAgIGxvZ3MubWF0Y2goL1RyaWVkIGNvbXBsZXRpbmcgc3RlcCwgYnV0IHN0ZXAgaGFzIGFscmVhZHkgZmluaXNoZWQvZykgfHxcbiAgICAgICAgW11cbiAgICAgICkubGVuZ3RoO1xuICAgICAgY29uc29sZS5sb2coJy0tLSBSYXcgY291bnRzIChubyBydW5JZCBmaWx0ZXIpIC0tLScpO1xuICAgICAgY29uc29sZS5sb2coYFNraXBwaW5nIHVuY29uc3VtZWQgc3RlcCBldmVudDogJHtyYXdVbmNvbnN1bWVkfWApO1xuICAgICAgY29uc29sZS5sb2coYEFsbCBwYXJhbGxlbCBzdGVwcyBkb25lLCByZXBsYXlpbmcgaW5saW5lOiAke3Jhd0FsbERvbmV9YCk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYEJhY2tncm91bmQgc3RlcCBkb25lIGJ1dCBvdGhlciBzdGVwcyBwZW5kaW5nOiAke3Jhd1BlbmRpbmd9YFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKGBTdGVwIGluIHRlcm1pbmFsIHN0YXRlLCBza2lwcGluZzogJHtyYXdUZXJtaW5hbH1gKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgVHJpZWQgY29tcGxldGluZyBzdGVwLCBidXQgc3RlcCBoYXMgYWxyZWFkeSBmaW5pc2hlZDogJHtyYXdDb21wbGV0ZWQ0MDl9YFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuJyk7XG5cbiAgICAgIC8vIEJyZWFrZG93biBvZiB1bmNvbnN1bWVkIGV2ZW50IHR5cGVzLiBUaGUgbG9nIGZvcm1hdCBlbWl0cyB0aGVcbiAgICAgIC8vIG1lc3NhZ2Ugb24gb25lIGxpbmUgYW5kIHRoZSBtZXRhZGF0YSBvYmplY3QgKGV2ZW50VHlwZSxcbiAgICAgIC8vIGNvcnJlbGF0aW9uSWQpIG9uIHRoZSBmb2xsb3dpbmcgbGluZXMuIFdhbGsgYSAxMi1saW5lIHdpbmRvdyBhZnRlclxuICAgICAgLy8gZWFjaCBtYXRjaCBhbmQgZXh0cmFjdCB0aGUgZmllbGRzLlxuICAgICAgY29uc3Qgc2tpcHBlZEJ5RXZlbnRUeXBlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgIGNvbnN0IHNraXBwZWRFdmVudHM6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGNvcnJlbGF0aW9uSWQ6IHN0cmluZyB9W10gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFsaW5lc1tpXSEuaW5jbHVkZXMoJ1NraXBwaW5nIHVuY29uc3VtZWQgc3RlcCBldmVudCcpKSBjb250aW51ZTtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gbGluZXMuc2xpY2UoaSwgaSArIDEyKS5qb2luKCdcXG4nKTtcbiAgICAgICAgY29uc3QgZXQgPSB3aW5kb3cubWF0Y2goL2V2ZW50VHlwZTpcXHMqJyhbXiddKyknLyk7XG4gICAgICAgIGNvbnN0IGNpZCA9IHdpbmRvdy5tYXRjaCgvY29ycmVsYXRpb25JZDpcXHMqJyhbXiddKyknLyk7XG4gICAgICAgIGlmIChldCAmJiBjaWQpIHtcbiAgICAgICAgICBza2lwcGVkQnlFdmVudFR5cGUuc2V0KFxuICAgICAgICAgICAgZXRbMV0hLFxuICAgICAgICAgICAgKHNraXBwZWRCeUV2ZW50VHlwZS5nZXQoZXRbMV0hKSA/PyAwKSArIDFcbiAgICAgICAgICApO1xuICAgICAgICAgIHNraXBwZWRFdmVudHMucHVzaCh7IGV2ZW50VHlwZTogZXRbMV0hLCBjb3JyZWxhdGlvbklkOiBjaWRbMV0hIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zb2xlLmxvZygnLS0tIFVuY29uc3VtZWQgZXZlbnQgdHlwZSBicmVha2Rvd24gLS0tJyk7XG4gICAgICBmb3IgKGNvbnN0IFtldmVudFR5cGUsIGNvdW50XSBvZiBza2lwcGVkQnlFdmVudFR5cGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtldmVudFR5cGV9OiAke2NvdW50fWApO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3IgZWFjaCBza2lwcGVkIGV2ZW50LCBsb29rIHVwIGFsbCBvY2N1cnJlbmNlcyBvZiBpdHMgY29ycmVsYXRpb25JZFxuICAgICAgLy8gaW4gdGhlIGV2ZW50IGxvZyBvcmRlciBzbyB3ZSBjYW4gc2VlIHdoZXRoZXIgaXQncyBhIHRyYWlsaW5nXG4gICAgICAvLyBkdXBsaWNhdGUgbGlmZWN5Y2xlIGV2ZW50IGFmdGVyIHN0ZXBfY29tcGxldGVkLlxuICAgICAgLy8gV2UgcmVjb25zdHJ1Y3QgZXZlbnQgb3JkZXIgZnJvbSB0aGUgXCJyZXBsYXlpbmcgaXRlcmF0aW9uXCIgbG9ncyBpc24ndFxuICAgICAgLy8gcmVsaWFibGUsIHNvIGluc3RlYWQgYXNrIHRoZSBzZXJ2ZXIgZGlyZWN0bHkuXG4gICAgICBjb25zdCBldmVudHNSZXNwID0gYXdhaXQgZmV0Y2goXG4gICAgICAgIGBodHRwOi8vbG9jYWxob3N0OiR7c2VydmVyLmluZm8ucG9ydH0vcnVucy8ke2VuY29kZVVSSUNvbXBvbmVudChyZXN1bHQucnVuSWQpfS9ldmVudHNgXG4gICAgICApO1xuICAgICAgY29uc3QgZXZlbnRzRGF0YSA9IChhd2FpdCBldmVudHNSZXNwLmpzb24oKS5jYXRjaCgoKSA9PiBudWxsKSkgYXMge1xuICAgICAgICBldmVudHM6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGNvcnJlbGF0aW9uSWQ/OiBzdHJpbmcgfVtdO1xuICAgICAgfSB8IG51bGw7XG4gICAgICBpZiAoZXZlbnRzRGF0YT8uZXZlbnRzKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIFRvdGFsIGV2ZW50cyBpbiBsb2c6ICR7ZXZlbnRzRGF0YS5ldmVudHMubGVuZ3RofWApO1xuICAgICAgICAvLyBGb3IgZWFjaCBjb3JyZWxhdGlvbklkIHRoYXQgaGFkIGEgc2tpcHBlZCBldmVudCwgc2hvdyB0aGUgZXZlbnRcbiAgICAgICAgLy8gc2VxdWVuY2UgaW4gdGhlIGxvZyBmb3IgdGhhdCBjb3JyZWxhdGlvbklkLlxuICAgICAgICBjb25zdCBzaG93bkNpZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCBza2lwIG9mIHNraXBwZWRFdmVudHMuc2xpY2UoMCwgNikpIHtcbiAgICAgICAgICBpZiAoc2hvd25DaWRzLmhhcyhza2lwLmNvcnJlbGF0aW9uSWQpKSBjb250aW51ZTtcbiAgICAgICAgICBzaG93bkNpZHMuYWRkKHNraXAuY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgY29uc3Qgc2VxID0gZXZlbnRzRGF0YS5ldmVudHNcbiAgICAgICAgICAgIC5maWx0ZXIoKGUpID0+IGUuY29ycmVsYXRpb25JZCA9PT0gc2tpcC5jb3JyZWxhdGlvbklkKVxuICAgICAgICAgICAgLm1hcCgoZSkgPT4gZS5ldmVudFR5cGUpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCAgY2lkPSR7c2tpcC5jb3JyZWxhdGlvbklkLnNsaWNlKDAsIDIwKX0uLi4gc2VxPVske3NlcS5qb2luKCcsICcpfV1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgJyAgKGV2ZW50cyBlbmRwb2ludCBub3QgYXZhaWxhYmxlLCBza2lwcGluZyBzZXF1ZW5jZSBkdW1wKSdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbicpO1xuXG4gICAgICAvLyBTYW5pdHk6IHRoZSBydW4gZGlkIGNvbXBsZXRlLiBFdmVyeXRoaW5nIGVsc2UgaXMgZGlhZ25vc3RpYy5cbiAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgIC8vIEhhcmQgYXNzZXJ0aW9uOiBubyBzdGVwIHNob3VsZCBoYXZlIGhpdCBtYXggcmV0cmllcyBmb3IgdGhpcyB3b3JrZmxvdy5cbiAgICAgIGV4cGVjdChtYXhEZWxpdmVyaWVzKS50b0JlKDApO1xuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBDb3VudCBtYXRjaGVzIG9mIGBwYXR0ZXJuYCBpbiBgbG9nc2AuIElmIGBydW5JZGAgaXMgcHJvdmlkZWQsIG9ubHkgY291bnRcbiAqIG1hdGNoZXMgd2hlcmUgYHJ1bklkYCBhcHBlYXJzIHdpdGhpbiBhbiA4LWxpbmUgd2luZG93IHN0YXJ0aW5nIGF0IHRoZVxuICogbWF0Y2gg4oCUIG1hbnkgZGVidWcgbGluZXMgcHV0IGB3b3JrZmxvd1J1bklkYCBpbiB0aGUgbWV0YWRhdGEgb2JqZWN0IG9uXG4gKiBhIGZvbGxvd2luZyBsaW5lLlxuICovXG5mdW5jdGlvbiBtYXRjaENvdW50KGxvZ3M6IHN0cmluZywgcGF0dGVybjogUmVnRXhwLCBydW5JZD86IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IGxpbmVzID0gbG9ncy5zcGxpdCgnXFxuJyk7XG4gIGxldCBuID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIHBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICBpZiAoIXBhdHRlcm4udGVzdChsaW5lc1tpXSEpKSBjb250aW51ZTtcbiAgICBpZiAocnVuSWQpIHtcbiAgICAgIGNvbnN0IHdpbmRvdyA9IGxpbmVzLnNsaWNlKGksIGkgKyA4KS5qb2luKCdcXG4nKTtcbiAgICAgIGlmICghd2luZG93LmluY2x1ZGVzKHJ1bklkKSkgY29udGludWU7XG4gICAgfVxuICAgIG4rKztcbiAgfVxuICByZXR1cm4gbjtcbn1cbiJdfQ==
@@ -77,4 +77,4 @@ export function inlineExecution(world) {
77
77
  // The hook pattern requires external resume, which involves complex
78
78
  // timing. The invocation count for hooks is 2: create + resume.
79
79
  }
80
- //# sourceMappingURL=inline-execution.mjs.map
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWV4ZWN1dGlvbi5tanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5saW5lLWV4ZWN1dGlvbi5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzFDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXhEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWE7SUFDM0MsSUFBSSxDQUNGLHVEQUF1RCxFQUN2RCxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDbkIsS0FBSyxJQUFJLEVBQUU7UUFDVCxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FDaEMsK0JBQStCLEVBQy9CLHlCQUF5QixFQUN6QixDQUFDLEVBQUUsQ0FBQyxDQUNMLENBQUM7UUFFRixNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQzFCLEtBQUssSUFBSSxFQUFFO1lBQ1QsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNyQyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFDRCxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUNuQyxDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcs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QWdFO1FBQ2hFLHdFQUF3RTtRQUN4RSwyRUFBMkU7UUFDM0UsTUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUNGLENBQUM7SUFFRix1RUFBdUU7SUFDdkUsb0VBQW9FO0lBQ3BFLGdFQUFnRTtBQUNsRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0LCB0ZXN0LCB2aSB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgeyBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZSB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHsgY3JlYXRlRmV0Y2hlciwgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuL3V0aWwubWpzJztcblxuLyoqXG4gKiBUZXN0cyB0aGF0IHRoZSBWMiBpbmxpbmUgZXhlY3V0aW9uIGxvb3AgY29ycmVjdGx5IG1pbmltaXplcyBmbG93XG4gKiBoYW5kbGVyIGludm9jYXRpb25zLiBFYWNoIHRlc3QgdmVyaWZpZXMgYSBzcGVjaWZpYyBwYXR0ZXJuOlxuICpcbiAqIC0gU2VxdWVudGlhbCBzdGVwcyAobm8gc3RyZWFtcyk6IDEgaW52b2NhdGlvblxuICogLSBTZXF1ZW50aWFsIHN0ZXBzIHdpdGggV3JpdGFibGVTdHJlYW06IDEgaW52b2NhdGlvbiAoc3luYyBmbHVzaClcbiAqIC0gU2xlZXAgKyBzdGVwOiAyIGludm9jYXRpb25zIChzbGVlcCByZXF1aXJlcyBxdWV1ZSByb3VuZC10cmlwKVxuICogLSBQYXJhbGxlbCBzdGVwcyAoUHJvbWlzZS5hbGwpOiAxLTMgaW52b2NhdGlvbnMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlXG4gKiAgIGVtYmVkZGVkIGhhcm5lc3Mgb2JzZXJ2ZXMgdGhlIGJhY2tncm91bmQgc3RlcCBhbmQgY29udGludWF0aW9uIHNlcGFyYXRlbHlcbiAqIC0gSG9vayArIHJlc3VtZTogMiBpbnZvY2F0aW9ucyAoaG9vayByZXF1aXJlcyBleHRlcm5hbCByZXN1bWUpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmxpbmVFeGVjdXRpb24od29ybGQ6IHN0cmluZykge1xuICB0ZXN0KFxuICAgICdzZXF1ZW50aWFsIHN0ZXBzIGNvbXBsZXRlIGluIGEgc2luZ2xlIGZsb3cgaW52b2NhdGlvbicsXG4gICAgeyB0aW1lb3V0OiAzMF8wMDAgfSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcih7IHdvcmxkIH0pLnRoZW4oY3JlYXRlRmV0Y2hlcik7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZXJ2ZXIuaW52b2tlKFxuICAgICAgICAnd29ya2Zsb3dzL2lubGluZS1leGVjdXRpb24udHMnLFxuICAgICAgICAnc2VxdWVudGlhbFN0ZXBzV29ya2Zsb3cnLFxuICAgICAgICBbMTBdXG4gICAgICApO1xuXG4gICAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgc2VydmVyLmdldFJ1bihyZXN1bHQucnVuSWQpO1xuICAgICAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgICB9LFxuICAgICAgICB7IGludGVydmFsOiAyMDAsIHRpbWVvdXQ6IDI5XzAwMCB9XG4gICAgICApO1xuXG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZShcbiAgICAgICAgcnVuLm91dHB1dCEsXG4gICAgICAgIHJ1bi5ydW5JZCxcbiAgICAgICAgdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZSgyMCk7XG5cbiAgICAgIGNvbnN0IGNvdW50ID0gYXdhaXQgc2VydmVyLmdldEZsb3dJbnZvY2F0aW9uQ291bnQocmVzdWx0LnJ1bklkKTtcbiAgICAgIGV4cGVjdChjb3VudCkudG9CZSgxKTtcbiAgICB9XG4gICk7XG5cbiAgdGVzdChcbiAgICAnc2VxdWVudGlhbCBzdGVwcyB3aXRoIHN0cmVhbSBjb21wbGV0ZSBpbiBhIHNpbmdsZSBmbG93IGludm9jYXRpb24nLFxuICAgIHsgdGltZW91dDogMzBfMDAwIH0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoeyB3b3JsZCB9KS50aGVuKGNyZWF0ZUZldGNoZXIpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VydmVyLmludm9rZShcbiAgICAgICAgJ3dvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLnRzJyxcbiAgICAgICAgJ3NlcXVlbnRpYWxTdGVwc1dpdGhTdHJlYW1Xb3JrZmxvdycsXG4gICAgICAgIFtdXG4gICAgICApO1xuXG4gICAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgc2VydmVyLmdldFJ1bihyZXN1bHQucnVuSWQpO1xuICAgICAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgICB9LFxuICAgICAgICB7IGludGVydmFsOiAyMDAsIHRpbWVvdXQ6IDI5XzAwMCB9XG4gICAgICApO1xuXG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZShcbiAgICAgICAgcnVuLm91dHB1dCEsXG4gICAgICAgIHJ1bi5ydW5JZCxcbiAgICAgICAgdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZSgnaGVsbG8gd29ybGQnKTtcblxuICAgICAgY29uc3QgY291bnQgPSBhd2FpdCBzZXJ2ZXIuZ2V0Rmxvd0ludm9jYXRpb25Db3VudChyZXN1bHQucnVuSWQpO1xuICAgICAgZXhwZWN0KGNvdW50KS50b0JlKDEpO1xuICAgIH1cbiAgKTtcblxuICB0ZXN0KFxuICAgICdzbGVlcCB3b3JrZmxvdyByZXF1aXJlcyBleGFjdGx5IDIgZmxvdyBpbnZvY2F0aW9ucycsXG4gICAgeyB0aW1lb3V0OiAzMF8wMDAgfSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcih7IHdvcmxkIH0pLnRoZW4oY3JlYXRlRmV0Y2hlcik7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZXJ2ZXIuaW52b2tlKFxuICAgICAgICAnd29ya2Zsb3dzL2lubGluZS1leGVjdXRpb24udHMnLFxuICAgICAgICAnc2xlZXBXb3JrZmxvdycsXG4gICAgICAgIFtdXG4gICAgICApO1xuXG4gICAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgc2VydmVyLmdldFJ1bihyZXN1bHQucnVuSWQpO1xuICAgICAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgICB9LFxuICAgICAgICB7IGludGVydmFsOiAyMDAsIHRpbWVvdXQ6IDI5XzAwMCB9XG4gICAgICApO1xuXG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZShcbiAgICAgICAgcnVuLm91dHB1dCEsXG4gICAgICAgIHJ1bi5ydW5JZCxcbiAgICAgICAgdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZSgzKTtcblxuICAgICAgLy8gSW52b2NhdGlvbiAxOiByZXBsYXkg4oaSIHNsZWVwIOKGkiByZXR1cm4ge3RpbWVvdXRTZWNvbmRzfVxuICAgICAgLy8gSW52b2NhdGlvbiAyOiBzbGVlcCBjb21wbGV0ZWQg4oaSIHJlcGxheSDihpIgc3RlcCBpbmxpbmUg4oaSIGNvbXBsZXRlXG4gICAgICBjb25zdCBjb3VudCA9IGF3YWl0IHNlcnZlci5nZXRGbG93SW52b2NhdGlvbkNvdW50KHJlc3VsdC5ydW5JZCk7XG4gICAgICBleHBlY3QoY291bnQpLnRvQmUoMik7XG4gICAgfVxuICApO1xuXG4gIHRlc3QoXG4gICAgJ3BhcmFsbGVsIHN0ZXBzIChQcm9taXNlLmFsbCkgY29tcGxldGUgaW4gMS0zIGZsb3cgaW52b2NhdGlvbnMnLFxuICAgIHsgdGltZW91dDogMzBfMDAwIH0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoeyB3b3JsZCB9KS50aGVuKGNyZWF0ZUZldGNoZXIpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VydmVyLmludm9rZShcbiAgICAgICAgJ3dvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLnRzJyxcbiAgICAgICAgJ3BhcmFsbGVsU3RlcHNXb3JrZmxvdycsXG4gICAgICAgIFtdXG4gICAgICApO1xuXG4gICAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgc2VydmVyLmdldFJ1bihyZXN1bHQucnVuSWQpO1xuICAgICAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgICB9LFxuICAgICAgICB7IGludGVydmFsOiAyMDAsIHRpbWVvdXQ6IDI5XzAwMCB9XG4gICAgICApO1xuXG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZShcbiAgICAgICAgcnVuLm91dHB1dCEsXG4gICAgICAgIHJ1bi5ydW5JZCxcbiAgICAgICAgdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZSgzMyk7IC8vICgxMCsxKSArICgyMCsyKVxuXG4gICAgICAvLyBJbiB0aGUgZW1iZWRkZWQgaGFybmVzcyB0aGUgYmFja2dyb3VuZCBzdGVwIGNhbiBmaW5pc2ggcXVpY2tseSBlbm91Z2hcbiAgICAgIC8vIHRoYXQgdGhlIHJ1biBjb21wbGV0ZXMgYmVmb3JlIHdlIG9ic2VydmUgYSBkaXN0aW5jdCBjb250aW51YXRpb24gcGFzcyxcbiAgICAgIC8vIHNvIHRoZSBsb3dlciBib3VuZCBpcyAxIGV2ZW4gdGhvdWdoIHByb2R1Y3Rpb24gb2Z0ZW4gc2hvd3MgMi5cbiAgICAgIC8vIFdpdGggaGlnaGVyIHF1ZXVlIGNvbmN1cnJlbmN5LCB0aGUgYmFja2dyb3VuZCBzdGVwJ3MgY29udGludWF0aW9uIG1heVxuICAgICAgLy8gYWxzbyByYWNlIHdpdGggdGhlIGlubGluZSBoYW5kbGVyJ3MgbG9vcCwgYWRkaW5nIGEgM3JkIG5vLW9wIGludm9jYXRpb24uXG4gICAgICBjb25zdCBjb3VudCA9IGF3YWl0IHNlcnZlci5nZXRGbG93SW52b2NhdGlvbkNvdW50KHJlc3VsdC5ydW5JZCk7XG4gICAgICBleHBlY3QoY291bnQpLnRvQmVHcmVhdGVyVGhhbk9yRXF1YWwoMSk7XG4gICAgICBleHBlY3QoY291bnQpLnRvQmVMZXNzVGhhbk9yRXF1YWwoMyk7XG4gICAgfVxuICApO1xuXG4gIC8vIEhvb2sgaW52b2NhdGlvbiBjb3VudGluZyBpcyB0ZXN0ZWQgYnkgdGhlIGV4aXN0aW5nIGhvb2tzIHRlc3Qgc3VpdGUuXG4gIC8vIFRoZSBob29rIHBhdHRlcm4gcmVxdWlyZXMgZXh0ZXJuYWwgcmVzdW1lLCB3aGljaCBpbnZvbHZlcyBjb21wbGV4XG4gIC8vIHRpbWluZy4gVGhlIGludm9jYXRpb24gY291bnQgZm9yIGhvb2tzIGlzIDI6IGNyZWF0ZSArIHJlc3VtZS5cbn1cbiJdfQ==
@@ -29,4 +29,4 @@ export async function* jsonlines(readable) {
29
29
  }
30
30
  yield* bufferedObjects();
31
31
  }
32
- //# sourceMappingURL=jsonlines.mjs.map
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmxpbmVzLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qc29ubGluZXMubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFvQztJQUNuRSxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNwQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFaEIsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDM0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRixLQUFLLFNBQVMsQ0FBQyxDQUFDLGVBQWU7UUFDN0IsTUFBTSxLQUFLLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFDOUIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLENBQUM7WUFBQyxNQUFNLENBQUMsQ0FBQSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMxRCxNQUFNLElBQUksSUFBSSxDQUFDO1lBQ2YsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsTUFBTTtRQUNSLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBhc3luYyBmdW5jdGlvbioganNvbmxpbmVzKHJlYWRhYmxlOiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pikge1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGNvbnN0IHJlYWRlciA9IHJlYWRhYmxlLmdldFJlYWRlcigpO1xuICBsZXQgYnVmZmVyID0gJyc7XG5cbiAgY29uc3QgYnVmZmVyZWRMaW5lcyA9ICgpID0+IHtcbiAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuJyk7XG4gICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJyc7XG4gICAgcmV0dXJuIGxpbmVzO1xuICB9O1xuXG4gIGFzeW5jIGZ1bmN0aW9uKiBidWZmZXJlZE9iamVjdHMoKSB7XG4gICAgY29uc3QgbGluZXMgPSBidWZmZXJlZExpbmVzKCk7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICB5aWVsZCBKU09OLnBhcnNlKGxpbmUpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgIH1cbiAgfVxuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgcmVhZCA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgaWYgKHJlYWQudmFsdWUpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBkZWNvZGVyLmRlY29kZShyZWFkLnZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICAgIGJ1ZmZlciArPSB0ZXh0O1xuICAgICAgeWllbGQqIGJ1ZmZlcmVkT2JqZWN0cygpO1xuICAgIH1cbiAgICBpZiAocmVhZC5kb25lKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB5aWVsZCogYnVmZmVyZWRPYmplY3RzKCk7XG59XG4iXX0=
@@ -19,4 +19,4 @@ export function nullByte(world) {
19
19
  expect(output).toEqual('null byte \0');
20
20
  });
21
21
  }
22
- //# sourceMappingURL=null-byte.mjs.map
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVsbC1ieXRlLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9udWxsLWJ5dGUubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV4RCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQWE7SUFDcEMsSUFBSSxDQUFDLHFDQUFxQyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzFFLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUNoQyx3QkFBd0IsRUFDeEIsa0JBQWtCLEVBQ2xCLEVBQUUsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUMxQixLQUFLLElBQUksRUFBRTtZQUNULE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUMsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQ0Q7WUFDRSxRQUFRLEVBQUUsR0FBRztZQUNiLE9BQU8sRUFBRSxNQUFNO1NBQ2hCLENBQ0YsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sMEJBQTBCLENBQzdDLEdBQUcsQ0FBQyxNQUFPLEVBQ1gsR0FBRyxDQUFDLEtBQUssRUFDVCxTQUFTLENBQ1YsQ0FBQztRQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0LCB0ZXN0LCB2aSB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgeyBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZSB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHsgY3JlYXRlRmV0Y2hlciwgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuL3V0aWwubWpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIG51bGxCeXRlKHdvcmxkOiBzdHJpbmcpIHtcbiAgdGVzdCgnc3VwcG9ydHMgbnVsbCBieXRlcyBpbiBzdGVwIHJlc3VsdHMnLCB7IHRpbWVvdXQ6IDEyXzAwMCB9LCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoeyB3b3JsZCB9KS50aGVuKGNyZWF0ZUZldGNoZXIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlcnZlci5pbnZva2UoXG4gICAgICAnd29ya2Zsb3dzL251bGwtYnl0ZS50cycsXG4gICAgICAnbnVsbEJ5dGVXb3JrZmxvdycsXG4gICAgICBbXVxuICAgICk7XG4gICAgZXhwZWN0KHJlc3VsdC5ydW5JZCkudG9NYXRjaCgvXndydW5fLisvKTtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBydW4gPSBhd2FpdCBzZXJ2ZXIuZ2V0UnVuKHJlc3VsdC5ydW5JZCk7XG4gICAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgICAgZXhwZWN0KHJ1bi5vdXRwdXQpLnRvQmVJbnN0YW5jZU9mKFVpbnQ4QXJyYXkpO1xuICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaW50ZXJ2YWw6IDIwMCxcbiAgICAgICAgdGltZW91dDogMTBfMDAwLFxuICAgICAgfVxuICAgICk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUoXG4gICAgICBydW4ub3V0cHV0ISxcbiAgICAgIHJ1bi5ydW5JZCxcbiAgICAgIHVuZGVmaW5lZFxuICAgICk7XG4gICAgZXhwZWN0KG91dHB1dCkudG9FcXVhbCgnbnVsbCBieXRlIFxcMCcpO1xuICB9KTtcbn1cbiJdfQ==
@@ -32,10 +32,13 @@ const Invoke = z
32
32
  const flowInvocationCounts = new Map();
33
33
  const app = new Hono()
34
34
  .post('/.well-known/workflow/v1/flow', async (ctx) => {
35
- // Clone the request to read the body for tracking without consuming it
35
+ // Clone the request to read the body for tracking without consuming it.
36
+ // We must increment the invocation counter *before* awaiting flowPOST,
37
+ // otherwise the workflow may complete (and the test may observe the
38
+ // completed status) before the counter is bumped, producing a flaky
39
+ // `expected 0 to be 1` failure when the test immediately queries
40
+ // /_flow-invocations after seeing the run as completed.
36
41
  const cloned = ctx.req.raw.clone();
37
- const response = await flowPOST(ctx.req.raw);
38
- // Extract runId from the request body (queue message payload)
39
42
  try {
40
43
  const body = (await cloned.json());
41
44
  const runId = typeof body?.runId === 'string'
@@ -51,7 +54,7 @@ const app = new Hono()
51
54
  catch {
52
55
  // Health check or non-JSON messages — ignore
53
56
  }
54
- return response;
57
+ return flowPOST(ctx.req.raw);
55
58
  })
56
59
  .get('/_flow-invocations/:runId', (ctx) => {
57
60
  const count = flowInvocationCounts.get(ctx.req.param('runId')) ?? 0;
@@ -143,4 +146,4 @@ serve({
143
146
  control.end();
144
147
  }
145
148
  });
146
- //# sourceMappingURL=server.mjs.map
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2ZXIubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUN6QixPQUFPLEVBQUUsSUFBSSxJQUFJLFFBQVEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sUUFBUSxNQUFNLDBDQUEwQyxDQUFDO0lBQzlELElBQUksRUFBRSxNQUFNO0NBQ2IsQ0FBQztBQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDdkMsT0FBTyxDQUFDLEtBQUssQ0FDWCwrREFBK0QsQ0FDaEUsQ0FBQztJQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQU1ELE1BQU0sTUFBTSxHQUFHLENBQUM7S0FDYixNQUFNLENBQUM7SUFDTixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQXlCLENBQUM7SUFDckUsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0NBQ3RDLENBQUM7S0FDRCxTQUFTLENBQUMsQ0FBQyxH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UUFBUSxFQUFFLENBQUM7SUFDL0IsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FDdEIsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxFQUM5QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLENBQUMsQ0FDbEUsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ25DLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLENBQUM7QUFDSCxDQUFDLENBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHNlcnZlIH0gZnJvbSAnQGhvbm8vbm9kZS1zZXJ2ZXInO1xuaW1wb3J0IHsgSG9ubyB9IGZyb20gJ2hvbm8nO1xuaW1wb3J0IHsgZ2V0SG9va0J5VG9rZW4sIGdldFJ1biwgcmVzdW1lSG9vaywgc3RhcnQgfSBmcm9tICd3b3JrZmxvdy9hcGknO1xuaW1wb3J0IHsgZ2V0V29ybGQgfSBmcm9tICd3b3JrZmxvdy9ydW50aW1lJztcbmltcG9ydCAqIGFzIHogZnJvbSAnem9kJztcbmltcG9ydCB7IFBPU1QgYXMgZmxvd1BPU1QgfSBmcm9tICcuLi8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9mbG93Lm1qcyc7XG5pbXBvcnQgbWFuaWZlc3QgZnJvbSAnLi4vLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbicgd2l0aCB7XG4gIHR5cGU6ICdqc29uJyxcbn07XG5cbmlmICghcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVEFSR0VUX1dPUkxEKSB7XG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgJ0Vycm9yOiBXT1JLRkxPV19UQVJHRVRfV09STEQgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldC4nXG4gICk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn1cblxudHlwZSBGaWxlcyA9IGtleW9mIHR5cGVvZiBtYW5pZmVzdC53b3JrZmxvd3M7XG50eXBlIFdvcmtmbG93czxGIGV4dGVuZHMgRmlsZXM+ID0ga2V5b2YgKHR5cGVvZiBtYW5pZmVzdC53b3JrZmxvd3MpW0ZdO1xudHlwZSBOb25FbXB0eUFycmF5PFQ+ID0gW1QsIC4uLlRbXV07XG5cbmNvbnN0IEludm9rZSA9IHpcbiAgLm9iamVjdCh7XG4gICAgZmlsZTogei5lbnVtKE9iamVjdC5rZXlzKG1hbmlmZXN0LndvcmtmbG93cykgYXMgTm9uRW1wdHlBcnJheTxGaWxlcz4pLFxuICAgIHdvcmtmbG93OiB6LnN0cmluZygpLFxuICAgIGFyZ3M6IHoudW5rbm93bigpLmFycmF5KCkuZGVmYXVsdChbXSksXG4gIH0pXG4gIC50cmFuc2Zvcm0oKG9iaikgPT4ge1xuICAgIGNvbnN0IGZpbGUgPSBvYmouZmlsZSBhcyBrZXlvZiB0eXBlb2YgbWFuaWZlc3Qud29ya2Zsb3dzO1xuICAgIGNvbnN0IHdvcmtmbG93ID0gelxuICAgICAgLmVudW0oXG4gICAgICAgIE9iamVjdC5rZXlzKG1hbmlmZXN0LndvcmtmbG93c1tmaWxlXSkgYXMgTm9uRW1wdHlBcnJheTxcbiAgICAgICAgICBXb3JrZmxvd3M8dHlwZW9mIGZpbGU+XG4gICAgICAgID5cbiAgICAgIClcbiAgICAgIC5wYXJzZShvYmoud29ya2Zsb3cpO1xuICAgIHJldHVybiB7XG4gICAgICBhcmdzOiBvYmouYXJncyxcbiAgICAgIHdvcmtmbG93OiBtYW5pZmVzdC53b3JrZmxvd3NbZmlsZV1bd29ya2Zsb3ddLFxuICAgIH07XG4gIH0pO1xuXG4vLyBUcmFjayBmbG93IGhhbmRsZXIgaW52b2NhdGlvbnMgcGVyIHJ1biBmb3IgdGVzdGluZyBpbmxpbmUgZXhlY3V0aW9uXG5jb25zdCBmbG93SW52b2NhdGlvbkNvdW50cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbmNvbnN0IGFwcCA9IG5ldyBIb25vKClcbiAgLnBvc3QoJy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9mbG93JywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIC8vIENsb25lIHRoZSByZXF1ZXN0IHRvIHJlYWQgdGhlIGJvZHkgZm9yIHRyYWNraW5nIHdpdGhvdXQgY29uc3VtaW5nIGl0LlxuICAgIC8vIFdlIG11c3QgaW5jcmVtZW50IHRoZSBpbnZvY2F0aW9uIGNvdW50ZXIgKmJlZm9yZSogYXdhaXRpbmcgZmxvd1BPU1QsXG4gICAgLy8gb3RoZXJ3aXNlIHRoZSB3b3JrZmxvdyBtYXkgY29tcGxldGUgKGFuZCB0aGUgdGVzdCBtYXkgb2JzZXJ2ZSB0aGVcbiAgICAvLyBjb21wbGV0ZWQgc3RhdHVzKSBiZWZvcmUgdGhlIGNvdW50ZXIgaXMgYnVtcGVkLCBwcm9kdWNpbmcgYSBmbGFreVxuICAgIC8vIGBleHBlY3RlZCAwIHRvIGJlIDFgIGZhaWx1cmUgd2hlbiB0aGUgdGVzdCBpbW1lZGlhdGVseSBxdWVyaWVzXG4gICAgLy8gL19mbG93LWludm9jYXRpb25zIGFmdGVyIHNlZWluZyB0aGUgcnVuIGFzIGNvbXBsZXRlZC5cbiAgICBjb25zdCBjbG9uZWQgPSBjdHgucmVxLnJhdy5jbG9uZSgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBib2R5ID0gKGF3YWl0IGNsb25lZC5qc29uKCkpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgY29uc3QgcnVuSWQgPVxuICAgICAgICB0eXBlb2YgYm9keT8ucnVuSWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBib2R5LnJ1bklkXG4gICAgICAgICAgOiB0eXBlb2YgKGJvZHkucGF5bG9hZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICA/LnJ1bklkID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyAoKGJvZHkucGF5bG9hZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikucnVuSWQgYXMgc3RyaW5nKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAocnVuSWQpIHtcbiAgICAgICAgZmxvd0ludm9jYXRpb25Db3VudHMuc2V0KFxuICAgICAgICAgIHJ1bklkLFxuICAgICAgICAgIChmbG93SW52b2NhdGlvbkNvdW50cy5nZXQocnVuSWQpID8/IDApICsgMVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSGVhbHRoIGNoZWNrIG9yIG5vbi1KU09OIG1lc3NhZ2VzIOKAlCBpZ25vcmVcbiAgICB9XG4gICAgcmV0dXJuIGZsb3dQT1NUKGN0eC5yZXEucmF3KTtcbiAgfSlcbiAgLmdldCgnL19mbG93LWludm9jYXRpb25zLzpydW5JZCcsIChjdHgpID0+IHtcbiAgICBjb25zdCBjb3VudCA9IGZsb3dJbnZvY2F0aW9uQ291bnRzLmdldChjdHgucmVxLnBhcmFtKCdydW5JZCcpKSA/PyAwO1xuICAgIHJldHVybiBjdHguanNvbih7IGNvdW50IH0pO1xuICB9KVxuICAuZ2V0KCcvX21hbmlmZXN0JywgKGN0eCkgPT4gY3R4Lmpzb24obWFuaWZlc3QpKVxuICAucG9zdCgnL2ludm9rZScsIGFzeW5jIChjdHgpID0+IHtcbiAgICBjb25zdCBqc29uID0gYXdhaXQgY3R4LnJlcS5qc29uKCkudGhlbihJbnZva2UucGFyc2UpO1xuICAgIGNvbnN0IGhhbmRsZXIgPSBhd2FpdCBzdGFydChqc29uLndvcmtmbG93LCBqc29uLmFyZ3MpO1xuXG4gICAgcmV0dXJuIGN0eC5qc29uKHsgcnVuSWQ6IGhhbmRsZXIucnVuSWQgfSk7XG4gIH0pXG4gIC5wb3N0KCcvaG9va3MvOnRva2VuJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIGNvbnN0IGhvb2sgPSBhd2FpdCBnZXRIb29rQnlUb2tlbihjdHgucmVxLnBhcmFtKCd0b2tlbicpKTtcbiAgICBjb25zdCB7IHJ1bklkIH0gPSBhd2FpdCByZXN1bWVIb29rKGhvb2sudG9rZW4sIHtcbiAgICAgIC4uLihhd2FpdCBjdHgucmVxLmpzb24oKSksXG4gICAgICBtZXRhZGF0YTogaG9vay5tZXRhZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gY3R4Lmpzb24oeyBydW5JZCwgaG9va0lkOiBob29rLmhvb2tJZCB9KTtcbiAgfSlcbiAgLmdldCgnL3J1bnMvOnJ1bklkJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgZ2V0V29ybGQoKTtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChjdHgucmVxLnBhcmFtKCdydW5JZCcpKTtcbiAgICAvLyBDdXN0b20gSlNPTiBzZXJpYWxpemF0aW9uIHRvIGhhbmRsZSBVaW50OEFycmF5IGFzIGJhc2U2NFxuICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShydW4sIChfa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIF9fdHlwZTogJ1VpbnQ4QXJyYXknLFxuICAgICAgICAgIGRhdGE6IEJ1ZmZlci5mcm9tKHZhbHVlKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShqc29uLCB7XG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICB9KTtcbiAgfSlcbiAgLmdldCgnL3J1bnMvOnJ1bklkL3JlYWRhYmxlJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIGNvbnN0IHJ1bklkID0gY3R4LnJlcS5wYXJhbSgncnVuSWQnKTtcbiAgICBjb25zdCBydW4gPSBnZXRSdW4ocnVuSWQpO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UocnVuLmdldFJlYWRhYmxlKCkpO1xuICB9KVxuICAuZ2V0KCcvcnVucy86cnVuSWQvZXZlbnRzJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIGNvbnN0IHJ1bklkID0gY3R4LnJlcS5wYXJhbSgncnVuSWQnKTtcbiAgICBjb25zdCB3b3JsZCA9IGF3YWl0IGdldFdvcmxkKCk7XG4gICAgY29uc3QgYWxsRXZlbnRzOiB7IGV2ZW50VHlwZTogc3RyaW5nOyBjb3JyZWxhdGlvbklkPzogc3RyaW5nIH1bXSA9IFtdO1xuICAgIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHdvcmxkLmV2ZW50cy5saXN0KHtcbiAgICAgICAgcnVuSWQsXG4gICAgICAgIHBhZ2luYXRpb246IHsgc29ydE9yZGVyOiAnYXNjJywgY3Vyc29yIH0sXG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgZSBvZiBwYWdlLmRhdGEpIHtcbiAgICAgICAgYWxsRXZlbnRzLnB1c2goe1xuICAgICAgICAgIGV2ZW50VHlwZTogZS5ldmVudFR5cGUsXG4gICAgICAgICAgY29ycmVsYXRpb25JZDogZS5jb3JyZWxhdGlvbklkLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghcGFnZS5oYXNNb3JlKSBicmVhaztcbiAgICAgIGN1cnNvciA9IHBhZ2UuY3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgICAgIGlmICghY3Vyc29yKSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIGN0eC5qc29uKHsgZXZlbnRzOiBhbGxFdmVudHMgfSk7XG4gIH0pO1xuXG5zZXJ2ZShcbiAge1xuICAgIGZldGNoOiBhcHAuZmV0Y2gsXG4gICAgcG9ydDogTnVtYmVyKHByb2Nlc3MuZW52LlBPUlQpIHx8IDAsXG4gIH0sXG4gIGFzeW5jIChpbmZvKSA9PiB7XG4gICAgY29uc29sZS5sb2coYPCfkYIgbGlzdGVuaW5nIG9uIGh0dHA6Ly8ke2luZm8uYWRkcmVzc306JHtpbmZvLnBvcnR9YCk7XG4gICAgY29uc29sZS5sb2coJycpO1xuXG4gICAgcHJvY2Vzcy5lbnYuUE9SVCA9IGluZm8ucG9ydC50b1N0cmluZygpO1xuXG4gICAgZm9yIChjb25zdCBbZmlsZW5hbWUsIHdvcmtmbG93c10gb2YgT2JqZWN0LmVudHJpZXMobWFuaWZlc3Qud29ya2Zsb3dzKSkge1xuICAgICAgZm9yIChjb25zdCB3b3JrZmxvd05hbWUgb2YgT2JqZWN0LmtleXMoXG4gICAgICAgIHdvcmtmbG93cyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJCBjdXJsIC1YIFBPU1QgaHR0cDovL2xvY2FsaG9zdDoke2luZm8ucG9ydH0vaW52b2tlIC1kICcke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWxlOiBmaWxlbmFtZSxcbiAgICAgICAgICAgICAgd29ya2Zsb3c6IHdvcmtmbG93TmFtZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApfSdgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd29ybGQgPSBhd2FpdCBnZXRXb3JsZCgpO1xuICAgIGlmICh3b3JsZC5zdGFydCkge1xuICAgICAgY29uc29sZS5sb2coYHN0YXJ0aW5nIGJhY2tncm91bmQgdGFza3MuLi5gKTtcbiAgICAgIGF3YWl0IHdvcmxkLnN0YXJ0KCkudGhlbihcbiAgICAgICAgKCkgPT4gY29uc29sZS5sb2coJ2JhY2tncm91bmQgdGFza3Mgc3RhcnRlZC4nKSxcbiAgICAgICAgKGVycikgPT4gY29uc29sZS5lcnJvcign4p2XIGVycm9yIHN0YXJ0aW5nIGJhY2tncm91bmQgdGFza3M6JywgZXJyKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuQ09OVFJPTF9GRCA9PT0gJzMnKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oJycsIHsgZmQ6IDMgfSk7XG4gICAgICBjb250cm9sLndyaXRlKGAke0pTT04uc3RyaW5naWZ5KHsgc3RhdGU6ICdsaXN0ZW5pbmcnLCBpbmZvIH0pfVxcbmApO1xuICAgICAgY29udHJvbC5lbmQoKTtcbiAgICB9XG4gIH1cbik7XG4iXX0=
@@ -29,12 +29,13 @@ export declare function createFetcher(control: Control): {
29
29
  runId: string;
30
30
  deploymentId: string;
31
31
  workflowName: string;
32
- input: unknown;
32
+ attributes: Record<string, string>;
33
33
  createdAt: Date;
34
34
  updatedAt: Date;
35
35
  status: "pending" | "running";
36
36
  specVersion?: number | undefined;
37
37
  executionContext?: Record<string, any> | undefined;
38
+ input?: unknown;
38
39
  errorCode?: string | undefined;
39
40
  expiredAt?: Date | undefined;
40
41
  startedAt?: Date | undefined;
@@ -45,13 +46,14 @@ export declare function createFetcher(control: Control): {
45
46
  runId: string;
46
47
  deploymentId: string;
47
48
  workflowName: string;
48
- input: unknown;
49
+ attributes: Record<string, string>;
49
50
  createdAt: Date;
50
51
  updatedAt: Date;
51
52
  status: "cancelled";
52
53
  completedAt: Date;
53
54
  specVersion?: number | undefined;
54
55
  executionContext?: Record<string, any> | undefined;
56
+ input?: unknown;
55
57
  errorCode?: string | undefined;
56
58
  expiredAt?: Date | undefined;
57
59
  startedAt?: Date | undefined;
@@ -61,7 +63,7 @@ export declare function createFetcher(control: Control): {
61
63
  runId: string;
62
64
  deploymentId: string;
63
65
  workflowName: string;
64
- input: unknown;
66
+ attributes: Record<string, string>;
65
67
  createdAt: Date;
66
68
  updatedAt: Date;
67
69
  status: "completed";
@@ -69,6 +71,7 @@ export declare function createFetcher(control: Control): {
69
71
  completedAt: Date;
70
72
  specVersion?: number | undefined;
71
73
  executionContext?: Record<string, any> | undefined;
74
+ input?: unknown;
72
75
  errorCode?: string | undefined;
73
76
  expiredAt?: Date | undefined;
74
77
  startedAt?: Date | undefined;
@@ -77,7 +80,7 @@ export declare function createFetcher(control: Control): {
77
80
  runId: string;
78
81
  deploymentId: string;
79
82
  workflowName: string;
80
- input: unknown;
83
+ attributes: Record<string, string>;
81
84
  createdAt: Date;
82
85
  updatedAt: Date;
83
86
  status: "failed";
@@ -85,6 +88,7 @@ export declare function createFetcher(control: Control): {
85
88
  completedAt: Date;
86
89
  specVersion?: number | undefined;
87
90
  executionContext?: Record<string, any> | undefined;
91
+ input?: unknown;
88
92
  errorCode?: string | undefined;
89
93
  expiredAt?: Date | undefined;
90
94
  startedAt?: Date | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.mts","sourceRoot":"","sources":["../../src/util.mts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,QAAQ,MAAM,0CAA0C,CAAC;AAErE,eAAO,MAAM,OAAO;;;;;iBAKlB,CAAC;AACH,KAAK,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAEvC,KAAK,KAAK,GAAG,MAAM,OAAO,QAAQ,CAAC,SAAS,CAAC;AAC7C,KAAK,SAAS,CAAC,CAAC,SAAS,KAAK,IAAI,MAAM,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvE,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;;;;;;GAwDA;AAID,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO;WAE7B,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,QAC5C,CAAC,YACG,CAAC,QACL,OAAO,EAAE;;;kCAemB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;eAO3C,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAmBD,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;eAcjD,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,SACrC,MAAM,WACJ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;EAoB3D"}
1
+ {"version":3,"file":"util.d.mts","sourceRoot":"","sources":["../../src/util.mts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,QAAQ,MAAM,0CAA0C,CAAC;AAErE,eAAO,MAAM,OAAO;;;;;iBAKlB,CAAC;AACH,KAAK,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAEvC,KAAK,KAAK,GAAG,MAAM,OAAO,QAAQ,CAAC,SAAS,CAAC;AAC7C,KAAK,SAAS,CAAC,CAAC,SAAS,KAAK,IAAI,MAAM,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvE,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;;;;;;GAwDA;AAID,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO;WAE7B,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,QAC5C,CAAC,YACG,CAAC,QACL,OAAO,EAAE;;;kCAemB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;eAO3C,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAmBD,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;eAcjD,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,SACrC,MAAM,WACJ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;EAoB3D"}
package/dist/src/util.mjs CHANGED
@@ -124,4 +124,4 @@ export function createFetcher(control) {
124
124
  },
125
125
  };
126
126
  }
127
- //# sourceMappingURL=util.mjs.map
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5tanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sS0FBNkIsTUFBTSxPQUFPLENBQUM7QUFDbEQsT0FBTyxTQUFTLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU5RCxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUd6QixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM5QixLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDN0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDYixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtLQUNqQixDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBTUgsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUMsSUFHakM7SUFDQyxJQUFJLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUxRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDNUIsVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMs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QyxVQUFVLENBQ2QsS0FBYSxFQUNiLE9BQXNEO1lBRXRELE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUNyQixvQkFBb0IsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsS0FBSyxFQUFFLEVBQ3REO2dCQUNFLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE9BQU8sRUFBRTtvQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2lCQUNuQztnQkFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7YUFDOUIsQ0FDRixDQUFDO1lBQ0YsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLHlDQUF5QztZQUM1RSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNaLE1BQU0sSUFBSSxLQUFLLENBQ2IsMEJBQTBCLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUN6RCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcCBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IFdvcmtmbG93UnVuU2NoZW1hIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCBjaGFsaywgeyB0eXBlIENoYWxrSW5zdGFuY2UgfSBmcm9tICdjaGFsayc7XG5pbXBvcnQganNvbmxpbmVzIGZyb20gJ2pzb25saW5lcyc7XG5pbXBvcnQgeyBhc3NlcnQsIG9uVGVzdEZhaWxlZCwgb25UZXN0RmluaXNoZWQgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHR5cGUgeyBUeXBlZEhvb2sgfSBmcm9tICd3b3JrZmxvdyc7XG5pbXBvcnQgKiBhcyB6IGZyb20gJ3pvZCc7XG5pbXBvcnQgdHlwZSBtYW5pZmVzdCBmcm9tICcuLi8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJztcblxuZXhwb3J0IGNvbnN0IENvbnRyb2wgPSB6Lm9iamVjdCh7XG4gIHN0YXRlOiB6LmxpdGVyYWwoJ2xpc3RlbmluZycpLFxuICBpbmZvOiB6Lm9iamVjdCh7XG4gICAgcG9ydDogei5udW1iZXIoKSxcbiAgfSksXG59KTtcbnR5cGUgQ29udHJvbCA9IHouaW5mZXI8dHlwZW9mIENvbnRyb2w+O1xuXG50eXBlIEZpbGVzID0ga2V5b2YgdHlwZW9mIG1hbmlmZXN0LndvcmtmbG93cztcbnR5cGUgV29ya2Zsb3dzPEYgZXh0ZW5kcyBGaWxlcz4gPSBrZXlvZiAodHlwZW9mIG1hbmlmZXN0LndvcmtmbG93cylbRl07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydFNlcnZlcihvcHRzOiB7XG4gIHdvcmxkOiBzdHJpbmc7XG4gIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD47XG59KSB7XG4gIGxldCBzZXJ2ZXJQYXRoID0gbmV3IFVSTCgnLi9zZXJ2ZXIubXRzJywgaW1wb3J0Lm1ldGEudXJsKTtcblxuICBpZiAoIWV4aXN0c1N5bmMoc2VydmVyUGF0aCkpIHtcbiAgICBzZXJ2ZXJQYXRoID0gbmV3IFVSTCgnLi9zZXJ2ZXIubWpzJywgaW1wb3J0Lm1ldGEudXJsKTtcbiAgfVxuXG4gIGNvbnN0IHByb2MgPSBjcC5zcGF3bignbm9kZScsIFtmaWxlVVJMVG9QYXRoKHNlcnZlclBhdGgpXSwge1xuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIGVudjoge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICBXT1JLRkxPV19UQVJHRVRfV09STEQ6IG9wdHMud29ybGQsXG4gICAgICBDT05UUk9MX0ZEOiAnMycsXG4gICAgICAuLi4ob3B0cy5lbnYgPz8ge30pLFxuICAgIH0sXG4gIH0pO1xuICBvblRlc3RGaW5pc2hlZCgoKSA9PiB7XG4gICAgcHJvYy5raWxsKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHN0ZGlvID0gW10gYXMgeyBzdHJlYW06IENoYWxrSW5zdGFuY2U7IGNodW5rOiBzdHJpbmcgfVtdO1xuICAvLyBBY2N1bXVsYXRlZCByYXcgc2VydmVyIG91dHB1dCDigJQgdXNlZCBieSB0ZXN0cyB0aGF0IHdhbnQgdG8gaW5zcGVjdFxuICAvLyBkZWJ1ZyBsb2dzIChlLmcuLCBjb3VudCBydW50aW1lIGl0ZXJhdGlvbnMsIGV2ZW50IGxvYWRzLCBldGMuKS5cbiAgY29uc3Qgb3V0cHV0QnVmZmVyOiBzdHJpbmdbXSA9IFtdO1xuICBwcm9jLnN0ZG91dD8ub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICBjb25zdCBzdHIgPSBjaHVuay50b1N0cmluZygpO1xuICAgIHN0ZGlvLnB1c2goeyBzdHJlYW06IGNoYWxrLndoaXRlLCBjaHVuazogc3RyIH0pO1xuICAgIG91dHB1dEJ1ZmZlci5wdXNoKHN0cik7XG4gIH0pO1xuICBwcm9jLnN0ZGVycj8ub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICBjb25zdCBzdHIgPSBjaHVuay50b1N0cmluZygpO1xuICAgIHN0ZGlvLnB1c2goeyBzdHJlYW06IGNoYWxrLnJlZCwgY2h1bms6IHN0ciB9KTtcbiAgICBvdXRwdXRCdWZmZXIucHVzaChzdHIpO1xuICB9KTtcblxuICBvblRlc3RGYWlsZWQoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCc9PT0gU0VSVkVSIFNURElPID09PScpO1xuICAgIGxldCBidWZmZXIgPSAnJztcbiAgICBmb3IgKGNvbnN0IHsgc3RyZWFtLCBjaHVuayB9IG9mIHN0ZGlvKSB7XG4gICAgICBidWZmZXIgKz0gc3RyZWFtLmludmVyc2UoY2h1bmspO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhidWZmZXIpO1xuICB9KTtcblxuICBjb25zdCBmZDMgPSBwcm9jLnN0ZGlvWzNdO1xuICBhc3NlcnQoZmQzLCAnZmQzIHNob3VsZCBiZSBkZWZpbmVkJyk7XG5cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBmZDMucGlwZShqc29ubGluZXMucGFyc2UoKSkpIHtcbiAgICBjb25zdCBjb250cm9sID0gQ29udHJvbC5wYXJzZShjaHVuayk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbnRyb2wsXG4gICAgICBnZXRPdXRwdXQ6ICgpID0+IG91dHB1dEJ1ZmZlci5qb2luKCcnKSxcbiAgICB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZGlkIG5vdCBzdGFydCBjb3JyZWN0bHknKTtcbn1cblxuY29uc3QgSW52b2tlID0gei5vYmplY3QoeyBydW5JZDogei5jb2VyY2Uuc3RyaW5nKCkgfSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGZXRjaGVyKGNvbnRyb2w6IENvbnRyb2wpIHtcbiAgcmV0dXJuIHtcbiAgICBhc3luYyBpbnZva2U8RiBleHRlbmRzIEZpbGVzLCBXIGV4dGVuZHMgV29ya2Zsb3dzPEY+PihcbiAgICAgIGZpbGU6IEYsXG4gICAgICB3b3JrZmxvdzogVyxcbiAgICAgIGFyZ3M6IHVua25vd25bXVxuICAgICkge1xuICAgICAgY29uc3QgeCA9IGF3YWl0IGZldGNoKGBodHRwOi8vbG9jYWxob3N0OiR7Y29udHJvbC5pbmZvLnBvcnR9L2ludm9rZWAsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGZpbGUsIHdvcmtmbG93LCBhcmdzIH0pLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgeC5qc29uKCkudGhlbihJbnZva2UucGFyc2UpO1xuICAgICAgb25UZXN0RmFpbGVkKCgpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignV29ya2Zsb3cgcnVuOicsIGRhdGEucnVuSWQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIGFzeW5jIGdldEZsb3dJbnZvY2F0aW9uQ291bnQocnVuSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICBjb25zdCB4ID0gYXdhaXQgZmV0Y2goXG4gICAgICAgIGBodHRwOi8vbG9jYWxob3N0OiR7Y29udHJvbC5pbmZvLnBvcnR9L19mbG93LWludm9jYXRpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJ1bklkKX1gXG4gICAgICApO1xuICAgICAgY29uc3QgZGF0YSA9IChhd2FpdCB4Lmpzb24oKSkgYXMgeyBjb3VudDogbnVtYmVyIH07XG4gICAgICByZXR1cm4gZGF0YS5jb3VudDtcbiAgICB9LFxuICAgIGFzeW5jIGdldFJ1bihpZDogc3RyaW5nKSB7XG4gICAgICBjb25zdCB4ID0gYXdhaXQgZmV0Y2goXG4gICAgICAgIGBodHRwOi8vbG9jYWxob3N0OiR7Y29udHJvbC5pbmZvLnBvcnR9L3J1bnMvJHtlbmNvZGVVUklDb21wb25lbnQoaWQpfWBcbiAgICAgICk7XG4gICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgeC50ZXh0KCk7XG4gICAgICAvLyBDdXN0b20gSlNPTiByZXZpdmVyIHRvIGRlY29kZSBiYXNlNjQgYmFjayB0byBVaW50OEFycmF5XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZSh0ZXh0LCAoX2tleSwgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICh2YWx1ZSBhcyBhbnkpLl9fdHlwZSA9PT0gJ1VpbnQ4QXJyYXknICYmXG4gICAgICAgICAgdHlwZW9mICh2YWx1ZSBhcyBhbnkpLmRhdGEgPT09ICdzdHJpbmcnXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbSgodmFsdWUgYXMgYW55KS5kYXRhLCAnYmFzZTY0JykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFdvcmtmbG93UnVuU2NoZW1hLnBhcnNlQXN5bmMoZGF0YSk7XG4gICAgfSxcbiAgICBhc3luYyBnZXRSZWFkYWJsZShpZDogc3RyaW5nKTogUHJvbWlzZTxSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pj4ge1xuICAgICAgY29uc3QgeCA9IGF3YWl0IGZldGNoKFxuICAgICAgICBgaHR0cDovL2xvY2FsaG9zdDoke2NvbnRyb2wuaW5mby5wb3J0fS9ydW5zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlkKX0vcmVhZGFibGVgXG4gICAgICApO1xuICAgICAgaWYgKCF4Lm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRmFpbGVkIHRvIGdldCByZWFkYWJsZSBzdHJlYW06ICR7eC5zdGF0dXN9ICR7eC5zdGF0dXNUZXh0fWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICgheC5ib2R5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYm9keSBpbiByZXNwb25zZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHguYm9keTtcbiAgICB9LFxuICAgIGFzeW5jIHJlc3VtZUhvb2s8VCBleHRlbmRzIFR5cGVkSG9vazxhbnksIGFueT4+KFxuICAgICAgdG9rZW46IHN0cmluZyxcbiAgICAgIHBheWxvYWQ6IE9taXQ8Tm9JbmZlcjxUeXBlZEhvb2suSW5wdXQ8VD4+LCAnbWV0YWRhdGEnPlxuICAgICkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgIGBodHRwOi8vbG9jYWxob3N0OiR7Y29udHJvbC5pbmZvLnBvcnR9L2hvb2tzLyR7dG9rZW59YCxcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJlcy5hcnJheUJ1ZmZlcigpLmNhdGNoKCgpID0+IHt9KTsgLy8gRHJhaW4gdGhlIGJvZHkgdG8gYXZvaWQgcmVzb3VyY2UgbGVha3NcbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRmFpbGVkIHRvIHJlc3VtZSBob29rOiAke3Jlcy5zdGF0dXN9ICR7cmVzLnN0YXR1c1RleHR9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iXX0=
@@ -67,4 +67,4 @@ async function writeEvent(writable, event, payload) {
67
67
  payload,
68
68
  })}\r\n`));
69
69
  }
70
- //# sourceMappingURL=hooks.js.map
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi93b3JrZmxvd3MvaG9va3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0EsMENBY0M7QUF6QkQseUNBQXlEO0FBQ3pELHVDQUF5QjtBQUVaLFFBQUEsSUFBSSxHQUFHLElBQUEsaUJBQVUsRUFBQztJQUM3QixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNmLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO1FBQ2hCLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQzVCLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0tBQ3RCLENBQUM7Q0FDSCxDQUFDLENBQUM7QUFFSSxLQUFLLFVBQVUsZUFBZSxDQUFDLEtBQWEsRUFBRSxVQUFrQjtJQUNyRSxjQUFjLENBQUM7SUFFZixNQUFNLElBQUksR0FBRyxZQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5RCxNQUFNLFNBQVMsR0FBNkMsRUFBRSxDQUFDO0lBQy9ELE1BQU0sRUFBRSxHQUFHLElBQUEsa0JBQVcsR0FBRSxDQUFDO0lBQ3pCLE1BQU0sVUFBVSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNwQyxJQUFJLEtBQUssRUFBRSxNQUFNLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMvQixNQUFNLFVBQVUsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsSUFBSSxLQUFLLENBQUMsSUFBSTtZQUFFLE1BQU07SUFDeEIsQ0FBQztJQUVELE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUN2QixDQUFDO0FBRUQsS0FBSyxVQUFVLFVBQVUsQ0FDdkIsUUFBd0IsRUFDeEIsS0FBYSxFQUNiLE9BQWlCO0lBRWpCLFVBQVUsQ0FBQztJQUVYLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDcEMsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUNoQixJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FDdEIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hCLEtBQUs7UUFDTCxPQUFPO0tBQ1IsQ0FBQyxNQUFNLENBQ1QsQ0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZUhvb2ssIGdldFdyaXRhYmxlIH0gZnJvbSAnQHdvcmtmbG93L2NvcmUnO1xuaW1wb3J0ICogYXMgeiBmcm9tICd6b2QnO1xuXG5leHBvcnQgY29uc3QgSG9vayA9IGRlZmluZUhvb2soe1xuICBzY2hlbWE6IHoub2JqZWN0KHtcbiAgICBkYXRhOiB6LnN0cmluZygpLFxuICAgIGRvbmU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgbWV0YWRhdGE6IHoudW5rbm93bigpLFxuICB9KSxcbn0pO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29sbGVjdFdpdGhIb29rKHRva2VuOiBzdHJpbmcsIGN1c3RvbURhdGE6IHN0cmluZykge1xuICAndXNlIHdvcmtmbG93JztcblxuICBjb25zdCBob29rID0gSG9vay5jcmVhdGUoeyB0b2tlbiwgbWV0YWRhdGE6IHsgY3VzdG9tRGF0YSB9IH0pO1xuICBjb25zdCBjb2xsZWN0ZWQ6IFBhcmFtZXRlcnM8KHR5cGVvZiBIb29rKVsncmVzdW1lJ10+WzFdW10gPSBbXTtcbiAgY29uc3Qgd2YgPSBnZXRXcml0YWJsZSgpO1xuICBhd2FpdCB3cml0ZUV2ZW50KHdmLCAnaG9va0NyZWF0ZWQnKTtcbiAgZm9yIGF3YWl0IChjb25zdCBldmVudCBvZiBob29rKSB7XG4gICAgYXdhaXQgd3JpdGVFdmVudCh3ZiwgJ2hvb2tSZXN1bWVkJywgZXZlbnQpO1xuICAgIGNvbGxlY3RlZC5wdXNoKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQuZG9uZSkgYnJlYWs7XG4gIH1cblxuICByZXR1cm4geyBjb2xsZWN0ZWQgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVFdmVudChcbiAgd3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtLFxuICBldmVudDogc3RyaW5nLFxuICBwYXlsb2FkPzogdW5rbm93blxuKSB7XG4gICd1c2Ugc3RlcCc7XG5cbiAgY29uc29sZS5sb2coJ3dyaXRpbmcgZXZlbnQnLCBldmVudCwgcGF5bG9hZCk7XG4gIGNvbnN0IHdyaXRlciA9IHdyaXRhYmxlLmdldFdyaXRlcigpO1xuICBhd2FpdCB3cml0ZXIud3JpdGUoXG4gICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFxuICAgICAgYCR7SlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBldmVudCxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgIH0pfVxcclxcbmBcbiAgICApXG4gICk7XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/world-testing",
3
- "version": "5.0.0-beta.6",
3
+ "version": "5.0.0-beta.8",
4
4
  "description": "Testing utilities and World implementation for Workflow SDK",
5
5
  "main": "dist/src/index.mjs",
6
6
  "files": [
@@ -21,10 +21,10 @@
21
21
  "hono": "4.12.3",
22
22
  "jsonlines": "0.1.1",
23
23
  "zod": "4.3.6",
24
- "@workflow/cli": "5.0.0-beta.6",
25
- "@workflow/core": "5.0.0-beta.6",
26
- "workflow": "5.0.0-beta.6",
27
- "@workflow/world": "5.0.0-beta.3"
24
+ "@workflow/cli": "5.0.0-beta.8",
25
+ "@workflow/core": "5.0.0-beta.8",
26
+ "workflow": "5.0.0-beta.8",
27
+ "@workflow/world": "5.0.0-beta.5"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@types/node": "22.19.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"addition.mjs","sourceRoot":"","sources":["../../src/addition.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,uBAAuB,EACvB,UAAU,EACV,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAC1B,KAAK,IAAI,EAAE;YACT,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC9C,OAAO,GAAG,CAAC;QACb,CAAC,EACD;YACE,QAAQ,EAAE,GAAG;YACb,OAAO,EAAE,MAAM;SAChB,CACF,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAC7C,GAAG,CAAC,MAAO,EACX,GAAG,CAAC,KAAK,EACT,SAAS,CACV,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { expect, test, vi } from 'vitest';\nimport { hydrateWorkflowReturnValue } from '@workflow/core/serialization';\nimport { createFetcher, startServer } from './util.mjs';\n\nexport function addition(world: string) {\n test('runs an addition', { timeout: 30_000 }, async () => {\n const server = await startServer({ world }).then(createFetcher);\n const result = await server.invoke(\n 'workflows/addition.ts',\n 'addition',\n [1, 2]\n );\n expect(result.runId).toMatch(/^wrun_.+/);\n const run = await vi.waitFor(\n async () => {\n const run = await server.getRun(result.runId);\n expect(run.status).toBe('completed');\n expect(run.output).toBeInstanceOf(Uint8Array);\n return run;\n },\n {\n interval: 200,\n timeout: 25_000,\n }\n );\n const output = await hydrateWorkflowReturnValue(\n run.output!,\n run.runId,\n undefined\n );\n expect(output).toEqual(3);\n });\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.mjs","sourceRoot":"","sources":["../../src/errors.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,IAAI,CAAC,4BAA4B,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,kCAAkC,EAClC,gCAAgC,EAChC,EAAE,CACH,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAC1B,KAAK,IAAI,EAAE;YACT,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAsB;gBAC7C,MAAM,EAAE,WAAW;aACpB,CAAC,CAAC;YACH,OAAO,GAAG,CAAC;QACb,CAAC,EACD;YACE,QAAQ,EAAE,GAAG;YACb,OAAO,EAAE,MAAM;SAChB,CACF,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,MAAM,0BAA0B,CAC9C,GAAG,CAAC,MAAO,EACX,GAAG,CAAC,KAAK,EACT,SAAS,CACV,CAAQ,CAAC;QACV,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,aAAa,EAAE,IAAI;YACnB,eAAe,EAAE;gBACf,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC5B,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;aAChC;SACF,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { expect, test, vi } from 'vitest';\nimport { hydrateWorkflowReturnValue } from '@workflow/core/serialization';\nimport { createFetcher, startServer } from './util.mjs';\n\nexport function errors(world: string) {\n test('retriable and fatal errors', { timeout: 59_000 }, async () => {\n const server = await startServer({ world }).then(createFetcher);\n const result = await server.invoke(\n 'workflows/retriable-and-fatal.ts',\n 'retryableAndFatalErrorWorkflow',\n []\n );\n expect(result.runId).toMatch(/^wrun_.+/);\n const run = await vi.waitFor(\n async () => {\n const run = await server.getRun(result.runId);\n expect(run).toMatchObject<Partial<typeof run>>({\n status: 'completed',\n });\n return run;\n },\n {\n interval: 200,\n timeout: 50_000,\n }\n );\n const output = (await hydrateWorkflowReturnValue(\n run.output!,\n run.runId,\n undefined\n )) as any;\n expect(output).toEqual({\n gotFatalError: true,\n retryableResult: {\n attempt: 2,\n duration: expect.any(Number),\n stepStartedAt: expect.any(Date),\n },\n });\n expect(output.retryableResult.duration).toBeGreaterThanOrEqual(2000);\n });\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.mjs","sourceRoot":"","sources":["../../src/hooks.mts"],"names":[],"mappings":"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","sourcesContent":["import { expect, test, vi } from 'vitest';\nimport { hydrateWorkflowReturnValue } from '@workflow/core/serialization';\nimport type { Hook } from '../workflows/hooks.ts';\nimport { jsonlines } from './jsonlines.mjs';\nimport { createFetcher, startServer } from './util.mjs';\n\nexport function hooks(world: string) {\n test('hooks', { timeout: 60_000 }, async () => {\n const server = await startServer({ world }).then(createFetcher);\n const token = Date.now().toString(36);\n const customData = `my-custom-data-${token}`;\n const result = await server.invoke(\n 'workflows/hooks.ts',\n 'collectWithHook',\n [token, customData]\n );\n expect(result.runId).toMatch(/^wrun_.+/);\n const readable = await server.getReadable(result.runId);\n const events = jsonlines(readable);\n const hookCreated = Promise.withResolvers<void>();\n const hookResumedEvents = [] as unknown[];\n\n (async () => {\n for await (const obj of events) {\n if (obj?.event === 'hookCreated') {\n hookCreated.resolve();\n continue;\n }\n\n if (obj?.event === 'hookResumed') {\n hookResumedEvents.push(obj.payload);\n continue;\n }\n\n console.log('unhandled event', obj);\n }\n })().catch(() => {\n // ignore errors for reading stream\n });\n\n await hookCreated.promise;\n\n (async () => {\n await server.resumeHook<typeof Hook>(token, {\n data: 'first payload',\n });\n await server.resumeHook<typeof Hook>(token, {\n data: 'second payload',\n });\n await server.resumeHook<typeof Hook>(token, {\n data: 'third payload',\n done: true,\n });\n })();\n\n const run = await vi.waitFor(\n async () => {\n const run = await server.getRun(result.runId);\n expect(run).toMatchObject<Partial<typeof run>>({\n status: 'completed',\n });\n return run;\n },\n {\n interval: 200,\n timeout: 59_000,\n }\n );\n\n const output = await hydrateWorkflowReturnValue(\n run.output!,\n run.runId,\n undefined\n );\n expect(output).toEqual({\n collected: [\n {\n data: 'first payload',\n metadata: { customData },\n },\n {\n data: 'second payload',\n metadata: { customData },\n },\n {\n data: 'third payload',\n metadata: { customData },\n done: true,\n },\n ],\n });\n });\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"idempotency.mjs","sourceRoot":"","sources":["../../src/idempotency.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAC1B,KAAK,IAAI,EAAE;YACT,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAsB;gBAC7C,MAAM,EAAE,WAAW;aACpB,CAAC,CAAC;YACH,OAAO,GAAG,CAAC;QACb,CAAC,EACD;YACE,QAAQ,EAAE,GAAG;YACb,OAAO,EAAE,MAAM;SAChB,CACF,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAC7C,GAAG,CAAC,MAAO,EACX,GAAG,CAAC,KAAK,EACT,SAAS,CACV,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { expect, test, vi } from 'vitest';\nimport { hydrateWorkflowReturnValue } from '@workflow/core/serialization';\nimport { createFetcher, startServer } from './util.mjs';\n\nexport function idempotency(world: string) {\n test('idempotency', { timeout: 60_000 }, async () => {\n const server = await startServer({ world }).then(createFetcher);\n const result = await server.invoke('workflows/noop.ts', 'brokenWf', [1, 2]);\n expect(result.runId).toMatch(/^wrun_.+/);\n const run = await vi.waitFor(\n async () => {\n const run = await server.getRun(result.runId);\n expect(run).toMatchObject<Partial<typeof run>>({\n status: 'completed',\n });\n return run;\n },\n {\n interval: 200,\n timeout: 59_000,\n }\n );\n\n const output = await hydrateWorkflowReturnValue(\n run.output!,\n run.runId,\n undefined\n );\n\n expect(output).toEqual({\n numbers: Array.from({ length: 20 }, () => expect.any(Number)),\n });\n });\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/index.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClB,WAAW,CAAC,OAAO,CAAC,CAAC;IACrB,KAAK,CAAC,OAAO,CAAC,CAAC;IACf,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,eAAe,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC","sourcesContent":["import { addition } from './addition.mjs';\nimport { errors } from './errors.mjs';\nimport { hooks } from './hooks.mjs';\nimport { idempotency } from './idempotency.mjs';\nimport { inlineExecution } from './inline-execution.mjs';\nimport { nullByte } from './null-byte.mjs';\n\nexport function createTestSuite(pkgName: string) {\n addition(pkgName);\n idempotency(pkgName);\n hooks(pkgName);\n nullByte(pkgName);\n errors(pkgName);\n inlineExecution(pkgName);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"inline-batches-debug.mjs","sourceRoot":"","sources":["../../src/inline-batches-debug.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,CACF,mEAAmE,EACnE,EAAE,OAAO,EAAE,MAAM,EAAE,EACnB,KAAK,IAAI,EAAE;QACT,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;YAC/B,KAAK;YACL,GAAG,EAAE;gBACH,KAAK,EAAE,oBAAoB;aAC5B;SACF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QAErC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,+BAA+B,EAC/B,4BAA4B,EAC5B,EAAE,CACH,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAC1B,KAAK,IAAI,EAAE;YACT,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACrC,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CACnC,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAC7C,GAAG,CAAC,MAAO,EACX,GAAG,CAAC,KAAK,EACT,SAAS,CACV,CAAC;QACF,0EAA0E;QAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;SAC3D,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE1E,8CAA8C;QAC9C,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAEhC,0BAA0B;QAE1B,mEAAmE;QACnE,qEAAqE;QACrE,MAAM,iBAAiB,GAAa,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC3C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBAAE,SAAS;QAC3D,CAAC;QACD,sEAAsE;QACtE,yEAAyE;QACzE,oEAAoE;QACpE,+BAA+B;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBAAE,SAAS;YAC9D,4CAA4C;YAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC7C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC9C,IAAI,CAAC;gBAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC;QAE9C,2DAA2D;QAC3D,MAAM,oBAAoB,GAAG,UAAU,CACrC,IAAI,EACJ,4CAA4C,EAC5C,MAAM,CAAC,KAAK,CACb,CAAC;QAEF,8DAA8D;QAC9D,MAAM,4BAA4B,GAAG,UAAU,CAC7C,IAAI,EACJ,+CAA+C,EAC/C,MAAM,CAAC,KAAK,CACb,CAAC;QAEF,6DAA6D;QAC7D,uEAAuE;QACvE,0EAA0E;QAC1E,oEAAoE;QACpE,sEAAsE;QACtE,yDAAyD;QACzD,MAAM,uBAAuB,GAAG,UAAU,CACxC,IAAI,EACJ,mCAAmC,EACnC,MAAM,CAAC,KAAK,CACb,CAAC;QACF,MAAM,kBAAkB,GAAG,UAAU,CACnC,IAAI,EACJ,uDAAuD,EACvD,MAAM,CAAC,KAAK,CACb,CAAC;QAEF,8EAA8E;QAC9E,MAAM,oBAAoB,GAAG,UAAU,CACrC,IAAI,EACJ,iCAAiC,EACjC,MAAM,CAAC,KAAK,CACb,CAAC;QAEF,oEAAoE;QACpE,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;QAE/D,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,6BAA6B,eAAe,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,8BAA8B,YAAY,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,6BAA6B,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CACT,yCAAyC,oBAAoB,EAAE,CAChE,CAAC;QACF,OAAO,CAAC,GAAG,CACT,2CAA2C,4BAA4B,EAAE,CAC1E,CAAC;QACF,OAAO,CAAC,GAAG,CACT,sDAAsD,uBAAuB,EAAE,CAChF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,uDAAuD,kBAAkB,EAAE,CAC5E,CAAC;QACF,OAAO,CAAC,GAAG,CACT,0CAA0C,oBAAoB,EAAE,CACjE,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,8BAA8B,aAAa,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QAEtD,kEAAkE;QAClE,+DAA+D;QAC/D,kEAAkE;QAClE,4BAA4B;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,QAAQ,GACZ,uQAAuQ,CAAC;QAC1Q,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;gBAAE,SAAS;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC7C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,qBAAqB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QAEtE,sEAAsE;QACtE,oDAAoD;QACpD,MAAM,aAAa,GAAG,CACpB,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC,IAAI,EAAE,CACpD,CAAC,MAAM,CAAC;QACT,MAAM,UAAU,GAAG,CACjB,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC,IAAI,EAAE,CAC/D,CAAC,MAAM,CAAC;QACT,MAAM,UAAU,GAAG,CACjB,IAAI,CAAC,KAAK,CAAC,+CAA+C,CAAC,IAAI,EAAE,CAClE,CAAC,MAAM,CAAC;QACT,MAAM,WAAW,GAAG,CAClB,IAAI,CAAC,KAAK,CAAC,mCAAmC,CAAC,IAAI,EAAE,CACtD,CAAC,MAAM,CAAC;QACT,MAAM,eAAe,GAAG,CACtB,IAAI,CAAC,KAAK,CAAC,uDAAuD,CAAC;YACnE,EAAE,CACH,CAAC,MAAM,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,mCAAmC,aAAa,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,8CAA8C,UAAU,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CACT,iDAAiD,UAAU,EAAE,CAC9D,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,qCAAqC,WAAW,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CACT,yDAAyD,eAAe,EAAE,CAC3E,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QAEvD,gEAAgE;QAChE,0DAA0D;QAC1D,qEAAqE;QACrE,qCAAqC;QACrC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;QACrD,MAAM,aAAa,GAAmD,EAAE,CAAC;QACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;gBAAE,SAAS;YACpE,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YACvD,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC;gBACd,kBAAkB,CAAC,GAAG,CACpB,EAAE,CAAC,CAAC,CAAE,EACN,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAC1C,CAAC;gBACF,aAAa,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAE,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,kBAAkB,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,KAAK,KAAK,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,uEAAuE;QACvE,+DAA+D;QAC/D,kDAAkD;QAClD,uEAAuE;QACvE,gDAAgD;QAChD,MAAM,UAAU,GAAG,MAAM,KAAK,CAC5B,oBAAoB,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CACvF,CAAC;QACF,MAAM,UAAU,GAAG,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAErD,CAAC;QACT,IAAI,UAAU,EAAE,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,0BAA0B,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAClE,kEAAkE;YAClE,8CAA8C;YAC9C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;YACpC,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC7C,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;oBAAE,SAAS;gBAChD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAClC,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM;qBAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,CAAC;qBACrD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC3B,OAAO,CAAC,GAAG,CACT,SAAS,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACtE,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,2DAA2D,CAC5D,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAE3D,+DAA+D;QAC/D,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,yEAAyE;QACzE,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,IAAY,EAAE,OAAe,EAAE,KAAc;IAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;YAAE,SAAS;QACvC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;QACxC,CAAC;QACD,CAAC,EAAE,CAAC;IACN,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC","sourcesContent":["import { expect, test, vi } from 'vitest';\nimport { hydrateWorkflowReturnValue } from '@workflow/core/serialization';\nimport { createFetcher, startServer } from './util.mjs';\n\n/**\n * Instrumented test: runs `threeBatchesOfFiveWorkflow` with\n * DEBUG=workflow:runtime:* and prints a summary of V2 handler behavior:\n * - total flow invocations\n * - per-invocation replay iterations\n * - event loads (full vs incremental) and sizes\n * - redundant/skipped step executions\n * - concurrent \"all parallel steps done\" replay races\n * - unconsumed-event skips\n *\n * Not part of the default suite; run with:\n * pnpm vitest run packages/world-testing/test/inline-batches-debug.test.ts\n */\nexport function inlineBatchesDebug(world: string) {\n test(\n 'three batches of five parallel steps — report V2 handler behavior',\n { timeout: 60_000 },\n async () => {\n const server = await startServer({\n world,\n env: {\n DEBUG: 'workflow:runtime:*',\n },\n });\n const client = createFetcher(server);\n\n const result = await client.invoke(\n 'workflows/inline-execution.ts',\n 'threeBatchesOfFiveWorkflow',\n []\n );\n\n const run = await vi.waitFor(\n async () => {\n const run = await client.getRun(result.runId);\n expect(run.status).toBe('completed');\n return run;\n },\n { interval: 200, timeout: 59_000 }\n );\n\n const output = await hydrateWorkflowReturnValue(\n run.output!,\n run.runId,\n undefined\n );\n // Expected output: 3 batches × [11, 21, 31, 41, 51] | [12, 22, ...] | ...\n expect(output).toEqual([\n 11, 21, 31, 41, 51, 12, 22, 32, 42, 52, 13, 23, 33, 43, 53,\n ]);\n\n const flowInvocations = await client.getFlowInvocationCount(result.runId);\n\n // Wait a short moment to flush late log lines\n await new Promise((r) => setTimeout(r, 500));\n const logs = server.getOutput();\n\n // --- Parse log lines ---\n\n // 1) Replay iterations + the `eventCount` passed into each replay.\n // The runtime logs: \"Starting workflow replay\" with `eventCount: N`.\n const replayEventCounts: number[] = [];\n for (const line of logs.split('\\n')) {\n if (!line.includes(result.runId)) continue;\n if (!line.includes('Starting workflow replay')) continue;\n }\n // eventCount is often on the next line in a multi-line object literal\n // (console.debug prints the second argument with util.inspect). Pull all\n // eventCount occurrences that are within ~6 lines of a replay start\n // line referencing this runId.\n const lines = logs.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n if (!lines[i]!.includes('Starting workflow replay')) continue;\n // find the runId in the surrounding 8 lines\n const window = lines.slice(i, i + 8).join('\\n');\n if (!window.includes(result.runId)) continue;\n const m = window.match(/eventCount:\\s*(\\d+)/);\n if (m) replayEventCounts.push(Number.parseInt(m[1]!, 10));\n }\n const replayStarts = replayEventCounts.length;\n\n // 3) \"All parallel steps done, replaying inline\" (per-run)\n const allDoneInlineReplays = matchCount(\n logs,\n /All parallel steps done, replaying inline/g,\n result.runId\n );\n\n // 4) \"Background step done but other steps pending\" (per-run)\n const backgroundStepPendingReturns = matchCount(\n logs,\n /Background step done but other steps pending/g,\n result.runId\n );\n\n // 5) Step skipped because step was already in terminal state\n // (background handler arrived after inline path already completed it).\n // This is emitted from the step_started conflict path in step-executor.ts\n // (\"Step in terminal state, skipping\"). The step_completed 409 path\n // (\"Tried completing step, but step has already finished\") fires only\n // when two handlers both ran the step body concurrently.\n const stepsSkippedAlreadyDone = matchCount(\n logs,\n /Step in terminal state, skipping/g,\n result.runId\n );\n const stepCompletedRaces = matchCount(\n logs,\n /Tried completing step, but step has already finished/g,\n result.runId\n );\n\n // 6) Unconsumed event skips (debug message emitted by workflow.ts skip logic)\n const unconsumedEventSkips = matchCount(\n logs,\n /Skipping unconsumed step event/g,\n result.runId\n );\n\n // 7) Hook/step started with already-running: via concurrent handler\n const maxDeliveries = matchCount(logs, /Max retries reached/g);\n\n console.log('\\n====================================');\n console.log('V2 handler behavior — 3 batches × 5 steps');\n console.log('====================================');\n console.log(`Flow handler invocations: ${flowInvocations}`);\n console.log(`Replay iterations (total): ${replayStarts}`);\n console.log(`Event counts per replay: [${replayEventCounts.join(', ')}]`);\n console.log(\n `\"All steps done, replay inline\" hits: ${allDoneInlineReplays}`\n );\n console.log(\n `\"Background step pending, return\" hits: ${backgroundStepPendingReturns}`\n );\n console.log(\n `Step skipped (already terminal, step_started 409): ${stepsSkippedAlreadyDone}`\n );\n console.log(\n `Step body ran twice (step_completed 409): ${stepCompletedRaces}`\n );\n console.log(\n `Unconsumed events skipped by consumer: ${unconsumedEventSkips}`\n );\n console.log(`Max retries reached (bad): ${maxDeliveries}`);\n console.log('====================================\\n');\n\n // Also print the key timeline: one line per \"significant\" runtime\n // debug event, in order. Many debug lines put the runId in the\n // metadata object on a following line, so look at a small forward\n // window around each match.\n const timeline: string[] = [];\n const sigRegex =\n /Starting workflow replay|All parallel steps done|Background step done but|Workflow suspended|Workflow replay completed|Run already finished, skipping background step|Step in terminal state|Tried completing step|Max retries reached|Skipping unconsumed step event/;\n for (let i = 0; i < lines.length; i++) {\n if (!sigRegex.test(lines[i]!)) continue;\n const window = lines.slice(i, i + 8).join('\\n');\n if (!window.includes(result.runId)) continue;\n timeline.push(lines[i]!);\n }\n console.log('--- Timeline (runtime debug events for this run) ---');\n for (const line of timeline) {\n const short = line.replace(/\\s+/g, ' ').slice(0, 180);\n console.log(short);\n }\n console.log(`Timeline entries: ${timeline.length}`);\n console.log('----------------------------------------------------\\n');\n\n // Raw counts — total occurrences in the whole log regardless of runId\n // (for sanity-checking the windowed matcher above).\n const rawUnconsumed = (\n logs.match(/Skipping unconsumed step event/g) || []\n ).length;\n const rawAllDone = (\n logs.match(/All parallel steps done, replaying inline/g) || []\n ).length;\n const rawPending = (\n logs.match(/Background step done but other steps pending/g) || []\n ).length;\n const rawTerminal = (\n logs.match(/Step in terminal state, skipping/g) || []\n ).length;\n const rawCompleted409 = (\n logs.match(/Tried completing step, but step has already finished/g) ||\n []\n ).length;\n console.log('--- Raw counts (no runId filter) ---');\n console.log(`Skipping unconsumed step event: ${rawUnconsumed}`);\n console.log(`All parallel steps done, replaying inline: ${rawAllDone}`);\n console.log(\n `Background step done but other steps pending: ${rawPending}`\n );\n console.log(`Step in terminal state, skipping: ${rawTerminal}`);\n console.log(\n `Tried completing step, but step has already finished: ${rawCompleted409}`\n );\n console.log('-------------------------------------\\n');\n\n // Breakdown of unconsumed event types. The log format emits the\n // message on one line and the metadata object (eventType,\n // correlationId) on the following lines. Walk a 12-line window after\n // each match and extract the fields.\n const skippedByEventType = new Map<string, number>();\n const skippedEvents: { eventType: string; correlationId: string }[] = [];\n for (let i = 0; i < lines.length; i++) {\n if (!lines[i]!.includes('Skipping unconsumed step event')) continue;\n const window = lines.slice(i, i + 12).join('\\n');\n const et = window.match(/eventType:\\s*'([^']+)'/);\n const cid = window.match(/correlationId:\\s*'([^']+)'/);\n if (et && cid) {\n skippedByEventType.set(\n et[1]!,\n (skippedByEventType.get(et[1]!) ?? 0) + 1\n );\n skippedEvents.push({ eventType: et[1]!, correlationId: cid[1]! });\n }\n }\n console.log('--- Unconsumed event type breakdown ---');\n for (const [eventType, count] of skippedByEventType) {\n console.log(` ${eventType}: ${count}`);\n }\n\n // For each skipped event, look up all occurrences of its correlationId\n // in the event log order so we can see whether it's a trailing\n // duplicate lifecycle event after step_completed.\n // We reconstruct event order from the \"replaying iteration\" logs isn't\n // reliable, so instead ask the server directly.\n const eventsResp = await fetch(\n `http://localhost:${server.info.port}/runs/${encodeURIComponent(result.runId)}/events`\n );\n const eventsData = (await eventsResp.json().catch(() => null)) as {\n events: { eventType: string; correlationId?: string }[];\n } | null;\n if (eventsData?.events) {\n console.log(` Total events in log: ${eventsData.events.length}`);\n // For each correlationId that had a skipped event, show the event\n // sequence in the log for that correlationId.\n const shownCids = new Set<string>();\n for (const skip of skippedEvents.slice(0, 6)) {\n if (shownCids.has(skip.correlationId)) continue;\n shownCids.add(skip.correlationId);\n const seq = eventsData.events\n .filter((e) => e.correlationId === skip.correlationId)\n .map((e) => e.eventType);\n console.log(\n ` cid=${skip.correlationId.slice(0, 20)}... seq=[${seq.join(', ')}]`\n );\n }\n } else {\n console.log(\n ' (events endpoint not available, skipping sequence dump)'\n );\n }\n console.log('-----------------------------------------\\n');\n\n // Sanity: the run did complete. Everything else is diagnostic.\n expect(run.status).toBe('completed');\n // Hard assertion: no step should have hit max retries for this workflow.\n expect(maxDeliveries).toBe(0);\n }\n );\n}\n\n/**\n * Count matches of `pattern` in `logs`. If `runId` is provided, only count\n * matches where `runId` appears within an 8-line window starting at the\n * match — many debug lines put `workflowRunId` in the metadata object on\n * a following line.\n */\nfunction matchCount(logs: string, pattern: RegExp, runId?: string): number {\n const lines = logs.split('\\n');\n let n = 0;\n for (let i = 0; i < lines.length; i++) {\n pattern.lastIndex = 0;\n if (!pattern.test(lines[i]!)) continue;\n if (runId) {\n const window = lines.slice(i, i + 8).join('\\n');\n if (!window.includes(runId)) continue;\n }\n n++;\n }\n return n;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"inline-execution.mjs","sourceRoot":"","sources":["../../src/inline-execution.mts"],"names":[],"mappings":"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","sourcesContent":["import { expect, test, vi } from 'vitest';\nimport { hydrateWorkflowReturnValue } from '@workflow/core/serialization';\nimport { createFetcher, startServer } from './util.mjs';\n\n/**\n * Tests that the V2 inline execution loop correctly minimizes flow\n * handler invocations. Each test verifies a specific pattern:\n *\n * - Sequential steps (no streams): 1 invocation\n * - Sequential steps with WritableStream: 1 invocation (sync flush)\n * - Sleep + step: 2 invocations (sleep requires queue round-trip)\n * - Parallel steps (Promise.all): 1-3 invocations depending on whether the\n * embedded harness observes the background step and continuation separately\n * - Hook + resume: 2 invocations (hook requires external resume)\n */\nexport function inlineExecution(world: string) {\n test(\n 'sequential steps complete in a single flow invocation',\n { timeout: 30_000 },\n async () => {\n const server = await startServer({ world }).then(createFetcher);\n const result = await server.invoke(\n 'workflows/inline-execution.ts',\n 'sequentialStepsWorkflow',\n [10]\n );\n\n const run = await vi.waitFor(\n async () => {\n const run = await server.getRun(result.runId);\n expect(run.status).toBe('completed');\n return run;\n },\n { interval: 200, timeout: 29_000 }\n );\n\n const output = await hydrateWorkflowReturnValue(\n run.output!,\n run.runId,\n undefined\n );\n expect(output).toBe(20);\n\n const count = await server.getFlowInvocationCount(result.runId);\n expect(count).toBe(1);\n }\n );\n\n test(\n 'sequential steps with stream complete in a single flow invocation',\n { timeout: 30_000 },\n async () => {\n const server = await startServer({ world }).then(createFetcher);\n const result = await server.invoke(\n 'workflows/inline-execution.ts',\n 'sequentialStepsWithStreamWorkflow',\n []\n );\n\n const run = await vi.waitFor(\n async () => {\n const run = await server.getRun(result.runId);\n expect(run.status).toBe('completed');\n return run;\n },\n { interval: 200, timeout: 29_000 }\n );\n\n const output = await hydrateWorkflowReturnValue(\n run.output!,\n run.runId,\n undefined\n );\n expect(output).toBe('hello world');\n\n const count = await server.getFlowInvocationCount(result.runId);\n expect(count).toBe(1);\n }\n );\n\n test(\n 'sleep workflow requires exactly 2 flow invocations',\n { timeout: 30_000 },\n async () => {\n const server = await startServer({ world }).then(createFetcher);\n const result = await server.invoke(\n 'workflows/inline-execution.ts',\n 'sleepWorkflow',\n []\n );\n\n const run = await vi.waitFor(\n async () => {\n const run = await server.getRun(result.runId);\n expect(run.status).toBe('completed');\n return run;\n },\n { interval: 200, timeout: 29_000 }\n );\n\n const output = await hydrateWorkflowReturnValue(\n run.output!,\n run.runId,\n undefined\n );\n expect(output).toBe(3);\n\n // Invocation 1: replay → sleep → return {timeoutSeconds}\n // Invocation 2: sleep completed → replay → step inline → complete\n const count = await server.getFlowInvocationCount(result.runId);\n expect(count).toBe(2);\n }\n );\n\n test(\n 'parallel steps (Promise.all) complete in 1-3 flow invocations',\n { timeout: 30_000 },\n async () => {\n const server = await startServer({ world }).then(createFetcher);\n const result = await server.invoke(\n 'workflows/inline-execution.ts',\n 'parallelStepsWorkflow',\n []\n );\n\n const run = await vi.waitFor(\n async () => {\n const run = await server.getRun(result.runId);\n expect(run.status).toBe('completed');\n return run;\n },\n { interval: 200, timeout: 29_000 }\n );\n\n const output = await hydrateWorkflowReturnValue(\n run.output!,\n run.runId,\n undefined\n );\n expect(output).toBe(33); // (10+1) + (20+2)\n\n // In the embedded harness the background step can finish quickly enough\n // that the run completes before we observe a distinct continuation pass,\n // so the lower bound is 1 even though production often shows 2.\n // With higher queue concurrency, the background step's continuation may\n // also race with the inline handler's loop, adding a 3rd no-op invocation.\n const count = await server.getFlowInvocationCount(result.runId);\n expect(count).toBeGreaterThanOrEqual(1);\n expect(count).toBeLessThanOrEqual(3);\n }\n );\n\n // Hook invocation counting is tested by the existing hooks test suite.\n // The hook pattern requires external resume, which involves complex\n // timing. The invocation count for hooks is 2: create + resume.\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsonlines.mjs","sourceRoot":"","sources":["../../src/jsonlines.mts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,SAAS,CAAC,QAAoC;IACnE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IACpC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,KAAK,SAAS,CAAC,CAAC,eAAe;QAC7B,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,MAAM,IAAI,IAAI,CAAC;YACf,KAAK,CAAC,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM;QACR,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,eAAe,EAAE,CAAC;AAC3B,CAAC","sourcesContent":["export async function* jsonlines(readable: ReadableStream<Uint8Array>) {\n const decoder = new TextDecoder();\n const reader = readable.getReader();\n let buffer = '';\n\n const bufferedLines = () => {\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n return lines;\n };\n\n async function* bufferedObjects() {\n const lines = bufferedLines();\n for (const line of lines) {\n try {\n yield JSON.parse(line);\n } catch {}\n }\n }\n\n while (true) {\n const read = await reader.read();\n if (read.value) {\n const text = decoder.decode(read.value, { stream: true });\n buffer += text;\n yield* bufferedObjects();\n }\n if (read.done) {\n break;\n }\n }\n\n yield* bufferedObjects();\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"null-byte.mjs","sourceRoot":"","sources":["../../src/null-byte.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,IAAI,CAAC,qCAAqC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,wBAAwB,EACxB,kBAAkB,EAClB,EAAE,CACH,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAC1B,KAAK,IAAI,EAAE;YACT,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC9C,OAAO,GAAG,CAAC;QACb,CAAC,EACD;YACE,QAAQ,EAAE,GAAG;YACb,OAAO,EAAE,MAAM;SAChB,CACF,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAC7C,GAAG,CAAC,MAAO,EACX,GAAG,CAAC,KAAK,EACT,SAAS,CACV,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { expect, test, vi } from 'vitest';\nimport { hydrateWorkflowReturnValue } from '@workflow/core/serialization';\nimport { createFetcher, startServer } from './util.mjs';\n\nexport function nullByte(world: string) {\n test('supports null bytes in step results', { timeout: 12_000 }, async () => {\n const server = await startServer({ world }).then(createFetcher);\n const result = await server.invoke(\n 'workflows/null-byte.ts',\n 'nullByteWorkflow',\n []\n );\n expect(result.runId).toMatch(/^wrun_.+/);\n const run = await vi.waitFor(\n async () => {\n const run = await server.getRun(result.runId);\n expect(run.status).toBe('completed');\n expect(run.output).toBeInstanceOf(Uint8Array);\n return run;\n },\n {\n interval: 200,\n timeout: 10_000,\n }\n );\n const output = await hydrateWorkflowReturnValue(\n run.output!,\n run.runId,\n undefined\n );\n expect(output).toEqual('null byte \\0');\n });\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.mjs","sourceRoot":"","sources":["../../src/server.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,QAAQ,MAAM,0CAA0C,CAAC;IAC9D,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;IACvC,OAAO,CAAC,KAAK,CACX,+DAA+D,CAChE,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAMD,MAAM,MAAM,GAAG,CAAC;KACb,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAyB,CAAC;IACrE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACtC,CAAC;KACD,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAuC,CAAC;IACzD,MAAM,QAAQ,GAAG,CAAC;SACf,IAAI,CACH,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAEnC,CACF;SACA,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvB,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;KAC7C,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,sEAAsE;AACtE,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEvD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;KACnB,IAAI,CAAC,+BAA+B,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACnD,uEAAuE;IACvE,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7C,8DAA8D;IAC9D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAA4B,CAAC;QAC9D,MAAM,KAAK,GACT,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ;YAC7B,CAAC,CAAC,IAAI,CAAC,KAAK;YACZ,CAAC,CAAC,OAAQ,IAAI,CAAC,OAA+C;gBACxD,EAAE,KAAK,KAAK,QAAQ;gBACxB,CAAC,CAAG,IAAI,CAAC,OAAmC,CAAC,KAAgB;gBAC7D,CAAC,CAAC,SAAS,CAAC;QAClB,IAAI,KAAK,EAAE,CAAC;YACV,oBAAoB,CAAC,GAAG,CACtB,KAAK,EACL,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;KACD,GAAG,CAAC,2BAA2B,EAAE,CAAC,GAAG,EAAE,EAAE;IACxC,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IACpE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC7B,CAAC,CAAC;KACD,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9C,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IAC7B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtD,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AAC5C,CAAC,CAAC;KACD,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACnC,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE;QAC7C,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAClD,CAAC,CAAC;KACD,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACjC,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACzD,2DAA2D;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC/C,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YAChC,OAAO;gBACL,MAAM,EAAE,YAAY;gBACpB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;aAC5C,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;QACxB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC,CAAC;KACD,GAAG,CAAC,uBAAuB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC;KACD,GAAG,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAoD,EAAE,CAAC;IACtE,IAAI,MAAM,GAAuB,SAAS,CAAC;IAC3C,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YACnC,KAAK;YACL,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;SACzC,CAAC,CAAC;QACH,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1B,SAAS,CAAC,IAAI,CAAC;gBACb,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,aAAa,EAAE,CAAC,CAAC,aAAa;aAC/B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM;QACzB,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;QAClC,IAAI,CAAC,MAAM;YAAE,MAAM;IACrB,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEL,KAAK,CACH;IACE,KAAK,EAAE,GAAG,CAAC,KAAK;IAChB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;CACpC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAExC,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACvE,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,IAAI,CACpC,SAAoC,CACrC,EAAE,CAAC;YACF,OAAO,CAAC,GAAG,CACT,mCAAmC,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,SAAS,CACvE;gBACE,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,YAAY;aACvB,CACF,GAAG,CACL,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC/B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CACtB,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAC9C,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAClE,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC,CACF,CAAC","sourcesContent":["import fs from 'node:fs';\nimport { serve } from '@hono/node-server';\nimport { Hono } from 'hono';\nimport { getHookByToken, getRun, resumeHook, start } from 'workflow/api';\nimport { getWorld } from 'workflow/runtime';\nimport * as z from 'zod';\nimport { POST as flowPOST } from '../.well-known/workflow/v1/flow.mjs';\nimport manifest from '../.well-known/workflow/v1/manifest.json' with {\n type: 'json',\n};\n\nif (!process.env.WORKFLOW_TARGET_WORLD) {\n console.error(\n 'Error: WORKFLOW_TARGET_WORLD environment variable is not set.'\n );\n process.exit(1);\n}\n\ntype Files = keyof typeof manifest.workflows;\ntype Workflows<F extends Files> = keyof (typeof manifest.workflows)[F];\ntype NonEmptyArray<T> = [T, ...T[]];\n\nconst Invoke = z\n .object({\n file: z.enum(Object.keys(manifest.workflows) as NonEmptyArray<Files>),\n workflow: z.string(),\n args: z.unknown().array().default([]),\n })\n .transform((obj) => {\n const file = obj.file as keyof typeof manifest.workflows;\n const workflow = z\n .enum(\n Object.keys(manifest.workflows[file]) as NonEmptyArray<\n Workflows<typeof file>\n >\n )\n .parse(obj.workflow);\n return {\n args: obj.args,\n workflow: manifest.workflows[file][workflow],\n };\n });\n\n// Track flow handler invocations per run for testing inline execution\nconst flowInvocationCounts = new Map<string, number>();\n\nconst app = new Hono()\n .post('/.well-known/workflow/v1/flow', async (ctx) => {\n // Clone the request to read the body for tracking without consuming it\n const cloned = ctx.req.raw.clone();\n const response = await flowPOST(ctx.req.raw);\n // Extract runId from the request body (queue message payload)\n try {\n const body = (await cloned.json()) as Record<string, unknown>;\n const runId =\n typeof body?.runId === 'string'\n ? body.runId\n : typeof (body.payload as Record<string, unknown> | undefined)\n ?.runId === 'string'\n ? ((body.payload as Record<string, unknown>).runId as string)\n : undefined;\n if (runId) {\n flowInvocationCounts.set(\n runId,\n (flowInvocationCounts.get(runId) ?? 0) + 1\n );\n }\n } catch {\n // Health check or non-JSON messages — ignore\n }\n return response;\n })\n .get('/_flow-invocations/:runId', (ctx) => {\n const count = flowInvocationCounts.get(ctx.req.param('runId')) ?? 0;\n return ctx.json({ count });\n })\n .get('/_manifest', (ctx) => ctx.json(manifest))\n .post('/invoke', async (ctx) => {\n const json = await ctx.req.json().then(Invoke.parse);\n const handler = await start(json.workflow, json.args);\n\n return ctx.json({ runId: handler.runId });\n })\n .post('/hooks/:token', async (ctx) => {\n const hook = await getHookByToken(ctx.req.param('token'));\n const { runId } = await resumeHook(hook.token, {\n ...(await ctx.req.json()),\n metadata: hook.metadata,\n });\n return ctx.json({ runId, hookId: hook.hookId });\n })\n .get('/runs/:runId', async (ctx) => {\n const world = await getWorld();\n const run = await world.runs.get(ctx.req.param('runId'));\n // Custom JSON serialization to handle Uint8Array as base64\n const json = JSON.stringify(run, (_key, value) => {\n if (value instanceof Uint8Array) {\n return {\n __type: 'Uint8Array',\n data: Buffer.from(value).toString('base64'),\n };\n }\n return value;\n });\n return new Response(json, {\n headers: { 'Content-Type': 'application/json' },\n });\n })\n .get('/runs/:runId/readable', async (ctx) => {\n const runId = ctx.req.param('runId');\n const run = getRun(runId);\n return new Response(run.getReadable());\n })\n .get('/runs/:runId/events', async (ctx) => {\n const runId = ctx.req.param('runId');\n const world = await getWorld();\n const allEvents: { eventType: string; correlationId?: string }[] = [];\n let cursor: string | undefined = undefined;\n while (true) {\n const page = await world.events.list({\n runId,\n pagination: { sortOrder: 'asc', cursor },\n });\n for (const e of page.data) {\n allEvents.push({\n eventType: e.eventType,\n correlationId: e.correlationId,\n });\n }\n if (!page.hasMore) break;\n cursor = page.cursor ?? undefined;\n if (!cursor) break;\n }\n return ctx.json({ events: allEvents });\n });\n\nserve(\n {\n fetch: app.fetch,\n port: Number(process.env.PORT) || 0,\n },\n async (info) => {\n console.log(`👂 listening on http://${info.address}:${info.port}`);\n console.log('');\n\n process.env.PORT = info.port.toString();\n\n for (const [filename, workflows] of Object.entries(manifest.workflows)) {\n for (const workflowName of Object.keys(\n workflows as Record<string, unknown>\n )) {\n console.log(\n `$ curl -X POST http://localhost:${info.port}/invoke -d '${JSON.stringify(\n {\n file: filename,\n workflow: workflowName,\n }\n )}'`\n );\n }\n }\n\n const world = await getWorld();\n if (world.start) {\n console.log(`starting background tasks...`);\n await world.start().then(\n () => console.log('background tasks started.'),\n (err) => console.error('❗ error starting background tasks:', err)\n );\n }\n\n if (process.env.CONTROL_FD === '3') {\n const control = fs.createWriteStream('', { fd: 3 });\n control.write(`${JSON.stringify({ state: 'listening', info })}\\n`);\n control.end();\n }\n }\n);\n"]}