@lwrjs/loader 0.13.0-alpha.2 → 0.13.0-alpha.21

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 (119) hide show
  1. package/build/assets/prod/lwr-error-shim.js +2 -2
  2. package/build/assets/prod/lwr-loader-shim-legacy.bundle.js +34 -29
  3. package/build/assets/prod/lwr-loader-shim-legacy.bundle.min.js +3 -3
  4. package/build/assets/prod/lwr-loader-shim-legacy.js +21 -16
  5. package/build/assets/prod/lwr-loader-shim.bundle.js +45 -23
  6. package/build/assets/prod/lwr-loader-shim.bundle.min.js +3 -3
  7. package/build/assets/prod/lwr-loader-shim.js +27 -12
  8. package/build/bundle/prod/lwr/esmLoader/esmLoader.js +1 -1
  9. package/build/cjs/index.cjs +28 -1
  10. package/build/cjs/modules/lwr/esmLoader/esmLoader.cjs +2 -2
  11. package/build/cjs/modules/lwr/esmLoader/importResolver.cjs +0 -17
  12. package/build/cjs/modules/lwr/esmLoader/importResolverLegacy.cjs +1 -18
  13. package/build/cjs/modules/lwr/loader/errors/messages.cjs +7 -1
  14. package/build/cjs/modules/lwr/loader/errors/reportError.cjs +1 -2
  15. package/build/cjs/modules/lwr/loader/hooks/moduleInvalidation.cjs +2 -3
  16. package/build/cjs/modules/lwr/loader/hooks/resolveAndLoadHook.cjs +3 -4
  17. package/build/cjs/modules/lwr/loader/moduleRegistry/importMetadataResolver.cjs +7 -6
  18. package/build/cjs/modules/lwr/loader/moduleRegistry/moduleRegistry.cjs +8 -10
  19. package/build/cjs/modules/lwr/loader/moduleRegistry/scriptLoad.cjs +2 -2
  20. package/build/cjs/modules/lwr/loader/utils/url.cjs +1 -1
  21. package/build/cjs/modules/lwr/loaderLegacy/errors/messages.cjs +1 -1
  22. package/build/cjs/modules/lwr/loaderLegacy/errors/reportError.cjs +1 -2
  23. package/build/cjs/modules/lwr/loaderLegacy/hooks/moduleInvalidation.cjs +2 -3
  24. package/build/cjs/modules/lwr/loaderLegacy/hooks/resolveAndLoadHook.cjs +3 -4
  25. package/build/cjs/modules/lwr/loaderLegacy/importMap/dom.cjs +4 -4
  26. package/build/cjs/modules/lwr/loaderLegacy/importMap/importMap.cjs +2 -2
  27. package/build/cjs/modules/lwr/loaderLegacy/importMap/importMapResolver.cjs +1 -2
  28. package/build/cjs/modules/lwr/loaderLegacy/importMap/utils.cjs +1 -1
  29. package/build/cjs/modules/lwr/loaderLegacy/importResolver/importResolver.cjs +0 -17
  30. package/build/cjs/modules/lwr/loaderLegacy/moduleRegistry/moduleRegistry.cjs +7 -10
  31. package/build/cjs/modules/lwr/loaderLegacy/moduleRegistry/scriptLoad.cjs +2 -2
  32. package/build/cjs/modules/lwr/loaderLegacy/utils/url.cjs +1 -1
  33. package/build/cjs/package.d.cjs +0 -0
  34. package/build/cjs/types.cjs +5 -0
  35. package/build/error-shim/index.d.ts +2 -0
  36. package/build/error-shim/index.js +17 -0
  37. package/build/index.d.ts +1 -1
  38. package/build/index.js +28 -1
  39. package/build/modules/lwr/esmLoader/esmLoader.d.ts +6 -0
  40. package/build/modules/lwr/esmLoader/esmLoader.js +2 -2
  41. package/build/modules/lwr/esmLoader/importResolver.d.ts +17 -0
  42. package/build/modules/lwr/esmLoader/importResolver.js +47 -0
  43. package/build/modules/lwr/esmLoader/importResolverLegacy.d.ts +16 -0
  44. package/build/modules/lwr/esmLoader/importResolverLegacy.js +18 -0
  45. package/build/modules/lwr/loader/constants/constants.d.ts +2 -0
  46. package/build/modules/lwr/loader/constants/constants.js +2 -0
  47. package/build/modules/lwr/loader/errors/messages.d.ts +33 -0
  48. package/build/modules/lwr/loader/errors/messages.js +128 -0
  49. package/build/modules/lwr/loader/errors/reportError.d.ts +4 -0
  50. package/build/modules/lwr/loader/errors/reportError.js +9 -0
  51. package/build/modules/lwr/loader/errors/utils.d.ts +2 -0
  52. package/build/modules/lwr/loader/errors/utils.js +8 -0
  53. package/build/modules/lwr/loader/hooks/moduleInvalidation.d.ts +3 -0
  54. package/build/modules/lwr/loader/hooks/moduleInvalidation.js +19 -0
  55. package/build/modules/lwr/loader/hooks/resolveAndLoadHook.d.ts +7 -0
  56. package/build/modules/lwr/loader/hooks/resolveAndLoadHook.js +94 -0
  57. package/build/modules/lwr/loader/loader.d.ts +53 -0
  58. package/build/modules/lwr/loader/loader.js +18 -11
  59. package/build/modules/lwr/loader/moduleRegistry/importMetadataResolver.d.ts +44 -0
  60. package/build/modules/lwr/loader/moduleRegistry/importMetadataResolver.js +211 -0
  61. package/build/modules/lwr/loader/moduleRegistry/moduleRegistry.d.ts +47 -0
  62. package/build/modules/lwr/loader/moduleRegistry/moduleRegistry.js +530 -0
  63. package/build/modules/lwr/loader/moduleRegistry/scriptLoad.d.ts +3 -0
  64. package/build/modules/lwr/loader/moduleRegistry/scriptLoad.js +43 -0
  65. package/build/modules/lwr/loader/utils/dom.d.ts +4 -0
  66. package/build/modules/lwr/loader/utils/dom.js +6 -0
  67. package/build/modules/lwr/loader/utils/url.d.ts +28 -0
  68. package/build/modules/lwr/loader/utils/url.js +128 -0
  69. package/build/modules/lwr/loaderLegacy/constants/constants.d.ts +2 -0
  70. package/build/modules/lwr/loaderLegacy/constants/constants.js +2 -0
  71. package/build/modules/lwr/loaderLegacy/errors/messages.d.ts +30 -0
  72. package/build/modules/lwr/loaderLegacy/errors/messages.js +113 -0
  73. package/build/modules/lwr/loaderLegacy/errors/reportError.d.ts +4 -0
  74. package/build/modules/lwr/loaderLegacy/errors/reportError.js +9 -0
  75. package/build/modules/lwr/loaderLegacy/errors/utils.d.ts +2 -0
  76. package/build/modules/lwr/loaderLegacy/errors/utils.js +8 -0
  77. package/build/modules/lwr/loaderLegacy/hooks/moduleInvalidation.d.ts +3 -0
  78. package/build/modules/lwr/loaderLegacy/hooks/moduleInvalidation.js +19 -0
  79. package/build/modules/lwr/loaderLegacy/hooks/resolveAndLoadHook.d.ts +7 -0
  80. package/build/modules/lwr/loaderLegacy/hooks/resolveAndLoadHook.js +94 -0
  81. package/build/modules/lwr/loaderLegacy/importMap/dom.d.ts +10 -0
  82. package/build/modules/lwr/loaderLegacy/importMap/dom.js +63 -0
  83. package/build/modules/lwr/loaderLegacy/importMap/importMap.d.ts +22 -0
  84. package/build/modules/lwr/loaderLegacy/importMap/importMap.js +108 -0
  85. package/build/modules/lwr/loaderLegacy/importMap/importMapResolver.d.ts +8 -0
  86. package/build/modules/lwr/loaderLegacy/importMap/importMapResolver.js +11 -0
  87. package/build/modules/lwr/loaderLegacy/importMap/utils.d.ts +4 -0
  88. package/build/modules/lwr/loaderLegacy/importMap/utils.js +23 -0
  89. package/build/modules/lwr/loaderLegacy/importResolver/importResolver.d.ts +6 -0
  90. package/build/modules/lwr/loaderLegacy/importResolver/importResolver.js +2 -0
  91. package/build/modules/lwr/loaderLegacy/loaderLegacy.d.ts +57 -0
  92. package/build/modules/lwr/loaderLegacy/loaderLegacy.js +13 -13
  93. package/build/modules/lwr/loaderLegacy/moduleRegistry/moduleRegistry.d.ts +53 -0
  94. package/build/modules/lwr/loaderLegacy/moduleRegistry/moduleRegistry.js +544 -0
  95. package/build/modules/lwr/loaderLegacy/moduleRegistry/scriptLoad.d.ts +3 -0
  96. package/build/modules/lwr/loaderLegacy/moduleRegistry/scriptLoad.js +43 -0
  97. package/build/modules/lwr/loaderLegacy/utils/dom.d.ts +4 -0
  98. package/build/modules/lwr/loaderLegacy/utils/dom.js +6 -0
  99. package/build/modules/lwr/loaderLegacy/utils/url.d.ts +28 -0
  100. package/build/modules/lwr/loaderLegacy/utils/url.js +128 -0
  101. package/build/shim/constants.d.ts +2 -0
  102. package/build/shim/constants.js +2 -0
  103. package/build/shim/customInit.d.ts +4 -0
  104. package/build/shim/customInit.js +29 -0
  105. package/build/shim/index.d.ts +2 -0
  106. package/build/shim/index.js +9 -0
  107. package/build/shim/loader.d.ts +3 -0
  108. package/build/shim/loader.js +27 -0
  109. package/build/shim/shim.d.ts +31 -0
  110. package/build/shim/shim.js +194 -0
  111. package/build/shim-legacy/index.d.ts +2 -0
  112. package/build/shim-legacy/index.js +9 -0
  113. package/build/shim-legacy/loaderLegacy.d.ts +3 -0
  114. package/build/shim-legacy/loaderLegacy.js +29 -0
  115. package/build/shim-legacy/shimLegacy.d.ts +31 -0
  116. package/build/shim-legacy/shimLegacy.js +188 -0
  117. package/build/types.d.ts +56 -0
  118. package/build/types.js +2 -0
  119. package/package.json +9 -10
