lwr 0.12.0-alpha.8 → 0.12.0

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 (42) hide show
  1. package/build/cjs/cli/commands/audit.cjs +257 -0
  2. package/build/cjs/cli/commands/cli.cjs +6 -0
  3. package/build/cjs/cli/commands/mrt-dev.cjs +65 -0
  4. package/build/cjs/cli/commands/mrt-package.cjs +66 -0
  5. package/build/cjs/cli/commands/preview.cjs +2 -2
  6. package/build/cjs/cli/commands/treeify.d.cjs +0 -0
  7. package/build/cjs/cli/localdev/dev-server.cjs +117 -0
  8. package/build/cjs/cli/localdev/hooks/dev-context-hook.cjs +39 -0
  9. package/build/cjs/cli/localdev/hooks/package-context-hook.cjs +38 -0
  10. package/build/cjs/cli/localdev/providers/alias-static-module-provider.cjs +51 -0
  11. package/build/cjs/cli/localdev/providers/evergreen-lwc-module-provider.cjs +44 -0
  12. package/build/cjs/cli/localdev/providers/fallthrough-module-provider.cjs +55 -0
  13. package/build/cjs/cli/localdev/providers/override-bundle-provider.cjs +144 -0
  14. package/build/cjs/cli/localdev/providers/sfdx-module-provider.cjs +55 -0
  15. package/build/cjs/cli/utils.cjs +8 -0
  16. package/build/es/cli/commands/audit.d.ts +3 -0
  17. package/build/es/cli/commands/audit.js +362 -0
  18. package/build/es/cli/commands/cli.js +6 -0
  19. package/build/es/cli/commands/mrt-dev.d.ts +3 -0
  20. package/build/es/cli/commands/mrt-dev.js +47 -0
  21. package/build/es/cli/commands/mrt-package.d.ts +3 -0
  22. package/build/es/cli/commands/mrt-package.js +49 -0
  23. package/build/es/cli/commands/preview.js +2 -2
  24. package/build/es/cli/localdev/dev-server.d.ts +3 -0
  25. package/build/es/cli/localdev/dev-server.js +102 -0
  26. package/build/es/cli/localdev/hooks/dev-context-hook.d.ts +5 -0
  27. package/build/es/cli/localdev/hooks/dev-context-hook.js +12 -0
  28. package/build/es/cli/localdev/hooks/package-context-hook.d.ts +5 -0
  29. package/build/es/cli/localdev/hooks/package-context-hook.js +11 -0
  30. package/build/es/cli/localdev/providers/alias-static-module-provider.d.ts +7 -0
  31. package/build/es/cli/localdev/providers/alias-static-module-provider.js +23 -0
  32. package/build/es/cli/localdev/providers/evergreen-lwc-module-provider.d.ts +8 -0
  33. package/build/es/cli/localdev/providers/evergreen-lwc-module-provider.js +17 -0
  34. package/build/es/cli/localdev/providers/fallthrough-module-provider.d.ts +13 -0
  35. package/build/es/cli/localdev/providers/fallthrough-module-provider.js +33 -0
  36. package/build/es/cli/localdev/providers/override-bundle-provider.d.ts +14 -0
  37. package/build/es/cli/localdev/providers/override-bundle-provider.js +139 -0
  38. package/build/es/cli/localdev/providers/sfdx-module-provider.d.ts +7 -0
  39. package/build/es/cli/localdev/providers/sfdx-module-provider.js +27 -0
  40. package/build/es/cli/utils.d.ts +2 -0
  41. package/build/es/cli/utils.js +9 -0
  42. package/package.json +19 -11
