@workflow/core 5.0.0-beta.27 → 5.0.0-beta.28

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.
Files changed (36) hide show
  1. package/dist/create-hook.d.ts +2 -2
  2. package/dist/create-hook.js +1 -1
  3. package/dist/runtime/get-world-lazy.d.ts +3 -12
  4. package/dist/runtime/get-world-lazy.d.ts.map +1 -1
  5. package/dist/runtime/get-world-lazy.js +7 -24
  6. package/dist/runtime/step-executor.d.ts.map +1 -1
  7. package/dist/runtime/step-executor.js +65 -35
  8. package/dist/runtime/step-handler.d.ts.map +1 -1
  9. package/dist/runtime/step-handler.js +8 -7
  10. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  11. package/dist/runtime/suspension-handler.js +94 -72
  12. package/dist/runtime/wait-continuation.d.ts +2 -2
  13. package/dist/runtime/wait-continuation.js +3 -3
  14. package/dist/runtime/world-init.d.ts +16 -41
  15. package/dist/runtime/world-init.d.ts.map +1 -1
  16. package/dist/runtime/world-init.js +17 -42
  17. package/dist/runtime/world-target.d.ts +11 -0
  18. package/dist/runtime/world-target.d.ts.map +1 -0
  19. package/dist/runtime/world-target.js +15 -0
  20. package/dist/runtime/world.d.ts +21 -9
  21. package/dist/runtime/world.d.ts.map +1 -1
  22. package/dist/runtime/world.js +40 -122
  23. package/dist/runtime.d.ts +2 -1
  24. package/dist/runtime.d.ts.map +1 -1
  25. package/dist/runtime.js +4 -2
  26. package/dist/serialization.d.ts.map +1 -1
  27. package/dist/serialization.js +24 -3
  28. package/dist/version.d.ts +1 -1
  29. package/dist/version.js +2 -2
  30. package/dist/workflow/create-hook.d.ts.map +1 -1
  31. package/dist/workflow/create-hook.js +4 -3
  32. package/dist/workflow/world-init-stub.d.ts +2 -2
  33. package/dist/workflow/world-init-stub.js +3 -3
  34. package/dist/workflow.d.ts.map +1 -1
  35. package/dist/workflow.js +6 -9
  36. package/package.json +11 -6
@@ -6,30 +6,17 @@
6
6
  * # Why this exists
7
7
  *
8
8
  * `getWorldLazy()` in `./get-world-lazy.ts` checks the globalThis cache
9
- * (populated by `world.ts`'s module-load side effect) before falling back
10
- * to a runtime-built dynamic `import('./world.js')`. When a server route
11
- * only consumes a single helper that goes through `getWorldLazy` — most
12
- * commonly `start` from `workflow/api` — webpack/turbopack tree-shake the
13
- * named import `{ getWorld } from './runtime/world.js'` out of
14
- * `runtime.ts`, taking `world.ts`'s module evaluation with it. The
9
+ * populated by `world.ts`'s module-load side effect. When a server route
10
+ * only consumes a helper that goes through `getWorldLazy` for example
11
+ * `start` from `workflow/api`, or `defineHook().resume()` from `workflow`
12
+ * — webpack/turbopack can tree-shake the named import `{ getWorld }` out
13
+ * of `runtime.ts`, taking `world.ts`'s module evaluation with it. The
15
14
  * globalThis registration never fires.
16
15
  *
17
- * `getWorldLazy` then falls through to its dynamic-import fallback, which
18
- * itself fails: webpack inlines `get-world-lazy.js` into the bundled route
19
- * file, so the relative specifier `./world.js` resolves against
20
- * `/var/task/<app>/.next/server/app/<...>/route.js` where no sibling
21
- * `world.js` exists — and Node throws `MODULE_NOT_FOUND`. The symptom is a
22
- * cold-start regression: the very first user request that goes through
23
- * `start()` fails until some other code path (typically the queue-driven
24
- * `/.well-known/workflow/v1/flow` route, which uses `getWorld` directly
25
- * via `workflowEntrypoint`) has loaded `world.ts` and populated the
26
- * cache.
27
- *
28
- * Importing this module for its side effect — exactly once, from the
29
- * host-side `workflow/api` (`packages/workflow/src/api.ts`) — guarantees
30
- * `world.ts` enters the bundle, the global is registered at module load,
31
- * and `getWorldLazy()` short-circuits to the registered function on the
32
- * first call.
16
+ * Importing this module for its side effect from the host-side `workflow`
17
+ * and `workflow/api` entries guarantees `world.ts` enters the bundle, the
18
+ * global is registered at module load, and `getWorldLazy()` short-circuits
19
+ * to the registered function on the first call.
33
20
  *
34
21
  * # Why a separate module instead of importing `./world.js` directly
35
22
  *
@@ -47,29 +34,17 @@
47
34
  * `workflow` condition active, so they pick up the stub and never reach
48
35
  * `world.ts`. Host bundlers (webpack, turbopack, Node.js) use the
49
36
  * `default` (or `node`) condition and pick up this file, loading
50
- * `world.ts` as intended. The split keeps `@workflow/world-vercel`,
51
- * `@workflow/world-local`, `cbor-x`, and other server-only deps out of
52
- * the workflow sandbox bundle.
53
- *
54
- * # Why we keep the `getWorldLazy` dynamic-import fallback
55
- *
56
- * The fallback remains in `./get-world-lazy.ts` as a defense-in-depth for
57
- * environments we haven't accounted for (CJS test runners, scripts that
58
- * import `start` without going through `workflow/api`, future bundlers
59
- * with stricter tree-shaking). With this init module in place, the
60
- * fallback should never fire in normal use — but if it does, the
61
- * dynamic-import branch still resolves correctly when `world.js` is
62
- * physically adjacent on disk (e.g., direct Node.js execution of
63
- * unbundled source).
37
+ * `world.ts` as intended. The split keeps the configured world package
38
+ * and other server-only deps out of the workflow sandbox bundle.
64
39
  *
65
40
  * # Maintenance notes
66
41
  *
67
42
  * If you add another `getWorldLazy()` consumer that's reachable from a
68
- * host route without going through `workflow/api` (e.g., a new helper in
69
- * `workflow/runtime`), make sure that entry also imports this module —
70
- * or that it transitively reaches `world.ts` via a non-tree-shakeable
71
- * path. Adding a regression test in `world-init.test.ts` is preferred to
72
- * relying on careful manual tracing.
43
+ * host route without going through `workflow` or `workflow/api`, make
44
+ * sure that entry also imports this module — or that it transitively
45
+ * reaches `world.ts` via a non-tree-shakeable path. Adding a regression
46
+ * test in `world-init.test.ts` is preferred to relying on careful manual
47
+ * tracing.
73
48
  */
