Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
7ff35b7
feat: add Angular options to sf project generate --template
tarushi-sf Jul 6, 2026
09b360c
fix(deps): bump @salesforce/core from 8.31.4 to 8.31.5
dependabot[bot] Jul 4, 2026
92cbe82
chore(release): 56.18.13 [skip ci]
svc-cli-bot Jul 5, 2026
a235460
chore(dev-deps): bump oclif from 4.23.21 to 4.23.24
dependabot[bot] Jul 4, 2026
a71b806
chore(dev-deps): bump @salesforce/plugin-command-reference
dependabot[bot] Jul 5, 2026
0a725ed
chore(dev-deps): bump @oclif/plugin-command-snapshot
dependabot[bot] Jul 5, 2026
cc7d127
chore(dev-deps): bump oclif from 4.23.24 to 4.23.27
dependabot[bot] Jul 11, 2026
9645065
fix(deps): bump @salesforce/core from 8.31.5 to 8.32.2
dependabot[bot] Jul 11, 2026
e020377
chore(release): 56.18.14 [skip ci]
svc-cli-bot Jul 12, 2026
ca49bcc
chore(dev-deps): bump @salesforce/plugin-command-reference
dependabot[bot] Jul 12, 2026
2a973d9
fix(deps): bump @salesforce/templates from 66.10.4 to 66.11.0
dependabot[bot] Jul 12, 2026
9a270d2
chore(release): 56.18.15 [skip ci]
svc-cli-bot Jul 12, 2026
a12b5c7
fix(deps): bump @salesforce/sf-plugins-core from 12.2.25 to 12.2.26
dependabot[bot] Jul 12, 2026
acc4585
chore(release): 56.18.16 [skip ci]
svc-cli-bot Jul 13, 2026
2610ff2
chore: added schema definitions (W-23365673)
jfeingold35 Jul 15, 2026
4ed11ab
fix(deps): bump websocket-driver from 0.7.4 to 0.7.5
dependabot[bot] Jul 16, 2026
709a7a0
chore(release): 56.18.17 [skip ci]
svc-cli-bot Jul 16, 2026
f127f4b
merge
tarushi-sf Jul 16, 2026
4ae434c
updating templates version
tarushi-sf Jul 21, 2026
6312406
resolving comments
tarushi-sf Jul 21, 2026
4653857
fixing imports
tarushi-sf Jul 21, 2026
4bf298a
fixing tests
tarushi-sf Jul 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions messages/project.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ The analytics template provides similar files and the force-app/main/default/wav

The reactinternalapp and reactexternalapp templates provide React-based project scaffolding for internal and external UI bundle use cases.

The angularinternalapp and angularexternalapp templates provide Angular-based project scaffolding for internal and external UI bundle use cases.

The agent template provides project scaffolding for building Agentforce agents and includes a sample agent called Local Info Agent.

