@lwc/lwc-dev-server 7.1.0-6.6.4 → 7.1.2-6.6.6

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 (57) hide show
  1. package/dist/cli/commands/devServer.d.ts +0 -2
  2. package/dist/cli/commands/devServer.js +5 -7
  3. package/dist/cli/commands/devServer.js.map +1 -1
  4. package/dist/index.d.ts +4 -2
  5. package/dist/index.js +2 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/labels.d.ts +3 -0
  8. package/dist/labels.js +4 -0
  9. package/dist/labels.js.map +1 -0
  10. package/dist/server/bundler/lexBundler.d.ts +2 -2
  11. package/dist/server/bundler/lexBundler.js +12 -12
  12. package/dist/server/bundler/lexBundler.js.map +1 -1
  13. package/dist/server/connection/client.d.ts +46 -0
  14. package/dist/server/connection/client.js +160 -0
  15. package/dist/server/connection/client.js.map +1 -0
  16. package/dist/server/connection/connection.d.ts +16 -0
  17. package/dist/server/connection/connection.js +46 -0
  18. package/dist/server/connection/connection.js.map +1 -0
  19. package/dist/server/connection/web-socket-server.d.ts +3 -0
  20. package/dist/server/connection/web-socket-server.js +39 -0
  21. package/dist/server/connection/web-socket-server.js.map +1 -0
  22. package/dist/server/index.d.ts +35 -14
  23. package/dist/server/index.js +112 -72
  24. package/dist/server/index.js.map +1 -1
  25. package/dist/server/moduleGraph/index.d.ts +21 -7
  26. package/dist/server/moduleGraph/index.js +62 -12
  27. package/dist/server/moduleGraph/index.js.map +1 -1
  28. package/dist/server/moduleGraph/workspaceScanner/fileReader.d.ts +2 -1
  29. package/dist/server/moduleGraph/workspaceScanner/fileReader.js +8 -1
  30. package/dist/server/moduleGraph/workspaceScanner/fileReader.js.map +1 -1
  31. package/dist/server/moduleGraph/workspaceScanner/index.d.ts +2 -2
  32. package/dist/server/moduleGraph/workspaceScanner/index.js +4 -4
  33. package/dist/server/moduleGraph/workspaceScanner/index.js.map +1 -1
  34. package/dist/server/moduleGraph/workspaceScanner/mrt.d.ts +1 -1
  35. package/dist/server/moduleGraph/workspaceScanner/mrt.js +2 -2
  36. package/dist/server/moduleGraph/workspaceScanner/mrt.js.map +1 -1
  37. package/dist/server/moduleGraph/workspaceScanner/scanner.d.ts +11 -6
  38. package/dist/server/moduleGraph/workspaceScanner/scanner.js +3 -2
  39. package/dist/server/moduleGraph/workspaceScanner/scanner.js.map +1 -1
  40. package/dist/server/util/fileUtil.d.ts +10 -0
  41. package/dist/server/util/fileUtil.js +25 -1
  42. package/dist/server/util/fileUtil.js.map +1 -1
  43. package/dist/server/watcher/index.js +7 -1
  44. package/dist/server/watcher/index.js.map +1 -1
  45. package/dist/types/devServer.d.ts +4 -3
  46. package/dist/types/devServer.js +7 -1
  47. package/dist/types/devServer.js.map +1 -1
  48. package/dist/types/serverConfig.d.ts +7 -0
  49. package/dist/types/serverConfig.js +1 -0
  50. package/dist/types/serverConfig.js.map +1 -1
  51. package/package.json +4 -4
  52. package/dist/server/connection/clientConnection.d.ts +0 -19
  53. package/dist/server/connection/clientConnection.js +0 -30
  54. package/dist/server/connection/clientConnection.js.map +0 -1
  55. package/dist/server/connection/index.d.ts +0 -28
  56. package/dist/server/connection/index.js +0 -73
  57. package/dist/server/connection/index.js.map +0 -1
@@ -1,4 +1,2 @@
1
1
  import { Command } from 'commander';
2
- import type { ServerConfig, DevServer } from '../../types/index.js';
3
- export declare function startDevServer(config: ServerConfig): DevServer | undefined;
4
2
  export declare function createDevServer(): Command;
@@ -1,12 +1,9 @@
1
1
  import { existsSync, readFileSync, lstatSync } from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { Command, Option, InvalidArgumentError } from 'commander';