@@ -0,0 +1,257 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, {get: all[name], enumerable: true});
11
+ };
12
+ var __exportStar = (target, module2, desc) => {
13
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
+ for (let key of __getOwnPropNames(module2))
15
+ if (!__hasOwnProp.call(target, key) && key !== "default")
16
+ __defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
17
+ }
18
+ return target;
19
+ };
20
+ var __toModule = (module2) => {
21
+ return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
22
+ };
23
+
24
+ // packages/lwr/src/cli/commands/audit.ts
25
+ __markAsModule(exports);
26
+ __export(exports, {
27
+ createAuditCommand: () => createAuditCommand
28
+ });
29
+ var import_compiler = __toModule(require("@lwc/compiler"));
30
+ var import_module_resolver = __toModule(require("@lwc/module-resolver"));
31
+ var import_config = __toModule(require("@lwrjs/config"));
32
+ var import_shared_utils = __toModule(require("@lwrjs/shared-utils"));
33
+ var import_commander = __toModule(require("commander"));
34
+ var import_chalk = __toModule(require("chalk"));
35
+ var import_path = __toModule(require("path"));
36
+ var import_fs = __toModule(require("fs"));
37
+ var import_object_treeify = __toModule(require("object-treeify"));
38
+ var import_xml2js = __toModule(require("xml2js"));
39
+ var CAPABILITY_SSR_ONLY = "lightning__ServerRenderable";
40
+ var CAPABILITY_SSR_HYDRATION = "lightning__ServerRenderableWithHydration";
41
+ var CAPABILITY_UNKNOWN = "Unknown";
42
+ var CAPABILITY_PRIVATE = "Private";
43
+ var PLATFORM_NS = ["lwr", "webruntime", "lightning"];
44
+ var LWC_REGEX = /^[\w-]+\/[\w-]+$/;
45
+ var LWC_TRANSFORM_CONFIG = {
46
+ experimentalDynamicComponent: {strictSpecifier: false},
47
+ enableDynamicComponents: true,
48
+ enableScopedSlots: true
49
+ };
50
+ var SFDX_CONFIG_PATH = "sfdx-project.json";
51
+ var CACHE = new Map();
52
+ function createAuditCommand() {
53
+ return new import_commander.Command("audit").description("Audit the SSR capabilities of components").requiredOption("--components <component...>", '[string] space-separated list of component names to analyze (eg "header footer nav")').option("--namespace <string>", "[string] namespace of the components", "c").option("--depth <number>", "[number] number of levels to analyze", "1").option("--verbose", "[boolean] show tree of all analyzed components", false).action(async (options, cmd) => {
54
+ CACHE.clear();
55
+ const opts = cmd.optsWithGlobals();
56
+ const {components, config, depth: depthStr, namespace: ns, rootDir, verbose} = opts;
57
+ const lwcConfig = getLwcConfig(rootDir, config);
58
+ let depth = parseInt(depthStr);
59
+ if (isNaN(depth) || depth < 1) {
60
+ console.log(import_chalk.default.bgYellow("WARN"), `Depth cannot be ${depthStr}, defaulting to 1`);
61
+ depth = 1;
62
+ }
63
+ const cmpList = components.map((c) => `${ns}/${c}`).join(", ");
64
+ console.log(`\u2728 Auditing SSR capabilities for ${import_chalk.default.bgGray(cmpList)}...`);
65
+ let greatSuccess = true;
66
+ for (const c of components) {
67
+ const info = await analyzeComponentCapabilities(`${ns}/${c}`, rootDir, lwcConfig, depth);
68
+ if (info) {
69
+ const success = print(info, verbose);
70
+ greatSuccess = success && greatSuccess;
71
+ } else {
72
+ greatSuccess = false;
73
+ console.log(import_chalk.default.bgRed("FAIL"), import_chalk.default.bgGray(`${ns}/${c}`), "cannot be found");
74
+ }
75
+ }
76
+ if (!greatSuccess)
77
+ process.exit(1);
78
+ });
79
+ }
80
+ async function analyzeComponentCapabilities(specifier, rootDir, modules, depth) {
81
+ if (CACHE.has(specifier))
82
+ return CACHE.get(specifier);
83
+ const cmpDir = await getComponentDir(specifier, rootDir, modules);
84
+ const info = cmpDir ? {
85
+ specifier,
86
+ ssrCapability: await parseSsrCapability(specifier, cmpDir),
87
+ children: await analyzeChildren(specifier, cmpDir, rootDir, modules, depth)
88
+ } : void 0;
89
+ info && CACHE.set(specifier, info);
90
+ return info;
91
+ }
92
+ async function getComponentDir(specifier, rootDir, modules) {
93
+ try {
94
+ const s = isSFDX(rootDir) ? specifier.replace(/^c\//, "lwc/") : specifier;
95
+ const {entry} = (0, import_module_resolver.resolveModule)(s, rootDir, {modules, rootDir});
96
+ return import_path.default.dirname(entry);
97
+ } catch (e) {
98
+ if (e.code === "NO_LWC_MODULE_FOUND") {
99
+ return void 0;
100
+ } else {
101
+ throw e;
102
+ }
103
+ }
104
+ }
105
+ async function parseSsrCapability(specifier, cmpDir) {
106
+ const xml = readFile(import_path.default.join(cmpDir, `${(0, import_shared_utils.explodeSpecifier)(specifier).name}.js-meta.xml`));
107
+ if (!xml) {
108
+ console.log(import_chalk.default.bgYellow("WARN"), import_chalk.default.bgGray(specifier), "does not have a js-meta.xml file");
109
+ return void 0;
110
+ }
111
+ const metadata = await (0, import_xml2js.parseStringPromise)(xml);
112
+ const capabilities = metadata.LightningComponentBundle?.capabilities;
113
+ const capability = Array.isArray(capabilities) ? capabilities[0].capability : void 0;
114
+ if (Array.isArray(capability)) {
115
+ return capability.includes(CAPABILITY_SSR_ONLY) ? CAPABILITY_SSR_ONLY : capability.includes(CAPABILITY_SSR_HYDRATION) ? CAPABILITY_SSR_HYDRATION : void 0;
116
+ } else if (typeof capability === "string") {
117
+ return capability.startsWith(CAPABILITY_SSR_ONLY) ? capability : void 0;
118
+ }
119
+ return void 0;
120
+ }
121
+ async function analyzeChildren(specifier, cmpDir, rootDir, modules, maxDepth = 1, curDepth = 0) {
122
+ if (curDepth === maxDepth)
123
+ return [];
124
+ const htmlDeps = await parseHtmlDeps(specifier, cmpDir);
125
+ const jsDeps = await parseJsDeps(specifier, cmpDir);
126
+ const deps = [...htmlDeps, ...jsDeps];
127
+ const children = [];
128
+ for (const d of deps) {
129
+ if (CACHE.has(d)) {
130
+ children.push(CACHE.get(d));
131
+ continue;
132
+ }
133
+ const dir = await getComponentDir(d, rootDir, modules);
134
+ const {namespace = ""} = (0, import_shared_utils.explodeSpecifier)(d);
135
+ const child = dir ? {
136
+ specifier: d,
137
+ ssrCapability: await parseSsrCapability(d, dir),
138
+ children: await analyzeChildren(d, dir, rootDir, modules, maxDepth, curDepth + 1)
139
+ } : PLATFORM_NS.includes(namespace) ? {specifier: d, ssrCapability: CAPABILITY_PRIVATE, children: []} : {specifier: d, ssrCapability: CAPABILITY_UNKNOWN, children: []};
140
+ CACHE.set(d, child);
141
+ children.push(child);
142
+ }
143
+ return children;
144
+ }
145
+ async function parseHtmlDeps(specifier, cmpDir) {
146
+ const filename = `${(0, import_shared_utils.explodeSpecifier)(specifier).name}.html`;
147
+ const htmlCode = readFile(import_path.default.join(cmpDir, filename));
148
+ if (!htmlCode)
149
+ return [];
150
+ const {namespace, name} = (0, import_shared_utils.explodeSpecifier)(specifier);
151
+ const {code} = (0, import_compiler.transformSync)(htmlCode, filename, {...LWC_TRANSFORM_CONFIG, namespace, name});
152
+ const {imports = []} = await (0, import_shared_utils.getImportMetadata)(code);
153
+ return imports.map((i) => i.moduleSpecifier).filter((d) => LWC_REGEX.test(d));
154
+ }
155
+ async function parseJsDeps(specifier, cmpDir) {
156
+ let jsCode = readFile(import_path.default.join(cmpDir, `${(0, import_shared_utils.explodeSpecifier)(specifier).name}.js`));
157
+ if (!jsCode) {
158
+ jsCode = readFile(import_path.default.join(cmpDir, `${(0, import_shared_utils.explodeSpecifier)(specifier).name}.ts`));
159
+ }
160
+ if (!jsCode)
161
+ return [];
162
+ const {imports = []} = await (0, import_shared_utils.getImportMetadata)(jsCode);
163
+ return imports.map((i) => i.moduleSpecifier).filter((d) => LWC_REGEX.test(d));
164
+ }
165
+ function getLwcConfig(rootDir, lwrFile) {
166
+ const absLwrConfigPath = import_path.default.isAbsolute(lwrFile) ? lwrFile : import_path.default.join(rootDir, lwrFile);
167
+ if (import_fs.default.existsSync(absLwrConfigPath)) {
168
+ const {appConfig} = (0, import_config.loadConfig)({rootDir, lwrConfigFile: lwrFile});
169
+ return appConfig.lwc.modules;
170
+ }
171
+ const lwcConfigStr = readFile(import_path.default.join(rootDir, "lwc.config.json"));
172
+ if (lwcConfigStr) {
173
+ const lwcConfig = JSON.parse(lwcConfigStr).lwc?.modules;
174
+ if (lwcConfig)
175
+ return lwcConfig;
176
+ }
177
+ const sfdxConfigStr = readFile(import_path.default.join(rootDir, SFDX_CONFIG_PATH));
178
+ const modules = [];
179
+ if (sfdxConfigStr) {
180
+ const sfdxConfig = JSON.parse(sfdxConfigStr);
181
+ const pkgDirs = sfdxConfig.packageDirectories || [];
182
+ pkgDirs.forEach((d) => modules.push({dir: import_path.default.join(d.path, "main/default")}));
183
+ }
184
+ const pkgConfigStr = readFile(import_path.default.join(rootDir, "package.json"));
185
+ if (pkgConfigStr) {
186
+ const pkgConfig = JSON.parse(pkgConfigStr).lwc?.modules;
187
+ if (pkgConfig)
188
+ modules.push(...pkgConfig);
189
+ }
190
+ if (!modules.length) {
191
+ console.log(import_chalk.default.bgRed("FAIL"), "LWC config not found in", import_chalk.default.bgGray(rootDir));
192
+ process.exit(1);
193
+ }
194
+ return modules;
195
+ }
196
+ function readFile(filePath) {
197
+ if (import_fs.default.existsSync(filePath)) {
198
+ return import_fs.default.readFileSync(filePath, "utf8");
199
+ }
200
+ }
201
+ function isSFDX(rootDir) {
202
+ return import_fs.default.existsSync(import_path.default.join(rootDir, SFDX_CONFIG_PATH));
203
+ }
204
+ var SUCCESS_MSG = "contains no capability incompatibilities!";
205
+ var WARN_MSG = "depends on one or more components which are not available locally and must be analyzed manually:";
206
+ var SSR_ERROR_MSG = "has the ServerRenderable capability so it cannot depend on components with no SSR capability or the ServerRenderableWithHydration capability:";
207
+ var HYDRATE_ERROR_MSG = "has the ServerRenderableWithHydration capability so it cannot depend on components with no SSR capability:";
208
+ var CSR_ONLY = "No SSR capability";
209
+ var LIST_SEP = "\n - ";
210
+ function print(info, verbose = false) {
211
+ let success = true;
212
+ const childCaps = {hydrate: new Set(), csr: new Set(), unknown: new Set()};
213
+ groupCapabilitiesByType(childCaps, info);
214
+ if (verbose) {
215
+ const tree = buildTree([info], info.ssrCapability, true);
216
+ tree && console.log("\n", (0, import_object_treeify.default)(tree), "\n");
217
+ }
218
+ if (info.ssrCapability === CAPABILITY_SSR_HYDRATION && childCaps.csr.size) {
219
+ success = false;
220
+ console.log(import_chalk.default.bgRed("FAIL"), import_chalk.default.bgGray(info.specifier), HYDRATE_ERROR_MSG, LIST_SEP + [...childCaps.csr].join(LIST_SEP));
221
+ } else if (info.ssrCapability === CAPABILITY_SSR_ONLY && (childCaps.csr.size || childCaps.hydrate.size)) {
222
+ success = false;
223
+ console.log(import_chalk.default.bgRed("FAIL"), import_chalk.default.bgGray(info.specifier), SSR_ERROR_MSG, LIST_SEP + [...childCaps.csr, ...childCaps.hydrate].join(LIST_SEP));
224
+ } else {
225
+ console.log(import_chalk.default.bgGreen("PASS"), import_chalk.default.bgGray(info.specifier), SUCCESS_MSG);
226
+ }
227
+ if (childCaps.unknown.size) {
228
+ console.log(import_chalk.default.bgYellow("WARN"), import_chalk.default.bgGray(info.specifier), WARN_MSG, LIST_SEP + [...childCaps.unknown].join(LIST_SEP));
229
+ }
230
+ return success;
231
+ }
232
+ function groupCapabilitiesByType(all, info) {
233
+ for (const c of info.children) {
234
+ if (!c.ssrCapability) {
235
+ all.csr.add(c.specifier);
236
+ } else if (c.ssrCapability === CAPABILITY_SSR_HYDRATION) {
237
+ all.hydrate.add(c.specifier);
238
+ } else if (c.ssrCapability === CAPABILITY_UNKNOWN) {
239
+ all.unknown.add(c.specifier);
240
+ }
241
+ groupCapabilitiesByType(all, c);
242
+ }
243
+ return all;
244
+ }
245
+ function buildTree(info, rootCap, isRoot = false) {
246
+ if (!info.length)
247
+ return null;
248
+ const tree = {};
249
+ for (const i of info) {
250
+ const cap = i.ssrCapability;
251
+ if (cap === CAPABILITY_PRIVATE)
252
+ continue;
253
+ const status = isRoot ? "" : cap === CAPABILITY_UNKNOWN ? import_chalk.default.bgYellow("WARN") : !rootCap || rootCap === CAPABILITY_SSR_ONLY && cap === CAPABILITY_SSR_ONLY || rootCap === CAPABILITY_SSR_HYDRATION && cap ? import_chalk.default.bgGreen("PASS") : import_chalk.default.bgRed("FAIL");
254
+ tree[`${status} ${import_chalk.default.bgGray(i.specifier)} ${cap || CSR_ONLY}`] = buildTree(i.children, rootCap);
255
+ }
256
+ return tree;
257
+ }
@@ -27,10 +27,13 @@ __export(exports, {
27
27
  createCLI: () => createCLI
28
28
  });
29
29
  var import_commander = __toModule(require("commander"));
30
+ var import_audit = __toModule(require("./audit.cjs"));
30
31
  var import_build = __toModule(require("./build.cjs"));
31
32
  var import_dev = __toModule(require("./dev.cjs"));
32
33
  var import_preview = __toModule(require("./preview.cjs"));
33
34
  var import_getVersion = __toModule(require("../utils/getVersion.cjs"));
35
+ var import_mrt_dev = __toModule(require("./mrt-dev.cjs"));
36
+ var import_mrt_package = __toModule(require("./mrt-package.cjs"));
34
37
  function createCLI() {
35
38
  const cli = new import_commander.Command("lwr");
36
39
  cli.description("LWR command line");
@@ -40,6 +43,9 @@ function createCLI() {
40
43
  cli.addCommand((0, import_dev.createDevCommand)());
41
44
  cli.addCommand((0, import_build.createBuildCommand)());
42
45
  cli.addCommand((0, import_preview.createPreviewCommand)());
46
+ cli.addCommand((0, import_audit.createAuditCommand)());
47
+ cli.addCommand((0, import_mrt_dev.createExperimentalMrtDevCommand)());
48
+ cli.addCommand((0, import_mrt_package.createExperimentalMrtPackageCommand)());
43
49
  cli.showHelpAfterError();
44
50
  cli.version((0, import_getVersion.getVersion)());
45
51
  return cli;
@@ -0,0 +1,65 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, {get: all[name], enumerable: true});
11
+ };
12
+ var __exportStar = (target, module2, desc) => {
13
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
+ for (let key of __getOwnPropNames(module2))
15
+ if (!__hasOwnProp.call(target, key) && key !== "default")
16
+ __defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
17
+ }
18
+ return target;
19
+ };
20
+ var __toModule = (module2) => {
21
+ return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
22
+ };
23
+
24
+ // packages/lwr/src/cli/commands/mrt-dev.ts
25
+ __markAsModule(exports);
26
+ __export(exports, {
27
+ createExperimentalMrtDevCommand: () => createExperimentalMrtDevCommand
28
+ });
29
+ var import_commander = __toModule(require("commander"));
30
+ var import_chalk = __toModule(require("chalk"));
31
+ var import_diagnostics = __toModule(require("@lwrjs/diagnostics"));
32
+ var import_utils = __toModule(require("../utils.cjs"));
33
+ var import_path = __toModule(require("path"));
34
+ var import_fs_extra = __toModule(require("fs-extra"));
35
+ function createExperimentalMrtDevCommand() {
36
+ return new import_commander.Command("experimental-mrt-dev").description("[experimental] local development with HMR for an MRT bundle").addOption((0, import_utils.getPortOption)()).addOption((0, import_utils.getSandboxOption)()).addOption((0, import_utils.getSsrTimeoutOption)()).option("-o, --open", `[boolean] open browser on startup`, false).action(async (options, cmd) => {
37
+ const {port, open, logLevel, sandbox, timeout} = cmd.optsWithGlobals();
38
+ if (!sandbox)
39
+ process.env.SSR_DEBUG = "true";
40
+ process.env.LWR_LOG_LEVEL = logLevel;
41
+ process.env.SSR_TIMEOUT = `${timeout}`;
42
+ process.env.MRT_HMR = "true";
43
+ let runtimePort = port;
44
+ const ssrjs = import_path.default.join(process.cwd(), "app", "ssr.js");
45
+ if (!import_fs_extra.default.existsSync(ssrjs)) {
46
+ import_diagnostics.logger.error('Could not find a valid ssr.js file. Please ensure you have an MRT bundle extracted locally in a directory named "app"');
47
+ process.exit(1);
48
+ }
49
+ let server;
50
+ try {
51
+ const {createDevServer} = await Promise.resolve().then(() => __toModule(require("../localdev/dev-server.cjs")));
52
+ server = await createDevServer(runtimePort);
53
+ await server.listen(async ({serverMode, port: appPort}) => {
54
+ runtimePort = appPort;
55
+ });
56
+ console.log(import_chalk.default.green(`Application is available at: http://localhost:${runtimePort}`));
57
+ if (open) {
58
+ await (0, import_utils.launch)(runtimePort);
59
+ }
60
+ } catch (error) {
61
+ import_diagnostics.logger.error(error);
62
+ process.exit(1);
63
+ }
64
+ });
65
+ }
@@ -0,0 +1,66 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, {get: all[name], enumerable: true});
11
+ };
12
+ var __exportStar = (target, module2, desc) => {
13
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
+ for (let key of __getOwnPropNames(module2))
15
+ if (!__hasOwnProp.call(target, key) && key !== "default")
16
+ __defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
17
+ }
18
+ return target;
19
+ };
20
+ var __toModule = (module2) => {
21
+ return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
22
+ };
23
+
24
+ // packages/lwr/src/cli/commands/mrt-package.ts
25
+ __markAsModule(exports);
26
+ __export(exports, {
27
+ createExperimentalMrtPackageCommand: () => createExperimentalMrtPackageCommand
28
+ });
29
+ var import_commander = __toModule(require("commander"));
30
+ var import_chalk = __toModule(require("chalk"));
31
+ var import_diagnostics = __toModule(require("@lwrjs/diagnostics"));
32
+ var import_utils = __toModule(require("../utils.cjs"));
33
+ var import_path = __toModule(require("path"));
34
+ var import_fs_extra = __toModule(require("fs-extra"));
35
+ function createExperimentalMrtPackageCommand() {
36
+ return new import_commander.Command("experimental-mrt-package").description("[experimental] Packages up local source into a pre-existing MRT bundle. INTERNAL ONLY - USE AT YOUR OWN RISK!").option("--outputDir [path]", "[path] mrt bundle path", "app").option("--all", "[boolean] run command for every route in the config").addOption((0, import_utils.getSsrTimeoutOption)()).action(async (options, cmd) => {
37
+ const {port, open, logLevel, all, outputDir, timeout} = cmd.optsWithGlobals();
38
+ process.env.LWR_LOG_LEVEL = logLevel;
39
+ process.env.SSR_TIMEOUT = `${timeout}`;
40
+ process.env.MRT_HMR = "true";
41
+ if (all)
42
+ process.env.WARMUP = "true";
43
+ let runtimePort = port;
44
+ const ssrjs = import_path.default.join(process.cwd(), "app", "ssr.js");
45
+ if (!import_fs_extra.default.existsSync(ssrjs)) {
46
+ import_diagnostics.logger.error('Could not find a valid ssr.js file. Please ensure you have an MRT bundle extracted locally in a directory named "app"');
47
+ process.exit(1);
48
+ }
49
+ let server;
50
+ try {
51
+ const {createDevServer} = await Promise.resolve().then(() => __toModule(require("../localdev/dev-server.cjs")));
52
+ server = await createDevServer(runtimePort, outputDir);
53
+ await server.listen(async ({serverMode, port: appPort}) => {
54
+ runtimePort = appPort;
55
+ });
56
+ console.log(import_chalk.default.green(`Application is available at: http://localhost:${runtimePort}.`));
57
+ console.log(import_chalk.default.yellow(`NOTE: Any routes you navigate to in your browser will be compiled from local source and packaged directly into MRT prod bundles. Use at your own risk!`));
58
+ if (open) {
59
+ await (0, import_utils.launch)(runtimePort);
60
+ }
61
+ } catch (error) {
62
+ import_diagnostics.logger.error(error);
63
+ process.exit(1);
64
+ }
65
+ });
66
+ }
@@ -41,13 +41,13 @@ function createPreviewCommand() {
41
41
  const {rootDir, config, port, target, mode, buildDir, open, logLevel} = cmd.optsWithGlobals();
42
42
  process.env.LWR_LOG_LEVEL = logLevel;
43
43
  const serverMode = mode;
44
- let runtimePort = port;
44
+ let runtimePort = target === "mrt" && !port ? 3e3 : port;
45
45
  const proxyPort = port === void 0 ? import_dev_proxy_server.DEFAULT_PROXY_PORT : port;
46
46
  if (buildDir && !import_fs_extra.default.existsSync(buildDir)) {
47
47
  throw new Error(`specified build directory '${buildDir}' does not exist`);
48
48
  }
49
49
  const dir = buildDir ? buildDir : (0, import_utils.getDefaultBuildDirectory)(rootDir, config, target);
50
- const proxyConfig = (0, import_dev_proxy_server.findProxyConfiguration)(rootDir, buildDir);
50
+ const proxyConfig = (0, import_dev_proxy_server.findProxyConfiguration)(rootDir, dir);
51
51
  if (proxyConfig) {
52
52
  runtimePort = proxyPort + 1;
53
53
  const proxyServer = (0, import_dev_proxy_server.createProxyServer)({
File without changes
@@ -0,0 +1,117 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, {get: all[name], enumerable: true});
11
+ };
12
+ var __exportStar = (target, module2, desc) => {
13
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
+ for (let key of __getOwnPropNames(module2))
15
+ if (!__hasOwnProp.call(target, key) && key !== "default")
16
+ __defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
17
+ }
18
+ return target;
19
+ };
20
+ var __toModule = (module2) => {
21
+ return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
22
+ };
23
+
24
+ // packages/lwr/src/cli/localdev/dev-server.ts
25
+ __markAsModule(exports);
26
+ __export(exports, {
27
+ createDevServer: () => createDevServer
28
+ });
29
+ var import_path = __toModule(require("path"));
30
+ var import_fs = __toModule(require("fs"));
31
+ var import_url = __toModule(require("url"));
32
+ var import_http_proxy_middleware = __toModule(require("http-proxy-middleware"));
33
+ var import_core = __toModule(require("@lwrjs/core"));
34
+ var import_express = __toModule(require("express"));
35
+ var import_config = __toModule(require("@lwrjs/config"));
36
+ var import_diagnostics = __toModule(require("@lwrjs/diagnostics"));
37
+ var import_meta = {};
38
+ async function createDevServer(port, bundleProdDir) {
39
+ process.env.MRT_BUNDLE_ROOT = "app";
40
+ process.env.LOCAL = "true";
41
+ const {
42
+ MRT_APP_CONFIG: {appConfig}
43
+ } = await Promise.resolve().then(() => __toModule(require(import_path.default.join(process.cwd(), "app", "ssr.js"))));
44
+ const staticSiteGenerator = {
45
+ ...appConfig.staticSiteGenerator,
46
+ outputDir: import_path.default.join("app", appConfig.staticSiteGenerator.outputDir)
47
+ };
48
+ if (bundleProdDir) {
49
+ try {
50
+ const aConfig = (0, import_config.loadConfig)({rootDir: process.cwd()});
51
+ staticSiteGenerator._additionalRoutePaths = aConfig.appConfig?.staticSiteGenerator?._additionalRoutePaths || [];
52
+ } catch (e) {
53
+ import_diagnostics.logger.info("no additional route paths to load");
54
+ }
55
+ }
56
+ const __dirname = import_path.default.dirname((0, import_url.fileURLToPath)(import_meta.url));
57
+ let hooks = [import_path.default.join(__dirname, "hooks", "dev-context-hook.js")];
58
+ let bundleProviders = [
59
+ import_path.default.join(__dirname, "providers", "override-bundle-provider.js"),
60
+ "@lwrjs/module-bundler/amd-bundle-provider"
61
+ ];
62
+ if (bundleProdDir) {
63
+ hooks = [import_path.default.join(__dirname, "hooks", "package-context-hook.js")];
64
+ bundleProviders = [
65
+ [
66
+ import_path.default.join(__dirname, "providers", "override-bundle-provider.js"),
67
+ {writeProdBundlesDir: bundleProdDir}
68
+ ],
69
+ "@lwrjs/module-bundler/amd-bundle-provider"
70
+ ];
71
+ }
72
+ const app = (0, import_core.createServer)({
73
+ ...appConfig,
74
+ ignoreLwrConfigFile: true,
75
+ rootDir: process.cwd(),
76
+ cacheDir: import_path.default.join(process.cwd(), "__lwr_cache__"),
77
+ moduleProviders: [
78
+ "@lwrjs/lwc-ssr/moduleProvider",
79
+ import_path.default.join(__dirname, "providers", "alias-static-module-provider.js"),
80
+ "@lwrjs/module-registry/externals-module-provider",
81
+ import_path.default.join(__dirname, "providers", "evergreen-lwc-module-provider.js"),
82
+ import_path.default.join(__dirname, "providers", "sfdx-module-provider.js"),
83
+ import_path.default.join(__dirname, "providers", "fallthrough-module-provider.js")
84
+ ],
85
+ bundleProviders,
86
+ assetProviders: ["@lwrjs/static/asset-provider"],
87
+ assetTransformers: [],
88
+ resourceProviders: ["@lwrjs/static/resource-provider"],
89
+ uriTransformers: ["@lwrjs/lambda/mrt-static-uri-transformer"],
90
+ hooks,
91
+ staticSiteGenerator,
92
+ port,
93
+ routeHandlers: {},
94
+ routes: []
95
+ });
96
+ const server = app.getInternalServer();
97
+ server.use("/mobify/bundle/development/app/site/prod/view/en-US/", import_express.default.static(import_path.default.join(process.cwd(), "./__lwr_cache__/overrides")));
98
+ server.use("/mobify/bundle/development/app/site/dev/view/en-US/", import_express.default.static(import_path.default.join(process.cwd(), "./__lwr_cache__/overrides")));
99
+ server.use("/mobify/bundle/development/app/site", import_express.default.static(import_path.default.join(process.cwd(), "./app/site")));
100
+ let proxyFile = import_path.default.join(process.cwd(), "./app/config/_proxy");
101
+ if (!import_fs.default.existsSync(proxyFile))
102
+ proxyFile = import_path.default.join(process.cwd(), "./config/_proxy");
103
+ if (import_fs.default.existsSync(proxyFile)) {
104
+ const proxyConfig = import_fs.default.readFileSync(proxyFile).toString().trim().split("\n");
105
+ for (const entry of proxyConfig) {
106
+ const [entryPath, target] = entry.split(" ");
107
+ const pathRewrite = entryPath.indexOf("/mobify/proxy") === 0 || entryPath.indexOf("/mobify/caching") === 0 ? {[entryPath]: ""} : void 0;
108
+ server.use(entryPath, (0, import_http_proxy_middleware.default)({
109
+ target,
110
+ pathRewrite,
111
+ followRedirects: false,
112
+ changeOrigin: true
113
+ }));
114
+ }
115
+ }
116
+ return app;
117
+ }
@@ -0,0 +1,39 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, {get: all[name], enumerable: true});
11
+ };
12
+ var __exportStar = (target, module2, desc) => {
13
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
+ for (let key of __getOwnPropNames(module2))
15
+ if (!__hasOwnProp.call(target, key) && key !== "default")
16
+ __defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
17
+ }
18
+ return target;
19
+ };
20
+ var __toModule = (module2) => {
21
+ return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
22
+ };
23
+
24
+ // packages/lwr/src/cli/localdev/hooks/dev-context-hook.ts
25
+ __markAsModule(exports);
26
+ __export(exports, {
27
+ default: () => dev_context_hook_default
28
+ });
29
+ var import_path = __toModule(require("path"));
30
+ var StartHook = class {
31
+ async setupServerContext(context, startHooks) {
32
+ const {MRT_APP_CONFIG} = await Promise.resolve().then(() => __toModule(require(import_path.default.join(process.cwd(), "app", "ssr.js"))));
33
+ Object.assign(context.routeHandlers, MRT_APP_CONFIG.routeHandlers);
34
+ startHooks.push(...MRT_APP_CONFIG.hooks);
35
+ context.runtimeEnvironment.debug = true;
36
+ context.runtimeEnvironment.watchFiles = true;
37
+ }
38
+ };
39
+ var dev_context_hook_default = StartHook;
@@ -0,0 +1,38 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, {get: all[name], enumerable: true});
11
+ };
12
+ var __exportStar = (target, module2, desc) => {
13
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
+ for (let key of __getOwnPropNames(module2))
15
+ if (!__hasOwnProp.call(target, key) && key !== "default")
16
+ __defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
17
+ }
18
+ return target;
19
+ };
20
+ var __toModule = (module2) => {
21
+ return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
22
+ };
23
+
24
+ // packages/lwr/src/cli/localdev/hooks/package-context-hook.ts
25
+ __markAsModule(exports);
26
+ __export(exports, {
27
+ default: () => package_context_hook_default
28
+ });
29
+ var import_path = __toModule(require("path"));
30
+ var StartHook = class {
31
+ async setupServerContext(context, startHooks) {
32
+ const {MRT_APP_CONFIG} = await Promise.resolve().then(() => __toModule(require(import_path.default.join(process.cwd(), "app", "ssr.js"))));
33
+ Object.assign(context.routeHandlers, MRT_APP_CONFIG.routeHandlers);
34
+ startHooks.push(...MRT_APP_CONFIG.hooks);
35
+ context.runtimeEnvironment.watchFiles = true;
36
+ }
37
+ };
38
+ var package_context_hook_default = StartHook;