diff --git a/messages/project.md b/messages/project.md index 92baf59e..7a1208d6 100644 --- a/messages/project.md +++ b/messages/project.md @@ -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 diff --git a/package.json b/package.json index 01c9269c..324ad1c0 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/commands/template/generate/lightning/embedding.ts b/src/commands/template/generate/lightning/embedding.ts index 2a206395..d1e68cb4 100644 --- a/src/commands/template/generate/lightning/embedding.ts +++ b/src/commands/template/generate/lightning/embedding.ts @@ -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'; @@ -40,7 +40,7 @@ export default class LightningEmbedding extends SfCommand { 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); @@ -49,7 +49,7 @@ export default class LightningEmbedding extends SfCommand { 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, })(), @@ -67,7 +67,7 @@ export default class LightningEmbedding extends SfCommand { public async run(): Promise { const { flags } = await this.parse(LightningEmbedding); - const flagsAsOptions: LightningEmbeddingOptions = { + const flagsAsOptions: UIEmbeddingOptions = { componentname: flags.name, src: flags.src, sandbox: flags.sandbox.join(' '), @@ -78,7 +78,7 @@ export default class LightningEmbedding extends SfCommand { }; return runGenerator({ - templateType: TemplateType.LightningEmbedding, + templateType: TemplateType.UIEmbedding, opts: flagsAsOptions, ux: new Ux({ jsonEnabled: this.jsonEnabled() }), templates: getCustomTemplates(this.configAggregator), diff --git a/src/commands/template/generate/project/index.ts b/src/commands/template/generate/project/index.ts index 7964a8c7..833efe00 100644 --- a/src/commands/template/generate/project/index.ts +++ b/src/commands/template/generate/project/index.ts @@ -33,7 +33,7 @@ export default class Project extends SfCommand { 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({ diff --git a/test/commands/template/generate/lightning/embedding.nut.ts b/test/commands/template/generate/lightning/embedding.nut.ts index 61935abf..f811aa1a 100644 --- a/test/commands/template/generate/lightning/embedding.nut.ts +++ b/test/commands/template/generate/lightning/embedding.nut.ts @@ -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`), ' { diff --git a/test/commands/template/generate/project/index.nut.ts b/test/commands/template/generate/project/index.nut.ts index 4910cea6..8c1e7ba6 100644 --- a/test/commands/template/generate/project/index.nut.ts +++ b/test/commands/template/generate/project/index.nut.ts @@ -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,