4
- import { LogLevel } from '../../types/index.js';
5
- import { LWCServer } from '../../server/index.js';
4
+ import { LogLevel, MAX_CLIENT_COUNT } from '../../types/index.js';
5
+ import { startLwcDevServer } from '../../server/index.js';
6
6
  import ConsoleLogger from '../../server/consoleLogger.js';
7
- export function startDevServer(config) {
8
- return new LWCServer(config);
9
- }
10
7
  function getTargetOption() {
11
8
  return new Option('-t, --target <target>', '[string] configured target for deployment')
12
9
  .choices(['lex', 'mrt', 'mobile'])
@@ -31,7 +28,7 @@ function parseNumArg(value) {
31
28
  return parsedValue;
32
29
  }
33
30
  const consoleLogger = new ConsoleLogger(LogLevel.info);
34
- function normalizeConfig({ config, port, target, logLevel, workspace, }) {
31
+ function normalizeConfig({ config, port, target, logLevel, workspace, maxClientCount = MAX_CLIENT_COUNT, }) {
35
32
  let rootDir = process.cwd();
36
33
  const configFile = path.resolve(rootDir, config);
37
34
  const modulePaths = [];
@@ -66,6 +63,7 @@ function normalizeConfig({ config, port, target, logLevel, workspace, }) {
66
63
  targets: [target],
67
64
  workspace,
68
65
  logLevel,
66
+ maxClientCount,
69
67
  };
70
68
  if (parsedConfig.https) {
71
69
  normalizedConfig.https = parseHttpsConfig(parsedConfig.https, path.dirname(configFile));
@@ -109,7 +107,7 @@ export function createDevServer() {
109
107
  logLevel: LogLevel[logLevel],
110
108
  workspace,
111
109
  });
112
- startDevServer(serverConfig);
110
+ startLwcDevServer(serverConfig);
113
111
  });
114
112
  }
115
113
  //# sourceMappingURL=devServer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"devServer.js","sourceRoot":"","sources":["../../../src/cli/commands/devServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devServer.js","sourceRoot":"","sources":["../../../src/cli/commands/devServer.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
- export { LWCServer } from './server/index.js';
2
- export type { DevServer, ServerConfig } from './types/index.js';
1
+ export { startLwcDevServer } from './server/index.js';
2
+ export type { LWCServer } from './server/index.js';
3
+ export type { ServerConfig } from './types/index.js';
4
+ export { LogLevel, Workspace } from './types/serverConfig.js';
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
- export { LWCServer } from './server/index.js';
1
+ export { startLwcDevServer } from './server/index.js';
2
+ export { LogLevel, Workspace } from './types/serverConfig.js';
2
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const UNRECOGNIZED_MESSAGE_TYPE = "[LWC Dev Server] Receivied unrecognized message from hmr-client, ignoring it and closing socket";
2
+ declare const IGNORING_PREINIT_RESPONSES = "[LWC Dev Server] Ignoring pre-initialization messages sent from hmr-client and closing socket";
3
+ export { UNRECOGNIZED_MESSAGE_TYPE, IGNORING_PREINIT_RESPONSES };
package/dist/labels.js ADDED
@@ -0,0 +1,4 @@
1
+ const UNRECOGNIZED_MESSAGE_TYPE = '[LWC Dev Server] Receivied unrecognized message from hmr-client, ignoring it and closing socket';
2
+ const IGNORING_PREINIT_RESPONSES = '[LWC Dev Server] Ignoring pre-initialization messages sent from hmr-client and closing socket';
3
+ export { UNRECOGNIZED_MESSAGE_TYPE, IGNORING_PREINIT_RESPONSES };
4
+ //# sourceMappingURL=labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labels.js","sourceRoot":"","sources":["../src/labels.ts"],"names":[],"mappings":"AAAA,MAAM,yBAAyB,GAC3B,iGAAiG,CAAC;AACtG,MAAM,0BAA0B,GAC5B,+FAA+F,CAAC;AACpG,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
- import { type DevServer } from '../../types/index.js';
1
+ import { type DevServerContext, Logger } from '../../types/index.js';
2
2
  import type { TransformOptions } from '@lwc/compiler';