74
49
  import './world.js';
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ybGQtaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3dvcmxkLWluaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdFRztBQUNILE9BQU8sWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZXJ2ZXItb25seSBzaWRlLWVmZmVjdCBtb2R1bGUgdGhhdCBlbnN1cmVzIGB3b3JsZC50c2AgaXMgbG9hZGVkIHNvIGl0c1xuICogbW9kdWxlLWxvYWQgc2lkZSBlZmZlY3Qg4oCUIGBnbG9iYWxUaGlzW0dldFdvcmxkRm5LZXldID8/PSBnZXRXb3JsZGAg4oCUXG4gKiBmaXJlcyBpbiBob3N0IGJ1bmRsZXMuXG4gKlxuICogIyBXaHkgdGhpcyBleGlzdHNcbiAqXG4gKiBgZ2V0V29ybGRMYXp5KClgIGluIGAuL2dldC13b3JsZC1sYXp5LnRzYCBjaGVja3MgdGhlIGdsb2JhbFRoaXMgY2FjaGVcbiAqIChwb3B1bGF0ZWQgYnkgYHdvcmxkLnRzYCdzIG1vZHVsZS1sb2FkIHNpZGUgZWZmZWN0KSBiZWZvcmUgZmFsbGluZyBiYWNrXG4gKiB0byBhIHJ1bnRpbWUtYnVpbHQgZHluYW1pYyBgaW1wb3J0KCcuL3dvcmxkLmpzJylgLiBXaGVuIGEgc2VydmVyIHJvdXRlXG4gKiBvbmx5IGNvbnN1bWVzIGEgc2luZ2xlIGhlbHBlciB0aGF0IGdvZXMgdGhyb3VnaCBgZ2V0V29ybGRMYXp5YCDigJQgbW9zdFxuICogY29tbW9ubHkgYHN0YXJ0YCBmcm9tIGB3b3JrZmxvdy9hcGlgIOKAlCB3ZWJwYWNrL3R1cmJvcGFjayB0cmVlLXNoYWtlIHRoZVxuICogbmFtZWQgaW1wb3J0IGB7IGdldFdvcmxkIH0gZnJvbSAnLi9ydW50aW1lL3dvcmxkLmpzJ2Agb3V0IG9mXG4gKiBgcnVudGltZS50c2AsIHRha2luZyBgd29ybGQudHNgJ3MgbW9kdWxlIGV2YWx1YXRpb24gd2l0aCBpdC4gVGhlXG4gKiBnbG9iYWxUaGlzIHJlZ2lzdHJhdGlvbiBuZXZlciBmaXJlcy5cbiAqXG4gKiBgZ2V0V29ybGRMYXp5YCB0aGVuIGZhbGxzIHRocm91Z2ggdG8gaXRzIGR5bmFtaWMtaW1wb3J0IGZhbGxiYWNrLCB3aGljaFxuICogaXRzZWxmIGZhaWxzOiB3ZWJwYWNrIGlubGluZXMgYGdldC13b3JsZC1sYXp5LmpzYCBpbnRvIHRoZSBidW5kbGVkIHJvdXRlXG4gKiBmaWxlLCBzbyB0aGUgcmVsYXRpdmUgc3BlY2lmaWVyIGAuL3dvcmxkLmpzYCByZXNvbHZlcyBhZ2FpbnN0XG4gKiBgL3Zhci90YXNrLzxhcHA+Ly5uZXh0L3NlcnZlci9hcHAvPC4uLj4vcm91dGUuanNgIOKAlCB3aGVyZSBubyBzaWJsaW5nXG4gKiBgd29ybGQuanNgIGV4aXN0cyDigJQgYW5kIE5vZGUgdGhyb3dzIGBNT0RVTEVfTk9UX0ZPVU5EYC4gVGhlIHN5bXB0b20gaXMgYVxuICogY29sZC1zdGFydCByZWdyZXNzaW9uOiB0aGUgdmVyeSBmaXJzdCB1c2VyIHJlcXVlc3QgdGhhdCBnb2VzIHRocm91Z2hcbiAqIGBzdGFydCgpYCBmYWlscyB1bnRpbCBzb21lIG90aGVyIGNvZGUgcGF0aCAodHlwaWNhbGx5IHRoZSBxdWV1ZS1kcml2ZW5cbiAqIGAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvZmxvd2Agcm91dGUsIHdoaWNoIHVzZXMgYGdldFdvcmxkYCBkaXJlY3RseVxuICogdmlhIGB3b3JrZmxvd0VudHJ5cG9pbnRgKSBoYXMgbG9hZGVkIGB3b3JsZC50c2AgYW5kIHBvcHVsYXRlZCB0aGVcbiAqIGNhY2hlLlxuICpcbiAqIEltcG9ydGluZyB0aGlzIG1vZHVsZSBmb3IgaXRzIHNpZGUgZWZmZWN0IOKAlCBleGFjdGx5IG9uY2UsIGZyb20gdGhlXG4gKiBob3N0LXNpZGUgYHdvcmtmbG93L2FwaWAgKGBwYWNrYWdlcy93b3JrZmxvdy9zcmMvYXBpLnRzYCkg4oCUIGd1YXJhbnRlZXNcbiAqIGB3b3JsZC50c2AgZW50ZXJzIHRoZSBidW5kbGUsIHRoZSBnbG9iYWwgaXMgcmVnaXN0ZXJlZCBhdCBtb2R1bGUgbG9hZCxcbiAqIGFuZCBgZ2V0V29ybGRMYXp5KClgIHNob3J0LWNpcmN1aXRzIHRvIHRoZSByZWdpc3RlcmVkIGZ1bmN0aW9uIG9uIHRoZVxuICogZmlyc3QgY2FsbC5cbiAqXG4gKiAjIFdoeSBhIHNlcGFyYXRlIG1vZHVsZSBpbnN0ZWFkIG9mIGltcG9ydGluZyBgLi93b3JsZC5qc2AgZGlyZWN0bHlcbiAqXG4gKiBgd29ybGQudHNgIGlzIGludGVybmFsIHRvIGBAd29ya2Zsb3cvY29yZWAgYW5kIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWNcbiAqIGV4cG9ydHMgc3VyZmFjZS4gQWRkaW5nIGEgZGVkaWNhdGVkIHB1YmxpYyBpbml0IGVudHJ5ICh0aGlzIGZpbGUpXG4gKiBrZWVwcyB0aGUgc2lkZS1lZmZlY3QgaW50ZW50IG9idmlvdXMgdG8gYW55b25lIHJlYWRpbmdcbiAqIGBwYWNrYWdlcy93b3JrZmxvdy9zcmMvYXBpLnRzYCwgYW5kIGxldHMgdGhlIGB3b3JrZmxvd2AgZXhwb3J0XG4gKiBjb25kaXRpb24gcm91dGUgdG8gYSBzdHViIGZvciBWTS9zdGVwIGJ1bmRsZXMgKHNlZSBiZWxvdykuXG4gKlxuICogIyBXaHkgdGhpcyBkb2Vzbid0IGJyZWFrIFZNL3N0ZXAgYnVuZGxlc1xuICpcbiAqIFRoZSBgQHdvcmtmbG93L2NvcmUvcnVudGltZS93b3JsZC1pbml0YCBleHBvcnQgcmVzb2x2ZXMgdmlhIHRoZVxuICogYHdvcmtmbG93YCBjb25kaXRpb24gdG8gYC4vZGlzdC93b3JrZmxvdy93b3JsZC1pbml0LXN0dWIuanNgLCBhbiBlbXB0eVxuICogbW9kdWxlLiBFc2J1aWxkIHJ1bnMgdGhlIHdvcmtmbG93IFZNIGFuZCBzdGVwIGJ1bmRsZXJzIHdpdGggdGhlXG4gKiBgd29ya2Zsb3dgIGNvbmRpdGlvbiBhY3RpdmUsIHNvIHRoZXkgcGljayB1cCB0aGUgc3R1YiBhbmQgbmV2ZXIgcmVhY2hcbiAqIGB3b3JsZC50c2AuIEhvc3QgYnVuZGxlcnMgKHdlYnBhY2ssIHR1cmJvcGFjaywgTm9kZS5qcykgdXNlIHRoZVxuICogYGRlZmF1bHRgIChvciBgbm9kZWApIGNvbmRpdGlvbiBhbmQgcGljayB1cCB0aGlzIGZpbGUsIGxvYWRpbmdcbiAqIGB3b3JsZC50c2AgYXMgaW50ZW5kZWQuIFRoZSBzcGxpdCBrZWVwcyBgQHdvcmtmbG93L3dvcmxkLXZlcmNlbGAsXG4gKiBgQHdvcmtmbG93L3dvcmxkLWxvY2FsYCwgYGNib3IteGAsIGFuZCBvdGhlciBzZXJ2ZXItb25seSBkZXBzIG91dCBvZlxuICogdGhlIHdvcmtmbG93IHNhbmRib3ggYnVuZGxlLlxuICpcbiAqICMgV2h5IHdlIGtlZXAgdGhlIGBnZXRXb3JsZExhenlgIGR5bmFtaWMtaW1wb3J0IGZhbGxiYWNrXG4gKlxuICogVGhlIGZhbGxiYWNrIHJlbWFpbnMgaW4gYC4vZ2V0LXdvcmxkLWxhenkudHNgIGFzIGEgZGVmZW5zZS1pbi1kZXB0aCBmb3JcbiAqIGVudmlyb25tZW50cyB3ZSBoYXZlbid0IGFjY291bnRlZCBmb3IgKENKUyB0ZXN0IHJ1bm5lcnMsIHNjcmlwdHMgdGhhdFxuICogaW1wb3J0IGBzdGFydGAgd2l0aG91dCBnb2luZyB0aHJvdWdoIGB3b3JrZmxvdy9hcGlgLCBmdXR1cmUgYnVuZGxlcnNcbiAqIHdpdGggc3RyaWN0ZXIgdHJlZS1zaGFraW5nKS4gV2l0aCB0aGlzIGluaXQgbW9kdWxlIGluIHBsYWNlLCB0aGVcbiAqIGZhbGxiYWNrIHNob3VsZCBuZXZlciBmaXJlIGluIG5vcm1hbCB1c2Ug4oCUIGJ1dCBpZiBpdCBkb2VzLCB0aGVcbiAqIGR5bmFtaWMtaW1wb3J0IGJyYW5jaCBzdGlsbCByZXNvbHZlcyBjb3JyZWN0bHkgd2hlbiBgd29ybGQuanNgIGlzXG4gKiBwaHlzaWNhbGx5IGFkamFjZW50IG9uIGRpc2sgKGUuZy4sIGRpcmVjdCBOb2RlLmpzIGV4ZWN1dGlvbiBvZlxuICogdW5idW5kbGVkIHNvdXJjZSkuXG4gKlxuICogIyBNYWludGVuYW5jZSBub3Rlc1xuICpcbiAqIElmIHlvdSBhZGQgYW5vdGhlciBgZ2V0V29ybGRMYXp5KClgIGNvbnN1bWVyIHRoYXQncyByZWFjaGFibGUgZnJvbSBhXG4gKiBob3N0IHJvdXRlIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCBgd29ya2Zsb3cvYXBpYCAoZS5nLiwgYSBuZXcgaGVscGVyIGluXG4gKiBgd29ya2Zsb3cvcnVudGltZWApLCBtYWtlIHN1cmUgdGhhdCBlbnRyeSBhbHNvIGltcG9ydHMgdGhpcyBtb2R1bGUg4oCUXG4gKiBvciB0aGF0IGl0IHRyYW5zaXRpdmVseSByZWFjaGVzIGB3b3JsZC50c2AgdmlhIGEgbm9uLXRyZWUtc2hha2VhYmxlXG4gKiBwYXRoLiBBZGRpbmcgYSByZWdyZXNzaW9uIHRlc3QgaW4gYHdvcmxkLWluaXQudGVzdC50c2AgaXMgcHJlZmVycmVkIHRvXG4gKiByZWx5aW5nIG9uIGNhcmVmdWwgbWFudWFsIHRyYWNpbmcuXG4gKi9cbmltcG9ydCAnLi93b3JsZC5qcyc7XG4iXX0=
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ybGQtaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3dvcmxkLWluaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NHO0FBQ0gsT0FBTyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlcnZlci1vbmx5IHNpZGUtZWZmZWN0IG1vZHVsZSB0aGF0IGVuc3VyZXMgYHdvcmxkLnRzYCBpcyBsb2FkZWQgc28gaXRzXG4gKiBtb2R1bGUtbG9hZCBzaWRlIGVmZmVjdCDigJQgYGdsb2JhbFRoaXNbR2V0V29ybGRGbktleV0gPz89IGdldFdvcmxkYCDigJRcbiAqIGZpcmVzIGluIGhvc3QgYnVuZGxlcy5cbiAqXG4gKiAjIFdoeSB0aGlzIGV4aXN0c1xuICpcbiAqIGBnZXRXb3JsZExhenkoKWAgaW4gYC4vZ2V0LXdvcmxkLWxhenkudHNgIGNoZWNrcyB0aGUgZ2xvYmFsVGhpcyBjYWNoZVxuICogcG9wdWxhdGVkIGJ5IGB3b3JsZC50c2AncyBtb2R1bGUtbG9hZCBzaWRlIGVmZmVjdC4gV2hlbiBhIHNlcnZlciByb3V0ZVxuICogb25seSBjb25zdW1lcyBhIGhlbHBlciB0aGF0IGdvZXMgdGhyb3VnaCBgZ2V0V29ybGRMYXp5YCDigJQgZm9yIGV4YW1wbGVcbiAqIGBzdGFydGAgZnJvbSBgd29ya2Zsb3cvYXBpYCwgb3IgYGRlZmluZUhvb2soKS5yZXN1bWUoKWAgZnJvbSBgd29ya2Zsb3dgXG4gKiDigJQgd2VicGFjay90dXJib3BhY2sgY2FuIHRyZWUtc2hha2UgdGhlIG5hbWVkIGltcG9ydCBgeyBnZXRXb3JsZCB9YCBvdXRcbiAqIG9mIGBydW50aW1lLnRzYCwgdGFraW5nIGB3b3JsZC50c2AncyBtb2R1bGUgZXZhbHVhdGlvbiB3aXRoIGl0LiBUaGVcbiAqIGdsb2JhbFRoaXMgcmVnaXN0cmF0aW9uIG5ldmVyIGZpcmVzLlxuICpcbiAqIEltcG9ydGluZyB0aGlzIG1vZHVsZSBmb3IgaXRzIHNpZGUgZWZmZWN0IGZyb20gdGhlIGhvc3Qtc2lkZSBgd29ya2Zsb3dgXG4gKiBhbmQgYHdvcmtmbG93L2FwaWAgZW50cmllcyBndWFyYW50ZWVzIGB3b3JsZC50c2AgZW50ZXJzIHRoZSBidW5kbGUsIHRoZVxuICogZ2xvYmFsIGlzIHJlZ2lzdGVyZWQgYXQgbW9kdWxlIGxvYWQsIGFuZCBgZ2V0V29ybGRMYXp5KClgIHNob3J0LWNpcmN1aXRzXG4gKiB0byB0aGUgcmVnaXN0ZXJlZCBmdW5jdGlvbiBvbiB0aGUgZmlyc3QgY2FsbC5cbiAqXG4gKiAjIFdoeSBhIHNlcGFyYXRlIG1vZHVsZSBpbnN0ZWFkIG9mIGltcG9ydGluZyBgLi93b3JsZC5qc2AgZGlyZWN0bHlcbiAqXG4gKiBgd29ybGQudHNgIGlzIGludGVybmFsIHRvIGBAd29ya2Zsb3cvY29yZWAgYW5kIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWNcbiAqIGV4cG9ydHMgc3VyZmFjZS4gQWRkaW5nIGEgZGVkaWNhdGVkIHB1YmxpYyBpbml0IGVudHJ5ICh0aGlzIGZpbGUpXG4gKiBrZWVwcyB0aGUgc2lkZS1lZmZlY3QgaW50ZW50IG9idmlvdXMgdG8gYW55b25lIHJlYWRpbmdcbiAqIGBwYWNrYWdlcy93b3JrZmxvdy9zcmMvYXBpLnRzYCwgYW5kIGxldHMgdGhlIGB3b3JrZmxvd2AgZXhwb3J0XG4gKiBjb25kaXRpb24gcm91dGUgdG8gYSBzdHViIGZvciBWTS9zdGVwIGJ1bmRsZXMgKHNlZSBiZWxvdykuXG4gKlxuICogIyBXaHkgdGhpcyBkb2Vzbid0IGJyZWFrIFZNL3N0ZXAgYnVuZGxlc1xuICpcbiAqIFRoZSBgQHdvcmtmbG93L2NvcmUvcnVudGltZS93b3JsZC1pbml0YCBleHBvcnQgcmVzb2x2ZXMgdmlhIHRoZVxuICogYHdvcmtmbG93YCBjb25kaXRpb24gdG8gYC4vZGlzdC93b3JrZmxvdy93b3JsZC1pbml0LXN0dWIuanNgLCBhbiBlbXB0eVxuICogbW9kdWxlLiBFc2J1aWxkIHJ1bnMgdGhlIHdvcmtmbG93IFZNIGFuZCBzdGVwIGJ1bmRsZXJzIHdpdGggdGhlXG4gKiBgd29ya2Zsb3dgIGNvbmRpdGlvbiBhY3RpdmUsIHNvIHRoZXkgcGljayB1cCB0aGUgc3R1YiBhbmQgbmV2ZXIgcmVhY2hcbiAqIGB3b3JsZC50c2AuIEhvc3QgYnVuZGxlcnMgKHdlYnBhY2ssIHR1cmJvcGFjaywgTm9kZS5qcykgdXNlIHRoZVxuICogYGRlZmF1bHRgIChvciBgbm9kZWApIGNvbmRpdGlvbiBhbmQgcGljayB1cCB0aGlzIGZpbGUsIGxvYWRpbmdcbiAqIGB3b3JsZC50c2AgYXMgaW50ZW5kZWQuIFRoZSBzcGxpdCBrZWVwcyB0aGUgY29uZmlndXJlZCB3b3JsZCBwYWNrYWdlXG4gKiBhbmQgb3RoZXIgc2VydmVyLW9ubHkgZGVwcyBvdXQgb2YgdGhlIHdvcmtmbG93IHNhbmRib3ggYnVuZGxlLlxuICpcbiAqICMgTWFpbnRlbmFuY2Ugbm90ZXNcbiAqXG4gKiBJZiB5b3UgYWRkIGFub3RoZXIgYGdldFdvcmxkTGF6eSgpYCBjb25zdW1lciB0aGF0J3MgcmVhY2hhYmxlIGZyb20gYVxuICogaG9zdCByb3V0ZSB3aXRob3V0IGdvaW5nIHRocm91Z2ggYHdvcmtmbG93YCBvciBgd29ya2Zsb3cvYXBpYCwgbWFrZVxuICogc3VyZSB0aGF0IGVudHJ5IGFsc28gaW1wb3J0cyB0aGlzIG1vZHVsZSDigJQgb3IgdGhhdCBpdCB0cmFuc2l0aXZlbHlcbiAqIHJlYWNoZXMgYHdvcmxkLnRzYCB2aWEgYSBub24tdHJlZS1zaGFrZWFibGUgcGF0aC4gQWRkaW5nIGEgcmVncmVzc2lvblxuICogdGVzdCBpbiBgd29ybGQtaW5pdC50ZXN0LnRzYCBpcyBwcmVmZXJyZWQgdG8gcmVseWluZyBvbiBjYXJlZnVsIG1hbnVhbFxuICogdHJhY2luZy5cbiAqL1xuaW1wb3J0ICcuL3dvcmxkLmpzJztcbiJdfQ==
@@ -0,0 +1,11 @@
1
+ import type { World } from '@workflow/world';
2
+ /**
3
+ * Unaliased target stub.
4
+ *
5
+ * Framework integrations alias this module to the configured world package at
6
+ * build time, including the default local world. Reaching this file means that
7
+ * static injection did not happen, so fail loudly instead of importing a
8
+ * fallback world that bundlers could retain alongside the configured one.
9
+ */
10
+ export declare function createWorld(): World | Promise<World>;
11
+ //# sourceMappingURL=world-target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world-target.d.ts","sourceRoot":"","sources":["../../src/runtime/world-target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAQ7C;;;;;;;GAOG;AACH,wBAAgB,WAAW,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAEpD"}
@@ -0,0 +1,15 @@
1
+ function throwMissingStaticInjection() {
2
+ throw new Error('Workflow target world was not statically injected. Configure a Workflow builder/framework plugin so @workflow/core/runtime/world-target is aliased to the selected world package.');
3
+ }
4
+ /**
5
+ * Unaliased target stub.
6
+ *
7
+ * Framework integrations alias this module to the configured world package at
8
+ * build time, including the default local world. Reaching this file means that
9
+ * static injection did not happen, so fail loudly instead of importing a
10
+ * fallback world that bundlers could retain alongside the configured one.
11
+ */
12
+ export function createWorld() {
13
+ throwMissingStaticInjection();
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ybGQtdGFyZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvd29ybGQtdGFyZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLFNBQVMsMkJBQTJCO0lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQ2IsbUxBQW1MLENBQ3BMLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxXQUFXO0lBQ3pCLDJCQUEyQixFQUFFLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgV29ybGQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuXG5mdW5jdGlvbiB0aHJvd01pc3NpbmdTdGF0aWNJbmplY3Rpb24oKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ1dvcmtmbG93IHRhcmdldCB3b3JsZCB3YXMgbm90IHN0YXRpY2FsbHkgaW5qZWN0ZWQuIENvbmZpZ3VyZSBhIFdvcmtmbG93IGJ1aWxkZXIvZnJhbWV3b3JrIHBsdWdpbiBzbyBAd29ya2Zsb3cvY29yZS9ydW50aW1lL3dvcmxkLXRhcmdldCBpcyBhbGlhc2VkIHRvIHRoZSBzZWxlY3RlZCB3b3JsZCBwYWNrYWdlLidcbiAgKTtcbn1cblxuLyoqXG4gKiBVbmFsaWFzZWQgdGFyZ2V0IHN0dWIuXG4gKlxuICogRnJhbWV3b3JrIGludGVncmF0aW9ucyBhbGlhcyB0aGlzIG1vZHVsZSB0byB0aGUgY29uZmlndXJlZCB3b3JsZCBwYWNrYWdlIGF0XG4gKiBidWlsZCB0aW1lLCBpbmNsdWRpbmcgdGhlIGRlZmF1bHQgbG9jYWwgd29ybGQuIFJlYWNoaW5nIHRoaXMgZmlsZSBtZWFucyB0aGF0XG4gKiBzdGF0aWMgaW5qZWN0aW9uIGRpZCBub3QgaGFwcGVuLCBzbyBmYWlsIGxvdWRseSBpbnN0ZWFkIG9mIGltcG9ydGluZyBhXG4gKiBmYWxsYmFjayB3b3JsZCB0aGF0IGJ1bmRsZXJzIGNvdWxkIHJldGFpbiBhbG9uZ3NpZGUgdGhlIGNvbmZpZ3VyZWQgb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV29ybGQoKTogV29ybGQgfCBQcm9taXNlPFdvcmxkPiB7XG4gIHRocm93TWlzc2luZ1N0YXRpY0luamVjdGlvbigpO1xufVxuIl19
@@ -1,15 +1,27 @@
1
1
  import type { World } from '@workflow/world';
2
+ export type WorldFactoryModule = {
3
+ createWorld?: () => World | Promise<World>;
4
+ /** @deprecated World packages should export `createWorld()` instead. */
5
+ createLocalWorld?: () => World | Promise<World>;
6
+ /** @deprecated World packages should export `createWorld()` instead. */
7
+ createVercelWorld?: () => World | Promise<World>;
8
+ default?: (() => World | Promise<World>) | World;
9
+ };
2
10
  /**
3
- * Create a new world instance based on environment variables.
4
- * WORKFLOW_TARGET_WORLD is used to determine the target world.
11
+ * Create a World instance from a world factory module. Shared by
12
+ * `createWorld()` (for the statically injected target world module) and
13
+ * tooling that loads a world module dynamically (e.g. the Nitro dev
14
+ * handler and `@workflow/world-testing`). Legacy world-specific factory
15
+ * names are still accepted for compatibility, but world packages should
16
+ * export `createWorld()`.
17
+ */
18
+ export declare function createWorldFromModule(mod: WorldFactoryModule): World | Promise<World>;
19
+ /**
20
+ * Create a new world instance from the statically imported target world module.
5
21
  *
6
- * Note: WORKFLOW_VERCEL_* env vars (PROJECT, TEAM, AUTH_TOKEN, etc.) are
7
- * intentionally NOT read here. Those are for CLI/observability tooling only
8
- * and should not affect runtime behavior. The Vercel runtime provides
9
- * authentication via OIDC tokens and project context via system env vars
10
- * (VERCEL_DEPLOYMENT_ID, VERCEL_PROJECT_ID). Tooling that needs these env
11
- * vars should call createVercelWorld() directly with an explicit config and
12
- * use setWorld() to inject the instance.
22
+ * Framework integrations alias `@workflow/core/runtime/world-target` to the
23
+ * concrete world package at build time, so bundlers see a static import path
24
+ * instead of tracing a runtime-built require/import expression.
13
25
  */
14
26
  export declare const createWorld: () => Promise<World>;
15
27
  export type WorldHandlers = Pick<World, 'createQueueHandler' | 'specVersion'>;
@@ -1 +1 @@
1
- {"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../../src/runtime/world.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAmF7C;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,KAAK,CA6DjD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,oBAAoB,GAAG,aAAa,CAAC,CAAC;AAE9E;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,aAAa,CAoB9D,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAa,OAAO,CAAC,KAAK,CAgB9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,KAAK,GAAG,SAAS,KAAG,IAKnD,CAAC"}
1
+ {"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../../src/runtime/world.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAiB7C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,CAAC,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAChD,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;CAClD,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,GACtB,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAoBxB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,KAAK,CAkBjD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,oBAAoB,GAAG,aAAa,CAAC,CAAC;AAE9E;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,aAAa,CAoB9D,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAa,OAAO,CAAC,KAAK,CAgB9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,KAAK,GAAG,SAAS,KAAG,IAKnD,CAAC"}
@@ -1,136 +1,57 @@
1
- import { createRequire } from 'node:module';
2
- import { pathToFileURL } from 'node:url';
3
- import { isVercelWorldTarget, resolveWorkflowTargetWorld, } from '@workflow/utils';
4
- import { createLocalWorld } from '@workflow/world-local';
5
- import { createVercelWorld } from '@workflow/world-vercel';
1
+ import * as targetWorldModule from '@workflow/core/runtime/world-target';
6
2
  import { assertWorldSupportsRuntimeProtocol } from './world-compatibility.js';
7
- function getRuntimeRequire() {
8
- // Resolve from the app root (process.cwd()) so custom world packages
9
- // like @workflow/world-postgres can be found even though they're not
10
- // dependencies of @workflow/core. Using import.meta.url would resolve
11
- // from core's location, missing app-level packages.
12
- try {
13
- return createRequire(
14
- /* webpackIgnore: true */
15
- /* turbopackIgnore: true */
16
- pathToFileURL(process.cwd() + '/package.json').href);
17
- }
18
- catch {
19
- return createRequire(
20
- /* webpackIgnore: true */
21
- /* turbopackIgnore: true */
22
- import.meta.url);
23
- }
24
- }
25
3
  const WorldCache = Symbol.for('@workflow/world//cache');
26
4
  const StubbedWorldCache = Symbol.for('@workflow/world//stubbedCache');
27
5
  const WorldCachePromise = Symbol.for('@workflow/world//cachePromise');
28
6
  const StubbedWorldCachePromise = Symbol.for('@workflow/world//stubbedCachePromise');
29
7
  const globalSymbols = globalThis;
30
- // Dynamic import for custom world modules. Uses a standard import()
31
- // wrapped in a try/catch with require() fallback for CJS test runners.
32
- // Note: the previous `new Function('specifier', 'return import(specifier)')`
33
- // pattern was replaced because Turbopack (Next.js) treats unresolvable
34
- // dynamic imports from `new Function` as fatal build errors in the V2
35
- // combined flow route context.
36
- function resolveModulePath(specifier) {
37
- // Already a file:// URL
38
- if (specifier.startsWith('file://')) {
39
- return specifier;
8
+ /**
9
+ * Create a World instance from a world factory module. Shared by
10
+ * `createWorld()` (for the statically injected target world module) and
11
+ * tooling that loads a world module dynamically (e.g. the Nitro dev
12
+ * handler and `@workflow/world-testing`). Legacy world-specific factory
13
+ * names are still accepted for compatibility, but world packages should
14
+ * export `createWorld()`.
15
+ */
16
+ export function createWorldFromModule(mod) {
17
+ if (typeof mod.createWorld === 'function') {
18
+ return mod.createWorld();
40
19
  }
41
- // Absolute path - convert to file:// URL
42
- if (specifier.startsWith('/')) {
43
- return pathToFileURL(
44
- /* webpackIgnore: true */
45
- /* turbopackIgnore: true */
46
- specifier).href;
20
+ if (typeof mod.createLocalWorld === 'function') {
21
+ return mod.createLocalWorld();
47
22
  }
48
- // Relative path - resolve relative to cwd and convert to file:// URL
49
- if (specifier.startsWith('./') || specifier.startsWith('../')) {
50
- return pathToFileURL(
51
- /* webpackIgnore: true */
52
- /* turbopackIgnore: true */
53
- process.cwd() + '/' + specifier).href;
23
+ if (typeof mod.createVercelWorld === 'function') {
24
+ return mod.createVercelWorld();
54
25
  }
55
- // Package specifier - use require.resolve to find the package
56
- try {
57
- return pathToFileURL(
58
- /* webpackIgnore: true */
59
- /* turbopackIgnore: true */
60
- getRuntimeRequire().resolve(
61
- /* webpackIgnore: true */
62
- /* turbopackIgnore: true */
63
- specifier)).href;
26
+ if (typeof mod.default === 'function') {
27
+ return mod.default();
64
28
  }
65
- catch {
66
- return specifier;
29
+ if (mod.default && typeof mod.default === 'object') {
30
+ return mod.default;
67
31
  }
32
+ throw new Error('Invalid target world module: must export createWorld(), a default factory, or a default World instance.');
68
33
  }
69
34
  /**
70
- * Create a new world instance based on environment variables.
71
- * WORKFLOW_TARGET_WORLD is used to determine the target world.
35
+ * Create a new world instance from the statically imported target world module.
72
36
  *
73
- * Note: WORKFLOW_VERCEL_* env vars (PROJECT, TEAM, AUTH_TOKEN, etc.) are
74
- * intentionally NOT read here. Those are for CLI/observability tooling only
75
- * and should not affect runtime behavior. The Vercel runtime provides
76
- * authentication via OIDC tokens and project context via system env vars
77
- * (VERCEL_DEPLOYMENT_ID, VERCEL_PROJECT_ID). Tooling that needs these env
78
- * vars should call createVercelWorld() directly with an explicit config and
79
- * use setWorld() to inject the instance.
37
+ * Framework integrations alias `@workflow/core/runtime/world-target` to the
38
+ * concrete world package at build time, so bundlers see a static import path
39
+ * instead of tracing a runtime-built require/import expression.
80
40
  */
81
41
  export const createWorld = async () => {
82
- const targetWorld = resolveWorkflowTargetWorld();
83
- if (isVercelWorldTarget(targetWorld)) {
84
- // Warn if WORKFLOW_VERCEL_* env vars are set inside a Vercel serverless
85
- // function (VERCEL=1) — they have no effect at runtime and likely indicate
86
- // a misconfiguration (user manually added them as Vercel project env vars,
87
- // which is not needed). We gate on VERCEL=1 so the warning does not fire
88
- // when the CLI or web observability app sets these env vars intentionally.
89
- const staleEnvVars = [
90
- 'WORKFLOW_VERCEL_PROJECT',
91
- 'WORKFLOW_VERCEL_TEAM',
92
- 'WORKFLOW_VERCEL_AUTH_TOKEN',
93
- 'WORKFLOW_VERCEL_ENV',
94
- ].filter((key) => process.env[key]);
95
- if (staleEnvVars.length > 0 && process.env.VERCEL === '1') {
96
- console.warn(`[workflow] Warning: ${staleEnvVars.join(', ')} env var(s) ` +
97
- 'are set but have no effect at runtime. These are only used by the Workflow CLI. ' +
98
- 'Remove them from your Vercel project environment variables.');
99
- }
100
- return createVercelWorld();
101
- }
102
- if (targetWorld === 'local') {
103
- return createLocalWorld({
104
- dataDir: process.env.WORKFLOW_LOCAL_DATA_DIR,
105
- });
106
- }
107
- // Try require() first for custom worlds — this avoids Turbopack tracing
108
- // a dynamic import() that it can't statically resolve. Fall back to
109
- // dynamic import() for ESM-only packages.
110
- let mod;
111
- try {
112
- mod = getRuntimeRequire()(
113
- /* webpackIgnore: true */
114
- /* turbopackIgnore: true */
115
- targetWorld);
116
- }
117
- catch {
118
- const resolvedPath = resolveModulePath(targetWorld);
119
- mod = await import(
120
- /* webpackIgnore: true */
121
- /* turbopackIgnore: true */
122
- resolvedPath);
123
- }
124
- if (typeof mod === 'function') {
125
- return mod();
126
- }
127
- else if (typeof mod.default === 'function') {
128
- return mod.default();
129
- }
130
- else if (typeof mod.createWorld === 'function') {
131
- return mod.createWorld();
132
- }
133
- throw new Error(`Invalid target world module: ${targetWorld}, must export a default function or createWorld function that returns a World instance.`);
42
+ const world = await createWorldFromModule(targetWorldModule);
43
+ const staleEnvVars = [
44
+ 'WORKFLOW_VERCEL_PROJECT',
45
+ 'WORKFLOW_VERCEL_TEAM',
46
+ 'WORKFLOW_VERCEL_AUTH_TOKEN',
47
+ 'WORKFLOW_VERCEL_ENV',
48
+ ].filter((key) => process.env[key]);
49
+ if (staleEnvVars.length > 0 && process.env.VERCEL === '1') {
50
+ console.warn(`[workflow] Warning: ${staleEnvVars.join(', ')} env var(s) ` +
51
+ 'are set but have no effect at runtime. These are only used by the Workflow CLI. ' +
52
+ 'Remove them from your Vercel project environment variables.');
53
+ }
54
+ return world;
134
55
  };
135
56
  /**
136
57
  * Some functions from the world are needed at build time, but we do NOT want
@@ -190,10 +111,7 @@ export const setWorld = (world) => {
190
111
  globalSymbols[StubbedWorldCachePromise] = undefined;
191
112
  };
192
113
  // Register getWorld on globalThis so getWorldLazy can call it directly when
193
- // world.ts is statically present in the bundle. This avoids the relative
194
- // dynamic import('./world.js') fallback in get-world-lazy.ts, which fails
195
- // after Next.js inlines get-world-lazy.js into a route bundle (no sibling
196
- // world.js exists at the bundled location).
114
+ // world.ts is statically present in the bundle.
197
115
  //
198
116
  // For server routes that only consume `start` (or another helper that goes
199
117
  // through getWorldLazy without statically using getWorld), webpack/turbopack
@@ -208,4 +126,4 @@ export const setWorld = (world) => {
208
126
  const GetWorldFnKey = Symbol.for('@workflow/world//getWorldFn');
209
127
  globalThis[GetWorldFnKey] ??=
210
128
  getWorld;
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ybGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS93b3JsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQiwwQkFBMEIsR0FDM0IsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RSxTQUFTLGlCQUFpQjtJQUN4QixxRUFBcUU7SUFDckUscUVBQXFFO0lBQ3JFLHNFQUFzRTtJQUN0RSxvREFBb0Q7SUFDcEQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxhQUFhO1FBQ2xCLHlCQUF5QjtRQUN6QiwyQkFBMkI7UUFDM0IsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQ3BELENBQUM7SUFDSixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxhQUFhO1FBQ2xCLHlCQUF5QjtRQUN6QiwyQkFBMkI7UUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2hCLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUN4RCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQUN0RSxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQUN0RSxNQUFN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Q0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDbEMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUM3QyxhQUFhLENBQUMsd0JBQXdCLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDdEQsQ0FBQyxDQUFDO0FBRUYsNEVBQTRFO0FBQzVFLHlFQUF5RTtBQUN6RSwwRUFBMEU7QUFDMUUsMEVBQTBFO0FBQzFFLDRDQUE0QztBQUM1QyxFQUFFO0FBQ0YsMkVBQTJFO0FBQzNFLDZFQUE2RTtBQUM3RSxzRUFBc0U7QUFDdEUsMEVBQTBFO0FBQzFFLG1FQUFtRTtBQUNuRSx3RUFBd0U7QUFDeEUsRUFBRTtBQUNGLHdFQUF3RTtBQUN4RSwwRUFBMEU7QUFDMUUsb0JBQW9CO0FBQ3BCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUMvRCxVQUF5RCxDQUFDLGFBQWEsQ0FBQztJQUN2RSxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7XG4gIGlzVmVyY2VsV29ybGRUYXJnZXQsXG4gIHJlc29sdmVXb3JrZmxvd1RhcmdldFdvcmxkLFxufSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBXb3JsZCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBjcmVhdGVMb2NhbFdvcmxkIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkLWxvY2FsJztcbmltcG9ydCB7IGNyZWF0ZVZlcmNlbFdvcmxkIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkLXZlcmNlbCc7XG5pbXBvcnQgeyBhc3NlcnRXb3JsZFN1cHBvcnRzUnVudGltZVByb3RvY29sIH0gZnJvbSAnLi93b3JsZC1jb21wYXRpYmlsaXR5LmpzJztcblxuZnVuY3Rpb24gZ2V0UnVudGltZVJlcXVpcmUoKSB7XG4gIC8vIFJlc29sdmUgZnJvbSB0aGUgYXBwIHJvb3QgKHByb2Nlc3MuY3dkKCkpIHNvIGN1c3RvbSB3b3JsZCBwYWNrYWdlc1xuICAvLyBsaWtlIEB3b3JrZmxvdy93b3JsZC1wb3N0Z3JlcyBjYW4gYmUgZm91bmQgZXZlbiB0aG91Z2ggdGhleSdyZSBub3RcbiAgLy8gZGVwZW5kZW5jaWVzIG9mIEB3b3JrZmxvdy9jb3JlLiBVc2luZyBpbXBvcnQubWV0YS51cmwgd291bGQgcmVzb2x2ZVxuICAvLyBmcm9tIGNvcmUncyBsb2NhdGlvbiwgbWlzc2luZyBhcHAtbGV2ZWwgcGFja2FnZXMuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJlcXVpcmUoXG4gICAgICAvKiB3ZWJwYWNrSWdub3JlOiB0cnVlICovXG4gICAgICAvKiB0dXJib3BhY2tJZ25vcmU6IHRydWUgKi9cbiAgICAgIHBhdGhUb0ZpbGVVUkwocHJvY2Vzcy5jd2QoKSArICcvcGFja2FnZS5qc29uJykuaHJlZlxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBjcmVhdGVSZXF1aXJlKFxuICAgICAgLyogd2VicGFja0lnbm9yZTogdHJ1ZSAqL1xuICAgICAgLyogdHVyYm9wYWNrSWdub3JlOiB0cnVlICovXG4gICAgICBpbXBvcnQubWV0YS51cmxcbiAgICApO1xuICB9XG59XG5cbmNvbnN0IFdvcmxkQ2FjaGUgPSBTeW1ib2wuZm9yKCdAd29ya2Zsb3cvd29ybGQvL2NhY2hlJyk7XG5jb25zdCBTdHViYmVkV29ybGRDYWNoZSA9IFN5bWJvbC5mb3IoJ0B3b3JrZmxvdy93b3JsZC8vc3R1YmJlZENhY2hlJyk7XG5jb25zdCBXb3JsZENhY2hlUHJvbWlzZSA9IFN5bWJvbC5mb3IoJ0B3b3JrZmxvdy93b3JsZC8vY2FjaGVQcm9taXNlJyk7XG5jb25zdCBTdHViYmVkV29ybGRDYWNoZVByb21pc2UgPSBTeW1ib2wuZm9yKFxuICAnQHdvcmtmbG93L3dvcmxkLy9zdHViYmVkQ2FjaGVQcm9taXNlJ1xuKTtcblxuY29uc3QgZ2xvYmFsU3ltYm9sczogdHlwZW9mIGdsb2JhbFRoaXMgJiB7XG4gIFtXb3JsZENhY2hlXT86IFdvcmxkO1xuICBbU3R1YmJlZFdvcmxkQ2FjaGVdPzogV29ybGQ7XG4gIFtXb3JsZENhY2hlUHJvbWlzZV0/OiBQcm9taXNlPFdvcmxkPjtcbiAgW1N0dWJiZWRXb3JsZENhY2hlUHJvbWlzZV0/OiBQcm9taXNlPFdvcmxkPjtcbn0gPSBnbG9iYWxUaGlzO1xuXG4vLyBEeW5hbWljIGltcG9ydCBmb3IgY3VzdG9tIHdvcmxkIG1vZHVsZXMuIFVzZXMgYSBzdGFuZGFyZCBpbXBvcnQoKVxuLy8gd3JhcHBlZCBpbiBhIHRyeS9jYXRjaCB3aXRoIHJlcXVpcmUoKSBmYWxsYmFjayBmb3IgQ0pTIHRlc3QgcnVubmVycy5cbi8vIE5vdGU6IHRoZSBwcmV2aW91cyBgbmV3IEZ1bmN0aW9uKCdzcGVjaWZpZXInLCAncmV0dXJuIGltcG9ydChzcGVjaWZpZXIpJylgXG4vLyBwYXR0ZXJuIHdhcyByZXBsYWNlZCBiZWNhdXNlIFR1cmJvcGFjayAoTmV4dC5qcykgdHJlYXRzIHVucmVzb2x2YWJsZVxuLy8gZHluYW1pYyBpbXBvcnRzIGZyb20gYG5ldyBGdW5jdGlvbmAgYXMgZmF0YWwgYnVpbGQgZXJyb3JzIGluIHRoZSBWMlxuLy8gY29tYmluZWQgZmxvdyByb3V0ZSBjb250ZXh0LlxuXG5mdW5jdGlvbiByZXNvbHZlTW9kdWxlUGF0aChzcGVjaWZpZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEFscmVhZHkgYSBmaWxlOi8vIFVSTFxuICBpZiAoc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgIHJldHVybiBzcGVjaWZpZXI7XG4gIH1cbiAgLy8gQWJzb2x1dGUgcGF0aCAtIGNvbnZlcnQgdG8gZmlsZTovLyBVUkxcbiAgaWYgKHNwZWNpZmllci5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gcGF0aFRvRmlsZVVSTChcbiAgICAgIC8qIHdlYnBhY2tJZ25vcmU6IHRydWUgKi9cbiAgICAgIC8qIHR1cmJvcGFja0lnbm9yZTogdHJ1ZSAqL1xuICAgICAgc3BlY2lmaWVyXG4gICAgKS5ocmVmO1xuICB9XG4gIC8vIFJlbGF0aXZlIHBhdGggLSByZXNvbHZlIHJlbGF0aXZlIHRvIGN3ZCBhbmQgY29udmVydCB0byBmaWxlOi8vIFVSTFxuICBpZiAoc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy4vJykgfHwgc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgcmV0dXJuIHBhdGhUb0ZpbGVVUkwoXG4gICAgICAvKiB3ZWJwYWNrSWdub3JlOiB0cnVlICovXG4gICAgICAvKiB0dXJib3BhY2tJZ25vcmU6IHRydWUgKi9cbiAgICAgIHByb2Nlc3MuY3dkKCkgKyAnLycgKyBzcGVjaWZpZXJcbiAgICApLmhyZWY7XG4gIH1cbiAgLy8gUGFja2FnZSBzcGVjaWZpZXIgLSB1c2UgcmVxdWlyZS5yZXNvbHZlIHRvIGZpbmQgdGhlIHBhY2thZ2VcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGF0aFRvRmlsZVVSTChcbiAgICAgIC8qIHdlYnBhY2tJZ25vcmU6IHRydWUgKi9cbiAgICAgIC8qIHR1cmJvcGFja0lnbm9yZTogdHJ1ZSAqL1xuICAgICAgZ2V0UnVudGltZVJlcXVpcmUoKS5yZXNvbHZlKFxuICAgICAgICAvKiB3ZWJwYWNrSWdub3JlOiB0cnVlICovXG4gICAgICAgIC8qIHR1cmJvcGFja0lnbm9yZTogdHJ1ZSAqL1xuICAgICAgICBzcGVjaWZpZXJcbiAgICAgIClcbiAgICApLmhyZWY7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBzcGVjaWZpZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgd29ybGQgaW5zdGFuY2UgYmFzZWQgb24gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICogV09SS0ZMT1dfVEFSR0VUX1dPUkxEIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0YXJnZXQgd29ybGQuXG4gKlxuICogTm90ZTogV09SS0ZMT1dfVkVSQ0VMXyogZW52IHZhcnMgKFBST0pFQ1QsIFRFQU0sIEFVVEhfVE9LRU4sIGV0Yy4pIGFyZVxuICogaW50ZW50aW9uYWxseSBOT1QgcmVhZCBoZXJlLiBUaG9zZSBhcmUgZm9yIENMSS9vYnNlcnZhYmlsaXR5IHRvb2xpbmcgb25seVxuICogYW5kIHNob3VsZCBub3QgYWZmZWN0IHJ1bnRpbWUgYmVoYXZpb3IuIFRoZSBWZXJjZWwgcnVudGltZSBwcm92aWRlc1xuICogYXV0aGVudGljYXRpb24gdmlhIE9JREMgdG9rZW5zIGFuZCBwcm9qZWN0IGNvbnRleHQgdmlhIHN5c3RlbSBlbnYgdmFyc1xuICogKFZFUkNFTF9ERVBMT1lNRU5UX0lELCBWRVJDRUxfUFJPSkVDVF9JRCkuIFRvb2xpbmcgdGhhdCBuZWVkcyB0aGVzZSBlbnZcbiAqIHZhcnMgc2hvdWxkIGNhbGwgY3JlYXRlVmVyY2VsV29ybGQoKSBkaXJlY3RseSB3aXRoIGFuIGV4cGxpY2l0IGNvbmZpZyBhbmRcbiAqIHVzZSBzZXRXb3JsZCgpIHRvIGluamVjdCB0aGUgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVXb3JsZCA9IGFzeW5jICgpOiBQcm9taXNlPFdvcmxkPiA9PiB7XG4gIGNvbnN0IHRhcmdldFdvcmxkID0gcmVzb2x2ZVdvcmtmbG93VGFyZ2V0V29ybGQoKTtcblxuICBpZiAoaXNWZXJjZWxXb3JsZFRhcmdldCh0YXJnZXRXb3JsZCkpIHtcbiAgICAvLyBXYXJuIGlmIFdPUktGTE9XX1ZFUkNFTF8qIGVudiB2YXJzIGFyZSBzZXQgaW5zaWRlIGEgVmVyY2VsIHNlcnZlcmxlc3NcbiAgICAvLyBmdW5jdGlvbiAoVkVSQ0VMPTEpIOKAlCB0aGV5IGhhdmUgbm8gZWZmZWN0IGF0IHJ1bnRpbWUgYW5kIGxpa2VseSBpbmRpY2F0ZVxuICAgIC8vIGEgbWlzY29uZmlndXJhdGlvbiAodXNlciBtYW51YWxseSBhZGRlZCB0aGVtIGFzIFZlcmNlbCBwcm9qZWN0IGVudiB2YXJzLFxuICAgIC8vIHdoaWNoIGlzIG5vdCBuZWVkZWQpLiBXZSBnYXRlIG9uIFZFUkNFTD0xIHNvIHRoZSB3YXJuaW5nIGRvZXMgbm90IGZpcmVcbiAgICAvLyB3aGVuIHRoZSBDTEkgb3Igd2ViIG9ic2VydmFiaWxpdHkgYXBwIHNldHMgdGhlc2UgZW52IHZhcnMgaW50ZW50aW9uYWxseS5cbiAgICBjb25zdCBzdGFsZUVudlZhcnMgPSBbXG4gICAgICAnV09SS0ZMT1dfVkVSQ0VMX1BST0pFQ1QnLFxuICAgICAgJ1dPUktGTE9XX1ZFUkNFTF9URUFNJyxcbiAgICAgICdXT1JLRkxPV19WRVJDRUxfQVVUSF9UT0tFTicsXG4gICAgICAnV09SS0ZMT1dfVkVSQ0VMX0VOVicsXG4gICAgXS5maWx0ZXIoKGtleSkgPT4gcHJvY2Vzcy5lbnZba2V5XSk7XG4gICAgaWYgKHN0YWxlRW52VmFycy5sZW5ndGggPiAwICYmIHByb2Nlc3MuZW52LlZFUkNFTCA9PT0gJzEnKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbd29ya2Zsb3ddIFdhcm5pbmc6ICR7c3RhbGVFbnZWYXJzLmpvaW4oJywgJyl9IGVudiB2YXIocykgYCArXG4gICAgICAgICAgJ2FyZSBzZXQgYnV0IGhhdmUgbm8gZWZmZWN0IGF0IHJ1bnRpbWUuIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgdGhlIFdvcmtmbG93IENMSS4gJyArXG4gICAgICAgICAgJ1JlbW92ZSB0aGVtIGZyb20geW91ciBWZXJjZWwgcHJvamVjdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlVmVyY2VsV29ybGQoKTtcbiAgfVxuXG4gIGlmICh0YXJnZXRXb3JsZCA9PT0gJ2xvY2FsJykge1xuICAgIHJldHVybiBjcmVhdGVMb2NhbFdvcmxkKHtcbiAgICAgIGRhdGFEaXI6IHByb2Nlc3MuZW52LldPUktGTE9XX0xPQ0FMX0RBVEFfRElSLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gVHJ5IHJlcXVpcmUoKSBmaXJzdCBmb3IgY3VzdG9tIHdvcmxkcyDigJQgdGhpcyBhdm9pZHMgVHVyYm9wYWNrIHRyYWNpbmdcbiAgLy8gYSBkeW5hbWljIGltcG9ydCgpIHRoYXQgaXQgY2FuJ3Qgc3RhdGljYWxseSByZXNvbHZlLiBGYWxsIGJhY2sgdG9cbiAgLy8gZHluYW1pYyBpbXBvcnQoKSBmb3IgRVNNLW9ubHkgcGFja2FnZXMuXG4gIGxldCBtb2Q6IGFueTtcbiAgdHJ5IHtcbiAgICBtb2QgPSBnZXRSdW50aW1lUmVxdWlyZSgpKFxuICAgICAgLyogd2VicGFja0lnbm9yZTogdHJ1ZSAqL1xuICAgICAgLyogdHVyYm9wYWNrSWdub3JlOiB0cnVlICovXG4gICAgICB0YXJnZXRXb3JsZFxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmVNb2R1bGVQYXRoKHRhcmdldFdvcmxkKTtcbiAgICBtb2QgPSBhd2FpdCBpbXBvcnQoXG4gICAgICAvKiB3ZWJwYWNrSWdub3JlOiB0cnVlICovXG4gICAgICAvKiB0dXJib3BhY2tJZ25vcmU6IHRydWUgKi9cbiAgICAgIHJlc29sdmVkUGF0aFxuICAgICk7XG4gIH1cbiAgaWYgKHR5cGVvZiBtb2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbW9kKCkgYXMgV29ybGQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG1vZC5kZWZhdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1vZC5kZWZhdWx0KCkgYXMgV29ybGQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG1vZC5jcmVhdGVXb3JsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtb2QuY3JlYXRlV29ybGQoKSBhcyBXb3JsZDtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgSW52YWxpZCB0YXJnZXQgd29ybGQgbW9kdWxlOiAke3RhcmdldFdvcmxkfSwgbXVzdCBleHBvcnQgYSBkZWZhdWx0IGZ1bmN0aW9uIG9yIGNyZWF0ZVdvcmxkIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIFdvcmxkIGluc3RhbmNlLmBcbiAgKTtcbn07XG5cbmV4cG9ydCB0eXBlIFdvcmxkSGFuZGxlcnMgPSBQaWNrPFdvcmxkLCAnY3JlYXRlUXVldWVIYW5kbGVyJyB8ICdzcGVjVmVyc2lvbic+O1xuXG4vKipcbiAqIFNvbWUgZnVuY3Rpb25zIGZyb20gdGhlIHdvcmxkIGFyZSBuZWVkZWQgYXQgYnVpbGQgdGltZSwgYnV0IHdlIGRvIE5PVCB3YW50XG4gKiB0byBjYWNoZSB0aGUgd29ybGQgaW4gdGhvc2UgaW5zdGFuY2VzIGZvciBnZW5lcmFsIHVzZSwgc2luY2Ugd2UgZG9uJ3QgaGF2ZVxuICogdGhlIGNvcnJlY3QgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNldCB5ZXQuIFRoaXMgaXMgYSBzYWZlIGZ1bmN0aW9uIHRvXG4gKiBjYWxsIGF0IGJ1aWxkIHRpbWUsIHRoYXQgb25seSBnaXZlcyBhY2Nlc3MgdG8gbm9uLWVudmlyb25tZW50LWJvdW5kIHdvcmxkXG4gKiBmdW5jdGlvbnMuIFRoZSBvbmx5IGJpbmRpbmcgdmFsdWUgc2hvdWxkIGJlIHRoZSB0YXJnZXQgd29ybGQuXG4gKiBPbmNlIHdlIG1pZ3JhdGUgdG8gYSBmaWxlLWJhc2VkIGNvbmZpZ3VyYXRpb24gKHdvcmtmbG93LmNvbmZpZy50cyksIHdlIHNob3VsZFxuICogYmUgYWJsZSB0byByZS1jb21iaW5lIGdldFdvcmxkIGFuZCBnZXRXb3JsZEhhbmRsZXJzIGludG8gb25lIHNpbmdsZXRvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFdvcmxkSGFuZGxlcnMgPSBhc3luYyAoKTogUHJvbWlzZTxXb3JsZEhhbmRsZXJzPiA9PiB7XG4gIGlmIChnbG9iYWxTeW1ib2xzW1N0dWJiZWRXb3JsZENhY2hlXSkge1xuICAgIGFzc2VydFdvcmxkU3VwcG9ydHNSdW50aW1lUHJvdG9jb2woZ2xvYmFsU3ltYm9sc1tTdHViYmVkV29ybGRDYWNoZV0pO1xuICAgIHJldHVybiBnbG9iYWxTeW1ib2xzW1N0dWJiZWRXb3JsZENhY2hlXTtcbiAgfVxuICAvLyBTdG9yZSB0aGUgcHJvbWlzZSBpbW1lZGlhdGVseSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aXRoIGNvbmN1cnJlbnQgY2FsbHMuXG4gIC8vIENsZWFyIG9uIHJlamVjdGlvbiBzbyBzdWJzZXF1ZW50IGNhbGxzIGNhbiByZXRyeSBpbnN0ZWFkIG9mIGNhY2hpbmcgdGhlIGZhaWx1cmUuXG4gIGlmICghZ2xvYmFsU3ltYm9sc1tTdHViYmVkV29ybGRDYWNoZVByb21pc2VdKSB7XG4gICAgZ2xvYmFsU3ltYm9sc1tTdHViYmVkV29ybGRDYWNoZVByb21pc2VdID0gY3JlYXRlV29ybGQoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBnbG9iYWxTeW1ib2xzW1N0dWJiZWRXb3JsZENhY2hlUHJvbWlzZV0gPSB1bmRlZmluZWQ7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgX3dvcmxkID0gYXdhaXQgZ2xvYmFsU3ltYm9sc1tTdHViYmVkV29ybGRDYWNoZVByb21pc2VdO1xuICBhc3NlcnRXb3JsZFN1cHBvcnRzUnVudGltZVByb3RvY29sKF93b3JsZCk7XG4gIGdsb2JhbFN5bWJvbHNbU3R1YmJlZFdvcmxkQ2FjaGVdID0gX3dvcmxkO1xuICByZXR1cm4ge1xuICAgIGNyZWF0ZVF1ZXVlSGFuZGxlcjogX3dvcmxkLmNyZWF0ZVF1ZXVlSGFuZGxlcixcbiAgICBzcGVjVmVyc2lvbjogX3dvcmxkLnNwZWNWZXJzaW9uLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFdvcmxkID0gYXN5bmMgKCk6IFByb21pc2U8V29ybGQ+ID0+IHtcbiAgaWYgKGdsb2JhbFN5bWJvbHNbV29ybGRDYWNoZV0pIHtcbiAgICBhc3NlcnRXb3JsZFN1cHBvcnRzUnVudGltZVByb3RvY29sKGdsb2JhbFN5bWJvbHNbV29ybGRDYWNoZV0pO1xuICAgIHJldHVybiBnbG9iYWxTeW1ib2xzW1dvcmxkQ2FjaGVdO1xuICB9XG4gIC8vIFN0b3JlIHRoZSBwcm9taXNlIGltbWVkaWF0ZWx5IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIHdpdGggY29uY3VycmVudCBjYWxscy5cbiAgLy8gQ2xlYXIgb24gcmVqZWN0aW9uIHNvIHN1YnNlcXVlbnQgY2FsbHMgY2FuIHJldHJ5IGluc3RlYWQgb2YgY2FjaGluZyB0aGUgZmFpbHVyZS5cbiAgaWYgKCFnbG9iYWxTeW1ib2xzW1dvcmxkQ2FjaGVQcm9taXNlXSkge1xuICAgIGdsb2JhbFN5bWJvbHNbV29ybGRDYWNoZVByb21pc2VdID0gY3JlYXRlV29ybGQoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBnbG9iYWxTeW1ib2xzW1dvcmxkQ2FjaGVQcm9taXNlXSA9IHVuZGVmaW5lZDtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuICBnbG9iYWxTeW1ib2xzW1dvcmxkQ2FjaGVdID0gYXdhaXQgZ2xvYmFsU3ltYm9sc1tXb3JsZENhY2hlUHJvbWlzZV07XG4gIGFzc2VydFdvcmxkU3VwcG9ydHNSdW50aW1lUHJvdG9jb2woZ2xvYmFsU3ltYm9sc1tXb3JsZENhY2hlXSk7XG4gIHJldHVybiBnbG9iYWxTeW1ib2xzW1dvcmxkQ2FjaGVdO1xufTtcblxuLyoqXG4gKiBSZXNldCB0aGUgY2FjaGVkIHdvcmxkIGluc3RhbmNlLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBlbnZpcm9ubWVudFxuICogdmFyaWFibGVzIGNoYW5nZSBhbmQgeW91IG5lZWQgdG8gcmVpbml0aWFsaXplIHRoZSB3b3JsZCB3aXRoIG5ldyBjb25maWcuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRXb3JsZCA9ICh3b3JsZDogV29ybGQgfCB1bmRlZmluZWQpOiB2b2lkID0+IHtcbiAgZ2xvYmFsU3ltYm9sc1tXb3JsZENhY2hlXSA9IHdvcmxkO1xuICBnbG9iYWxTeW1ib2xzW1N0dWJiZWRXb3JsZENhY2hlXSA9IHdvcmxkO1xuICBnbG9iYWxTeW1ib2xzW1dvcmxkQ2FjaGVQcm9taXNlXSA9IHVuZGVmaW5lZDtcbiAgZ2xvYmFsU3ltYm9sc1tTdHViYmVkV29ybGRDYWNoZVByb21pc2VdID0gdW5kZWZpbmVkO1xufTtcblxuLy8gUmVnaXN0ZXIgZ2V0V29ybGQgb24gZ2xvYmFsVGhpcyBzbyBnZXRXb3JsZExhenkgY2FuIGNhbGwgaXQgZGlyZWN0bHkgd2hlblxuLy8gd29ybGQudHMgaXMgc3RhdGljYWxseSBwcmVzZW50IGluIHRoZSBidW5kbGUuIFRoaXMgYXZvaWRzIHRoZSByZWxhdGl2ZVxuLy8gZHluYW1pYyBpbXBvcnQoJy4vd29ybGQuanMnKSBmYWxsYmFjayBpbiBnZXQtd29ybGQtbGF6eS50cywgd2hpY2ggZmFpbHNcbi8vIGFmdGVyIE5leHQuanMgaW5saW5lcyBnZXQtd29ybGQtbGF6eS5qcyBpbnRvIGEgcm91dGUgYnVuZGxlIChubyBzaWJsaW5nXG4vLyB3b3JsZC5qcyBleGlzdHMgYXQgdGhlIGJ1bmRsZWQgbG9jYXRpb24pLlxuLy9cbi8vIEZvciBzZXJ2ZXIgcm91dGVzIHRoYXQgb25seSBjb25zdW1lIGBzdGFydGAgKG9yIGFub3RoZXIgaGVscGVyIHRoYXQgZ29lc1xuLy8gdGhyb3VnaCBnZXRXb3JsZExhenkgd2l0aG91dCBzdGF0aWNhbGx5IHVzaW5nIGdldFdvcmxkKSwgd2VicGFjay90dXJib3BhY2tcbi8vIHdvdWxkIG90aGVyd2lzZSB0cmVlLXNoYWtlIHdvcmxkLnRzIG91dCBvZiB0aGUgYnVuZGxlIGVudGlyZWx5LiBUaGVcbi8vIGhvc3Qtb25seSBgLi93b3JsZC1pbml0LnRzYCBtb2R1bGUgaW1wb3J0cyB3b3JsZC50cyBmb3IgaXRzIHNpZGUgZWZmZWN0XG4vLyBhbmQgaXMgaXRzZWxmIGltcG9ydGVkIGJ5IGBwYWNrYWdlcy93b3JrZmxvdy9zcmMvYXBpLnRzYCBzbyB0aGlzXG4vLyByZWdpc3RyYXRpb24gcnVucyBpbiBldmVyeSBzZXJ2ZXIgYnVuZGxlIHRoYXQgdG91Y2hlcyBgd29ya2Zsb3cvYXBpYC5cbi8vXG4vLyBTdGVwL1ZNIGJ1bmRsZXMgbmV2ZXIgcmVhY2ggdGhpcyBicmFuY2g6IHRoZXkgZG9uJ3Qgc3RhdGljYWxseSBpbXBvcnRcbi8vIHdvcmxkLnRzLCBhbmQgYHdvcmxkLWluaXRgIHJlc29sdmVzIHRvIGFuIGVtcHR5IHN0dWIgdmlhIHRoZSBgd29ya2Zsb3dgXG4vLyBleHBvcnQgY29uZGl0aW9uLlxuY29uc3QgR2V0V29ybGRGbktleSA9IFN5bWJvbC5mb3IoJ0B3b3JrZmxvdy93b3JsZC8vZ2V0V29ybGRGbicpO1xuKGdsb2JhbFRoaXMgYXMgeyBbR2V0V29ybGRGbktleV0/OiAoKSA9PiBQcm9taXNlPFdvcmxkPiB9KVtHZXRXb3JsZEZuS2V5XSA/Pz1cbiAgZ2V0V29ybGQ7XG4iXX0=
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ybGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS93b3JsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssaUJBQWlCLE1BQU0scUNBQXFDLENBQUM7QUFFekUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUUsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQ3hELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FDekMsc0NBQXNDLENBQ3ZDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FLZixVQUFVLENBQUM7QUFXZjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxHQUF1QjtJQUV2QixJQUFJLE9BQU8sR0FBRyxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUMxQyxPQUFPLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxPQUFPLEdBQUcsQ0FBQyxnQkFBZ0IsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUMvQyxPQUFPLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLE9BQU8sR0FBRyxDQUFDLGlCQUFpQixLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ2hELE9BQU8sR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFD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Q0QsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDbkUsa0NBQWtDLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDOUQsT0FBTyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBd0IsRUFBUSxFQUFFO0lBQ3pELGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDbEMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUM3QyxhQUFhLENBQUMsd0JBQXdCLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDdEQsQ0FBQyxDQUFDO0FBRUYsNEVBQTRFO0FBQzVFLGdEQUFnRDtBQUNoRCxFQUFFO0FBQ0YsMkVBQTJFO0FBQzNFLDZFQUE2RTtBQUM3RSxzRUFBc0U7QUFDdEUsMEVBQTBFO0FBQzFFLG1FQUFtRTtBQUNuRSx3RUFBd0U7QUFDeEUsRUFBRTtBQUNGLHdFQUF3RTtBQUN4RSwwRUFBMEU7QUFDMUUsb0JBQW9CO0FBQ3BCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUMvRCxVQUF5RCxDQUFDLGFBQWEsQ0FBQztJQUN2RSxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0YXJnZXRXb3JsZE1vZHVsZSBmcm9tICdAd29ya2Zsb3cvY29yZS9ydW50aW1lL3dvcmxkLXRhcmdldCc7XG5pbXBvcnQgdHlwZSB7IFdvcmxkIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IGFzc2VydFdvcmxkU3VwcG9ydHNSdW50aW1lUHJvdG9jb2wgfSBmcm9tICcuL3dvcmxkLWNvbXBhdGliaWxpdHkuanMnO1xuXG5jb25zdCBXb3JsZENhY2hlID0gU3ltYm9sLmZvcignQHdvcmtmbG93L3dvcmxkLy9jYWNoZScpO1xuY29uc3QgU3R1YmJlZFdvcmxkQ2FjaGUgPSBTeW1ib2wuZm9yKCdAd29ya2Zsb3cvd29ybGQvL3N0dWJiZWRDYWNoZScpO1xuY29uc3QgV29ybGRDYWNoZVByb21pc2UgPSBTeW1ib2wuZm9yKCdAd29ya2Zsb3cvd29ybGQvL2NhY2hlUHJvbWlzZScpO1xuY29uc3QgU3R1YmJlZFdvcmxkQ2FjaGVQcm9taXNlID0gU3ltYm9sLmZvcihcbiAgJ0B3b3JrZmxvdy93b3JsZC8vc3R1YmJlZENhY2hlUHJvbWlzZSdcbik7XG5cbmNvbnN0IGdsb2JhbFN5bWJvbHM6IHR5cGVvZiBnbG9iYWxUaGlzICYge1xuICBbV29ybGRDYWNoZV0/OiBXb3JsZDtcbiAgW1N0dWJiZWRXb3JsZENhY2hlXT86IFdvcmxkO1xuICBbV29ybGRDYWNoZVByb21pc2VdPzogUHJvbWlzZTxXb3JsZD47XG4gIFtTdHViYmVkV29ybGRDYWNoZVByb21pc2VdPzogUHJvbWlzZTxXb3JsZD47XG59ID0gZ2xvYmFsVGhpcztcblxuZXhwb3J0IHR5cGUgV29ybGRGYWN0b3J5TW9kdWxlID0ge1xuICBjcmVhdGVXb3JsZD86ICgpID0+IFdvcmxkIHwgUHJvbWlzZTxXb3JsZD47XG4gIC8qKiBAZGVwcmVjYXRlZCBXb3JsZCBwYWNrYWdlcyBzaG91bGQgZXhwb3J0IGBjcmVhdGVXb3JsZCgpYCBpbnN0ZWFkLiAqL1xuICBjcmVhdGVMb2NhbFdvcmxkPzogKCkgPT4gV29ybGQgfCBQcm9taXNlPFdvcmxkPjtcbiAgLyoqIEBkZXByZWNhdGVkIFdvcmxkIHBhY2thZ2VzIHNob3VsZCBleHBvcnQgYGNyZWF0ZVdvcmxkKClgIGluc3RlYWQuICovXG4gIGNyZWF0ZVZlcmNlbFdvcmxkPzogKCkgPT4gV29ybGQgfCBQcm9taXNlPFdvcmxkPjtcbiAgZGVmYXVsdD86ICgoKSA9PiBXb3JsZCB8IFByb21pc2U8V29ybGQ+KSB8IFdvcmxkO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBXb3JsZCBpbnN0YW5jZSBmcm9tIGEgd29ybGQgZmFjdG9yeSBtb2R1bGUuIFNoYXJlZCBieVxuICogYGNyZWF0ZVdvcmxkKClgIChmb3IgdGhlIHN0YXRpY2FsbHkgaW5qZWN0ZWQgdGFyZ2V0IHdvcmxkIG1vZHVsZSkgYW5kXG4gKiB0b29saW5nIHRoYXQgbG9hZHMgYSB3b3JsZCBtb2R1bGUgZHluYW1pY2FsbHkgKGUuZy4gdGhlIE5pdHJvIGRldlxuICogaGFuZGxlciBhbmQgYEB3b3JrZmxvdy93b3JsZC10ZXN0aW5nYCkuIExlZ2FjeSB3b3JsZC1zcGVjaWZpYyBmYWN0b3J5XG4gKiBuYW1lcyBhcmUgc3RpbGwgYWNjZXB0ZWQgZm9yIGNvbXBhdGliaWxpdHksIGJ1dCB3b3JsZCBwYWNrYWdlcyBzaG91bGRcbiAqIGV4cG9ydCBgY3JlYXRlV29ybGQoKWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3JsZEZyb21Nb2R1bGUoXG4gIG1vZDogV29ybGRGYWN0b3J5TW9kdWxlXG4pOiBXb3JsZCB8IFByb21pc2U8V29ybGQ+IHtcbiAgaWYgKHR5cGVvZiBtb2QuY3JlYXRlV29ybGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbW9kLmNyZWF0ZVdvcmxkKCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBtb2QuY3JlYXRlTG9jYWxXb3JsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtb2QuY3JlYXRlTG9jYWxXb3JsZCgpO1xuICB9XG4gIGlmICh0eXBlb2YgbW9kLmNyZWF0ZVZlcmNlbFdvcmxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1vZC5jcmVhdGVWZXJjZWxXb3JsZCgpO1xuICB9XG4gIGlmICh0eXBlb2YgbW9kLmRlZmF1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbW9kLmRlZmF1bHQoKTtcbiAgfVxuICBpZiAobW9kLmRlZmF1bHQgJiYgdHlwZW9mIG1vZC5kZWZhdWx0ID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBtb2QuZGVmYXVsdCBhcyBXb3JsZDtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAnSW52YWxpZCB0YXJnZXQgd29ybGQgbW9kdWxlOiBtdXN0IGV4cG9ydCBjcmVhdGVXb3JsZCgpLCBhIGRlZmF1bHQgZmFjdG9yeSwgb3IgYSBkZWZhdWx0IFdvcmxkIGluc3RhbmNlLidcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgd29ybGQgaW5zdGFuY2UgZnJvbSB0aGUgc3RhdGljYWxseSBpbXBvcnRlZCB0YXJnZXQgd29ybGQgbW9kdWxlLlxuICpcbiAqIEZyYW1ld29yayBpbnRlZ3JhdGlvbnMgYWxpYXMgYEB3b3JrZmxvdy9jb3JlL3J1bnRpbWUvd29ybGQtdGFyZ2V0YCB0byB0aGVcbiAqIGNvbmNyZXRlIHdvcmxkIHBhY2thZ2UgYXQgYnVpbGQgdGltZSwgc28gYnVuZGxlcnMgc2VlIGEgc3RhdGljIGltcG9ydCBwYXRoXG4gKiBpbnN0ZWFkIG9mIHRyYWNpbmcgYSBydW50aW1lLWJ1aWx0IHJlcXVpcmUvaW1wb3J0IGV4cHJlc3Npb24uXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVXb3JsZCA9IGFzeW5jICgpOiBQcm9taXNlPFdvcmxkPiA9PiB7XG4gIGNvbnN0IHdvcmxkID0gYXdhaXQgY3JlYXRlV29ybGRGcm9tTW9kdWxlKHRhcmdldFdvcmxkTW9kdWxlKTtcblxuICBjb25zdCBzdGFsZUVudlZhcnMgPSBbXG4gICAgJ1dPUktGTE9XX1ZFUkNFTF9QUk9KRUNUJyxcbiAgICAnV09SS0ZMT1dfVkVSQ0VMX1RFQU0nLFxuICAgICdXT1JLRkxPV19WRVJDRUxfQVVUSF9UT0tFTicsXG4gICAgJ1dPUktGTE9XX1ZFUkNFTF9FTlYnLFxuICBdLmZpbHRlcigoa2V5KSA9PiBwcm9jZXNzLmVudltrZXldKTtcbiAgaWYgKHN0YWxlRW52VmFycy5sZW5ndGggPiAwICYmIHByb2Nlc3MuZW52LlZFUkNFTCA9PT0gJzEnKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYFt3b3JrZmxvd10gV2FybmluZzogJHtzdGFsZUVudlZhcnMuam9pbignLCAnKX0gZW52IHZhcihzKSBgICtcbiAgICAgICAgJ2FyZSBzZXQgYnV0IGhhdmUgbm8gZWZmZWN0IGF0IHJ1bnRpbWUuIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgdGhlIFdvcmtmbG93IENMSS4gJyArXG4gICAgICAgICdSZW1vdmUgdGhlbSBmcm9tIHlvdXIgVmVyY2VsIHByb2plY3QgZW52aXJvbm1lbnQgdmFyaWFibGVzLidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHdvcmxkO1xufTtcblxuZXhwb3J0IHR5cGUgV29ybGRIYW5kbGVycyA9IFBpY2s8V29ybGQsICdjcmVhdGVRdWV1ZUhhbmRsZXInIHwgJ3NwZWNWZXJzaW9uJz47XG5cbi8qKlxuICogU29tZSBmdW5jdGlvbnMgZnJvbSB0aGUgd29ybGQgYXJlIG5lZWRlZCBhdCBidWlsZCB0aW1lLCBidXQgd2UgZG8gTk9UIHdhbnRcbiAqIHRvIGNhY2hlIHRoZSB3b3JsZCBpbiB0aG9zZSBpbnN0YW5jZXMgZm9yIGdlbmVyYWwgdXNlLCBzaW5jZSB3ZSBkb24ndCBoYXZlXG4gKiB0aGUgY29ycmVjdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2V0IHlldC4gVGhpcyBpcyBhIHNhZmUgZnVuY3Rpb24gdG9cbiAqIGNhbGwgYXQgYnVpbGQgdGltZSwgdGhhdCBvbmx5IGdpdmVzIGFjY2VzcyB0byBub24tZW52aXJvbm1lbnQtYm91bmQgd29ybGRcbiAqIGZ1bmN0aW9ucy4gVGhlIG9ubHkgYmluZGluZyB2YWx1ZSBzaG91bGQgYmUgdGhlIHRhcmdldCB3b3JsZC5cbiAqIE9uY2Ugd2UgbWlncmF0ZSB0byBhIGZpbGUtYmFzZWQgY29uZmlndXJhdGlvbiAod29ya2Zsb3cuY29uZmlnLnRzKSwgd2Ugc2hvdWxkXG4gKiBiZSBhYmxlIHRvIHJlLWNvbWJpbmUgZ2V0V29ybGQgYW5kIGdldFdvcmxkSGFuZGxlcnMgaW50byBvbmUgc2luZ2xldG9uLlxuICovXG5leHBvcnQgY29uc3QgZ2V0V29ybGRIYW5kbGVycyA9IGFzeW5jICgpOiBQcm9taXNlPFdvcmxkSGFuZGxlcnM+ID0+IHtcbiAgaWYgKGdsb2JhbFN5bWJvbHNbU3R1YmJlZFdvcmxkQ2FjaGVdKSB7XG4gICAgYXNzZXJ0V29ybGRTdXBwb3J0c1J1bnRpbWVQcm90b2NvbChnbG9iYWxTeW1ib2xzW1N0dWJiZWRXb3JsZENhY2hlXSk7XG4gICAgcmV0dXJuIGdsb2JhbFN5bWJvbHNbU3R1YmJlZFdvcmxkQ2FjaGVdO1xuICB9XG4gIC8vIFN0b3JlIHRoZSBwcm9taXNlIGltbWVkaWF0ZWx5IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIHdpdGggY29uY3VycmVudCBjYWxscy5cbiAgLy8gQ2xlYXIgb24gcmVqZWN0aW9uIHNvIHN1YnNlcXVlbnQgY2FsbHMgY2FuIHJldHJ5IGluc3RlYWQgb2YgY2FjaGluZyB0aGUgZmFpbHVyZS5cbiAgaWYgKCFnbG9iYWxTeW1ib2xzW1N0dWJiZWRXb3JsZENhY2hlUHJvbWlzZV0pIHtcbiAgICBnbG9iYWxTeW1ib2xzW1N0dWJiZWRXb3JsZENhY2hlUHJvbWlzZV0gPSBjcmVhdGVXb3JsZCgpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGdsb2JhbFN5bWJvbHNbU3R1YmJlZFdvcmxkQ2FjaGVQcm9taXNlXSA9IHVuZGVmaW5lZDtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuICBjb25zdCBfd29ybGQgPSBhd2FpdCBnbG9iYWxTeW1ib2xzW1N0dWJiZWRXb3JsZENhY2hlUHJvbWlzZV07XG4gIGFzc2VydFdvcmxkU3VwcG9ydHNSdW50aW1lUHJvdG9jb2woX3dvcmxkKTtcbiAgZ2xvYmFsU3ltYm9sc1tTdHViYmVkV29ybGRDYWNoZV0gPSBfd29ybGQ7XG4gIHJldHVybiB7XG4gICAgY3JlYXRlUXVldWVIYW5kbGVyOiBfd29ybGQuY3JlYXRlUXVldWVIYW5kbGVyLFxuICAgIHNwZWNWZXJzaW9uOiBfd29ybGQuc3BlY1ZlcnNpb24sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0V29ybGQgPSBhc3luYyAoKTogUHJvbWlzZTxXb3JsZD4gPT4ge1xuICBpZiAoZ2xvYmFsU3ltYm9sc1tXb3JsZENhY2hlXSkge1xuICAgIGFzc2VydFdvcmxkU3VwcG9ydHNSdW50aW1lUHJvdG9jb2woZ2xvYmFsU3ltYm9sc1tXb3JsZENhY2hlXSk7XG4gICAgcmV0dXJuIGdsb2JhbFN5bWJvbHNbV29ybGRDYWNoZV07XG4gIH1cbiAgLy8gU3RvcmUgdGhlIHByb21pc2UgaW1tZWRpYXRlbHkgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgd2l0aCBjb25jdXJyZW50IGNhbGxzLlxuICAvLyBDbGVhciBvbiByZWplY3Rpb24gc28gc3Vic2VxdWVudCBjYWxscyBjYW4gcmV0cnkgaW5zdGVhZCBvZiBjYWNoaW5nIHRoZSBmYWlsdXJlLlxuICBpZiAoIWdsb2JhbFN5bWJvbHNbV29ybGRDYWNoZVByb21pc2VdKSB7XG4gICAgZ2xvYmFsU3ltYm9sc1tXb3JsZENhY2hlUHJvbWlzZV0gPSBjcmVhdGVXb3JsZCgpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGdsb2JhbFN5bWJvbHNbV29ybGRDYWNoZVByb21pc2VdID0gdW5kZWZpbmVkO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4gIGdsb2JhbFN5bWJvbHNbV29ybGRDYWNoZV0gPSBhd2FpdCBnbG9iYWxTeW1ib2xzW1dvcmxkQ2FjaGVQcm9taXNlXTtcbiAgYXNzZXJ0V29ybGRTdXBwb3J0c1J1bnRpbWVQcm90b2NvbChnbG9iYWxTeW1ib2xzW1dvcmxkQ2FjaGVdKTtcbiAgcmV0dXJuIGdsb2JhbFN5bWJvbHNbV29ybGRDYWNoZV07XG59O1xuXG4vKipcbiAqIFJlc2V0IHRoZSBjYWNoZWQgd29ybGQgaW5zdGFuY2UuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGVudmlyb25tZW50XG4gKiB2YXJpYWJsZXMgY2hhbmdlIGFuZCB5b3UgbmVlZCB0byByZWluaXRpYWxpemUgdGhlIHdvcmxkIHdpdGggbmV3IGNvbmZpZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldFdvcmxkID0gKHdvcmxkOiBXb3JsZCB8IHVuZGVmaW5lZCk6IHZvaWQgPT4ge1xuICBnbG9iYWxTeW1ib2xzW1dvcmxkQ2FjaGVdID0gd29ybGQ7XG4gIGdsb2JhbFN5bWJvbHNbU3R1YmJlZFdvcmxkQ2FjaGVdID0gd29ybGQ7XG4gIGdsb2JhbFN5bWJvbHNbV29ybGRDYWNoZVByb21pc2VdID0gdW5kZWZpbmVkO1xuICBnbG9iYWxTeW1ib2xzW1N0dWJiZWRXb3JsZENhY2hlUHJvbWlzZV0gPSB1bmRlZmluZWQ7XG59O1xuXG4vLyBSZWdpc3RlciBnZXRXb3JsZCBvbiBnbG9iYWxUaGlzIHNvIGdldFdvcmxkTGF6eSBjYW4gY2FsbCBpdCBkaXJlY3RseSB3aGVuXG4vLyB3b3JsZC50cyBpcyBzdGF0aWNhbGx5IHByZXNlbnQgaW4gdGhlIGJ1bmRsZS5cbi8vXG4vLyBGb3Igc2VydmVyIHJvdXRlcyB0aGF0IG9ubHkgY29uc3VtZSBgc3RhcnRgIChvciBhbm90aGVyIGhlbHBlciB0aGF0IGdvZXNcbi8vIHRocm91Z2ggZ2V0V29ybGRMYXp5IHdpdGhvdXQgc3RhdGljYWxseSB1c2luZyBnZXRXb3JsZCksIHdlYnBhY2svdHVyYm9wYWNrXG4vLyB3b3VsZCBvdGhlcndpc2UgdHJlZS1zaGFrZSB3b3JsZC50cyBvdXQgb2YgdGhlIGJ1bmRsZSBlbnRpcmVseS4gVGhlXG4vLyBob3N0LW9ubHkgYC4vd29ybGQtaW5pdC50c2AgbW9kdWxlIGltcG9ydHMgd29ybGQudHMgZm9yIGl0cyBzaWRlIGVmZmVjdFxuLy8gYW5kIGlzIGl0c2VsZiBpbXBvcnRlZCBieSBgcGFja2FnZXMvd29ya2Zsb3cvc3JjL2FwaS50c2Agc28gdGhpc1xuLy8gcmVnaXN0cmF0aW9uIHJ1bnMgaW4gZXZlcnkgc2VydmVyIGJ1bmRsZSB0aGF0IHRvdWNoZXMgYHdvcmtmbG93L2FwaWAuXG4vL1xuLy8gU3RlcC9WTSBidW5kbGVzIG5ldmVyIHJlYWNoIHRoaXMgYnJhbmNoOiB0aGV5IGRvbid0IHN0YXRpY2FsbHkgaW1wb3J0XG4vLyB3b3JsZC50cywgYW5kIGB3b3JsZC1pbml0YCByZXNvbHZlcyB0byBhbiBlbXB0eSBzdHViIHZpYSB0aGUgYHdvcmtmbG93YFxuLy8gZXhwb3J0IGNvbmRpdGlvbi5cbmNvbnN0IEdldFdvcmxkRm5LZXkgPSBTeW1ib2wuZm9yKCdAd29ya2Zsb3cvd29ybGQvL2dldFdvcmxkRm4nKTtcbihnbG9iYWxUaGlzIGFzIHsgW0dldFdvcmxkRm5LZXldPzogKCkgPT4gUHJvbWlzZTxXb3JsZD4gfSlbR2V0V29ybGRGbktleV0gPz89XG4gIGdldFdvcmxkO1xuIl19
package/dist/runtime.d.ts CHANGED
@@ -6,7 +6,7 @@ export { getHookByToken, resumeHook, resumeWebhook, } from './runtime/resume-hoo
6
6
  export { getRun, Run, type WorkflowReadableStream, type WorkflowReadableStreamOptions, } from './runtime/run.js';
7
7
  export { cancelRun, listStreams, type ReadStreamOptions, type RecreateRunOptions, readStream, recreateRunFromExisting, reenqueueRun, type StopSleepOptions, type StopSleepResult, wakeUpRun, } from './runtime/runs.js';
8
8
  export { type StartOptions, type StartOptionsBase, type StartOptionsWithDeploymentId, type StartOptionsWithoutDeploymentId, start, } from './runtime/start.js';
9
- export { createWorld, getWorld, getWorldHandlers, setWorld, } from './runtime/world.js';
9
+ export { createWorld, createWorldFromModule, getWorld, getWorldHandlers, setWorld, type WorldFactoryModule, } from './runtime/world.js';
10
10
  /**
11
11
  * Creates a single route which handles workflow execution requests,
12
12
  * executing steps inline when possible to reduce function invocations
@@ -21,5 +21,6 @@ export { createWorld, getWorld, getWorldHandlers, setWorld, } from './runtime/wo
21
21
  export declare function workflowEntrypoint(workflowCode: string, options?: {
22
22
  namespace?: string;
23
23
  routeModuleBodyStartedAt?: number;
24
+ basePath?: string;
24
25
  }): (req: Request) => Promise<Response>;
25
26
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,KAAK,KAAK,EAMV,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAyDzB,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,UAAU,EACV,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,MAAM,EACN,GAAG,EACH,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,GACnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,UAAU,EACV,uBAAuB,EACvB,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,SAAS,GACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,EACjC,KAAK,+BAA+B,EACpC,KAAK,GACN,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAwJ5B;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAAE,GAClE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CA4xDrC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,KAAK,KAAK,EAMV,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAyDzB,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,UAAU,EACV,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,MAAM,EACN,GAAG,EACH,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,GACnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,UAAU,EACV,uBAAuB,EACvB,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,SAAS,GACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,EACjC,KAAK,+BAA+B,EACpC,KAAK,GACN,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAwJ5B;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CA8xDrC"}