@@ -0,0 +1,188 @@
1
+ /* global document */
2
+ import { BOOTSTRAP_ERROR } from 'lwr/metrics';
3
+ import { logOperationStart, logOperationEnd } from 'lwr/profiler';
4
+ import { createLoader } from './loaderLegacy.js';
5
+ import { REQUIRED_MODULES_TIMEOUT } from '../shim/constants.js';
6
+ import { customInit } from '../shim/customInit.js';
7
+ /* eslint-disable lwr/no-unguarded-apis */
8
+ const hasSetTimeout = typeof setTimeout === 'function';
9
+ const hasConsole = typeof console !== 'undefined';
10
+ /* eslint-enable lwr/no-unguarded-apis */
11
+ export default class LoaderShim {
12
+ constructor(global) {
13
+ this.defineCache = {};
14
+ this.orderedDefs = [];
15
+ // Start watchdog timer
16
+ if (hasSetTimeout) {
17
+ this.watchdogTimerId = this.startWatchdogTimer();
18
+ }
19
+ // Parse configuration
20
+ this.global = global;
21
+ this.config = global.LWR;
22
+ this.loaderModule = 'lwr/loaderLegacy/v/__VERSION__';
23
+ // Set up error handler
24
+ this.errorHandler = this.config.onError;
25
+ // Set up the temporary LWR.define function and customInit hook
26
+ const tempDefine = this.tempDefine.bind(this);
27
+ global.LWR.define = tempDefine;
28
+ this.bootReady = this.config.autoBoot;
29
+ try {
30
+ this.createProfilerModule(global.LWR.define);
31
+ customInit(Object.freeze(this.config), this.postCustomInit.bind(this), tempDefine, (e) => {
32
+ // customInit handlers can overwrite
33
+ // the error handler with onBootstrapError
34
+ this.errorHandler = e;
35
+ });
36
+ }
37
+ catch (e) {
38
+ this.enterErrorState(e);
39
+ }
40
+ }
41
+ // Return true if the app can be initialized
42
+ canInit() {
43
+ if (!this.config.requiredModules) {
44
+ throw new Error('Unexpected missing requiredModules');
45
+ }
46
+ // Initialize the app if:
47
+ // - bootReady: autoBoot is on OR customInit has finished
48
+ // - all required modules are defined
49
+ const allDefined = this.config.requiredModules.every((m) => this.orderedDefs.includes(m));
50
+ return this.bootReady && allDefined;
51
+ }
52
+ /**
53
+ * Create a temporary LWR.define() function which captures all
54
+ * calls that occur BEFORE the full loader module is available
55
+ *
56
+ * Each call to LWR.define() is stored in 2 ways:
57
+ * - in a map as [moduleName, arguments] pairs
58
+ * - each moduleName is pushed onto an array, to preserve
59
+ * the order in which the modules were defined
60
+ */
61
+ tempDefine(...args) {
62
+ // Cache the incoming module
63
+ const moduleName = args[0];
64
+ this.defineCache[moduleName] = args;
65
+ this.orderedDefs.push(moduleName);
66
+ if (this.canInit()) {
67
+ if (hasSetTimeout) {
68
+ // requiredModules are defined, clear watchdog timer
69
+ // eslint-disable-next-line lwr/no-unguarded-apis, no-undef
70
+ clearTimeout(this.watchdogTimerId);
71
+ }
72
+ this.initApp();
73
+ }
74
+ }
75
+ // Called by the customInit hook via lwr.initializeApp()
76
+ postCustomInit() {
77
+ this.bootReady = true;
78
+ if (this.canInit()) {
79
+ if (hasSetTimeout) {
80
+ // requiredModules are defined, clear watchdog timer
81
+ // eslint-disable-next-line lwr/no-unguarded-apis, no-undef
82
+ clearTimeout(this.watchdogTimerId);
83
+ }
84
+ this.initApp();
85
+ }
86
+ }
87
+ // Create the loader and initialize the application
88
+ initApp() {
89
+ try {
90
+ const loaderConfig = {
91
+ baseUrl: this.config.baseUrl,
92
+ profiler: { logOperationStart, logOperationEnd },
93
+ // TODO: can be removed following https://github.com/salesforce-experience-platform-emu/lwr/issues/1087
94
+ appMetadata: {
95
+ appId: this.config.appId,
96
+ bootstrapModule: this.config.bootstrapModule,
97
+ rootComponent: this.config.rootComponent,
98
+ rootComponents: this.config.rootComponents,
99
+ },
100
+ };
101
+ const loader = createLoader(this.loaderModule, this.defineCache[this.loaderModule], loaderConfig, this.config.preloadModules);
102
+ this.mountApp(loader);
103
+ }
104
+ catch (e) {
105
+ this.enterErrorState(e);
106
+ }
107
+ }
108
+ waitForDOMContentLoaded() {
109
+ // eslint-disable-next-line lwr/no-unguarded-apis
110
+ if (typeof document === undefined) {
111
+ return Promise.resolve();
112
+ }
113
+ // Resolve if document is already "ready" https://developer.mozilla.org/en-US/docs/Web/API/Document/readyState
114
+ // eslint-disable-next-line lwr/no-unguarded-apis
115
+ if (document.readyState === 'interactive' || document.readyState === 'complete') {
116
+ return Promise.resolve();
117
+ }
118
+ return new Promise((resolve) => {
119
+ // eslint-disable-next-line lwr/no-unguarded-apis
120
+ document.addEventListener('DOMContentLoaded', () => {
121
+ resolve();
122
+ });
123
+ });
124
+ }
125
+ // Create a module out of the profiler
126
+ // Note: The profiler is also available as a module through lwc module resolution (see package.json)
127
+ createProfilerModule(define) {
128
+ const exporter = (exports) => {
129
+ Object.assign(exports, { logOperationStart, logOperationEnd });
130
+ };
131
+ define('lwr/profiler/v/__VERSION__', ['exports'], exporter, {});
132
+ }
133
+ // Set up the application globals, import map, root custom element...
134
+ mountApp(loader) {
135
+ const { bootstrapModule, rootComponent, importMappings, rootComponents, serverData, endpoints } = this.config;
136
+ // Set global LWR.define to loader.define
137
+ this.global.LWR = Object.freeze({
138
+ define: loader.define.bind(loader),
139
+ rootComponent,
140
+ rootComponents,
141
+ serverData: serverData || {},
142
+ importMappings,
143
+ endpoints,
144
+ env: this.global.LWR.env,
145
+ });
146
+ // Redefine all modules in the temporary cache
147
+ this.orderedDefs.forEach((specifier) => {
148
+ if (specifier !== this.loaderModule) {
149
+ loader.define(...this.defineCache[specifier]);
150
+ }
151
+ });
152
+ // by default, app initialization is gated on waiting for document to be parsed (via DOMContentLoaded)
153
+ const { disableInitDefer } = this.config;
154
+ // Load the import mappings and application bootstrap module
155
+ loader
156
+ .registerImportMappings(importMappings)
157
+ .then(() => {
158
+ if (!disableInitDefer) {
159
+ return this.waitForDOMContentLoaded();
160
+ }
161
+ })
162
+ .then(() => loader.load(bootstrapModule))
163
+ .catch((reason) => {
164
+ this.enterErrorState(new Error(`Application ${rootComponent || bootstrapModule} could not be loaded: ${reason}`));
165
+ });
166
+ }
167
+ // Trigger bootstrap error state, and call error handler if registered
168
+ enterErrorState(error) {
169
+ logOperationStart({ id: BOOTSTRAP_ERROR });
170
+ if (this.errorHandler) {
171
+ this.errorHandler(error);
172
+ }
173
+ else {
174
+ if (hasConsole) {
175
+ // eslint-disable-next-line lwr/no-unguarded-apis, no-undef
176
+ console.error(`An error occurred during LWR bootstrap. ${error.message}`, error.stack);
177
+ }
178
+ }
179
+ }
180
+ // eslint-disable-next-line no-undef, lwr/no-unguarded-apis
181
+ startWatchdogTimer() {
182
+ // eslint-disable-next-line lwr/no-unguarded-apis, no-undef
183
+ return setTimeout(() => {
184
+ this.enterErrorState(new Error('Failed to load required modules - timed out'));
185
+ }, REQUIRED_MODULES_TIMEOUT);
186
+ }
187
+ }
188
+ //# sourceMappingURL=shimLegacy.js.map
@@ -0,0 +1,56 @@
1
+ import type { ImportMetadata, AppMetadata, ServerData, ClientBootstrapConfig } from '@lwrjs/types';
2
+ import type { ImportMap } from './modules/lwr/loaderLegacy/importMap/importMap.js';
3
+ import type { ProfilerAPI, LogDispatcher } from 'lwr/profiler';
4
+ export type GlobalThis = {
5
+ LWR: Partial<ClientBootstrapConfig> & {
6
+ define: LoaderDefine;
7
+ };
8
+ [key: string]: unknown;
9
+ };
10
+ export type LoaderDefine = (id: string, deps: string[], exporter: Function, hash?: object) => void;
11
+ export type DefineArguments = [string, string[], Function, object?];
12
+ export type LoaderClass = {
13
+ new (config?: LoaderConfig): LoaderAPI;
14
+ };
15
+ export interface BaseLoaderAPI {
16
+ define: LoaderDefine;
17
+ load(id: string): Promise<unknown>;
18
+ registerExternalModules(modules: string[]): void;
19
+ services: Record<string, Function>;
20
+ }
21
+ export interface LoaderAPI extends BaseLoaderAPI {
22
+ registerImportMappings(mappings?: ImportMap): Promise<void>;
23
+ }
24
+ export type LoaderConfig = {
25
+ baseUrl?: string;
26
+ profiler: ProfilerAPI;
27
+ serverData?: ServerData;
28
+ appMetadata?: AppMetadata;
29
+ };
30
+ export type CustomErrorHandler = (error: Error) => void;
31
+ export type RegisterCustomErrorHandler = (callback: CustomErrorHandler) => void;
32
+ export type InitializeApp = () => void;
33
+ export interface CustomInitAPI {
34
+ initializeApp: InitializeApp;
35
+ onBootstrapError: RegisterCustomErrorHandler;
36
+ attachDispatcher: (dispatcher: LogDispatcher) => void;
37
+ define: LoaderDefine;
38
+ }
39
+ export type CustomInitFunction = (lwr: CustomInitAPI, config: ClientBootstrapConfig) => void;
40
+ export type Endpoints = {
41
+ uris: Record<string, string>;
42
+ modifiers?: Record<string, string>;
43
+ };
44
+ /**
45
+ * Fingerprints loader extensions
46
+ */
47
+ export interface FingerprintsLoaderAPI extends BaseLoaderAPI {
48
+ registerImportMappings(importMetadata: ImportMetadata, rootSpecifiers: string[]): Promise<void>;
49
+ }
50
+ export interface FingerprintsLoaderConfig extends LoaderConfig {
51
+ endpoints?: Endpoints;
52
+ }
53
+ export type FingerprintsLoaderClass = {
54
+ new (config?: LoaderConfig): FingerprintsLoaderAPI;
55
+ };
56
+ //# sourceMappingURL=types.d.ts.map
package/build/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "version": "0.13.0-alpha.2",
8
+ "version": "0.13.0-alpha.21",
9
9
  "homepage": "https://developer.salesforce.com/docs/platform/lwr/overview",
