diff --git a/.github/workflows/create-github-release.yml b/.github/workflows/create-github-release.yml index 21b416cd..633279df 100644 --- a/.github/workflows/create-github-release.yml +++ b/.github/workflows/create-github-release.yml @@ -8,6 +8,7 @@ on: - 252-patch - 254-patch - 256-patch + - 258-patch tags-ignore: - '*' workflow_dispatch: diff --git a/.github/workflows/onRelease.yml b/.github/workflows/onRelease.yml index 73d510e9..752ff349 100644 --- a/.github/workflows/onRelease.yml +++ b/.github/workflows/onRelease.yml @@ -48,7 +48,7 @@ jobs: #ctc: true sign: true # At CLCO, the new patch branch's version will be released as 'prerelease'. After R2b, delete the logic below for 'latest' and update 'prerelease' candidate to 'latest' - tag: ${{ needs.getDistTag.outputs.tag || (needs.getMajorVersion.outputs.major == '2' && 'latest') || (needs.getMajorVersion.outputs.major == '3' && 'prerelease') ||'next' }} + tag: ${{ needs.getDistTag.outputs.tag || (needs.getMajorVersion.outputs.major == '4' && 'latest') || 'next' }} githubTag: ${{ github.event.release.tag_name || inputs.tag }} secrets: inherit diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 56bb1745..a9845a48 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,7 +1,7 @@ name: tests on: push: - branches-ignore: [main, 252-patch, 254-patch, 256-patch] + branches-ignore: [main, 252-patch, 254-patch, 256-patch, 258-patch] workflow_dispatch: jobs: diff --git a/.github/workflows/validate-pr.yml b/.github/workflows/validate-pr.yml index 4fcb617b..3cbeb6b1 100644 --- a/.github/workflows/validate-pr.yml +++ b/.github/workflows/validate-pr.yml @@ -4,7 +4,7 @@ on: pull_request: types: [opened, reopened, edited] # only applies to PRs that want to merge to main - branches: [main, 252-patch, 254-patch] + branches: [main, 252-patch, 254-patch, 256-patch, 258-patch] jobs: pr-validation: diff --git a/CHANGELOG.md b/CHANGELOG.md index 89c0869e..05c87341 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,50 @@ +## [4.5.3](https://github.com/salesforcecli/plugin-lightning-dev/compare/4.5.2...4.5.3) (2025-12-08) + +### Bug Fixes + +- preview URL @W-20474734 ([#576](https://github.com/salesforcecli/plugin-lightning-dev/issues/576)) ([9338a24](https://github.com/salesforcecli/plugin-lightning-dev/commit/9338a24a5441467fec0a20a5970a6a1a437583aa)) + +## [4.5.2](https://github.com/salesforcecli/plugin-lightning-dev/compare/4.5.2-alpha.1...4.5.2) (2025-10-12) + +### Bug Fixes + +- versions ([02e1bbd](https://github.com/salesforcecli/plugin-lightning-dev/commit/02e1bbdfae33cfa955fc4b92a41387f756316855)) + +## [4.5.2-alpha.1](https://github.com/salesforcecli/plugin-lightning-dev/compare/4.5.1...4.5.2-alpha.1) (2025-10-12) + +### Bug Fixes + +- auto enable local dev for Agentforce Vibes @W-19250167 ([#533](https://github.com/salesforcecli/plugin-lightning-dev/issues/533)) ([93da505](https://github.com/salesforcecli/plugin-lightning-dev/commit/93da5054d7ab7f0bd9c54a1df51de95e8bf2e11e)) + +## [4.5.1](https://github.com/salesforcecli/plugin-lightning-dev/compare/4.5.0...4.5.1) (2025-10-12) + +### Bug Fixes + +- promote version 4 to latest tag @W-19861266@ ([#532](https://github.com/salesforcecli/plugin-lightning-dev/issues/532)) ([2959c81](https://github.com/salesforcecli/plugin-lightning-dev/commit/2959c81513c408c60284266b86c5b6922306bb7e)) + +# [4.5.0](https://github.com/salesforcecli/plugin-lightning-dev/compare/4.4.14...4.5.0) (2025-10-12) + +### Features + +- vscode extension support @W-19820472 ([#524](https://github.com/salesforcecli/plugin-lightning-dev/issues/524)) ([44d3fc1](https://github.com/salesforcecli/plugin-lightning-dev/commit/44d3fc1cbf594602c0bc663ab32ed26c53c10331)) + +## [4.4.14](https://github.com/salesforcecli/plugin-lightning-dev/compare/4.4.13...4.4.14) (2025-10-09) + +### Bug Fixes + +- remove lightning-base-components dependency @W-19861266@ ([#527](https://github.com/salesforcecli/plugin-lightning-dev/issues/527)) ([2e70cb6](https://github.com/salesforcecli/plugin-lightning-dev/commit/2e70cb6e3b09b659b1b233e0a142b7e891066b1f)) + +## [4.4.13](https://github.com/salesforcecli/plugin-lightning-dev/compare/4.4.12...4.4.13) (2025-08-27) + +### Bug Fixes + +- 258-patch dependencies ([#493](https://github.com/salesforcecli/plugin-lightning-dev/issues/493)) ([6f34efb](https://github.com/salesforcecli/plugin-lightning-dev/commit/6f34efbee5fe588c95fada86af5ae233205e59dd)) +- **deps:** bump @lwc/lwc-dev-server from 13.0.32 to 13.2.1 ([#479](https://github.com/salesforcecli/plugin-lightning-dev/issues/479)) ([f4a77d2](https://github.com/salesforcecli/plugin-lightning-dev/commit/f4a77d24b26ee280ee7e93e51ea960af7dedfcea)) +- **deps:** bump @lwc/lwc-dev-server from 13.2.1 to 13.2.2 ([#489](https://github.com/salesforcecli/plugin-lightning-dev/issues/489)) ([47589f8](https://github.com/salesforcecli/plugin-lightning-dev/commit/47589f8750a329af9c6baa82b9377c176f5213dc)) +- **deps:** bump @lwc/sfdc-lwc-compiler from 13.0.32 to 13.2.2 ([#487](https://github.com/salesforcecli/plugin-lightning-dev/issues/487)) ([916b13d](https://github.com/salesforcecli/plugin-lightning-dev/commit/916b13d7a62ccae6219c44af3283eb85fda0dc42)) +- **deps:** bump @salesforce/core from 8.19.1 to 8.21.2 ([#488](https://github.com/salesforcecli/plugin-lightning-dev/issues/488)) ([8336604](https://github.com/salesforcecli/plugin-lightning-dev/commit/83366048c681b697ea68a260a94c5977796519b0)) +- **deps:** bump lwc from 8.20.4 to 8.21.2 ([#486](https://github.com/salesforcecli/plugin-lightning-dev/issues/486)) ([0f95ebd](https://github.com/salesforcecli/plugin-lightning-dev/commit/0f95ebda44e8da7ce40c50d4604ecd398a233220)) + ## [4.4.12](https://github.com/salesforcecli/plugin-lightning-dev/compare/4.4.11...4.4.12) (2025-08-10) ### Bug Fixes diff --git a/README.md b/README.md index 527381d0..99fdde4f 100644 --- a/README.md +++ b/README.md @@ -201,7 +201,7 @@ EXAMPLES $ sf lightning dev app --target-org myOrg --device-type ios --device-id "iPhone 15 Pro Max" ``` -_See code: [src/commands/lightning/dev/app.ts](https://github.com/salesforcecli/plugin-lightning-dev/blob/4.4.12/src/commands/lightning/dev/app.ts)_ +_See code: [src/commands/lightning/dev/app.ts](https://github.com/salesforcecli/plugin-lightning-dev/blob/4.5.3/src/commands/lightning/dev/app.ts)_ ## `sf lightning dev component` @@ -209,13 +209,14 @@ _See code: [src/commands/lightning/dev/app.ts](https://github.com/salesforcecli/ ``` USAGE - $ sf lightning dev component -o [--json] [--flags-dir ] [-n ] [-c] + $ sf lightning dev component -o [--json] [--flags-dir ] [-n ] [--api-version ] [-c] FLAGS - -c, --client-select Launch component preview without selecting a component - -n, --name= Name of a component to preview. - -o, --target-org= (required) Username or alias of the target org. Not required if the `target-org` - configuration variable is already set. + -c, --client-select Launch component preview without selecting a component + -n, --name= Name of a component to preview. + -o, --target-org= (required) Username or alias of the target org. Not required if the `target-org` + configuration variable is already set. + --api-version= Override the api version used for api requests made by this command GLOBAL FLAGS --flags-dir= Import flag values from a directory. @@ -248,7 +249,7 @@ EXAMPLES $ sf lightning dev component --name myComponent ``` -_See code: [src/commands/lightning/dev/component.ts](https://github.com/salesforcecli/plugin-lightning-dev/blob/4.4.12/src/commands/lightning/dev/component.ts)_ +_See code: [src/commands/lightning/dev/component.ts](https://github.com/salesforcecli/plugin-lightning-dev/blob/4.5.3/src/commands/lightning/dev/component.ts)_ ## `sf lightning dev site` @@ -304,6 +305,6 @@ EXAMPLES $ sf lightning dev site --name "Partner Central" --target-org myOrg --get-latest ``` -_See code: [src/commands/lightning/dev/site.ts](https://github.com/salesforcecli/plugin-lightning-dev/blob/4.4.12/src/commands/lightning/dev/site.ts)_ +_See code: [src/commands/lightning/dev/site.ts](https://github.com/salesforcecli/plugin-lightning-dev/blob/4.5.3/src/commands/lightning/dev/site.ts)_ diff --git a/command-snapshot.json b/command-snapshot.json index aa16dcf4..26cc62d9 100644 --- a/command-snapshot.json +++ b/command-snapshot.json @@ -12,7 +12,7 @@ "command": "lightning:dev:component", "flagAliases": [], "flagChars": ["c", "n", "o"], - "flags": ["client-select", "flags-dir", "json", "name", "target-org"], + "flags": ["api-version", "client-select", "flags-dir", "json", "name", "target-org"], "plugin": "@salesforce/plugin-lightning-dev" }, { @@ -20,7 +20,7 @@ "command": "lightning:dev:site", "flagAliases": [], "flagChars": ["l", "n", "o"], - "flags": ["flags-dir", "get-latest", "guest", "name", "target-org", "ssr"], + "flags": ["flags-dir", "get-latest", "guest", "name", "ssr", "target-org"], "plugin": "@salesforce/plugin-lightning-dev" } ] diff --git a/lwc.config.json b/lwc.config.json index b3760737..c02ade53 100644 --- a/lwc.config.json +++ b/lwc.config.json @@ -1,7 +1,3 @@ { - "modules": [ - { - "npm": "lightning-base-components" - } - ] + "modules": [] } diff --git a/package.json b/package.json index c162b21f..28124056 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "name": "@salesforce/plugin-lightning-dev", "description": "Lightning development tools for LEX, Mobile, and Experience Sites", - "version": "4.4.12", + "version": "4.5.3", "author": "Salesforce", "bugs": "https://github.com/forcedotcom/cli/issues", "dependencies": { "@inquirer/prompts": "^5.3.8", "@inquirer/select": "^2.4.7", - "@lwc/lwc-dev-server": "~13.2.2", - "@lwc/sfdc-lwc-compiler": "~13.2.2", + "@lwc/lwc-dev-server": "~13.1.5-alpha.3+007b30e", + "@lwc/sfdc-lwc-compiler": "~13.1.5-alpha.3+007b30e", "@lwrjs/api": "0.18.3", "@oclif/core": "^4.5.0", "@salesforce/core": "^8.21.2", @@ -17,8 +17,7 @@ "@salesforce/sf-plugins-core": "^11.2.4", "axios": "^1.11.0", "glob": "^10.4.5", - "lightning-base-components": "1.27.2-alpha", - "lwc": "~8.21.2", + "lwc": "~8.20.5", "node-fetch": "^3.3.2", "open": "^10.2.0", "xml2js": "^0.6.2" @@ -237,8 +236,8 @@ "The 'versionToTagMappings' section defines the mapping between released tags for our CLI plugin and the org version that each tag supports." ], "target": { - "versionNumber": "66.0", - "matchingDevServerVersion": "~13.0.27" + "versionNumber": "65.0", + "matchingDevServerVersion": "~13.1.5-alpha.3+007b30e" }, "versionToTagMappings": [ { @@ -247,14 +246,18 @@ }, { "versionNumber": "63.0", - "tagName": "latest" + "tagName": "v2" }, { "versionNumber": "64.0", + "tagName": "latest" + }, + { + "versionNumber": "65.0", "tagName": "prerelease" }, { - "versionNumber": "66.0", + "versionNumber": "65.0", "tagName": "next" } ] diff --git a/src/commands/lightning/dev/component.ts b/src/commands/lightning/dev/component.ts index 97a1fab4..87458464 100644 --- a/src/commands/lightning/dev/component.ts +++ b/src/commands/lightning/dev/component.ts @@ -13,12 +13,21 @@ import { ComponentUtils } from '../../../shared/componentUtils.js'; import { PromptUtils } from '../../../shared/promptUtils.js'; import { PreviewUtils } from '../../../shared/previewUtils.js'; import { startLWCServer } from '../../../lwc-dev-server/index.js'; +import { MetaUtils } from '../../../shared/metaUtils.js'; Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); const messages = Messages.loadMessages('@salesforce/plugin-lightning-dev', 'lightning.dev.component'); const sharedMessages = Messages.loadMessages('@salesforce/plugin-lightning-dev', 'shared.utils'); -export default class LightningDevComponent extends SfCommand { +export type ComponentPreviewResult = { + instanceUrl: string; + ldpServerUrl: string; + ldpServerId: string; + componentName: string; + previewUrl: string; +}; + +export default class LightningDevComponent extends SfCommand { public static readonly summary = messages.getMessage('summary'); public static readonly description = messages.getMessage('description'); public static readonly examples = messages.getMessages('examples'); @@ -29,6 +38,7 @@ export default class LightningDevComponent extends SfCommand { char: 'n', requiredOrDefaulted: false, }), + 'api-version': Flags.orgApiVersion(), 'client-select': Flags.boolean({ summary: messages.getMessage('flags.client-select.summary'), char: 'c', @@ -37,7 +47,7 @@ export default class LightningDevComponent extends SfCommand { 'target-org': Flags.requiredOrg(), }; - public async run(): Promise { + public async run(): Promise { const { flags } = await this.parse(LightningDevComponent); const logger = await Logger.child(this.ctor.name); const project = await SfProject.resolve(); @@ -54,6 +64,16 @@ export default class LightningDevComponent extends SfCommand { let componentName = flags['name']; const clientSelect = flags['client-select']; const targetOrg = flags['target-org']; + const apiVersion = flags['api-version']; + + // Auto enable local dev + if (process.env.AUTO_ENABLE_LOCAL_DEV === 'true') { + try { + await MetaUtils.ensureLightningPreviewEnabled(targetOrg.getConnection(undefined)); + } catch (error) { + this.log('Error autoenabling local dev', error); + } + } const { ldpServerId, ldpServerToken } = await PreviewUtils.initializePreviewConnection(targetOrg); @@ -62,44 +82,56 @@ export default class LightningDevComponent extends SfCommand { logger.debug(`Next available ports are http=${serverPorts.httpPort} , https=${serverPorts.httpsPort}`); logger.debug('Determining Local Dev Server url'); - const ldpServerUrl = PreviewUtils.generateWebSocketUrlForLocalDevServer(Platform.desktop, serverPorts, logger); + let ldpServerUrl; + + // In Code Builder, we cannot go to localhost - we need to use a proxy URI to get to the ldpServer + if (process.env.SF_CONTAINER_MODE && process.env.VSCODE_PROXY_URI) { + logger.debug('In Code Builder Mode - using proxy URI'); + ldpServerUrl = process.env.VSCODE_PROXY_URI.replace('https://', 'ws://').replace( + '{{port}}', + `${serverPorts.httpPort}` + ); + } else { + // Default behavior + ldpServerUrl = PreviewUtils.generateWebSocketUrlForLocalDevServer(Platform.desktop, serverPorts, logger); + } logger.debug(`Local Dev Server url is ${ldpServerUrl}`); - const namespacePaths = await ComponentUtils.getNamespacePaths(project); - const componentPaths = await ComponentUtils.getAllComponentPaths(namespacePaths); - if (!componentPaths) { - throw new Error(messages.getMessage('error.directory')); - } + if (!clientSelect) { + const namespacePaths = await ComponentUtils.getNamespacePaths(project); + const componentPaths = await ComponentUtils.getAllComponentPaths(namespacePaths); + if (!componentPaths) { + throw new Error(messages.getMessage('error.directory')); + } - const components = ( - await Promise.all( - componentPaths.map(async (componentPath) => { - let xml; - - try { - xml = await ComponentUtils.getComponentMetadata(componentPath); - } catch (err) { - this.warn(messages.getMessage('error.component-metadata', [componentPath])); - } - - // components must have meta xml to be previewed - if (!xml) { - return undefined; - } - - const name = path.basename(componentPath); - const label = ComponentUtils.componentNameToTitleCase(name); - - return { - name, - label: xml.LightningComponentBundle.masterLabel ?? label, - description: xml.LightningComponentBundle.description ?? '', - }; - }) - ) - ).filter((component) => !!component); + const components = ( + await Promise.all( + componentPaths.map(async (componentPath) => { + let xml; + + try { + xml = await ComponentUtils.getComponentMetadata(componentPath); + } catch (err) { + this.warn(messages.getMessage('error.component-metadata', [componentPath])); + } + + // components must have meta xml to be previewed + if (!xml) { + return undefined; + } + + const name = path.basename(componentPath); + const label = ComponentUtils.componentNameToTitleCase(name); + + return { + name, + label: xml.LightningComponentBundle.masterLabel ?? label, + description: xml.LightningComponentBundle.description ?? '', + }; + }) + ) + ).filter((component) => !!component); - if (!clientSelect) { if (componentName) { // validate that the component exists before launching the server const match = components.find( @@ -129,7 +161,28 @@ export default class LightningDevComponent extends SfCommand { targetOrgArg ); - // Open the browser and navigate to the right page - await this.config.runCommand('org:open', launchArguments); + // Construct and log the full URL that will be opened + const connection = targetOrg.getConnection(apiVersion); + + // strip trailing slashes + const instanceUrl = connection.instanceUrl.replace(/\/$/, ''); + + const previewUrl = PreviewUtils.generateComponentPreviewUrl(instanceUrl, ldpServerUrl, ldpServerId, componentName); + + // Prepare the result for JSON output + const result: ComponentPreviewResult = { + instanceUrl, + ldpServerUrl, + ldpServerId, + componentName: componentName ?? '', + previewUrl, + }; + + // Open the browser and navigate to the right page (unless OPEN_BROWSER is set to true) + if (process.env.OPEN_BROWSER !== 'false') { + await this.config.runCommand('org:open', launchArguments); + } + + return result; } } diff --git a/src/shared/metaUtils.ts b/src/shared/metaUtils.ts new file mode 100644 index 00000000..2fe63ca4 --- /dev/null +++ b/src/shared/metaUtils.ts @@ -0,0 +1,230 @@ +/* + * 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 { Connection, Logger } from '@salesforce/core'; + +type LightningExperienceSettingsMetadata = { + [key: string]: unknown; + fullName?: string; + enableLightningPreviewPref?: string | boolean; +}; + +type MyDomainSettingsMetadata = { + [key: string]: unknown; + fullName?: string; + isFirstPartyCookieUseRequired?: string | boolean; +}; + +type MetadataUpdateResult = { + success: boolean; + fullName: string; + errors?: Array<{ message: string }>; +}; + +/** + * Utility class for managing Salesforce metadata settings related to Lightning Development. + */ +export class MetaUtils { + private static logger = Logger.childFromRoot('metaUtils'); + + /** + * Retrieves the Lightning Experience Settings metadata from the org. + * + * @param connection the connection to the org + * @returns LightningExperienceSettingsMetadata object containing the settings + * @throws Error if unable to retrieve the metadata + */ + public static async getLightningExperienceSettings( + connection: Connection + ): Promise { + this.logger.debug('Retrieving Lightning Experience Settings metadata'); + + const metadata = await connection.metadata.read('LightningExperienceSettings', 'enableLightningPreviewPref'); + + if (!metadata) { + throw new Error('Unable to retrieve Lightning Experience Settings metadata.'); + } + + if (Array.isArray(metadata)) { + if (metadata.length === 0) { + throw new Error('Lightning Experience Settings metadata response was empty.'); + } + return metadata[0] as LightningExperienceSettingsMetadata; + } + + return metadata as LightningExperienceSettingsMetadata; + } + + /** + * Checks if Lightning Preview (Local Dev) is enabled for the org. + * + * @param connection the connection to the org + * @returns boolean indicating whether Lightning Preview is enabled + */ + public static async isLightningPreviewEnabled(connection: Connection): Promise { + try { + const settings = await this.getLightningExperienceSettings(connection); + const flagValue = settings.enableLightningPreviewPref ?? 'false'; + const enabled = String(flagValue).toLowerCase().trim() === 'true'; + this.logger.debug(`Lightning Preview enabled: ${enabled}`); + return enabled; + } catch (error) { + this.logger.warn('Error checking Lightning Preview status, assuming disabled:', error); + return false; + } + } + + /** + * Enables or disables Lightning Preview (Local Dev) for the org by updating the metadata. + * + * @param connection the connection to the org + * @param enable boolean indicating whether to enable (true) or disable (false) Lightning Preview + * @throws Error if the metadata update fails + */ + public static async setLightningPreviewEnabled(connection: Connection, enable: boolean): Promise { + this.logger.debug(`Setting Lightning Preview enabled to: ${enable}`); + + const updateResult = await connection.metadata.update('LightningExperienceSettings', { + fullName: 'enableLightningPreviewPref', + enableLightningPreviewPref: enable ? 'true' : 'false', + }); + + const results = Array.isArray(updateResult) ? updateResult : [updateResult]; + const typedResults = results as MetadataUpdateResult[]; + const errors = typedResults.filter((result) => !result.success); + + if (errors.length > 0) { + const message = errors + .flatMap((result) => (Array.isArray(result.errors) ? result.errors : result.errors ? [result.errors] : [])) + .filter((error): error is { message: string } => Boolean(error)) + .map((error) => error.message) + .join(' '); + + throw new Error(message || 'Failed to update Lightning Preview setting.'); + } + + this.logger.debug('Successfully updated Lightning Preview setting'); + } + + /** + * Retrieves the My Domain Settings metadata from the org. + * + * @param connection the connection to the org + * @returns MyDomainSettingsMetadata object containing the settings + * @throws Error if unable to retrieve the metadata + */ + public static async getMyDomainSettings(connection: Connection): Promise { + this.logger.debug('Retrieving My Domain Settings metadata'); + + const metadata = await connection.metadata.read('MyDomainSettings', 'MyDomain'); + + if (!metadata) { + throw new Error('Unable to retrieve My Domain settings metadata.'); + } + + if (Array.isArray(metadata)) { + if (metadata.length === 0) { + throw new Error('My Domain settings metadata response was empty.'); + } + return metadata[0] as MyDomainSettingsMetadata; + } + + return metadata as MyDomainSettingsMetadata; + } + + /** + * Checks if first-party cookies are required for the org. + * + * @param connection the connection to the org + * @returns boolean indicating whether first-party cookies are required + */ + public static async isFirstPartyCookieRequired(connection: Connection): Promise { + try { + const settings = await this.getMyDomainSettings(connection); + const flagValue = settings.isFirstPartyCookieUseRequired ?? 'false'; + const required = String(flagValue).toLowerCase().trim() === 'true'; + this.logger.debug(`First-party cookie required: ${required}`); + return required; + } catch (error) { + this.logger.warn('Error checking first-party cookie requirement, assuming not required:', error); + return false; + } + } + + /** + * Updates the My Domain setting that controls whether first-party cookies are required. + * + * @param connection the connection to the org + * @param requireFirstPartyCookies boolean indicating whether to require first-party cookies + * @throws Error if the metadata update fails + */ + public static async setMyDomainFirstPartyCookieRequirement( + connection: Connection, + requireFirstPartyCookies: boolean + ): Promise { + this.logger.debug(`Setting first-party cookie requirement to: ${requireFirstPartyCookies}`); + + const updateResult = await connection.metadata.update('MyDomainSettings', { + fullName: 'MyDomain', + isFirstPartyCookieUseRequired: requireFirstPartyCookies ? 'true' : 'false', + }); + + const results = Array.isArray(updateResult) ? updateResult : [updateResult]; + const typedResults = results as MetadataUpdateResult[]; + const errors = typedResults.filter((result) => !result.success); + + if (errors.length > 0) { + const message = errors + .flatMap((result) => (Array.isArray(result.errors) ? result.errors : result.errors ? [result.errors] : [])) + .filter((error): error is { message: string } => Boolean(error)) + .map((error) => error.message) + .join(' '); + + throw new Error(message || 'Failed to update My Domain first-party cookie requirement.'); + } + + this.logger.debug('Successfully updated first-party cookie requirement'); + } + + /** + * Ensures Lightning Preview is enabled for the org. If it's not enabled, this method will enable it. + * + * @param connection the connection to the org + * @returns boolean indicating whether Lightning Preview was already enabled (true) or had to be enabled (false) + */ + public static async ensureLightningPreviewEnabled(connection: Connection): Promise { + const isEnabled = await this.isLightningPreviewEnabled(connection); + + if (!isEnabled) { + this.logger.info('Lightning Preview is not enabled. Enabling it now...'); + await this.setLightningPreviewEnabled(connection, true); + return false; + } + + this.logger.debug('Lightning Preview is already enabled'); + return true; + } + + /** + * Ensures first-party cookies are not required for the org. If they are required, this method will disable the requirement. + * + * @param connection the connection to the org + * @returns boolean indicating whether first-party cookies were already not required (true) or had to be disabled (false) + */ + public static async ensureFirstPartyCookiesNotRequired(connection: Connection): Promise { + const isRequired = await this.isFirstPartyCookieRequired(connection); + + if (isRequired) { + this.logger.info('First-party cookies are required. Disabling requirement...'); + await this.setMyDomainFirstPartyCookieRequirement(connection, false); + return false; + } + + this.logger.debug('First-party cookies are not required'); + return true; + } +} diff --git a/src/shared/previewUtils.ts b/src/shared/previewUtils.ts index 64ff30a1..09b4232f 100644 --- a/src/shared/previewUtils.ts +++ b/src/shared/previewUtils.ts @@ -229,9 +229,7 @@ export class PreviewUtils { componentName?: string, targetOrg?: string ): string[] { - let appPath = `lwr/application/e/devpreview/ai/${encodeURIComponent( - 'localdev%2Fpreview' - )}?ldpServerUrl=${ldpServerUrl}&ldpServerId=${ldpServerId}`; + let appPath = `lwr/application/e/devpreview/ai/localdev-preview?ldpServerUrl=${ldpServerUrl}&ldpServerId=${ldpServerId}`; if (componentName) { // TODO: support other namespaces appPath += `&specifier=c/${componentName}`; @@ -246,6 +244,30 @@ export class PreviewUtils { return launchArguments; } + /** + * Generates the full URL for a component preview. + * + * @param instanceUrl The URL of the Salesforce instance + * @param ldpServerUrl The URL for the local dev server + * @param ldpServerId Record ID for the identity token + * @param componentName The name of the component to preview + * @returns The full URL for the component preview + */ + public static generateComponentPreviewUrl( + instanceUrl: string, + ldpServerUrl: string, + ldpServerId: string, + componentName?: string + ): string { + let url = `${instanceUrl}/lwr/application/e/devpreview/ai/localdev-preview?ldpServerUrl=${ldpServerUrl}&ldpServerId=${ldpServerId}`; + if (componentName) { + // TODO: support other namespaces + url += `&specifier=c/${componentName}`; + } + + return url; + } + /** * Generates the proper set of arguments to be used for launching a mobile app with custom launch arguments. * diff --git a/yarn.lock b/yarn.lock index e3540d23..abdc62df 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2167,25 +2167,25 @@ dependencies: "@locker/shared" "0.24.6" -"@lwc/aria-reflection@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/aria-reflection/-/aria-reflection-8.21.2.tgz#ee306b97101ab3bad289c5cdd0a7621a977a6805" - integrity sha512-WJWcDi6w0gl7uBhy4lR8R3GLUTs5S2rGK9edHOruw6Y1Bh6jcYVkPX9TAd9hf67FsWdB/ztb8xpxOTOpVhjQ9g== +"@lwc/aria-reflection@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/aria-reflection/-/aria-reflection-8.20.5.tgz#a18e5a4b59abb44d82081f49d89cb5796f69e7fa" + integrity sha512-GBe5kW0q2rEeOZ0wJvkLswn+GYVulqVgL34hX6E3jS/CCzTBYUqw2SrbQdJx0x3STq3/sadivgcOLgotn9Opfg== -"@lwc/babel-plugin-component@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/babel-plugin-component/-/babel-plugin-component-8.21.2.tgz#95e14c76a605a00037a55c7a971dd791681e330e" - integrity sha512-k1BnbDgeVwpJ9+3KA49aqUgQ9fHG1IxVsrqmWLAx9EaNE1nn3Zz0z3ps+GyNp+0caCDancdhJBRpK8QsbKcgHQ== +"@lwc/babel-plugin-component@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/babel-plugin-component/-/babel-plugin-component-8.20.5.tgz#a1086f5f774a9d99d7af0c16383933f2ae8763c7" + integrity sha512-jVrnb0quyGyVocpmbP6p0InVNmSX87Wl9p6xhuCZeP01UvKddL2CV9uaqsRxtAKAuaw1EzBdtRjdXrzRJAZ2qw== dependencies: "@babel/helper-module-imports" "7.27.1" - "@lwc/errors" "8.21.2" - "@lwc/shared" "8.21.2" + "@lwc/errors" "8.20.5" + "@lwc/shared" "8.20.5" line-column "~1.0.2" -"@lwc/compiler@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/compiler/-/compiler-8.21.2.tgz#60afbf67658589428ee571a2209bf463371f7682" - integrity sha512-KSuzPQq6jSD8jsvGhmHVYWvQ693PO0+GNFi0HbNjajEGNJhKT+b7kQW640mkAVVWg1P8hUDoiJhc0yClZhkqwQ== +"@lwc/compiler@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/compiler/-/compiler-8.20.5.tgz#3584b23f3992c0ec5f0fd2f0a437557d4508491f" + integrity sha512-vmOArwjnX0aHdaFFtIpjYLpKd7qGTd3vF7PadrMbZZdbnUGD4svxUkbSvCkHS9WaikMNhgJ3a8yEP8Ffcdo3ag== dependencies: "@babel/core" "7.28.0" "@babel/plugin-transform-async-generator-functions" "7.28.0" @@ -2193,43 +2193,43 @@ "@babel/plugin-transform-class-properties" "7.27.1" "@babel/plugin-transform-object-rest-spread" "7.28.0" "@locker/babel-plugin-transform-unforgeables" "0.22.0" - "@lwc/babel-plugin-component" "8.21.2" - "@lwc/errors" "8.21.2" - "@lwc/shared" "8.21.2" - "@lwc/ssr-compiler" "8.21.2" - "@lwc/style-compiler" "8.21.2" - "@lwc/template-compiler" "8.21.2" - -"@lwc/dev-server-plugin-lex@13.2.2": - version "13.2.2" - resolved "https://registry.yarnpkg.com/@lwc/dev-server-plugin-lex/-/dev-server-plugin-lex-13.2.2.tgz#7375cd2a76e4822f703850f545749ff22c1536d8" - integrity sha512-if4UDn9Dkk8IZDmv59jY344h2vay9HbkOW6AIBobtAJ+yjohjQkIW0jzfd3BDNuwJuhbLwI9aoq+JKdu5AA6qg== + "@lwc/babel-plugin-component" "8.20.5" + "@lwc/errors" "8.20.5" + "@lwc/shared" "8.20.5" + "@lwc/ssr-compiler" "8.20.5" + "@lwc/style-compiler" "8.20.5" + "@lwc/template-compiler" "8.20.5" + +"@lwc/dev-server-plugin-lex@13.1.5-alpha.3+007b30e": + version "13.1.5-alpha.3" + resolved "https://registry.yarnpkg.com/@lwc/dev-server-plugin-lex/-/dev-server-plugin-lex-13.1.5-alpha.3.tgz#b7d25a135f0f66bf4c39c5d973a7ed0d62165b87" + integrity sha512-9+SvsnahnOyflWpdHGBLht0Z14TEnV0xP0U6D/FS2WTNOMzHMEqWsIqmCBZW2TBFpd2Fa4oHTjBtIyvaxgucew== dependencies: magic-string "~0.30.17" -"@lwc/engine-core@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/engine-core/-/engine-core-8.21.2.tgz#f1eaae7097a8efed04dfb3e1d3e3d7ebea4093d0" - integrity sha512-NQhNTtDt2Z1xDWB7jOHD8RqjKjZ+/qxzIWrJY91KR7YvUN1IpUaWsiEjRcD5eBV6iNAgaMrlQ6TaOm82eaCc6g== +"@lwc/engine-core@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/engine-core/-/engine-core-8.20.5.tgz#86eddfa1e92436b139a8d3881f86ee9bfc90c176" + integrity sha512-JG4oMSzFPK1fzRNOkhEWRaYIzQRHvXioeUzOjp9lx5MaM3JzV9PgsJc45FPYOXmU7Dwnx69TqTeZAp6BFOq3sA== dependencies: - "@lwc/features" "8.21.2" - "@lwc/shared" "8.21.2" - "@lwc/signals" "8.21.2" + "@lwc/features" "8.20.5" + "@lwc/shared" "8.20.5" + "@lwc/signals" "8.20.5" -"@lwc/engine-dom@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/engine-dom/-/engine-dom-8.21.2.tgz#4976e68c61d660eb662bf54ecf446ebd14b0993d" - integrity sha512-W946exRTeWSpRC2pKYwo8yLCslYWPcDO0cBhQpXJOOxbVdefLcJSSW0arS/0tmPenA/Y3dHaSpfPOYD4hd1eKw== +"@lwc/engine-dom@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/engine-dom/-/engine-dom-8.20.5.tgz#5968c685e96c76d0a993c48fc6d81f3b0bdc627d" + integrity sha512-oCFiW1iqo3BHLpcXpGCtx1opTVskXyL5UQQEjr5kgLXXNW3eMik9NfJkYUfYOHdMke/gl1RVCk2+boZSoS5h9w== -"@lwc/engine-server@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/engine-server/-/engine-server-8.21.2.tgz#e589427cba8277d6d9fd1429f19ff90aa0a68865" - integrity sha512-XE5FOQULRJhIyX8gR5SV2d28+llN5ChcXipAbIYYd+XYd+HdpKG+GlK94+ZS32d+7/USthLqUmOD7DgBi1AU2A== +"@lwc/engine-server@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/engine-server/-/engine-server-8.20.5.tgz#19be99116c5d1e5ae439f073db84c4c52b7b57f2" + integrity sha512-dv4cHVTBD2G2JHYOOecXt2wviWuiFRoXSYMvDQoDsa0KSTIQ91SXPeHvf0ib/TdVskGA+OJSrW7pDhCfpQWpaQ== -"@lwc/errors@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/errors/-/errors-8.21.2.tgz#4e623ec46cb2c9d565ebd32f0c322643df909a99" - integrity sha512-dvARq9dFs8iATWTfNVw/2cMCGH5iW/VWEczIZ+6NlaIuiw/b7DZOjM6pdKFyZeFo6mWUp7P6CAnxOqqvftjT4Q== +"@lwc/errors@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/errors/-/errors-8.20.5.tgz#72b3214b077d00c3b0b36f3a3ea06be7c98913e0" + integrity sha512-P4tLoSJNbLpngzBcLGr+Lv4LLKbQ8iliYn1aY0M9gEN0KSOY5AsHNpUYKyXpBMtLh5D3nPv4qo337MImw0TnKQ== "@lwc/eslint-plugin-lwc-platform@6.0.0-beta.7": version "6.0.0-beta.7" @@ -2246,25 +2246,25 @@ globals "~15.14.0" minimatch "~9.0.4" -"@lwc/features@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/features/-/features-8.21.2.tgz#90349a356ce62459d7f5d8561c4680bac9cecee2" - integrity sha512-VooGIwPw4jEsdgb/fBnmyjMF/9zilYgmzX1lsbBHgMiOKon1S9h2/6AIdj3+Y+CiYxGqtxcVrMTKB3SG1X83vQ== +"@lwc/features@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/features/-/features-8.20.5.tgz#f5e18bbf4e5037d1879b582ed22b04705da6b26b" + integrity sha512-G+rWDwETG/v56lQUo2F11x4uYvI1wrbc1aJAhmQ5xEBuDEeY8iuThiiqswYESf7LPcwSFONXwd0uyuHc/F4O5g== dependencies: - "@lwc/shared" "8.21.2" + "@lwc/shared" "8.20.5" -"@lwc/lwc-dev-server-types@13.2.2": - version "13.2.2" - resolved "https://registry.yarnpkg.com/@lwc/lwc-dev-server-types/-/lwc-dev-server-types-13.2.2.tgz#42c4153b77e698ab1a05991f91a8a5a9d62cc531" - integrity sha512-Ur/sXh8n27sbG4QCC1IEkml0nc5Zm0YgP+f0NrPGzh5unNz0eGAfex1hOtBWtF4ZgFhkmPRZJ+MqUnEins11uQ== +"@lwc/lwc-dev-server-types@13.1.5-alpha.3+007b30e": + version "13.1.5-alpha.3" + resolved "https://registry.yarnpkg.com/@lwc/lwc-dev-server-types/-/lwc-dev-server-types-13.1.5-alpha.3.tgz#7f606416e9a85e4ecc799924c4b0b167603c3709" + integrity sha512-bLh0CR77lX9yK/Ttl56ZKqxW13jszaUjVdN7ayidwFRRxJ7ZICr0FaOu3PdX89NFLnyKj81fesSgoXUA0/rsKQ== -"@lwc/lwc-dev-server@~13.2.2": - version "13.2.2" - resolved "https://registry.yarnpkg.com/@lwc/lwc-dev-server/-/lwc-dev-server-13.2.2.tgz#8e9e21ad0a235c8618510fc0de19b65926e6cdab" - integrity sha512-WG9ZkWlFn9kmgi0sXyR3Cd+Yke2Fb9sgpQecICF9y5vu2q7EAjLjRb2ehJSPDcFYJRORcexHlZ1QGeiyj099Ag== +"@lwc/lwc-dev-server@~13.1.5-alpha.3+007b30e": + version "13.1.5-alpha.3" + resolved "https://registry.yarnpkg.com/@lwc/lwc-dev-server/-/lwc-dev-server-13.1.5-alpha.3.tgz#899bdf891c4e6a11d287158fd399a1fb568fd436" + integrity sha512-7HZenCHMItmhLcz5uYDee7hKv0NneQ4vxuEUDCsI7EMOLKSg7ejB95JfcWvB8OnnAo3WiZpDCdz5RdPvA5VmbQ== dependencies: - "@lwc/lwc-dev-server-types" "13.2.2" - "@lwc/sfdc-lwc-compiler" "13.2.2" + "@lwc/lwc-dev-server-types" "13.1.5-alpha.3+007b30e" + "@lwc/sfdc-lwc-compiler" "13.1.5-alpha.3+007b30e" chalk "~5.4.1" chokidar "~3.6.0" commander "~10.0.0" @@ -2272,45 +2272,45 @@ glob "^10.4.5" ws "^8.18.2" -"@lwc/metadata@13.2.2": - version "13.2.2" - resolved "https://registry.yarnpkg.com/@lwc/metadata/-/metadata-13.2.2.tgz#0001a2c69327aeb3c291a223f140c85c7c66fce5" - integrity sha512-qKcf86q/dRBN8ivwiBNhmF2al+kE4SC5xIPiKE7B6oBKzIh60s4wjY2b21xGtJ8sCuZgC7C5F8IVPLL1GBSG9g== +"@lwc/metadata@13.1.5-alpha.3+007b30e": + version "13.1.5-alpha.3" + resolved "https://registry.yarnpkg.com/@lwc/metadata/-/metadata-13.1.5-alpha.3.tgz#fad15b11c1798c7a55f56e8a448a4617fd1000d7" + integrity sha512-jc/pFN15CpmBOnTHzW2wvINaL+/6l6OwY3KDkorBI6th1UlN6bQFJcoWAjeIxmcbxsqn+qAgxjpOHno+QKkOWA== dependencies: "@babel/parser" "~7.27.5" "@babel/traverse" "~7.27.4" "@babel/types" "~7.27.6" - "@lwc/sfdc-compiler-utils" "13.2.2" + "@lwc/sfdc-compiler-utils" "13.1.5-alpha.3+007b30e" postcss "~8.5.5" postcss-selector-parser "~6.1.2" postcss-value-parser "~4.2.0" -"@lwc/module-resolver@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/module-resolver/-/module-resolver-8.21.2.tgz#7b38233df79465908b29f967121c8f7049a93688" - integrity sha512-cGJt4tZGARlKEPbbbPjK9R/2C0Myjtbp0LhFnOfke6DIKRETTXvVuhYT35zkJlWKvPaVWwd0TALaNXoWV0dU4A== +"@lwc/module-resolver@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/module-resolver/-/module-resolver-8.20.5.tgz#36fc662dd16a93ce479b79dd01d2b40796533fd0" + integrity sha512-S04bm+MSpGuMr3eE1VRcI2qrb2mETDvRcdqGhGXQ68HpP2DXQKUKq1XeyGXycNn+LlQiwTc+C+FiROYWsMQ4vg== dependencies: resolve "~1.22.10" -"@lwc/rollup-plugin@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/rollup-plugin/-/rollup-plugin-8.21.2.tgz#d7d67de9e726644aae60741c030e3d796ab18ed9" - integrity sha512-QonTfeggZIGSgued8en5KmYk8rGOcq64YsgPzTgf+J3EfCMbg4l3lIpcCER7bGsyc8WdEZUoXO8Bikd47GYhoQ== +"@lwc/rollup-plugin@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/rollup-plugin/-/rollup-plugin-8.20.5.tgz#68a0f25aeecbf4a77fb868c2a8f2689f2ba9cf93" + integrity sha512-reKT1P92vNqP8lkErm08jPW2BKvtPvbnDbmhTP74EgRT5xWS1vChzEFIkauEsFx4UpTCL3l4/7klZH2Q3I67Ew== dependencies: - "@lwc/compiler" "8.21.2" - "@lwc/module-resolver" "8.21.2" - "@lwc/shared" "8.21.2" + "@lwc/compiler" "8.20.5" + "@lwc/module-resolver" "8.20.5" + "@lwc/shared" "8.20.5" "@rollup/pluginutils" "~5.2.0" -"@lwc/sfdc-compiler-utils@13.2.2": - version "13.2.2" - resolved "https://registry.yarnpkg.com/@lwc/sfdc-compiler-utils/-/sfdc-compiler-utils-13.2.2.tgz#1344375899a58dc3460aca3ef2172f640fc5961d" - integrity sha512-tJZIpJIyLSAZhKiNaart+d1+xQ9Ju3D7MuKmfZoKHlitB3Fv3M6eRT3xpGOUV/5mPbqdEtBANpCMWfy/ECnMOA== +"@lwc/sfdc-compiler-utils@13.1.5-alpha.3+007b30e": + version "13.1.5-alpha.3" + resolved "https://registry.yarnpkg.com/@lwc/sfdc-compiler-utils/-/sfdc-compiler-utils-13.1.5-alpha.3.tgz#8ac056199662ce14d4b7caa9f639685c555fca36" + integrity sha512-iENBGQ2X/lc0x06hT3u2KM+LdHIbVInHKiyDveQU/C+mA5EHU2tQfs1pDlNyUH9gHqzirOtUdiwu8Xtpo45GaA== -"@lwc/sfdc-lwc-compiler@13.2.2", "@lwc/sfdc-lwc-compiler@~13.2.2": - version "13.2.2" - resolved "https://registry.yarnpkg.com/@lwc/sfdc-lwc-compiler/-/sfdc-lwc-compiler-13.2.2.tgz#219cd3126d77450fe4c67669702e228c90fdb4be" - integrity sha512-kWcj6ZeC7nuEi066le92JxzhQ56J9zHW7qMkmd1bajXhkOl55zHaj9PRCZtJumq+dy8TE5JQdWqJRjHQ7vYKlg== +"@lwc/sfdc-lwc-compiler@13.1.5-alpha.3+007b30e", "@lwc/sfdc-lwc-compiler@~13.1.5-alpha.3+007b30e": + version "13.1.5-alpha.3" + resolved "https://registry.yarnpkg.com/@lwc/sfdc-lwc-compiler/-/sfdc-lwc-compiler-13.1.5-alpha.3.tgz#70a5ca267d7391b62fac28ac687fe5e67ebfd4e0" + integrity sha512-S8tmFyAoiY8CE9VpSnuJmpHhFb1UGzlTro2ryIkQMpy03nSSdlP47r2IyJgsa5WYJxU7gf3bquot5mElGlZjMA== dependencies: "@babel/core" "7.27.4" "@babel/parser" "7.27.5" @@ -2319,11 +2319,11 @@ "@babel/traverse" "7.27.4" "@babel/types" "7.27.6" "@komaci/esm-generator" "258.0.0" - "@lwc/dev-server-plugin-lex" "13.2.2" + "@lwc/dev-server-plugin-lex" "13.1.5-alpha.3+007b30e" "@lwc/eslint-plugin-lwc" "3.0.0-beta.2" "@lwc/eslint-plugin-lwc-platform" "6.0.0-beta.7" - "@lwc/metadata" "13.2.2" - "@lwc/sfdc-compiler-utils" "13.2.2" + "@lwc/metadata" "13.1.5-alpha.3+007b30e" + "@lwc/sfdc-compiler-utils" "13.1.5-alpha.3+007b30e" "@rollup/plugin-babel" "^6.0.4" "@rollup/plugin-replace" "^6.0.2" "@rollup/wasm-node" "4.10.0" @@ -2344,73 +2344,73 @@ postcss-selector-parser "~6.1.2" terser "~5.36.0" -"@lwc/shared@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/shared/-/shared-8.21.2.tgz#a7a96e7a9492ee71d4aa7b92f30a3c0182713222" - integrity sha512-+b+r11TIoOZb867vh8idr2e0izvet9LbRImOJKUyV62MvtnvkD5x8QL07Q1v0DTYF/gXbHlTvOWRW9OuT0GY2Q== +"@lwc/shared@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/shared/-/shared-8.20.5.tgz#e1d52f2fc90f3ffa4ec061e26782f6d60457140b" + integrity sha512-6nbxLkv9QvmVWiGDcvkMJEn2/9cFZ9i9W0oUqeY5IyY+Zd8S6bNQJtmhq0SiC4lc7HTrEVUAmYw9TnjMFQ94Sw== -"@lwc/signals@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/signals/-/signals-8.21.2.tgz#037688ebc128917d5c600786e2464485b70b7e0c" - integrity sha512-OTWUabt6cL9ca29owPztviEANAcMz4+73h6M4xoXjut1+KwBmPvAae4QtukLSlEt7rKRunWm7nU77C+u98JvHA== +"@lwc/signals@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/signals/-/signals-8.20.5.tgz#48af8babd6db3ef94be1bb59c7b8e16990413d6e" + integrity sha512-nLM0aB7WudcYtQPrz3qpzda/ADodmxXcVtkDE3bKzbuqGoQIDagkFLKiCF674wivhTHQf/1Wbcp7vvpEUl/4cQ== -"@lwc/ssr-compiler@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/ssr-compiler/-/ssr-compiler-8.21.2.tgz#9db99dfaffaadf690ab103055abee526aa91b2d2" - integrity sha512-MsMzWD+2HzL6wrWKcmXvPgBaXpuLjlv6jb71U+BYQy3+bkypbv/3Uvz2IwiNm1V0U4pDHYEdoltjDpPAqYEY9w== +"@lwc/ssr-compiler@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/ssr-compiler/-/ssr-compiler-8.20.5.tgz#44d98499ba2dfaede7fc1823c1ddb0e29abd5d8c" + integrity sha512-qkO5jeUV4ZIkxFbfueFCgPACgcLdXoMmJwRwnKdtgUPse0sTCEmDDMB9ojLSdKhrFIUmVAfe3iyCGTkvhgazeQ== dependencies: "@babel/types" "7.28.2" - "@lwc/errors" "8.21.2" - "@lwc/shared" "8.21.2" - "@lwc/template-compiler" "8.21.2" + "@lwc/errors" "8.20.5" + "@lwc/shared" "8.20.5" + "@lwc/template-compiler" "8.20.5" acorn "8.15.0" astring "^1.9.0" estree-toolkit "^1.7.13" immer "^10.1.1" meriyah "^5.0.0" -"@lwc/ssr-runtime@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/ssr-runtime/-/ssr-runtime-8.21.2.tgz#e9759bfa63468b292674677395888901ad3cd703" - integrity sha512-hZCyX3cxws/Yg1RlimhPeRDhpzvG3u5f/7jEPcuLxkaLtS7BJLVOnCzQwFC79QxVqnG2SyTCSDON033lbNJD+w== +"@lwc/ssr-runtime@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/ssr-runtime/-/ssr-runtime-8.20.5.tgz#bf0527b119dd013d27242ffed76377d0ebcdc339" + integrity sha512-xrBDWPusJ4gpmCunLgZepJtbAqxEgWf837Mhuoh5Jf1nVmZIVoxqtVeQC79eMTGJSOPh9Dl1azyy/VbnN3bpuw== -"@lwc/style-compiler@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/style-compiler/-/style-compiler-8.21.2.tgz#9100754f1c71649d678f29204748af4436af4ad8" - integrity sha512-fDKJRppIrxHoxPy0E4mD9NdYB+8IqZfDsT9j2dcdD/yZhvUlq59c81upD0z8r1U84fYTtKYSBaYyW+yuDmFroA== +"@lwc/style-compiler@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/style-compiler/-/style-compiler-8.20.5.tgz#41a2982dfdd083dc4cd5df8f55f61b75d395e175" + integrity sha512-6Frb/RydBUCrZYxXf7EHsZlUVmpdeLRiQqPrMzPamWm7w8QoukjQgIcF8lghJd41Oc8HxAAXQTQcE8BWUORTzQ== dependencies: - "@lwc/shared" "8.21.2" + "@lwc/shared" "8.20.5" postcss "~8.5.6" postcss-selector-parser "~7.1.0" postcss-value-parser "~4.2.0" -"@lwc/synthetic-shadow@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/synthetic-shadow/-/synthetic-shadow-8.21.2.tgz#52f6dae2229ae43052ad7ca78e35173fca8090d7" - integrity sha512-aurN9FuaQXu4SeJqbVZ8g3x8MBAYmksLP3ZCXsxdsuWRszv4mUv9Ic+qhAc5Lbe9/G+fLLh5BhiAWjb6zpNMyw== +"@lwc/synthetic-shadow@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/synthetic-shadow/-/synthetic-shadow-8.20.5.tgz#58f54bf17347e2b3856de731c0515d9b7d0d3907" + integrity sha512-I0XDj1d/I5SXjiSRq/cuabwgrCIxqouwoR2egokKmLdpu1IBLsROOegQlrAUnSt/eg0gnLOOylVdqekScei4Rg== -"@lwc/template-compiler@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/template-compiler/-/template-compiler-8.21.2.tgz#d379516418bb669da2095464773d138731c401bc" - integrity sha512-A/v/goEZTr0Zb/L9RSDlh+u9qCYDitHliZ3LMKVNNxjXfqTkgg+XOqBmlaaVvk64ewnEhsKGsaTorzSk1ONXrg== +"@lwc/template-compiler@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/template-compiler/-/template-compiler-8.20.5.tgz#16705f0da078b97287232bbad38672ffff92627a" + integrity sha512-JjXOdknLJf16MEt+LrNXfeF82EL9e1hJvcO3wJeh61BSpjcml75iOrqtel/AKGukHE4BJOo4gBRycE7pVa3Ekw== dependencies: - "@lwc/errors" "8.21.2" - "@lwc/shared" "8.21.2" + "@lwc/errors" "8.20.5" + "@lwc/shared" "8.20.5" acorn "~8.15.0" astring "~1.9.0" he "~1.2.0" -"@lwc/types@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/types/-/types-8.21.2.tgz#2b90eb470876fb06d6cb42177a34a2d0dcf66e43" - integrity sha512-Ukol+L5oMIXDdbE/9dYIIKeq4UHSaSu4eBCq7Y2AJ2hh3W53yvgmgiXI2QSFtgGdlYZT4e7Q1AjByA6BJvR6gA== +"@lwc/types@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/types/-/types-8.20.5.tgz#ad6294f64e342dd81ea61f280e78f11d436ad205" + integrity sha512-1eSJTa3Y5N8R7pCSVgFgdz3rp6TTv5z0RwDHp8ZRrgzav5+Cc7FUzGFKvwwe5mnLebw88cm3rmyz0XeC+GidUw== dependencies: - "@lwc/engine-core" "8.21.2" + "@lwc/engine-core" "8.20.5" -"@lwc/wire-service@8.21.2": - version "8.21.2" - resolved "https://registry.yarnpkg.com/@lwc/wire-service/-/wire-service-8.21.2.tgz#5f2b69ad18228a11cf04d9e04546a70b8c251909" - integrity sha512-AQh4U96HpnWYl49iwbpq8P4Av+WQ19uqcCnkyaQe5rQE5iGhuPhwrYJX1rsMeQFeSuKMtsGhCa8Ru84N0KQzmg== +"@lwc/wire-service@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@lwc/wire-service/-/wire-service-8.20.5.tgz#4f3e360f727d4084e06ecaaa98da0dfde00fb856" + integrity sha512-6IL5Brm4quK0evXjl7OXtTr3ipQ3WRmXBYQTQaZk1x9d59HO/6q0P11KVEfyXcjBoa87XiwwXqI31kS0BNEIRQ== "@lwrjs/api@0.18.3": version "0.18.3" @@ -8482,11 +8482,6 @@ lie@~3.3.0: dependencies: immediate "~3.0.5" -lightning-base-components@1.27.2-alpha: - version "1.27.2-alpha" - resolved "https://registry.yarnpkg.com/lightning-base-components/-/lightning-base-components-1.27.2-alpha.tgz#a6cde01e2f271f54d7d6afc4df53d20cd987977d" - integrity sha512-YyxdAVEsECA2JqZnlsBxqPpBEdElfQa88qs5zY+eYHUdjZ/aE15OV0kjcoBB8o/46Z39jkyn+b1Aiy1wDZoqLw== - lilconfig@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" @@ -8738,29 +8733,29 @@ lunr@^2.3.9: resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== -lwc@~8.21.2: - version "8.21.2" - resolved "https://registry.yarnpkg.com/lwc/-/lwc-8.21.2.tgz#5c5ba527830a3e67bd55ecaf09c743ce70419fd1" - integrity sha512-vDDTezLAm1FPnHaFG/JRlx7rIgh5cxgJqlZ7/g+jizPvLxo8eK3OWJX+D+ifL0nfGr7JHj9DWXPgj2kRHX2bMA== - dependencies: - "@lwc/aria-reflection" "8.21.2" - "@lwc/babel-plugin-component" "8.21.2" - "@lwc/compiler" "8.21.2" - "@lwc/engine-core" "8.21.2" - "@lwc/engine-dom" "8.21.2" - "@lwc/engine-server" "8.21.2" - "@lwc/errors" "8.21.2" - "@lwc/features" "8.21.2" - "@lwc/module-resolver" "8.21.2" - "@lwc/rollup-plugin" "8.21.2" - "@lwc/shared" "8.21.2" - "@lwc/ssr-compiler" "8.21.2" - "@lwc/ssr-runtime" "8.21.2" - "@lwc/style-compiler" "8.21.2" - "@lwc/synthetic-shadow" "8.21.2" - "@lwc/template-compiler" "8.21.2" - "@lwc/types" "8.21.2" - "@lwc/wire-service" "8.21.2" +lwc@~8.20.5: + version "8.20.5" + resolved "https://registry.yarnpkg.com/lwc/-/lwc-8.20.5.tgz#ceccd2de07c3702ac519825383c68d3f4862dc30" + integrity sha512-vUUT3rTm8kInN6AfqR65lIytG+7XtkJuKaIhmqZONEcyp3aBlFN/U2UllMa0RcHsixsKB5BOwGkIWcgzPZK3Iw== + dependencies: + "@lwc/aria-reflection" "8.20.5" + "@lwc/babel-plugin-component" "8.20.5" + "@lwc/compiler" "8.20.5" + "@lwc/engine-core" "8.20.5" + "@lwc/engine-dom" "8.20.5" + "@lwc/engine-server" "8.20.5" + "@lwc/errors" "8.20.5" + "@lwc/features" "8.20.5" + "@lwc/module-resolver" "8.20.5" + "@lwc/rollup-plugin" "8.20.5" + "@lwc/shared" "8.20.5" + "@lwc/ssr-compiler" "8.20.5" + "@lwc/ssr-runtime" "8.20.5" + "@lwc/style-compiler" "8.20.5" + "@lwc/synthetic-shadow" "8.20.5" + "@lwc/template-compiler" "8.20.5" + "@lwc/types" "8.20.5" + "@lwc/wire-service" "8.20.5" magic-string@^0.25.3: version "0.25.9"