From 85887e3ff56fd2711d02f44b2b4bc5304d1af843 Mon Sep 17 00:00:00 2001 From: rax-it Date: Tue, 4 Jun 2024 14:52:59 -0700 Subject: [PATCH 01/11] chore: first pass --- package.json | 6 +- src/commands/lightning/preview/app.ts | 6 +- src/lwc-dev-server/index.ts | 76 ++++ yarn.lock | 583 +++++++++++++++++++++++--- 4 files changed, 620 insertions(+), 51 deletions(-) create mode 100644 src/lwc-dev-server/index.ts diff --git a/package.json b/package.json index ff4caeda..3576005f 100644 --- a/package.json +++ b/package.json @@ -5,14 +5,16 @@ "author": "Salesforce", "bugs": "https://github.com/forcedotcom/cli/issues", "dependencies": { + "@lwc/lwc-dev-server": "^7.1.0-6.6.4", + "@lwc/sfdc-lwc-compiler": "^7.1.0-6.6.4", + "@lwrjs/api": "0.13.0-alpha.6", "@oclif/core": "^3.26.6", "@salesforce/core": "^7.3.2", "@salesforce/kit": "^3.1.0", "@salesforce/sf-plugins-core": "^9.0.7", - "tar": "^7.1.0", "lwc": "6.6.2", "lwr": "0.13.0-alpha.6", - "@lwrjs/api": "0.13.0-alpha.6" + "tar": "^7.1.0" }, "devDependencies": { "@oclif/plugin-command-snapshot": "^5.1.9", diff --git a/src/commands/lightning/preview/app.ts b/src/commands/lightning/preview/app.ts index b634f98e..8d9ff927 100644 --- a/src/commands/lightning/preview/app.ts +++ b/src/commands/lightning/preview/app.ts @@ -6,7 +6,8 @@ */ import { SfCommand, Flags } from '@salesforce/sf-plugins-core'; -import { Messages } from '@salesforce/core'; +import { Messages, Logger } from '@salesforce/core'; +import { startLWCServer } from '../../../lwc-dev-server/index.js'; Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); const messages = Messages.loadMessages('@salesforce/plugin-lightning-dev', 'lightning.preview.app'); @@ -31,6 +32,9 @@ export default class LightningPreviewApp extends SfCommand { const { flags } = await this.parse(LightningPreviewApp); + const log = await Logger.child(this.ctor.name); + + await startLWCServer(log); const name = flags.name ?? 'world'; this.log(`hello ${name} from /Users/nkruk/git/plugin-lightning-dev/src/commands/lightning/preview/org.ts`); diff --git a/src/lwc-dev-server/index.ts b/src/lwc-dev-server/index.ts new file mode 100644 index 00000000..42fc5aac --- /dev/null +++ b/src/lwc-dev-server/index.ts @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2023, salesforce.com, inc. + * All rights reserved. + * Licensed under the BSD 3-Clause license. + * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause + */ + +import path from 'node:path'; +import process from 'node:process'; +import { LWCServer, LogLevel, ServerConfig, Workspace, startLwcDevServer } from '@lwc/lwc-dev-server'; +import { Logger } from '@salesforce/core'; + +const DEV_SERVER_PORT = 8081; + +/** + * Map sf cli log level to lwc dev server log level + * https://github.com/salesforcecli/cli/wiki/Code-Your-Plugin#logging-levels + * + * @param cliLogLevel + * @returns number + */ +function mapLogLevel(cliLogLevel: number): number { + switch (cliLogLevel) { + case 10: + return LogLevel.verbose; + case 20: + return LogLevel.debug; + case 30: + return LogLevel.info; + case 40: + return LogLevel.warn; + case 50: + return LogLevel.error; + case 60: + return LogLevel.silent; + default: + return LogLevel.error; + } +} + +function createLWCServerConfig(source: string, logger: Logger): ServerConfig { + const rootDir = path.resolve(source, 'force-app/main/default'); + const namespacePaths: string[] = [rootDir]; + + return { + rootDir, + port: DEV_SERVER_PORT, + protocol: 'wss', + host: 'localhost', + paths: namespacePaths, + workspace: Workspace.SfCli, + targets: ['LEX'], // should this be something else? + logLevel: mapLogLevel(logger.getLevel()), + }; +} + +export async function startLWCServer(logger: Logger): Promise { + const config = createLWCServerConfig(process.cwd(), logger); + let lwcDevServer: LWCServer | null = await startLwcDevServer(config); + + const cleanup = (): void => { + if (lwcDevServer) { + lwcDevServer.stopServer(); + lwcDevServer = null; + } + }; + + // normal exit flow + process.on('exit', cleanup); + // when a user presses ctrl+c + process.on('SIGINT', cleanup); + // when a user kills the process + process.on('SIGTERM', cleanup); + + return lwcDevServer; +} diff --git a/yarn.lock b/yarn.lock index 1a1fc656..bbe74732 100644 --- a/yarn.lock +++ b/yarn.lock @@ -721,6 +721,14 @@ "@babel/highlight" "^7.24.2" picocolors "^1.0.0" +"@babel/code-frame@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz#ab88da19344445c3d8889af2216606d3329f3ef2" + integrity sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA== + dependencies: + "@babel/highlight" "^7.24.6" + picocolors "^1.0.0" + "@babel/compat-data@^7.19.1": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.1.tgz#72d647b4ff6a4f82878d184613353af1dd0290f9" @@ -731,6 +739,11 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== +"@babel/compat-data@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz#b3600217688cabb26e25f8e467019e66d71b7ae2" + integrity sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ== + "@babel/core@7.24.4": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" @@ -752,7 +765,7 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/core@^7.1.0", "@babel/core@^7.10.4", "@babel/core@^7.12.3", "@babel/core@^7.21.3": +"@babel/core@7.24.5", "@babel/core@^7.1.0", "@babel/core@^7.10.4", "@babel/core@^7.12.3", "@babel/core@^7.21.3": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.5.tgz#15ab5b98e101972d171aeef92ac70d8d6718f06a" integrity sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA== @@ -794,6 +807,48 @@ json5 "^2.2.1" semver "^6.3.0" +"@babel/core@^7.9.0": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.6.tgz#8650e0e4b03589ebe886c4e4a60398db0a7ec787" + integrity sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.6" + "@babel/generator" "^7.24.6" + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helpers" "^7.24.6" + "@babel/parser" "^7.24.6" + "@babel/template" "^7.24.6" + "@babel/traverse" "^7.24.6" + "@babel/types" "^7.24.6" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/core@~7.22.8": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz#e3d0eed84c049e2a2ae0a64d27b6a37edec385b7" + integrity sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.22.15" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-module-transforms" "^7.22.20" + "@babel/helpers" "^7.22.15" + "@babel/parser" "^7.22.16" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.22.20" + "@babel/types" "^7.22.19" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + "@babel/eslint-parser@^7.21.3": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.24.5.tgz#3b0f7d383a540329a30a6a9937cfc89461d26217" @@ -803,6 +858,15 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.1" +"@babel/eslint-parser@~7.22.7": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz#263f059c476e29ca4972481a17b8b660cb025a34" + integrity sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg== + dependencies: + "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.1" + "@babel/generator@7.21.4": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" @@ -823,6 +887,16 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.22.15", "@babel/generator@^7.24.6", "@babel/generator@^7.9.0": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.24.6.tgz#dfac82a228582a9d30c959fe50ad28951d4737a7" + integrity sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg== + dependencies: + "@babel/types" "^7.24.6" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + "@babel/generator@^7.24.4", "@babel/generator@^7.24.5": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.5.tgz#e5afc068f932f05616b66713e28d0f04e99daeb3" @@ -868,6 +942,17 @@ lru-cache "^5.1.1" semver "^6.3.1" +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz#4a51d681f7680043d38e212715e2a7b1ad29cb51" + integrity sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg== + dependencies: + "@babel/compat-data" "^7.24.6" + "@babel/helper-validator-option" "^7.24.6" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4", "@babel/helper-create-class-features-plugin@^7.24.5": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz#7d19da92c7e0cd8d11c09af2ce1b8e7512a6e723" @@ -908,6 +993,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== +"@babel/helper-environment-visitor@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz#ac7ad5517821641550f6698dd5468f8cef78620d" + integrity sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g== + "@babel/helper-function-name@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" @@ -916,6 +1006,14 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.23.0" +"@babel/helper-function-name@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz#cebdd063386fdb95d511d84b117e51fc68fec0c8" + integrity sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w== + dependencies: + "@babel/template" "^7.24.6" + "@babel/types" "^7.24.6" + "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" @@ -923,6 +1021,13 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-hoist-variables@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz#8a7ece8c26756826b6ffcdd0e3cf65de275af7f9" + integrity sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA== + dependencies: + "@babel/types" "^7.24.6" + "@babel/helper-member-expression-to-functions@^7.23.0", "@babel/helper-member-expression-to-functions@^7.24.5": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz#5981e131d5c7003c7d1fa1ad49e86c9b097ec475" @@ -944,6 +1049,13 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-module-imports@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz#65e54ffceed6a268dc4ce11f0433b82cfff57852" + integrity sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g== + dependencies: + "@babel/types" "^7.24.6" + "@babel/helper-module-transforms@^7.19.0": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz#309b230f04e22c58c6a2c0c0c7e50b216d350c30" @@ -958,6 +1070,17 @@ "@babel/traverse" "^7.19.0" "@babel/types" "^7.19.0" +"@babel/helper-module-transforms@^7.22.20", "@babel/helper-module-transforms@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz#22346ed9df44ce84dee850d7433c5b73fab1fe4e" + integrity sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA== + dependencies: + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-module-imports" "^7.24.6" + "@babel/helper-simple-access" "^7.24.6" + "@babel/helper-split-export-declaration" "^7.24.6" + "@babel/helper-validator-identifier" "^7.24.6" + "@babel/helper-module-transforms@^7.23.3", "@babel/helper-module-transforms@^7.24.5": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz#ea6c5e33f7b262a0ae762fd5986355c45f54a545" @@ -1013,6 +1136,13 @@ dependencies: "@babel/types" "^7.24.5" +"@babel/helper-simple-access@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz#1d6e04d468bba4fc963b4906f6dac6286cfedff1" + integrity sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g== + dependencies: + "@babel/types" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" @@ -1034,6 +1164,13 @@ dependencies: "@babel/types" "^7.24.5" +"@babel/helper-split-export-declaration@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz#e830068f7ba8861c53b7421c284da30ae656d7a3" + integrity sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw== + dependencies: + "@babel/types" "^7.24.6" + "@babel/helper-string-parser@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" @@ -1044,6 +1181,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== +"@babel/helper-string-parser@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz#28583c28b15f2a3339cfafafeaad42f9a0e828df" + integrity sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q== + "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" @@ -1054,6 +1196,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz#918b1a7fa23056603506370089bd990d8720db62" integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA== +"@babel/helper-validator-identifier@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz#08bb6612b11bdec78f3feed3db196da682454a5e" + integrity sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw== + "@babel/helper-validator-option@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" @@ -1064,6 +1211,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== +"@babel/helper-validator-option@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz#59d8e81c40b7d9109ab7e74457393442177f460a" + integrity sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ== + "@babel/helper-wrap-function@^7.22.20": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.5.tgz#335f934c0962e2c1ed1fb9d79e06a56115067c09" @@ -1082,6 +1234,14 @@ "@babel/traverse" "^7.19.0" "@babel/types" "^7.19.0" +"@babel/helpers@^7.22.15", "@babel/helpers@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.6.tgz#cd124245299e494bd4e00edda0e4ea3545c2c176" + integrity sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA== + dependencies: + "@babel/template" "^7.24.6" + "@babel/types" "^7.24.6" + "@babel/helpers@^7.24.4", "@babel/helpers@^7.24.5": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.5.tgz#fedeb87eeafa62b621160402181ad8585a22a40a" @@ -1110,6 +1270,16 @@ js-tokens "^4.0.0" picocolors "^1.0.0" +"@babel/highlight@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz#6d610c1ebd2c6e061cade0153bf69b0590b7b3df" + integrity sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ== + dependencies: + "@babel/helper-validator-identifier" "^7.24.6" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + "@babel/node@^7.22.5": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.23.9.tgz#fc40dc371439f1a45535ebf515232f4f046ef7a9" @@ -1122,7 +1292,7 @@ regenerator-runtime "^0.14.0" v8flags "^3.1.1" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.3", "@babel/parser@^7.24.0", "@babel/parser@^7.24.4", "@babel/parser@^7.24.5", "@babel/parser@~7.24.4": +"@babel/parser@7.24.5", "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.3", "@babel/parser@^7.24.0", "@babel/parser@^7.24.4", "@babel/parser@^7.24.5", "@babel/parser@~7.24.4": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.5.tgz#4a4d5ab4315579e5398a82dcf636ca80c3392790" integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg== @@ -1132,6 +1302,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.22.16", "@babel/parser@^7.24.6", "@babel/parser@^7.9.0": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz#5e030f440c3c6c78d195528c3b688b101a365328" + integrity sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q== + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.5": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz#4c3685eb9cd790bcad2843900fe0250c91ccf895" @@ -1235,6 +1410,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-decorators@7.24.1": + version "7.24.1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.1.tgz#71d9ad06063a6ac5430db126b5df48c70ee885fa" + integrity sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-dynamic-import@^7.0.0-beta.42", "@babel/plugin-syntax-dynamic-import@^7.7.4", "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" @@ -1362,7 +1544,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-async-generator-functions@^7.22.3", "@babel/plugin-transform-async-generator-functions@^7.24.3": +"@babel/plugin-transform-async-generator-functions@7.24.3", "@babel/plugin-transform-async-generator-functions@^7.22.3", "@babel/plugin-transform-async-generator-functions@^7.24.3": version "7.24.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz#8fa7ae481b100768cc9842c8617808c5352b8b89" integrity sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg== @@ -1395,7 +1577,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.5" -"@babel/plugin-transform-class-properties@^7.24.1": +"@babel/plugin-transform-class-properties@7.24.1", "@babel/plugin-transform-class-properties@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz#bcbf1aef6ba6085cfddec9fc8d58871cf011fc29" integrity sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g== @@ -1600,7 +1782,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-object-rest-spread@^7.24.5": +"@babel/plugin-transform-object-rest-spread@7.24.5", "@babel/plugin-transform-object-rest-spread@^7.24.5": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz#f91bbcb092ff957c54b4091c86bda8372f0b10ef" integrity sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA== @@ -1912,7 +2094,7 @@ "@babel/plugin-transform-react-jsx-development" "^7.22.5" "@babel/plugin-transform-react-pure-annotations" "^7.24.1" -"@babel/preset-typescript@^7.21.0", "@babel/preset-typescript@^7.24.1": +"@babel/preset-typescript@7.24.1", "@babel/preset-typescript@^7.21.0", "@babel/preset-typescript@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz#89bdf13a3149a17b3b2a2c9c62547f06db8845ec" integrity sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ== @@ -1972,7 +2154,16 @@ "@babel/parser" "^7.24.0" "@babel/types" "^7.24.0" -"@babel/traverse@7", "@babel/traverse@^7.1.0", "@babel/traverse@^7.23.2", "@babel/traverse@^7.24.1", "@babel/traverse@^7.24.5", "@babel/traverse@~7.24.1": +"@babel/template@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz#048c347b2787a6072b24c723664c8d02b67a44f9" + integrity sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw== + dependencies: + "@babel/code-frame" "^7.24.6" + "@babel/parser" "^7.24.6" + "@babel/types" "^7.24.6" + +"@babel/traverse@7", "@babel/traverse@7.24.5", "@babel/traverse@^7.1.0", "@babel/traverse@^7.23.2", "@babel/traverse@^7.24.1", "@babel/traverse@^7.24.5", "@babel/traverse@~7.24.1": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.5.tgz#972aa0bc45f16983bf64aa1f877b2dd0eea7e6f8" integrity sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA== @@ -2004,7 +2195,23 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.20.7", "@babel/types@^7.21.4", "@babel/types@^7.23.4", "@babel/types@^7.24.0", "@babel/types@^7.24.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@~7.24.0": +"@babel/traverse@^7.22.20", "@babel/traverse@^7.24.6": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.6.tgz#0941ec50cdeaeacad0911eb67ae227a4f8424edc" + integrity sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw== + dependencies: + "@babel/code-frame" "^7.24.6" + "@babel/generator" "^7.24.6" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-function-name" "^7.24.6" + "@babel/helper-hoist-variables" "^7.24.6" + "@babel/helper-split-export-declaration" "^7.24.6" + "@babel/parser" "^7.24.6" + "@babel/types" "^7.24.6" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@7.24.5", "@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.20.7", "@babel/types@^7.21.4", "@babel/types@^7.23.4", "@babel/types@^7.24.0", "@babel/types@^7.24.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@~7.24.0": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.5.tgz#7661930afc638a5383eb0c4aee59b74f38db84d7" integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ== @@ -2022,6 +2229,15 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" +"@babel/types@^7.22.19", "@babel/types@^7.24.6", "@babel/types@^7.9.0": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz#ba4e1f59870c10dc2fa95a274ac4feec23b21912" + integrity sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ== + dependencies: + "@babel/helper-string-parser" "^7.24.6" + "@babel/helper-validator-identifier" "^7.24.6" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -2896,6 +3112,35 @@ methods "^1.1.2" path-to-regexp "^6.1.0" +"@komaci/common-shared@250.0.0": + version "250.0.0" + resolved "https://registry.npmjs.org/@komaci/common-shared/-/common-shared-250.0.0.tgz#02b76fea82d93561b19bec468127992da9792d9c" + integrity sha512-ThWJhyZztjfdkeGx3YAmcv6IqihCmOnlNDRgEWN9CN15vGDPSKU0MA+8PLsNwSqsBY5AZ8AZn/Lxk4/TvCQPVw== + dependencies: + "@babel/core" "^7.9.0" + "@babel/generator" "^7.9.0" + "@babel/parser" "^7.9.0" + "@babel/types" "^7.9.0" + +"@komaci/esm-generator@250.0.0": + version "250.0.0" + resolved "https://registry.npmjs.org/@komaci/esm-generator/-/esm-generator-250.0.0.tgz#b8e1b2f2b304a3e5884dadd1575d2c9a5791cb47" + integrity sha512-y4agfGm5mjcNKvSsAKXCobP4bwnFBXivrMwzWjsH1+x6eJy6Rx/gQrVupd/W3iYckXqwpFS3SF1Sr4XPDJXqUg== + dependencies: + "@babel/core" "^7.9.0" + "@babel/generator" "^7.9.0" + "@babel/types" "^7.9.0" + "@komaci/common-shared" "250.0.0" + "@komaci/static-analyzer" "250.0.0" + +"@komaci/static-analyzer@250.0.0": + version "250.0.0" + resolved "https://registry.npmjs.org/@komaci/static-analyzer/-/static-analyzer-250.0.0.tgz#7f58c03c5e671ba6a7fff34594697a40cf4ea0ff" + integrity sha512-iugdzGQZqoExokFlYu65OTEq6g9fAA+5skqVnQLCgGzaEIki4uMtqwM6e96yizYJ31f7NU56LVyXhCZyVntp4A== + dependencies: + "@babel/types" "^7.9.0" + "@komaci/common-shared" "250.0.0" + "@loadable/babel-plugin@^5.15.3": version "5.16.1" resolved "https://registry.yarnpkg.com/@loadable/babel-plugin/-/babel-plugin-5.16.1.tgz#6d0aa6d4b26c5ae2e1a4469b05d77e0438874d96" @@ -3012,6 +3257,16 @@ "@lwc/shared" "6.6.2" line-column "~1.0.2" +"@lwc/babel-plugin-component@6.6.3": + version "6.6.3" + resolved "https://registry.npmjs.org/@lwc/babel-plugin-component/-/babel-plugin-component-6.6.3.tgz#571b76f157ee9990b54b72a989f690fb934134ef" + integrity sha512-MOG5P8Y//1EJarNZMenurJt+lRWHrZQ4jByCFKWOq2ZGpzGh7J7lyq9pO9keT1KZSLMr0JpkrUPwcnb1Fxgl9A== + dependencies: + "@babel/helper-module-imports" "7.24.3" + "@lwc/errors" "6.6.3" + "@lwc/shared" "6.6.3" + line-column "~1.0.2" + "@lwc/compiler@6.6.2": version "6.6.2" resolved "https://registry.yarnpkg.com/@lwc/compiler/-/compiler-6.6.2.tgz#b1dc45f766cbbcb9b4c0f9cee1fe4e5b68144d9d" @@ -3030,6 +3285,32 @@ "@lwc/style-compiler" "6.6.2" "@lwc/template-compiler" "6.6.2" +"@lwc/compiler@6.6.3": + version "6.6.3" + resolved "https://registry.npmjs.org/@lwc/compiler/-/compiler-6.6.3.tgz#3323ade3f1f36a29244d239ec5ac2055330cab4f" + integrity sha512-vmDBp43VxbJrp5cqHYBfZ5GHTg/23lRBqR+6VLucnnOzqhDfF6VY/gk8Ce3o3gaoNv2xChTcQc8AHOfeaJDlMQ== + dependencies: + "@babel/core" "7.24.4" + "@babel/plugin-transform-async-generator-functions" "7.24.3" + "@babel/plugin-transform-async-to-generator" "7.24.1" + "@babel/plugin-transform-class-properties" "7.24.1" + "@babel/plugin-transform-object-rest-spread" "7.24.5" + "@locker/babel-plugin-transform-unforgeables" "0.20.0" + "@lwc/babel-plugin-component" "6.6.3" + "@lwc/errors" "6.6.3" + "@lwc/shared" "6.6.3" + "@lwc/ssr-compiler" "6.6.3" + "@lwc/style-compiler" "6.6.3" + "@lwc/template-compiler" "6.6.3" + +"@lwc/dev-server-plugin-lex@7.1.0-6.6.4": + version "7.1.0-6.6.4" + resolved "https://registry.npmjs.org/@lwc/dev-server-plugin-lex/-/dev-server-plugin-lex-7.1.0-6.6.4.tgz#1b1930098dc922e48e3469e5a6310e5ca00f6547" + integrity sha512-CVONPz/S6Whz5rgWwdnlnUFU2crB7UdlF8PTNzgqqkJy6XtGcEEB/pTAFmvGxoBiVjXElG1FmUaKGMut0hOaAQ== + dependencies: + "@lwc/errors" "6.6.3" + magic-string "~0.30.10" + "@lwc/engine-core@6.6.2": version "6.6.2" resolved "https://registry.yarnpkg.com/@lwc/engine-core/-/engine-core-6.6.2.tgz#ea4e0215015da24d30a94f5bda06659d1fa19912" @@ -3054,6 +3335,26 @@ resolved "https://registry.yarnpkg.com/@lwc/errors/-/errors-6.6.2.tgz#659716325ed76047118ca379780b071a4c19cc49" integrity sha512-7TQ/Zj1faoJEtqnrio9vtMIUI5V28u4h7MiSeFSlMLCDTW4FlHbfo8OHDO5nw+QMV+G2GDPBhdo9QizoywmQTw== +"@lwc/errors@6.6.3": + version "6.6.3" + resolved "https://registry.npmjs.org/@lwc/errors/-/errors-6.6.3.tgz#6320d33a52b735e6a3e7cf86e5c52d4d21c0e796" + integrity sha512-js5TM8uLbmXuSZQrhK4h+p5HVvyzoP8p5F5lV2ZjcWHIrxp3SmsKoMfabYp1cSiAYJMQcG009sYp6gbrvN6+LQ== + +"@lwc/eslint-plugin-lwc-platform@~4.1.3": + version "4.1.3" + resolved "https://registry.npmjs.org/@lwc/eslint-plugin-lwc-platform/-/eslint-plugin-lwc-platform-4.1.3.tgz#47429acfc6688b7d976389630ec0b880d73d3bb2" + integrity sha512-wH2DSC3A2w1ns1G4Mdngr7deeUMGG9UoaEfXllJB3/KysPi/MxYJYBSXxsIul0ysCv7vtMJ4iMdrdKb6wlR2Ow== + dependencies: + minimatch "~5.1.1" + +"@lwc/eslint-plugin-lwc@~1.8.1": + version "1.8.1" + resolved "https://registry.npmjs.org/@lwc/eslint-plugin-lwc/-/eslint-plugin-lwc-1.8.1.tgz#aa93a7115ae913fb8a4c1ca0667f10043dba06dc" + integrity sha512-xtBvjT2Cxp20Vj/o+b7YeIJkAFXlZow90DoJGjqEyRxPb6pmWSZ3FzcrffSUOacETJey01UiA29rquRftJiH8A== + dependencies: + globals "^13.24.0" + minimatch "^9.0.4" + "@lwc/features@6.6.2": version "6.6.2" resolved "https://registry.yarnpkg.com/@lwc/features/-/features-6.6.2.tgz#e9e3262b6b6ea6c6b18f2e3c130aee0beb995e5d" @@ -3061,6 +3362,16 @@ dependencies: "@lwc/shared" "6.6.2" +"@lwc/lwc-dev-server@^7.1.0-6.6.4": + version "7.1.0-6.6.4" + resolved "https://registry.npmjs.org/@lwc/lwc-dev-server/-/lwc-dev-server-7.1.0-6.6.4.tgz#3ce62af88e11e34b9332320e9148568167d931fe" + integrity sha512-NQUYFdeuQbpWHlqQZYcy2qLSCExT3rF4ONDrrKUjl6GagWJjAaW+QoLRdDqYJcyKwtiuYdygrX/t5kIrAQNUgA== + dependencies: + chalk "~5.3.0" + chokidar "~3.6.0" + commander "~10.0.0" + ws "~8.16.0" + "@lwc/metadata@6.5.3-0": version "6.5.3-0" resolved "https://registry.yarnpkg.com/@lwc/metadata/-/metadata-6.5.3-0.tgz#b4343a784195a14f0b190c3fc7dbc0e4556e6b90" @@ -3073,6 +3384,18 @@ postcss-selector-parser "~6.0.16" postcss-value-parser "~4.2.0" +"@lwc/metadata@7.1.0-6.6.4": + version "7.1.0-6.6.4" + resolved "https://registry.npmjs.org/@lwc/metadata/-/metadata-7.1.0-6.6.4.tgz#cea762765ebd5af3719163783d9ab5bdf503b5dd" + integrity sha512-fIrT6i1cVi8wrKvK5bIUc8WSDTt/afNVSZuQOfaMvsZ6UCAqWV+n9MF9uZtPAr9SqDvvdYZsAJkKiGZKa1qp4A== + dependencies: + "@babel/parser" "~7.24.4" + "@babel/traverse" "~7.24.1" + "@babel/types" "~7.24.0" + postcss "~8.4.38" + postcss-selector-parser "~6.0.16" + postcss-value-parser "~4.2.0" + "@lwc/module-resolver@6.6.2": version "6.6.2" resolved "https://registry.yarnpkg.com/@lwc/module-resolver/-/module-resolver-6.6.2.tgz#168a198d99a262bdc818704d9e0ad29fc9a8779b" @@ -3094,11 +3417,61 @@ resolved "https://registry.yarnpkg.com/@lwc/sfdc-compiler-utils/-/sfdc-compiler-utils-6.5.3-0.tgz#b1f878d4518ccb5277e5899d10c3929dfac7328f" integrity sha512-yCEF3jrzdfUVCWD6Uw9hTC+ihERYKOa/DkI0Rf8aMiqiJpuUralCcQlKfzo0BD1dxlgqDNUx0pO0hY17Evd7/A== +"@lwc/sfdc-compiler-utils@7.1.0-6.6.4": + version "7.1.0-6.6.4" + resolved "https://registry.npmjs.org/@lwc/sfdc-compiler-utils/-/sfdc-compiler-utils-7.1.0-6.6.4.tgz#c291949743a7e8d5d059c880a2aa0e374256012c" + integrity sha512-BxelDvOQOt+JC8ePlCwWaCkgv9N/dVP4zj5Y4EFsEwaOoOMZF26eghow+ZI5ELZRNYZBqYKr0e5I5cEs6AstDQ== + +"@lwc/sfdc-lwc-compiler@^7.1.0-6.6.4": + version "7.1.0-6.6.4" + resolved "https://registry.npmjs.org/@lwc/sfdc-lwc-compiler/-/sfdc-lwc-compiler-7.1.0-6.6.4.tgz#3c60b85f03b85ca93d1d92a33ad918a385aa9dfc" + integrity sha512-BmldYqQiGHCxx83kiCmBNoPLJ2weCVOhktOKLaYyIdjoLBEG2oRurhiJ/etPSFEdjJEDDAfTxTmjNF68mRsFwA== + dependencies: + "@babel/core" "7.24.5" + "@babel/parser" "7.24.5" + "@babel/plugin-syntax-decorators" "7.24.1" + "@babel/preset-typescript" "7.24.1" + "@babel/traverse" "7.24.5" + "@babel/types" "7.24.5" + "@komaci/esm-generator" "250.0.0" + "@lwc/compiler" "6.6.3" + "@lwc/dev-server-plugin-lex" "7.1.0-6.6.4" + "@lwc/errors" "6.6.3" + "@lwc/eslint-plugin-lwc" "~1.8.1" + "@lwc/eslint-plugin-lwc-platform" "~4.1.3" + "@lwc/metadata" "7.1.0-6.6.4" + "@lwc/sfdc-compiler-utils" "7.1.0-6.6.4" + "@lwc/template-compiler" "6.6.3" + "@rollup/plugin-babel" "^6.0.3" + "@rollup/plugin-replace" "^5.0.5" + "@salesforce/eslint-config-lwc" "~3.5.3" + "@salesforce/eslint-plugin-lightning" "~1.0.0" + "@swc/wasm" "1.4.16" + astring "~1.8.6" + doctrine "~3.0.0" + eslint "~8.57.0" + eslint-plugin-import "~2.29.1" + eslint-plugin-jest "~27.9.0" + gray-matter "~4.0.3" + line-column "~1.0.2" + magic-string "~0.30.10" + markdown-it "~14.1.0" + parse5-sax-parser "~6.0.1" + postcss "~8.4.38" + postcss-selector-parser "~6.0.16" + rollup "~3.29.2" + terser "~5.30.4" + "@lwc/shared@6.6.2": version "6.6.2" resolved "https://registry.yarnpkg.com/@lwc/shared/-/shared-6.6.2.tgz#1346649a3e67eabd415873e627fd5450b7943fab" integrity sha512-tXFl0Q9Sqh5XJls1R4SGziaeQfMGWoR2OeZiZijOqbpxaVK0vImrOyqIYcqIyHxlCgJGVoS12FDLwBtv/oBJRg== +"@lwc/shared@6.6.3": + version "6.6.3" + resolved "https://registry.npmjs.org/@lwc/shared/-/shared-6.6.3.tgz#96fd081f166560f8ef6e0a93984757b474860df9" + integrity sha512-IxlPmNjWZrrD22FUELhxxbEfuToZ0vCx0Fj/Zax4XhtcoTA6DRfVoiSBBFtH8IJQp87orMk1YtmQyl6JidscLw== + "@lwc/signals@6.6.2": version "6.6.2" resolved "https://registry.yarnpkg.com/@lwc/signals/-/signals-6.6.2.tgz#5d5f93209472f7541e7fea76187086a0f7044cb0" @@ -3119,6 +3492,21 @@ immer "^10.1.1" meriyah "^4.3.8" +"@lwc/ssr-compiler@6.6.3": + version "6.6.3" + resolved "https://registry.npmjs.org/@lwc/ssr-compiler/-/ssr-compiler-6.6.3.tgz#f230adee1fd2ea442b79c7d3ea440a57efcc86e2" + integrity sha512-Ujv1eWXjrKSczHIgGdKU5GHkp7vsqvVDrz5Ildbt1wWlLhLCnzpdlfR4p6s7/AEyqDiM59iqVy7OC1s9jRuHfw== + dependencies: + "@lwc/metadata" "6.5.3-0" + "@lwc/sfdc-compiler-utils" "6.5.3-0" + "@lwc/style-compiler" "6.6.3" + "@lwc/template-compiler" "6.6.3" + acorn "8.11.3" + astring "^1.8.6" + estree-toolkit "^1.7.3" + immer "^10.1.1" + meriyah "^4.3.8" + "@lwc/style-compiler@6.6.2": version "6.6.2" resolved "https://registry.yarnpkg.com/@lwc/style-compiler/-/style-compiler-6.6.2.tgz#d70c4996f5447d64d79dbee06d61ea6f9f8bcd99" @@ -3129,6 +3517,16 @@ postcss-selector-parser "~6.0.15" postcss-value-parser "~4.2.0" +"@lwc/style-compiler@6.6.3": + version "6.6.3" + resolved "https://registry.npmjs.org/@lwc/style-compiler/-/style-compiler-6.6.3.tgz#1beddef7ed23ddc692330770948de7f708c17b64" + integrity sha512-tROZIHa/1agybFNplw+3GYWbrKnXNbS4X01TjVLQineuO3dHT46oxSazV2NhUk55GzXoFWwyeXN9Jpw43N9ZLg== + dependencies: + "@lwc/shared" "6.6.3" + postcss "~8.4.38" + postcss-selector-parser "~6.0.15" + postcss-value-parser "~4.2.0" + "@lwc/synthetic-shadow@6.6.2": version "6.6.2" resolved "https://registry.yarnpkg.com/@lwc/synthetic-shadow/-/synthetic-shadow-6.6.2.tgz#8dacf4b70a31b8e4660e5a3e1c042a93217a6965" @@ -3145,6 +3543,17 @@ astring "~1.8.6" he "~1.2.0" +"@lwc/template-compiler@6.6.3": + version "6.6.3" + resolved "https://registry.npmjs.org/@lwc/template-compiler/-/template-compiler-6.6.3.tgz#0f5d6410d00b62b5124a5a10139f3796bb61acd8" + integrity sha512-uedCyiInZ1M70/WVniydhti0RXCKGjrvhQZ8V0+Vy5/0FBECmmomMGFq2nsAOnsgCr0kbREpJUrvYPCNmWvJXQ== + dependencies: + "@lwc/errors" "6.6.3" + "@lwc/shared" "6.6.3" + acorn "~8.11.3" + astring "~1.8.6" + he "~1.2.0" + "@lwc/wire-service@6.6.2": version "6.6.2" resolved "https://registry.yarnpkg.com/@lwc/wire-service/-/wire-service-6.6.2.tgz#59a70412cdf8ad773b7f42befc27464cecbddb69" @@ -3980,6 +4389,14 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== +"@rollup/plugin-babel@^6.0.3": + version "6.0.4" + resolved "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz#bd698e351fa9aa9619fcae780aea2a603d98e4c4" + integrity sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@rollup/pluginutils" "^5.0.1" + "@rollup/plugin-replace@^5.0.5": version "5.0.5" resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz#33d5653dce6d03cb24ef98bef7f6d25b57faefdf" @@ -4073,6 +4490,21 @@ typescript "^5.4.3" wireit "^0.14.4" +"@salesforce/eslint-config-lwc@~3.5.3": + version "3.5.3" + resolved "https://registry.npmjs.org/@salesforce/eslint-config-lwc/-/eslint-config-lwc-3.5.3.tgz#dcbc06e05e2d42fd01ac469d5648dd7b1cf056c5" + integrity sha512-bQ3EdqDQadG18a19Aw7VD6iS5YPuQXNPjfvR/bOFzu1DZoctW5lq28gSMueRLoYjBW+dDa2V8gUWQNmj+b0JUQ== + dependencies: + "@babel/core" "~7.22.8" + "@babel/eslint-parser" "~7.22.7" + eslint-restricted-globals "~0.2.0" + semver "^7.5.3" + +"@salesforce/eslint-plugin-lightning@~1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@salesforce/eslint-plugin-lightning/-/eslint-plugin-lightning-1.0.0.tgz#9ecf80527d83394960ef3c358c790cdfde44f578" + integrity sha512-zk0PKXAcHKHepAG2EOSWlkOTxQM0Aw1CT6+MUxJcM42fCDwH/yPPpGkG3CWtRfmVViODGOwU9ywU2wlkAYcvUQ== + "@salesforce/kit@^3.1.0", "@salesforce/kit@^3.1.1": version "3.1.1" resolved "https://registry.yarnpkg.com/@salesforce/kit/-/kit-3.1.1.tgz#d2147a50887214763cdf1c456d306b6da554d928" @@ -4770,6 +5202,11 @@ "@smithy/types" "^3.0.0" tslib "^2.6.2" +"@swc/wasm@1.4.16": + version "1.4.16" + resolved "https://registry.npmjs.org/@swc/wasm/-/wasm-1.4.16.tgz#30fe3514136ccfd6cc49373ff7080c7a41ba9a26" + integrity sha512-Gxtpe4L7u29Asje8Y/1Ev6Fsw9AlztkyiZl6eKgXz3XmwOSVxo1FtC42Za7KEZsNyrRILH0D8hEDgcYRHzfdIA== + "@szmarczak/http-timer@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" @@ -6722,7 +7159,7 @@ chalk@^4, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.0.0, chalk@^5.3.0: +chalk@^5.0.0, chalk@^5.3.0, chalk@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== @@ -6792,7 +7229,7 @@ chokidar@3.5.3, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -chokidar@^3.4.0, chokidar@^3.6.0: +chokidar@^3.4.0, chokidar@^3.6.0, chokidar@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -6999,7 +7436,7 @@ comma-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== -commander@^10.0.0: +commander@^10.0.0, commander@~10.0.0: version "10.0.1" resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== @@ -7642,7 +8079,7 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" -doctrine@^3.0.0: +doctrine@^3.0.0, doctrine@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== @@ -7823,7 +8260,7 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@^4.2.0, entities@^4.5.0: +entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== @@ -8170,7 +8607,7 @@ eslint-plugin-header@^3.1.1: resolved "https://registry.yarnpkg.com/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz#6ce512432d57675265fac47292b50d1eff11acd6" integrity sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg== -eslint-plugin-import@^2.29.1: +eslint-plugin-import@^2.29.1, eslint-plugin-import@~2.29.1: version "2.29.1" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== @@ -8193,7 +8630,7 @@ eslint-plugin-import@^2.29.1: semver "^6.3.1" tsconfig-paths "^3.15.0" -eslint-plugin-jest@^27.2.1: +eslint-plugin-jest@^27.2.1, eslint-plugin-jest@~27.9.0: version "27.9.0" resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz#7c98a33605e1d8b8442ace092b60e9919730000b" integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== @@ -8310,6 +8747,11 @@ eslint-plugin-use-effect-no-deps@^1.1.2: dependencies: requireindex "~1.2.0" +eslint-restricted-globals@~0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.2.0.tgz#7729f326af97bec7a7e56d9f7d9c064b79285c50" + integrity sha512-kwYJALm5KS2QW3Mc1PgObO4V+pTR6RQtRT65L1GQILlEnAhabUQqGAX7/qUjoQR4KZJKehWpBtyDEiDecwmY9A== + eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -8336,7 +8778,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.37.0, eslint@^8.56.0: +eslint@^8.37.0, eslint@^8.56.0, eslint@~8.57.0: version "8.57.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== @@ -9186,6 +9628,13 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" +globals@^13.24.0: + version "13.24.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + globalthis@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" @@ -9267,7 +9716,7 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -gray-matter@^4.0.2: +gray-matter@^4.0.2, gray-matter@~4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== @@ -11255,6 +11704,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +linkify-it@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421" + integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== + dependencies: + uc.micro "^2.0.0" + linkinator@^6.0.4: version "6.0.4" resolved "https://registry.yarnpkg.com/linkinator/-/linkinator-6.0.4.tgz#2a4a9f76732b0f8968abf35ed09d57a3a8be3427" @@ -11551,7 +12007,7 @@ magic-string@^0.25.3: dependencies: sourcemap-codec "^1.4.8" -magic-string@^0.30.3, magic-string@^0.30.9: +magic-string@^0.30.3, magic-string@^0.30.9, magic-string@~0.30.10: version "0.30.10" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== @@ -11607,6 +12063,18 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +markdown-it@~14.1.0: + version "14.1.0" + resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" + integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== + dependencies: + argparse "^2.0.1" + entities "^4.4.0" + linkify-it "^5.0.0" + mdurl "^2.0.0" + punycode.js "^2.3.1" + uc.micro "^2.1.0" + markdown-table@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" @@ -11734,6 +12202,11 @@ mdurl@^1.0.0: resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== +mdurl@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" + integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -11981,6 +12454,13 @@ minimatch@^9.0.1, minimatch@^9.0.3, minimatch@^9.0.4: dependencies: brace-expansion "^2.0.1" +minimatch@~5.1.1: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -12746,7 +13226,7 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== -parse5-sax-parser@^6.0.1: +parse5-sax-parser@^6.0.1, parse5-sax-parser@~6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz#98b4d366b5b266a7cd90b4b58906667af882daba" integrity sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg== @@ -13188,6 +13668,11 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +punycode.js@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" + integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== + punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -13720,6 +14205,13 @@ rollup@^2.78.0: optionalDependencies: fsevents "~2.3.2" +rollup@~3.29.2: + version "3.29.4" + resolved "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" + integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== + optionalDependencies: + fsevents "~2.3.2" + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -13887,7 +14379,7 @@ semver@7.3.8: dependencies: lru-cache "^6.0.0" -semver@>=7.5.2, semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2: +semver@>=7.5.2, semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2: version "7.6.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== @@ -14458,16 +14950,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -14581,14 +15064,7 @@ stringify-entities@^3.0.1: character-entities-legacy "^1.0.0" xtend "^4.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -14810,6 +15286,16 @@ terser@^5.26.0: commander "^2.20.0" source-map-support "~0.5.20" +terser@~5.30.4: + version "5.30.4" + resolved "https://registry.npmjs.org/terser/-/terser-5.30.4.tgz#62b4d16a819424e6317fd5ceffb4ee8dc769803a" + integrity sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -15224,6 +15710,11 @@ typescript@^5.4.3, typescript@^5.4.5, typescript@~5.4.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== +uc.micro@^2.0.0, uc.micro@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" + integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== + uglify-js@^3.1.4: version "3.17.1" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.1.tgz#1258a2a488147a8266b3034499ce6959978ba7f4" @@ -15885,7 +16376,7 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -15903,15 +16394,6 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -15946,6 +16428,11 @@ ws@^8.13.0, ws@^8.16.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea" integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== +ws@~8.16.0: + version "8.16.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" From 3ce5311dc15bc3f3927bdde05834407acdbaeb87 Mon Sep 17 00:00:00 2001 From: rax-it Date: Tue, 4 Jun 2024 15:09:20 -0700 Subject: [PATCH 02/11] chore: first commit --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 78d6bf8b..344919b3 100644 --- a/README.md +++ b/README.md @@ -183,6 +183,4 @@ FLAG DESCRIPTIONS This person can be anyone in the world! ``` -_See code: [src/commands/hello/world.ts](https://github.com/salesforcecli/plugin-lightning-dev/blob/1.0.25/src/commands/hello/world.ts)_ - From b47e06953eaf84ef957f4b56d18c2cd946cc0006 Mon Sep 17 00:00:00 2001 From: rax-it Date: Wed, 5 Jun 2024 16:12:05 -0700 Subject: [PATCH 03/11] fix: use esmock for testing --- .mocharc.json | 2 +- package.json | 5 +- src/commands/lightning/preview/app.ts | 3 + test/commands/lightning/preview/app.test.ts | 75 +++++++++++++++------ yarn.lock | 5 ++ 5 files changed, 66 insertions(+), 24 deletions(-) diff --git a/.mocharc.json b/.mocharc.json index 8311bd3e..c8660720 100644 --- a/.mocharc.json +++ b/.mocharc.json @@ -4,5 +4,5 @@ "recursive": true, "reporter": "spec", "timeout": 600000, - "node-option": ["loader=ts-node/esm"] + "node-option": ["loader=ts-node/esm", "loader=esmock"] } diff --git a/package.json b/package.json index 421faa8a..5e40d2f1 100644 --- a/package.json +++ b/package.json @@ -7,15 +7,15 @@ "dependencies": { "@lwc/lwc-dev-server": "^7.1.0-6.6.4", "@lwc/sfdc-lwc-compiler": "^7.1.0-6.6.4", + "@lwrjs/api": "0.13.0-alpha.12", "@oclif/core": "^3.26.6", "@salesforce/core": "^7.3.9", "@salesforce/kit": "^3.1.2", "@salesforce/lwc-dev-mobile-core": "4.0.0-alpha.1", "@salesforce/sf-plugins-core": "^9.0.14", - "tar": "^7.2.0", "lwc": "6.6.4", "lwr": "0.13.0-alpha.12", - "@lwrjs/api": "0.13.0-alpha.12" + "tar": "^7.2.0" }, "devDependencies": { "@oclif/plugin-command-snapshot": "^5.1.9", @@ -24,6 +24,7 @@ "@salesforce/plugin-command-reference": "^3.0.88", "@types/tar": "^6.1.13", "eslint-plugin-sf-plugin": "^1.18.5", + "esmock": "^2.6.5", "oclif": "^4.11.3", "ts-node": "^10.9.2", "typescript": "^5.4.5" diff --git a/src/commands/lightning/preview/app.ts b/src/commands/lightning/preview/app.ts index bb26e643..b2de6f9b 100644 --- a/src/commands/lightning/preview/app.ts +++ b/src/commands/lightning/preview/app.ts @@ -9,6 +9,7 @@ import { SfCommand, Flags } from '@salesforce/sf-plugins-core'; import { Messages, Logger, Org } from '@salesforce/core'; import { PreviewUtils } from '@salesforce/lwc-dev-mobile-core'; import { OrgUtils } from '../../../shared/orgUtils.js'; +import { startLWCServer } from '../../../lwc-dev-server/index.js'; Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); const messages = Messages.loadMessages('@salesforce/plugin-lightning-dev', 'lightning.preview.app'); @@ -55,6 +56,8 @@ export default class LightningPreviewApp extends SfCommand { const { flags } = await this.parse(LightningPreviewApp); const logger = await Logger.child(this.ctor.name); + await startLWCServer(logger); + if (flags['device-type'] === Platform.desktop) { await this.desktopPreview(logger, flags); } else if (flags['device-type'] === Platform.ios) { diff --git a/test/commands/lightning/preview/app.test.ts b/test/commands/lightning/preview/app.test.ts index 814905d1..b87d87f5 100644 --- a/test/commands/lightning/preview/app.test.ts +++ b/test/commands/lightning/preview/app.test.ts @@ -7,13 +7,10 @@ import { MockTestOrgData, TestContext } from '@salesforce/core/testSetup'; import { expect } from 'chai'; -import { stubSpinner, stubUx } from '@salesforce/sf-plugins-core'; import { Messages } from '@salesforce/core'; -import { PreviewUtils } from '@salesforce/lwc-dev-mobile-core'; import { Config } from '@oclif/core'; -import LightningPreviewApp from '../../../../src/commands/lightning/preview/app.js'; -import { OrgUtils } from '../../../../src/shared/orgUtils.js'; - +import esmock from 'esmock'; +import LightningPreviewAppImport from '../../../../src/commands/lightning/preview/app.js'; Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); describe('lightning preview app', () => { @@ -23,19 +20,22 @@ describe('lightning preview app', () => { const testAppId = '06m8b000002vpFSAAY'; const testServerUrl = 'wss://localhost:1234'; - beforeEach(async () => { - stubUx($$.SANDBOX); - stubSpinner($$.SANDBOX); - await $$.stubAuths(testOrgData); - }); - - afterEach(() => { - $$.restore(); - }); - it('throws when app not found', async () => { try { - $$.SANDBOX.stub(OrgUtils, 'getAppId').resolves(undefined); + const LightningPreviewApp = await esmock( + '../../../../src/commands/lightning/preview/app.js', + { + '../../../../src/lwc-dev-server/index.js': { + startLWCServer: async () => ({ stopServer: () => {} }), + }, + '../../../../src/shared/orgUtils.js': { + OrgUtils: { + getAppId: async () => undefined, + }, + }, + } + ); + await LightningPreviewApp.run(['--name', 'blah', '-o', testOrgData.username]); } catch (err) { expect(err) @@ -46,9 +46,25 @@ describe('lightning preview app', () => { it('throws when cannot determine ldp server url', async () => { try { - $$.SANDBOX.stub(OrgUtils, 'getAppId').resolves(testAppId); - $$.SANDBOX.stub(PreviewUtils, 'generateWebSocketUrlForLocalDevServer').throws( - new Error('Cannot determine LDP url.') + const LightningPreviewApp = await esmock( + '../../../../src/commands/lightning/preview/app.js', + { + '../../../../src/lwc-dev-server/index.js': { + startLWCServer: async () => ({ stopServer: () => {} }), + }, + '../../../../src/shared/orgUtils.js': { + OrgUtils: { + getAppId: async () => testAppId, + }, + }, + '@salesforce/lwc-dev-mobile-core': { + PreviewUtils: { + generateWebSocketUrlForLocalDevServer: () => { + throw new Error('Cannot determine LDP url.'); + }, + }, + }, + } ); await LightningPreviewApp.run(['--name', 'Sales', '-o', testOrgData.username]); } catch (err) { @@ -65,8 +81,25 @@ describe('lightning preview app', () => { }); async function verifyOrgOpen(expectedAppPath: string, appName: string | undefined = undefined): Promise { - $$.SANDBOX.stub(OrgUtils, 'getAppId').resolves(testAppId); - $$.SANDBOX.stub(PreviewUtils, 'generateWebSocketUrlForLocalDevServer').returns(testServerUrl); + const LightningPreviewApp = await esmock( + '../../../../src/commands/lightning/preview/app.js', + { + '../../../../src/lwc-dev-server/index.js': { + startLWCServer: async () => ({ stopServer: () => {} }), + }, + '../../../../src/shared/orgUtils.js': { + OrgUtils: { + getAppId: async () => testAppId, + }, + }, + '@salesforce/lwc-dev-mobile-core': { + PreviewUtils: { + generateWebSocketUrlForLocalDevServer: () => testServerUrl, + }, + }, + } + ); + const runCmdStub = $$.SANDBOX.stub(Config.prototype, 'runCommand').resolves(); if (appName) { await LightningPreviewApp.run(['--name', appName, '-o', testOrgData.username]); diff --git a/yarn.lock b/yarn.lock index 363e1987..975c006c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9214,6 +9214,11 @@ eslint@^8.37.0, eslint@^8.56.0, eslint@~8.57.0: strip-ansi "^6.0.1" text-table "^0.2.0" +esmock@^2.6.5: + version "2.6.5" + resolved "https://registry.npmjs.org/esmock/-/esmock-2.6.5.tgz#5113affd22acfe68c0fc347789e38b13afbf50b2" + integrity sha512-tvFsbtSI9lCuvufbX+UIDn/MoBjTu6UDvQKR8ZmKWHrK3AkioKD2LuTkM75XSngRki3SsBb4uiO58EydQuFCGg== + espree@^9.6.0, espree@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" From 249ad28122a1cb5b97b4f4166abba3159e25a4a3 Mon Sep 17 00:00:00 2001 From: rax-it Date: Wed, 5 Jun 2024 16:16:53 -0700 Subject: [PATCH 04/11] chore: bump lwc-dev-server version --- package.json | 6 +- yarn.lock | 176 ++++++++++----------------------------------------- 2 files changed, 35 insertions(+), 147 deletions(-) diff --git a/package.json b/package.json index 5e40d2f1..719ad359 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "author": "Salesforce", "bugs": "https://github.com/forcedotcom/cli/issues", "dependencies": { - "@lwc/lwc-dev-server": "^7.1.0-6.6.4", - "@lwc/sfdc-lwc-compiler": "^7.1.0-6.6.4", + "@lwc/lwc-dev-server": "^7.1.1-6.6.4", + "@lwc/sfdc-lwc-compiler": "^7.1.1-6.6.4", "@lwrjs/api": "0.13.0-alpha.12", "@oclif/core": "^3.26.6", "@salesforce/core": "^7.3.9", @@ -202,7 +202,7 @@ "output": [] }, "link-check": { - "command": "node -e \"process.exit(process.env.CI ? 0 : 1)\" || linkinator \"**/*.md\" --skip \"CHANGELOG.md|node_modules|test/|confluence.internal.salesforce.com|my.salesforce.com|%s\" --markdown --retry --directory-listing --verbosity error", + "command": "node -e \"process.exit(process.env.CI ? 0 : 1)\" || linkinator \"**/*.md\" --skip \"CHANGELOG.md|node_modules|test/|confluence.internal.salesforce.com|world.ts|my.salesforce.com|%s\" --markdown --retry --directory-listing --verbosity error", "files": [ "./*.md", "./!(CHANGELOG).md", diff --git a/yarn.lock b/yarn.lock index 975c006c..0efa0826 100644 --- a/yarn.lock +++ b/yarn.lock @@ -976,27 +976,6 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz#b3600217688cabb26e25f8e467019e66d71b7ae2" integrity sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ== -"@babel/core@7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" - integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.4" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.4" - "@babel/parser" "^7.24.4" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - "@babel/core@7.24.5", "@babel/core@^7.1.0", "@babel/core@^7.10.4", "@babel/core@^7.12.3", "@babel/core@^7.21.3": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.5.tgz#15ab5b98e101972d171aeef92ac70d8d6718f06a" @@ -1129,7 +1108,7 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/generator@^7.24.4", "@babel/generator@^7.24.5": +"@babel/generator@^7.24.5": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.5.tgz#e5afc068f932f05616b66713e28d0f04e99daeb3" integrity sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA== @@ -1474,7 +1453,7 @@ "@babel/template" "^7.24.6" "@babel/types" "^7.24.6" -"@babel/helpers@^7.24.4", "@babel/helpers@^7.24.5": +"@babel/helpers@^7.24.5": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.5.tgz#fedeb87eeafa62b621160402181ad8585a22a40a" integrity sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q== @@ -1524,7 +1503,7 @@ regenerator-runtime "^0.14.0" v8flags "^3.1.1" -"@babel/parser@7.24.5", "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.3", "@babel/parser@^7.24.0", "@babel/parser@^7.24.4", "@babel/parser@^7.24.5", "@babel/parser@~7.24.4": +"@babel/parser@7.24.5", "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.3", "@babel/parser@^7.24.0", "@babel/parser@^7.24.5", "@babel/parser@~7.24.4": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.5.tgz#4a4d5ab4315579e5398a82dcf636ca80c3392790" integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg== @@ -2377,7 +2356,7 @@ "@babel/parser" "^7.24.6" "@babel/types" "^7.24.6" -"@babel/traverse@7", "@babel/traverse@7.24.5", "@babel/traverse@^7.1.0", "@babel/traverse@^7.23.2", "@babel/traverse@^7.24.1", "@babel/traverse@^7.24.5", "@babel/traverse@~7.24.1": +"@babel/traverse@7", "@babel/traverse@7.24.5", "@babel/traverse@^7.1.0", "@babel/traverse@^7.23.2", "@babel/traverse@^7.24.5", "@babel/traverse@~7.24.1": version "7.24.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.5.tgz#972aa0bc45f16983bf64aa1f877b2dd0eea7e6f8" integrity sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA== @@ -3442,16 +3421,6 @@ resolved "https://registry.yarnpkg.com/@lwc/aria-reflection/-/aria-reflection-6.6.4.tgz#6b4063ba8aec76b5ad0c45b303ea1fd19bb3936b" integrity sha512-cNCASZ6+m55H9BQ2Wo6PSS69YmIx90VrHEGYoVxVZJbDEuIWaSjkfqIO25qyyP4oJlkWnl+fgt/G85AsfyEy9w== -"@lwc/babel-plugin-component@6.6.3": - version "6.6.3" - resolved "https://registry.npmjs.org/@lwc/babel-plugin-component/-/babel-plugin-component-6.6.3.tgz#571b76f157ee9990b54b72a989f690fb934134ef" - integrity sha512-MOG5P8Y//1EJarNZMenurJt+lRWHrZQ4jByCFKWOq2ZGpzGh7J7lyq9pO9keT1KZSLMr0JpkrUPwcnb1Fxgl9A== - dependencies: - "@babel/helper-module-imports" "7.24.3" - "@lwc/errors" "6.6.3" - "@lwc/shared" "6.6.3" - line-column "~1.0.2" - "@lwc/babel-plugin-component@6.6.4": version "6.6.4" resolved "https://registry.yarnpkg.com/@lwc/babel-plugin-component/-/babel-plugin-component-6.6.4.tgz#9ca23fe91a7b3aa98038cf9490feccfc681cda20" @@ -3462,24 +3431,6 @@ "@lwc/shared" "6.6.4" line-column "~1.0.2" -"@lwc/compiler@6.6.3": - version "6.6.3" - resolved "https://registry.npmjs.org/@lwc/compiler/-/compiler-6.6.3.tgz#3323ade3f1f36a29244d239ec5ac2055330cab4f" - integrity sha512-vmDBp43VxbJrp5cqHYBfZ5GHTg/23lRBqR+6VLucnnOzqhDfF6VY/gk8Ce3o3gaoNv2xChTcQc8AHOfeaJDlMQ== - dependencies: - "@babel/core" "7.24.4" - "@babel/plugin-transform-async-generator-functions" "7.24.3" - "@babel/plugin-transform-async-to-generator" "7.24.1" - "@babel/plugin-transform-class-properties" "7.24.1" - "@babel/plugin-transform-object-rest-spread" "7.24.5" - "@locker/babel-plugin-transform-unforgeables" "0.20.0" - "@lwc/babel-plugin-component" "6.6.3" - "@lwc/errors" "6.6.3" - "@lwc/shared" "6.6.3" - "@lwc/ssr-compiler" "6.6.3" - "@lwc/style-compiler" "6.6.3" - "@lwc/template-compiler" "6.6.3" - "@lwc/compiler@6.6.4": version "6.6.4" resolved "https://registry.yarnpkg.com/@lwc/compiler/-/compiler-6.6.4.tgz#0c79f0a0ebfdb5417da8fb1ab4908bbbdfa9c073" @@ -3498,12 +3449,12 @@ "@lwc/style-compiler" "6.6.4" "@lwc/template-compiler" "6.6.4" -"@lwc/dev-server-plugin-lex@7.1.0-6.6.4": - version "7.1.0-6.6.4" - resolved "https://registry.npmjs.org/@lwc/dev-server-plugin-lex/-/dev-server-plugin-lex-7.1.0-6.6.4.tgz#1b1930098dc922e48e3469e5a6310e5ca00f6547" - integrity sha512-CVONPz/S6Whz5rgWwdnlnUFU2crB7UdlF8PTNzgqqkJy6XtGcEEB/pTAFmvGxoBiVjXElG1FmUaKGMut0hOaAQ== +"@lwc/dev-server-plugin-lex@7.1.1-6.6.4": + version "7.1.1-6.6.4" + resolved "https://registry.npmjs.org/@lwc/dev-server-plugin-lex/-/dev-server-plugin-lex-7.1.1-6.6.4.tgz#a60e56aa8fb0ef5f392cdd78a388b95d89e3ac74" + integrity sha512-gzfFYX2EWK1QwYM10kHsTKUnm2mmb+7Y7+ntCeFJtJ5Nlm5dkDjD3xyVwX7maYWxmtBs8clueefCqImYR5I0fQ== dependencies: - "@lwc/errors" "6.6.3" + "@lwc/errors" "6.6.4" magic-string "~0.30.10" "@lwc/engine-core@6.6.4": @@ -3525,11 +3476,6 @@ resolved "https://registry.yarnpkg.com/@lwc/engine-server/-/engine-server-6.6.4.tgz#f5b076e0b7a14c0f702b2a2b8f08ae904e76f8cd" integrity sha512-t1RHE9HADX80ZmNeFKWvQL2Byb6fxt+CxHrgQ9V60nXy8dQY7XJQskRucDB3Azz/fGhxdqmn+KVUxLHqY2DUWg== -"@lwc/errors@6.6.3": - version "6.6.3" - resolved "https://registry.npmjs.org/@lwc/errors/-/errors-6.6.3.tgz#6320d33a52b735e6a3e7cf86e5c52d4d21c0e796" - integrity sha512-js5TM8uLbmXuSZQrhK4h+p5HVvyzoP8p5F5lV2ZjcWHIrxp3SmsKoMfabYp1cSiAYJMQcG009sYp6gbrvN6+LQ== - "@lwc/errors@6.6.4": version "6.6.4" resolved "https://registry.yarnpkg.com/@lwc/errors/-/errors-6.6.4.tgz#870d4097d1e3b106f40c76a35abf57c004820160" @@ -3557,28 +3503,16 @@ dependencies: "@lwc/shared" "6.6.4" -"@lwc/lwc-dev-server@^7.1.0-6.6.4": - version "7.1.0-6.6.4" - resolved "https://registry.npmjs.org/@lwc/lwc-dev-server/-/lwc-dev-server-7.1.0-6.6.4.tgz#3ce62af88e11e34b9332320e9148568167d931fe" - integrity sha512-NQUYFdeuQbpWHlqQZYcy2qLSCExT3rF4ONDrrKUjl6GagWJjAaW+QoLRdDqYJcyKwtiuYdygrX/t5kIrAQNUgA== +"@lwc/lwc-dev-server@^7.1.1-6.6.4": + version "7.1.1-6.6.4" + resolved "https://registry.npmjs.org/@lwc/lwc-dev-server/-/lwc-dev-server-7.1.1-6.6.4.tgz#bd5460c1f2955ee69401573977c5dd4c97dda556" + integrity sha512-yCcuqq04IkrqDq1WC7ZKF8XdY5g2/kexzqB7i2uC3K5CjAfz6Dk02twTdG6/Sfi+XUQt3iTyM31ZF8bKGDLpTg== dependencies: chalk "~5.3.0" chokidar "~3.6.0" commander "~10.0.0" ws "~8.16.0" -"@lwc/metadata@6.5.3-0": - version "6.5.3-0" - resolved "https://registry.yarnpkg.com/@lwc/metadata/-/metadata-6.5.3-0.tgz#b4343a784195a14f0b190c3fc7dbc0e4556e6b90" - integrity sha512-fJL9JJmdw+Dmx1oJhMIN1/1DHcE3V+U7CmQNKIcpndJq2Oksr0CF0gukov1DEin7utHJmoIToVNYJlULZgJI1Q== - dependencies: - "@babel/parser" "~7.24.4" - "@babel/traverse" "~7.24.1" - "@babel/types" "~7.24.0" - postcss "~8.4.38" - postcss-selector-parser "~6.0.16" - postcss-value-parser "~4.2.0" - "@lwc/metadata@7.0.0-6.6.3": version "7.0.0-6.6.3" resolved "https://registry.yarnpkg.com/@lwc/metadata/-/metadata-7.0.0-6.6.3.tgz#7f0f750d3cf70ad65aeac627f279e1242f53c983" @@ -3591,10 +3525,10 @@ postcss-selector-parser "~6.0.16" postcss-value-parser "~4.2.0" -"@lwc/metadata@7.1.0-6.6.4": - version "7.1.0-6.6.4" - resolved "https://registry.npmjs.org/@lwc/metadata/-/metadata-7.1.0-6.6.4.tgz#cea762765ebd5af3719163783d9ab5bdf503b5dd" - integrity sha512-fIrT6i1cVi8wrKvK5bIUc8WSDTt/afNVSZuQOfaMvsZ6UCAqWV+n9MF9uZtPAr9SqDvvdYZsAJkKiGZKa1qp4A== +"@lwc/metadata@7.1.1-6.6.4": + version "7.1.1-6.6.4" + resolved "https://registry.npmjs.org/@lwc/metadata/-/metadata-7.1.1-6.6.4.tgz#b004b8049649f994808ba30401f62e82b6fda342" + integrity sha512-z1gC6d0zJN36P1zUxLKJEJpxCLH83iDxrtNx8kozwG7qf+a5ovgvmSJZJ6Nhe9+/MMVIdZWMsP8B5kKjdqdUjA== dependencies: "@babel/parser" "~7.24.4" "@babel/traverse" "~7.24.1" @@ -3619,25 +3553,20 @@ "@lwc/module-resolver" "6.6.4" "@rollup/pluginutils" "~5.1.0" -"@lwc/sfdc-compiler-utils@6.5.3-0": - version "6.5.3-0" - resolved "https://registry.npmjs.org/@lwc/sfdc-compiler-utils/-/sfdc-compiler-utils-6.5.3-0.tgz#b1f878d4518ccb5277e5899d10c3929dfac7328f" - integrity sha512-yCEF3jrzdfUVCWD6Uw9hTC+ihERYKOa/DkI0Rf8aMiqiJpuUralCcQlKfzo0BD1dxlgqDNUx0pO0hY17Evd7/A== - "@lwc/sfdc-compiler-utils@7.0.0-6.6.3": version "7.0.0-6.6.3" resolved "https://registry.yarnpkg.com/@lwc/sfdc-compiler-utils/-/sfdc-compiler-utils-7.0.0-6.6.3.tgz#c8da1a24a336adc0b14aed49adf44a5b0ce250cf" integrity sha512-IVINH3wGO5XXxoE3TZiS/esz8iziQgJcZBwKtE/7sehdJOR8VtAMg0AeKxyYEEXsBF+m+aus/vDIfEZrEeBVgQ== -"@lwc/sfdc-compiler-utils@7.1.0-6.6.4": - version "7.1.0-6.6.4" - resolved "https://registry.npmjs.org/@lwc/sfdc-compiler-utils/-/sfdc-compiler-utils-7.1.0-6.6.4.tgz#c291949743a7e8d5d059c880a2aa0e374256012c" - integrity sha512-BxelDvOQOt+JC8ePlCwWaCkgv9N/dVP4zj5Y4EFsEwaOoOMZF26eghow+ZI5ELZRNYZBqYKr0e5I5cEs6AstDQ== +"@lwc/sfdc-compiler-utils@7.1.1-6.6.4": + version "7.1.1-6.6.4" + resolved "https://registry.npmjs.org/@lwc/sfdc-compiler-utils/-/sfdc-compiler-utils-7.1.1-6.6.4.tgz#f1f2833e29216ed601bc34d5a075f90a9942aaa4" + integrity sha512-7vOj/wGsCVu6F/WLSf65IZaffe41LWgNE0gP+jvVl1QmfjUaBRdVmPI/1XaRWRgonD9z5pIP/qbgYjS6TC9oYQ== -"@lwc/sfdc-lwc-compiler@^7.1.0-6.6.4": - version "7.1.0-6.6.4" - resolved "https://registry.npmjs.org/@lwc/sfdc-lwc-compiler/-/sfdc-lwc-compiler-7.1.0-6.6.4.tgz#3c60b85f03b85ca93d1d92a33ad918a385aa9dfc" - integrity sha512-BmldYqQiGHCxx83kiCmBNoPLJ2weCVOhktOKLaYyIdjoLBEG2oRurhiJ/etPSFEdjJEDDAfTxTmjNF68mRsFwA== +"@lwc/sfdc-lwc-compiler@^7.1.1-6.6.4": + version "7.1.1-6.6.4" + resolved "https://registry.npmjs.org/@lwc/sfdc-lwc-compiler/-/sfdc-lwc-compiler-7.1.1-6.6.4.tgz#597b6a36e1ada26af1e27f9e3aa970406988c0b8" + integrity sha512-x8e1BjJqo7MxjzYf4wRO4/UNM4xcGx3NwXKMFu1oinoDCsxL6UJiXtzbx7RZk3lthXOFvz0Qm5CjsFIC3NFbZg== dependencies: "@babel/core" "7.24.5" "@babel/parser" "7.24.5" @@ -3646,14 +3575,14 @@ "@babel/traverse" "7.24.5" "@babel/types" "7.24.5" "@komaci/esm-generator" "250.0.0" - "@lwc/compiler" "6.6.3" - "@lwc/dev-server-plugin-lex" "7.1.0-6.6.4" - "@lwc/errors" "6.6.3" + "@lwc/compiler" "6.6.4" + "@lwc/dev-server-plugin-lex" "7.1.1-6.6.4" + "@lwc/errors" "6.6.4" "@lwc/eslint-plugin-lwc" "~1.8.1" "@lwc/eslint-plugin-lwc-platform" "~4.1.3" - "@lwc/metadata" "7.1.0-6.6.4" - "@lwc/sfdc-compiler-utils" "7.1.0-6.6.4" - "@lwc/template-compiler" "6.6.3" + "@lwc/metadata" "7.1.1-6.6.4" + "@lwc/sfdc-compiler-utils" "7.1.1-6.6.4" + "@lwc/template-compiler" "6.6.4" "@rollup/plugin-babel" "^6.0.3" "@rollup/plugin-replace" "^5.0.5" "@salesforce/eslint-config-lwc" "~3.5.3" @@ -3674,11 +3603,6 @@ rollup "~3.29.2" terser "~5.30.4" -"@lwc/shared@6.6.3": - version "6.6.3" - resolved "https://registry.npmjs.org/@lwc/shared/-/shared-6.6.3.tgz#96fd081f166560f8ef6e0a93984757b474860df9" - integrity sha512-IxlPmNjWZrrD22FUELhxxbEfuToZ0vCx0Fj/Zax4XhtcoTA6DRfVoiSBBFtH8IJQp87orMk1YtmQyl6JidscLw== - "@lwc/shared@6.6.4": version "6.6.4" resolved "https://registry.yarnpkg.com/@lwc/shared/-/shared-6.6.4.tgz#e57812bfc433539f9550396b35f528b0da77cb9f" @@ -3689,21 +3613,6 @@ resolved "https://registry.yarnpkg.com/@lwc/signals/-/signals-6.6.4.tgz#12f3c8e4cec1c52ff70b8b8770efd3a2e8e4427e" integrity sha512-TRShmYgdXpVs22WjKHdCkrZKnUKfJr5Ht6f7+dAmqq/Q/WZfG5fX/eKd8R798peFhXfyLJqWBPylpPBSVVmVpg== -"@lwc/ssr-compiler@6.6.3": - version "6.6.3" - resolved "https://registry.npmjs.org/@lwc/ssr-compiler/-/ssr-compiler-6.6.3.tgz#f230adee1fd2ea442b79c7d3ea440a57efcc86e2" - integrity sha512-Ujv1eWXjrKSczHIgGdKU5GHkp7vsqvVDrz5Ildbt1wWlLhLCnzpdlfR4p6s7/AEyqDiM59iqVy7OC1s9jRuHfw== - dependencies: - "@lwc/metadata" "6.5.3-0" - "@lwc/sfdc-compiler-utils" "6.5.3-0" - "@lwc/style-compiler" "6.6.3" - "@lwc/template-compiler" "6.6.3" - acorn "8.11.3" - astring "^1.8.6" - estree-toolkit "^1.7.3" - immer "^10.1.1" - meriyah "^4.3.8" - "@lwc/ssr-compiler@6.6.4": version "6.6.4" resolved "https://registry.yarnpkg.com/@lwc/ssr-compiler/-/ssr-compiler-6.6.4.tgz#b1a4ff0520775eccc90d830cee403523658d9b96" @@ -3719,16 +3628,6 @@ immer "^10.1.1" meriyah "^4.3.8" -"@lwc/style-compiler@6.6.3": - version "6.6.3" - resolved "https://registry.npmjs.org/@lwc/style-compiler/-/style-compiler-6.6.3.tgz#1beddef7ed23ddc692330770948de7f708c17b64" - integrity sha512-tROZIHa/1agybFNplw+3GYWbrKnXNbS4X01TjVLQineuO3dHT46oxSazV2NhUk55GzXoFWwyeXN9Jpw43N9ZLg== - dependencies: - "@lwc/shared" "6.6.3" - postcss "~8.4.38" - postcss-selector-parser "~6.0.15" - postcss-value-parser "~4.2.0" - "@lwc/style-compiler@6.6.4": version "6.6.4" resolved "https://registry.yarnpkg.com/@lwc/style-compiler/-/style-compiler-6.6.4.tgz#ff5920bc0ff5d7f60b7b790b5e141ff60cac058a" @@ -3744,17 +3643,6 @@ resolved "https://registry.yarnpkg.com/@lwc/synthetic-shadow/-/synthetic-shadow-6.6.4.tgz#e9553b0692fe41ec9499e8ea15fb0783d2d35b1b" integrity sha512-GLU7DCrL3Uuy63m+k32MQOBG/8U24SAcpE5pF4GFd84U0hg8m/yOBWhMM0/iOkz8VP9ppjw1VIyMakdAuUX/Xg== -"@lwc/template-compiler@6.6.3": - version "6.6.3" - resolved "https://registry.npmjs.org/@lwc/template-compiler/-/template-compiler-6.6.3.tgz#0f5d6410d00b62b5124a5a10139f3796bb61acd8" - integrity sha512-uedCyiInZ1M70/WVniydhti0RXCKGjrvhQZ8V0+Vy5/0FBECmmomMGFq2nsAOnsgCr0kbREpJUrvYPCNmWvJXQ== - dependencies: - "@lwc/errors" "6.6.3" - "@lwc/shared" "6.6.3" - acorn "~8.11.3" - astring "~1.8.6" - he "~1.2.0" - "@lwc/template-compiler@6.6.4": version "6.6.4" resolved "https://registry.yarnpkg.com/@lwc/template-compiler/-/template-compiler-6.6.4.tgz#be9ca04fd499d226c37052a79a5cbf61112bbff9" @@ -9257,7 +9145,7 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -estree-toolkit@^1.7.3, estree-toolkit@^1.7.5: +estree-toolkit@^1.7.5: version "1.7.5" resolved "https://registry.npmjs.org/estree-toolkit/-/estree-toolkit-1.7.5.tgz#48b5df2bb9dd5daa0c8432ba6aaa7d89e0347b4d" integrity sha512-e26HrVkoOZMKEyNkF107NyJkGNSmOi9ageC4/sR7zR0HcyOw9+U+Nnvuzl4ufbTHmEhvA75yh6C8XnWHomD5sg== From bea501ea7c5eecce03fa3170f305ae7bc7594053 Mon Sep 17 00:00:00 2001 From: rax-it Date: Wed, 5 Jun 2024 17:34:27 -0700 Subject: [PATCH 05/11] chore: adds test --- test/commands/lightning/preview/app.test.ts | 91 ++++++++------------- test/lwc-dev-server/index.test.ts | 36 ++++++++ 2 files changed, 70 insertions(+), 57 deletions(-) create mode 100644 test/lwc-dev-server/index.test.ts diff --git a/test/commands/lightning/preview/app.test.ts b/test/commands/lightning/preview/app.test.ts index b87d87f5..903bbecc 100644 --- a/test/commands/lightning/preview/app.test.ts +++ b/test/commands/lightning/preview/app.test.ts @@ -7,10 +7,14 @@ import { MockTestOrgData, TestContext } from '@salesforce/core/testSetup'; import { expect } from 'chai'; +import { stubSpinner, stubUx } from '@salesforce/sf-plugins-core'; import { Messages } from '@salesforce/core'; +import { PreviewUtils } from '@salesforce/lwc-dev-mobile-core'; import { Config } from '@oclif/core'; import esmock from 'esmock'; -import LightningPreviewAppImport from '../../../../src/commands/lightning/preview/app.js'; +import LightningPreviewApp from '../../../../src/commands/lightning/preview/app.js'; +import { OrgUtils } from '../../../../src/shared/orgUtils.js'; + Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); describe('lightning preview app', () => { @@ -19,24 +23,30 @@ describe('lightning preview app', () => { const testOrgData = new MockTestOrgData(); const testAppId = '06m8b000002vpFSAAY'; const testServerUrl = 'wss://localhost:1234'; + let MockedLightningPreviewApp: typeof LightningPreviewApp; + + beforeEach(async () => { + stubUx($$.SANDBOX); + stubSpinner($$.SANDBOX); + await $$.stubAuths(testOrgData); + MockedLightningPreviewApp = await esmock( + '../../../../src/commands/lightning/preview/app.js', + { + '../../../../src/lwc-dev-server/index.js': { + startLWCServer: async () => ({ stopServer: () => {} }), + }, + } + ); + }); + + afterEach(() => { + $$.restore(); + }); it('throws when app not found', async () => { try { - const LightningPreviewApp = await esmock( - '../../../../src/commands/lightning/preview/app.js', - { - '../../../../src/lwc-dev-server/index.js': { - startLWCServer: async () => ({ stopServer: () => {} }), - }, - '../../../../src/shared/orgUtils.js': { - OrgUtils: { - getAppId: async () => undefined, - }, - }, - } - ); - - await LightningPreviewApp.run(['--name', 'blah', '-o', testOrgData.username]); + $$.SANDBOX.stub(OrgUtils, 'getAppId').resolves(undefined); + await MockedLightningPreviewApp.run(['--name', 'blah', '-o', testOrgData.username]); } catch (err) { expect(err) .to.be.an('error') @@ -46,27 +56,11 @@ describe('lightning preview app', () => { it('throws when cannot determine ldp server url', async () => { try { - const LightningPreviewApp = await esmock( - '../../../../src/commands/lightning/preview/app.js', - { - '../../../../src/lwc-dev-server/index.js': { - startLWCServer: async () => ({ stopServer: () => {} }), - }, - '../../../../src/shared/orgUtils.js': { - OrgUtils: { - getAppId: async () => testAppId, - }, - }, - '@salesforce/lwc-dev-mobile-core': { - PreviewUtils: { - generateWebSocketUrlForLocalDevServer: () => { - throw new Error('Cannot determine LDP url.'); - }, - }, - }, - } + $$.SANDBOX.stub(OrgUtils, 'getAppId').resolves(testAppId); + $$.SANDBOX.stub(PreviewUtils, 'generateWebSocketUrlForLocalDevServer').throws( + new Error('Cannot determine LDP url.') ); - await LightningPreviewApp.run(['--name', 'Sales', '-o', testOrgData.username]); + await MockedLightningPreviewApp.run(['--name', 'Sales', '-o', testOrgData.username]); } catch (err) { expect(err).to.be.an('error').with.property('message', 'Cannot determine LDP url.'); } @@ -81,30 +75,13 @@ describe('lightning preview app', () => { }); async function verifyOrgOpen(expectedAppPath: string, appName: string | undefined = undefined): Promise { - const LightningPreviewApp = await esmock( - '../../../../src/commands/lightning/preview/app.js', - { - '../../../../src/lwc-dev-server/index.js': { - startLWCServer: async () => ({ stopServer: () => {} }), - }, - '../../../../src/shared/orgUtils.js': { - OrgUtils: { - getAppId: async () => testAppId, - }, - }, - '@salesforce/lwc-dev-mobile-core': { - PreviewUtils: { - generateWebSocketUrlForLocalDevServer: () => testServerUrl, - }, - }, - } - ); - + $$.SANDBOX.stub(OrgUtils, 'getAppId').resolves(testAppId); + $$.SANDBOX.stub(PreviewUtils, 'generateWebSocketUrlForLocalDevServer').returns(testServerUrl); const runCmdStub = $$.SANDBOX.stub(Config.prototype, 'runCommand').resolves(); if (appName) { - await LightningPreviewApp.run(['--name', appName, '-o', testOrgData.username]); + await MockedLightningPreviewApp.run(['--name', appName, '-o', testOrgData.username]); } else { - await LightningPreviewApp.run(['-o', testOrgData.username]); + await MockedLightningPreviewApp.run(['-o', testOrgData.username]); } expect(runCmdStub.calledOnce); diff --git a/test/lwc-dev-server/index.test.ts b/test/lwc-dev-server/index.test.ts new file mode 100644 index 00000000..00f9050b --- /dev/null +++ b/test/lwc-dev-server/index.test.ts @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2024, salesforce.com, inc. + * All rights reserved. + * Licensed under the BSD 3-Clause license. + * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause + */ + +import { expect } from 'chai'; +import { Logger } from '@salesforce/core'; +import { LWCServer } from '@lwc/lwc-dev-server'; +import esmock from 'esmock'; +import * as devServer from '../../src/lwc-dev-server/index.js'; + +describe('lwc-dev-server', () => { + const server = { + stopServer: () => {}, + } as LWCServer; + let lwcDevServer: typeof devServer; + + before(async () => { + lwcDevServer = await esmock('../../src/lwc-dev-server/index.js', { + '@lwc/lwc-dev-server': { + startLwcDevServer: async () => server, + }, + }); + }); + + it('exports a startLWCServer function', () => { + expect(lwcDevServer.startLWCServer).to.be.a('function'); + }); + + it('calling startLWCServer returns an LWCServer', async () => { + const s = await lwcDevServer.startLWCServer({ getLevel: () => 10 } as Logger); + expect(s).to.equal(server); + }); +}); From 8fd2324f72ab25135627916103c923df9a9544f0 Mon Sep 17 00:00:00 2001 From: rax-it Date: Fri, 7 Jun 2024 11:12:09 -0700 Subject: [PATCH 06/11] chore: handle sfdx--project config --- src/commands/lightning/preview/app.ts | 2 +- src/lwc-dev-server/index.ts | 35 ++++++++++++++++--- .../lwc-dev-server/__mock__/sfdx-project.json | 3 ++ test/lwc-dev-server/index.test.ts | 12 ++++++- 4 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 test/lwc-dev-server/__mock__/sfdx-project.json diff --git a/src/commands/lightning/preview/app.ts b/src/commands/lightning/preview/app.ts index b2de6f9b..e85ebdc2 100644 --- a/src/commands/lightning/preview/app.ts +++ b/src/commands/lightning/preview/app.ts @@ -56,7 +56,7 @@ export default class LightningPreviewApp extends SfCommand { const { flags } = await this.parse(LightningPreviewApp); const logger = await Logger.child(this.ctor.name); - await startLWCServer(logger); + await startLWCServer(process.cwd(), logger); if (flags['device-type'] === Platform.desktop) { await this.desktopPreview(logger, flags); diff --git a/src/lwc-dev-server/index.ts b/src/lwc-dev-server/index.ts index 42fc5aac..eade77a5 100644 --- a/src/lwc-dev-server/index.ts +++ b/src/lwc-dev-server/index.ts @@ -5,6 +5,7 @@ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ +import { existsSync, lstatSync, readFileSync } from 'node:fs'; import path from 'node:path'; import process from 'node:process'; import { LWCServer, LogLevel, ServerConfig, Workspace, startLwcDevServer } from '@lwc/lwc-dev-server'; @@ -38,9 +39,31 @@ function mapLogLevel(cliLogLevel: number): number { } } -function createLWCServerConfig(source: string, logger: Logger): ServerConfig { - const rootDir = path.resolve(source, 'force-app/main/default'); - const namespacePaths: string[] = [rootDir]; +function createLWCServerConfig(rootDir: string, logger: Logger): ServerConfig { + const sfdxConfig = path.resolve(rootDir, 'sfdx-project.json'); + + if (!existsSync(sfdxConfig) || !lstatSync(sfdxConfig).isFile()) { + throw new Error(`sfdx-project.json not found in ${rootDir}`); + } + + const sfdxConfigJson = readFileSync(sfdxConfig, 'utf-8'); + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const { packageDirectories } = JSON.parse(sfdxConfigJson); + const namespacePaths: string[] = []; + + for (const dir of packageDirectories) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (dir.path) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument + const resolvedDir = path.resolve(rootDir, dir.path, 'main', 'default'); + if (existsSync(resolvedDir) && lstatSync(resolvedDir).isDirectory()) { + logger.debug(`Adding ${resolvedDir} to namespace paths`); + namespacePaths.push(); + } else { + logger.warn(`Skipping ${resolvedDir} because it does not exist or is not a directory`); + } + } + } return { rootDir, @@ -54,12 +77,14 @@ function createLWCServerConfig(source: string, logger: Logger): ServerConfig { }; } -export async function startLWCServer(logger: Logger): Promise { - const config = createLWCServerConfig(process.cwd(), logger); +export async function startLWCServer(rootDir: string, logger: Logger): Promise { + const config = createLWCServerConfig(rootDir, logger); + logger.trace(`Starting LWC Dev Server with config: ${JSON.stringify(config)}`); let lwcDevServer: LWCServer | null = await startLwcDevServer(config); const cleanup = (): void => { if (lwcDevServer) { + logger.trace('Stopping LWC Dev Server'); lwcDevServer.stopServer(); lwcDevServer = null; } diff --git a/test/lwc-dev-server/__mock__/sfdx-project.json b/test/lwc-dev-server/__mock__/sfdx-project.json new file mode 100644 index 00000000..37aed5be --- /dev/null +++ b/test/lwc-dev-server/__mock__/sfdx-project.json @@ -0,0 +1,3 @@ +{ + "packageDirectories": [{}] +} diff --git a/test/lwc-dev-server/index.test.ts b/test/lwc-dev-server/index.test.ts index 00f9050b..146260f8 100644 --- a/test/lwc-dev-server/index.test.ts +++ b/test/lwc-dev-server/index.test.ts @@ -5,11 +5,21 @@ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; import { expect } from 'chai'; import { Logger } from '@salesforce/core'; import { LWCServer } from '@lwc/lwc-dev-server'; import esmock from 'esmock'; import * as devServer from '../../src/lwc-dev-server/index.js'; +// eslint-disable-next-line no-underscore-dangle +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const logger = { + debug: () => {}, + warn: () => {}, + trace: () => {}, + getLevel: () => 10, +} as Logger; describe('lwc-dev-server', () => { const server = { @@ -30,7 +40,7 @@ describe('lwc-dev-server', () => { }); it('calling startLWCServer returns an LWCServer', async () => { - const s = await lwcDevServer.startLWCServer({ getLevel: () => 10 } as Logger); + const s = await lwcDevServer.startLWCServer(path.resolve(__dirname, './__mock__'), logger); expect(s).to.equal(server); }); }); From 63417d187e2ac17155b7053c8d4192b183987aa5 Mon Sep 17 00:00:00 2001 From: rax-it Date: Fri, 7 Jun 2024 16:44:30 -0700 Subject: [PATCH 07/11] chore: address feedback --- src/lwc-dev-server/index.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/lwc-dev-server/index.ts b/src/lwc-dev-server/index.ts index eade77a5..cbfe472f 100644 --- a/src/lwc-dev-server/index.ts +++ b/src/lwc-dev-server/index.ts @@ -90,12 +90,11 @@ export async function startLWCServer(rootDir: string, logger: Logger): Promise process.on(signal, cleanup)); return lwcDevServer; } From 5a8332b4521b69c9864a2d3aaf69bb30ad29db83 Mon Sep 17 00:00:00 2001 From: rax-it Date: Tue, 11 Jun 2024 13:36:26 -0700 Subject: [PATCH 08/11] chore: merge base branch --- src/commands/lightning/preview/app.ts | 5 +++-- test/commands/lightning/preview/app.test.ts | 21 ++++++++++++------- .../{__mock__ => __mocks__}/sfdx-project.json | 0 test/lwc-dev-server/index.test.ts | 2 +- yarn.lock | 18 ++++++++-------- 5 files changed, 27 insertions(+), 19 deletions(-) rename test/lwc-dev-server/{__mock__ => __mocks__}/sfdx-project.json (100%) diff --git a/src/commands/lightning/preview/app.ts b/src/commands/lightning/preview/app.ts index ff1480b7..1e6e4deb 100644 --- a/src/commands/lightning/preview/app.ts +++ b/src/commands/lightning/preview/app.ts @@ -142,8 +142,6 @@ export default class LightningPreviewApp extends SfCommand { const { flags } = await this.parse(LightningPreviewApp); const logger = await Logger.child(this.ctor.name); - await startLWCServer(process.cwd(), logger); - const appName = flags['name']; const platform = flags['device-type']; const targetOrg = flags['target-org']; @@ -202,6 +200,8 @@ export default class LightningPreviewApp extends SfCommand { const launchArguments = PreviewUtils.generateDesktopPreviewLaunchArguments(ldpServerUrl, appId, targetOrg); + await startLWCServer(process.cwd(), logger ? logger : await Logger.child(this.ctor.name)); + await this.config.runCommand('org:open', launchArguments); } @@ -279,6 +279,7 @@ export default class LightningPreviewApp extends SfCommand { } } + await startLWCServer(process.cwd(), logger ? logger : await Logger.child(this.ctor.name)); // 7. Launch the native app for previewing (launchMobileApp will show its own spinner) // eslint-disable-next-line camelcase appConfig.launch_arguments = PreviewUtils.generateMobileAppPreviewLaunchArguments(ldpServerUrl, appName, appId); diff --git a/test/commands/lightning/preview/app.test.ts b/test/commands/lightning/preview/app.test.ts index 8f1158b8..73cb96a8 100644 --- a/test/commands/lightning/preview/app.test.ts +++ b/test/commands/lightning/preview/app.test.ts @@ -202,7 +202,10 @@ describe('lightning preview app', () => { const expectedCertFilePath = '/path/to/cert.pem'; $$.SANDBOX.stub(PreviewUtils, 'generateSelfSignedCert').returns(expectedCertFilePath); - const waitForUserToInstallCertStub = $$.SANDBOX.stub(LightningPreviewApp, 'waitForUserToInstallCert').resolves(); + const waitForUserToInstallCertStub = $$.SANDBOX.stub( + MockedLightningPreviewApp, + 'waitForUserToInstallCert' + ).resolves(); $$.SANDBOX.stub(PreviewUtils, 'verifyMobileAppInstalled').resolves(true); $$.SANDBOX.stub(PreviewUtils, 'launchMobileApp').resolves(); @@ -235,10 +238,10 @@ describe('lightning preview app', () => { const expectedCertFilePath = '/path/to/cert.pem'; $$.SANDBOX.stub(PreviewUtils, 'generateSelfSignedCert').returns(expectedCertFilePath); - $$.SANDBOX.stub(LightningPreviewApp, 'waitForUserToInstallCert').resolves(); + $$.SANDBOX.stub(MockedLightningPreviewApp, 'waitForUserToInstallCert').resolves(); const verifyMobileAppInstalledStub = $$.SANDBOX.stub(PreviewUtils, 'verifyMobileAppInstalled').resolves(false); - $$.SANDBOX.stub(LightningPreviewApp.prototype, 'confirm').resolves(false); + $$.SANDBOX.stub(MockedLightningPreviewApp.prototype, 'confirm').resolves(false); await verifyMobileThrowsWhenUserDeclinesToInstallApp(Platform.ios, verifyMobileAppInstalledStub); await verifyMobileThrowsWhenUserDeclinesToInstallApp(Platform.android, verifyMobileAppInstalledStub); @@ -260,10 +263,10 @@ describe('lightning preview app', () => { const expectedCertFilePath = '/path/to/cert.pem'; $$.SANDBOX.stub(PreviewUtils, 'generateSelfSignedCert').returns(expectedCertFilePath); - $$.SANDBOX.stub(LightningPreviewApp, 'waitForUserToInstallCert').resolves(); + $$.SANDBOX.stub(MockedLightningPreviewApp, 'waitForUserToInstallCert').resolves(); $$.SANDBOX.stub(PreviewUtils, 'verifyMobileAppInstalled').resolves(false); - $$.SANDBOX.stub(LightningPreviewApp.prototype, 'confirm').resolves(true); + $$.SANDBOX.stub(MockedLightningPreviewApp.prototype, 'confirm').resolves(true); const iosBundlePath = '/path/to/bundle.zip'; const androidBundlePath = '/path/to/bundle.apk'; @@ -381,9 +384,13 @@ describe('lightning preview app', () => { const expectedAppConfig = platform === Platform.ios ? iOSSalesforceAppPreviewConfig : androidSalesforceAppPreviewConfig; // eslint-disable-next-line camelcase - expectedAppConfig.launch_arguments = PreviewUtils.generateMobileAppPreviewLaunchArguments(expectedLdpServerUrl); + expectedAppConfig.launch_arguments = PreviewUtils.generateMobileAppPreviewLaunchArguments( + expectedLdpServerUrl, + 'Sales', + testAppId + ); - await LightningPreviewApp.run(['-n', 'Sales', '-o', testOrgData.username, '-t', platform]); + await MockedLightningPreviewApp.run(['-n', 'Sales', '-o', testOrgData.username, '-t', platform]); expect(downloadStub.calledOnce).to.be.true; if (platform === Platform.ios) { diff --git a/test/lwc-dev-server/__mock__/sfdx-project.json b/test/lwc-dev-server/__mocks__/sfdx-project.json similarity index 100% rename from test/lwc-dev-server/__mock__/sfdx-project.json rename to test/lwc-dev-server/__mocks__/sfdx-project.json diff --git a/test/lwc-dev-server/index.test.ts b/test/lwc-dev-server/index.test.ts index 146260f8..40efd188 100644 --- a/test/lwc-dev-server/index.test.ts +++ b/test/lwc-dev-server/index.test.ts @@ -40,7 +40,7 @@ describe('lwc-dev-server', () => { }); it('calling startLWCServer returns an LWCServer', async () => { - const s = await lwcDevServer.startLWCServer(path.resolve(__dirname, './__mock__'), logger); + const s = await lwcDevServer.startLWCServer(path.resolve(__dirname, './__mocks__'), logger); expect(s).to.equal(server); }); }); diff --git a/yarn.lock b/yarn.lock index 7b0bf65f..455cd7ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1121,16 +1121,16 @@ resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz#08bb6612b11bdec78f3feed3db196da682454a5e" integrity sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw== +"@babel/helper-validator-option@^7.23.5", "@babel/helper-validator-option@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6" + integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw== + "@babel/helper-validator-option@^7.24.6": version "7.24.6" resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz#59d8e81c40b7d9109ab7e74457393442177f460a" integrity sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ== -"@babel/helper-validator-option@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6" - integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw== - "@babel/helper-wrap-function@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz#52d893af7e42edca7c6d2c6764549826336aae1f" @@ -1338,7 +1338,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@7", "@babel/plugin-syntax-jsx@^7.24.7": +"@babel/plugin-syntax-jsx@7", "@babel/plugin-syntax-jsx@^7.24.1", "@babel/plugin-syntax-jsx@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== @@ -1623,7 +1623,7 @@ "@babel/helper-module-transforms" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-modules-commonjs@^7.24.7": +"@babel/plugin-transform-modules-commonjs@^7.24.1", "@babel/plugin-transform-modules-commonjs@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz#9fd5f7fdadee9085886b183f1ad13d1ab260f4ab" integrity sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ== @@ -1861,7 +1861,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-typescript@^7.24.7": +"@babel/plugin-transform-typescript@^7.24.1", "@babel/plugin-transform-typescript@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz#b006b3e0094bf0813d505e0c5485679eeaf4a881" integrity sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw== @@ -2138,7 +2138,7 @@ "@babel/helper-validator-identifier" "^7.24.5" to-fast-properties "^2.0.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.20.7", "@babel/types@^7.21.4", "@babel/types@^7.24.0", "@babel/types@^7.24.5", "@babel/types@^7.24.7", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@~7.24.0": +"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.20.7", "@babel/types@^7.21.4", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.24.5", "@babel/types@^7.24.7", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@~7.24.0": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2" integrity sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q== From 8e26a21aa1be7b48fb7be57ae5a6acd1aeee6d2e Mon Sep 17 00:00:00 2001 From: rax-it Date: Tue, 11 Jun 2024 13:59:10 -0700 Subject: [PATCH 09/11] test: e2e --- src/lwc-dev-server/index.ts | 8 ++-- .../main/default/lwc/dummy/dummy.html | 1 + .../force-app/main/default/lwc/dummy/dummy.js | 1 + .../__mocks__/sfdx-project.json | 6 ++- test/lwc-dev-server/index.e2e.test.ts | 45 +++++++++++++++++++ 5 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 test/lwc-dev-server/__mocks__/force-app/main/default/lwc/dummy/dummy.html create mode 100644 test/lwc-dev-server/__mocks__/force-app/main/default/lwc/dummy/dummy.js create mode 100644 test/lwc-dev-server/index.e2e.test.ts diff --git a/src/lwc-dev-server/index.ts b/src/lwc-dev-server/index.ts index cbfe472f..9d1d69f9 100644 --- a/src/lwc-dev-server/index.ts +++ b/src/lwc-dev-server/index.ts @@ -58,7 +58,7 @@ function createLWCServerConfig(rootDir: string, logger: Logger): ServerConfig { const resolvedDir = path.resolve(rootDir, dir.path, 'main', 'default'); if (existsSync(resolvedDir) && lstatSync(resolvedDir).isDirectory()) { logger.debug(`Adding ${resolvedDir} to namespace paths`); - namespacePaths.push(); + namespacePaths.push(resolvedDir); } else { logger.warn(`Skipping ${resolvedDir} because it does not exist or is not a directory`); } @@ -92,9 +92,9 @@ export async function startLWCServer(rootDir: string, logger: Logger): Promise process.on(signal, cleanup)); + 'SIGINT', // when a user presses ctrl+c + 'SIGTERM', // when a user kills the process + ].forEach((signal) => process.on(signal, cleanup)); return lwcDevServer; } diff --git a/test/lwc-dev-server/__mocks__/force-app/main/default/lwc/dummy/dummy.html b/test/lwc-dev-server/__mocks__/force-app/main/default/lwc/dummy/dummy.html new file mode 100644 index 00000000..6ab1ad78 --- /dev/null +++ b/test/lwc-dev-server/__mocks__/force-app/main/default/lwc/dummy/dummy.html @@ -0,0 +1 @@ +// Intentionally blank file. diff --git a/test/lwc-dev-server/__mocks__/force-app/main/default/lwc/dummy/dummy.js b/test/lwc-dev-server/__mocks__/force-app/main/default/lwc/dummy/dummy.js new file mode 100644 index 00000000..6ab1ad78 --- /dev/null +++ b/test/lwc-dev-server/__mocks__/force-app/main/default/lwc/dummy/dummy.js @@ -0,0 +1 @@ +// Intentionally blank file. diff --git a/test/lwc-dev-server/__mocks__/sfdx-project.json b/test/lwc-dev-server/__mocks__/sfdx-project.json index 37aed5be..151a4904 100644 --- a/test/lwc-dev-server/__mocks__/sfdx-project.json +++ b/test/lwc-dev-server/__mocks__/sfdx-project.json @@ -1,3 +1,7 @@ { - "packageDirectories": [{}] + "packageDirectories": [ + { + "path": "force-app" + } + ] } diff --git a/test/lwc-dev-server/index.e2e.test.ts b/test/lwc-dev-server/index.e2e.test.ts new file mode 100644 index 00000000..7d188515 --- /dev/null +++ b/test/lwc-dev-server/index.e2e.test.ts @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2024, salesforce.com, inc. + * All rights reserved. + * Licensed under the BSD 3-Clause license. + * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause + */ + +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { expect } from 'chai'; +import sinon from 'sinon'; +import { Logger } from '@salesforce/core'; +import { TestContext } from '@salesforce/core/testSetup'; +import { LWCServer } from '@lwc/lwc-dev-server'; +import * as devServer from '../../src/lwc-dev-server/index.js'; +// eslint-disable-next-line no-underscore-dangle +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const logger = { + debug: () => {}, + warn: () => {}, + trace: () => {}, + getLevel: () => 10, +} as Logger; + +describe('lwc-dev-server e2e', () => { + const $$ = new TestContext(); + let spy: sinon.SinonSpy; + + beforeEach(() => { + spy = $$.SANDBOX.stub(process, 'exit'); + }); + + afterEach(() => { + $$.restore(); + $$.SANDBOX.resetHistory(); + }); + + it('e2e', async () => { + const server = await devServer.startLWCServer(path.resolve(__dirname, './__mocks__'), logger); + + expect(server).to.be.an.instanceOf(LWCServer); + server.stopServer(); + expect(spy.calledWith(0)).to.be.true; + }); +}); From 008ef58431b90aac3b228feeb4d4349a44717fdd Mon Sep 17 00:00:00 2001 From: rax-it Date: Tue, 11 Jun 2024 14:00:15 -0700 Subject: [PATCH 10/11] chore: rename spy --- test/lwc-dev-server/index.e2e.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/lwc-dev-server/index.e2e.test.ts b/test/lwc-dev-server/index.e2e.test.ts index 7d188515..b8b5d0b4 100644 --- a/test/lwc-dev-server/index.e2e.test.ts +++ b/test/lwc-dev-server/index.e2e.test.ts @@ -24,10 +24,10 @@ const logger = { describe('lwc-dev-server e2e', () => { const $$ = new TestContext(); - let spy: sinon.SinonSpy; + let processExitSpy: sinon.SinonSpy; beforeEach(() => { - spy = $$.SANDBOX.stub(process, 'exit'); + processExitSpy = $$.SANDBOX.stub(process, 'exit'); }); afterEach(() => { @@ -40,6 +40,6 @@ describe('lwc-dev-server e2e', () => { expect(server).to.be.an.instanceOf(LWCServer); server.stopServer(); - expect(spy.calledWith(0)).to.be.true; + expect(processExitSpy.calledWith(0)).to.be.true; }); }); From 908f99f0a01b1bf6c8f203e6b0b777fab447c704 Mon Sep 17 00:00:00 2001 From: rax-it Date: Tue, 11 Jun 2024 14:03:28 -0700 Subject: [PATCH 11/11] chore: add comments --- src/commands/lightning/preview/app.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/commands/lightning/preview/app.ts b/src/commands/lightning/preview/app.ts index 1e6e4deb..1f88ff45 100644 --- a/src/commands/lightning/preview/app.ts +++ b/src/commands/lightning/preview/app.ts @@ -200,6 +200,7 @@ export default class LightningPreviewApp extends SfCommand { const launchArguments = PreviewUtils.generateDesktopPreviewLaunchArguments(ldpServerUrl, appId, targetOrg); + // Start the LWC Dev Server await startLWCServer(process.cwd(), logger ? logger : await Logger.child(this.ctor.name)); await this.config.runCommand('org:open', launchArguments); @@ -279,6 +280,7 @@ export default class LightningPreviewApp extends SfCommand { } } + // Start the LWC Dev Server await startLWCServer(process.cwd(), logger ? logger : await Logger.child(this.ctor.name)); // 7. Launch the native app for previewing (launchMobileApp will show its own spinner) // eslint-disable-next-line camelcase