10
10
  "repository": {
11
11
  "type": "git",
@@ -24,9 +24,8 @@
24
24
  "import": "./build/index.js",
25
25
  "require": "./build/cjs/index.cjs"
26
26
  },
27
- "./metrics": {
28
- "import": "./build/metrics.js",
29
- "require": "./build/cjs/metrics.cjs"
27
+ "./types": {
28
+ "import": "./build/types.js"
30
29
  },
31
30
  "./prod-error-shim": "./build/assets/prod/lwr-error-shim.js",
32
31
  "./prod-loader-shim": "./build/assets/prod/lwr-loader-shim.js",
@@ -61,17 +60,17 @@
61
60
  "build": "yarn build:ts && yarn build:error-shim && yarn build:shim && yarn build:loader && yarn build:shim:bundle && yarn build:shim:bundle:minify"
62
61
  },
63
62
  "devDependencies": {
64
- "@locker/trusted-types": "0.22.1",
65
- "@lwrjs/diagnostics": "0.13.0-alpha.2",
66
- "@lwrjs/types": "0.13.0-alpha.2",
63
+ "@locker/trusted-types": "0.22.3",
64
+ "@lwrjs/diagnostics": "0.13.0-alpha.21",
65
+ "@lwrjs/types": "0.13.0-alpha.21",
67
66
  "@rollup/plugin-node-resolve": "^15.2.3",
68
67
  "@rollup/plugin-sucrase": "^5.0.2",
69
68
  "@rollup/plugin-terser": "^0.4.4",
70
69
  "rollup": "^2.78.0"
71
70
  },
72
71
  "dependencies": {
73
- "@lwrjs/client-modules": "0.13.0-alpha.2",
74
- "@lwrjs/shared-utils": "0.13.0-alpha.2"
72
+ "@lwrjs/client-modules": "0.13.0-alpha.21",
73
+ "@lwrjs/shared-utils": "0.13.0-alpha.21"
75
74
  },
76
75
  "lwc": {
77
76
  "modules": [
@@ -91,5 +90,5 @@
91
90
  "volta": {
92
91
  "extends": "../../../package.json"
93
92
  },
94
- "gitHead": "3ae1051ef1eb282f9c1fb54f6aab44ab5ba48480"
93
+ "gitHead": "d272dcd07881fa469ee73bd28d2f30f99957e122"
95
94
  }