@lwrjs/module-bundler 0.10.0-alpha.14 → 0.10.0-alpha.16

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.
@@ -33,6 +33,28 @@ var import_rollup_amd_bundler_plugin = __toModule(require("./rollup-amd-bundler-
33
33
  var import_bundle_common = __toModule(require("./bundle-common.cjs"));
34
34
  var AMD_DEFINE = "LWR.define";
35
35
  var groupieCodeCache = new Map();
36
+ function includeIdFactory(graphSpecifier, external, exclude = [], requiredImports, groups) {
37
+ return (moduleRef) => {
38
+ if (external[moduleRef.specifier]) {
39
+ return false;
40
+ }
41
+ const moduleRefIsGroupie = (0, import_shared_utils.isGroupie)(moduleRef.specifier, groups);
42
+ const rootModuleIsGroupie = (0, import_shared_utils.isGroupie)(graphSpecifier, groups);
43
+ const moduleIsNotRoot = graphSpecifier !== moduleRef.specifier;
44
+ if (moduleRefIsGroupie) {
45
+ if (moduleIsNotRoot && !rootModuleIsGroupie) {
46
+ requiredImports.set(`${moduleRef.specifier}_${moduleRef.version}`, moduleRef);
47
+ }
48
+ return false;
49
+ } else if (exclude?.includes(moduleRef.specifier)) {
50
+ if (moduleIsNotRoot) {
51
+ requiredImports.set(`${moduleRef.specifier}_${moduleRef.version}`, moduleRef);
52
+ }
53
+ return false;
54
+ }
55
+ return true;
56
+ };
57
+ }
36
58
  async function bundle(id, moduleGraphs, minify = false, unVersionedAliases = false) {
37
59
  const plugins = [(0, import_rollup_amd_bundler_plugin.bundleDefinitions)({moduleGraphs})];
38
60
  minify && plugins.push((0, import_plugin_replace.default)({
@@ -45,18 +67,41 @@ async function bundle(id, moduleGraphs, minify = false, unVersionedAliases = fal
45
67
  exports: "named",
46
68
  format: "amd"
47
69
  });
70
+ let code = output[0].code;
48
71
  if (unVersionedAliases) {
49
72
  const idObject = (0, import_shared_utils.explodeSpecifier)(id);
50
73
  const specifier = idObject.specifier;
51
- const aliasModule = ` LWR.define('${specifier}',['${id}'],function(m){return m;});`;
52
- output[0].code += aliasModule;
74
+ const aliasModule = (0, import_shared_utils.createAmdAlias)(specifier, id);
75
+ code += aliasModule;
53
76
  }
54
- return output[0].code;
77
+ return code;
55
78
  }
56
- async function getBundleCode(rootModule, moduleGraphs, includedModules, bundleGroupsIncludedModules, dynamicImports, minify, unVersionedAliases) {
79
+ async function getBundleCode(rootModule, moduleGraphs, includedModules, bundleGroupsIncludedModules, dynamicImports, minify, unVersionedAliases, includeId, moduleRegistry, runtimeEnvironment, runtimeParams = {}, visitedSpecifiers) {
57
80
  const modules = [rootModule, ...moduleGraphs.graphs[0].static];
58
- const bundles = await Promise.all(modules.reduce((filteredModules, specifier) => {
81
+ const {moduleRecord} = await moduleRegistry.getModule((0, import_shared_utils.explodeSpecifier)(rootModule));
82
+ if (moduleRecord.importMeta) {
83
+ for (const specifier of modules) {
84
+ const linkedDefinition = moduleGraphs.linkedDefinitions[specifier];
85
+ const imports = linkedDefinition?.linkedModuleRecord.imports || [];
86
+ for (const imp of imports) {
87
+ const modId = (0, import_shared_utils.explodeSpecifier)(imp.specifier);
88
+ if (!modules.includes(imp.specifier) && includeId(modId)) {
89
+ modules.push(imp.specifier);
90
+ if (!moduleGraphs.linkedDefinitions[imp.specifier]) {
91
+ const missingLinkedModule = await moduleRegistry.getLinkedModule({specifier: modId.specifier, version: modId.version}, runtimeEnvironment, runtimeParams);
92
+ moduleGraphs.linkedDefinitions[imp.specifier] = missingLinkedModule;
93
+ }
94
+ }
95
+ }
96
+ }
97
+ }
98
+ const bundles = (await Promise.all(modules.reduce((filteredModules, specifier) => {
59
99
  const linkedDefinition = moduleGraphs.linkedDefinitions[specifier];
100
+ if (visitedSpecifiers?.has(specifier)) {
101
+ return filteredModules;
102
+ } else {
103
+ visitedSpecifiers?.set(specifier, true);
104
+ }
60
105
  if (!linkedDefinition) {
61
106
  return filteredModules;
62
107
  }
@@ -78,12 +123,11 @@ async function getBundleCode(rootModule, moduleGraphs, includedModules, bundleGr
78
123
  bundleGroupsIncludedModules.push(id);
79
124
  }
80
125
  return bundle(id, moduleGraphs, minify, unVersionedAliases);
81
- }));
126
+ }))).filter(Boolean);
82
127
  return bundles;
83
128
  }
84
129
  async function amdBundler(rootModuleId, moduleRegistry, minify = false, runtimeEnvironment, runtimeParams = {}, {bundleConfig}, bundleConfigOverrides) {
85
130
  const {exclude, external = {}, groups = {}} = (0, import_bundle_common.overrideBundleConfig)(bundleConfig, bundleConfigOverrides);
86
- const externalsArray = Object.keys(external);
87
131
  const requiredImports = new Map();
88
132
  const dynamicImports = new Map();
89
133
  const groupName = (0, import_shared_utils.getGroupName)(rootModuleId.specifier, groups);
@@ -95,26 +139,7 @@ async function amdBundler(rootModuleId, moduleRegistry, minify = false, runtimeE
95
139
  depth: {
96
140
  static: import_shared_utils.GraphDepth.ALL,
97
141
  dynamic: 0,
98
- includeId: (moduleRef) => {
99
- if (externalsArray.includes(moduleRef.specifier)) {
100
- return false;
101
- }
102
- const moduleRefIsGroupie = (0, import_shared_utils.isGroupie)(moduleRef.specifier, groups);
103
- const rootModuleIsGroupie = (0, import_shared_utils.isGroupie)(graphSpecifier, groups);
104
- const moduleIsNotRoot = graphSpecifier !== moduleRef.specifier;
105
- if (moduleRefIsGroupie) {
106
- if (moduleIsNotRoot && !rootModuleIsGroupie) {
107
- requiredImports.set(`${moduleRef.specifier}_${moduleRef.version}`, moduleRef);
108
- }
109
- return false;
110
- } else if (exclude?.includes(moduleRef.specifier)) {
111
- if (moduleIsNotRoot) {
112
- requiredImports.set(`${moduleRef.specifier}_${moduleRef.version}`, moduleRef);
113
- }
114
- return false;
115
- }
116
- return true;
117
- }
142
+ includeId: includeIdFactory(graphSpecifier, external, exclude, requiredImports, groups)
118
143
  }
119
144
  };
120
145
  return (0, import_shared_utils.getModuleGraphs)(graphSpecifier, graphOptions, moduleRegistry, moduleRegistry, runtimeEnvironment, runtimeParams);
@@ -132,15 +157,16 @@ async function amdBundler(rootModuleId, moduleRegistry, minify = false, runtimeE
132
157
  }
133
158
  let bundleCode, includedModules, bundleGroupsIncludedModules;
134
159
  const cachedBundleGroupCode = cachedGroupieCode;
160
+ const bundledSpecifiersMap = new Map();
135
161
  if (!cachedBundleGroupCode) {
136
162
  includedModules = [], bundleGroupsIncludedModules = [];
137
- const bundles = await getBundleCode(rootModule.specifier, moduleGraphs, includedModules, bundleGroupsIncludedModules, dynamicImports, minify, !!runtimeEnvironment.featureFlags?.UNVERSIONED_ALIASES);
163
+ const bundles = await getBundleCode(rootModule.specifier, moduleGraphs, includedModules, bundleGroupsIncludedModules, dynamicImports, minify, !!runtimeEnvironment.featureFlags?.EXPERIMENTAL_UNVERSIONED_ALIASES, includeIdFactory(rootModuleId.specifier, external, exclude, requiredImports, groups), moduleRegistry, runtimeEnvironment, runtimeParams, bundledSpecifiersMap);
138
164
  if (groupName) {
139
165
  for (const rawGroupieSpecifier of groupies) {
140
166
  if (rawGroupieSpecifier !== rootModuleId.specifier) {
141
167
  const groupieModuleGraph = groupModuleGraphsMap.get(rawGroupieSpecifier);
142
168
  const groupieSpecifer = groupieModuleGraph.graphs[0].specifier;
143
- const groupieBundles = await getBundleCode(groupieSpecifer, groupieModuleGraph, includedModules, bundleGroupsIncludedModules, dynamicImports, minify, !!runtimeEnvironment.featureFlags?.UNVERSIONED_ALIASES);
169
+ const groupieBundles = await getBundleCode(groupieSpecifer, groupieModuleGraph, includedModules, bundleGroupsIncludedModules, dynamicImports, minify, !!runtimeEnvironment.featureFlags?.EXPERIMENTAL_UNVERSIONED_ALIASES, includeIdFactory(rawGroupieSpecifier, external, exclude, requiredImports, groups), moduleRegistry, runtimeEnvironment, runtimeParams, bundledSpecifiersMap);
144
170
  bundles.push(...groupieBundles);
145
171
  }
146
172
  }
@@ -1,10 +1,41 @@
1
- import { GraphDepth, explodeSpecifier, getModuleGraphs, getSpecifier, getGroupName, isGroupie, } from '@lwrjs/shared-utils';
1
+ import { GraphDepth, createAmdAlias, explodeSpecifier, getModuleGraphs, getSpecifier, getGroupName, isGroupie, } from '@lwrjs/shared-utils';
2
2
  import { rollup } from 'rollup';
3
3
  import replace from '@rollup/plugin-replace';
4
4
  import { bundleDefinitions } from './rollup-amd-bundler-plugin.js';
5
5
  import { overrideBundleConfig } from './bundle-common.js';
6
6
  const AMD_DEFINE = 'LWR.define';
7
7
  const groupieCodeCache = new Map();
8
+ function includeIdFactory(graphSpecifier, external, exclude = [], requiredImports, groups) {
9
+ return (moduleRef) => {
10
+ // Do not bundle externals, including the loader module, which is auto bundled
11
+ // with the shim + loader combo
12
+ if (external[moduleRef.specifier]) {
13
+ // Do not include externals in the required imports but also return false to indicate it should not be in the bundle
14
+ return false;
15
+ }
16
+ const moduleRefIsGroupie = isGroupie(moduleRef.specifier, groups);
17
+ const rootModuleIsGroupie = isGroupie(graphSpecifier, groups);
18
+ const moduleIsNotRoot = graphSpecifier !== moduleRef.specifier;
19
+ if (moduleRefIsGroupie) {
20
+ // If this is part of bundle group return false to indicate it should not be in the bundle
21
+ // but add it to the requriedImports so it shows up as a static dependency of the bundle.
22
+ // However, skip this if the requested specifier is also part of the same group.
23
+ if (moduleIsNotRoot && !rootModuleIsGroupie) {
24
+ requiredImports.set(`${moduleRef.specifier}_${moduleRef.version}`, moduleRef);
25
+ }
26
+ return false;
27
+ }
28
+ else if (exclude?.includes(moduleRef.specifier)) {
29
+ // If this is a bundle exclude return false to indicate it should not be in the bundle
30
+ // but add it to the requriedImports so it shows up as a static dependency of the bundle.
31
+ if (moduleIsNotRoot) {
32
+ requiredImports.set(`${moduleRef.specifier}_${moduleRef.version}`, moduleRef);
33
+ }
34
+ return false;
35
+ }
36
+ return true;
37
+ };
38
+ }
8
39
  async function bundle(id, moduleGraphs, minify = false, unVersionedAliases = false) {
9
40
  const plugins = [bundleDefinitions({ moduleGraphs })];
10
41
  minify &&
@@ -20,19 +51,47 @@ async function bundle(id, moduleGraphs, minify = false, unVersionedAliases = fal
20
51
  exports: 'named',
21
52
  format: 'amd',
22
53
  });
54
+ let code = output[0].code;
23
55
  if (unVersionedAliases) {
24
56
  const idObject = explodeSpecifier(id);
25
57
  const specifier = idObject.specifier;
26
- const aliasModule = ` LWR.define('${specifier}',['${id}'],function(m){return m;});`;
27
- output[0].code += aliasModule;
58
+ const aliasModule = createAmdAlias(specifier, id);
59
+ code += aliasModule;
28
60
  }
29
- return output[0].code;
61
+ return code;
30
62
  }
31
- async function getBundleCode(rootModule, moduleGraphs, includedModules, bundleGroupsIncludedModules, dynamicImports, minify, unVersionedAliases) {
63
+ async function getBundleCode(rootModule, moduleGraphs, includedModules, bundleGroupsIncludedModules, dynamicImports, minify, unVersionedAliases, includeId, moduleRegistry, runtimeEnvironment, runtimeParams = {}, visitedSpecifiers) {
32
64
  const modules = [rootModule, ...moduleGraphs.graphs[0].static];
33
- const bundles = await Promise.all(modules
65
+ const { moduleRecord } = await moduleRegistry.getModule(explodeSpecifier(rootModule));
66
+ // add static imports from the LinkedModuleDefinitions added during module linking
67
+ // they're not in the ModuleGraph imports b/c those are based on raw module source
68
+ if (moduleRecord.importMeta) {
69
+ // the only use case for this is "lwr/environment", so skip the logic when it's not needed
70
+ for (const specifier of modules) {
71
+ const linkedDefinition = moduleGraphs.linkedDefinitions[specifier];
72
+ const imports = linkedDefinition?.linkedModuleRecord.imports || [];
73
+ for (const imp of imports) {
74
+ const modId = explodeSpecifier(imp.specifier);
75
+ if (!modules.includes(imp.specifier) && includeId(modId)) {
76
+ modules.push(imp.specifier);
77
+ if (!moduleGraphs.linkedDefinitions[imp.specifier]) {
78
+ // eslint-disable-next-line no-await-in-loop
79
+ const missingLinkedModule = await moduleRegistry.getLinkedModule({ specifier: modId.specifier, version: modId.version }, runtimeEnvironment, runtimeParams);
80
+ moduleGraphs.linkedDefinitions[imp.specifier] = missingLinkedModule;
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+ const bundles = (await Promise.all(modules
34
87
  .reduce((filteredModules, specifier) => {
35
88
  const linkedDefinition = moduleGraphs.linkedDefinitions[specifier];
89
+ if (visitedSpecifiers?.has(specifier)) {
90
+ return filteredModules;
91
+ }
92
+ else {
93
+ visitedSpecifiers?.set(specifier, true);
94
+ }
36
95
  // skip modules that do not have a linked definition
37
96
  if (!linkedDefinition) {
38
97
  return filteredModules;
@@ -62,12 +121,11 @@ async function getBundleCode(rootModule, moduleGraphs, includedModules, bundleGr
62
121
  }
63
122
  // bundle all dependencies for the linked definition and convert to AMD
64
123
  return bundle(id, moduleGraphs, minify, unVersionedAliases);
65
- }));
124
+ }))).filter(Boolean);
66
125
  return bundles;
67
126
  }
68
127
  export async function amdBundler(rootModuleId, moduleRegistry, minify = false, runtimeEnvironment, runtimeParams = {}, { bundleConfig }, bundleConfigOverrides) {
69
128
  const { exclude, external = {}, groups = {} } = overrideBundleConfig(bundleConfig, bundleConfigOverrides);
70
- const externalsArray = Object.keys(external);
71
129
  // Note: the maps must be cleared each time we call getModuleGraph
72
130
  const requiredImports = new Map();
73
131
  const dynamicImports = new Map();
@@ -80,35 +138,7 @@ export async function amdBundler(rootModuleId, moduleRegistry, minify = false, r
80
138
  depth: {
81
139
  static: GraphDepth.ALL,
82
140
  dynamic: 0,
83
- includeId: (moduleRef) => {
84
- // Do not bundle externals, including the loader module, which is auto bundled
85
- // with the shim + loader combo
86
- if (externalsArray.includes(moduleRef.specifier)) {
87
- // Do not include externals in the required imports but also return false to indicate it should not be in the bundle
88
- return false;
89
- }
90
- const moduleRefIsGroupie = isGroupie(moduleRef.specifier, groups);
91
- const rootModuleIsGroupie = isGroupie(graphSpecifier, groups);
92
- const moduleIsNotRoot = graphSpecifier !== moduleRef.specifier;
93
- if (moduleRefIsGroupie) {
94
- // If this is part of bundle group return false to indicate it should not be in the bundle
95
- // but add it to the requriedImports so it shows up as a static dependency of the bundle.
96
- // However, skip this if the requested specifier is also part of the same group.
97
- if (moduleIsNotRoot && !rootModuleIsGroupie) {
98
- requiredImports.set(`${moduleRef.specifier}_${moduleRef.version}`, moduleRef);
99
- }
100
- return false;
101
- }
102
- else if (exclude?.includes(moduleRef.specifier)) {
103
- // If this is a bundle exclude return false to indicate it should not be in the bundle
104
- // but add it to the requriedImports so it shows up as a static dependency of the bundle.
105
- if (moduleIsNotRoot) {
106
- requiredImports.set(`${moduleRef.specifier}_${moduleRef.version}`, moduleRef);
107
- }
108
- return false;
109
- }
110
- return true;
111
- },
141
+ includeId: includeIdFactory(graphSpecifier, external, exclude, requiredImports, groups),
112
142
  },
113
143
  };
114
144
  return getModuleGraphs(graphSpecifier, graphOptions, moduleRegistry, moduleRegistry, runtimeEnvironment, runtimeParams);
@@ -129,9 +159,10 @@ export async function amdBundler(rootModuleId, moduleRegistry, minify = false, r
129
159
  let bundleCode, includedModules, bundleGroupsIncludedModules;
130
160
  // we don't need to recompute the bundle code if it already exists for this group
131
161
  const cachedBundleGroupCode = cachedGroupieCode;
162
+ const bundledSpecifiersMap = new Map();
132
163
  if (!cachedBundleGroupCode) {
133
164
  (includedModules = []), (bundleGroupsIncludedModules = []);
134
- const bundles = await getBundleCode(rootModule.specifier, moduleGraphs, includedModules, bundleGroupsIncludedModules, dynamicImports, minify, !!runtimeEnvironment.featureFlags?.UNVERSIONED_ALIASES);
165
+ const bundles = await getBundleCode(rootModule.specifier, moduleGraphs, includedModules, bundleGroupsIncludedModules, dynamicImports, minify, !!runtimeEnvironment.featureFlags?.EXPERIMENTAL_UNVERSIONED_ALIASES, includeIdFactory(rootModuleId.specifier, external, exclude, requiredImports, groups), moduleRegistry, runtimeEnvironment, runtimeParams, bundledSpecifiersMap);
135
166
  if (groupName) {
136
167
  // add groupies to bundles
137
168
  for (const rawGroupieSpecifier of groupies) {
@@ -139,7 +170,7 @@ export async function amdBundler(rootModuleId, moduleRegistry, minify = false, r
139
170
  const groupieModuleGraph = groupModuleGraphsMap.get(rawGroupieSpecifier);
140
171
  const groupieSpecifer = groupieModuleGraph.graphs[0].specifier;
141
172
  // eslint-disable-next-line no-await-in-loop
142
- const groupieBundles = await getBundleCode(groupieSpecifer, groupieModuleGraph, includedModules, bundleGroupsIncludedModules, dynamicImports, minify, !!runtimeEnvironment.featureFlags?.UNVERSIONED_ALIASES);
173
+ const groupieBundles = await getBundleCode(groupieSpecifer, groupieModuleGraph, includedModules, bundleGroupsIncludedModules, dynamicImports, minify, !!runtimeEnvironment.featureFlags?.EXPERIMENTAL_UNVERSIONED_ALIASES, includeIdFactory(rawGroupieSpecifier, external, exclude, requiredImports, groups), moduleRegistry, runtimeEnvironment, runtimeParams, bundledSpecifiersMap);
143
174
  bundles.push(...groupieBundles);
144
175
  }
145
176
  }
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "0.10.0-alpha.14",
7
+ "version": "0.10.0-alpha.16",
8
8
  "homepage": "https://developer.salesforce.com/docs/platform/lwr/overview",
9
9
  "repository": {
10
10
  "type": "git",
@@ -47,13 +47,13 @@
47
47
  "build/**/*.d.ts"
48
48
  ],
49
49
  "dependencies": {
50
- "@lwc/features": "2.45.2",
51
- "@lwrjs/shared-utils": "0.10.0-alpha.14",
50
+ "@lwc/features": "2.46.0",
51
+ "@lwrjs/shared-utils": "0.10.0-alpha.16",
52
52
  "@rollup/plugin-replace": "^2.4.2",
53
53
  "rollup": "^2.78.0"
54
54
  },
55
55
  "devDependencies": {
56
- "@lwrjs/types": "0.10.0-alpha.14",
56
+ "@lwrjs/types": "0.10.0-alpha.16",
57
57
  "jest": "^26.6.3",
58
58
  "ts-jest": "^26.5.6",
59
59
  "typescript": "~4.3.5"
@@ -67,5 +67,5 @@
67
67
  "volta": {
68
68
  "extends": "../../../package.json"
69
69
  },
70
- "gitHead": "f80dc1c18719b77c183f339027313be11d69f9dc"
70
+ "gitHead": "c5a13d471330c0f738d0c783fd1b69f456c544bd"
71
71
  }