@medusajs/medusa 2.12.2-snapshot-20251203100938 → 2.12.2-snapshot-20251203150309

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 (64) hide show
  1. package/dist/commands/develop.d.ts.map +1 -1
  2. package/dist/commands/develop.js +82 -20
  3. package/dist/commands/develop.js.map +1 -1
  4. package/dist/commands/start.d.ts +5 -1
  5. package/dist/commands/start.d.ts.map +1 -1
  6. package/dist/commands/start.js +34 -3
  7. package/dist/commands/start.js.map +1 -1
  8. package/dist/commands/utils/dev-server/errors.d.ts +5 -0
  9. package/dist/commands/utils/dev-server/errors.d.ts.map +1 -0
  10. package/dist/commands/utils/dev-server/errors.js +14 -0
  11. package/dist/commands/utils/dev-server/errors.js.map +1 -0
  12. package/dist/commands/utils/dev-server/index.d.ts +7 -0
  13. package/dist/commands/utils/dev-server/index.d.ts.map +1 -0
  14. package/dist/commands/utils/dev-server/index.js +66 -0
  15. package/dist/commands/utils/dev-server/index.js.map +1 -0
  16. package/dist/commands/utils/dev-server/module-cache-manager.d.ts +50 -0
  17. package/dist/commands/utils/dev-server/module-cache-manager.d.ts.map +1 -0
  18. package/dist/commands/utils/dev-server/module-cache-manager.js +135 -0
  19. package/dist/commands/utils/dev-server/module-cache-manager.js.map +1 -0
  20. package/dist/commands/utils/dev-server/recovery-service.d.ts +27 -0
  21. package/dist/commands/utils/dev-server/recovery-service.d.ts.map +1 -0
  22. package/dist/commands/utils/dev-server/recovery-service.js +73 -0
  23. package/dist/commands/utils/dev-server/recovery-service.js.map +1 -0
  24. package/dist/commands/utils/dev-server/reloaders/base.d.ts +20 -0
  25. package/dist/commands/utils/dev-server/reloaders/base.d.ts.map +1 -0
  26. package/dist/commands/utils/dev-server/reloaders/base.js +33 -0
  27. package/dist/commands/utils/dev-server/reloaders/base.js.map +1 -0
  28. package/dist/commands/utils/dev-server/reloaders/jobs.d.ts +29 -0
  29. package/dist/commands/utils/dev-server/reloaders/jobs.d.ts.map +1 -0
  30. package/dist/commands/utils/dev-server/reloaders/jobs.js +77 -0
  31. package/dist/commands/utils/dev-server/reloaders/jobs.js.map +1 -0
  32. package/dist/commands/utils/dev-server/reloaders/modules.d.ts +41 -0
  33. package/dist/commands/utils/dev-server/reloaders/modules.d.ts.map +1 -0
  34. package/dist/commands/utils/dev-server/reloaders/modules.js +190 -0
  35. package/dist/commands/utils/dev-server/reloaders/modules.js.map +1 -0
  36. package/dist/commands/utils/dev-server/reloaders/routes.d.ts +23 -0
  37. package/dist/commands/utils/dev-server/reloaders/routes.d.ts.map +1 -0
  38. package/dist/commands/utils/dev-server/reloaders/routes.js +60 -0
  39. package/dist/commands/utils/dev-server/reloaders/routes.js.map +1 -0
  40. package/dist/commands/utils/dev-server/reloaders/subscribers.d.ts +31 -0
  41. package/dist/commands/utils/dev-server/reloaders/subscribers.d.ts.map +1 -0
  42. package/dist/commands/utils/dev-server/reloaders/subscribers.js +111 -0
  43. package/dist/commands/utils/dev-server/reloaders/subscribers.js.map +1 -0
  44. package/dist/commands/utils/dev-server/reloaders/workflows.d.ts +40 -0
  45. package/dist/commands/utils/dev-server/reloaders/workflows.d.ts.map +1 -0
  46. package/dist/commands/utils/dev-server/reloaders/workflows.js +129 -0
  47. package/dist/commands/utils/dev-server/reloaders/workflows.js.map +1 -0
  48. package/dist/commands/utils/dev-server/resource-registry.d.ts +12 -0
  49. package/dist/commands/utils/dev-server/resource-registry.d.ts.map +1 -0
  50. package/dist/commands/utils/dev-server/resource-registry.js +20 -0
  51. package/dist/commands/utils/dev-server/resource-registry.js.map +1 -0
  52. package/dist/commands/utils/dev-server/types.d.ts +52 -0
  53. package/dist/commands/utils/dev-server/types.d.ts.map +1 -0
  54. package/dist/commands/utils/dev-server/types.js +17 -0
  55. package/dist/commands/utils/dev-server/types.js.map +1 -0
  56. package/dist/feature-flags/backend-hmr.d.ts +4 -0
  57. package/dist/feature-flags/backend-hmr.d.ts.map +1 -0
  58. package/dist/feature-flags/backend-hmr.js +12 -0
  59. package/dist/feature-flags/backend-hmr.js.map +1 -0
  60. package/dist/loaders/api.d.ts.map +1 -1
  61. package/dist/loaders/api.js +6 -0
  62. package/dist/loaders/api.js.map +1 -1
  63. package/dist/tsconfig.tsbuildinfo +1 -1
  64. package/package.json +54 -54
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _RouteReloader_cacheManager, _RouteReloader_logSource, _RouteReloader_logger;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.RouteReloader = void 0;
16
+ const types_1 = require("../types");
17
+ const base_1 = require("./base");
18
+ /**
19
+ * Handles hot reloading of API resources (routes, middlewares, validators, etc.)
20
+ */
21
+ class RouteReloader extends base_1.BaseReloader {
22
+ constructor(apiLoader, cacheManager, logSource, logger) {
23
+ super(cacheManager, logSource, logger);
24
+ this.apiLoader = apiLoader;
25
+ _RouteReloader_cacheManager.set(this, void 0);
26
+ _RouteReloader_logSource.set(this, void 0);
27
+ _RouteReloader_logger.set(this, void 0);
28
+ __classPrivateFieldSet(this, _RouteReloader_cacheManager, cacheManager, "f");
29
+ __classPrivateFieldSet(this, _RouteReloader_logSource, logSource, "f");
30
+ __classPrivateFieldSet(this, _RouteReloader_logger, logger, "f");
31
+ }
32
+ /**
33
+ * Check if a file path is in the API directory
34
+ */
35
+ isApiPath(filePath) {
36
+ return filePath.includes(types_1.CONFIG.RESOURCE_PATH_PATTERNS.route);
37
+ }
38
+ /**
39
+ * Reload ALL API resources when any API file changes
40
+ * This clears all Express routes/middleware and reloads everything from scratch
41
+ */
42
+ async reload(_action, absoluteFilePath) {
43
+ if (!this.isApiPath(absoluteFilePath)) {
44
+ return;
45
+ }
46
+ if (!this.apiLoader) {
47
+ __classPrivateFieldGet(this, _RouteReloader_logger, "f").error(`${__classPrivateFieldGet(this, _RouteReloader_logSource, "f")} ApiLoader not available - cannot reload API`);
48
+ return;
49
+ }
50
+ __classPrivateFieldGet(this, _RouteReloader_logger, "f").info(`${__classPrivateFieldGet(this, _RouteReloader_logSource, "f")} API change detected: ${absoluteFilePath}`);
51
+ await __classPrivateFieldGet(this, _RouteReloader_cacheManager, "f").clear(absoluteFilePath, __classPrivateFieldGet(this, _RouteReloader_logger, "f"), undefined, false // Don't track as broken since we're intentionally reloading
52
+ );
53
+ this.apiLoader.clearAllResources();
54
+ await this.apiLoader.load();
55
+ __classPrivateFieldGet(this, _RouteReloader_logger, "f").info(`${__classPrivateFieldGet(this, _RouteReloader_logSource, "f")} API resources reloaded successfully`);
56
+ }
57
+ }
58
+ exports.RouteReloader = RouteReloader;
59
+ _RouteReloader_cacheManager = new WeakMap(), _RouteReloader_logSource = new WeakMap(), _RouteReloader_logger = new WeakMap();
60
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../../../src/commands/utils/dev-server/reloaders/routes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,oCAAmD;AAEnD,iCAAqC;AAErC;;GAEG;AACH,MAAa,aAAc,SAAQ,mBAAY;IAK7C,YACU,SAAgC,EACxC,YAAgC,EAChC,SAAiB,EACjB,MAAc;QAEd,KAAK,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAL9B,cAAS,GAAT,SAAS,CAAuB;QAL1C,8CAAiC;QACjC,2CAAkB;QAClB,wCAAe;QASb,uBAAA,IAAI,+BAAiB,YAAY,MAAA,CAAA;QACjC,uBAAA,IAAI,4BAAc,SAAS,MAAA,CAAA;QAC3B,uBAAA,IAAI,yBAAW,MAAM,MAAA,CAAA;IACvB,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,QAAgB;QAChC,OAAO,QAAQ,CAAC,QAAQ,CAAC,cAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAA;IAC/D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CACV,OAAyB,EACzB,gBAAwB;QAExB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACtC,OAAM;QACR,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,uBAAA,IAAI,6BAAQ,CAAC,KAAK,CAChB,GAAG,uBAAA,IAAI,gCAAW,8CAA8C,CACjE,CAAA;YACD,OAAM;QACR,CAAC;QAED,uBAAA,IAAI,6BAAQ,CAAC,IAAI,CACf,GAAG,uBAAA,IAAI,gCAAW,yBAAyB,gBAAgB,EAAE,CAC9D,CAAA;QAED,MAAM,uBAAA,IAAI,mCAAc,CAAC,KAAK,CAC5B,gBAAgB,EAChB,uBAAA,IAAI,6BAAQ,EACZ,SAAS,EACT,KAAK,CAAC,4DAA4D;SACnE,CAAA;QAED,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAA;QAElC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;QAC3B,uBAAA,IAAI,6BAAQ,CAAC,IAAI,CAAC,GAAG,uBAAA,IAAI,gCAAW,sCAAsC,CAAC,CAAA;IAC7E,CAAC;CACF;AA3DD,sCA2DC"}
@@ -0,0 +1,31 @@
1
+ import { Logger, MedusaContainer } from "@medusajs/framework/types";
2
+ import { ResourceRegistry } from "../resource-registry";
3
+ import { FileChangeAction } from "../types";
4
+ import { BaseReloader } from "./base";
5
+ import { ModuleCacheManager } from "../module-cache-manager";
6
+ /**
7
+ * Handles hot reloading of subscriber files with event-bus unregistration
8
+ */
9
+ export declare class SubscriberReloader extends BaseReloader {
10
+ #private;
11
+ private container;
12
+ private registry;
13
+ constructor(container: MedusaContainer, cacheManager: ModuleCacheManager, registry: ResourceRegistry, logSource: string, logger: Logger);
14
+ /**
15
+ * Check if a file path represents a subscriber
16
+ */
17
+ private isSubscriberPath;
18
+ /**
19
+ * Unregister a subscriber from the event-bus
20
+ */
21
+ private unregisterSubscriber;
22
+ /**
23
+ * Register a subscriber by loading the file and extracting its metadata
24
+ */
25
+ private registerSubscriber;
26
+ /**
27
+ * Reload a subscriber file if necessary
28
+ */
29
+ reload(action: FileChangeAction, absoluteFilePath: string): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=subscribers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribers.d.ts","sourceRoot":"","sources":["../../../../../src/commands/utils/dev-server/reloaders/subscribers.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,MAAM,EACN,eAAe,EAChB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAU,gBAAgB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAU5D;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;;IAMhD,OAAO,CAAC,SAAS;IAEjB,OAAO,CAAC,QAAQ;gBAFR,SAAS,EAAE,eAAe,EAClC,YAAY,EAAE,kBAAkB,EACxB,QAAQ,EAAE,gBAAgB,EAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM;IAUhB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,gBAAgB,EACxB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC;CA+BjB"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _SubscriberReloader_eventBusService, _SubscriberReloader_logSource, _SubscriberReloader_logger;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.SubscriberReloader = void 0;
16
+ const subscribers_1 = require("@medusajs/framework/subscribers");
17
+ const utils_1 = require("@medusajs/framework/utils");
18
+ const types_1 = require("../types");
19
+ const base_1 = require("./base");
20
+ /**
21
+ * Handles hot reloading of subscriber files with event-bus unregistration
22
+ */
23
+ class SubscriberReloader extends base_1.BaseReloader {
24
+ constructor(container, cacheManager, registry, logSource, logger) {
25
+ super(cacheManager, logSource, logger);
26
+ this.container = container;
27
+ this.registry = registry;
28
+ _SubscriberReloader_eventBusService.set(this, void 0);
29
+ _SubscriberReloader_logSource.set(this, void 0);
30
+ _SubscriberReloader_logger.set(this, void 0);
31
+ __classPrivateFieldSet(this, _SubscriberReloader_logSource, logSource, "f");
32
+ __classPrivateFieldSet(this, _SubscriberReloader_logger, logger, "f");
33
+ __classPrivateFieldSet(this, _SubscriberReloader_eventBusService, container.resolve(utils_1.Modules.EVENT_BUS, {
34
+ allowUnregistered: true,
35
+ }), "f");
36
+ }
37
+ /**
38
+ * Check if a file path represents a subscriber
39
+ */
40
+ isSubscriberPath(filePath) {
41
+ return filePath.includes(types_1.CONFIG.RESOURCE_PATH_PATTERNS.subscriber);
42
+ }
43
+ /**
44
+ * Unregister a subscriber from the event-bus
45
+ */
46
+ unregisterSubscriber(metadata) {
47
+ if (!__classPrivateFieldGet(this, _SubscriberReloader_eventBusService, "f")) {
48
+ return;
49
+ }
50
+ for (const event of metadata.events) {
51
+ // Create a dummy subscriber function - the event-bus will use subscriberId to find the real one
52
+ const dummySubscriber = async () => { };
53
+ dummySubscriber.subscriberId = metadata.subscriberId;
54
+ __classPrivateFieldGet(this, _SubscriberReloader_eventBusService, "f").unsubscribe(event, dummySubscriber, {
55
+ subscriberId: metadata.subscriberId,
56
+ });
57
+ }
58
+ __classPrivateFieldGet(this, _SubscriberReloader_logger, "f").debug(`${__classPrivateFieldGet(this, _SubscriberReloader_logSource, "f")} Unregistered subscriber ${metadata.subscriberId} from events: ${metadata.events.join(", ")}`);
59
+ }
60
+ /**
61
+ * Register a subscriber by loading the file and extracting its metadata
62
+ */
63
+ registerSubscriber(absoluteFilePath) {
64
+ if (!__classPrivateFieldGet(this, _SubscriberReloader_eventBusService, "f")) {
65
+ return;
66
+ }
67
+ try {
68
+ // Load the subscriber module
69
+ const subscriberModule = require(absoluteFilePath);
70
+ new subscribers_1.SubscriberLoader(absoluteFilePath, {}, this.container).createSubscriber({
71
+ fileName: absoluteFilePath,
72
+ config: subscriberModule.config,
73
+ handler: subscriberModule.default,
74
+ });
75
+ __classPrivateFieldGet(this, _SubscriberReloader_logger, "f").debug(`${__classPrivateFieldGet(this, _SubscriberReloader_logSource, "f")} Registered subscriber ${absoluteFilePath}`);
76
+ }
77
+ catch (error) {
78
+ __classPrivateFieldGet(this, _SubscriberReloader_logger, "f").error(`${__classPrivateFieldGet(this, _SubscriberReloader_logSource, "f")} Failed to register subscriber from ${absoluteFilePath}: ${error}`);
79
+ }
80
+ }
81
+ /**
82
+ * Reload a subscriber file if necessary
83
+ */
84
+ async reload(action, absoluteFilePath) {
85
+ if (!this.isSubscriberPath(absoluteFilePath)) {
86
+ return;
87
+ }
88
+ if (!__classPrivateFieldGet(this, _SubscriberReloader_eventBusService, "f")) {
89
+ __classPrivateFieldGet(this, _SubscriberReloader_logger, "f").error(`${__classPrivateFieldGet(this, _SubscriberReloader_logSource, "f")} EventBusService not available - cannot reload subscribers`);
90
+ return;
91
+ }
92
+ const existingResources = this.registry.getResources(absoluteFilePath);
93
+ if (existingResources) {
94
+ for (const [_, resources] of existingResources) {
95
+ for (const resource of resources) {
96
+ this.unregisterSubscriber({
97
+ subscriberId: resource.id,
98
+ events: resource.events,
99
+ });
100
+ }
101
+ }
102
+ }
103
+ if (action === "add" || action === "change") {
104
+ this.clearModuleCache(absoluteFilePath);
105
+ this.registerSubscriber(absoluteFilePath);
106
+ }
107
+ }
108
+ }
109
+ exports.SubscriberReloader = SubscriberReloader;
110
+ _SubscriberReloader_eventBusService = new WeakMap(), _SubscriberReloader_logSource = new WeakMap(), _SubscriberReloader_logger = new WeakMap();
111
+ //# sourceMappingURL=subscribers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribers.js","sourceRoot":"","sources":["../../../../../src/commands/utils/dev-server/reloaders/subscribers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { Logger } from "@medusajs/framework/types";
2
+ import { ModuleCacheManager } from "../module-cache-manager";
3
+ import { ResourceRegistry } from "../resource-registry";
4
+ import { DevServerGlobals, ReloadParams, FileChangeAction } from "../types";
5
+ import { BaseReloader } from "./base";
6
+ /**
7
+ * Handles hot reloading of workflow and step files
8
+ */
9
+ export declare class WorkflowReloader extends BaseReloader {
10
+ #private;
11
+ private workflowManager;
12
+ private registry;
13
+ private reloadResources;
14
+ constructor(workflowManager: DevServerGlobals["WorkflowManager"], cacheManager: ModuleCacheManager, registry: ResourceRegistry, reloadResources: (params: ReloadParams) => Promise<void>, logSource: string, logger: Logger, rootDirectory: string);
15
+ /**
16
+ * Check if a file path represents a workflow
17
+ */
18
+ private isWorkflowPath;
19
+ /**
20
+ * Reload a workflow file if necessary
21
+ */
22
+ reload(action: FileChangeAction, absoluteFilePath: string, keepCache?: boolean, skipRecovery?: boolean): Promise<void>;
23
+ /**
24
+ * Unregister workflow and step resources
25
+ */
26
+ private unregisterResources;
27
+ /**
28
+ * Handle unregistering a step and find affected workflows
29
+ */
30
+ private handleStepUnregister;
31
+ /**
32
+ * Unregister workflows found in a resource and track their paths
33
+ */
34
+ private unregisterWorkflowsInResource;
35
+ /**
36
+ * Reload workflow modules using require
37
+ */
38
+ private reloadWorkflowModules;
39
+ }
40
+ //# sourceMappingURL=workflows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../../../../src/commands/utils/dev-server/reloaders/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAEL,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EACjB,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAErC;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;;IAM9C,OAAO,CAAC,eAAe;IAEvB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,eAAe;gBAHf,eAAe,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,EAC5D,YAAY,EAAE,kBAAkB,EACxB,QAAQ,EAAE,gBAAgB,EAC1B,eAAe,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,EAChE,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM;IAQvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACG,MAAM,CACV,MAAM,EAAE,gBAAgB,EACxB,gBAAgB,EAAE,MAAM,EACxB,SAAS,GAAE,OAAe,EAC1B,YAAY,GAAE,OAAe,GAC5B,OAAO,CAAC,IAAI,CAAC;IA2ChB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAiBrC;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAS9B"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _WorkflowReloader_logSource, _WorkflowReloader_logger, _WorkflowReloader_rootDirectory;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.WorkflowReloader = void 0;
16
+ const types_1 = require("../types");
17
+ const base_1 = require("./base");
18
+ /**
19
+ * Handles hot reloading of workflow and step files
20
+ */
21
+ class WorkflowReloader extends base_1.BaseReloader {
22
+ constructor(workflowManager, cacheManager, registry, reloadResources, logSource, logger, rootDirectory) {
23
+ super(cacheManager, logSource, logger);
24
+ this.workflowManager = workflowManager;
25
+ this.registry = registry;
26
+ this.reloadResources = reloadResources;
27
+ _WorkflowReloader_logSource.set(this, void 0);
28
+ _WorkflowReloader_logger.set(this, void 0);
29
+ _WorkflowReloader_rootDirectory.set(this, void 0);
30
+ __classPrivateFieldSet(this, _WorkflowReloader_logSource, logSource, "f");
31
+ __classPrivateFieldSet(this, _WorkflowReloader_logger, logger, "f");
32
+ __classPrivateFieldSet(this, _WorkflowReloader_rootDirectory, rootDirectory, "f");
33
+ }
34
+ /**
35
+ * Check if a file path represents a workflow
36
+ */
37
+ isWorkflowPath(filePath) {
38
+ return filePath.includes(types_1.CONFIG.RESOURCE_PATH_PATTERNS.workflow);
39
+ }
40
+ /**
41
+ * Reload a workflow file if necessary
42
+ */
43
+ async reload(action, absoluteFilePath, keepCache = false, skipRecovery = false) {
44
+ if (!this.isWorkflowPath(absoluteFilePath)) {
45
+ return;
46
+ }
47
+ if (!this.workflowManager) {
48
+ __classPrivateFieldGet(this, _WorkflowReloader_logger, "f").error(`${__classPrivateFieldGet(this, _WorkflowReloader_logSource, "f")} WorkflowManager not available - cannot reload workflows`);
49
+ return;
50
+ }
51
+ const requirableWorkflowPaths = new Set();
52
+ const reloaders = [];
53
+ // Unregister resources and collect affected workflows
54
+ this.unregisterResources(absoluteFilePath, requirableWorkflowPaths);
55
+ if (!keepCache) {
56
+ await this.clearParentChildModulesCache(absoluteFilePath, reloaders, this.reloadResources, skipRecovery, __classPrivateFieldGet(this, _WorkflowReloader_rootDirectory, "f"));
57
+ }
58
+ this.clearModuleCache(absoluteFilePath);
59
+ // Reload workflows that were affected
60
+ if (action !== "unlink") {
61
+ this.reloadWorkflowModules(requirableWorkflowPaths, absoluteFilePath);
62
+ }
63
+ // Execute deferred reloaders
64
+ if (reloaders.length) {
65
+ await Promise.all(reloaders.map(async (reloader) => reloader()));
66
+ }
67
+ }
68
+ /**
69
+ * Unregister workflow and step resources
70
+ */
71
+ unregisterResources(absoluteFilePath, affectedWorkflows) {
72
+ const resources = this.registry.getResources(absoluteFilePath);
73
+ if (!resources) {
74
+ return;
75
+ }
76
+ for (const [type, resourceList] of resources.entries()) {
77
+ for (const resource of resourceList) {
78
+ if (type === "workflow") {
79
+ this.workflowManager.unregister(resource.id);
80
+ }
81
+ else if (type === "step") {
82
+ this.handleStepUnregister(resource, affectedWorkflows);
83
+ }
84
+ }
85
+ }
86
+ }
87
+ /**
88
+ * Handle unregistering a step and find affected workflows
89
+ */
90
+ handleStepUnregister(stepResource, affectedWorkflows) {
91
+ const workflowSourcePaths = this.registry.getWorkflowSourcePaths(stepResource.id);
92
+ if (!workflowSourcePaths) {
93
+ return;
94
+ }
95
+ for (const sourcePath of workflowSourcePaths) {
96
+ const workflowResources = this.registry.getResources(sourcePath);
97
+ if (!workflowResources) {
98
+ continue;
99
+ }
100
+ this.unregisterWorkflowsInResource(workflowResources, affectedWorkflows, sourcePath);
101
+ }
102
+ }
103
+ /**
104
+ * Unregister workflows found in a resource and track their paths
105
+ */
106
+ unregisterWorkflowsInResource(workflowResources, affectedWorkflows, sourcePath) {
107
+ for (const [type, resourceList] of workflowResources.entries()) {
108
+ if (type !== "workflow") {
109
+ continue;
110
+ }
111
+ for (const workflow of resourceList) {
112
+ this.workflowManager.unregister(workflow.id);
113
+ affectedWorkflows.add(sourcePath);
114
+ }
115
+ }
116
+ }
117
+ /**
118
+ * Reload workflow modules using require
119
+ */
120
+ reloadWorkflowModules(workflowPaths, mainFilePath) {
121
+ for (const workflowPath of workflowPaths) {
122
+ require(workflowPath);
123
+ }
124
+ require(mainFilePath);
125
+ }
126
+ }
127
+ exports.WorkflowReloader = WorkflowReloader;
128
+ _WorkflowReloader_logSource = new WeakMap(), _WorkflowReloader_logger = new WeakMap(), _WorkflowReloader_rootDirectory = new WeakMap();
129
+ //# sourceMappingURL=workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../../../../src/commands/utils/dev-server/reloaders/workflows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { ResourceMap, ResourcePath } from "@medusajs/framework/utils";
2
+ export declare class ResourceRegistry {
3
+ /**
4
+ * Get resources registered for a given file path
5
+ */
6
+ getResources(filePath: string): ResourceMap | undefined;
7
+ /**
8
+ * Get workflow source paths for a step resource
9
+ */
10
+ getWorkflowSourcePaths(stepId: string): ResourcePath[] | undefined;
11
+ }
12
+ //# sourceMappingURL=resource-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-registry.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/dev-server/resource-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,WAAW,EACX,YAAY,EACb,MAAM,2BAA2B,CAAA;AAElC,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIvD;;OAEG;IACH,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,GAAG,SAAS;CAGnE"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResourceRegistry = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ class ResourceRegistry {
6
+ /**
7
+ * Get resources registered for a given file path
8
+ */
9
+ getResources(filePath) {
10
+ return utils_1.globalDevServerRegistry.get(filePath);
11
+ }
12
+ /**
13
+ * Get workflow source paths for a step resource
14
+ */
15
+ getWorkflowSourcePaths(stepId) {
16
+ return utils_1.inverseDevServerRegistry.get(`step:${stepId}`);
17
+ }
18
+ }
19
+ exports.ResourceRegistry = ResourceRegistry;
20
+ //# sourceMappingURL=resource-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-registry.js","sourceRoot":"","sources":["../../../../src/commands/utils/dev-server/resource-registry.ts"],"names":[],"mappings":";;;AAAA,qDAKkC;AAElC,MAAa,gBAAgB;IAC3B;;OAEG;IACH,YAAY,CAAC,QAAgB;QAC3B,OAAO,+BAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC9C,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,MAAc;QACnC,OAAO,gCAAwB,CAAC,GAAG,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAA;IACvD,CAAC;CACF;AAdD,4CAcC"}
@@ -0,0 +1,52 @@
1
+ import { ApiLoader } from "@medusajs/framework";
2
+ import { Logger } from "@medusajs/framework/types";
3
+ /**
4
+ * Action types that can be performed on files
5
+ */
6
+ export type FileChangeAction = "add" | "change" | "unlink";
7
+ /**
8
+ * Configuration for path matching and exclusions
9
+ */
10
+ export declare const CONFIG: {
11
+ readonly EXCLUDED_PATH_PATTERNS: readonly ["node_modules"];
12
+ readonly RESOURCE_PATH_PATTERNS: {
13
+ readonly route: "api/";
14
+ readonly workflow: "workflows/";
15
+ readonly subscriber: "subscribers/";
16
+ readonly job: "jobs/";
17
+ readonly module: "modules/";
18
+ };
19
+ };
20
+ /**
21
+ * Global dependencies available in the dev server environment
22
+ */
23
+ export interface DevServerGlobals {
24
+ __MEDUSA_HMR_API_LOADER__?: ApiLoader;
25
+ __MEDUSA_HMR_INITIAL_STACK_LENGTH__?: number;
26
+ WorkflowManager?: {
27
+ unregister: (id: string) => void;
28
+ };
29
+ }
30
+ /**
31
+ * Parameters for resource reload operations
32
+ */
33
+ export interface ReloadParams {
34
+ /**
35
+ * The source of the log, used to prefix the log messages
36
+ */
37
+ logSource: string;
38
+ action: FileChangeAction;
39
+ absoluteFilePath: string;
40
+ keepCache?: boolean;
41
+ logger: Logger;
42
+ skipRecovery?: boolean;
43
+ rootDirectory: string;
44
+ }
45
+ /**
46
+ * Represents a resource registered in the dev server
47
+ */
48
+ export interface Resource {
49
+ id: string;
50
+ [key: string]: any;
51
+ }
52
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/commands/utils/dev-server/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE1D;;GAEG;AACH,eAAO,MAAM,MAAM;;;;;;;;;CAST,CAAA;AAEV;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB,CAAC,EAAE,SAAS,CAAA;IACrC,mCAAmC,CAAC,EAAE,MAAM,CAAA;IAC5C,eAAe,CAAC,EAAE;QAChB,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;KACjC,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,gBAAgB,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CONFIG = void 0;
4
+ /**
5
+ * Configuration for path matching and exclusions
6
+ */
7
+ exports.CONFIG = {
8
+ EXCLUDED_PATH_PATTERNS: ["node_modules"],
9
+ RESOURCE_PATH_PATTERNS: {
10
+ route: "api/",
11
+ workflow: "workflows/",
12
+ subscriber: "subscribers/",
13
+ job: "jobs/",
14
+ module: "modules/",
15
+ },
16
+ };
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/commands/utils/dev-server/types.ts"],"names":[],"mappings":";;;AAQA;;GAEG;AACU,QAAA,MAAM,GAAG;IACpB,sBAAsB,EAAE,CAAC,cAAc,CAAC;IACxC,sBAAsB,EAAE;QACtB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,YAAY;QACtB,UAAU,EAAE,cAAc;QAC1B,GAAG,EAAE,OAAO;QACZ,MAAM,EAAE,UAAU;KACnB;CACO,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { FlagSettings } from "@medusajs/framework/feature-flags";
2
+ declare const BackendHmrFeatureFlag: FlagSettings;
3
+ export default BackendHmrFeatureFlag;
4
+ //# sourceMappingURL=backend-hmr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-hmr.d.ts","sourceRoot":"","sources":["../../src/feature-flags/backend-hmr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAEhE,QAAA,MAAM,qBAAqB,EAAE,YAQ5B,CAAA;AAED,eAAe,qBAAqB,CAAA"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const BackendHmrFeatureFlag = {
4
+ key: "backend_hmr",
5
+ default_val: false,
6
+ env_key: "MEDUSA_FF_BACKEND_HMR",
7
+ description: "Enable experimental Hot Module Replacement (HMR) for backend development. " +
8
+ "When enabled, route, middleware, workflows and steps changes reload in <10ms without restarting the server. " +
9
+ "Database connections and container state persist across reloads.",
10
+ };
11
+ exports.default = BackendHmrFeatureFlag;
12
+ //# sourceMappingURL=backend-hmr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-hmr.js","sourceRoot":"","sources":["../../src/feature-flags/backend-hmr.ts"],"names":[],"mappings":";;AAEA,MAAM,qBAAqB,GAAiB;IAC1C,GAAG,EAAE,aAAa;IAClB,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,uBAAuB;IAChC,WAAW,EACT,4EAA4E;QAC5E,8GAA8G;QAC9G,kEAAkE;CACrE,CAAA;AAED,kBAAe,qBAAqB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/loaders/api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAIjC,KAAK,OAAO,GAAG;IACb,GAAG,EAAE,OAAO,CAAA;IACZ,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,SAAS,EAAE,eAAe,CAAA;CAC3B,CAAA;yBAEqB,6BAA6B,OAAO;AAA1D,wBAyDC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/loaders/api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE1E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAIjC,KAAK,OAAO,GAAG;IACb,GAAG,EAAE,OAAO,CAAA;IACZ,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,SAAS,EAAE,eAAe,CAAA;CAC3B,CAAA;yBAEqB,6BAA6B,OAAO;AAA1D,wBA+DC"}
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const http_1 = require("@medusajs/framework/http");
7
+ const utils_1 = require("@medusajs/framework/utils");
7
8
  const path_1 = require("path");
