@lwrjs/loader 0.22.8 → 0.22.10

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.
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: MIT
5
5
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
6
6
  */
7
- /* LWR Module Loader v0.22.8 */
7
+ /* LWR Module Loader v0.22.10 */
8
8
  const templateRegex = /\{([0-9]+)\}/g;
9
9
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
10
  function templateString(template, args) {
@@ -158,7 +158,7 @@ const NO_BLOB_IMPORT = Object.freeze({
158
158
  level: 0,
159
159
  message: 'Cannot import a blob URL',
160
160
  });
161
- Object.freeze({
161
+ const NO_IMPORT_TRANSPORT = Object.freeze({
162
162
  code: 3025,
163
163
  level: 0,
164
164
  message: 'Cannot dynamically import "transport" with importer "{0}"',
@@ -1609,9 +1609,10 @@ function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else {
1609
1609
 
1610
1610
 
1611
1611
 
1612
+
1612
1613
  /**
1613
1614
  * Validates that the given module id is not one of the forbidden dynamic import specifiers.
1614
- * Throws LoaderError for: lwc, the LWR loader, and blob URLs.
1615
+ * Throws LoaderError for: lwc, the LWR loader, transport/webruntime/transport, and blob URLs.
1615
1616
  *
1616
1617
  * @param id - Module identifier or URL
1617
1618
  * @param importer - Versioned specifier of the module importer (for error reporting)
@@ -1624,7 +1625,7 @@ function validateLoadSpecifier(
1624
1625
  loaderSpecifier,
1625
1626
  errors,
1626
1627
  ) {
1627
- const { LoaderError, NO_IMPORT_LWC, NO_IMPORT_LOADER, NO_BLOB_IMPORT } = errors;
1628
+ const { LoaderError, NO_IMPORT_LWC, NO_IMPORT_LOADER, NO_IMPORT_TRANSPORT, NO_BLOB_IMPORT } = errors;
1628
1629
 
1629
1630
  // Throw an error if the specifier is "lwc" or a versioned lwc specifier
1630
1631
  // Dynamic import of LWC APIs is not allowed
@@ -1640,6 +1641,18 @@ function validateLoadSpecifier(
1640
1641
  throw new LoaderError(NO_IMPORT_LOADER, [_nullishCoalesce(importer, () => ( 'unknown'))]);
1641
1642
  }
1642
1643
 
1644
+ // Throw an error if the specifier is "transport" or "webruntime/transport" (or versioned)
1645
+ // Dynamic import of transport exposes unsandboxed fetch, bypassing LWS
1646
+ // Reference: Hackforce report HF-3393
1647
+ if (
1648
+ id === 'transport' ||
1649
+ id.startsWith('transport/v/') ||
1650
+ id === 'webruntime/transport' ||
1651
+ id.startsWith('webruntime/transport/v/')
1652
+ ) {
1653
+ throw new LoaderError(NO_IMPORT_TRANSPORT, [_nullishCoalesce(importer, () => ( 'unknown'))]);
1654
+ }
1655
+
1643
1656
  // Throw an error if the specifier is a blob URL (case-insensitive check)
1644
1657
  if (id.toLowerCase().startsWith('blob:')) {
1645
1658
  throw new LoaderError(NO_BLOB_IMPORT);
@@ -1751,6 +1764,7 @@ class Loader {
1751
1764
  LoaderError,
1752
1765
  NO_IMPORT_LWC,
1753
1766
  NO_IMPORT_LOADER,
1767
+ NO_IMPORT_TRANSPORT,
1754
1768
  NO_BLOB_IMPORT,
1755
1769
  });
1756
1770
  return this.registry.load(id, importer);
@@ -8,11 +8,12 @@ export interface ValidateLoadSpecifierErrors {
8
8
  LoaderError: new (errorInfo: LoadSpecifierErrorInfo, errorArgs?: string[]) => Error;
9
9
  NO_IMPORT_LWC: LoadSpecifierErrorInfo;
10
10
  NO_IMPORT_LOADER: LoadSpecifierErrorInfo;
11
+ NO_IMPORT_TRANSPORT: LoadSpecifierErrorInfo;
11
12
  NO_BLOB_IMPORT: LoadSpecifierErrorInfo;
12
13
  }
13
14
  /**
14
15
  * Validates that the given module id is not one of the forbidden dynamic import specifiers.
15
- * Throws LoaderError for: lwc, the LWR loader, and blob URLs.
16
+ * Throws LoaderError for: lwc, the LWR loader, transport/webruntime/transport, and blob URLs.
16
17
  *
17
18
  * @param id - Module identifier or URL
18
19
  * @param importer - Versioned specifier of the module importer (for error reporting)
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Validates that the given module id is not one of the forbidden dynamic import specifiers.
3
- * Throws LoaderError for: lwc, the LWR loader, and blob URLs.
3
+ * Throws LoaderError for: lwc, the LWR loader, transport/webruntime/transport, and blob URLs.
4
4
  *
5
5
  * @param id - Module identifier or URL
6
6
  * @param importer - Versioned specifier of the module importer (for error reporting)
@@ -8,7 +8,7 @@
8
8
  * @param errors - Error class and message constants from the calling loader
9
9
  */
10
10
  export function validateLoadSpecifier(id, importer, loaderSpecifier, errors) {
11
- const { LoaderError, NO_IMPORT_LWC, NO_IMPORT_LOADER, NO_BLOB_IMPORT } = errors;
11
+ const { LoaderError, NO_IMPORT_LWC, NO_IMPORT_LOADER, NO_IMPORT_TRANSPORT, NO_BLOB_IMPORT } = errors;
12
12
  // Throw an error if the specifier is "lwc" or a versioned lwc specifier
13
13
  // Dynamic import of LWC APIs is not allowed
14
14
  // Block both "lwc" and versioned forms like "lwc/v/8_20_1" to prevent bypass attempts
@@ -21,6 +21,15 @@ export function validateLoadSpecifier(id, importer, loaderSpecifier, errors) {
21
21
  if (id === loaderSpecifier || id.startsWith(`${loaderSpecifier}/v/`)) {
22
22
  throw new LoaderError(NO_IMPORT_LOADER, [importer ?? 'unknown']);
23
23
  }
24
+ // Throw an error if the specifier is "transport" or "webruntime/transport" (or versioned)
25
+ // Dynamic import of transport exposes unsandboxed fetch, bypassing LWS
26
+ // Reference: Hackforce report HF-3393
27
+ if (id === 'transport' ||
28
+ id.startsWith('transport/v/') ||
29
+ id === 'webruntime/transport' ||
30
+ id.startsWith('webruntime/transport/v/')) {
31
+ throw new LoaderError(NO_IMPORT_TRANSPORT, [importer ?? 'unknown']);
32
+ }
24
33
  // Throw an error if the specifier is a blob URL (case-insensitive check)
25
34
  if (id.toLowerCase().startsWith('blob:')) {
26
35
  throw new LoaderError(NO_BLOB_IMPORT);
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: MIT
5
5
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
6
6
  */
7
- /* LWR Legacy Module Loader v0.22.8 */
7
+ /* LWR Legacy Module Loader v0.22.10 */
8
8
  const templateRegex = /\{([0-9]+)\}/g;
9
9
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
10
  function templateString(template, args) {
@@ -143,7 +143,7 @@ const NO_IMPORT_LOADER = Object.freeze({
143
143
  level: 0,
144
144
  message: 'Cannot dynamically import the LWR loader with importer "{0}"',
145
145
  });
146
- Object.freeze({
146
+ const NO_IMPORT_TRANSPORT = Object.freeze({
147
147
  code: 3025,
148
148
  level: 0,
149
149
  message: 'Cannot dynamically import "transport" with importer "{0}"',
@@ -1399,9 +1399,10 @@ function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else {
1399
1399
 
1400
1400
 
1401
1401
 
1402
+
1402
1403
  /**
1403
1404
  * Validates that the given module id is not one of the forbidden dynamic import specifiers.
1404
- * Throws LoaderError for: lwc, the LWR loader, and blob URLs.
1405
+ * Throws LoaderError for: lwc, the LWR loader, transport/webruntime/transport, and blob URLs.
1405
1406
  *
1406
1407
  * @param id - Module identifier or URL
1407
1408
  * @param importer - Versioned specifier of the module importer (for error reporting)
@@ -1414,7 +1415,7 @@ function validateLoadSpecifier(
1414
1415
  loaderSpecifier,
1415
1416
  errors,
1416
1417
  ) {
1417
- const { LoaderError, NO_IMPORT_LWC, NO_IMPORT_LOADER, NO_BLOB_IMPORT } = errors;
1418
+ const { LoaderError, NO_IMPORT_LWC, NO_IMPORT_LOADER, NO_IMPORT_TRANSPORT, NO_BLOB_IMPORT } = errors;
1418
1419
 
1419
1420
  // Throw an error if the specifier is "lwc" or a versioned lwc specifier
1420
1421
  // Dynamic import of LWC APIs is not allowed
@@ -1430,6 +1431,18 @@ function validateLoadSpecifier(
1430
1431
  throw new LoaderError(NO_IMPORT_LOADER, [_nullishCoalesce(importer, () => ( 'unknown'))]);
1431
1432
  }
1432
1433
 
1434
+ // Throw an error if the specifier is "transport" or "webruntime/transport" (or versioned)
1435
+ // Dynamic import of transport exposes unsandboxed fetch, bypassing LWS
1436
+ // Reference: Hackforce report HF-3393
1437
+ if (
1438
+ id === 'transport' ||
1439
+ id.startsWith('transport/v/') ||
1440
+ id === 'webruntime/transport' ||
1441
+ id.startsWith('webruntime/transport/v/')
1442
+ ) {
1443
+ throw new LoaderError(NO_IMPORT_TRANSPORT, [_nullishCoalesce(importer, () => ( 'unknown'))]);
1444
+ }
1445
+
1433
1446
  // Throw an error if the specifier is a blob URL (case-insensitive check)
1434
1447
  if (id.toLowerCase().startsWith('blob:')) {
1435
1448
  throw new LoaderError(NO_BLOB_IMPORT);
@@ -1794,6 +1807,7 @@ class Loader {
1794
1807
  LoaderError,
1795
1808
  NO_IMPORT_LWC,
1796
1809
  NO_IMPORT_LOADER,
1810
+ NO_IMPORT_TRANSPORT,
1797
1811
  NO_BLOB_IMPORT,
1798
1812
  });
1799
1813
  return this.registry.load(id, importer);
@@ -0,0 +1,10 @@
1
+ import type { DefineArguments, DefineArgsInput, ParseDefineResult, ResolvedLoader } from '../types.js';
2
+ /**
3
+ * Parse AMD define args. Supports define(id, deps, factory).
4
+ */
5
+ export declare function parseDefine(def: DefineArgsInput): ParseDefineResult;
6
+ /**
7
+ * Resolve the loader's dependencies from defineCache. Throws if definition is invalid or deps cannot be resolved.
8
+ */
9
+ export declare function resolveLoaderDepsFromDefineCache(loaderSpecifier: string, definition: DefineArguments, defineCache: Record<string, DefineArguments>): ResolvedLoader;
10
+ //# sourceMappingURL=defineCacheResolver.d.ts.map
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Parse AMD define args. Supports define(id, deps, factory).
3
+ */
4
+ export function parseDefine(def) {
5
+ const [, depsOrFactory, factory] = def;
6
+ if (Array.isArray(depsOrFactory) && typeof factory === 'function') {
7
+ return { deps: depsOrFactory, factory };
8
+ }
9
+ if (typeof depsOrFactory === 'function') {
10
+ return { deps: [], factory: depsOrFactory };
11
+ }
12
+ throw new Error('Invalid module definition');
13
+ }
14
+ /**
15
+ * Resolve a loader dependency: 'exports' returns the bag; otherwise look up in cache and instantiate.
16
+ * Loader deps are assumed to be leaf modules (no deps of their own)—no recursive resolution.
17
+ */
18
+ function resolveDep(dep, exportsObj, cache) {
19
+ if (dep === 'exports')
20
+ return exportsObj;
21
+ const mod = cache[dep];
22
+ if (!mod) {
23
+ throw new Error(`Dependency "${dep}" not found in defineCache for loader`);
24
+ }
25
+ try {
26
+ return instantiateLeafModule(mod);
27
+ }
28
+ catch (e) {
29
+ const msg = e instanceof Error ? e.message : String(e);
30
+ throw new Error(`Loader dependency "${dep}" has invalid definition: ${msg}`);
31
+ }
32
+ }
33
+ /**
34
+ * Instantiate a leaf module (loader dep). Assumes the module has no dependencies of its own.
35
+ * Supports only deps: [] or ['exports']; any other dep list throws.
36
+ */
37
+ function instantiateLeafModule(def) {
38
+ const { deps, factory } = parseDefine(def);
39
+ if (deps.length > 1 || (deps.length === 1 && deps[0] !== 'exports')) {
40
+ throw new Error(`Loader dependencies must have no deps or only ['exports']; got [${deps.join(', ')}]`);
41
+ }
42
+ const exports = {};
43
+ const out = factory(exports);
44
+ return out !== undefined ? out : exports;
45
+ }
46
+ /**
47
+ * Normalize loader definition to canonical (exports, ...deps). Injects 'exports' if missing.
48
+ */
49
+ function normalizeLoaderDefinition(def) {
50
+ const { deps, factory } = parseDefine(def);
51
+ if (deps.includes('exports')) {
52
+ return { deps, factory };
53
+ }
54
+ const isEmptyDeps = deps.length === 0;
55
+ const normalizedFactory = (exports, ...rest) => {
56
+ const result = isEmptyDeps ? factory(exports) : factory(...rest);
57
+ if (result !== undefined && typeof result === 'object') {
58
+ Object.assign(exports, result);
59
+ }
60
+ };
61
+ return { deps: ['exports', ...deps], factory: normalizedFactory };
62
+ }
63
+ /**
64
+ * Resolve the loader's dependencies from defineCache. Throws if definition is invalid or deps cannot be resolved.
65
+ */
66
+ export function resolveLoaderDepsFromDefineCache(loaderSpecifier, definition, defineCache) {
67
+ try {
68
+ const { deps, factory } = normalizeLoaderDefinition(definition);
69
+ const exportsObj = {};
70
+ const args = deps.map((dep) => resolveDep(dep, exportsObj, defineCache));
71
+ return { factory: factory, args, exportsObj };
72
+ }
73
+ catch (e) {
74
+ const msg = e instanceof Error ? e.message : String(e);
75
+ throw new Error(`Expected loader with specifier "${loaderSpecifier}" to be a module. ${msg}`);
76
+ }
77
+ }
78
+ //# sourceMappingURL=defineCacheResolver.js.map
@@ -1,3 +1,7 @@
1
1
  import type { DefineArguments, FingerprintsLoaderAPI as LoaderAPI, FingerprintsLoaderConfig as LoaderConfig } from '../types.js';
2
- export declare function createLoader(name: string, definition: DefineArguments, config: LoaderConfig, externalModules?: string[]): LoaderAPI;
2
+ /**
3
+ * Create a loader from a definition. Original API preserved.
4
+ * Optional defineCache for resolving loader deps (when loader has dependencies).
5
+ */
6
+ export declare function createLoader(name: string, definition: DefineArguments, config: LoaderConfig, externalModules?: string[], defineCache?: Record<string, DefineArguments>): LoaderAPI;
3
7
  //# sourceMappingURL=loader.d.ts.map
@@ -1,10 +1,21 @@
1
- export function createLoader(name, definition, config, externalModules) {
1
+ import { resolveLoaderDepsFromDefineCache } from './defineCacheResolver.js';
2
+ /**
3
+ * Create a loader from a definition. Original API preserved.
4
+ * Optional defineCache for resolving loader deps (when loader has dependencies).
5
+ */
6
+ export function createLoader(name, definition, config, externalModules, defineCache) {
2
7
  if (!definition || typeof definition[2] !== 'function') {
3
8
  throw new Error(`Expected loader with specifier "${name}" to be a module`);
4
9
  }
5
- // Create a Loader instance
6
10
  const exports = {};
7
- definition[2].call(null, exports);
11
+ if (defineCache) {
12
+ const { factory, args, exportsObj } = resolveLoaderDepsFromDefineCache(name, definition, defineCache);
13
+ factory(...args);
14
+ Object.assign(exports, exportsObj);
15
+ }
16
+ else {
17
+ definition[2].call(null, exports);
18
+ }
8
19
  const { Loader } = exports;
9
20
  if (!Loader) {
10
21
  throw new Error('Expected Loader class to be defined');
@@ -112,7 +112,7 @@ export default class LoaderShim {
112
112
  rootComponents: this.config.rootComponents,
113
113
  },
114
114
  };
115
- const loader = createLoader(this.loaderSpecifier, this.defineCache[this.loaderSpecifier], loaderConfig, this.config.preloadModules);
115
+ const loader = createLoader(this.loaderSpecifier, this.defineCache[this.loaderSpecifier], loaderConfig, this.config.preloadModules, this.defineCache);
116
116
  this.mountApp(loader);
117
117
  if (loader &&
118
118
  typeof loader.getModuleWarnings === 'function' &&
@@ -134,6 +134,7 @@ export default class LoaderShim {
134
134
  resolve();
135
135
  }
136
136
  else {
137
+ /* istanbul ignore next */
137
138
  const observer = new MutationObserver(() => {
138
139
  // eslint-disable-next-line lwr/no-unguarded-apis
139
140
  if (document.body) {
@@ -198,7 +199,7 @@ export default class LoaderShim {
198
199
  ])
199
200
  .then(() => {
200
201
  // eslint-disable-next-line lwr/no-unguarded-apis
201
- if (typeof window === 'undefined' || typeof document === undefined) {
202
+ if (typeof window === 'undefined' || typeof document === 'undefined') {
202
203
  return Promise.resolve();
203
204
  }
204
205
  if (initDeferDOM) {
@@ -1,3 +1,8 @@
1
- import type { LoaderConfig, DefineArguments, LoaderAPI } from '../types.js';
2
- export declare function createLoader(name: string, definition: DefineArguments, config: LoaderConfig, externalModules?: string[]): LoaderAPI;
1
+ import type { LoaderAPI, LoaderConfig, DefineArguments } from '../types.js';
2
+ /**
3
+ * Create a loader from a definition. Original API preserved.
4
+ * Optional defineCache for resolving loader deps.
5
+ * definition[3] (signatures: ownHash, hashes) is passed to loader.define for cache invalidation.
6
+ */
7
+ export declare function createLoader(name: string, definition: DefineArguments, config: LoaderConfig, externalModules?: string[], defineCache?: Record<string, DefineArguments>): LoaderAPI;
3
8
  //# sourceMappingURL=loaderLegacy.d.ts.map
@@ -1,16 +1,27 @@
1
- export function createLoader(name, definition, config, externalModules) {
1
+ import { resolveLoaderDepsFromDefineCache } from '../shim/defineCacheResolver.js';
2
+ /**
3
+ * Create a loader from a definition. Original API preserved.
4
+ * Optional defineCache for resolving loader deps.
5
+ * definition[3] (signatures: ownHash, hashes) is passed to loader.define for cache invalidation.
6
+ */
7
+ export function createLoader(name, definition, config, externalModules, defineCache) {
2
8
  if (!definition || typeof definition[2] !== 'function') {
3
9
  throw new Error(`Expected loader with specifier "${name}" to be a module`);
4
10
  }
5
- // Create a Loader instance
6
11
  const exports = {};
7
- definition[2].call(null, exports);
12
+ if (defineCache) {
13
+ const { factory, args, exportsObj } = resolveLoaderDepsFromDefineCache(name, definition, defineCache);
14
+ factory(...args);
15
+ Object.assign(exports, exportsObj);
16
+ }
17
+ else {
18
+ definition[2].call(null, exports);
19
+ }
8
20
  const { Loader } = exports;
9
21
  if (!Loader) {
10
22
  throw new Error('Expected Loader class to be defined');
11
23
  }
12
24
  const loader = new Loader(config);
13
- // register externally loaded modules
14
25
  if (externalModules && externalModules.length) {
15
26
  loader.registerExternalModules(externalModules);
16
27
  }
@@ -99,7 +99,7 @@ export default class LoaderShim {
99
99
  rootComponents: this.config.rootComponents,
100
100
  },
101
101
  };
102
- const loader = createLoader(this.loaderModule, this.defineCache[this.loaderModule], loaderConfig, this.config.preloadModules);
102
+ const loader = createLoader(this.loaderModule, this.defineCache[this.loaderModule], loaderConfig, this.config.preloadModules, this.defineCache);
103
103
  this.mountApp(loader);
104
104
  if (loader &&
105
105
  typeof loader.getModuleWarnings === 'function' &&
@@ -180,7 +180,7 @@ export default class LoaderShim {
180
180
  .registerImportMappings(importMappings)
181
181
  .then(() => {
182
182
  // eslint-disable-next-line lwr/no-unguarded-apis
183
- if (typeof window === 'undefined' || typeof document === undefined) {
183
+ if (typeof window === 'undefined' || typeof document === 'undefined') {
184
184
  return Promise.resolve();
185
185
  }
186
186
  if (initDeferDOM) {
package/build/types.d.ts CHANGED
@@ -8,7 +8,25 @@ export type GlobalThis = {
8
8
  [key: string]: unknown;
9
9
  };
10
10
  export type LoaderDefine = (id: string, deps: string[], exporter: Function, hash?: object) => void;
11
+ /** define(id, deps, factory, hash?) - full form. Same shape as LoaderDefine args. (from main) */
11
12
  export type DefineArguments = [string, string[], Function, object?];
13
+ /** Raw args from define() - at least [id, depsOrFactory]; may include factory, hash. Used for parsing. */
14
+ export type DefineArgsInput = readonly [id: string, depsOrFactory: unknown, factory?: unknown, hash?: object];
15
+ export interface ParseDefineResult {
16
+ deps: string[];
17
+ /** Same as DefineArguments[2] / LoaderDefine exporter */
18
+ factory: Function;
19
+ }
20
+ /** Normalized loader factory: receives (exports, ...resolvedDeps). Used after resolveLoaderDepsFromDefineCache. */
21
+ export type LoaderFactory = (exports: object, ...deps: unknown[]) => void;
22
+ /** Args passed to the loader factory: [exports, ...resolvedDeps]. First element is always the exports bag. */
23
+ export type LoaderFactoryArgs = [exports: object, ...deps: unknown[]];
24
+ /** Result of resolveLoaderDepsFromDefineCache. Typed for createLoader consumption. */
25
+ export interface ResolvedLoader {
26
+ factory: LoaderFactory;
27
+ args: LoaderFactoryArgs;
28
+ exportsObj: object;
29
+ }
12
30
  export type LoaderClass = {
13
31
  new (config?: LoaderConfig): LoaderAPI;
14
32
  };
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "version": "0.22.8",
8
+ "version": "0.22.10",
9
9
  "homepage": "https://developer.salesforce.com/docs/platform/lwr/overview",
10
10
  "repository": {
11
11
  "type": "git",
@@ -44,10 +44,10 @@
44
44
  "package.cjs"
45
45
  ],
46
46
  "scripts": {
47
- "test:browser": "rm tsconfig.tsbuildinfo; yarn build; JEST_PUPPETEER_CONFIG=jest-puppeteer.config.cjs jest --verbose --runInBand --config jest.browser.config.cjs",
48
- "test:browser:ci": "rm tsconfig.tsbuildinfo; yarn build; JEST_PUPPETEER_CONFIG=jest-puppeteer.config.cjs jest --runInBand --no-cache --config jest.browser.config.cjs",
49
- "test:browserLegacy": "rm tsconfig.tsbuildinfo; yarn build; JEST_PUPPETEER_CONFIG=jest-puppeteer-legacy.config.cjs jest --verbose --runInBand --config jest.browser-legacy.config.cjs",
50
- "test:browserLegacy:ci": "rm tsconfig.tsbuildinfo; yarn build; JEST_PUPPETEER_CONFIG=jest-puppeteer-legacy.config.cjs jest --runInBand --no-cache --config jest.browser-legacy.config.cjs",
47
+ "test:browser": "shx rm -f tsconfig.tsbuildinfo; yarn build; cross-env JEST_PUPPETEER_CONFIG=jest-puppeteer.config.cjs jest --verbose --runInBand --config jest.browser.config.cjs",
48
+ "test:browser:ci": "shx rm -f tsconfig.tsbuildinfo; yarn build; cross-env JEST_PUPPETEER_CONFIG=jest-puppeteer.config.cjs jest --runInBand --no-cache --config jest.browser.config.cjs",
49
+ "test:browserLegacy": "shx rm -f tsconfig.tsbuildinfo; yarn build; cross-env JEST_PUPPETEER_CONFIG=jest-puppeteer-legacy.config.cjs jest --verbose --runInBand --config jest.browser-legacy.config.cjs",
50
+ "test:browserLegacy:ci": "shx rm -f tsconfig.tsbuildinfo; yarn build; cross-env JEST_PUPPETEER_CONFIG=jest-puppeteer-legacy.config.cjs jest --runInBand --no-cache --config jest.browser-legacy.config.cjs",
51
51
  "start:testserver": "node build/__tests__/shim/browser/test_server.js",
52
52
  "start:testserverLegacy": "node build/__tests__/shim-legacy/browser/test_server.js",
53
53
  "build:platform": "yarn build:shim && yarn build:error-shim && node ./scripts/platform-versioning.js",
@@ -61,16 +61,16 @@
61
61
  },
62
62
  "devDependencies": {
63
63
  "@locker/trusted-types": "0.26.4",
64
- "@lwrjs/diagnostics": "0.22.8",
65
- "@lwrjs/types": "0.22.8",
64
+ "@lwrjs/diagnostics": "0.22.10",
65
+ "@lwrjs/types": "0.22.10",
66
66
  "@rollup/plugin-node-resolve": "^15.2.3",
67
67
  "@rollup/plugin-sucrase": "^5.0.2",
68
68
  "@rollup/plugin-terser": "^0.4.4",
69
69
  "rollup": "^2.80.0"
70
70
  },
71
71
  "dependencies": {
72
- "@lwrjs/client-modules": "0.22.8",
73
- "@lwrjs/shared-utils": "0.22.8"
72
+ "@lwrjs/client-modules": "0.22.10",
73
+ "@lwrjs/shared-utils": "0.22.10"
74
74
  },
75
75
  "lwc": {
76
76
  "modules": [
@@ -90,5 +90,5 @@
90
90
  "volta": {
91
91
  "extends": "../../../package.json"
92
92
  },
93
- "gitHead": "66f71f33f5b12fa4e7c7969f0a6239a590c999d1"
93
+ "gitHead": "52b77087a10567ad62b48bde04607c627580105d"
94
94
  }