3
- export declare function compile(devServer: DevServer, modulePath: string, options: TransformOptions): Promise<{
3
+ export declare function compile(ctx: DevServerContext, modulePath: string, options: TransformOptions, logger: Logger): Promise<{
4
4
  code: string | undefined;
5
5
  warnings: string[];
6
6
  }>;
@@ -1,23 +1,24 @@
1
- import fs from 'node:fs';
2
1
  import path from 'node:path';
3
2
  import { compile as platformCompile } from '@lwc/sfdc-lwc-compiler';
4
3
  import { Workspace, LogLevel } from '../../types/index.js';
4
+ import { readModule } from '../util/fileUtil.js';
5
5
  /**
6
6
  * Fetch files and source related to the modulePath that is being hot loaded.
7
- * @param {DevServer} devServer DevServer object for stateful information
7
+ * @param {DevServerContext} ctx DevServer object for stateful information
8
8
  * @param {string} name Name of the component being compiled
9
9
  * @param {string} namespace The namespace of the component
10
10
  * @param {string} modulePath The formatted path for the file being compiled.
11
11
  * @returns
12
12
  */
13
- function getBundleFiles(devServer, name, namespace, modulePath) {
13
+ function getBundleFiles(ctx, name, namespace, modulePath) {
14
14
  const moduleDir = `${namespace}/${name}`;
15
- const moduleFilePath = devServer.moduleGraph.getFileByModulePath(modulePath);
15
+ const moduleFilePath = ctx.moduleGraph.getFileByModulePath(modulePath);
16
16
  const fileEntry = path.relative(moduleDir, modulePath);
17
- const src = fs.readFileSync(moduleFilePath, 'utf8');
17
+ // It can be assumed that the module file exists and the source can be read
18
+ const src = readModule(moduleFilePath);
18
19
  return { [fileEntry]: src };
19
20
  }
20
- function transformOptionsToPlatformCompileConfig(devServer, transformOptions, modulePath) {
21
+ function transformOptionsToPlatformCompileConfig(ctx, transformOptions, modulePath) {
21
22
  const { enableDynamicComponents, enableLightningWebSecurityTransforms, experimentalComplexExpressions, apiVersion, name, namespace, experimentalDynamicComponent, outputConfig, } = transformOptions;
22
23
  const options = {
23
24
  // variable options
@@ -34,8 +35,7 @@ function transformOptionsToPlatformCompileConfig(devServer, transformOptions, mo
34
35
  enableHmr: true,
35
36
  };
36
37
  const getBundleType = () => {
37
- if (devServer.config?.workspace === Workspace.Internal ||
38
- devServer.config?.workspace === Workspace.Mrt) {
38
+ if (ctx.config.workspace === Workspace.Internal || ctx.config.workspace === Workspace.Mrt) {
39
39
  return 'internal';
40
40
  }
41
41
  return 'platform';
@@ -44,7 +44,7 @@ function transformOptionsToPlatformCompileConfig(devServer, transformOptions, mo
44
44
  type: getBundleType(),
45
45
  name: name,
46
46
  namespace: namespace ?? 'c',
47
- files: getBundleFiles(devServer, name, namespace ?? '', modulePath),
47
+ files: getBundleFiles(ctx, name, namespace ?? '', modulePath),
48
48
  options,
49
49
  };
50
50
  const compilerConfigs = [
@@ -58,11 +58,11 @@ function transformOptionsToPlatformCompileConfig(devServer, transformOptions, mo
58
58
  compilerConfigs,
59
59
  };
60
60
  }
61
- export async function compile(devServer, modulePath, options) {
62
- const compileConfig = transformOptionsToPlatformCompileConfig(devServer, options, modulePath);
61
+ export async function compile(ctx, modulePath, options, logger) {
62
+ const compileConfig = transformOptionsToPlatformCompileConfig(ctx, options, modulePath);
63
63
  const result = await platformCompile(compileConfig);
64
64
  if (!result.success) {
65
- devServer.logger?.log(LogLevel.error, `Failed to compile ${modulePath}. Diagnostics: ${JSON.stringify(result.diagnostics)}`);
65
+ logger.log(LogLevel.error, `Failed to compile ${modulePath}. \n\tDiagnostics: ${JSON.stringify(result.diagnostics)}`);
66
66
  return { code: undefined, warnings: [result.diagnostics.toString()] };
67
67
  }
68
68
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"lexBundler.js","sourceRoot":"","sources":["../../../src/server/bundler/lexBundler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lexBundler.js","sourceRoot":"","sources":["../../../src/server/bundler/lexBundler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import * as Websocket from 'ws';
2
+ import { DevServerContext } from '../../types/devServer.js';
3
+ import { Connection } from './connection.js';
4
+ import type { ClientTarget, HMR_Data, HMR_Data_Update } from '@lwc/lwc-dev-server-types';
5
+ import type { TransformOptions } from '@lwc/compiler';
6
+ /**
7
+ * Class representing a client that has connected to the dev server.
8
+ * This class represents a client that is connected and ready to receive hot module updates.
9
+ * After the hmr-client is connected, all communication between itself and lwc-dev-server are handled
10
+ * by this class.
11
+ */
12
+ export declare class Client {
13
+ clientId: string;
14
+ url: string;
15
+ target: ClientTarget;
16
+ activePaths: Map<string, TransformOptions>;
17
+ connection: Connection;
18
+ ctx: DevServerContext;
19
+ constructor(clientId: string, url: string, target: ClientTarget, connection: Connection, ctx: DevServerContext);
20
+ addActivePaths(paths: {
21
+ modulePath: string;
22
+ compileOptions: TransformOptions;
23
+ }[]): void;
24
+ removeStalePaths(paths: string[]): void;
25
+ getCompileOptions(path: string): TransformOptions | undefined;
26
+ send(data: HMR_Data): void;
27
+ messageCallback(data: HMR_Data): Promise<void>;
28
+ close(): void;
29
+ }
30
+ /**
31
+ * Class to manage all connected clients.
32
+ * This serves as a manager of clients with routines to broadcast updates, reset clients.
33
+ */
34
+ export declare class ClientPool {
35
+ socketToClientMap: Map<Websocket.WebSocket, Client>;
36
+ clientToSocketMap: Map<Client, Websocket.WebSocket>;
37
+ addClient(ws: Websocket.WebSocket, client: Client): void;
38
+ removeClient(client: Client): void;
39
+ /**
40
+ * Broad case to all clients of an available module update.
41
+ * @param message
42
+ */
43
+ sendModuleUpdateBroadcast(message: HMR_Data_Update): void;
44
+ reset(): void;
45
+ size(): number;
46
+ }
@@ -0,0 +1,160 @@
1
+ import path from 'node:path';
2
+ import { compile } from '../bundler/lexBundler.js';
3
+ import { LogLevel } from '../../types/serverConfig.js';
4
+ const ALLOWED_OUTBOUND_DATA_TYPES = new Set([
5
+ 'update',
6
+ 'module-update',
7
+ 'module-delete',
8
+ 'error',
9
+ ]);
10
+ const ALLOWED_INBOUND_DATA_TYPES = new Set(['fetch', 'register']);
11
+ // [TODO W-15890472] const SUPPORTED_FETCH_EXTENSIONS = new Set(['.html', '.css']);
12
+ const SUPPORTED_FETCH_EXTENSIONS = new Set(['.html']);
13
+ /**
14
+ * Class representing a client that has connected to the dev server.
15
+ * This class represents a client that is connected and ready to receive hot module updates.
16
+ * After the hmr-client is connected, all communication between itself and lwc-dev-server are handled
17
+ * by this class.
18
+ */
19
+ export class Client {
20
+ constructor(clientId, url, target, connection, ctx) {
21
+ this.activePaths = new Map();
22
+ this.clientId = clientId;
23
+ this.url = url;
24
+ this.target = target;
25
+ this.connection = connection;
26
+ this.connection.receive(this.messageCallback.bind(this));
27
+ this.ctx = ctx;
28
+ }
29
+ addActivePaths(paths) {
30
+ paths.forEach(({ modulePath, compileOptions }) => {
31
+ const existing = this.activePaths.get(modulePath);
32
+ if (!existing) {
33
+ this.activePaths.set(modulePath, compileOptions);
34
+ }
35
+ });
36
+ }
37
+ removeStalePaths(paths) {
38
+ paths.forEach((p) => this.activePaths.delete(p));
39
+ }
40
+ getCompileOptions(path) {
41
+ return this.activePaths.get(path);
42
+ }
43
+ send(data) {
44
+ if (!ALLOWED_OUTBOUND_DATA_TYPES.has(data.type)) {
45
+ this.ctx.logger.log(LogLevel.debug, `[LWC Dev Server] Blocking unexpected type of data being sent from server to hmr-client '${data.type}'`);
46
+ return;
47
+ }
48
+ this.connection.send(data);
49
+ }
50
+ async messageCallback(data) {
51
+ if (!ALLOWED_INBOUND_DATA_TYPES.has(data.type)) {
52
+ this.ctx.logger.log(LogLevel.debug, `[LWC Dev Server] Blocking unexpected type of data received from hmr-client '${data.type}'`);
53
+ return;
54
+ }
55
+ const { ctx: { logger, moduleGraph }, } = this;
56
+ switch (data.type) {
57
+ // In coming hot module
58
+ case 'fetch': {
59
+ const { data: { modulePath }, } = data;
60
+ const moduleFilePath = moduleGraph.getFileByModulePath(modulePath);
61
+ if (!moduleFilePath) {
62
+ const error = {
63
+ type: 'error',
64
+ data: {
65
+ message: `Fetch of ${modulePath} failed as it does not exist in dev server workspace`,
66
+ },
67
+ };
68
+ this.connection.send(error);
69
+ }
70
+ switch (this.target) {
71
+ case 'LEX': {
72
+ const compileOptions = this.getCompileOptions(modulePath);
73
+ if (!compileOptions) {
74
+ logger.log(LogLevel.debug, `Found no compile option for module path: ${modulePath}, check the __lwc_hmr_hot.register() call.`);
75
+ break;
76
+ }
77
+ logger.log(LogLevel.debug, `[LWC Dev Server] Compiling ${modulePath}`);
78
+ const result = await compile(this.ctx, modulePath, compileOptions, logger);
79
+ if (!result.code) {
80
+ logger.log(LogLevel.error, `Compiling ${moduleFilePath} failed and there are compiler warnings: ${JSON.stringify(result.warnings)}`);
81
+ break;
82
+ }
83
+ logger.log(LogLevel.debug, `[LWC Dev Server] Sending an updated ${modulePath}`);
84
+ this.connection.send({
85
+ type: 'module-update',
86
+ data: [{ modulePath, src: result.code }],
87
+ });
88
+ break;
89
+ }
90
+ default:
91
+ logger.log(LogLevel.verbose, `Client target ${this.target} not supported currently.`);
92
+ break;
93
+ }
94
+ break;
95
+ }
96
+ case 'register': {
97
+ const moduleRegistration = data;
98
+ const staleModules = moduleGraph.registerActivePaths(moduleRegistration);
99
+ this.addActivePaths(moduleRegistration.data.modules.map(({ modulePath, compileOptions, hash: _hash }) => {
100
+ return { modulePath, compileOptions };
101
+ }));
102
+ const availableUpdates = {
103
+ type: 'update',
104
+ data: staleModules
105
+ // This is a hack until we add support for javascript hot module reloading
106
+ .filter((modulePath) => SUPPORTED_FETCH_EXTENSIONS.has(path.extname(modulePath)))
107
+ .map((modulePath) => {
108
+ return { modulePath };
109
+ }),
110
+ };
111
+ this.send(availableUpdates);
112
+ break;
113
+ }
114
+ }
115
+ }
116
+ close() {
117
+ this.connection.close();
118
+ }
119
+ }
120
+ /**
121
+ * Class to manage all connected clients.
122
+ * This serves as a manager of clients with routines to broadcast updates, reset clients.
123
+ */
124
+ export class ClientPool {
125
+ constructor() {
126
+ this.socketToClientMap = new Map();
127
+ this.clientToSocketMap = new Map();
128
+ }
129
+ addClient(ws, client) {
130
+ this.socketToClientMap.set(ws, client);
131
+ this.clientToSocketMap.set(client, ws);
132
+ }
133
+ removeClient(client) {
134
+ const socket = this.clientToSocketMap.get(client);
135
+ if (socket) {
136
+ this.socketToClientMap.delete(socket);
137
+ this.clientToSocketMap.delete(client);
138
+ }
139
+ }
140
+ /**
141
+ * Broad case to all clients of an available module update.
142
+ * @param message
143
+ */
144
+ sendModuleUpdateBroadcast(message) {
145
+ for (const client of this.clientToSocketMap.keys()) {
146
+ client.send(message);
147
+ }
148
+ }
149
+ reset() {
150
+ for (const client of this.clientToSocketMap.keys()) {
151
+ client.close();
152
+ }
153
+ this.socketToClientMap.clear();
154
+ this.clientToSocketMap.clear();
155
+ }
156
+ size() {
157
+ return this.clientToSocketMap.size;
158
+ }
159
+ }
160
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/server/connection/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import * as Websocket from 'ws';
2
+ import { type Logger } from '../../types/index.js';
3
+ import type { HMR_Data } from '@lwc/lwc-dev-server-types';
4
+ /**
5
+ * This class represents a WebSocket connection.
6
+ * It provides methods to marshal and unmarshal data between hmr-client and dev server.
7
+ */
8
+ export declare class Connection {
9
+ socket: Websocket.WebSocket;
10
+ logger: Logger;
11
+ constructor(socket: Websocket.WebSocket, logger: Logger);
12
+ close(): void;
13
+ isReady(): boolean;
14
+ send(data: HMR_Data): void;
15
+ receive(callback: (data: HMR_Data) => void): void;
16
+ }
@@ -0,0 +1,46 @@
1
+ /*
2
+ * Copyright (c) 2018, salesforce.com, inc.
3
+ * All rights reserved.
4
+ * SPDX-License-Identifier: MIT
5
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
6
+ */
7
+ import { LogLevel } from '../../types/index.js';
8
+ import { UNRECOGNIZED_MESSAGE_TYPE } from '../../labels.js';
9
+ /**
10
+ * This class represents a WebSocket connection.
11
+ * It provides methods to marshal and unmarshal data between hmr-client and dev server.
12
+ */
13
+ export class Connection {
14
+ constructor(socket, logger) {
15
+ this.socket = socket;
16
+ this.logger = logger;
17
+ }
18
+ close() {
19
+ this.socket.close();
20
+ }
21
+ isReady() {
22
+ return this.socket.readyState === this.socket.OPEN;
23
+ }
24
+ send(data) {
25
+ if (this.isReady()) {
26
+ this.socket.send(JSON.stringify(data));
27
+ }
28
+ }
29
+ receive(callback) {
30
+ if (!this.isReady()) {
31
+ this.logger.log(LogLevel.debug, 'Connection not ready to receive data from server.');
32
+ return;
33
+ }
34
+ this.socket.addEventListener('message', ({ data }) => {
35
+ if (typeof data === 'string') {
36
+ const payload = JSON.parse(data);
37
+ callback(payload);
38
+ }
39
+ else {
40
+ this.logger.log(LogLevel.error, UNRECOGNIZED_MESSAGE_TYPE);
41
+ this.socket.close();
42
+ }
43
+ });
44
+ }
45
+ }
46
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/server/connection/connection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,EAAe,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAG5D;;;GAGG;AACH,MAAM,OAAO,UAAU;IAGnB,YAAY,MAA2B,EAAE,MAAc;QACnD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,KAAK;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,OAAO;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,IAAc;QACf,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,CAAC;IACL,CAAC;IAED,OAAO,CAAC,QAAkC;QACtC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,mDAAmD,CAAC,CAAC;YACrF,OAAO;QACX,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,EAA0B,EAAE,EAAE;YACzE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,QAAQ,CAAC,OAAmB,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;gBAC3D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"}
@@ -0,0 +1,3 @@
1
+ import { WebSocketServer } from 'ws';
2
+ import { Logger, ServerConfig } from '../../types/index.js';
3
+ export declare function startWebSocketServer({ port, https: httpsConfig }: ServerConfig, logger: Logger): WebSocketServer;
@@ -0,0 +1,39 @@
1
+ /*
2
+ * Copyright (c) 2018, salesforce.com, inc.
3
+ * All rights reserved.
4
+ * SPDX-License-Identifier: MIT
5
+ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
6
+ */
7
+ import * as http from 'http';
8
+ import * as https from 'https';
9
+ import { URL } from 'node:url';
10
+ import { WebSocketServer } from 'ws';
11
+ import { LogLevel } from '../../types/index.js';
12
+ function requestHandler(req, res) {
13
+ // the second arg could really be anything, we're just interested in searchParams
14
+ // also req.url can never be undefined, it's just bad typing
15
+ const url = new URL(req.url, 'http://localhost');
16
+ const redirectUrl = url.searchParams.get('redirectUrl');
17
+ if (redirectUrl) {
18
+ res.statusCode = 302;
19
+ res.setHeader('Location', redirectUrl);
20
+ return res.end();
21
+ }
22
+ res.writeHead(200, { 'Content-Type': 'text/html' });
23
+ res.end(`Visit https://&lt;salesforce-url&gt;?0.aura.mode=devpreview`);
24
+ }
25
+ export function startWebSocketServer({ port, https: httpsConfig }, logger) {
26
+ const httpServer = httpsConfig ? https.createServer(httpsConfig) : http.createServer();
27
+ httpServer.on('request', requestHandler);
28
+ try {
29
+ const wss = new WebSocketServer({ server: httpServer });
30
+ httpServer.listen(port);
31
+ logger.log(LogLevel.info, `[LWC Dev Server] LWC Dev Server started at port:${port}`);
32
+ return wss;
33
+ }
34
+ catch (e) {
35
+ logger.log(LogLevel.error, `[LWC Dev Server] Failed to start a WebSocket server with the following error: ${e}`);
36
+ process.exit(1);
37
+ }
38
+ }
39
+ //# sourceMappingURL=web-socket-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-socket-server.js","sourceRoot":"","sources":["../../../src/server/connection/web-socket-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAwB,MAAM,sBAAsB,CAAC;AAEtE,SAAS,cAAc,CAAC,GAAyB,EAAE,GAAwB;IACvE,iFAAiF;IACjF,4DAA4D;IAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAI,EAAE,kBAAkB,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACxD,IAAI,WAAW,EAAE,CAAC;QACd,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;QACrB,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACvC,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;IACD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;IACpD,GAAG,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAChC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAgB,EAC1C,MAAc;IAEd,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;IACvF,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACzC,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACxD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,mDAAmD,IAAI,EAAE,CAAC,CAAC;QACrF,OAAO,GAAG,CAAC;IACf,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,MAAM,CAAC,GAAG,CACN,QAAQ,CAAC,KAAK,EACd,iFAAiF,CAAC,EAAE,CACvF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
@@ -1,18 +1,39 @@
1
1
  import { FSWatcher } from 'chokidar';
2
- import { type DevServer, type Logger, type ServerConfig } from '../types/index.js';
3
- import { Connection } from './connection/index.js';
4
- import { ModuleGraph } from './moduleGraph/index.js';
5
- import ClientConnection from './connection/clientConnection.js';
6
- import type { HMR_Data } from '@lwc/lwc-dev-server-types';
7
- export declare class LWCServer implements DevServer {
8
- logger: Logger;
2
+ import * as Websocket from 'ws';
3
+ import { DevServerContext, type Logger, type ServerConfig } from '../types/index.js';
4
+ import { ClientPool } from './connection/client.js';
5
+ import type { WebSocketServer } from 'ws';
6
+ /**
7
+ * This class represents the central place where the LWC dev server coordination occurs.
8
+ *
9
+ * ModuleGraph -> Is responsible for discovering modules and tracking changes to them
10
+ * Connection -> An authenticated connection between hmr-client and dev server
11
+ * Client -> A stateful object that tracks a hmr-client connected to the dev server
12
+ *
13
+ * This class also manages resources that will need clean up, like the file watcher, WebSockets.
14
+ */
15
+ export declare class LWCServer {
9
16
  watcher: FSWatcher;
10
- config: ServerConfig;
11
- connection: Connection;
12
- moduleGraph: ModuleGraph;
13
- clients: ClientConnection[];
14
- constructor(config: ServerConfig);
17
+ clientPool: ClientPool;
18
+ wss: WebSocketServer;
19
+ context: DevServerContext;
20
+ constructor(config: ServerConfig, wss: WebSocketServer, logger: Logger);
21
+ /**
22
+ * Initialize the WebSocketServer by adding message handlers for connections lifecycle events.
23
+ */
24
+ init(): void;
15
25
  stopServer(): void;
16
- changeHandler(filePath: string): void;
17
- messageCallback(data: HMR_Data): void;
26
+ moduleUpdateHandler(modulePath: string): void;
27
+ /**
28
+ * A one time message handler for new clients.
29
+ * This method is responsible for authenticating the client connection and once authenticated,
30
+ * the communication is handed over to the Client object.
31
+ */
32
+ newClientMessageCallback({ data: rawData, target: socket }: Websocket.MessageEvent): void;
33
+ clientCloseHandler({ target: socket }: Websocket.ErrorEvent | Websocket.CloseEvent): void;
18
34
  }
35
+ /**
36
+ * Initialize an LWC Dev Server with the specified server configuration.
37
+ * @returns Returns an initialized LWC dev server.
38
+ */
39
+ export declare function startLwcDevServer(config: ServerConfig): Promise<LWCServer>;