8
9
  const qs_1 = __importDefault(require("qs"));
9
10
  exports.default = async ({ app, container, plugins }) => {
@@ -18,6 +19,11 @@ exports.default = async ({ app, container, plugins }) => {
18
19
  }
19
20
  next();
20
21
  });
22
+ // Store the initial router stack length before loading API resources for HMR
23
+ if (utils_1.FeatureFlag.isFeatureEnabled("backend_hmr")) {
24
+ const initialStackLength = app._router?.stack?.length ?? 0;
25
+ global.__MEDUSA_HMR_INITIAL_STACK_LENGTH__ = initialStackLength;
26
+ }
21
27
  const sourcePaths = [];
22
28
  /**
23
29
  * Always load plugin routes before the Medusa core routes, since it
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/loaders/api.ts"],"names":[],"mappings":";;;;;AACA,mDAAoD;AAGpD,+BAA2B;AAC3B,4CAAmB;AAQnB,kBAAe,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAW,EAAE,EAAE;IAC5D,sGAAsG;IACtG,4FAA4F;IAC5F,GAAG,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,GAAG,EAAE,IAAI;QAC9B,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpC,SAAS,CAAC,KAAK,EAAE,CAAA;QACjB,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC1C,IAAI,cAAc,EAAE,CAAC;YACnB,GAAG,CAAC,KAAK,GAAG,YAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAA;QAChE,CAAC;QACD,IAAI,EAAE,CAAA;IACR,CAAC,CAAC,CAAA;IAEF,MAAM,WAAW,GAAa,EAAE,CAAA;IAEhC;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,IAAI,CACd,IAAA,WAAI,EAAC,SAAS,EAAE,QAAQ,CAAC,EACzB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;QAC/B,OAAO,IAAA,WAAI,EAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC3C,CAAC,CAAC,CACH,CAAA;IAED,MAAM,EACJ,aAAa,EAAE,EACb,IAAI,EAAE,EAAE,gBAAgB,EAAE,GAC3B,GACF,GAAG,SAAS,CAAC,OAAO,CAAe,cAAc,CAAC,CAAA;IAEnD,oFAAoF;IACpF,+BAA+B;IAC/B,6EAA6E;IAC7E,IAAI,CAAC;QACH,MAAM,IAAI,gBAAS,CAAC;YAClB,GAAG,EAAE,GAAG;YACR,SAAS,EAAE,WAAW;YACtB,oBAAoB,EAAE,gBAAgB,EAAE,KAAK;YAC7C,SAAS;SACV,CAAC,CAAC,IAAI,EAAE,CAAA;IACX,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,CACT,0DAA0D,GAAG,CAAC,OAAO,EAAE,CACxE,CAAA;IACH,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/loaders/api.ts"],"names":[],"mappings":";;;;;AACA,mDAAoD;AAEpD,qDAAuD;AAEvD,+BAA2B;AAC3B,4CAAmB;AAQnB,kBAAe,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAW,EAAE,EAAE;IAC5D,sGAAsG;IACtG,4FAA4F;IAC5F,GAAG,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,GAAG,EAAE,IAAI;QAC9B,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpC,SAAS,CAAC,KAAK,EAAE,CAAA;QACjB,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC1C,IAAI,cAAc,EAAE,CAAC;YACnB,GAAG,CAAC,KAAK,GAAG,YAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAA;QAChE,CAAC;QACD,IAAI,EAAE,CAAA;IACR,CAAC,CAAC,CAAA;IAEF,6EAA6E;IAC7E,IAAI,mBAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC;QAChD,MAAM,kBAAkB,GAAI,GAAW,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAClE;QAAC,MAAc,CAAC,mCAAmC,GAAG,kBAAkB,CAAA;IAC3E,CAAC;IAED,MAAM,WAAW,GAAa,EAAE,CAAA;IAEhC;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,IAAI,CACd,IAAA,WAAI,EAAC,SAAS,EAAE,QAAQ,CAAC,EACzB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;QAC/B,OAAO,IAAA,WAAI,EAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC3C,CAAC,CAAC,CACH,CAAA;IAED,MAAM,EACJ,aAAa,EAAE,EACb,IAAI,EAAE,EAAE,gBAAgB,EAAE,GAC3B,GACF,GAAG,SAAS,CAAC,OAAO,CAAe,cAAc,CAAC,CAAA;IAEnD,oFAAoF;IACpF,+BAA+B;IAC/B,6EAA6E;IAC7E,IAAI,CAAC;QACH,MAAM,IAAI,gBAAS,CAAC;YAClB,GAAG,EAAE,GAAG;YACR,SAAS,EAAE,WAAW;YACtB,oBAAoB,EAAE,gBAAgB,EAAE,KAAK;YAC7C,SAAS;SACV,CAAC,CAAC,IAAI,EAAE,CAAA;IACX,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,CACT,0DAA0D,GAAG,CAAC,OAAO,EAAE,CACxE,CAAA;IACH,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}