@lwc/lwc-dev-server 10.6.0 → 10.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +1 -2
- package/dist/bin.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/server/bundler/lexBundler.d.ts +4 -4
- package/dist/server/bundler/lexBundler.js +14 -16
- package/dist/server/bundler/lexBundler.js.map +1 -1
- package/dist/server/bundler/lexBundler.spec.js +90 -48
- package/dist/server/bundler/lexBundler.spec.js.map +1 -1
- package/dist/server/connection/client.d.ts +5 -7
- package/dist/server/connection/client.js +24 -41
- package/dist/server/connection/client.js.map +1 -1
- package/dist/server/connection/client.spec.js +96 -59
- package/dist/server/connection/client.spec.js.map +1 -1
- package/dist/server/connection/connection.d.ts +4 -4
- package/dist/server/connection/connection.js +9 -3
- package/dist/server/connection/connection.js.map +1 -1
- package/dist/server/connection/connection.spec.js +7 -9
- package/dist/server/connection/connection.spec.js.map +1 -1
- package/dist/server/connection/web-socket-server.d.ts +2 -1
- package/dist/server/connection/web-socket-server.js +5 -6
- package/dist/server/connection/web-socket-server.js.map +1 -1
- package/dist/server/connection/web-socket-server.spec.js +2 -6
- package/dist/server/connection/web-socket-server.spec.js.map +1 -1
- package/dist/server/index.d.ts +5 -4
- package/dist/server/index.js +13 -13
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.spec.js +45 -32
- package/dist/server/index.spec.js.map +1 -1
- package/dist/server/moduleGraph/index.d.ts +18 -42
- package/dist/server/moduleGraph/index.js +72 -119
- package/dist/server/moduleGraph/index.js.map +1 -1
- package/dist/server/moduleGraph/index.spec.js +106 -52
- package/dist/server/moduleGraph/index.spec.js.map +1 -1
- package/dist/server/moduleGraph/module.d.ts +78 -0
- package/dist/server/moduleGraph/module.js +126 -0
- package/dist/server/moduleGraph/module.js.map +1 -0
- package/dist/server/moduleGraph/module.spec.d.ts +1 -0
- package/dist/server/moduleGraph/module.spec.js +70 -0
- package/dist/server/moduleGraph/module.spec.js.map +1 -0
- package/dist/server/moduleGraph/workspaceScanner/__tests__/fileReader.spec.js +3 -3
- package/dist/server/moduleGraph/workspaceScanner/__tests__/fileReader.spec.js.map +1 -1
- package/dist/server/moduleGraph/workspaceScanner/__tests__/internal.spec.js +8 -9
- package/dist/server/moduleGraph/workspaceScanner/__tests__/internal.spec.js.map +1 -1
- package/dist/server/moduleGraph/workspaceScanner/__tests__/mrt.spec.js +1 -6
- package/dist/server/moduleGraph/workspaceScanner/__tests__/mrt.spec.js.map +1 -1
- package/dist/server/moduleGraph/workspaceScanner/__tests__/sfcli.spec.js +1 -6
- package/dist/server/moduleGraph/workspaceScanner/__tests__/sfcli.spec.js.map +1 -1
- package/dist/server/moduleGraph/workspaceScanner/fileReader.d.ts +8 -2
- package/dist/server/moduleGraph/workspaceScanner/fileReader.js +16 -17
- package/dist/server/moduleGraph/workspaceScanner/fileReader.js.map +1 -1
- package/dist/server/moduleGraph/workspaceScanner/index.d.ts +2 -1
- package/dist/server/moduleGraph/workspaceScanner/index.js.map +1 -1
- package/dist/server/moduleGraph/workspaceScanner/salesforceCli.js +2 -14
- package/dist/server/moduleGraph/workspaceScanner/salesforceCli.js.map +1 -1
- package/dist/server/moduleGraph/workspaceScanner/scanner.d.ts +8 -34
- package/dist/server/moduleGraph/workspaceScanner/scanner.js +9 -18
- package/dist/server/moduleGraph/workspaceScanner/scanner.js.map +1 -1
- package/dist/server/util/module-util.d.ts +10 -0
- package/dist/server/util/module-util.js +10 -0
- package/dist/server/util/module-util.js.map +1 -0
- package/dist/server/watcher/index.js +1 -2
- package/dist/server/watcher/index.js.map +1 -1
- package/dist/server/watcher/index.spec.js +1 -1
- package/dist/server/watcher/index.spec.js.map +1 -1
- package/dist/types/devServer.d.ts +2 -4
- package/dist/types/serverConfig.d.ts +0 -12
- package/dist/types/serverConfig.js +0 -12
- package/dist/types/serverConfig.js.map +1 -1
- package/package.json +5 -5
- package/dist/server/consoleLogger.d.ts +0 -6
- package/dist/server/consoleLogger.js +0 -33
- package/dist/server/consoleLogger.js.map +0 -1
package/dist/bin.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
import { parseArgs } from 'node:util';
|
|
3
3
|
import { startLwcDevServer } from './server/index.js';
|
|
4
|
-
import {
|
|
4
|
+
import { Workspace } from './types/index.js';
|
|
5
5
|
const { values: { 'root-dir': rootDir, paths, port }, } = parseArgs({
|
|
6
6
|
args: process.argv.slice(2),
|
|
7
7
|
options: {
|
|
@@ -23,7 +23,6 @@ if (!paths)
|
|
|
23
23
|
throw new Error(`paths is required`);
|
|
24
24
|
startLwcDevServer({
|
|
25
25
|
rootDir,
|
|
26
|
-
logLevel: LogLevel.debug,
|
|
27
26
|
paths: paths.map((p) => path.join(rootDir, p)),
|
|
28
27
|
port: +(port || 50182),
|
|
29
28
|
workspace: Workspace.Internal,
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,EACF,MAAM,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAC/C,GAAG,SAAS,CAAC;IACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE;QACL,IAAI,EAAE;YACF,IAAI,EAAE,QAAQ;SACjB;QACD,CAAC,UAAU,CAAC,EAAE;YACV,IAAI,EAAE,QAAQ;SACjB;QACD,KAAK,EAAE;YACH,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;SACjB;KACJ;CACJ,CAAC,CAAC;AACH,IAAI,CAAC,OAAO;IAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACtD,IAAI,CAAC,KAAK;IAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACjD,iBAAiB,CAAC;IACd,OAAO;IACP,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC,QAAQ;CAChC,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type DevServerContext } from '../../types/index.js';
|
|
2
|
+
import { ModulePart } from '../moduleGraph/module.js';
|
|
2
3
|
import type { TransformOptions } from '@lwc/compiler';
|
|
3
|
-
|
|
4
|
-
export declare function compile(ctx: DevServerContext, modulePath: string, options: TransformOptions, logger: Logger, lifecycle?: Lifecycle): Promise<{
|
|
4
|
+
export declare function compile(ctx: DevServerContext, { module, part }: ModulePart, compileOptions: TransformOptions): Promise<{
|
|
5
5
|
code: string | undefined;
|
|
6
|
-
warnings:
|
|
6
|
+
warnings: import("@lwc/errors").CompilerDiagnostic[];
|
|
7
7
|
}>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { compile as platformCompile } from '@lwc/sfdc-lwc-compiler';
|
|
2
|
-
import {
|
|
2
|
+
import { Workspace } from '../../types/index.js';
|
|
3
3
|
import { measureOperationTime } from '../util/telemetry.js';
|
|
4
|
-
function transformOptionsToPlatformCompileConfig(ctx, transformOptions,
|
|
4
|
+
function transformOptionsToPlatformCompileConfig(ctx, transformOptions, files) {
|
|
5
5
|
const { enableDynamicComponents, enableLightningWebSecurityTransforms, experimentalComplexExpressions, apiVersion, name, namespace, experimentalDynamicComponent, outputConfig, } = transformOptions;
|
|
6
6
|
const options = {
|
|
7
7
|
// variable options
|
|
@@ -17,17 +17,14 @@ function transformOptionsToPlatformCompileConfig(ctx, transformOptions, modulePa
|
|
|
17
17
|
// Enable HMR always in dev server
|
|
18
18
|
enableHmr: true,
|
|
19
19
|
};
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
return 'platform';
|
|
25
|
-
};
|
|
20
|
+
const bundleType = ctx.config.workspace === Workspace.Internal || ctx.config.workspace === Workspace.Mrt
|
|
21
|
+
? 'internal'
|
|
22
|
+
: 'platform';
|
|
26
23
|
const bundle = {
|
|
27
|
-
type:
|
|
24
|
+
type: bundleType,
|
|
28
25
|
name: name,
|
|
29
26
|
namespace: namespace ?? 'c',
|
|
30
|
-
files
|
|
27
|
+
files,
|
|
31
28
|
options,
|
|
32
29
|
};
|
|
33
30
|
const compilerConfigs = [
|
|
@@ -41,16 +38,17 @@ function transformOptionsToPlatformCompileConfig(ctx, transformOptions, modulePa
|
|
|
41
38
|
compilerConfigs,
|
|
42
39
|
};
|
|
43
40
|
}
|
|
44
|
-
export async function compile(ctx,
|
|
45
|
-
const
|
|
46
|
-
const
|
|
41
|
+
export async function compile(ctx, { module, part }, compileOptions) {
|
|
42
|
+
const sources = await module.getSources(part);
|
|
43
|
+
const compileConfig = transformOptionsToPlatformCompileConfig(ctx, compileOptions, sources);
|
|
44
|
+
const result = await measureOperationTime('compile-time', () => platformCompile(compileConfig), ctx.config.lifecycle);
|
|
47
45
|
if (!result.success) {
|
|
48
|
-
logger.
|
|
49
|
-
return { code: undefined, warnings:
|
|
46
|
+
ctx.logger.error(`Failed to compile ${part}. \n\tDiagnostics: ${JSON.stringify(result.diagnostics)}`);
|
|
47
|
+
return { code: undefined, warnings: result.diagnostics };
|
|
50
48
|
}
|
|
51
49
|
return {
|
|
52
50
|
code: result.results?.[0].code,
|
|
53
|
-
warnings: result.diagnostics
|
|
51
|
+
warnings: result.diagnostics,
|
|
54
52
|
};
|
|
55
53
|
}
|
|
56
54
|
//# sourceMappingURL=lexBundler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexBundler.js","sourceRoot":"","sources":["../../../src/server/bundler/lexBundler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"lexBundler.js","sourceRoot":"","sources":["../../../src/server/bundler/lexBundler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAyB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAW5D,SAAS,uCAAuC,CAC5C,GAAqB,EACrB,gBAAkC,EAClC,KAAkB;IAElB,MAAM,EACF,uBAAuB,EACvB,oCAAoC,EACpC,8BAA8B,EAC9B,UAAU,EACV,IAAI,EACJ,SAAS,EACT,4BAA4B,EAC5B,YAAY,GACf,GAAG,gBAAgB,CAAC;IACrB,MAAM,OAAO,GAAkB;QAC3B,mBAAmB;QACnB,sBAAsB,EAAE,uBAAuB;QAC/C,oCAAoC,EAAE,oCAAoC;QAC1E,yBAAyB,EAAE,8BAA8B;QACzD,UAAU,EAAE,UAAU;QACtB,mBAAmB;QACnB,qBAAqB,EAAE,IAAI;QAC3B,aAAa,EAAE,SAAS;QACxB,iBAAiB,EAAE,IAAI;QACvB,wBAAwB,EAAE,IAAI;QAC9B,kCAAkC;QAClC,SAAS,EAAE,IAAI;KAClB,CAAC;IACF,MAAM,UAAU,GACZ,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,GAAG;QACjF,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,UAAU,CAAC;IAErB,MAAM,MAAM,GAAiB;QACzB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,IAAK;QACX,SAAS,EAAE,SAAS,IAAI,GAAG;QAC3B,KAAK;QACL,OAAO;KACV,CAAC;IACF,MAAM,eAAe,GAAqB;QACtC;YACI,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE;YACrE,4BAA4B,EAAE,4BAA4B;SAC7D;KACJ,CAAC;IACF,OAAO;QACH,MAAM;QACN,eAAe;KAClB,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CACzB,GAAqB,EACrB,EAAE,MAAM,EAAE,IAAI,EAAc,EAC5B,cAAgC;IAEhC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,uCAAuC,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAC5F,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACrC,cAAc,EACd,GAAG,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,EACpC,GAAG,CAAC,MAAM,CAAC,SAAS,CACvB,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,GAAG,CAAC,MAAM,CAAC,KAAK,CACZ,qBAAqB,IAAI,sBAAsB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CACtF,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;IAC7D,CAAC;IAED,OAAO;QACH,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;QAC9B,QAAQ,EAAE,MAAM,CAAC,WAAW;KAC/B,CAAC;AACN,CAAC"}
|
|
@@ -1,71 +1,113 @@
|
|
|
1
1
|
import { compile as platformCompile } from '@lwc/sfdc-lwc-compiler';
|
|
2
|
-
import { Workspace } from '../../types/index';
|
|
2
|
+
import { Workspace } from '../../types/index.js';
|
|
3
3
|
import { compile } from './lexBundler';
|
|
4
|
-
|
|
4
|
+
// Mock dependencies
|
|
5
|
+
vi.mock('@lwc/sfdc-lwc-compiler', () => ({
|
|
6
|
+
compile: vi.fn(),
|
|
7
|
+
}));
|
|
8
|
+
vi.mock('../util/telemetry.js', () => ({
|
|
9
|
+
measureOperationTime: vi.fn((name, fn) => fn()),
|
|
10
|
+
}));
|
|
11
|
+
const mockCompileOptions = {
|
|
12
|
+
enableDynamicComponents: true,
|
|
13
|
+
enableLightningWebSecurityTransforms: true,
|
|
14
|
+
experimentalComplexExpressions: true,
|
|
15
|
+
apiVersion: 50,
|
|
16
|
+
name: 'testModule',
|
|
17
|
+
namespace: 'c',
|
|
18
|
+
outputConfig: { sourcemap: true },
|
|
19
|
+
};
|
|
5
20
|
describe('compile', () => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const mockModulePath = 'src/modules/myModule';
|
|
9
|
-
const mockTransformOptions = {
|
|
10
|
-
enableDynamicComponents: true,
|
|
11
|
-
enableLightningWebSecurityTransforms: true,
|
|
12
|
-
experimentalComplexExpressions: true,
|
|
13
|
-
apiVersion: 50,
|
|
14
|
-
name: 'myModule',
|
|
15
|
-
namespace: 'c',
|
|
16
|
-
};
|
|
17
|
-
beforeEach(() => {
|
|
18
|
-
mockLogger = {
|
|
19
|
-
log: vi.fn(),
|
|
20
|
-
};
|
|
21
|
-
mockCtx = {
|
|
21
|
+
it('should compile successfully', async () => {
|
|
22
|
+
const ctx = {
|
|
22
23
|
config: {
|
|
23
24
|
workspace: Workspace.Internal,
|
|
24
25
|
},
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
logger: {
|
|
27
|
+
error: vi.fn(),
|
|
27
28
|
},
|
|
29
|
+
moduleGraph: {},
|
|
28
30
|
};
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const
|
|
31
|
+
const module = {
|
|
32
|
+
getSources: vi.fn().mockResolvedValue({ 'test.js': 'console.log("test");' }),
|
|
33
|
+
};
|
|
34
|
+
const part = 'testPart';
|
|
35
|
+
vi.mocked(platformCompile).mockResolvedValue({
|
|
33
36
|
success: true,
|
|
34
|
-
results: [
|
|
37
|
+
results: [{ code: 'compiled code' }],
|
|
38
|
+
diagnostics: [],
|
|
39
|
+
version: '1.0.0',
|
|
40
|
+
timings: {},
|
|
41
|
+
});
|
|
42
|
+
const result = await compile(ctx, { module, part }, mockCompileOptions);
|
|
43
|
+
expect(platformCompile).toHaveBeenCalledWith({
|
|
44
|
+
bundle: {
|
|
45
|
+
files: {
|
|
46
|
+
'test.js': 'console.log("test");',
|
|
47
|
+
},
|
|
48
|
+
name: 'testModule',
|
|
49
|
+
namespace: 'c',
|
|
50
|
+
options: {
|
|
51
|
+
allowDynamicComponents: true,
|
|
52
|
+
apiVersion: 50,
|
|
53
|
+
disableProcessNodeEnv: true,
|
|
54
|
+
dynamicImport: 'allowed',
|
|
55
|
+
enableHmr: true,
|
|
56
|
+
enableLightningWebSecurityTransforms: true,
|
|
57
|
+
enableTemplateExpressions: true,
|
|
58
|
+
forceNamedExports: true,
|
|
59
|
+
strictCSSTokenCollection: true,
|
|
60
|
+
},
|
|
61
|
+
type: 'internal',
|
|
62
|
+
},
|
|
63
|
+
compilerConfigs: [
|
|
35
64
|
{
|
|
36
|
-
code: 'compiled code',
|
|
37
|
-
map: '',
|
|
38
|
-
imports: [],
|
|
39
|
-
diagnostics: [],
|
|
40
65
|
outputConfig: {
|
|
41
66
|
minify: false,
|
|
42
|
-
sourcemap:
|
|
43
|
-
lockerConfig: {},
|
|
44
|
-
env: { NODE_ENV: 'dev' },
|
|
67
|
+
sourcemap: true,
|
|
45
68
|
},
|
|
46
|
-
timings: {},
|
|
47
69
|
},
|
|
48
70
|
],
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
expect(platformCompile).toHaveBeenCalledWith(expect.any(Object));
|
|
56
|
-
expect(result.code).toBe('compiled code');
|
|
57
|
-
expect(result.warnings).toEqual([]);
|
|
71
|
+
});
|
|
72
|
+
expect(result).toEqual({
|
|
73
|
+
code: 'compiled code',
|
|
74
|
+
warnings: [],
|
|
75
|
+
});
|
|
76
|
+
expect(ctx.logger.error).not.toHaveBeenCalledWith(expect.any(String));
|
|
58
77
|
});
|
|
59
|
-
it('should
|
|
78
|
+
it('should handle compile errors', async () => {
|
|
79
|
+
const ctx = {
|
|
80
|
+
config: {
|
|
81
|
+
workspace: Workspace.Internal,
|
|
82
|
+
},
|
|
83
|
+
logger: {
|
|
84
|
+
error: vi.fn(),
|
|
85
|
+
},
|
|
86
|
+
moduleGraph: {},
|
|
87
|
+
};
|
|
88
|
+
const module = {
|
|
89
|
+
getSources: vi.fn().mockResolvedValue({ 'test.js': 'console.log("test");' }),
|
|
90
|
+
};
|
|
91
|
+
const part = 'testPart';
|
|
60
92
|
vi.mocked(platformCompile).mockResolvedValue({
|
|
93
|
+
version: '1.0.0',
|
|
94
|
+
timings: {},
|
|
61
95
|
success: false,
|
|
62
96
|
results: [],
|
|
63
|
-
diagnostics: [],
|
|
64
|
-
|
|
65
|
-
|
|
97
|
+
diagnostics: [{ code: 1010, level: 1, message: 'Error message' }],
|
|
98
|
+
});
|
|
99
|
+
const result = await compile(ctx, { module, part }, mockCompileOptions);
|
|
100
|
+
expect(result).toEqual({
|
|
101
|
+
code: undefined,
|
|
102
|
+
warnings: [
|
|
103
|
+
{
|
|
104
|
+
code: 1010,
|
|
105
|
+
level: 1,
|
|
106
|
+
message: 'Error message',
|
|
107
|
+
},
|
|
108
|
+
],
|
|
66
109
|
});
|
|
67
|
-
|
|
68
|
-
expect(result.code).toBeUndefined();
|
|
110
|
+
expect(ctx.logger.error).toHaveBeenCalledWith(`Failed to compile ${part}. \n\tDiagnostics: [{"code":1010,"level":1,"message":"Error message"}]`);
|
|
69
111
|
});
|
|
70
112
|
});
|
|
71
113
|
//# sourceMappingURL=lexBundler.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexBundler.spec.js","sourceRoot":"","sources":["../../../src/server/bundler/lexBundler.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"lexBundler.spec.js","sourceRoot":"","sources":["../../../src/server/bundler/lexBundler.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { HMR_Data_Outbound, HMR_Data_Inbound } from '@lwc/lwc-dev-server-types';
|
|
2
|
+
import { TransformOptions } from '@lwc/compiler';
|
|
1
3
|
import { DevServerContext } from '../../types/devServer.js';
|
|
2
4
|
import { Connection } from './connection.js';
|
|
3
|
-
import type { HMR_Data } from '@lwc/lwc-dev-server-types';
|
|
4
|
-
import type { TransformOptions } from '@lwc/compiler';
|
|
5
5
|
/**
|
|
6
6
|
* Class representing a client that has connected to the dev server.
|
|
7
7
|
* This class represents a client that is connected and ready to receive hot module updates.
|
|
@@ -11,14 +11,12 @@ import type { TransformOptions } from '@lwc/compiler';
|
|
|
11
11
|
export declare class Client {
|
|
12
12
|
clientId: string;
|
|
13
13
|
url: string;
|
|
14
|
-
activePaths: Map<string, TransformOptions>;
|
|
15
14
|
connection: Connection;
|
|
16
15
|
ctx: DevServerContext;
|
|
16
|
+
compileOptions: Map<string, TransformOptions>;
|
|
17
17
|
constructor(clientId: string, url: string, connection: Connection, ctx: DevServerContext);
|
|
18
18
|
onClose(callback: () => void): void;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
send(data: HMR_Data): void;
|
|
22
|
-
messageCallback(data: HMR_Data): Promise<void>;
|
|
19
|
+
send(data: HMR_Data_Outbound): void;
|
|
20
|
+
messageCallback(data: HMR_Data_Inbound): Promise<void>;
|
|
23
21
|
close(): void;
|
|
24
22
|
}
|
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
import { compile } from '../bundler/lexBundler.js';
|
|
2
|
-
import {
|
|
3
|
-
const ALLOWED_OUTBOUND_DATA_TYPES = new Set([
|
|
4
|
-
'update',
|
|
5
|
-
'module-update',
|
|
6
|
-
'module-delete',
|
|
7
|
-
'error',
|
|
8
|
-
'auth-response',
|
|
9
|
-
]);
|
|
10
|
-
const ALLOWED_INBOUND_DATA_TYPES = new Set(['fetch', 'register']);
|
|
2
|
+
import { decodeModulePath } from '../util/module-util.js';
|
|
11
3
|
/**
|
|
12
4
|
* Class representing a client that has connected to the dev server.
|
|
13
5
|
* This class represents a client that is connected and ready to receive hot module updates.
|
|
@@ -16,41 +8,27 @@ const ALLOWED_INBOUND_DATA_TYPES = new Set(['fetch', 'register']);
|
|
|
16
8
|
*/
|
|
17
9
|
export class Client {
|
|
18
10
|
constructor(clientId, url, connection, ctx) {
|
|
19
|
-
this.activePaths = new Map();
|
|
20
11
|
this.clientId = clientId;
|
|
21
12
|
this.url = url;
|
|
22
13
|
this.connection = connection;
|
|
23
14
|
this.connection.receive(this.messageCallback.bind(this));
|
|
24
15
|
this.ctx = ctx;
|
|
16
|
+
this.compileOptions = new Map();
|
|
25
17
|
}
|
|
26
18
|
onClose(callback) {
|
|
27
19
|
this.connection.onClose(callback);
|
|
28
20
|
}
|
|
29
|
-
removeStalePaths(paths) {
|
|
30
|
-
paths.forEach((p) => this.activePaths.delete(p));
|
|
31
|
-
}
|
|
32
|
-
getCompileOptions(path) {
|
|
33
|
-
return this.activePaths.get(path);
|
|
34
|
-
}
|
|
35
21
|
send(data) {
|
|
36
|
-
if (!ALLOWED_OUTBOUND_DATA_TYPES.has(data.type)) {
|
|
37
|
-
this.ctx.logger.log(LogLevel.debug, `[LWC Dev Server] Blocking unexpected type of data being sent from server to hmr-client '${data.type}'`);
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
22
|
this.connection.send(data);
|
|
41
23
|
}
|
|
42
24
|
async messageCallback(data) {
|
|
43
|
-
if (!ALLOWED_INBOUND_DATA_TYPES.has(data.type)) {
|
|
44
|
-
this.ctx.logger.log(LogLevel.debug, `[LWC Dev Server] Blocking unexpected type of data received from hmr-client '${data.type}'`);
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
25
|
const { ctx: { logger, moduleGraph, config: { lifecycle }, }, } = this;
|
|
48
26
|
switch (data.type) {
|
|
49
27
|
// In coming hot module
|
|
50
28
|
case 'fetch': {
|
|
51
29
|
const { data: { modulePath }, } = data;
|
|
52
|
-
const
|
|
53
|
-
if (!
|
|
30
|
+
const modulePart = this.ctx.moduleGraph.getModulePart(modulePath);
|
|
31
|
+
if (!modulePart) {
|
|
54
32
|
const error = {
|
|
55
33
|
type: 'error',
|
|
56
34
|
data: {
|
|
@@ -58,19 +36,20 @@ export class Client {
|
|
|
58
36
|
},
|
|
59
37
|
};
|
|
60
38
|
this.connection.send(error);
|
|
39
|
+
break;
|
|
61
40
|
}
|
|
62
|
-
|
|
41
|
+
logger.debug(`[LWC Dev Server] Compiling ${modulePath}`);
|
|
42
|
+
const compileOptions = this.compileOptions.get(modulePart.module.id());
|
|
63
43
|
if (!compileOptions) {
|
|
64
|
-
logger.
|
|
65
|
-
|
|
44
|
+
logger.error(`Found no compile option for module path: ${modulePart.module.id()}, check the __lwc_hmr_hot.register() call.`);
|
|
45
|
+
throw new Error(`No Compile Options for module path: ${modulePart.module.id()}`);
|
|
66
46
|
}
|
|
67
|
-
|
|
68
|
-
const result = await compile(this.ctx, modulePath, compileOptions, logger);
|
|
47
|
+
const result = await compile(this.ctx, modulePart, compileOptions);
|
|
69
48
|
if (!result.code) {
|
|
70
|
-
logger.
|
|
49
|
+
logger.error(`Compiling ${modulePath} failed and there are compiler warnings: ${JSON.stringify(result.warnings)}`);
|
|
71
50
|
break;
|
|
72
51
|
}
|
|
73
|
-
logger.
|
|
52
|
+
logger.debug(`[LWC Dev Server] Sending an updated ${modulePath}`);
|
|
74
53
|
this.connection.send({
|
|
75
54
|
type: 'module-update',
|
|
76
55
|
data: [{ modulePath, src: result.code }],
|
|
@@ -82,17 +61,21 @@ export class Client {
|
|
|
82
61
|
break;
|
|
83
62
|
}
|
|
84
63
|
case 'register': {
|
|
85
|
-
const
|
|
86
|
-
for (const { modulePath, compileOptions } of modules) {
|
|
87
|
-
|
|
64
|
+
const moduleParts = [];
|
|
65
|
+
for (const { modulePath, hash, compileOptions } of data.data.modules) {
|
|
66
|
+
const { id, part } = decodeModulePath(modulePath);
|
|
67
|
+
moduleParts.push({ id, part, hash });
|
|
68
|
+
this.compileOptions.set(id, compileOptions);
|
|
88
69
|
}
|
|
89
70
|
// Inform the hmr-client of available updates, this ensures that any local changes
|
|
90
71
|
// that haven't been deployed to the remote app are updated upon client registration.
|
|
91
|
-
const staleModules = moduleGraph.getStaleModules(
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
72
|
+
const staleModules = moduleGraph.getStaleModules(moduleParts);
|
|
73
|
+
if (staleModules.size > 0) {
|
|
74
|
+
this.send({
|
|
75
|
+
type: 'update',
|
|
76
|
+
data: Array.from(staleModules).map((modulePath) => ({ modulePath })),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
96
79
|
break;
|
|
97
80
|
}
|
|
98
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/server/connection/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/server/connection/client.ts"],"names":[],"mappings":"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"}
|