@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.
- package/dist/commands/develop.d.ts.map +1 -1
- package/dist/commands/develop.js +82 -20
- package/dist/commands/develop.js.map +1 -1
- package/dist/commands/start.d.ts +5 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +34 -3
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/utils/dev-server/errors.d.ts +5 -0
- package/dist/commands/utils/dev-server/errors.d.ts.map +1 -0
- package/dist/commands/utils/dev-server/errors.js +14 -0
- package/dist/commands/utils/dev-server/errors.js.map +1 -0
- package/dist/commands/utils/dev-server/index.d.ts +7 -0
- package/dist/commands/utils/dev-server/index.d.ts.map +1 -0
- package/dist/commands/utils/dev-server/index.js +66 -0
- package/dist/commands/utils/dev-server/index.js.map +1 -0
- package/dist/commands/utils/dev-server/module-cache-manager.d.ts +50 -0
- package/dist/commands/utils/dev-server/module-cache-manager.d.ts.map +1 -0
- package/dist/commands/utils/dev-server/module-cache-manager.js +135 -0
- package/dist/commands/utils/dev-server/module-cache-manager.js.map +1 -0
- package/dist/commands/utils/dev-server/recovery-service.d.ts +27 -0
- package/dist/commands/utils/dev-server/recovery-service.d.ts.map +1 -0
- package/dist/commands/utils/dev-server/recovery-service.js +73 -0
- package/dist/commands/utils/dev-server/recovery-service.js.map +1 -0
- package/dist/commands/utils/dev-server/reloaders/base.d.ts +20 -0
- package/dist/commands/utils/dev-server/reloaders/base.d.ts.map +1 -0
- package/dist/commands/utils/dev-server/reloaders/base.js +33 -0
- package/dist/commands/utils/dev-server/reloaders/base.js.map +1 -0
- package/dist/commands/utils/dev-server/reloaders/jobs.d.ts +29 -0
- package/dist/commands/utils/dev-server/reloaders/jobs.d.ts.map +1 -0
- package/dist/commands/utils/dev-server/reloaders/jobs.js +77 -0
- package/dist/commands/utils/dev-server/reloaders/jobs.js.map +1 -0
- package/dist/commands/utils/dev-server/reloaders/modules.d.ts +41 -0
- package/dist/commands/utils/dev-server/reloaders/modules.d.ts.map +1 -0
- package/dist/commands/utils/dev-server/reloaders/modules.js +190 -0
- package/dist/commands/utils/dev-server/reloaders/modules.js.map +1 -0
- package/dist/commands/utils/dev-server/reloaders/routes.d.ts +23 -0
- package/dist/commands/utils/dev-server/reloaders/routes.d.ts.map +1 -0
- package/dist/commands/utils/dev-server/reloaders/routes.js +60 -0
- package/dist/commands/utils/dev-server/reloaders/routes.js.map +1 -0
- package/dist/commands/utils/dev-server/reloaders/subscribers.d.ts +31 -0
- package/dist/commands/utils/dev-server/reloaders/subscribers.d.ts.map +1 -0
- package/dist/commands/utils/dev-server/reloaders/subscribers.js +111 -0
- package/dist/commands/utils/dev-server/reloaders/subscribers.js.map +1 -0
- package/dist/commands/utils/dev-server/reloaders/workflows.d.ts +40 -0
- package/dist/commands/utils/dev-server/reloaders/workflows.d.ts.map +1 -0
- package/dist/commands/utils/dev-server/reloaders/workflows.js +129 -0
- package/dist/commands/utils/dev-server/reloaders/workflows.js.map +1 -0
- package/dist/commands/utils/dev-server/resource-registry.d.ts +12 -0
- package/dist/commands/utils/dev-server/resource-registry.d.ts.map +1 -0
- package/dist/commands/utils/dev-server/resource-registry.js +20 -0
- package/dist/commands/utils/dev-server/resource-registry.js.map +1 -0
- package/dist/commands/utils/dev-server/types.d.ts +52 -0
- package/dist/commands/utils/dev-server/types.d.ts.map +1 -0
- package/dist/commands/utils/dev-server/types.js +17 -0
- package/dist/commands/utils/dev-server/types.js.map +1 -0
- package/dist/feature-flags/backend-hmr.d.ts +4 -0
- package/dist/feature-flags/backend-hmr.d.ts.map +1 -0
- package/dist/feature-flags/backend-hmr.js +12 -0
- package/dist/feature-flags/backend-hmr.js.map +1 -0
- package/dist/loaders/api.d.ts.map +1 -1
- package/dist/loaders/api.js +6 -0
- package/dist/loaders/api.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- 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 @@
|
|
|
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;
|
|
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"}
|
package/dist/loaders/api.js
CHANGED
|
@@ -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
|
package/dist/loaders/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/loaders/api.ts"],"names":[],"mappings":";;;;;AACA,mDAAoD;
|
|
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"}
|