# flags.namespace.summary
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"dependencies": {
"@salesforce/core": "^8.32.2",
"@salesforce/sf-plugins-core": "^12",
"@salesforce/templates": "^66.11.0"
"@salesforce/templates": "^66.13.0"
},
"devDependencies": {
"@oclif/plugin-command-snapshot": "^5.3.30",
Expand Down
14 changes: 7 additions & 7 deletions src/commands/template/generate/lightning/embedding.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
import { Flags, loglevel, orgApiVersionFlagWithDeprecations, SfCommand, Ux } from '@salesforce/sf-plugins-core';
import {
CreateOutput,
isAllowedLightningEmbeddingSrcUrl,
LIGHTNING_EMBEDDING_SANDBOX_TOKENS,
LightningEmbeddingOptions,
isAllowedUIEmbeddingSrcUrl,
UI_EMBEDDING_SANDBOX_TOKENS,
UIEmbeddingOptions,
TemplateType,
} from '@salesforce/templates';
import { Messages } from '@salesforce/core';
Expand Down Expand Up @@ -40,7 +40,7 @@ export default class LightningEmbedding extends SfCommand<CreateOutput> {
description: messages.getMessage('flags.src.description'),
required: true,
parse: (input: string) => {
if (!isAllowedLightningEmbeddingSrcUrl(input)) {
if (!isAllowedUIEmbeddingSrcUrl(input)) {
throw new Error(messages.getMessage('flags.src.error'));
}
return Promise.resolve(input);
Expand All @@ -49,7 +49,7 @@ export default class LightningEmbedding extends SfCommand<CreateOutput> {
sandbox: Flags.option({
summary: messages.getMessage('flags.sandbox.summary'),
description: messages.getMessage('flags.sandbox.description'),
options: LIGHTNING_EMBEDDING_SANDBOX_TOKENS,
options: UI_EMBEDDING_SANDBOX_TOKENS,
multiple: true,
required: true,
})(),
Expand All @@ -67,7 +67,7 @@ export default class LightningEmbedding extends SfCommand<CreateOutput> {
public async run(): Promise<CreateOutput> {
const { flags } = await this.parse(LightningEmbedding);

const flagsAsOptions: LightningEmbeddingOptions = {
const flagsAsOptions: UIEmbeddingOptions = {
componentname: flags.name,
src: flags.src,
sandbox: flags.sandbox.join(' '),
Expand All @@ -78,7 +78,7 @@ export default class LightningEmbedding extends SfCommand<CreateOutput> {
};

return runGenerator({
templateType: TemplateType.LightningEmbedding,
templateType: TemplateType.UIEmbedding,
opts: flagsAsOptions,
ux: new Ux({ jsonEnabled: this.jsonEnabled() }),
templates: getCustomTemplates(this.configAggregator),
Expand Down
2 changes: 1 addition & 1 deletion src/commands/template/generate/project/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export default class Project extends SfCommand<CreateOutput> {
summary: messages.getMessage('flags.template.summary'),
description: messages.getMessage('flags.template.description'),
default: 'standard',
options: ['standard', 'empty', 'analytics', 'reactinternalapp', 'reactexternalapp', 'agent'] as const,
options: ['standard', 'empty', 'analytics', 'reactinternalapp', 'reactexternalapp', 'angularinternalapp', 'angularexternalapp', 'agent'] as const,
})(),
'output-dir': outputDirFlag,
namespace: Flags.string({
Expand Down
2 changes: 1 addition & 1 deletion test/commands/template/generate/lightning/embedding.nut.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ describe('template generate lightning embedding:', () => {
{ ensureExitCode: 0 }
);
const camel = name.charAt(0).toLowerCase() + name.slice(1);
assert.fileContent(path.join(lwcDir(), camel, `${camel}.html`), '<lightning-embedding');
assert.fileContent(path.join(lwcDir(), camel, `${camel}.html`), '<lightning-ui-embedding');
});

it('should join multiple --sandbox tokens into a single space-separated attribute', () => {
Expand Down
44 changes: 44 additions & 0 deletions test/commands/template/generate/project/index.nut.ts
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,50 @@ describe('template generate project:', () => {
assert.fileContent(uiBundleMetaPath, alphanumericName);
});

it('should create project with angularexternalapp template', () => {
const projectName = 'angular-externalapp-test';
const alphanumericName = 'angularexternalapptest';
execCmd(`template generate project --projectname ${projectName} --template angularexternalapp`, {
ensureExitCode: 0,
});
const projectDir = path.join(session.project.dir, projectName);
assert.file([path.join(projectDir, 'sfdx-project.json')]);
assert.fileContent(path.join(projectDir, 'sfdx-project.json'), 'sourceApiVersion');
const uiBundleMetaPath = path.join(
projectDir,
'force-app',
'main',
'default',
'uiBundles',
alphanumericName,
`${alphanumericName}.uibundle-meta.xml`
);
assert.file([uiBundleMetaPath]);
assert.fileContent(uiBundleMetaPath, alphanumericName);
});

it('should create project with angularinternalapp template', () => {
const projectName = 'angular-internalapp-test';
const alphanumericName = 'angularinternalapptest';
execCmd(`template generate project --projectname ${projectName} --template angularinternalapp`, {
ensureExitCode: 0,
});
const projectDir = path.join(session.project.dir, projectName);
assert.file([path.join(projectDir, 'sfdx-project.json')]);
assert.fileContent(path.join(projectDir, 'sfdx-project.json'), 'sourceApiVersion');
const uiBundleMetaPath = path.join(
projectDir,
'force-app',
'main',
'default',
'uiBundles',
alphanumericName,
`${alphanumericName}.uibundle-meta.xml`
);
assert.file([uiBundleMetaPath]);
assert.fileContent(uiBundleMetaPath, alphanumericName);
});

it('should create project with agent template', () => {
execCmd('template generate project --projectname agent1 --template agent --manifest', {
ensureExitCode: 0,
Expand Down
Loading