From 2efbb0b328e4f8d78d45f5ec25b63c183497ec10 Mon Sep 17 00:00:00 2001 From: Ian Clanton-Thuon Date: Mon, 23 Mar 2026 16:21:24 -0400 Subject: [PATCH 1/8] Handle SPFx version numbers that contain hyphens. (#163) ## Description Handle SPFx version numbers that contain hyphens. Previously, the `shields.io` URLs would be malformed. ## How was this tested? Tested against https://github.com/SharePoint/spfx/pull/162. ## Type of change - [x] Bug fix - [ ] New feature / enhancement - [ ] Template change - [ ] Documentation / CI / governance --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- apps/spfx-cli/src/cli/actions/CreateAction.ts | 3 + .../cli/actions/tests/CreateAction.test.ts | 43 ++++- .../__snapshots__/CreateAction.test.ts.snap | 22 +++ ...x-shields-badge-urls_2026-03-23-19-40.json | 11 ++ common/docs/template-style-guide.md | 8 +- examples/ace-generic-image-card/README.md | 154 +++++++++--------- .../ace-generic-primarytext-card/README.md | 154 +++++++++--------- examples/library/README.md | 154 +++++++++--------- examples/webpart-minimal/README.md | 152 ++++++++--------- examples/webpart-react/README.md | 152 ++++++++--------- templates/ace-data-visualization/README.md | 2 +- templates/ace-generic-card/README.md | 2 +- templates/ace-generic-image-card/README.md | 154 +++++++++--------- .../ace-generic-primarytext-card/README.md | 154 +++++++++--------- templates/ace-search-card/README.md | 2 +- .../README.md | 2 +- .../README.md | 2 +- .../README.md | 2 +- .../extension-fieldcustomizer-react/README.md | 2 +- .../README.md | 2 +- .../extension-formcustomizer-react/README.md | 2 +- .../extension-listviewcommandset/README.md | 2 +- .../extension-search-query-modifier/README.md | 2 +- templates/library/README.md | 154 +++++++++--------- templates/webpart-minimal/README.md | 152 ++++++++--------- templates/webpart-noframework/README.md | 2 +- templates/webpart-react/README.md | 152 ++++++++--------- 27 files changed, 856 insertions(+), 787 deletions(-) create mode 100644 common/changes/@microsoft/spfx-cli/fix-shields-badge-urls_2026-03-23-19-40.json diff --git a/apps/spfx-cli/src/cli/actions/CreateAction.ts b/apps/spfx-cli/src/cli/actions/CreateAction.ts index f43cc337..b02db8a0 100644 --- a/apps/spfx-cli/src/cli/actions/CreateAction.ts +++ b/apps/spfx-cli/src/cli/actions/CreateAction.ts @@ -242,6 +242,9 @@ export class CreateAction extends CommandLineAction { eslintProfile: 'react', libraryName: this._libraryNameParameter.value, spfxVersion: template.spfxVersion, + // The shields.io badge URL uses dashes as separators, so dashes in version numbers + // need to be escaped as double dashes to avoid ambiguity. For example, "1.23.0-beta.0" becomes "1.23.0--beta.0". + spfxVersionForBadgeUrl: template.spfxVersion.replace(/-/g, '--'), componentId: componentId, featureId: featureId, solutionId: solutionId, diff --git a/apps/spfx-cli/src/cli/actions/tests/CreateAction.test.ts b/apps/spfx-cli/src/cli/actions/tests/CreateAction.test.ts index 7461c917..c549ff4a 100644 --- a/apps/spfx-cli/src/cli/actions/tests/CreateAction.test.ts +++ b/apps/spfx-cli/src/cli/actions/tests/CreateAction.test.ts @@ -23,12 +23,6 @@ const MockedLocal = LocalFileSystemRepositorySource as jest.MockedClass< // Minimal mocks for a happy-path run const mockMemFs = { dump: jest.fn().mockReturnValue({}) }; -const mockTemplate = { - renderAsync: jest.fn().mockResolvedValue(mockMemFs), - spfxVersion: '1.22.1' -}; -const mockCollection = new Map([['webpart-minimal', mockTemplate]]); -mockCollection.toString = () => '[Mocked SPFxTemplateCollection]'; const REQUIRED_ARGS: string[] = [ '--template', @@ -89,12 +83,20 @@ describe('SOLUTION_NAME_PATTERN', () => { describe('CreateAction', () => { const originalEnv = process.env; + let mockTemplate: { renderAsync: jest.Mock; spfxVersion: string }; beforeEach(() => { jest.clearAllMocks(); process.env = { ...originalEnv }; delete process.env[SPFX_TEMPLATE_REPO_URL_ENV_VAR_NAME]; + mockTemplate = { + renderAsync: jest.fn().mockResolvedValue(mockMemFs), + spfxVersion: '1.22.1' + }; + const mockCollection = new Map([['webpart-minimal', mockTemplate]]); + mockCollection.toString = () => '[Mocked SPFxTemplateCollection]'; + MockedManager.prototype.getTemplatesAsync.mockResolvedValue( mockCollection as unknown as SPFxTemplateCollection ); @@ -319,6 +321,35 @@ describe('CreateAction', () => { }); }); + describe('spfxVersionForBadgeUrl', () => { + it('escapes hyphens in prerelease versions for shields.io badge URLs', async () => { + mockTemplate.spfxVersion = '1.23.0-beta.0'; + await runCreateAsync(); + expect(mockTemplate.renderAsync).toHaveBeenCalledWith( + expect.objectContaining({ + spfxVersion: '1.23.0-beta.0', + spfxVersionForBadgeUrl: '1.23.0--beta.0' + }), + expect.anything(), + expect.anything() + ); + mockTemplate.spfxVersion = '1.22.1'; + }); + + it('leaves stable versions unchanged', async () => { + mockTemplate.spfxVersion = '1.22.1'; + await runCreateAsync(); + expect(mockTemplate.renderAsync).toHaveBeenCalledWith( + expect.objectContaining({ + spfxVersion: '1.22.1', + spfxVersionForBadgeUrl: '1.22.1' + }), + expect.anything(), + expect.anything() + ); + }); + }); + describe('error handling', () => { it('throws with a message mentioning --local-template when fetch fails', async () => { MockedManager.prototype.getTemplatesAsync.mockRejectedValue(new Error('ENOTFOUND')); diff --git a/apps/spfx-cli/src/cli/actions/tests/__snapshots__/CreateAction.test.ts.snap b/apps/spfx-cli/src/cli/actions/tests/__snapshots__/CreateAction.test.ts.snap index 29b39226..37680b72 100644 --- a/apps/spfx-cli/src/cli/actions/tests/__snapshots__/CreateAction.test.ts.snap +++ b/apps/spfx-cli/src/cli/actions/tests/__snapshots__/CreateAction.test.ts.snap @@ -212,6 +212,28 @@ Array [ ] `; +exports[`CreateAction spfxVersionForBadgeUrl escapes hyphens in prerelease versions for shields.io badge URLs 1`] = ` +Array [ + "[ log] Using GitHub template source: https://github.com/SharePoint/spfx[n]", + "[ log] [Mocked SPFxTemplateCollection][n]", + "[ log] targetDir: /tmp/test[n]", + "[ log] [n]", + "[ log] The following files will be modified:[n]", + "[ log] [n]", +] +`; + +exports[`CreateAction spfxVersionForBadgeUrl leaves stable versions unchanged 1`] = ` +Array [ + "[ log] Using GitHub template source: https://github.com/SharePoint/spfx[n]", + "[ log] [Mocked SPFxTemplateCollection][n]", + "[ log] targetDir: /tmp/test[n]", + "[ log] [n]", + "[ log] The following files will be modified:[n]", + "[ log] [n]", +] +`; + exports[`CreateAction whitespace env var fix falls back to default URL when SPFX_TEMPLATE_REPO_URL is whitespace-only 1`] = ` Array [ "[ log] Using GitHub template source: https://github.com/SharePoint/spfx[n]", diff --git a/common/changes/@microsoft/spfx-cli/fix-shields-badge-urls_2026-03-23-19-40.json b/common/changes/@microsoft/spfx-cli/fix-shields-badge-urls_2026-03-23-19-40.json new file mode 100644 index 00000000..0d6f227d --- /dev/null +++ b/common/changes/@microsoft/spfx-cli/fix-shields-badge-urls_2026-03-23-19-40.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@microsoft/spfx-cli" + } + ], + "packageName": "@microsoft/spfx-cli", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/docs/template-style-guide.md b/common/docs/template-style-guide.md index b3ac3163..f75d8ebd 100644 --- a/common/docs/template-style-guide.md +++ b/common/docs/template-style-guide.md @@ -87,16 +87,18 @@ PropertyPaneDescription: 'Description for property pane', ## Version Management -Always use the `spfxVersion` variable — never hardcode version numbers. +Always use the `spfxVersion` variable — never hardcode version numbers. For shields.io badge +URLs, use `spfxVersionForBadgeUrl` instead, which escapes hyphens so the badge renders correctly +for prerelease versions like `1.23.0-beta.0`. ```json "@microsoft/sp-core-library": "~<%= spfxVersion %>" ``` -In README badges: +In README badges (use `spfxVersionForBadgeUrl` to escape hyphens for shields.io): ```markdown -![version](https://img.shields.io/badge/version-<%= spfxVersion %>-blue) +![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-blue) ``` In `package-solution.json`: diff --git a/examples/ace-generic-image-card/README.md b/examples/ace-generic-image-card/README.md index f3541592..9f60b01f 100644 --- a/examples/ace-generic-image-card/README.md +++ b/examples/ace-generic-image-card/README.md @@ -1,77 +1,77 @@ -# @spfx-template/ace-generic-image-card - -## Summary - -GenericImageCard Description - -[picture of the solution in action, if possible] - -## Used SharePoint Framework Version - -[![version](https://img.shields.io/badge/version-1.22.2-green.svg)](https://img.shields.io/badge/version-1.22.2-green.svg) - -## Applies to - -- [SharePoint Framework](https://aka.ms/spfx) -- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) - -> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) - -## Prerequisites - -> Any special pre-requisites? - -## Solution - -| Solution | Author(s) | -| ----------- | ------------------------------------------------------- | -| folder name | Author details (name, company, twitter alias with link) | - -## Version history - -| Version | Date | Comments | -| ------- | ---------------- | --------------- | -| 1.1 | March 10, 2021 | Update comment | -| 1.0 | January 29, 2021 | Initial release | - -## Disclaimer - -**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** - ---- - -## Minimal Path to Awesome - -- Clone this repository -- Ensure that you are at the solution folder -- in the command-line run: - - `npm install -g @rushstack/heft` - - `npm install` - - `heft start` - -> Include any additional steps as needed. - -Other build commands can be listed using `heft --help`. - -## Features - -Description of the extension that expands upon high-level summary above. - -This extension illustrates the following concepts: - -- topic 1 -- topic 2 -- topic 3 - -> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions in advance. - -> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. - -## References - -- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) -- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) -- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) -- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) -- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development -- [Heft Documentation](https://heft.rushstack.io/) +# @spfx-template/ace-generic-image-card + +## Summary + +GenericImageCard Description + +[picture of the solution in action, if possible] + +## Used SharePoint Framework Version + +[![version](https://img.shields.io/badge/version-1.22.2-green.svg)](https://img.shields.io/badge/version-1.22.2-green.svg) + +## Applies to + +- [SharePoint Framework](https://aka.ms/spfx) +- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) + +> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) + +## Prerequisites + +> Any special pre-requisites? + +## Solution + +| Solution | Author(s) | +| ----------- | ------------------------------------------------------- | +| folder name | Author details (name, company, twitter alias with link) | + +## Version history + +| Version | Date | Comments | +| ------- | ---------------- | --------------- | +| 1.1 | March 10, 2021 | Update comment | +| 1.0 | January 29, 2021 | Initial release | + +## Disclaimer + +**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +--- + +## Minimal Path to Awesome + +- Clone this repository +- Ensure that you are at the solution folder +- in the command-line run: + - `npm install -g @rushstack/heft` + - `npm install` + - `heft start` + +> Include any additional steps as needed. + +Other build commands can be listed using `heft --help`. + +## Features + +Description of the extension that expands upon high-level summary above. + +This extension illustrates the following concepts: + +- topic 1 +- topic 2 +- topic 3 + +> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions in advance. + +> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. + +## References + +- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) +- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) +- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) +- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) +- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development +- [Heft Documentation](https://heft.rushstack.io/) diff --git a/examples/ace-generic-primarytext-card/README.md b/examples/ace-generic-primarytext-card/README.md index 21452307..160cd524 100644 --- a/examples/ace-generic-primarytext-card/README.md +++ b/examples/ace-generic-primarytext-card/README.md @@ -1,77 +1,77 @@ -# @spfx-template/ace-generic-primarytext-card - -## Summary - -GenericPrimaryTextCard Description - -[picture of the solution in action, if possible] - -## Used SharePoint Framework Version - -[![version](https://img.shields.io/badge/version-1.22.2-green.svg)](https://img.shields.io/badge/version-1.22.2-green.svg) - -## Applies to - -- [SharePoint Framework](https://aka.ms/spfx) -- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) - -> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) - -## Prerequisites - -> Any special pre-requisites? - -## Solution - -| Solution | Author(s) | -| ----------- | ------------------------------------------------------- | -| folder name | Author details (name, company, twitter alias with link) | - -## Version history - -| Version | Date | Comments | -| ------- | ---------------- | --------------- | -| 1.1 | March 10, 2021 | Update comment | -| 1.0 | January 29, 2021 | Initial release | - -## Disclaimer - -**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** - ---- - -## Minimal Path to Awesome - -- Clone this repository -- Ensure that you are at the solution folder -- in the command-line run: - - `npm install -g @rushstack/heft` - - `npm install` - - `heft start` - -> Include any additional steps as needed. - -Other build commands can be listed using `heft --help`. - -## Features - -Description of the extension that expands upon high-level summary above. - -This extension illustrates the following concepts: - -- topic 1 -- topic 2 -- topic 3 - -> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions in advance. - -> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. - -## References - -- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) -- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) -- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) -- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) -- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development -- [Heft Documentation](https://heft.rushstack.io/) +# @spfx-template/ace-generic-primarytext-card + +## Summary + +GenericPrimaryTextCard Description + +[picture of the solution in action, if possible] + +## Used SharePoint Framework Version + +[![version](https://img.shields.io/badge/version-1.22.2-green.svg)](https://img.shields.io/badge/version-1.22.2-green.svg) + +## Applies to + +- [SharePoint Framework](https://aka.ms/spfx) +- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) + +> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) + +## Prerequisites + +> Any special pre-requisites? + +## Solution + +| Solution | Author(s) | +| ----------- | ------------------------------------------------------- | +| folder name | Author details (name, company, twitter alias with link) | + +## Version history + +| Version | Date | Comments | +| ------- | ---------------- | --------------- | +| 1.1 | March 10, 2021 | Update comment | +| 1.0 | January 29, 2021 | Initial release | + +## Disclaimer + +**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +--- + +## Minimal Path to Awesome + +- Clone this repository +- Ensure that you are at the solution folder +- in the command-line run: + - `npm install -g @rushstack/heft` + - `npm install` + - `heft start` + +> Include any additional steps as needed. + +Other build commands can be listed using `heft --help`. + +## Features + +Description of the extension that expands upon high-level summary above. + +This extension illustrates the following concepts: + +- topic 1 +- topic 2 +- topic 3 + +> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions in advance. + +> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. + +## References + +- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) +- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) +- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) +- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) +- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development +- [Heft Documentation](https://heft.rushstack.io/) diff --git a/examples/library/README.md b/examples/library/README.md index da905fd8..e1794ad8 100644 --- a/examples/library/README.md +++ b/examples/library/README.md @@ -1,77 +1,77 @@ -# @spfx-template/library - -## Summary - -Library Description - -[picture of the solution in action, if possible] - -## Used SharePoint Framework Version - -[![version](https://img.shields.io/badge/version-1.22.2-green.svg)](https://img.shields.io/badge/version-1.22.2-green.svg) - -## Applies to - -- [SharePoint Framework](https://aka.ms/spfx) -- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) - -> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) - -## Prerequisites - -> Any special pre-requisites? - -## Solution - -| Solution | Author(s) | -| ----------- | ------------------------------------------------------- | -| folder name | Author details (name, company, twitter alias with link) | - -## Version history - -| Version | Date | Comments | -| ------- | ---------------- | --------------- | -| 1.1 | March 10, 2021 | Update comment | -| 1.0 | January 29, 2021 | Initial release | - -## Disclaimer - -**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** - ---- - -## Minimal Path to Awesome - -- Clone this repository -- Ensure that you are at the solution folder -- in the command-line run: - - `npm install -g @rushstack/heft` - - `npm install` - - `heft start` - -> Include any additional steps as needed. - -Other build commands can be listed using `heft --help`. - -## Features - -Description of the library that expands upon high-level summary above. - -This library illustrates the following concepts: - -- topic 1 -- topic 2 -- topic 3 - -> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions in advance. - -> Share your library with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. - -## References - -- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) -- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) -- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) -- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) -- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development -- [Heft Documentation](https://heft.rushstack.io/) +# @spfx-template/library + +## Summary + +Library Description + +[picture of the solution in action, if possible] + +## Used SharePoint Framework Version + +[![version](https://img.shields.io/badge/version-1.22.2-green.svg)](https://img.shields.io/badge/version-1.22.2-green.svg) + +## Applies to + +- [SharePoint Framework](https://aka.ms/spfx) +- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) + +> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) + +## Prerequisites + +> Any special pre-requisites? + +## Solution + +| Solution | Author(s) | +| ----------- | ------------------------------------------------------- | +| folder name | Author details (name, company, twitter alias with link) | + +## Version history + +| Version | Date | Comments | +| ------- | ---------------- | --------------- | +| 1.1 | March 10, 2021 | Update comment | +| 1.0 | January 29, 2021 | Initial release | + +## Disclaimer + +**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +--- + +## Minimal Path to Awesome + +- Clone this repository +- Ensure that you are at the solution folder +- in the command-line run: + - `npm install -g @rushstack/heft` + - `npm install` + - `heft start` + +> Include any additional steps as needed. + +Other build commands can be listed using `heft --help`. + +## Features + +Description of the library that expands upon high-level summary above. + +This library illustrates the following concepts: + +- topic 1 +- topic 2 +- topic 3 + +> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions in advance. + +> Share your library with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. + +## References + +- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) +- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) +- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) +- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) +- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development +- [Heft Documentation](https://heft.rushstack.io/) diff --git a/examples/webpart-minimal/README.md b/examples/webpart-minimal/README.md index c7bcaa06..09a825fa 100644 --- a/examples/webpart-minimal/README.md +++ b/examples/webpart-minimal/README.md @@ -1,77 +1,77 @@ -# @spfx-template/webpart-minimal - -## Summary - -Short summary on functionality and used technologies. - -[picture of the solution in action, if possible] - -## Used SharePoint Framework Version - -[![version](https://img.shields.io/badge/version-1.22.2-green.svg)](https://img.shields.io/badge/version-1.22.2-green.svg) - -## Applies to - -- [SharePoint Framework](https://aka.ms/spfx) -- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) - -> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) - -## Prerequisites - -> Any special pre-requisites? - -## Solution - -| Solution | Author(s) | -| ----------- | ------------------------------------------------------- | -| folder name | Author details (name, company, twitter alias with link) | - -## Version history - -| Version | Date | Comments | -| ------- | ---------------- | --------------- | -| 1.1 | March 10, 2021 | Update comment | -| 1.0 | January 29, 2021 | Initial release | - -## Disclaimer - -**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** - ---- - -## Minimal Path to Awesome - -- Clone this repository -- Ensure that you are at the solution folder -- in the command-line run: - - `npm install -g @rushstack/heft` - - `npm install` - - `heft start` - -> Include any additional steps as needed. - -Other build commands can be listed using `heft --help`. - -## Features - -Description of the extension that expands upon high-level summary above. - -This extension illustrates the following concepts: - -- topic 1 -- topic 2 -- topic 3 - -> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions advance. - -> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. - -## References - -- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) -- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) -- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) -- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) -- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development +# @spfx-template/webpart-minimal + +## Summary + +Short summary on functionality and used technologies. + +[picture of the solution in action, if possible] + +## Used SharePoint Framework Version + +[![version](https://img.shields.io/badge/version-1.22.2-green.svg)](https://img.shields.io/badge/version-1.22.2-green.svg) + +## Applies to + +- [SharePoint Framework](https://aka.ms/spfx) +- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) + +> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) + +## Prerequisites + +> Any special pre-requisites? + +## Solution + +| Solution | Author(s) | +| ----------- | ------------------------------------------------------- | +| folder name | Author details (name, company, twitter alias with link) | + +## Version history + +| Version | Date | Comments | +| ------- | ---------------- | --------------- | +| 1.1 | March 10, 2021 | Update comment | +| 1.0 | January 29, 2021 | Initial release | + +## Disclaimer + +**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +--- + +## Minimal Path to Awesome + +- Clone this repository +- Ensure that you are at the solution folder +- in the command-line run: + - `npm install -g @rushstack/heft` + - `npm install` + - `heft start` + +> Include any additional steps as needed. + +Other build commands can be listed using `heft --help`. + +## Features + +Description of the extension that expands upon high-level summary above. + +This extension illustrates the following concepts: + +- topic 1 +- topic 2 +- topic 3 + +> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions advance. + +> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. + +## References + +- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) +- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) +- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) +- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) +- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development - [Heft Documentation](https://heft.rushstack.io/) \ No newline at end of file diff --git a/examples/webpart-react/README.md b/examples/webpart-react/README.md index b97acffe..efa0467f 100644 --- a/examples/webpart-react/README.md +++ b/examples/webpart-react/README.md @@ -1,77 +1,77 @@ -# @spfx-template/webpart-react - -## Summary - -Minimal Web Part Description - -[picture of the solution in action, if possible] - -## Used SharePoint Framework Version - -[![version](https://img.shields.io/badge/version-1.22.2-green.svg)](https://img.shields.io/badge/version-1.22.2-green.svg) - -## Applies to - -- [SharePoint Framework](https://aka.ms/spfx) -- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) - -> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) - -## Prerequisites - -> Any special pre-requisites? - -## Solution - -| Solution | Author(s) | -| ----------- | ------------------------------------------------------- | -| folder name | Author details (name, company, twitter alias with link) | - -## Version history - -| Version | Date | Comments | -| ------- | ---------------- | --------------- | -| 1.1 | March 10, 2021 | Update comment | -| 1.0 | January 29, 2021 | Initial release | - -## Disclaimer - -**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** - ---- - -## Minimal Path to Awesome - -- Clone this repository -- Ensure that you are at the solution folder -- in the command-line run: - - `npm install -g @rushstack/heft` - - `npm install` - - `heft start` - -> Include any additional steps as needed. - -Other build commands can be listed using `heft --help`. - -## Features - -Description of the extension that expands upon high-level summary above. - -This extension illustrates the following concepts: - -- topic 1 -- topic 2 -- topic 3 - -> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions advance. - -> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. - -## References - -- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) -- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) -- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) -- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) -- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development +# @spfx-template/webpart-react + +## Summary + +Minimal Web Part Description + +[picture of the solution in action, if possible] + +## Used SharePoint Framework Version + +[![version](https://img.shields.io/badge/version-1.22.2-green.svg)](https://img.shields.io/badge/version-1.22.2-green.svg) + +## Applies to + +- [SharePoint Framework](https://aka.ms/spfx) +- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) + +> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) + +## Prerequisites + +> Any special pre-requisites? + +## Solution + +| Solution | Author(s) | +| ----------- | ------------------------------------------------------- | +| folder name | Author details (name, company, twitter alias with link) | + +## Version history + +| Version | Date | Comments | +| ------- | ---------------- | --------------- | +| 1.1 | March 10, 2021 | Update comment | +| 1.0 | January 29, 2021 | Initial release | + +## Disclaimer + +**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +--- + +## Minimal Path to Awesome + +- Clone this repository +- Ensure that you are at the solution folder +- in the command-line run: + - `npm install -g @rushstack/heft` + - `npm install` + - `heft start` + +> Include any additional steps as needed. + +Other build commands can be listed using `heft --help`. + +## Features + +Description of the extension that expands upon high-level summary above. + +This extension illustrates the following concepts: + +- topic 1 +- topic 2 +- topic 3 + +> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions advance. + +> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. + +## References + +- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) +- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) +- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) +- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) +- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development - [Heft Documentation](https://heft.rushstack.io/) \ No newline at end of file diff --git a/templates/ace-data-visualization/README.md b/templates/ace-data-visualization/README.md index e661aa98..44a753b6 100644 --- a/templates/ace-data-visualization/README.md +++ b/templates/ace-data-visualization/README.md @@ -8,7 +8,7 @@ Short summary on functionality and used technologies. ## Used SharePoint Framework Version -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) ## Applies to diff --git a/templates/ace-generic-card/README.md b/templates/ace-generic-card/README.md index 3df3f5d1..4396c576 100644 --- a/templates/ace-generic-card/README.md +++ b/templates/ace-generic-card/README.md @@ -8,7 +8,7 @@ ## Used SharePoint Framework Version -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) ## Applies to diff --git a/templates/ace-generic-image-card/README.md b/templates/ace-generic-image-card/README.md index ee26485b..91e4e19d 100644 --- a/templates/ace-generic-image-card/README.md +++ b/templates/ace-generic-image-card/README.md @@ -1,77 +1,77 @@ -# <%= libraryName %> - -## Summary - -<%= componentDescription %> - -[picture of the solution in action, if possible] - -## Used SharePoint Framework Version - -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) - -## Applies to - -- [SharePoint Framework](https://aka.ms/spfx) -- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) - -> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) - -## Prerequisites - -> Any special pre-requisites? - -## Solution - -| Solution | Author(s) | -| ----------- | ------------------------------------------------------- | -| folder name | Author details (name, company, twitter alias with link) | - -## Version history - -| Version | Date | Comments | -| ------- | ---------------- | --------------- | -| 1.1 | March 10, 2021 | Update comment | -| 1.0 | January 29, 2021 | Initial release | - -## Disclaimer - -**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** - ---- - -## Minimal Path to Awesome - -- Clone this repository -- Ensure that you are at the solution folder -- in the command-line run: - - `npm install -g @rushstack/heft` - - `npm install` - - `heft start` - -> Include any additional steps as needed. - -Other build commands can be listed using `heft --help`. - -## Features - -Description of the extension that expands upon high-level summary above. - -This extension illustrates the following concepts: - -- topic 1 -- topic 2 -- topic 3 - -> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions in advance. - -> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. - -## References - -- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) -- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) -- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) -- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) -- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development -- [Heft Documentation](https://heft.rushstack.io/) +# <%= libraryName %> + +## Summary + +<%= componentDescription %> + +[picture of the solution in action, if possible] + +## Used SharePoint Framework Version + +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) + +## Applies to + +- [SharePoint Framework](https://aka.ms/spfx) +- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) + +> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) + +## Prerequisites + +> Any special pre-requisites? + +## Solution + +| Solution | Author(s) | +| ----------- | ------------------------------------------------------- | +| folder name | Author details (name, company, twitter alias with link) | + +## Version history + +| Version | Date | Comments | +| ------- | ---------------- | --------------- | +| 1.1 | March 10, 2021 | Update comment | +| 1.0 | January 29, 2021 | Initial release | + +## Disclaimer + +**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +--- + +## Minimal Path to Awesome + +- Clone this repository +- Ensure that you are at the solution folder +- in the command-line run: + - `npm install -g @rushstack/heft` + - `npm install` + - `heft start` + +> Include any additional steps as needed. + +Other build commands can be listed using `heft --help`. + +## Features + +Description of the extension that expands upon high-level summary above. + +This extension illustrates the following concepts: + +- topic 1 +- topic 2 +- topic 3 + +> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions in advance. + +> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. + +## References + +- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) +- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) +- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) +- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) +- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development +- [Heft Documentation](https://heft.rushstack.io/) diff --git a/templates/ace-generic-primarytext-card/README.md b/templates/ace-generic-primarytext-card/README.md index ee26485b..91e4e19d 100644 --- a/templates/ace-generic-primarytext-card/README.md +++ b/templates/ace-generic-primarytext-card/README.md @@ -1,77 +1,77 @@ -# <%= libraryName %> - -## Summary - -<%= componentDescription %> - -[picture of the solution in action, if possible] - -## Used SharePoint Framework Version - -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) - -## Applies to - -- [SharePoint Framework](https://aka.ms/spfx) -- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) - -> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) - -## Prerequisites - -> Any special pre-requisites? - -## Solution - -| Solution | Author(s) | -| ----------- | ------------------------------------------------------- | -| folder name | Author details (name, company, twitter alias with link) | - -## Version history - -| Version | Date | Comments | -| ------- | ---------------- | --------------- | -| 1.1 | March 10, 2021 | Update comment | -| 1.0 | January 29, 2021 | Initial release | - -## Disclaimer - -**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** - ---- - -## Minimal Path to Awesome - -- Clone this repository -- Ensure that you are at the solution folder -- in the command-line run: - - `npm install -g @rushstack/heft` - - `npm install` - - `heft start` - -> Include any additional steps as needed. - -Other build commands can be listed using `heft --help`. - -## Features - -Description of the extension that expands upon high-level summary above. - -This extension illustrates the following concepts: - -- topic 1 -- topic 2 -- topic 3 - -> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions in advance. - -> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. - -## References - -- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) -- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) -- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) -- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) -- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development -- [Heft Documentation](https://heft.rushstack.io/) +# <%= libraryName %> + +## Summary + +<%= componentDescription %> + +[picture of the solution in action, if possible] + +## Used SharePoint Framework Version + +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) + +## Applies to + +- [SharePoint Framework](https://aka.ms/spfx) +- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) + +> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) + +## Prerequisites + +> Any special pre-requisites? + +## Solution + +| Solution | Author(s) | +| ----------- | ------------------------------------------------------- | +| folder name | Author details (name, company, twitter alias with link) | + +## Version history + +| Version | Date | Comments | +| ------- | ---------------- | --------------- | +| 1.1 | March 10, 2021 | Update comment | +| 1.0 | January 29, 2021 | Initial release | + +## Disclaimer + +**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +--- + +## Minimal Path to Awesome + +- Clone this repository +- Ensure that you are at the solution folder +- in the command-line run: + - `npm install -g @rushstack/heft` + - `npm install` + - `heft start` + +> Include any additional steps as needed. + +Other build commands can be listed using `heft --help`. + +## Features + +Description of the extension that expands upon high-level summary above. + +This extension illustrates the following concepts: + +- topic 1 +- topic 2 +- topic 3 + +> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions in advance. + +> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. + +## References + +- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) +- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) +- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) +- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) +- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development +- [Heft Documentation](https://heft.rushstack.io/) diff --git a/templates/ace-search-card/README.md b/templates/ace-search-card/README.md index 3df3f5d1..4396c576 100644 --- a/templates/ace-search-card/README.md +++ b/templates/ace-search-card/README.md @@ -8,7 +8,7 @@ ## Used SharePoint Framework Version -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) ## Applies to diff --git a/templates/extension-application-customizer/README.md b/templates/extension-application-customizer/README.md index bf8f078a..20fa8164 100644 --- a/templates/extension-application-customizer/README.md +++ b/templates/extension-application-customizer/README.md @@ -8,7 +8,7 @@ ## Used SharePoint Framework Version -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) ## Applies to diff --git a/templates/extension-fieldcustomizer-minimal/README.md b/templates/extension-fieldcustomizer-minimal/README.md index a84caa4e..91e4e19d 100644 --- a/templates/extension-fieldcustomizer-minimal/README.md +++ b/templates/extension-fieldcustomizer-minimal/README.md @@ -8,7 +8,7 @@ ## Used SharePoint Framework Version -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) ## Applies to diff --git a/templates/extension-fieldcustomizer-noframework/README.md b/templates/extension-fieldcustomizer-noframework/README.md index b94beb60..36b35940 100644 --- a/templates/extension-fieldcustomizer-noframework/README.md +++ b/templates/extension-fieldcustomizer-noframework/README.md @@ -8,7 +8,7 @@ ## Used SharePoint Framework Version -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) ## Applies to diff --git a/templates/extension-fieldcustomizer-react/README.md b/templates/extension-fieldcustomizer-react/README.md index b94beb60..36b35940 100644 --- a/templates/extension-fieldcustomizer-react/README.md +++ b/templates/extension-fieldcustomizer-react/README.md @@ -8,7 +8,7 @@ ## Used SharePoint Framework Version -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) ## Applies to diff --git a/templates/extension-formcustomizer-noframework/README.md b/templates/extension-formcustomizer-noframework/README.md index 413eb380..54606854 100644 --- a/templates/extension-formcustomizer-noframework/README.md +++ b/templates/extension-formcustomizer-noframework/README.md @@ -8,7 +8,7 @@ ## Used SharePoint Framework Version -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) ## Applies to diff --git a/templates/extension-formcustomizer-react/README.md b/templates/extension-formcustomizer-react/README.md index be5fe98d..099e7f02 100644 --- a/templates/extension-formcustomizer-react/README.md +++ b/templates/extension-formcustomizer-react/README.md @@ -8,7 +8,7 @@ ## Used SharePoint Framework Version -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) ## Applies to diff --git a/templates/extension-listviewcommandset/README.md b/templates/extension-listviewcommandset/README.md index bf8f078a..20fa8164 100644 --- a/templates/extension-listviewcommandset/README.md +++ b/templates/extension-listviewcommandset/README.md @@ -8,7 +8,7 @@ ## Used SharePoint Framework Version -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) ## Applies to diff --git a/templates/extension-search-query-modifier/README.md b/templates/extension-search-query-modifier/README.md index a84caa4e..91e4e19d 100644 --- a/templates/extension-search-query-modifier/README.md +++ b/templates/extension-search-query-modifier/README.md @@ -8,7 +8,7 @@ ## Used SharePoint Framework Version -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) ## Applies to diff --git a/templates/library/README.md b/templates/library/README.md index 09a84d65..483162cc 100644 --- a/templates/library/README.md +++ b/templates/library/README.md @@ -1,77 +1,77 @@ -# <%= libraryName %> - -## Summary - -<%= componentDescription %> - -[picture of the solution in action, if possible] - -## Used SharePoint Framework Version - -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) - -## Applies to - -- [SharePoint Framework](https://aka.ms/spfx) -- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) - -> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) - -## Prerequisites - -> Any special pre-requisites? - -## Solution - -| Solution | Author(s) | -| ----------- | ------------------------------------------------------- | -| folder name | Author details (name, company, twitter alias with link) | - -## Version history - -| Version | Date | Comments | -| ------- | ---------------- | --------------- | -| 1.1 | March 10, 2021 | Update comment | -| 1.0 | January 29, 2021 | Initial release | - -## Disclaimer - -**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** - ---- - -## Minimal Path to Awesome - -- Clone this repository -- Ensure that you are at the solution folder -- in the command-line run: - - `npm install -g @rushstack/heft` - - `npm install` - - `heft start` - -> Include any additional steps as needed. - -Other build commands can be listed using `heft --help`. - -## Features - -Description of the library that expands upon high-level summary above. - -This library illustrates the following concepts: - -- topic 1 -- topic 2 -- topic 3 - -> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions in advance. - -> Share your library with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. - -## References - -- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) -- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) -- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) -- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) -- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development -- [Heft Documentation](https://heft.rushstack.io/) +# <%= libraryName %> + +## Summary + +<%= componentDescription %> + +[picture of the solution in action, if possible] + +## Used SharePoint Framework Version + +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) + +## Applies to + +- [SharePoint Framework](https://aka.ms/spfx) +- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) + +> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) + +## Prerequisites + +> Any special pre-requisites? + +## Solution + +| Solution | Author(s) | +| ----------- | ------------------------------------------------------- | +| folder name | Author details (name, company, twitter alias with link) | + +## Version history + +| Version | Date | Comments | +| ------- | ---------------- | --------------- | +| 1.1 | March 10, 2021 | Update comment | +| 1.0 | January 29, 2021 | Initial release | + +## Disclaimer + +**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +--- + +## Minimal Path to Awesome + +- Clone this repository +- Ensure that you are at the solution folder +- in the command-line run: + - `npm install -g @rushstack/heft` + - `npm install` + - `heft start` + +> Include any additional steps as needed. + +Other build commands can be listed using `heft --help`. + +## Features + +Description of the library that expands upon high-level summary above. + +This library illustrates the following concepts: + +- topic 1 +- topic 2 +- topic 3 + +> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions in advance. + +> Share your library with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. + +## References + +- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) +- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) +- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) +- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) +- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development +- [Heft Documentation](https://heft.rushstack.io/) diff --git a/templates/webpart-minimal/README.md b/templates/webpart-minimal/README.md index 641dd3e4..5607c0e9 100644 --- a/templates/webpart-minimal/README.md +++ b/templates/webpart-minimal/README.md @@ -1,77 +1,77 @@ -# <%= libraryName %> - -## Summary - -Short summary on functionality and used technologies. - -[picture of the solution in action, if possible] - -## Used SharePoint Framework Version - -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) - -## Applies to - -- [SharePoint Framework](https://aka.ms/spfx) -- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) - -> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) - -## Prerequisites - -> Any special pre-requisites? - -## Solution - -| Solution | Author(s) | -| ----------- | ------------------------------------------------------- | -| folder name | Author details (name, company, twitter alias with link) | - -## Version history - -| Version | Date | Comments | -| ------- | ---------------- | --------------- | -| 1.1 | March 10, 2021 | Update comment | -| 1.0 | January 29, 2021 | Initial release | - -## Disclaimer - -**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** - ---- - -## Minimal Path to Awesome - -- Clone this repository -- Ensure that you are at the solution folder -- in the command-line run: - - `npm install -g @rushstack/heft` - - `npm install` - - `heft start` - -> Include any additional steps as needed. - -Other build commands can be listed using `heft --help`. - -## Features - -Description of the extension that expands upon high-level summary above. - -This extension illustrates the following concepts: - -- topic 1 -- topic 2 -- topic 3 - -> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions advance. - -> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. - -## References - -- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) -- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) -- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) -- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) -- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development +# <%= libraryName %> + +## Summary + +Short summary on functionality and used technologies. + +[picture of the solution in action, if possible] + +## Used SharePoint Framework Version + +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) + +## Applies to + +- [SharePoint Framework](https://aka.ms/spfx) +- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) + +> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) + +## Prerequisites + +> Any special pre-requisites? + +## Solution + +| Solution | Author(s) | +| ----------- | ------------------------------------------------------- | +| folder name | Author details (name, company, twitter alias with link) | + +## Version history + +| Version | Date | Comments | +| ------- | ---------------- | --------------- | +| 1.1 | March 10, 2021 | Update comment | +| 1.0 | January 29, 2021 | Initial release | + +## Disclaimer + +**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +--- + +## Minimal Path to Awesome + +- Clone this repository +- Ensure that you are at the solution folder +- in the command-line run: + - `npm install -g @rushstack/heft` + - `npm install` + - `heft start` + +> Include any additional steps as needed. + +Other build commands can be listed using `heft --help`. + +## Features + +Description of the extension that expands upon high-level summary above. + +This extension illustrates the following concepts: + +- topic 1 +- topic 2 +- topic 3 + +> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions advance. + +> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. + +## References + +- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) +- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) +- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) +- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) +- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development - [Heft Documentation](https://heft.rushstack.io/) \ No newline at end of file diff --git a/templates/webpart-noframework/README.md b/templates/webpart-noframework/README.md index f79f6924..45604da1 100644 --- a/templates/webpart-noframework/README.md +++ b/templates/webpart-noframework/README.md @@ -8,7 +8,7 @@ Short summary on functionality and used technologies. ## Used SharePoint Framework Version -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) ## Applies to diff --git a/templates/webpart-react/README.md b/templates/webpart-react/README.md index bad39147..858ae673 100644 --- a/templates/webpart-react/README.md +++ b/templates/webpart-react/README.md @@ -1,77 +1,77 @@ -# <%= libraryName %> - -## Summary - -<%= componentDescription %> - -[picture of the solution in action, if possible] - -## Used SharePoint Framework Version - -[![version](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersion %>-green.svg) - -## Applies to - -- [SharePoint Framework](https://aka.ms/spfx) -- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) - -> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) - -## Prerequisites - -> Any special pre-requisites? - -## Solution - -| Solution | Author(s) | -| ----------- | ------------------------------------------------------- | -| folder name | Author details (name, company, twitter alias with link) | - -## Version history - -| Version | Date | Comments | -| ------- | ---------------- | --------------- | -| 1.1 | March 10, 2021 | Update comment | -| 1.0 | January 29, 2021 | Initial release | - -## Disclaimer - -**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** - ---- - -## Minimal Path to Awesome - -- Clone this repository -- Ensure that you are at the solution folder -- in the command-line run: - - `npm install -g @rushstack/heft` - - `npm install` - - `heft start` - -> Include any additional steps as needed. - -Other build commands can be listed using `heft --help`. - -## Features - -Description of the extension that expands upon high-level summary above. - -This extension illustrates the following concepts: - -- topic 1 -- topic 2 -- topic 3 - -> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions advance. - -> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. - -## References - -- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) -- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) -- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) -- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) -- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development +# <%= libraryName %> + +## Summary + +<%= componentDescription %> + +[picture of the solution in action, if possible] + +## Used SharePoint Framework Version + +[![version](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg)](https://img.shields.io/badge/version-<%= spfxVersionForBadgeUrl %>-green.svg) + +## Applies to + +- [SharePoint Framework](https://aka.ms/spfx) +- [Microsoft 365 tenant](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) + +> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram) + +## Prerequisites + +> Any special pre-requisites? + +## Solution + +| Solution | Author(s) | +| ----------- | ------------------------------------------------------- | +| folder name | Author details (name, company, twitter alias with link) | + +## Version history + +| Version | Date | Comments | +| ------- | ---------------- | --------------- | +| 1.1 | March 10, 2021 | Update comment | +| 1.0 | January 29, 2021 | Initial release | + +## Disclaimer + +**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +--- + +## Minimal Path to Awesome + +- Clone this repository +- Ensure that you are at the solution folder +- in the command-line run: + - `npm install -g @rushstack/heft` + - `npm install` + - `heft start` + +> Include any additional steps as needed. + +Other build commands can be listed using `heft --help`. + +## Features + +Description of the extension that expands upon high-level summary above. + +This extension illustrates the following concepts: + +- topic 1 +- topic 2 +- topic 3 + +> Notice that better pictures and documentation will increase the sample usage and the value you are providing for others. Thanks for your submissions advance. + +> Share your web part with others through Microsoft 365 Patterns and Practices program to get visibility and exposure. More details on the community, open-source projects and other activities from http://aka.ms/m365pnp. + +## References + +- [Getting started with SharePoint Framework](https://docs.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) +- [Building for Microsoft teams](https://docs.microsoft.com/sharepoint/dev/spfx/build-for-teams-overview) +- [Use Microsoft Graph in your solution](https://docs.microsoft.com/sharepoint/dev/spfx/web-parts/get-started/using-microsoft-graph-apis) +- [Publish SharePoint Framework applications to the Marketplace](https://docs.microsoft.com/sharepoint/dev/spfx/publish-to-marketplace-overview) +- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp) - Guidance, tooling, samples and open-source controls for your Microsoft 365 development - [Heft Documentation](https://heft.rushstack.io/) \ No newline at end of file From 6a7cd4fd4b83860873e0e94bacf59817d7f63cfb Mon Sep 17 00:00:00 2001 From: Ian Clanton-Thuon Date: Mon, 23 Mar 2026 17:50:43 -0400 Subject: [PATCH 2/8] Update Rush. (#164) ## Description Updates Rush. ## How was this tested? Built. ## Type of change - [ ] Bug fix - [ ] New feature / enhancement - [ ] Template change - [x] Documentation / CI / governance --- .../config/validation/rush-package-lock.json | 312 +++++++++--------- common/scripts/install-run-rush.js | 12 +- rush.json | 2 +- 3 files changed, 163 insertions(+), 163 deletions(-) diff --git a/common/config/validation/rush-package-lock.json b/common/config/validation/rush-package-lock.json index def73413..6d0de8ce 100644 --- a/common/config/validation/rush-package-lock.json +++ b/common/config/validation/rush-package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.0", "license": "MIT", "dependencies": { - "@microsoft/rush": "5.169.3" + "@microsoft/rush": "5.171.0" } }, "node_modules/@azure/abort-controller": { @@ -343,14 +343,14 @@ } }, "node_modules/@microsoft/rush": { - "version": "5.169.3", - "resolved": "https://registry.npmjs.org/@microsoft/rush/-/rush-5.169.3.tgz", - "integrity": "sha512-wE4Pjr8XWosdA2VZca9aBfJvN4AkBI00qt2ujEALOuVxyIq1axyGV/CPLJ9oKz+EDgKDyhgtVffmQqTVBXlVsQ==", + "version": "5.171.0", + "resolved": "https://registry.npmjs.org/@microsoft/rush/-/rush-5.171.0.tgz", + "integrity": "sha512-+fLUkbBR5aPgEXfX1+6b4n9Tmg7/794mkh8azQ+XZ567aXbgpREOLtC1fRrpvGv5arsRxxUM//RaPSBvUxl4SA==", "license": "MIT", "dependencies": { - "@microsoft/rush-lib": "5.169.3", - "@rushstack/node-core-library": "5.20.1", - "@rushstack/terminal": "0.22.1", + "@microsoft/rush-lib": "5.171.0", + "@rushstack/node-core-library": "5.20.3", + "@rushstack/terminal": "0.22.3", "semver": "~7.5.4" }, "bin": { @@ -363,29 +363,29 @@ } }, "node_modules/@microsoft/rush-lib": { - "version": "5.169.3", - "resolved": "https://registry.npmjs.org/@microsoft/rush-lib/-/rush-lib-5.169.3.tgz", - "integrity": "sha512-hv8IN1xVPdFNGQqvWjtc6mJV99sRi1hh3O5xNyQDEKoLLm87f900wIRdk/bes1EYntPbilyS4raITqANLF7r2w==", + "version": "5.171.0", + "resolved": "https://registry.npmjs.org/@microsoft/rush-lib/-/rush-lib-5.171.0.tgz", + "integrity": "sha512-nFxnntAuz47TAjK2oYvbHDM4fuzLRdIPt13ahMYbBohQg4KmVsX0I4LbLE22y/LUy/0LmzQKyN48fPEeMh3vYg==", "license": "MIT", "dependencies": { "@pnpm/link-bins": "~5.3.7", - "@rushstack/credential-cache": "0.2.3", - "@rushstack/heft-config-file": "0.20.1", - "@rushstack/lookup-by-path": "0.9.3", - "@rushstack/node-core-library": "5.20.1", - "@rushstack/npm-check-fork": "0.2.3", - "@rushstack/package-deps-hash": "4.7.3", - "@rushstack/package-extractor": "0.12.4", - "@rushstack/rig-package": "0.7.1", - "@rushstack/rush-amazon-s3-build-cache-plugin": "5.169.3", - "@rushstack/rush-azure-storage-build-cache-plugin": "5.169.3", - "@rushstack/rush-http-build-cache-plugin": "5.169.3", - "@rushstack/rush-pnpm-kit-v10": "0.2.4", - "@rushstack/rush-pnpm-kit-v8": "0.2.4", - "@rushstack/rush-pnpm-kit-v9": "0.2.4", - "@rushstack/stream-collator": "4.2.3", - "@rushstack/terminal": "0.22.1", - "@rushstack/ts-command-line": "5.3.1", + "@rushstack/credential-cache": "0.2.7", + "@rushstack/heft-config-file": "0.20.3", + "@rushstack/lookup-by-path": "0.9.7", + "@rushstack/node-core-library": "5.20.3", + "@rushstack/npm-check-fork": "0.2.7", + "@rushstack/package-deps-hash": "4.7.7", + "@rushstack/package-extractor": "0.12.8", + "@rushstack/rig-package": "0.7.2", + "@rushstack/rush-amazon-s3-build-cache-plugin": "5.171.0", + "@rushstack/rush-azure-storage-build-cache-plugin": "5.171.0", + "@rushstack/rush-http-build-cache-plugin": "5.171.0", + "@rushstack/rush-pnpm-kit-v10": "0.2.8", + "@rushstack/rush-pnpm-kit-v8": "0.2.8", + "@rushstack/rush-pnpm-kit-v9": "0.2.8", + "@rushstack/stream-collator": "4.2.7", + "@rushstack/terminal": "0.22.3", + "@rushstack/ts-command-line": "5.3.3", "@yarnpkg/lockfile": "~1.0.2", "builtin-modules": "~3.1.0", "cli-table": "~0.3.1", @@ -1455,23 +1455,23 @@ } }, "node_modules/@rushstack/credential-cache": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@rushstack/credential-cache/-/credential-cache-0.2.3.tgz", - "integrity": "sha512-YPq55bUtomIvgceZ3mJgC6TNMIsY6niliYoOeSxuUoZ3iiIppzHQ9BykjNgML1y7/uYtEAXFLHFJmz6fgx2bew==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@rushstack/credential-cache/-/credential-cache-0.2.7.tgz", + "integrity": "sha512-5vYUGreyf0ZvQ5lLFsQHLbJe1//hBZeI8G7BMoyDaLt4/uegfHNTmiXgYNXDQaqpnM9ImHyXSuOS/DrcbM3aMA==", "license": "MIT", "dependencies": { - "@rushstack/node-core-library": "5.20.1" + "@rushstack/node-core-library": "5.20.3" } }, "node_modules/@rushstack/heft-config-file": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@rushstack/heft-config-file/-/heft-config-file-0.20.1.tgz", - "integrity": "sha512-RYyPtbPJ4FGND6fs3byuijUfpJft+jbs9PWOhKA6tNPPILG/JImCRBUsB7UtjyjB54u7Eev2PZ8IsE9WAIlgIw==", + "version": "0.20.3", + "resolved": "https://registry.npmjs.org/@rushstack/heft-config-file/-/heft-config-file-0.20.3.tgz", + "integrity": "sha512-kVIBNxwtgV4wPQrqk4PCcaU3DKkmDmiULkELmb7RmhYKAYqR6XyA9dnyXdu/HgmF3zPn8EnuBT8/RhlKmbF8Zg==", "license": "MIT", "dependencies": { - "@rushstack/node-core-library": "5.20.1", - "@rushstack/rig-package": "0.7.1", - "@rushstack/terminal": "0.22.1", + "@rushstack/node-core-library": "5.20.3", + "@rushstack/rig-package": "0.7.2", + "@rushstack/terminal": "0.22.3", "@ungap/structured-clone": "~1.3.0", "jsonpath-plus": "~10.3.0" }, @@ -1480,9 +1480,9 @@ } }, "node_modules/@rushstack/lookup-by-path": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@rushstack/lookup-by-path/-/lookup-by-path-0.9.3.tgz", - "integrity": "sha512-2lp36supPwa695UBSQrRUkSAdjP8771Z3vZdPeHyFtEw8dNPFnty/9Tfr9+uVwiDakwsaKjl/cqppUclKgCVQw==", + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/@rushstack/lookup-by-path/-/lookup-by-path-0.9.7.tgz", + "integrity": "sha512-wlyXv5n0scQF7DEcv4KcFxsoVbSLXfZhVvS91S6gc6fOWpLoqIzSGANY9yIQtQpyJqrr0vwLUppa+zv/CB4sYw==", "license": "MIT", "peerDependencies": { "@types/node": "*" @@ -1494,12 +1494,12 @@ } }, "node_modules/@rushstack/node-core-library": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.20.1.tgz", - "integrity": "sha512-QvxZyh+RsTJ77JpQkS9K9lJujh6lj5WyMxieT0bdACtwqxEkGB9zCuSMX5UlXRweaIgSpu1ztdHmhV07fKUpMg==", + "version": "5.20.3", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.20.3.tgz", + "integrity": "sha512-95JgEPq2k7tHxhF9/OJnnyHDXfC9cLhhta0An/6MlkDsX2A6dTzDrTUG18vx4vjc280V0fi0xDH9iQczpSuWsw==", "license": "MIT", "dependencies": { - "ajv": "~8.13.0", + "ajv": "~8.18.0", "ajv-draft-04": "~1.0.0", "ajv-formats": "~3.0.1", "fs-extra": "~11.3.0", @@ -1518,39 +1518,39 @@ } }, "node_modules/@rushstack/npm-check-fork": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@rushstack/npm-check-fork/-/npm-check-fork-0.2.3.tgz", - "integrity": "sha512-hGEBGICzFe8/6QdMFTeHCYWA6pNhKuuY3AypmvXCz0q1BlgN0YFwxbtZ9DfX2xE87nGheBdlCmO5S3wmi1bArw==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@rushstack/npm-check-fork/-/npm-check-fork-0.2.7.tgz", + "integrity": "sha512-ZCNkfge+qpXK/SBR+MA6hcYRP0KGd1npSXy0zsLl8Rb7JGY+uE/GhOUNVnw9FXtam7oK8j7WSOQFd64u9kO4dg==", "license": "MIT", "dependencies": { - "@rushstack/node-core-library": "5.20.1", + "@rushstack/node-core-library": "5.20.3", "giturl": "^2.0.0", "lodash": "~4.17.23", "semver": "~7.5.4" } }, "node_modules/@rushstack/package-deps-hash": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@rushstack/package-deps-hash/-/package-deps-hash-4.7.3.tgz", - "integrity": "sha512-y1PlLRULRV2YXJ9yHHzOw7DyCOD9fJdvAdGcsBh+o+FTvN2h9NMy2/ZnxlW8oxZ3oePkMPKt7x+wJho+ZP0RoQ==", + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/@rushstack/package-deps-hash/-/package-deps-hash-4.7.7.tgz", + "integrity": "sha512-nj7wspFmch+SmPr6RT46zO9aKGD6IjVBP8z3JMmiiJq5p7WgNyqEENOBWGZ42Hwpav9qjj9hWxMggHJiwLg3mA==", "license": "MIT", "dependencies": { - "@rushstack/node-core-library": "5.20.1" + "@rushstack/node-core-library": "5.20.3" } }, "node_modules/@rushstack/package-extractor": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/@rushstack/package-extractor/-/package-extractor-0.12.4.tgz", - "integrity": "sha512-POXpiCO4pr4Yiffj6FomCc4EUeGaufdh7mRsqpmsP/fMaC5xqk+xhfYqV996hxQm8p/f4qqfdEgxkDQkqtaMrw==", + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/@rushstack/package-extractor/-/package-extractor-0.12.8.tgz", + "integrity": "sha512-oGm1Ku1IdCHAy7zAZL1Ns1v02al+l7vqiC3vARyLU+6jUwpgh7N/BLVZafckztvH9sH0Blp5reBvh+tT9q5bbg==", "license": "MIT", "dependencies": { "@pnpm/link-bins": "~5.3.7", - "@rushstack/node-core-library": "5.20.1", - "@rushstack/terminal": "0.22.1", - "@rushstack/ts-command-line": "5.3.1", + "@rushstack/node-core-library": "5.20.3", + "@rushstack/terminal": "0.22.3", + "@rushstack/ts-command-line": "5.3.3", "ignore": "~5.1.6", "jszip": "~3.8.0", - "minimatch": "10.2.1", + "minimatch": "10.2.3", "npm-packlist": "~5.1.3", "semver": "~7.5.4" } @@ -1570,9 +1570,9 @@ } }, "node_modules/@rushstack/rig-package": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.7.1.tgz", - "integrity": "sha512-hLwDnp4yMcAd/gcUol8NPWNctpIXzVOgMyhZ8DagnEJls9TOZd0xF//5hS+YTiX7/+4rLfBra+NoB3rtFxjDdA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.7.2.tgz", + "integrity": "sha512-9XbFWuqMYcHUso4mnETfhGVUSaADBRj6HUAAEYk50nMPn8WRICmBuCphycQGNB3duIR6EEZX3Xj3SYc2XiP+9A==", "license": "MIT", "dependencies": { "resolve": "~1.22.1", @@ -1580,48 +1580,48 @@ } }, "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin": { - "version": "5.169.3", - "resolved": "https://registry.npmjs.org/@rushstack/rush-amazon-s3-build-cache-plugin/-/rush-amazon-s3-build-cache-plugin-5.169.3.tgz", - "integrity": "sha512-pLMI88Si2V2TCMaZMCb6/irUBPq4SuzMKiqkErnchkzZhlDaEP9kiGxsuT1SrNOAVa/VSwX5WAgJj8+MIg7qsg==", + "version": "5.171.0", + "resolved": "https://registry.npmjs.org/@rushstack/rush-amazon-s3-build-cache-plugin/-/rush-amazon-s3-build-cache-plugin-5.171.0.tgz", + "integrity": "sha512-Y1tCFAcHtzKfIGDJAaejh1ijS/0rDsUO20CFbz8M/pU4tC9SuX0nbMCznHEsNrNEesoYfIj1FydcPs+bFrajhQ==", "license": "MIT", "dependencies": { - "@rushstack/credential-cache": "0.2.3", - "@rushstack/node-core-library": "5.20.1", - "@rushstack/rush-sdk": "5.169.3", - "@rushstack/terminal": "0.22.1", + "@rushstack/credential-cache": "0.2.7", + "@rushstack/node-core-library": "5.20.3", + "@rushstack/rush-sdk": "5.171.0", + "@rushstack/terminal": "0.22.3", "https-proxy-agent": "~5.0.0" } }, "node_modules/@rushstack/rush-azure-storage-build-cache-plugin": { - "version": "5.169.3", - "resolved": "https://registry.npmjs.org/@rushstack/rush-azure-storage-build-cache-plugin/-/rush-azure-storage-build-cache-plugin-5.169.3.tgz", - "integrity": "sha512-FVCDb8+hfs5ZUAbahmwbleukms++faDD+0PHcSPMGNKPQnIC6w8HCubMO45fbmLtfRODTFgWFiax0ZA82UU5ug==", + "version": "5.171.0", + "resolved": "https://registry.npmjs.org/@rushstack/rush-azure-storage-build-cache-plugin/-/rush-azure-storage-build-cache-plugin-5.171.0.tgz", + "integrity": "sha512-sd4QAnCFC7wDQcBRJq3p4IJ3AgaPZ2cVWqCU+h6jP0zaF6nkJJOpOU4hlzdbHCw6U/aSR2iIZT/21/S9RZpWFA==", "license": "MIT", "dependencies": { "@azure/identity": "~4.5.0", "@azure/storage-blob": "~12.26.0", - "@rushstack/credential-cache": "0.2.3", - "@rushstack/node-core-library": "5.20.1", - "@rushstack/rush-sdk": "5.169.3", - "@rushstack/terminal": "0.22.1" + "@rushstack/credential-cache": "0.2.7", + "@rushstack/node-core-library": "5.20.3", + "@rushstack/rush-sdk": "5.171.0", + "@rushstack/terminal": "0.22.3" } }, "node_modules/@rushstack/rush-http-build-cache-plugin": { - "version": "5.169.3", - "resolved": "https://registry.npmjs.org/@rushstack/rush-http-build-cache-plugin/-/rush-http-build-cache-plugin-5.169.3.tgz", - "integrity": "sha512-zJVgB0dqxk5UvKsTZTM7pgpLecPD1z+fdxHe6ygqBFtRxpFE/dduGc+1PBlGao8AIcdj5Z/H+O8OnOPzWggZCQ==", + "version": "5.171.0", + "resolved": "https://registry.npmjs.org/@rushstack/rush-http-build-cache-plugin/-/rush-http-build-cache-plugin-5.171.0.tgz", + "integrity": "sha512-ak7EIT0RiEGV2FTWBpOUB8+xFcrz+fq0Kt0yYkhIwDfVXryLaXkbw5ZeFR5bvrWEnlz6ZE21Dp37dULbVJ3ZIQ==", "license": "MIT", "dependencies": { - "@rushstack/credential-cache": "0.2.3", - "@rushstack/node-core-library": "5.20.1", - "@rushstack/rush-sdk": "5.169.3", + "@rushstack/credential-cache": "0.2.7", + "@rushstack/node-core-library": "5.20.3", + "@rushstack/rush-sdk": "5.171.0", "https-proxy-agent": "~5.0.0" } }, "node_modules/@rushstack/rush-pnpm-kit-v10": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@rushstack/rush-pnpm-kit-v10/-/rush-pnpm-kit-v10-0.2.4.tgz", - "integrity": "sha512-Ee9pwVtXps7c0xyoaZmPhpOKL8YDE4Bvk5c0j/XkW/RU8Pn5ekxXXoKKZsqhocct7gj/q7Kwi+xsGtTiq2HtcA==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@rushstack/rush-pnpm-kit-v10/-/rush-pnpm-kit-v10-0.2.8.tgz", + "integrity": "sha512-u4mRegXxtLz4T5Bx5aYumTWGcaeSwUE9xpnh/PusC14lxzcAhdCHEsicd+6VRcJOPnRqfZjNVPaBQx6N94WyPA==", "license": "MIT", "dependencies": { "@pnpm/dependency-path-pnpm-v10": "npm:@pnpm/dependency-path@~1000.0.9", @@ -1630,9 +1630,9 @@ } }, "node_modules/@rushstack/rush-pnpm-kit-v8": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@rushstack/rush-pnpm-kit-v8/-/rush-pnpm-kit-v8-0.2.4.tgz", - "integrity": "sha512-d3IybnLrosNcOZSqdriz2N1os4qfJ/yyAxP+2vPHOuMFa0nE7TIOzMhAds0bUtpzUAKMOBPuokCwunadQkMfqw==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@rushstack/rush-pnpm-kit-v8/-/rush-pnpm-kit-v8-0.2.8.tgz", + "integrity": "sha512-Jw/qBr4ONJ5Jj+nnEZ0jxyCnxZQeFjyePovdEPQXZ8E4Q/hrT8GbEYeNVTi8VWrVe5odb5f5MfPp0zP5J2EHOg==", "license": "MIT", "dependencies": { "@pnpm/dependency-path-pnpm-v8": "npm:@pnpm/dependency-path@~2.1.8", @@ -1837,9 +1837,9 @@ } }, "node_modules/@rushstack/rush-pnpm-kit-v9": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@rushstack/rush-pnpm-kit-v9/-/rush-pnpm-kit-v9-0.2.4.tgz", - "integrity": "sha512-ksLaeMMnz+9f3wlf8bk3QDZKK0+lSpU5M6P7YPPMLXlZn6DMXGVgtm6QeoclEbiJ/NwbbgFvVJE8PXZA9BSGVw==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@rushstack/rush-pnpm-kit-v9/-/rush-pnpm-kit-v9-0.2.8.tgz", + "integrity": "sha512-4ZYSS3HkkT/mqJCgCSoDnKE2wqBFORysk30hSsmj6C3cL+iK0laQgY5zn1hY0DJvkeskiSWuMu1Pjmahs0mgSw==", "license": "MIT", "dependencies": { "@pnpm/dependency-path-pnpm-v9": "npm:@pnpm/dependency-path@~5.1.7", @@ -1848,37 +1848,37 @@ } }, "node_modules/@rushstack/rush-sdk": { - "version": "5.169.3", - "resolved": "https://registry.npmjs.org/@rushstack/rush-sdk/-/rush-sdk-5.169.3.tgz", - "integrity": "sha512-wyNL6WPl/EsJLVMv0eW/0GuhzINy1M10ChZRwURZO8D+UFGc3cocIWXUlyhNZtgAn64x8OtH2Ucl2OIQlCezHg==", + "version": "5.171.0", + "resolved": "https://registry.npmjs.org/@rushstack/rush-sdk/-/rush-sdk-5.171.0.tgz", + "integrity": "sha512-RD5e1o4gDIKDG24ttMX4JOEb+X+CtOt88Q0e0hhvnrJc4vP/jc42qPSqsDf4g9L7XtN5JNhoiKyGJR1bUjapTA==", "license": "MIT", "dependencies": { "@pnpm/lockfile.types-900": "npm:@pnpm/lockfile.types@~900.0.0", - "@rushstack/credential-cache": "0.2.3", - "@rushstack/lookup-by-path": "0.9.3", - "@rushstack/node-core-library": "5.20.1", - "@rushstack/package-deps-hash": "4.7.3", - "@rushstack/terminal": "0.22.1", + "@rushstack/credential-cache": "0.2.7", + "@rushstack/lookup-by-path": "0.9.7", + "@rushstack/node-core-library": "5.20.3", + "@rushstack/package-deps-hash": "4.7.7", + "@rushstack/terminal": "0.22.3", "tapable": "2.2.1" } }, "node_modules/@rushstack/stream-collator": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@rushstack/stream-collator/-/stream-collator-4.2.3.tgz", - "integrity": "sha512-SmX73Vs3Hb1GqQBsq+JV5ZOuqG1LaVgzI7kquVTMKWfSau5JXEee5LDFYJQWOV+5vHEFP8KVOpEzA+pcmkreAQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@rushstack/stream-collator/-/stream-collator-4.2.7.tgz", + "integrity": "sha512-USuC0VdqYdKJ1xs8Czse5on4y2tx53zgqnDHG2UzOmhOIsHmmyWhPbq6PzurOZ3Ll9DnB2ty1ZGo1tI1brgzeQ==", "license": "MIT", "dependencies": { - "@rushstack/node-core-library": "5.20.1", - "@rushstack/terminal": "0.22.1" + "@rushstack/node-core-library": "5.20.3", + "@rushstack/terminal": "0.22.3" } }, "node_modules/@rushstack/terminal": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.22.1.tgz", - "integrity": "sha512-Mdtu0VN7v31O5Zcno8ZZH5kQHF13Ez7WN9Aio7nFJVcR36i4bkERionYrWgBDQJ0JdVPLKGecZER/xRU5IvGLw==", + "version": "0.22.3", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.22.3.tgz", + "integrity": "sha512-gHC9pIMrUPzAbBiI4VZMU7Q+rsCzb8hJl36lFIulIzoceKotyKL3Rd76AZ2CryCTKEg+0bnTj406HE5YY5OQvw==", "license": "MIT", "dependencies": { - "@rushstack/node-core-library": "5.20.1", + "@rushstack/node-core-library": "5.20.3", "@rushstack/problem-matcher": "0.2.1", "supports-color": "~8.1.1" }, @@ -1892,12 +1892,12 @@ } }, "node_modules/@rushstack/ts-command-line": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.3.1.tgz", - "integrity": "sha512-mid/JIZSJafwy3x9e4v0wVLuAqSSYYErEHV0HXPALYLSBN13YNkR5caOk0hf97lSRKrxhtvQjGaDKSEelR3sMg==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.3.3.tgz", + "integrity": "sha512-c+ltdcvC7ym+10lhwR/vWiOhsrm/bP3By2VsFcs5qTKv+6tTmxgbVrtJ5NdNjANiV5TcmOZgUN+5KYQ4llsvEw==", "license": "MIT", "dependencies": { - "@rushstack/terminal": "0.22.1", + "@rushstack/terminal": "0.22.3", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" @@ -2002,15 +2002,15 @@ } }, "node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -2664,10 +2664,26 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "license": "MIT" }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fast-xml-builder": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.3.tgz", - "integrity": "sha512-1o60KoFw2+LWKQu3IdcfcFlGTW4dpqEWmjhYec6H82AYZU2TVBXep6tMl8Z1Y+wM+ZrzCwe3BZ9Vyd9N2rIvmg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.4.tgz", + "integrity": "sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==", "funding": [ { "type": "github", @@ -2680,9 +2696,9 @@ } }, "node_modules/fast-xml-parser": { - "version": "5.5.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.5.5.tgz", - "integrity": "sha512-NLY+V5NNbdmiEszx9n14mZBseJTC50bRq1VHsaxOmR72JDuZt+5J1Co+dC/4JPnyq+WrIHNM69r0sqf7BMb3Mg==", + "version": "5.5.9", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.5.9.tgz", + "integrity": "sha512-jldvxr1MC6rtiZKgrFnDSvT8xuH+eJqxqOBThUVjYrxssYTo1avZLGql5l0a0BAERR01CadYzZ83kVEkbyDg+g==", "funding": [ { "type": "github", @@ -2691,9 +2707,9 @@ ], "license": "MIT", "dependencies": { - "fast-xml-builder": "^1.1.3", - "path-expression-matcher": "^1.1.3", - "strnum": "^2.1.2" + "fast-xml-builder": "^1.1.4", + "path-expression-matcher": "^1.2.0", + "strnum": "^2.2.2" }, "bin": { "fxparser": "src/cli/cli.js" @@ -3622,15 +3638,15 @@ } }, "node_modules/minimatch": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", - "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz", + "integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==", "license": "BlueOak-1.0.0", "dependencies": { "brace-expansion": "^5.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -4048,9 +4064,9 @@ } }, "node_modules/path-expression-matcher": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.1.3.tgz", - "integrity": "sha512-qdVgY8KXmVdJZRSS1JdEPOKPdTiEK/pi0RkcT2sw1RhXxohdujUlJFPuS1TSkevZ9vzd3ZlL7ULl1MHGTApKzQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.2.0.tgz", + "integrity": "sha512-DwmPWeFn+tq7TiyJ2CxezCAirXjFxvaiD03npak3cRjlP9+OjTmSy1EpIrEbh+l6JgUundniloMLDQ/6VTdhLQ==", "funding": [ { "type": "github", @@ -4130,15 +4146,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "license": "MIT" }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -4745,9 +4752,9 @@ } }, "node_modules/strnum": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.0.tgz", - "integrity": "sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.2.tgz", + "integrity": "sha512-DnR90I+jtXNSTXWdwrEy9FakW7UX+qUZg28gj5fk2vxxl7uS/3bpI4fjFYVmdK9etptYBPNkpahuQnEwhwECqA==", "funding": [ { "type": "github", @@ -4793,9 +4800,9 @@ } }, "node_modules/tar": { - "version": "7.5.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", - "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", + "version": "7.5.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.13.tgz", + "integrity": "sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", @@ -4930,15 +4937,6 @@ "node": ">= 10.0.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/common/scripts/install-run-rush.js b/common/scripts/install-run-rush.js index 4733f4d8..73ae8bc1 100644 --- a/common/scripts/install-run-rush.js +++ b/common/scripts/install-run-rush.js @@ -129,6 +129,7 @@ __webpack_require__.r(__webpack_exports__); const { installAndRun, findRushJsonFolder, RUSH_JSON_FILENAME, runWithErrorAndStatusCode } = require('./install-run'); const PACKAGE_NAME = '@microsoft/rush'; const RUSH_PREVIEW_VERSION = 'RUSH_PREVIEW_VERSION'; +const RUSH_QUIET_MODE = 'RUSH_QUIET_MODE'; const INSTALL_RUN_RUSH_LOCKFILE_PATH_VARIABLE = 'INSTALL_RUN_RUSH_LOCKFILE_PATH'; function _getRushVersion(logger) { const rushPreviewVersion = process.env[RUSH_PREVIEW_VERSION]; @@ -171,7 +172,8 @@ function _run() { throw new Error('Unexpected exception: could not detect node path or script path'); } let commandFound = false; - let logger = { info: console.log, error: console.error }; + const quietModeEnvValue = process.env[RUSH_QUIET_MODE]; + let quiet = quietModeEnvValue === '1' || quietModeEnvValue === 'true'; for (const arg of packageBinArgs) { if (arg === '-q' || arg === '--quiet') { // The -q/--quiet flag is supported by both `rush` and `rushx`, and will suppress @@ -180,10 +182,7 @@ function _run() { // To maintain the same user experience, the install-run* scripts pass along this // flag but also use it to suppress any diagnostic information normally printed // to stdout. - logger = { - info: () => { }, - error: console.error - }; + quiet = true; } else if (!arg.startsWith('-') || arg === '-h' || arg === '--help') { // We either found something that looks like a command (i.e. - doesn't start with a "-"), @@ -204,6 +203,9 @@ function _run() { } process.exit(1); } + const logger = quiet + ? { info: () => { }, error: console.error } + : { info: console.log, error: console.error }; runWithErrorAndStatusCode(logger, () => { const version = _getRushVersion(logger); logger.info(`The ${RUSH_JSON_FILENAME} configuration requests Rush version ${version}`); diff --git a/rush.json b/rush.json index 2b003374..7ddaddd6 100644 --- a/rush.json +++ b/rush.json @@ -16,7 +16,7 @@ * path segment in the "$schema" field for all your Rush config files. This will ensure * correct error-underlining and tab-completion for editors such as VS Code. */ - "rushVersion": "5.169.3", + "rushVersion": "5.171.0", /** * The next field selects which package manager should be installed and determines its version. From de2cb5a155eb0bfcee0b76a04b3feb39917bd053 Mon Sep 17 00:00:00 2001 From: Ian Clanton-Thuon Date: Mon, 23 Mar 2026 17:51:28 -0400 Subject: [PATCH 3/8] Remove unnecessary dependencies in templates. (#171) ## Description Removes unnecessary dependencies in templates. ## How was this tested? Built. ## Type of change - [ ] Bug fix - [ ] New feature / enhancement - [x] Template change - [ ] Documentation / CI / governance --- common/config/rush/pnpm-lock.yaml | 102 ------------------ common/config/rush/repo-state.json | 2 +- examples/ace-data-visualization/package.json | 2 - examples/ace-generic-card/package.json | 2 - examples/ace-generic-image-card/package.json | 4 +- .../ace-generic-primarytext-card/package.json | 4 +- examples/ace-search-card/package.json | 2 - .../package.json | 2 - .../package.json | 2 - .../package.json | 2 - .../package.json | 2 - .../package.json | 2 - .../package.json | 2 - .../extension-listviewcommandset/package.json | 2 - .../package.json | 2 - examples/library/package.json | 4 +- examples/webpart-minimal/package.json | 2 - examples/webpart-noframework/package.json | 2 - examples/webpart-react/package.json | 2 - templates/ace-data-visualization/package.json | 2 - templates/ace-generic-card/package.json | 2 - templates/ace-generic-image-card/package.json | 4 +- .../ace-generic-primarytext-card/package.json | 4 +- templates/ace-search-card/package.json | 2 - .../package.json | 2 - .../package.json | 2 - .../package.json | 2 - .../package.json | 2 - .../package.json | 2 - .../package.json | 2 - .../extension-listviewcommandset/package.json | 2 - .../package.json | 2 - templates/library/package.json | 4 +- templates/webpart-minimal/package.json | 2 - templates/webpart-noframework/package.json | 2 - templates/webpart-react/package.json | 2 - .../multi-component.test.ts.snap | 2 - 37 files changed, 7 insertions(+), 179 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 1c02f0d5..da61569b 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -133,9 +133,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -154,9 +151,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -188,9 +182,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -209,9 +200,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -243,9 +231,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -264,9 +249,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -298,9 +280,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -319,9 +298,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -353,9 +329,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -374,9 +347,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -411,9 +381,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -432,9 +399,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -466,9 +430,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -487,9 +448,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -521,9 +479,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -542,9 +497,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -585,9 +537,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -612,9 +561,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -658,9 +604,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -679,9 +622,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -728,9 +668,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -755,9 +692,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -798,9 +732,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -819,9 +750,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -853,9 +781,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -874,9 +799,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -899,9 +821,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -920,9 +839,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -963,9 +879,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -984,9 +897,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -1027,9 +937,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -1048,9 +955,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 @@ -1100,9 +1004,6 @@ importers: '@microsoft/sp-module-interfaces': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': - specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@microsoft/spfx-web-build-rig': specifier: 1.22.2 version: 1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1) @@ -1127,9 +1028,6 @@ importers: '@typescript-eslint/parser': specifier: 8.48.1 version: 8.48.1(eslint@8.57.1)(typescript@5.8.3) - css-loader: - specifier: ~7.1.2 - version: 7.1.4(webpack@5.95.0) eslint: specifier: 8.57.1 version: 8.57.1 diff --git a/common/config/rush/repo-state.json b/common/config/rush/repo-state.json index 35a82d66..3a77523c 100644 --- a/common/config/rush/repo-state.json +++ b/common/config/rush/repo-state.json @@ -1,5 +1,5 @@ // DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush. { - "pnpmShrinkwrapHash": "68684097fe61c4968e72b2075613b9cde8ad6651", + "pnpmShrinkwrapHash": "8190b26ddebe7a96573a1eca4b2c459169cceeca", "preferredVersionsHash": "638ac00f60a6145690289c29fb0e56eb5147428e" } diff --git a/examples/ace-data-visualization/package.json b/examples/ace-data-visualization/package.json index 38252d14..31dc0b9e 100644 --- a/examples/ace-data-visualization/package.json +++ b/examples/ace-data-visualization/package.json @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/examples/ace-generic-card/package.json b/examples/ace-generic-card/package.json index 24f2a4c3..f9360ad7 100644 --- a/examples/ace-generic-card/package.json +++ b/examples/ace-generic-card/package.json @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/examples/ace-generic-image-card/package.json b/examples/ace-generic-image-card/package.json index dd2444e7..d477ff50 100644 --- a/examples/ace-generic-image-card/package.json +++ b/examples/ace-generic-image-card/package.json @@ -13,7 +13,7 @@ "_phase:build": "heft run --only build -- --clean", "_phase:test": "heft run --only test -- --clean", "_phase:package-solution": "heft run --only package-solution -- --clean" -}, + }, "dependencies": { "@microsoft/sp-adaptive-card-extension-base": "1.22.2", "@microsoft/sp-core-library": "1.22.2", @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/examples/ace-generic-primarytext-card/package.json b/examples/ace-generic-primarytext-card/package.json index 463b0d65..b22485af 100644 --- a/examples/ace-generic-primarytext-card/package.json +++ b/examples/ace-generic-primarytext-card/package.json @@ -13,7 +13,7 @@ "_phase:build": "heft run --only build -- --clean", "_phase:test": "heft run --only test -- --clean", "_phase:package-solution": "heft run --only package-solution -- --clean" -}, + }, "dependencies": { "@microsoft/sp-adaptive-card-extension-base": "1.22.2", "@microsoft/sp-core-library": "1.22.2", @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/examples/ace-search-card/package.json b/examples/ace-search-card/package.json index 0da9401d..2496103f 100644 --- a/examples/ace-search-card/package.json +++ b/examples/ace-search-card/package.json @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/examples/extension-application-customizer/package.json b/examples/extension-application-customizer/package.json index a7d11829..ab6315ff 100644 --- a/examples/extension-application-customizer/package.json +++ b/examples/extension-application-customizer/package.json @@ -25,14 +25,12 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/examples/extension-fieldcustomizer-minimal/package.json b/examples/extension-fieldcustomizer-minimal/package.json index 29baf065..5de67a03 100644 --- a/examples/extension-fieldcustomizer-minimal/package.json +++ b/examples/extension-fieldcustomizer-minimal/package.json @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/examples/extension-fieldcustomizer-noframework/package.json b/examples/extension-fieldcustomizer-noframework/package.json index 7ac8c14b..932266cb 100644 --- a/examples/extension-fieldcustomizer-noframework/package.json +++ b/examples/extension-fieldcustomizer-noframework/package.json @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/examples/extension-fieldcustomizer-react/package.json b/examples/extension-fieldcustomizer-react/package.json index d6e13dab..a6995ba4 100644 --- a/examples/extension-fieldcustomizer-react/package.json +++ b/examples/extension-fieldcustomizer-react/package.json @@ -27,7 +27,6 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", @@ -36,7 +35,6 @@ "@types/react-dom": "17.0.17", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "eslint-plugin-react": "^7.35.0", "eslint-plugin-react-hooks": "^4.6.2", diff --git a/examples/extension-formcustomizer-noframework/package.json b/examples/extension-formcustomizer-noframework/package.json index c221662b..7ad67922 100644 --- a/examples/extension-formcustomizer-noframework/package.json +++ b/examples/extension-formcustomizer-noframework/package.json @@ -26,14 +26,12 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/examples/extension-formcustomizer-react/package.json b/examples/extension-formcustomizer-react/package.json index a48fc4f5..d1726848 100644 --- a/examples/extension-formcustomizer-react/package.json +++ b/examples/extension-formcustomizer-react/package.json @@ -29,7 +29,6 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", @@ -38,7 +37,6 @@ "@types/react-dom": "17.0.17", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "eslint-plugin-react": "^7.35.0", "eslint-plugin-react-hooks": "^4.6.2", diff --git a/examples/extension-listviewcommandset/package.json b/examples/extension-listviewcommandset/package.json index 2d251b83..38ebd980 100644 --- a/examples/extension-listviewcommandset/package.json +++ b/examples/extension-listviewcommandset/package.json @@ -25,14 +25,12 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/examples/extension-search-query-modifier/package.json b/examples/extension-search-query-modifier/package.json index 1a0dac68..28a2669c 100644 --- a/examples/extension-search-query-modifier/package.json +++ b/examples/extension-search-query-modifier/package.json @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/examples/library/package.json b/examples/library/package.json index 2ddce7cf..4e984472 100644 --- a/examples/library/package.json +++ b/examples/library/package.json @@ -13,7 +13,7 @@ "_phase:build": "heft run --only build -- --clean", "_phase:test": "heft run --only test -- --clean", "_phase:package-solution": "heft run --only package-solution -- --clean" -}, + }, "dependencies": { "tslib": "2.3.1" }, @@ -21,14 +21,12 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/examples/webpart-minimal/package.json b/examples/webpart-minimal/package.json index de7f0300..6e22f811 100644 --- a/examples/webpart-minimal/package.json +++ b/examples/webpart-minimal/package.json @@ -27,14 +27,12 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/examples/webpart-noframework/package.json b/examples/webpart-noframework/package.json index e8d91aeb..d7542753 100644 --- a/examples/webpart-noframework/package.json +++ b/examples/webpart-noframework/package.json @@ -27,14 +27,12 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/examples/webpart-react/package.json b/examples/webpart-react/package.json index 0f46ca72..d49b02b2 100644 --- a/examples/webpart-react/package.json +++ b/examples/webpart-react/package.json @@ -30,7 +30,6 @@ "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", @@ -39,7 +38,6 @@ "@types/react-dom": "17.0.17", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "eslint-plugin-react": "^7.35.0", "eslint-plugin-react-hooks": "^4.6.2", diff --git a/templates/ace-data-visualization/package.json b/templates/ace-data-visualization/package.json index 183a2296..76a46766 100644 --- a/templates/ace-data-visualization/package.json +++ b/templates/ace-data-visualization/package.json @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/templates/ace-generic-card/package.json b/templates/ace-generic-card/package.json index 183a2296..76a46766 100644 --- a/templates/ace-generic-card/package.json +++ b/templates/ace-generic-card/package.json @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/templates/ace-generic-image-card/package.json b/templates/ace-generic-image-card/package.json index 1044f61c..76a46766 100644 --- a/templates/ace-generic-image-card/package.json +++ b/templates/ace-generic-image-card/package.json @@ -13,7 +13,7 @@ "_phase:build": "heft run --only build -- --clean", "_phase:test": "heft run --only test -- --clean", "_phase:package-solution": "heft run --only package-solution -- --clean" -}, + }, "dependencies": { "@microsoft/sp-adaptive-card-extension-base": "<%= spfxVersion %>", "@microsoft/sp-core-library": "<%= spfxVersion %>", @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/templates/ace-generic-primarytext-card/package.json b/templates/ace-generic-primarytext-card/package.json index 1044f61c..76a46766 100644 --- a/templates/ace-generic-primarytext-card/package.json +++ b/templates/ace-generic-primarytext-card/package.json @@ -13,7 +13,7 @@ "_phase:build": "heft run --only build -- --clean", "_phase:test": "heft run --only test -- --clean", "_phase:package-solution": "heft run --only package-solution -- --clean" -}, + }, "dependencies": { "@microsoft/sp-adaptive-card-extension-base": "<%= spfxVersion %>", "@microsoft/sp-core-library": "<%= spfxVersion %>", @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/templates/ace-search-card/package.json b/templates/ace-search-card/package.json index 183a2296..76a46766 100644 --- a/templates/ace-search-card/package.json +++ b/templates/ace-search-card/package.json @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/templates/extension-application-customizer/package.json b/templates/extension-application-customizer/package.json index 5470f7bf..b4ef7d70 100644 --- a/templates/extension-application-customizer/package.json +++ b/templates/extension-application-customizer/package.json @@ -25,14 +25,12 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/templates/extension-fieldcustomizer-minimal/package.json b/templates/extension-fieldcustomizer-minimal/package.json index 1031423c..8e7b6e05 100644 --- a/templates/extension-fieldcustomizer-minimal/package.json +++ b/templates/extension-fieldcustomizer-minimal/package.json @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/templates/extension-fieldcustomizer-noframework/package.json b/templates/extension-fieldcustomizer-noframework/package.json index 1031423c..8e7b6e05 100644 --- a/templates/extension-fieldcustomizer-noframework/package.json +++ b/templates/extension-fieldcustomizer-noframework/package.json @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/templates/extension-fieldcustomizer-react/package.json b/templates/extension-fieldcustomizer-react/package.json index 023f4dfd..97c23e31 100644 --- a/templates/extension-fieldcustomizer-react/package.json +++ b/templates/extension-fieldcustomizer-react/package.json @@ -27,7 +27,6 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", @@ -36,7 +35,6 @@ "@types/react-dom": "17.0.17", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "eslint-plugin-react": "^7.35.0", "eslint-plugin-react-hooks": "^4.6.2", diff --git a/templates/extension-formcustomizer-noframework/package.json b/templates/extension-formcustomizer-noframework/package.json index c54b5a9c..a87e7cfe 100644 --- a/templates/extension-formcustomizer-noframework/package.json +++ b/templates/extension-formcustomizer-noframework/package.json @@ -26,14 +26,12 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/templates/extension-formcustomizer-react/package.json b/templates/extension-formcustomizer-react/package.json index 37c36ffa..92f2a3b6 100644 --- a/templates/extension-formcustomizer-react/package.json +++ b/templates/extension-formcustomizer-react/package.json @@ -29,7 +29,6 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", @@ -38,7 +37,6 @@ "@types/react-dom": "17.0.17", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "eslint-plugin-react": "^7.35.0", "eslint-plugin-react-hooks": "^4.6.2", diff --git a/templates/extension-listviewcommandset/package.json b/templates/extension-listviewcommandset/package.json index f712e155..982fdd32 100644 --- a/templates/extension-listviewcommandset/package.json +++ b/templates/extension-listviewcommandset/package.json @@ -25,14 +25,12 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/templates/extension-search-query-modifier/package.json b/templates/extension-search-query-modifier/package.json index 063ea1fe..18096f50 100644 --- a/templates/extension-search-query-modifier/package.json +++ b/templates/extension-search-query-modifier/package.json @@ -24,14 +24,12 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/templates/library/package.json b/templates/library/package.json index ea98654b..23151036 100644 --- a/templates/library/package.json +++ b/templates/library/package.json @@ -13,7 +13,7 @@ "_phase:build": "heft run --only build -- --clean", "_phase:test": "heft run --only test -- --clean", "_phase:package-solution": "heft run --only package-solution -- --clean" -}, + }, "dependencies": { "tslib": "2.3.1" }, @@ -21,14 +21,12 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/templates/webpart-minimal/package.json b/templates/webpart-minimal/package.json index f6cb8c0b..774c800c 100644 --- a/templates/webpart-minimal/package.json +++ b/templates/webpart-minimal/package.json @@ -27,14 +27,12 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/templates/webpart-noframework/package.json b/templates/webpart-noframework/package.json index f6cb8c0b..774c800c 100644 --- a/templates/webpart-noframework/package.json +++ b/templates/webpart-noframework/package.json @@ -27,14 +27,12 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3" } diff --git a/templates/webpart-react/package.json b/templates/webpart-react/package.json index a336d2b3..beca9a3f 100644 --- a/templates/webpart-react/package.json +++ b/templates/webpart-react/package.json @@ -30,7 +30,6 @@ "@microsoft/eslint-config-spfx": "<%= spfxVersion %>", "@microsoft/eslint-plugin-spfx": "<%= spfxVersion %>", "@microsoft/sp-module-interfaces": "<%= spfxVersion %>", - "@microsoft/spfx-heft-plugins": "<%= spfxVersion %>", "@microsoft/spfx-web-build-rig": "<%= spfxVersion %>", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", @@ -39,7 +38,6 @@ "@types/react-dom": "17.0.17", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "eslint-plugin-react": "^7.35.0", "eslint-plugin-react-hooks": "^4.6.2", diff --git a/tests/spfx-template-test/src/tests/__snapshots__/multi-component.test.ts.snap b/tests/spfx-template-test/src/tests/__snapshots__/multi-component.test.ts.snap index b5b397e7..6bf8c0ae 100644 --- a/tests/spfx-template-test/src/tests/__snapshots__/multi-component.test.ts.snap +++ b/tests/spfx-template-test/src/tests/__snapshots__/multi-component.test.ts.snap @@ -136,14 +136,12 @@ Object { "@microsoft/eslint-config-spfx": "1.22.2", "@microsoft/eslint-plugin-spfx": "1.22.2", "@microsoft/sp-module-interfaces": "1.22.2", - "@microsoft/spfx-heft-plugins": "1.22.2", "@microsoft/spfx-web-build-rig": "1.22.2", "@rushstack/eslint-config": "4.6.4", "@rushstack/heft": "^1.2.7", "@types/heft-jest": "^1.0.6", "@types/webpack-env": "~1.15.2", "@typescript-eslint/parser": "8.48.1", - "css-loader": "~7.1.2", "eslint": "8.57.1", "typescript": "~5.8.3", }, From 7978c769fa7d7b55422c0e05a94d5529524babb2 Mon Sep 17 00:00:00 2001 From: Ian Clanton-Thuon Date: Mon, 23 Mar 2026 17:54:58 -0400 Subject: [PATCH 4/8] Remove the unused eslintProfle property. (#169) ## Description ## How was this tested? ## Type of change - [ ] Bug fix - [ ] New feature / enhancement - [ ] Template change - [ ] Documentation / CI / governance --- apps/spfx-cli/src/cli/actions/CreateAction.ts | 1 - .../remove-eslintProfile_2026-03-23-20-54.json | 11 +++++++++++ common/docs/spfx-cli-architecture.md | 1 - templates/webpart-minimal/template.json | 4 ---- templates/webpart-react/template.json | 4 ---- 5 files changed, 11 insertions(+), 10 deletions(-) create mode 100644 common/changes/@microsoft/spfx-cli/remove-eslintProfile_2026-03-23-20-54.json diff --git a/apps/spfx-cli/src/cli/actions/CreateAction.ts b/apps/spfx-cli/src/cli/actions/CreateAction.ts index b02db8a0..385b5386 100644 --- a/apps/spfx-cli/src/cli/actions/CreateAction.ts +++ b/apps/spfx-cli/src/cli/actions/CreateAction.ts @@ -239,7 +239,6 @@ export class CreateAction extends CommandLineAction { const fs: MemFsEditor = await template.renderAsync( { solution_name: solutionName, - eslintProfile: 'react', libraryName: this._libraryNameParameter.value, spfxVersion: template.spfxVersion, // The shields.io badge URL uses dashes as separators, so dashes in version numbers diff --git a/common/changes/@microsoft/spfx-cli/remove-eslintProfile_2026-03-23-20-54.json b/common/changes/@microsoft/spfx-cli/remove-eslintProfile_2026-03-23-20-54.json new file mode 100644 index 00000000..0d6f227d --- /dev/null +++ b/common/changes/@microsoft/spfx-cli/remove-eslintProfile_2026-03-23-20-54.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@microsoft/spfx-cli" + } + ], + "packageName": "@microsoft/spfx-cli", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/docs/spfx-cli-architecture.md b/common/docs/spfx-cli-architecture.md index 7e0633a6..fcb90d65 100644 --- a/common/docs/spfx-cli-architecture.md +++ b/common/docs/spfx-cli-architecture.md @@ -285,7 +285,6 @@ async function scaffold(): Promise { componentId: '11111111-1111-1111-1111-111111111111', solutionId: '22222222-2222-2222-2222-222222222222', featureId: '33333333-3333-3333-3333-333333333333', - eslintProfile: 'recommended', libraryName: 'my-solution', componentAlias: 'helloWorld', componentNameUnescaped: 'Hello World', diff --git a/templates/webpart-minimal/template.json b/templates/webpart-minimal/template.json index 190e5b0d..08f82206 100644 --- a/templates/webpart-minimal/template.json +++ b/templates/webpart-minimal/template.json @@ -4,10 +4,6 @@ "version": "0.0.1", "spfxVersion": "1.22.2", "contextSchema": { - "eslintProfile": { - "type": "string", - "description": "The ESLint profile from `@microsoft/eslint-config-spfx` to use" - }, "libraryName": { "type": "string", "description": "The name of the library (also used as the package name)" diff --git a/templates/webpart-react/template.json b/templates/webpart-react/template.json index 104be168..1545e366 100644 --- a/templates/webpart-react/template.json +++ b/templates/webpart-react/template.json @@ -4,10 +4,6 @@ "version": "0.0.1", "spfxVersion": "1.22.2", "contextSchema": { - "eslintProfile": { - "type": "string", - "description": "The ESLint profile from `@microsoft/eslint-config-spfx` to use" - }, "libraryName": { "type": "string", "description": "The name of the library (also used as the package name)" From 49cbf08a1a354085bac2f22597dbc07af0b8fdd0 Mon Sep 17 00:00:00 2001 From: Nick Pape <5674316+nick-pape@users.noreply.github.com> Date: Mon, 23 Mar 2026 17:07:32 -0500 Subject: [PATCH 5/8] Add --package-manager flag to spfx create command (#167) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description Implements #94. Adds `--package-manager {npm,pnpm,yarn,none}` to `spfx create`. After template files are written to disk, the CLI runs the selected package manager's `install` command. Defaults to `none`, which skips installation. **Key design decisions:** - Uses `Executable.spawn` + `Executable.waitForExitAsync` from `@rushstack/node-core-library` (cross-platform, handles Windows `.cmd` files without a `shell: true` hack) - `stdio: 'inherit'` — PM output goes directly to the user's terminal in real time - Install runs only after `writer.writeAsync()` completes, so a failure here never undoes already-written scaffold files - The new-vs-existing-project guard is intentionally deferred — filed #165 to track that once `SPFxCreationAuditLog` lands ## How was this tested - `rushx build` passes (45 tests, 0 failures, 0 lint warnings) - Unit tests cover: correct executable per PM, `stdio: inherit`, `currentWorkingDirectory` from `--target-dir`, `none` skips install, omitting the flag skips install, scaffolding failure prevents install, non-zero exit code surfaces as error - `testUtilities.ts` in `spfx-template-test` updated to thread `--package-manager` through to the CLI (defaults to `none` so all existing integration tests are unaffected) - `CommandLineHelp` snapshot updated to reflect new flag in `--help` output ## Type of change - [x] New feature (non-breaking change which adds functionality) ## Related - Closes #94 - Filed #165 (restrict to new projects once audit log exists) --------- Co-authored-by: Nick Pape Co-authored-by: Claude Sonnet 4.6 (1M context) --- apps/spfx-cli/package.json | 1 + apps/spfx-cli/src/cli/actions/CreateAction.ts | 51 ++++++++ .../cli/actions/tests/CreateAction.test.ts | 112 ++++++++++++++++++ .../__snapshots__/CreateAction.test.ts.snap | 87 ++++++++++++++ .../CommandLineHelp.test.ts.snap | 5 + .../add-package-manager-flag_2026-03-23.json | 10 ++ common/config/rush/pnpm-lock.yaml | 3 + common/config/rush/repo-state.json | 2 +- common/docs/spfx-cli-architecture.md | 6 +- .../src/tests/testUtilities.ts | 12 +- 10 files changed, 283 insertions(+), 6 deletions(-) create mode 100644 common/changes/@microsoft/spfx-cli/add-package-manager-flag_2026-03-23.json diff --git a/apps/spfx-cli/package.json b/apps/spfx-cli/package.json index 4fd875a3..50c5f03e 100644 --- a/apps/spfx-cli/package.json +++ b/apps/spfx-cli/package.json @@ -17,6 +17,7 @@ }, "dependencies": { "@microsoft/spfx-template-api": "workspace:*", + "@rushstack/node-core-library": "~5.20.3", "@rushstack/ts-command-line": "~5.3.3", "@rushstack/terminal": "~0.22.3", "lodash": "^4.17.23", diff --git a/apps/spfx-cli/src/cli/actions/CreateAction.ts b/apps/spfx-cli/src/cli/actions/CreateAction.ts index 385b5386..3f4e8e38 100644 --- a/apps/spfx-cli/src/cli/actions/CreateAction.ts +++ b/apps/spfx-cli/src/cli/actions/CreateAction.ts @@ -1,16 +1,22 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. +import type { ChildProcess } from 'node:child_process'; + +type PackageManager = 'npm' | 'pnpm' | 'yarn'; + import { camelCase, kebabCase, snakeCase, upperFirst } from 'lodash'; import type { MemFsEditor } from 'mem-fs-editor'; import { v4 as uuidv4, v5 as uuidv5 } from 'uuid'; import * as z from 'zod'; +import { Executable } from '@rushstack/node-core-library'; import { Colorize, type Terminal } from '@rushstack/terminal'; import { CommandLineAction, type CommandLineStringListParameter, type CommandLineStringParameter, + type IRequiredCommandLineChoiceParameter, type IRequiredCommandLineStringParameter } from '@rushstack/ts-command-line'; import { @@ -57,6 +63,7 @@ export class CreateAction extends CommandLineAction { private readonly _solutionNameParameter: CommandLineStringParameter; private readonly _templateUrlParameter: CommandLineStringParameter; private readonly _spfxVersionParameter: CommandLineStringParameter; + private readonly _packageManagerParameter: IRequiredCommandLineChoiceParameter; public constructor(terminal: Terminal) { super({ @@ -133,6 +140,15 @@ export class CreateAction extends CommandLineAction { 'The branch name in the template repository to use (e.g., "1.22", "1.23-rc.0"). ' + "Defaults to the repository's default branch (main)." }); + + this._packageManagerParameter = this.defineChoiceParameter({ + parameterLongName: '--package-manager', + description: + 'Package manager to use for dependency installation after scaffolding. ' + + 'Use "none" to skip installation.', + alternatives: ['npm', 'pnpm', 'yarn', 'none'], + defaultValue: 'none' + }); } protected async onExecuteAsync(): Promise { @@ -262,6 +278,11 @@ export class CreateAction extends CommandLineAction { _printFileChanges(this._terminal, fs, targetDir); const writer: SPFxTemplateWriter = new SPFxTemplateWriter(); await writer.writeAsync(fs, targetDir); + + const packageManager: PackageManager | 'none' = this._packageManagerParameter.value; + if (packageManager !== 'none') { + await _runInstallAsync(packageManager, targetDir, terminal); + } } catch (error: unknown) { const message: string = error instanceof Error ? error.message : String(error); terminal.writeErrorLine(`Error creating SPFx component: ${message}`); @@ -270,6 +291,36 @@ export class CreateAction extends CommandLineAction { } } +/** + * Spawns the chosen package manager's install command in targetDir and waits for it to finish. + * Files are already written before this is called, so a failure here does not undo scaffolding. + */ +async function _runInstallAsync( + packageManager: PackageManager, + targetDir: string, + terminal: Terminal +): Promise { + terminal.writeLine(`Running ${packageManager} install in ${targetDir}...`); + + const child: ChildProcess = Executable.spawn(packageManager, ['install'], { + currentWorkingDirectory: targetDir, + stdio: 'inherit' + }); + + const { exitCode, signal } = await Executable.waitForExitAsync(child, { + throwOnNonZeroExitCode: false, + throwOnSignal: false + }); + + if (signal != null) { + throw new Error(`${packageManager} install was terminated by signal ${signal}`); + } else if (exitCode !== 0) { + throw new Error(`${packageManager} install exited with code ${exitCode}`); + } + + terminal.writeLine(`${packageManager} install completed successfully.`); +} + /** * Parses a GitHub (or GHE) URL that may contain a `/tree/` path segment. * Returns the clean repository URL (without `.git` or trailing slashes) and the optional branch ref. diff --git a/apps/spfx-cli/src/cli/actions/tests/CreateAction.test.ts b/apps/spfx-cli/src/cli/actions/tests/CreateAction.test.ts index c549ff4a..e1cce726 100644 --- a/apps/spfx-cli/src/cli/actions/tests/CreateAction.test.ts +++ b/apps/spfx-cli/src/cli/actions/tests/CreateAction.test.ts @@ -2,7 +2,21 @@ // See LICENSE in the project root for license information. jest.mock('@microsoft/spfx-template-api'); +jest.mock('@rushstack/node-core-library', () => { + const actual = jest.requireActual('@rushstack/node-core-library'); + return { + ...actual, + Executable: { + // Only spawn and waitForExitAsync are called by CreateAction; other methods + // fall through to the real implementation via the ...actual.Executable spread. + ...actual.Executable, + spawn: jest.fn(), + waitForExitAsync: jest.fn() + } + }; +}); +import { Executable } from '@rushstack/node-core-library'; import { Terminal, StringBufferTerminalProvider } from '@rushstack/terminal'; import { LocalFileSystemRepositorySource, @@ -20,6 +34,7 @@ const MockedGitHub = PublicGitHubRepositorySource as jest.MockedClass; +const MockedExecutable = Executable as unknown as { spawn: jest.Mock; waitForExitAsync: jest.Mock }; // Minimal mocks for a happy-path run const mockMemFs = { dump: jest.fn().mockReturnValue({}) }; @@ -350,6 +365,103 @@ describe('CreateAction', () => { }); }); + describe('--package-manager', () => { + beforeEach(() => { + MockedExecutable.spawn.mockReturnValue({}); + MockedExecutable.waitForExitAsync.mockResolvedValue({ + exitCode: 0, + stdout: '', + stderr: '', + signal: null + }); + }); + + it('runs npm install when --package-manager npm is passed', async () => { + await runCreateAsync(['--package-manager', 'npm']); + expect(MockedExecutable.spawn).toHaveBeenCalledWith( + 'npm', + ['install'], + expect.objectContaining({ currentWorkingDirectory: '/tmp/test' }) + ); + }); + + it('runs pnpm install when --package-manager pnpm is passed', async () => { + await runCreateAsync(['--package-manager', 'pnpm']); + expect(MockedExecutable.spawn).toHaveBeenCalledWith( + 'pnpm', + ['install'], + expect.objectContaining({ currentWorkingDirectory: '/tmp/test' }) + ); + }); + + it('runs yarn install when --package-manager yarn is passed', async () => { + await runCreateAsync(['--package-manager', 'yarn']); + expect(MockedExecutable.spawn).toHaveBeenCalledWith( + 'yarn', + ['install'], + expect.objectContaining({ currentWorkingDirectory: '/tmp/test' }) + ); + }); + + it('uses stdio: inherit so package manager output reaches the user', async () => { + await runCreateAsync(['--package-manager', 'npm']); + expect(MockedExecutable.spawn).toHaveBeenCalledWith( + 'npm', + ['install'], + expect.objectContaining({ stdio: 'inherit' }) + ); + }); + + it('installs into --target-dir when explicitly provided', async () => { + await runCreateAsync(['--package-manager', 'npm', '--target-dir', '/custom/dir']); + expect(MockedExecutable.spawn).toHaveBeenCalledWith( + 'npm', + ['install'], + expect.objectContaining({ currentWorkingDirectory: '/custom/dir' }) + ); + }); + + it('does not run install when --package-manager none is passed', async () => { + await runCreateAsync(['--package-manager', 'none']); + expect(MockedExecutable.spawn).not.toHaveBeenCalled(); + }); + + it('does not run install when --package-manager is omitted', async () => { + await runCreateAsync(); + expect(MockedExecutable.spawn).not.toHaveBeenCalled(); + }); + + it('does not run install when scaffolding fails before writing', async () => { + MockedManager.prototype.getTemplatesAsync.mockRejectedValue(new Error('network error')); + await expect(runCreateAsync(['--package-manager', 'npm'])).rejects.toThrow(); + expect(MockedExecutable.spawn).not.toHaveBeenCalled(); + }); + + it('surfaces install failure but leaves scaffolded files intact', async () => { + MockedExecutable.waitForExitAsync.mockResolvedValue({ + exitCode: 1, + stdout: '', + stderr: '', + signal: null + }); + await expect(runCreateAsync(['--package-manager', 'npm'])).rejects.toThrow( + /npm install exited with code 1/ + ); + }); + + it('surfaces signal termination with the signal name in the error message', async () => { + MockedExecutable.waitForExitAsync.mockResolvedValue({ + exitCode: null, + stdout: '', + stderr: '', + signal: 'SIGTERM' + }); + await expect(runCreateAsync(['--package-manager', 'npm'])).rejects.toThrow( + /npm install was terminated by signal SIGTERM/ + ); + }); + }); + describe('error handling', () => { it('throws with a message mentioning --local-template when fetch fails', async () => { MockedManager.prototype.getTemplatesAsync.mockRejectedValue(new Error('ENOTFOUND')); diff --git a/apps/spfx-cli/src/cli/actions/tests/__snapshots__/CreateAction.test.ts.snap b/apps/spfx-cli/src/cli/actions/tests/__snapshots__/CreateAction.test.ts.snap index 37680b72..c86038eb 100644 --- a/apps/spfx-cli/src/cli/actions/tests/__snapshots__/CreateAction.test.ts.snap +++ b/apps/spfx-cli/src/cli/actions/tests/__snapshots__/CreateAction.test.ts.snap @@ -1,5 +1,92 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`CreateAction --package-manager does not run install when --package-manager is omitted 1`] = ` +Array [ + "[ log] Using GitHub template source: https://github.com/SharePoint/spfx[n]", + "[ log] [Mocked SPFxTemplateCollection][n]", + "[ log] targetDir: /tmp/test[n]", + "[ log] [n]", + "[ log] The following files will be modified:[n]", + "[ log] [n]", +] +`; + +exports[`CreateAction --package-manager does not run install when --package-manager none is passed 1`] = ` +Array [ + "[ log] Using GitHub template source: https://github.com/SharePoint/spfx[n]", + "[ log] [Mocked SPFxTemplateCollection][n]", + "[ log] targetDir: /tmp/test[n]", + "[ log] [n]", + "[ log] The following files will be modified:[n]", + "[ log] [n]", +] +`; + +exports[`CreateAction --package-manager installs into --target-dir when explicitly provided 1`] = ` +Array [ + "[ log] Using GitHub template source: https://github.com/SharePoint/spfx[n]", + "[ log] [Mocked SPFxTemplateCollection][n]", + "[ log] targetDir: /custom/dir[n]", + "[ log] [n]", + "[ log] The following files will be modified:[n]", + "[ log] [n]", + "[ log] Running npm install in /custom/dir...[n]", + "[ log] npm install completed successfully.[n]", +] +`; + +exports[`CreateAction --package-manager runs npm install when --package-manager npm is passed 1`] = ` +Array [ + "[ log] Using GitHub template source: https://github.com/SharePoint/spfx[n]", + "[ log] [Mocked SPFxTemplateCollection][n]", + "[ log] targetDir: /tmp/test[n]", + "[ log] [n]", + "[ log] The following files will be modified:[n]", + "[ log] [n]", + "[ log] Running npm install in /tmp/test...[n]", + "[ log] npm install completed successfully.[n]", +] +`; + +exports[`CreateAction --package-manager runs pnpm install when --package-manager pnpm is passed 1`] = ` +Array [ + "[ log] Using GitHub template source: https://github.com/SharePoint/spfx[n]", + "[ log] [Mocked SPFxTemplateCollection][n]", + "[ log] targetDir: /tmp/test[n]", + "[ log] [n]", + "[ log] The following files will be modified:[n]", + "[ log] [n]", + "[ log] Running pnpm install in /tmp/test...[n]", + "[ log] pnpm install completed successfully.[n]", +] +`; + +exports[`CreateAction --package-manager runs yarn install when --package-manager yarn is passed 1`] = ` +Array [ + "[ log] Using GitHub template source: https://github.com/SharePoint/spfx[n]", + "[ log] [Mocked SPFxTemplateCollection][n]", + "[ log] targetDir: /tmp/test[n]", + "[ log] [n]", + "[ log] The following files will be modified:[n]", + "[ log] [n]", + "[ log] Running yarn install in /tmp/test...[n]", + "[ log] yarn install completed successfully.[n]", +] +`; + +exports[`CreateAction --package-manager uses stdio: inherit so package manager output reaches the user 1`] = ` +Array [ + "[ log] Using GitHub template source: https://github.com/SharePoint/spfx[n]", + "[ log] [Mocked SPFxTemplateCollection][n]", + "[ log] targetDir: /tmp/test[n]", + "[ log] [n]", + "[ log] The following files will be modified:[n]", + "[ log] [n]", + "[ log] Running npm install in /tmp/test...[n]", + "[ log] npm install completed successfully.[n]", +] +`; + exports[`CreateAction --spfx-version is ignored (with no throw) when --local-template is also provided 1`] = ` Array [ "[warning] --spfx-version is ignored when --local-template is specified.[n]", diff --git a/apps/spfx-cli/src/cli/test/__snapshots__/CommandLineHelp.test.ts.snap b/apps/spfx-cli/src/cli/test/__snapshots__/CommandLineHelp.test.ts.snap index 81e57253..11383157 100644 --- a/apps/spfx-cli/src/cli/test/__snapshots__/CommandLineHelp.test.ts.snap +++ b/apps/spfx-cli/src/cli/test/__snapshots__/CommandLineHelp.test.ts.snap @@ -9,6 +9,7 @@ exports[`CommandLineHelp prints the help: create 1`] = ` [--component-description COMPONENT_DESCRIPTION] [--solution-name SOLUTION_NAME] [--template-url URL] [--spfx-version VERSION] + [--package-manager {npm,pnpm,yarn,none}] This command creates a new SPFx component. @@ -43,6 +44,10 @@ Optional arguments: The branch name in the template repository to use (e. g., \\"1.22\\", \\"1.23-rc.0\\"). Defaults to the repository's default branch (main). + --package-manager {npm,pnpm,yarn,none} + Package manager to use for dependency installation + after scaffolding. Use \\"none\\" to skip installation. + The default value is \\"none\\". " `; diff --git a/common/changes/@microsoft/spfx-cli/add-package-manager-flag_2026-03-23.json b/common/changes/@microsoft/spfx-cli/add-package-manager-flag_2026-03-23.json new file mode 100644 index 00000000..a0a328ef --- /dev/null +++ b/common/changes/@microsoft/spfx-cli/add-package-manager-flag_2026-03-23.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/spfx-cli", + "comment": "", + "type": "none" + } + ], + "packageName": "@microsoft/spfx-cli" +} diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index da61569b..7cd81b09 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -74,6 +74,9 @@ importers: '@microsoft/spfx-template-api': specifier: workspace:* version: link:../../api/spfx-template-api + '@rushstack/node-core-library': + specifier: ~5.20.3 + version: 5.20.3(@types/node@22.19.13) '@rushstack/terminal': specifier: ~0.22.3 version: 0.22.3(@types/node@22.19.13) diff --git a/common/config/rush/repo-state.json b/common/config/rush/repo-state.json index 3a77523c..d75dd10c 100644 --- a/common/config/rush/repo-state.json +++ b/common/config/rush/repo-state.json @@ -1,5 +1,5 @@ // DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush. { - "pnpmShrinkwrapHash": "8190b26ddebe7a96573a1eca4b2c459169cceeca", + "pnpmShrinkwrapHash": "d0c2b4c2bb17130040e4ffbb561953c91474305b", "preferredVersionsHash": "638ac00f60a6145690289c29fb0e56eb5147428e" } diff --git a/common/docs/spfx-cli-architecture.md b/common/docs/spfx-cli-architecture.md index fcb90d65..8a4debff 100644 --- a/common/docs/spfx-cli-architecture.md +++ b/common/docs/spfx-cli-architecture.md @@ -75,14 +75,14 @@ Yeoman compatibility shim) can be built without duplicating core logic. | `--component-alias ALIAS` | No | The component alias. Defaults to the component name. | | `--component-description DESC` | No | The component description. Auto-generated from component name if omitted. | | `--solution-name NAME` | No | The solution name. Defaults to the kebab-case component name. | +| `--template-url URL` | No | Custom GitHub template repository URL. Defaults to `https://github.com/SharePoint/spfx`. Also accepts the `SPFX_TEMPLATE_REPO_URL` environment variable. | +| `--spfx-version VERSION` | No | Branch/tag in the template repo to use (e.g. `1.22`, `1.23-rc.0`). Defaults to the repo's default branch. | +| `--package-manager {npm,pnpm,yarn,none}` | No | Package manager for dependency installation after scaffolding. `none` skips installation (default). See [#165](https://github.com/SharePoint/spfx/issues/165) for the planned restriction to new projects only. | **Planned parameters (not yet implemented):** | Parameter | Description | |-----------|-------------| -| `--package-manager {npm, pnpm, yarn}` | Sets the package manager for dependency installation. Defaults to npm. Only on new projects. | -| `--skip-install` | Skips the automatic dependency installation step after scaffolding. | -| `--spfx-version SEMVER` | Selects the branch from the public template repo. Only for first creation. | | `--github-source URL` | Registers additional public GitHub template sources. | In the current implementation, the `create` command reads templates from local template diff --git a/tests/spfx-template-test/src/tests/testUtilities.ts b/tests/spfx-template-test/src/tests/testUtilities.ts index 69e54cb3..16a38801 100644 --- a/tests/spfx-template-test/src/tests/testUtilities.ts +++ b/tests/spfx-template-test/src/tests/testUtilities.ts @@ -17,6 +17,11 @@ export interface IScaffoldOptions { componentAlias?: string; componentDescription?: string; solutionName?: string; + /** + * Package manager to use for dependency installation after scaffolding. + * Defaults to 'none' to skip installation during tests. + */ + packageManager?: 'npm' | 'pnpm' | 'yarn' | 'none'; } /** @@ -31,7 +36,8 @@ export async function scaffoldAsync(options: IScaffoldOptions): Promise { componentName, componentAlias, componentDescription, - solutionName + solutionName, + packageManager = 'none' } = options; const args: string[] = [ @@ -46,7 +52,9 @@ export async function scaffoldAsync(options: IScaffoldOptions): Promise { '--library-name', libraryName, '--component-name', - componentName + componentName, + '--package-manager', + packageManager ]; if (componentAlias) { From d10c04f57a22bfba6a0656358aba7f36b3252b71 Mon Sep 17 00:00:00 2001 From: Nick Pape <5674316+nick-pape@users.noreply.github.com> Date: Mon, 23 Mar 2026 17:43:26 -0500 Subject: [PATCH 6/8] Add NPM-focused READMEs for published packages (#168) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description Adds NPM-ready READMEs for the two published packages and adds README maintenance guidance to `CLAUDE.md`. - **`apps/spfx-cli/README.md`** — Written for NPM viewers: quick install + quick start at the top, `spfx create` flag tables, full template list with a note that templates are downloaded at runtime from GitHub (not bundled) - **`api/spfx-template-api/README.md`** — Written for NPM viewers: 3-step load → render → write pattern with real code examples, template source docs, merge helper reference, and API reference table - **`CLAUDE.md`** — Added a "README Maintenance" section so future changes to published packages are reflected in their READMEs ### Note: `engines.node` change in `apps/spfx-cli/package.json` This PR also removes the `>=24.5.0 <25.0.0` range from `engines.node`. Node 24 is **not** officially supported by SPFx 1.22.x — the [SPFx compatibility docs](https://learn.microsoft.com/en-us/sharepoint/dev/spfx/compatibility) list Node v22 only. The range was incorrect and has been removed. ## How was this tested Reviewed both READMEs for accuracy against source code (`CreateAction.ts`, `index.ts`, `SPFxTemplateRepositoryManager.ts`, etc.) and cross-checked Node.js requirements against the official SPFx compatibility reference. ## Type of change - [x] Documentation / CI --------- Co-authored-by: Claude Sonnet 4.6 (1M context) Co-authored-by: Nick Pape --- CLAUDE.md | 18 ++ api/spfx-template-api/README.md | 154 ++++++++++++++++++ apps/spfx-cli/README.md | 141 +++++++++++++++- .../spfx-cli/npm-readmes_2026-03-23.json | 10 ++ .../npm-readmes_2026-03-23.json | 10 ++ 5 files changed, 332 insertions(+), 1 deletion(-) create mode 100644 api/spfx-template-api/README.md create mode 100644 common/changes/@microsoft/spfx-cli/npm-readmes_2026-03-23.json create mode 100644 common/changes/@microsoft/spfx-template-api/npm-readmes_2026-03-23.json diff --git a/CLAUDE.md b/CLAUDE.md index 89cccc3a..0afb0d0b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -156,9 +156,27 @@ When filing issues, use the appropriate template from `.github/ISSUE_TEMPLATE/`: - **Bug report**: Include reproduction steps, expected vs actual behavior, CLI/Node versions, and the affected template if applicable - **Feature request**: Include a description, use case, and alternatives considered +## README Maintenance + +The two published packages each have a README that is displayed on NPM: + +- `apps/spfx-cli/README.md` +- `api/spfx-template-api/README.md` + +**Whenever you make a change to a published package, update its README to reflect the change.** This includes: + +- New CLI flags or changed flag behavior → update the `spfx-cli` README flag tables and examples +- New or removed templates → update the templates table in the `spfx-cli` README +- New exported classes, types, or functions → update the API reference table in the `spfx-template-api` README +- Changed usage patterns or render context fields → update code examples in the `spfx-template-api` README +- Changed Node.js version requirements → update the requirements line in both READMEs + +These READMEs are written for NPM viewers — keep them practical and example-driven. Do not add internal monorepo details or contributor instructions. + ## Important Notes 1. **Always use the correct Node version** - This is the #1 cause of build failures 2. **Rush manages dependencies** - Don't run npm/pnpm directly in project folders 3. **Peer dependency warnings are OK** - The SPFx packages have peer deps we intentionally don't install 4. **Templates must match examples** - Keep them synchronized +5. **READMEs must stay current** - Update `apps/spfx-cli/README.md` and `api/spfx-template-api/README.md` whenever the published packages change diff --git a/api/spfx-template-api/README.md b/api/spfx-template-api/README.md new file mode 100644 index 00000000..99730d3e --- /dev/null +++ b/api/spfx-template-api/README.md @@ -0,0 +1,154 @@ +# @microsoft/spfx-template-api + +> **Pre-release:** APIs may change before the stable 1.0 release. + +Programmatic API for loading, rendering, and writing [SharePoint Framework (SPFx)](https://aka.ms/spfx) project templates. This is the engine that powers [`@microsoft/spfx-cli`](https://www.npmjs.com/package/@microsoft/spfx-cli). Use it directly when you need to integrate SPFx scaffolding into your own tooling. + +```bash +npm install @microsoft/spfx-template-api +``` + +**Requires Node.js `>=22.14.0 <23.0.0` or `>=24.5.0 <25.0.0`** + +--- + +## Quick start + +```typescript +import { + SPFxTemplateRepositoryManager, + PublicGitHubRepositorySource, + SPFxTemplateWriter +} from '@microsoft/spfx-template-api'; + +// 1. Load templates from GitHub +const manager = new SPFxTemplateRepositoryManager(); +manager.addSource(new PublicGitHubRepositorySource('https://github.com/SharePoint/spfx')); + +const templates = await manager.getTemplatesAsync(); +const template = templates.get('webpart-react'); +if (!template) throw new Error('Template not found'); + +// 2. Render to an in-memory file system +const fs = await template.renderAsync( + { + solution_name: 'my-solution', + libraryName: 'my-spfx-library', + spfxVersion: template.spfxVersion, + spfxVersionForBadgeUrl: template.spfxVersion.replace(/-/g, '--'), + componentId: '', + featureId: '', + solutionId: '', + componentAlias: 'MyWebPart', + componentNameUnescaped: 'My Web Part', + componentNameCamelCase: 'myWebPart', + componentNameHyphenCase: 'my-web-part', + componentNameCapitalCase: 'MyWebPart', + componentNameAllCaps: 'MY_WEB_PART', + componentDescription: 'My Web Part description', + eslintProfile: 'react' + }, + '/path/to/output' +); + +// 3. Write files to disk (merges into existing SPFx solutions automatically) +const writer = new SPFxTemplateWriter(); +await writer.writeAsync(fs, '/path/to/output'); +``` + +--- + +## Template sources + +### `PublicGitHubRepositorySource` + +Fetches templates from a public GitHub repository. Pin a specific SPFx version with an optional branch/tag ref. + +```typescript +import { PublicGitHubRepositorySource } from '@microsoft/spfx-template-api'; + +// Latest (default branch) +new PublicGitHubRepositorySource('https://github.com/SharePoint/spfx'); + +// Specific version +new PublicGitHubRepositorySource('https://github.com/SharePoint/spfx', '1.22'); +``` + +### `LocalFileSystemRepositorySource` + +Loads templates from a local directory — useful for offline workflows, CI environments, or authoring custom templates. + +```typescript +import { LocalFileSystemRepositorySource } from '@microsoft/spfx-template-api'; + +new LocalFileSystemRepositorySource('./path/to/templates'); +``` + +### Combining sources + +`SPFxTemplateRepositoryManager` merges templates from all registered sources. Later sources can override templates from earlier ones. + +```typescript +import { + SPFxTemplateRepositoryManager, + PublicGitHubRepositorySource, + LocalFileSystemRepositorySource +} from '@microsoft/spfx-template-api'; + +const manager = new SPFxTemplateRepositoryManager(); +manager.addSource(new PublicGitHubRepositorySource('https://github.com/SharePoint/spfx')); +manager.addSource(new LocalFileSystemRepositorySource('./my-custom-templates')); + +const templates = await manager.getTemplatesAsync(); +``` + +--- + +## Writing to disk + +`SPFxTemplateWriter` commits the in-memory `MemFsEditor` to the target directory. When scaffolding into an existing SPFx solution, it merges generated content into existing files rather than overwriting them. + +```typescript +const writer = new SPFxTemplateWriter(); +await writer.writeAsync(fs, targetDir); +``` + +### Merge helpers + +The writer uses these helpers internally. You can also import them directly for custom merge scenarios: + +| Class | Merges | +|-------|--------| +| `JsonMergeHelper` | Abstract base for JSON/JSONC merge helpers (parse/serialize utilities) | +| `PackageJsonMergeHelper` | `package.json` (preserves existing scripts and dependencies) | +| `ConfigJsonMergeHelper` | SPFx `config/` files | +| `PackageSolutionJsonMergeHelper` | `config/package-solution.json` | +| `ServeJsonMergeHelper` | `config/serve.json` | + +--- + +## API reference + +| Export | Description | +|--------|-------------| +| `SPFxTemplateRepositoryManager` | Aggregates sources and returns a `SPFxTemplateCollection` | +| `SPFxTemplateCollection` | `Map` of all loaded templates | +| `SPFxTemplate` | Single template — exposes `name`, `spfxVersion`, and `renderAsync()` | +| `PublicGitHubRepositorySource` | Loads templates from a public GitHub repo | +| `LocalFileSystemRepositorySource` | Loads templates from the local filesystem | +| `BaseSPFxTemplateRepositorySource` | Base class for building custom template sources | +| `SPFxRepositorySource` | Interface implemented by all source types | +| `SPFxTemplateWriter` | Writes a rendered `MemFsEditor` to disk with merge support | +| `IMergeHelper` | Interface for implementing custom merge helpers | +| `ServeJsonMergeHelper` | Merges `config/serve.json` (also available standalone) | +| `ISPFxTemplateJson` | Shape of the `template.json` manifest | +| `SPFxTemplateDefinitionSchema` | Zod schema for validating a `template.json` | +| `SPFxTemplateJsonFile` | Typed wrapper around a parsed `template.json` file | +| `SPFxTemplateRepositorySourceTypes` | Union type of all built-in repository source types | +| `IRenderOptions` | Context object passed to `template.renderAsync()` | + +--- + +## License + +MIT © Microsoft Corporation diff --git a/apps/spfx-cli/README.md b/apps/spfx-cli/README.md index ef63c50c..3337830d 100644 --- a/apps/spfx-cli/README.md +++ b/apps/spfx-cli/README.md @@ -1 +1,140 @@ -# @microsoft/spfx-cli \ No newline at end of file +# @microsoft/spfx-cli + +> **Pre-release:** APIs and commands may change before the stable 1.0 release. + +The official CLI for scaffolding [SharePoint Framework (SPFx)](https://aka.ms/spfx) projects. + +```bash +npm install -g @microsoft/spfx-cli +``` + +**Requires Node.js `>=22.14.0 <23.0.0` or `>=24.5.0 <25.0.0`** + +--- + +## Quick start + +```bash +spfx create \ + --template webpart-react \ + --library-name my-spfx-library \ + --component-name "Hello World" +``` + +This downloads the `webpart-react` template from the [SharePoint/spfx](https://github.com/SharePoint/spfx) template repository and scaffolds a React-based web part into the current directory. + +--- + +## `spfx create` + +Scaffolds a new SPFx component. Templates are pulled from the [SharePoint/spfx](https://github.com/SharePoint/spfx) GitHub repository by default. + +### Required flags + +| Flag | Description | +|------|-------------| +| `--template NAME` | Template to use (see [Templates](#templates) below) | +| `--library-name NAME` | npm library name for the component (e.g. `my-spfx-lib`) | +| `--component-name NAME` | Display name of the component (e.g. `"Hello World"`) | + +### Optional flags + +| Flag | Default | Description | +|------|---------|-------------| +| `--target-dir PATH` | current directory | Directory to scaffold into | +| `--solution-name NAME` | kebab-cased component name | SharePoint solution name | +| `--component-alias ALIAS` | same as `--component-name` | Short identifier for the component | +| `--component-description TEXT` | `" description"` | Component description string | +| `--spfx-version VERSION` | repo default branch | Branch/tag in the template repo to use (e.g. `1.22`, `1.23-rc.0`) | +| `--template-url URL` | `https://github.com/SharePoint/spfx` | Custom GitHub template repository | +| `--local-template PATH` | — | Path to a local template folder (repeatable; bypasses GitHub) | + +### Environment variables + +| Variable | Description | +|----------|-------------| +| `SPFX_TEMPLATE_REPO_URL` | Equivalent to `--template-url` | +| `SPFX_CI_MODE=1` | Internal/testing-only: produces deterministic UUIDs for CI; not shown in `--help`; subject to change | + +--- + +## Templates + +Templates are fetched at runtime from the [SharePoint/spfx](https://github.com/SharePoint/spfx) GitHub repository. Use `--spfx-version` to target a specific release branch, or `--local-template` to use templates from disk. + +### Web Parts + +| Name | Description | +|------|-------------| +| `webpart-minimal` | Bare-bones web part, no UI framework | +| `webpart-noframework` | Full web part scaffold, no UI framework | +| `webpart-react` | Web part with React and Fluent UI | + +### Extensions + +| Name | Description | +|------|-------------| +| `extension-application-customizer` | Application Customizer | +| `extension-fieldcustomizer-minimal` | Field Customizer, no UI framework (minimal) | +| `extension-fieldcustomizer-noframework` | Field Customizer, no UI framework | +| `extension-fieldcustomizer-react` | Field Customizer with React | +| `extension-formcustomizer-noframework` | Form Customizer, no UI framework | +| `extension-formcustomizer-react` | Form Customizer with React | +| `extension-listviewcommandset` | List View Command Set | +| `extension-search-query-modifier` | Search Query Modifier | + +### Adaptive Card Extensions + +| Name | Description | +|------|-------------| +| `ace-data-visualization` | Data Visualization card | +| `ace-generic-card` | Generic card | +| `ace-generic-image-card` | Generic image card | +| `ace-generic-primarytext-card` | Generic primary text card | +| `ace-search-card` | Search card | + +### Other + +| Name | Description | +|------|-------------| +| `library` | Shared SPFx library component | + +--- + +## More examples + +Scaffold into a specific directory: + +```bash +spfx create \ + --template webpart-react \ + --library-name my-spfx-library \ + --component-name "My Dashboard" \ + --target-dir ./my-project +``` + +Target a specific SPFx version: + +```bash +spfx create \ + --template webpart-react \ + --library-name my-spfx-library \ + --component-name "My Web Part" \ + --spfx-version 1.22 +``` + +Use a local template (offline / custom templates): + +```bash +spfx create \ + --template webpart-minimal \ + --library-name my-spfx-library \ + --component-name "My Web Part" \ + --local-template ./path/to/templates +``` + +--- + +## License + +MIT © Microsoft Corporation diff --git a/common/changes/@microsoft/spfx-cli/npm-readmes_2026-03-23.json b/common/changes/@microsoft/spfx-cli/npm-readmes_2026-03-23.json new file mode 100644 index 00000000..a0a328ef --- /dev/null +++ b/common/changes/@microsoft/spfx-cli/npm-readmes_2026-03-23.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/spfx-cli", + "comment": "", + "type": "none" + } + ], + "packageName": "@microsoft/spfx-cli" +} diff --git a/common/changes/@microsoft/spfx-template-api/npm-readmes_2026-03-23.json b/common/changes/@microsoft/spfx-template-api/npm-readmes_2026-03-23.json new file mode 100644 index 00000000..d311a590 --- /dev/null +++ b/common/changes/@microsoft/spfx-template-api/npm-readmes_2026-03-23.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/spfx-template-api", + "comment": "", + "type": "none" + } + ], + "packageName": "@microsoft/spfx-template-api" +} From 5bae3176bfeb37c4763e07ad10cec6e60701664f Mon Sep 17 00:00:00 2001 From: Ian Clanton-Thuon Date: Tue, 24 Mar 2026 11:29:15 -0400 Subject: [PATCH 7/8] Prettify templates. (#170) ## Description Prettify parseable files in templates. ## How was this tested? Built. ## Type of change - [ ] Bug fix - [ ] New feature / enhancement - [x] Template change - [ ] Documentation / CI / governance --- .prettierignore | 8 +- examples/ace-data-visualization/.eslintrc.js | 45 ++++----- .../ace-data-visualization/config/sass.json | 2 +- .../config/write-manifests.json | 2 +- ...izationAdaptiveCardExtension.manifest.json | 26 ++--- .../dataVisualization/loc/en-us.js | 20 ++-- .../quickView/template/QuickViewTemplate.json | 2 +- examples/ace-generic-card/.eslintrc.js | 45 ++++----- examples/ace-generic-card/config/sass.json | 2 +- .../config/write-manifests.json | 2 +- ...ricCardAdaptiveCardExtension.manifest.json | 26 ++--- .../genericCard/loc/en-us.js | 20 ++-- .../quickView/template/QuickViewTemplate.json | 2 +- examples/ace-generic-image-card/.eslintrc.js | 45 ++++----- .../ace-generic-image-card/config/sass.json | 2 +- .../config/write-manifests.json | 2 +- ...icImageAdaptiveCardExtension.manifest.json | 24 ++--- .../genericImage/loc/en-us.js | 18 ++-- .../quickView/template/QuickViewTemplate.json | 2 +- .../ace-generic-primarytext-card/.eslintrc.js | 45 ++++----- .../config/sass.json | 2 +- .../config/write-manifests.json | 2 +- ...aryTextAdaptiveCardExtension.manifest.json | 22 +++-- .../genericPrimaryText/loc/en-us.js | 18 ++-- .../quickView/template/QuickViewTemplate.json | 2 +- examples/ace-search-card/.eslintrc.js | 45 ++++----- examples/ace-search-card/config/sass.json | 2 +- .../config/write-manifests.json | 2 +- ...MinimalAdaptiveCardExtension.manifest.json | 24 ++--- .../minimal/loc/en-us.js | 20 ++-- .../quickView/template/QuickViewTemplate.json | 2 +- .../.eslintrc.js | 43 ++++---- .../config/package-solution.json | 5 +- .../minimalApplicationCustomizer/loc/en-us.js | 6 +- .../.eslintrc.js | 45 ++++----- .../config/package-solution.json | 4 +- .../src/extensions/minimal/loc/en-us.js | 6 +- .../.eslintrc.js | 43 ++++---- .../config/package-solution.json | 4 +- .../src/extensions/noFramework/loc/en-us.js | 6 +- .../.eslintrc.js | 45 ++++----- .../config/package-solution.json | 4 +- .../reactFieldCustomizer/loc/en-us.js | 6 +- .../.eslintrc.js | 45 ++++----- .../src/extensions/noFramework/loc/en-us.js | 10 +- .../.eslintrc.js | 45 ++++----- .../config/sass.json | 2 +- .../config/write-manifests.json | 2 +- .../reactFormCustomizer/loc/en-us.js | 12 +-- .../extension-listviewcommandset/.eslintrc.js | 43 ++++---- .../extensions/minimalCommandSet/loc/en-us.js | 8 +- .../.eslintrc.js | 43 ++++---- .../config/package-solution.json | 5 +- .../minimalSearchQueryModifier/loc/en-us.js | 6 +- examples/library/.eslintrc.js | 43 ++++---- examples/library/config/sass.json | 2 +- examples/library/config/write-manifests.json | 2 +- .../src/libraries/example/loc/en-us.js | 10 +- examples/webpart-minimal/.eslintrc.js | 45 ++++----- examples/webpart-minimal/config/sass.json | 2 +- .../config/write-manifests.json | 2 +- .../MinimalWebPart.manifest.json | 20 ++-- .../src/webparts/minimalWebPart/loc/en-us.js | 7 +- examples/webpart-noframework/.eslintrc.js | 45 ++++----- examples/webpart-noframework/config/sass.json | 2 +- .../config/write-manifests.json | 2 +- .../NoFrameworkWebPart.manifest.json | 20 ++-- .../webparts/noFrameworkWebPart/loc/en-us.js | 28 +++--- examples/webpart-react/.eslintrc.js | 43 ++++---- examples/webpart-react/config/sass.json | 2 +- .../webpart-react/config/write-manifests.json | 2 +- .../MinimalWebPart.manifest.json | 20 ++-- .../src/webparts/minimalWebPart/loc/en-us.js | 28 +++--- templates/ace-data-visualization/.eslintrc.js | 45 ++++----- .../ace-data-visualization/config/sass.json | 2 +- .../config/write-manifests.json | 2 +- .../{componentNameCamelCase}/loc/en-us.js | 20 ++-- .../quickView/template/QuickViewTemplate.json | 2 +- ...alCase}AdaptiveCardExtension.manifest.json | 26 ++--- .../ace-data-visualization/template.json | 98 +++++++++---------- templates/ace-generic-card/.eslintrc.js | 45 ++++----- templates/ace-generic-card/config/sass.json | 2 +- .../config/write-manifests.json | 2 +- .../{componentNameCamelCase}/loc/en-us.js | 20 ++-- .../quickView/template/QuickViewTemplate.json | 2 +- ...alCase}AdaptiveCardExtension.manifest.json | 26 ++--- templates/ace-generic-card/template.json | 98 +++++++++---------- templates/ace-generic-image-card/.eslintrc.js | 45 ++++----- .../ace-generic-image-card/config/sass.json | 2 +- .../config/write-manifests.json | 2 +- .../{componentNameCamelCase}/loc/en-us.js | 18 ++-- .../quickView/template/QuickViewTemplate.json | 2 +- ...alCase}AdaptiveCardExtension.manifest.json | 24 ++--- .../ace-generic-image-card/template.json | 98 +++++++++---------- .../ace-generic-primarytext-card/.eslintrc.js | 45 ++++----- .../config/sass.json | 2 +- .../config/write-manifests.json | 2 +- .../{componentNameCamelCase}/loc/en-us.js | 18 ++-- .../quickView/template/QuickViewTemplate.json | 2 +- ...alCase}AdaptiveCardExtension.manifest.json | 22 +++-- .../template.json | 98 +++++++++---------- templates/ace-search-card/.eslintrc.js | 45 ++++----- templates/ace-search-card/config/sass.json | 2 +- .../config/write-manifests.json | 2 +- .../{componentNameCamelCase}/loc/en-us.js | 20 ++-- .../quickView/template/QuickViewTemplate.json | 2 +- ...alCase}AdaptiveCardExtension.manifest.json | 24 ++--- templates/ace-search-card/template.json | 98 +++++++++---------- .../.eslintrc.js | 43 ++++---- .../config/package-solution.json | 5 +- .../loc/en-us.js | 6 +- .../template.json | 90 ++++++++--------- .../.eslintrc.js | 45 ++++----- .../config/package-solution.json | 4 +- .../{componentNameCamelCase}/loc/en-us.js | 6 +- .../template.json | 90 ++++++++--------- .../.eslintrc.js | 43 ++++---- .../config/package-solution.json | 4 +- .../{componentNameCamelCase}/loc/en-us.js | 6 +- .../template.json | 90 ++++++++--------- .../.eslintrc.js | 45 ++++----- .../config/package-solution.json | 4 +- .../{componentNameCamelCase}/loc/en-us.js | 6 +- .../template.json | 90 ++++++++--------- .../.eslintrc.js | 45 ++++----- .../{componentNameCamelCase}/loc/en-us.js | 10 +- .../template.json | 90 ++++++++--------- .../.eslintrc.js | 45 ++++----- .../config/sass.json | 2 +- .../config/write-manifests.json | 2 +- .../{componentNameCamelCase}/loc/en-us.js | 12 +-- .../template.json | 90 ++++++++--------- .../extension-listviewcommandset/.eslintrc.js | 43 ++++---- .../loc/en-us.js | 8 +- .../template.json | 74 +++++++------- .../.eslintrc.js | 43 ++++---- .../config/package-solution.json | 5 +- .../loc/en-us.js | 6 +- .../template.json | 74 +++++++------- templates/library/.eslintrc.js | 43 ++++---- templates/library/config/sass.json | 2 +- templates/library/config/write-manifests.json | 2 +- .../{componentNameCamelCase}/loc/en-us.js | 10 +- templates/library/template.json | 98 +++++++++---------- templates/webpart-minimal/.eslintrc.js | 45 ++++----- templates/webpart-minimal/config/sass.json | 2 +- .../config/write-manifests.json | 2 +- .../loc/en-us.js | 7 +- ...onentNameCapitalCase}WebPart.manifest.json | 20 ++-- templates/webpart-minimal/template.json | 92 ++++++++--------- templates/webpart-noframework/.eslintrc.js | 45 ++++----- .../webpart-noframework/config/sass.json | 2 +- .../config/write-manifests.json | 2 +- .../loc/en-us.js | 28 +++--- ...onentNameCapitalCase}WebPart.manifest.json | 20 ++-- templates/webpart-noframework/template.json | 90 ++++++++--------- templates/webpart-react/.eslintrc.js | 43 ++++---- templates/webpart-react/config/sass.json | 2 +- .../webpart-react/config/write-manifests.json | 2 +- .../loc/en-us.js | 28 +++--- ...onentNameCapitalCase}WebPart.manifest.json | 20 ++-- templates/webpart-react/template.json | 90 ++++++++--------- 162 files changed, 1967 insertions(+), 2061 deletions(-) diff --git a/.prettierignore b/.prettierignore index 251fa54e..b52c5261 100644 --- a/.prettierignore +++ b/.prettierignore @@ -129,7 +129,7 @@ dist-storybook/ # Prettier-specific overrides #------------------------------------------------------------------------------------------------------------------- -# Machine-egnerated files +# Machine-generated files common/reviews/ common/changes/ common/scripts/ @@ -142,7 +142,9 @@ pnpm-lock.yaml *.md # These aren't valid code, they're templates for code, and many can't be parsed as expected -templates/* +templates/**/*.ts +templates/**/*.tsx +templates/**/*.scss # These are generated from templates, and are validated to match exactly -examples/* \ No newline at end of file +examples/* diff --git a/examples/ace-data-visualization/.eslintrc.js b/examples/ace-data-visualization/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/examples/ace-data-visualization/.eslintrc.js +++ b/examples/ace-data-visualization/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/examples/ace-data-visualization/config/sass.json b/examples/ace-data-visualization/config/sass.json index 1cfc17b3..9022585d 100644 --- a/examples/ace-data-visualization/config/sass.json +++ b/examples/ace-data-visualization/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/examples/ace-data-visualization/config/write-manifests.json b/examples/ace-data-visualization/config/write-manifests.json index bad35260..11dca670 100644 --- a/examples/ace-data-visualization/config/write-manifests.json +++ b/examples/ace-data-visualization/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/examples/ace-data-visualization/src/adaptiveCardExtensions/dataVisualization/DataVisualizationAdaptiveCardExtension.manifest.json b/examples/ace-data-visualization/src/adaptiveCardExtensions/dataVisualization/DataVisualizationAdaptiveCardExtension.manifest.json index a3b563dc..27063976 100644 --- a/examples/ace-data-visualization/src/adaptiveCardExtensions/dataVisualization/DataVisualizationAdaptiveCardExtension.manifest.json +++ b/examples/ace-data-visualization/src/adaptiveCardExtensions/dataVisualization/DataVisualizationAdaptiveCardExtension.manifest.json @@ -13,15 +13,17 @@ // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f "requiresCustomScript": false, "supportedHosts": ["Dashboard"], - "preconfiguredEntries": [{ - "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard - "group": { "default": "Dashboard" }, - "title": { "default": "DataVisualization" }, - "description": { "default": "DataVisualizationCard Description" }, - "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", - "properties": { - "title": "DataVisualization" - }, - "cardSize": "Medium" - }] -} \ No newline at end of file + "preconfiguredEntries": [ + { + "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard + "group": { "default": "Dashboard" }, + "title": { "default": "DataVisualization" }, + "description": { "default": "DataVisualizationCard Description" }, + "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", + "properties": { + "title": "DataVisualization" + }, + "cardSize": "Medium" + } + ] +} diff --git a/examples/ace-data-visualization/src/adaptiveCardExtensions/dataVisualization/loc/en-us.js b/examples/ace-data-visualization/src/adaptiveCardExtensions/dataVisualization/loc/en-us.js index c1150f42..a8f2e9e2 100644 --- a/examples/ace-data-visualization/src/adaptiveCardExtensions/dataVisualization/loc/en-us.js +++ b/examples/ace-data-visualization/src/adaptiveCardExtensions/dataVisualization/loc/en-us.js @@ -1,11 +1,11 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "DataVisualizationCard Description", - "TitleFieldLabel": "Card title", - "Title": "Adaptive Card Extension", - "SubTitle": "Quick view", - "PrimaryText": "SPFx Adaptive Card Extension", - "Description": "Create your SPFx Adaptive Card Extension solution!", - "QuickViewButton": "Quick view" - } -}); \ No newline at end of file + PropertyPaneDescription: 'DataVisualizationCard Description', + TitleFieldLabel: 'Card title', + Title: 'Adaptive Card Extension', + SubTitle: 'Quick view', + PrimaryText: 'SPFx Adaptive Card Extension', + Description: 'Create your SPFx Adaptive Card Extension solution!', + QuickViewButton: 'Quick view' + }; +}); diff --git a/examples/ace-data-visualization/src/adaptiveCardExtensions/dataVisualization/quickView/template/QuickViewTemplate.json b/examples/ace-data-visualization/src/adaptiveCardExtensions/dataVisualization/quickView/template/QuickViewTemplate.json index 295d6376..3ff7f6ed 100644 --- a/examples/ace-data-visualization/src/adaptiveCardExtensions/dataVisualization/quickView/template/QuickViewTemplate.json +++ b/examples/ace-data-visualization/src/adaptiveCardExtensions/dataVisualization/quickView/template/QuickViewTemplate.json @@ -25,4 +25,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/examples/ace-generic-card/.eslintrc.js b/examples/ace-generic-card/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/examples/ace-generic-card/.eslintrc.js +++ b/examples/ace-generic-card/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/examples/ace-generic-card/config/sass.json b/examples/ace-generic-card/config/sass.json index 1cfc17b3..9022585d 100644 --- a/examples/ace-generic-card/config/sass.json +++ b/examples/ace-generic-card/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/examples/ace-generic-card/config/write-manifests.json b/examples/ace-generic-card/config/write-manifests.json index bad35260..11dca670 100644 --- a/examples/ace-generic-card/config/write-manifests.json +++ b/examples/ace-generic-card/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/examples/ace-generic-card/src/adaptiveCardExtensions/genericCard/GenericCardAdaptiveCardExtension.manifest.json b/examples/ace-generic-card/src/adaptiveCardExtensions/genericCard/GenericCardAdaptiveCardExtension.manifest.json index ab12db92..a8f12e9e 100644 --- a/examples/ace-generic-card/src/adaptiveCardExtensions/genericCard/GenericCardAdaptiveCardExtension.manifest.json +++ b/examples/ace-generic-card/src/adaptiveCardExtensions/genericCard/GenericCardAdaptiveCardExtension.manifest.json @@ -13,15 +13,17 @@ // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f "requiresCustomScript": false, "supportedHosts": ["Dashboard"], - "preconfiguredEntries": [{ - "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard - "group": { "default": "Dashboard" }, - "title": { "default": "GenericCard" }, - "description": { "default": "GenericCard Description" }, - "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", - "properties": { - "title": "GenericCard" - }, - "cardSize": "Medium" - }] -} \ No newline at end of file + "preconfiguredEntries": [ + { + "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard + "group": { "default": "Dashboard" }, + "title": { "default": "GenericCard" }, + "description": { "default": "GenericCard Description" }, + "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", + "properties": { + "title": "GenericCard" + }, + "cardSize": "Medium" + } + ] +} diff --git a/examples/ace-generic-card/src/adaptiveCardExtensions/genericCard/loc/en-us.js b/examples/ace-generic-card/src/adaptiveCardExtensions/genericCard/loc/en-us.js index e1b90f2e..ad17ceff 100644 --- a/examples/ace-generic-card/src/adaptiveCardExtensions/genericCard/loc/en-us.js +++ b/examples/ace-generic-card/src/adaptiveCardExtensions/genericCard/loc/en-us.js @@ -1,11 +1,11 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "GenericCard Description", - "TitleFieldLabel": "Card title", - "Title": "Adaptive Card Extension", - "SubTitle": "Quick view", - "PrimaryText": "SPFx Adaptive Card Extension", - "Description": "Create your SPFx Adaptive Card Extension solution!", - "QuickViewButton": "Quick view" - } -}); \ No newline at end of file + PropertyPaneDescription: 'GenericCard Description', + TitleFieldLabel: 'Card title', + Title: 'Adaptive Card Extension', + SubTitle: 'Quick view', + PrimaryText: 'SPFx Adaptive Card Extension', + Description: 'Create your SPFx Adaptive Card Extension solution!', + QuickViewButton: 'Quick view' + }; +}); diff --git a/examples/ace-generic-card/src/adaptiveCardExtensions/genericCard/quickView/template/QuickViewTemplate.json b/examples/ace-generic-card/src/adaptiveCardExtensions/genericCard/quickView/template/QuickViewTemplate.json index 295d6376..3ff7f6ed 100644 --- a/examples/ace-generic-card/src/adaptiveCardExtensions/genericCard/quickView/template/QuickViewTemplate.json +++ b/examples/ace-generic-card/src/adaptiveCardExtensions/genericCard/quickView/template/QuickViewTemplate.json @@ -25,4 +25,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/examples/ace-generic-image-card/.eslintrc.js b/examples/ace-generic-image-card/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/examples/ace-generic-image-card/.eslintrc.js +++ b/examples/ace-generic-image-card/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/examples/ace-generic-image-card/config/sass.json b/examples/ace-generic-image-card/config/sass.json index 2cb55ba4..422e3628 100644 --- a/examples/ace-generic-image-card/config/sass.json +++ b/examples/ace-generic-image-card/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/examples/ace-generic-image-card/config/write-manifests.json b/examples/ace-generic-image-card/config/write-manifests.json index 89f4ed06..666ff0db 100644 --- a/examples/ace-generic-image-card/config/write-manifests.json +++ b/examples/ace-generic-image-card/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/examples/ace-generic-image-card/src/adaptiveCardExtensions/genericImage/GenericImageAdaptiveCardExtension.manifest.json b/examples/ace-generic-image-card/src/adaptiveCardExtensions/genericImage/GenericImageAdaptiveCardExtension.manifest.json index f67239f7..5df8a2c3 100644 --- a/examples/ace-generic-image-card/src/adaptiveCardExtensions/genericImage/GenericImageAdaptiveCardExtension.manifest.json +++ b/examples/ace-generic-image-card/src/adaptiveCardExtensions/genericImage/GenericImageAdaptiveCardExtension.manifest.json @@ -13,15 +13,17 @@ // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f "requiresCustomScript": false, "supportedHosts": ["Dashboard"], - "preconfiguredEntries": [{ - "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard - "group": { "default": "Dashboard" }, - "title": { "default": "GenericImage" }, - "description": { "default": "GenericImageCard Description" }, - "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", - "cardSize": "Large", - "properties": { - "title": "GenericImage" + "preconfiguredEntries": [ + { + "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard + "group": { "default": "Dashboard" }, + "title": { "default": "GenericImage" }, + "description": { "default": "GenericImageCard Description" }, + "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", + "cardSize": "Large", + "properties": { + "title": "GenericImage" + } } - }] -} \ No newline at end of file + ] +} diff --git a/examples/ace-generic-image-card/src/adaptiveCardExtensions/genericImage/loc/en-us.js b/examples/ace-generic-image-card/src/adaptiveCardExtensions/genericImage/loc/en-us.js index 4238cbae..7d763466 100644 --- a/examples/ace-generic-image-card/src/adaptiveCardExtensions/genericImage/loc/en-us.js +++ b/examples/ace-generic-image-card/src/adaptiveCardExtensions/genericImage/loc/en-us.js @@ -1,11 +1,11 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "GenericImageCard Description", - "TitleFieldLabel": "Card title", - "Title": "Adaptive Card Extension", - "SubTitle": "Quick view", - "PrimaryText": "SPFx Adaptive Card Extension", - "Description": "Create your SPFx Adaptive Card Extension solution!", - "QuickViewButton": "Quick view" - } + PropertyPaneDescription: 'GenericImageCard Description', + TitleFieldLabel: 'Card title', + Title: 'Adaptive Card Extension', + SubTitle: 'Quick view', + PrimaryText: 'SPFx Adaptive Card Extension', + Description: 'Create your SPFx Adaptive Card Extension solution!', + QuickViewButton: 'Quick view' + }; }); diff --git a/examples/ace-generic-image-card/src/adaptiveCardExtensions/genericImage/quickView/template/QuickViewTemplate.json b/examples/ace-generic-image-card/src/adaptiveCardExtensions/genericImage/quickView/template/QuickViewTemplate.json index 295d6376..3ff7f6ed 100644 --- a/examples/ace-generic-image-card/src/adaptiveCardExtensions/genericImage/quickView/template/QuickViewTemplate.json +++ b/examples/ace-generic-image-card/src/adaptiveCardExtensions/genericImage/quickView/template/QuickViewTemplate.json @@ -25,4 +25,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/examples/ace-generic-primarytext-card/.eslintrc.js b/examples/ace-generic-primarytext-card/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/examples/ace-generic-primarytext-card/.eslintrc.js +++ b/examples/ace-generic-primarytext-card/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/examples/ace-generic-primarytext-card/config/sass.json b/examples/ace-generic-primarytext-card/config/sass.json index 2cb55ba4..422e3628 100644 --- a/examples/ace-generic-primarytext-card/config/sass.json +++ b/examples/ace-generic-primarytext-card/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/examples/ace-generic-primarytext-card/config/write-manifests.json b/examples/ace-generic-primarytext-card/config/write-manifests.json index 89f4ed06..666ff0db 100644 --- a/examples/ace-generic-primarytext-card/config/write-manifests.json +++ b/examples/ace-generic-primarytext-card/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/examples/ace-generic-primarytext-card/src/adaptiveCardExtensions/genericPrimaryText/GenericPrimaryTextAdaptiveCardExtension.manifest.json b/examples/ace-generic-primarytext-card/src/adaptiveCardExtensions/genericPrimaryText/GenericPrimaryTextAdaptiveCardExtension.manifest.json index 965e7b89..3b7a9828 100644 --- a/examples/ace-generic-primarytext-card/src/adaptiveCardExtensions/genericPrimaryText/GenericPrimaryTextAdaptiveCardExtension.manifest.json +++ b/examples/ace-generic-primarytext-card/src/adaptiveCardExtensions/genericPrimaryText/GenericPrimaryTextAdaptiveCardExtension.manifest.json @@ -13,15 +13,17 @@ // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f "requiresCustomScript": false, "supportedHosts": ["Dashboard"], - "preconfiguredEntries": [{ - "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard - "group": { "default": "Dashboard" }, - "title": { "default": "GenericPrimaryText" }, - "description": { "default": "GenericPrimaryTextCard Description" }, - "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", - "cardSize": "Large", - "properties": { - "title": "GenericPrimaryText" + "preconfiguredEntries": [ + { + "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard + "group": { "default": "Dashboard" }, + "title": { "default": "GenericPrimaryText" }, + "description": { "default": "GenericPrimaryTextCard Description" }, + "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", + "cardSize": "Large", + "properties": { + "title": "GenericPrimaryText" + } } - }] + ] } diff --git a/examples/ace-generic-primarytext-card/src/adaptiveCardExtensions/genericPrimaryText/loc/en-us.js b/examples/ace-generic-primarytext-card/src/adaptiveCardExtensions/genericPrimaryText/loc/en-us.js index b7e87074..045bd740 100644 --- a/examples/ace-generic-primarytext-card/src/adaptiveCardExtensions/genericPrimaryText/loc/en-us.js +++ b/examples/ace-generic-primarytext-card/src/adaptiveCardExtensions/genericPrimaryText/loc/en-us.js @@ -1,11 +1,11 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "GenericPrimaryTextCard Description", - "TitleFieldLabel": "Card title", - "Title": "Adaptive Card Extension", - "SubTitle": "Quick view", - "PrimaryText": "SPFx Adaptive Card Extension", - "Description": "Create your SPFx Adaptive Card Extension solution!", - "QuickViewButton": "Quick view" - } + PropertyPaneDescription: 'GenericPrimaryTextCard Description', + TitleFieldLabel: 'Card title', + Title: 'Adaptive Card Extension', + SubTitle: 'Quick view', + PrimaryText: 'SPFx Adaptive Card Extension', + Description: 'Create your SPFx Adaptive Card Extension solution!', + QuickViewButton: 'Quick view' + }; }); diff --git a/examples/ace-generic-primarytext-card/src/adaptiveCardExtensions/genericPrimaryText/quickView/template/QuickViewTemplate.json b/examples/ace-generic-primarytext-card/src/adaptiveCardExtensions/genericPrimaryText/quickView/template/QuickViewTemplate.json index 295d6376..3ff7f6ed 100644 --- a/examples/ace-generic-primarytext-card/src/adaptiveCardExtensions/genericPrimaryText/quickView/template/QuickViewTemplate.json +++ b/examples/ace-generic-primarytext-card/src/adaptiveCardExtensions/genericPrimaryText/quickView/template/QuickViewTemplate.json @@ -25,4 +25,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/examples/ace-search-card/.eslintrc.js b/examples/ace-search-card/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/examples/ace-search-card/.eslintrc.js +++ b/examples/ace-search-card/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/examples/ace-search-card/config/sass.json b/examples/ace-search-card/config/sass.json index 1cfc17b3..9022585d 100644 --- a/examples/ace-search-card/config/sass.json +++ b/examples/ace-search-card/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/examples/ace-search-card/config/write-manifests.json b/examples/ace-search-card/config/write-manifests.json index bad35260..11dca670 100644 --- a/examples/ace-search-card/config/write-manifests.json +++ b/examples/ace-search-card/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/examples/ace-search-card/src/adaptiveCardExtensions/minimal/MinimalAdaptiveCardExtension.manifest.json b/examples/ace-search-card/src/adaptiveCardExtensions/minimal/MinimalAdaptiveCardExtension.manifest.json index 94f742a9..75b5dcba 100644 --- a/examples/ace-search-card/src/adaptiveCardExtensions/minimal/MinimalAdaptiveCardExtension.manifest.json +++ b/examples/ace-search-card/src/adaptiveCardExtensions/minimal/MinimalAdaptiveCardExtension.manifest.json @@ -13,15 +13,17 @@ // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f "requiresCustomScript": false, "supportedHosts": ["Dashboard"], - "preconfiguredEntries": [{ - "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard - "group": { "default": "Dashboard" }, - "title": { "default": "Minimal" }, - "description": { "default": "SearchCard Description" }, - "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", - "properties": { - "title": "Minimal" - }, - "cardSize": "Medium" - }] + "preconfiguredEntries": [ + { + "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard + "group": { "default": "Dashboard" }, + "title": { "default": "Minimal" }, + "description": { "default": "SearchCard Description" }, + "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", + "properties": { + "title": "Minimal" + }, + "cardSize": "Medium" + } + ] } diff --git a/examples/ace-search-card/src/adaptiveCardExtensions/minimal/loc/en-us.js b/examples/ace-search-card/src/adaptiveCardExtensions/minimal/loc/en-us.js index 9ed4a802..8da3b280 100644 --- a/examples/ace-search-card/src/adaptiveCardExtensions/minimal/loc/en-us.js +++ b/examples/ace-search-card/src/adaptiveCardExtensions/minimal/loc/en-us.js @@ -1,11 +1,11 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "SearchCard Description", - "TitleFieldLabel": "Card title", - "Title": "Adaptive Card Extension", - "SubTitle": "Quick view", - "PrimaryText": "SPFx Adaptive Card Extension", - "Description": "Create your SPFx Adaptive Card Extension solution!", - "QuickViewButton": "Quick view" - } -}); \ No newline at end of file + PropertyPaneDescription: 'SearchCard Description', + TitleFieldLabel: 'Card title', + Title: 'Adaptive Card Extension', + SubTitle: 'Quick view', + PrimaryText: 'SPFx Adaptive Card Extension', + Description: 'Create your SPFx Adaptive Card Extension solution!', + QuickViewButton: 'Quick view' + }; +}); diff --git a/examples/ace-search-card/src/adaptiveCardExtensions/minimal/quickView/template/QuickViewTemplate.json b/examples/ace-search-card/src/adaptiveCardExtensions/minimal/quickView/template/QuickViewTemplate.json index 295d6376..3ff7f6ed 100644 --- a/examples/ace-search-card/src/adaptiveCardExtensions/minimal/quickView/template/QuickViewTemplate.json +++ b/examples/ace-search-card/src/adaptiveCardExtensions/minimal/quickView/template/QuickViewTemplate.json @@ -25,4 +25,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/examples/extension-application-customizer/.eslintrc.js b/examples/extension-application-customizer/.eslintrc.js index 6f381f65..7a2d62ef 100644 --- a/examples/extension-application-customizer/.eslintrc.js +++ b/examples/extension-application-customizer/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { diff --git a/examples/extension-application-customizer/config/package-solution.json b/examples/extension-application-customizer/config/package-solution.json index d5f7c6d7..625de3f3 100644 --- a/examples/extension-application-customizer/config/package-solution.json +++ b/examples/extension-application-customizer/config/package-solution.json @@ -32,10 +32,7 @@ "id": "0371fe5a-40d6-5183-8b37-80b9120a6ce4", "version": "1.0.0.0", "assets": { - "elementManifests": [ - "elements.xml", - "ClientSideInstance.xml" - ] + "elementManifests": ["elements.xml", "ClientSideInstance.xml"] } } ] diff --git a/examples/extension-application-customizer/src/extensions/minimalApplicationCustomizer/loc/en-us.js b/examples/extension-application-customizer/src/extensions/minimalApplicationCustomizer/loc/en-us.js index 4e554113..e5d726d0 100644 --- a/examples/extension-application-customizer/src/extensions/minimalApplicationCustomizer/loc/en-us.js +++ b/examples/extension-application-customizer/src/extensions/minimalApplicationCustomizer/loc/en-us.js @@ -1,5 +1,5 @@ -define([], function() { +define([], function () { return { - "Title": "MinimalApplicationCustomizer" - } + Title: 'MinimalApplicationCustomizer' + }; }); diff --git a/examples/extension-fieldcustomizer-minimal/.eslintrc.js b/examples/extension-fieldcustomizer-minimal/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/examples/extension-fieldcustomizer-minimal/.eslintrc.js +++ b/examples/extension-fieldcustomizer-minimal/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/examples/extension-fieldcustomizer-minimal/config/package-solution.json b/examples/extension-fieldcustomizer-minimal/config/package-solution.json index 2b4e05ab..3b2574ca 100644 --- a/examples/extension-fieldcustomizer-minimal/config/package-solution.json +++ b/examples/extension-fieldcustomizer-minimal/config/package-solution.json @@ -32,9 +32,7 @@ "id": "0371fe5a-40d6-5183-8b37-80b9120a6ce4", "version": "1.0.0.0", "assets": { - "elementManifests": [ - "elements.xml" - ] + "elementManifests": ["elements.xml"] } } ] diff --git a/examples/extension-fieldcustomizer-minimal/src/extensions/minimal/loc/en-us.js b/examples/extension-fieldcustomizer-minimal/src/extensions/minimal/loc/en-us.js index 9d6c0a26..e4986dbe 100644 --- a/examples/extension-fieldcustomizer-minimal/src/extensions/minimal/loc/en-us.js +++ b/examples/extension-fieldcustomizer-minimal/src/extensions/minimal/loc/en-us.js @@ -1,5 +1,5 @@ -define([], function() { +define([], function () { return { - "Title": "MinimalFieldCustomizer" - } + Title: 'MinimalFieldCustomizer' + }; }); diff --git a/examples/extension-fieldcustomizer-noframework/.eslintrc.js b/examples/extension-fieldcustomizer-noframework/.eslintrc.js index 6f381f65..7a2d62ef 100644 --- a/examples/extension-fieldcustomizer-noframework/.eslintrc.js +++ b/examples/extension-fieldcustomizer-noframework/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { diff --git a/examples/extension-fieldcustomizer-noframework/config/package-solution.json b/examples/extension-fieldcustomizer-noframework/config/package-solution.json index faf6308b..a6c0e75d 100644 --- a/examples/extension-fieldcustomizer-noframework/config/package-solution.json +++ b/examples/extension-fieldcustomizer-noframework/config/package-solution.json @@ -32,9 +32,7 @@ "id": "7d46331b-4f37-5bb4-8e4f-2dd9eb8717fa", "version": "1.0.0.0", "assets": { - "elementManifests": [ - "elements.xml" - ] + "elementManifests": ["elements.xml"] } } ] diff --git a/examples/extension-fieldcustomizer-noframework/src/extensions/noFramework/loc/en-us.js b/examples/extension-fieldcustomizer-noframework/src/extensions/noFramework/loc/en-us.js index ebcd03f7..d4464c8e 100644 --- a/examples/extension-fieldcustomizer-noframework/src/extensions/noFramework/loc/en-us.js +++ b/examples/extension-fieldcustomizer-noframework/src/extensions/noFramework/loc/en-us.js @@ -1,5 +1,5 @@ -define([], function() { +define([], function () { return { - "Title": "NoFrameworkFieldCustomizer" - } + Title: 'NoFrameworkFieldCustomizer' + }; }); diff --git a/examples/extension-fieldcustomizer-react/.eslintrc.js b/examples/extension-fieldcustomizer-react/.eslintrc.js index a790d607..dc746107 100644 --- a/examples/extension-fieldcustomizer-react/.eslintrc.js +++ b/examples/extension-fieldcustomizer-react/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/examples/extension-fieldcustomizer-react/config/package-solution.json b/examples/extension-fieldcustomizer-react/config/package-solution.json index 7abb6709..c3b4da30 100644 --- a/examples/extension-fieldcustomizer-react/config/package-solution.json +++ b/examples/extension-fieldcustomizer-react/config/package-solution.json @@ -32,9 +32,7 @@ "id": "f7b33822-d7f8-5789-8d0a-6a3719346afa", "version": "1.0.0.0", "assets": { - "elementManifests": [ - "elements.xml" - ] + "elementManifests": ["elements.xml"] } } ] diff --git a/examples/extension-fieldcustomizer-react/src/extensions/reactFieldCustomizer/loc/en-us.js b/examples/extension-fieldcustomizer-react/src/extensions/reactFieldCustomizer/loc/en-us.js index 4e071619..41d68f1b 100644 --- a/examples/extension-fieldcustomizer-react/src/extensions/reactFieldCustomizer/loc/en-us.js +++ b/examples/extension-fieldcustomizer-react/src/extensions/reactFieldCustomizer/loc/en-us.js @@ -1,5 +1,5 @@ -define([], function() { +define([], function () { return { - "Title": "ReactFieldCustomizerFieldCustomizer" - } + Title: 'ReactFieldCustomizerFieldCustomizer' + }; }); diff --git a/examples/extension-formcustomizer-noframework/.eslintrc.js b/examples/extension-formcustomizer-noframework/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/examples/extension-formcustomizer-noframework/.eslintrc.js +++ b/examples/extension-formcustomizer-noframework/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/examples/extension-formcustomizer-noframework/src/extensions/noFramework/loc/en-us.js b/examples/extension-formcustomizer-noframework/src/extensions/noFramework/loc/en-us.js index c6b33ff9..c0568a84 100644 --- a/examples/extension-formcustomizer-noframework/src/extensions/noFramework/loc/en-us.js +++ b/examples/extension-formcustomizer-noframework/src/extensions/noFramework/loc/en-us.js @@ -1,7 +1,7 @@ -define([], function() { +define([], function () { return { - "Save": "Save", - "Cancel": "Cancel", - "Close": "Close" - } + Save: 'Save', + Cancel: 'Cancel', + Close: 'Close' + }; }); diff --git a/examples/extension-formcustomizer-react/.eslintrc.js b/examples/extension-formcustomizer-react/.eslintrc.js index a790d607..dc746107 100644 --- a/examples/extension-formcustomizer-react/.eslintrc.js +++ b/examples/extension-formcustomizer-react/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/examples/extension-formcustomizer-react/config/sass.json b/examples/extension-formcustomizer-react/config/sass.json index 1cfc17b3..9022585d 100644 --- a/examples/extension-formcustomizer-react/config/sass.json +++ b/examples/extension-formcustomizer-react/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/examples/extension-formcustomizer-react/config/write-manifests.json b/examples/extension-formcustomizer-react/config/write-manifests.json index bad35260..11dca670 100644 --- a/examples/extension-formcustomizer-react/config/write-manifests.json +++ b/examples/extension-formcustomizer-react/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/examples/extension-formcustomizer-react/src/extensions/reactFormCustomizer/loc/en-us.js b/examples/extension-formcustomizer-react/src/extensions/reactFormCustomizer/loc/en-us.js index 8b989099..c0568a84 100644 --- a/examples/extension-formcustomizer-react/src/extensions/reactFormCustomizer/loc/en-us.js +++ b/examples/extension-formcustomizer-react/src/extensions/reactFormCustomizer/loc/en-us.js @@ -1,7 +1,7 @@ -define([], function() { +define([], function () { return { - "Save": "Save", - "Cancel": "Cancel", - "Close": "Close" - } -}); \ No newline at end of file + Save: 'Save', + Cancel: 'Cancel', + Close: 'Close' + }; +}); diff --git a/examples/extension-listviewcommandset/.eslintrc.js b/examples/extension-listviewcommandset/.eslintrc.js index 6f381f65..7a2d62ef 100644 --- a/examples/extension-listviewcommandset/.eslintrc.js +++ b/examples/extension-listviewcommandset/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { diff --git a/examples/extension-listviewcommandset/src/extensions/minimalCommandSet/loc/en-us.js b/examples/extension-listviewcommandset/src/extensions/minimalCommandSet/loc/en-us.js index 4bb1be79..d6a19e1b 100644 --- a/examples/extension-listviewcommandset/src/extensions/minimalCommandSet/loc/en-us.js +++ b/examples/extension-listviewcommandset/src/extensions/minimalCommandSet/loc/en-us.js @@ -1,6 +1,6 @@ -define([], function() { +define([], function () { return { - "Command1": "Command 1", - "Command2": "Command 2" - } + Command1: 'Command 1', + Command2: 'Command 2' + }; }); diff --git a/examples/extension-search-query-modifier/.eslintrc.js b/examples/extension-search-query-modifier/.eslintrc.js index 6f381f65..7a2d62ef 100644 --- a/examples/extension-search-query-modifier/.eslintrc.js +++ b/examples/extension-search-query-modifier/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { diff --git a/examples/extension-search-query-modifier/config/package-solution.json b/examples/extension-search-query-modifier/config/package-solution.json index c71b0014..cc635be5 100644 --- a/examples/extension-search-query-modifier/config/package-solution.json +++ b/examples/extension-search-query-modifier/config/package-solution.json @@ -32,10 +32,7 @@ "id": "0371fe5a-40d6-5183-8b37-80b9120a6ce4", "version": "1.0.0.0", "assets": { - "elementManifests": [ - "elements.xml", - "ClientSideInstance.xml" - ] + "elementManifests": ["elements.xml", "ClientSideInstance.xml"] } } ] diff --git a/examples/extension-search-query-modifier/src/extensions/minimalSearchQueryModifier/loc/en-us.js b/examples/extension-search-query-modifier/src/extensions/minimalSearchQueryModifier/loc/en-us.js index cd2f4171..4a483f51 100644 --- a/examples/extension-search-query-modifier/src/extensions/minimalSearchQueryModifier/loc/en-us.js +++ b/examples/extension-search-query-modifier/src/extensions/minimalSearchQueryModifier/loc/en-us.js @@ -1,5 +1,5 @@ -define([], function() { +define([], function () { return { - "Title": "MinimalSearchQueryModifier" - } + Title: 'MinimalSearchQueryModifier' + }; }); diff --git a/examples/library/.eslintrc.js b/examples/library/.eslintrc.js index c5f8cac7..7a2d62ef 100644 --- a/examples/library/.eslintrc.js +++ b/examples/library/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/examples/library/config/sass.json b/examples/library/config/sass.json index 2cb55ba4..422e3628 100644 --- a/examples/library/config/sass.json +++ b/examples/library/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/examples/library/config/write-manifests.json b/examples/library/config/write-manifests.json index 89f4ed06..666ff0db 100644 --- a/examples/library/config/write-manifests.json +++ b/examples/library/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/examples/library/src/libraries/example/loc/en-us.js b/examples/library/src/libraries/example/loc/en-us.js index aca5a9dc..70d0b525 100644 --- a/examples/library/src/libraries/example/loc/en-us.js +++ b/examples/library/src/libraries/example/loc/en-us.js @@ -1,7 +1,7 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "Library Description", - "BasicGroupName": "Group Name", - "DescriptionFieldLabel": "Description Field" - } + PropertyPaneDescription: 'Library Description', + BasicGroupName: 'Group Name', + DescriptionFieldLabel: 'Description Field' + }; }); diff --git a/examples/webpart-minimal/.eslintrc.js b/examples/webpart-minimal/.eslintrc.js index b1c42cb0..d7790e7e 100644 --- a/examples/webpart-minimal/.eslintrc.js +++ b/examples/webpart-minimal/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/examples/webpart-minimal/config/sass.json b/examples/webpart-minimal/config/sass.json index 1cfc17b3..9022585d 100644 --- a/examples/webpart-minimal/config/sass.json +++ b/examples/webpart-minimal/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/examples/webpart-minimal/config/write-manifests.json b/examples/webpart-minimal/config/write-manifests.json index bad35260..11dca670 100644 --- a/examples/webpart-minimal/config/write-manifests.json +++ b/examples/webpart-minimal/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/examples/webpart-minimal/src/webparts/minimalWebPart/MinimalWebPart.manifest.json b/examples/webpart-minimal/src/webparts/minimalWebPart/MinimalWebPart.manifest.json index 71bd0789..b1cc2626 100644 --- a/examples/webpart-minimal/src/webparts/minimalWebPart/MinimalWebPart.manifest.json +++ b/examples/webpart-minimal/src/webparts/minimalWebPart/MinimalWebPart.manifest.json @@ -15,14 +15,16 @@ "supportedHosts": ["SharePointWebPart", "TeamsPersonalApp", "TeamsTab", "SharePointFullPage"], "supportsThemeVariants": true, - "preconfiguredEntries": [{ - "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Advanced - "group": { "default": "Advanced" }, - "title": { "default": "Minimal Web Part" }, - "description": { "default": "Minimal Web Part Description" }, - "officeFabricIconFontName": "Page", - "properties": { - "description": "Minimal Web Part" + "preconfiguredEntries": [ + { + "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Advanced + "group": { "default": "Advanced" }, + "title": { "default": "Minimal Web Part" }, + "description": { "default": "Minimal Web Part Description" }, + "officeFabricIconFontName": "Page", + "properties": { + "description": "Minimal Web Part" + } } - }] + ] } diff --git a/examples/webpart-minimal/src/webparts/minimalWebPart/loc/en-us.js b/examples/webpart-minimal/src/webparts/minimalWebPart/loc/en-us.js index 27ba79d4..9f2dbda5 100644 --- a/examples/webpart-minimal/src/webparts/minimalWebPart/loc/en-us.js +++ b/examples/webpart-minimal/src/webparts/minimalWebPart/loc/en-us.js @@ -1,4 +1,3 @@ -define([], function() { - return { - } -}); \ No newline at end of file +define([], function () { + return {}; +}); diff --git a/examples/webpart-noframework/.eslintrc.js b/examples/webpart-noframework/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/examples/webpart-noframework/.eslintrc.js +++ b/examples/webpart-noframework/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/examples/webpart-noframework/config/sass.json b/examples/webpart-noframework/config/sass.json index 1cfc17b3..9022585d 100644 --- a/examples/webpart-noframework/config/sass.json +++ b/examples/webpart-noframework/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/examples/webpart-noframework/config/write-manifests.json b/examples/webpart-noframework/config/write-manifests.json index bad35260..11dca670 100644 --- a/examples/webpart-noframework/config/write-manifests.json +++ b/examples/webpart-noframework/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/examples/webpart-noframework/src/webparts/noFrameworkWebPart/NoFrameworkWebPart.manifest.json b/examples/webpart-noframework/src/webparts/noFrameworkWebPart/NoFrameworkWebPart.manifest.json index 08310e30..7c04cdfd 100644 --- a/examples/webpart-noframework/src/webparts/noFrameworkWebPart/NoFrameworkWebPart.manifest.json +++ b/examples/webpart-noframework/src/webparts/noFrameworkWebPart/NoFrameworkWebPart.manifest.json @@ -15,14 +15,16 @@ "supportedHosts": ["SharePointWebPart", "TeamsPersonalApp", "TeamsTab", "SharePointFullPage"], "supportsThemeVariants": true, - "preconfiguredEntries": [{ - "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Advanced - "group": { "default": "Advanced" }, - "title": { "default": "NoFramework" }, - "description": { "default": "NoFramework description" }, - "officeFabricIconFontName": "Page", - "properties": { - "description": "NoFramework" + "preconfiguredEntries": [ + { + "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Advanced + "group": { "default": "Advanced" }, + "title": { "default": "NoFramework" }, + "description": { "default": "NoFramework description" }, + "officeFabricIconFontName": "Page", + "properties": { + "description": "NoFramework" + } } - }] + ] } diff --git a/examples/webpart-noframework/src/webparts/noFrameworkWebPart/loc/en-us.js b/examples/webpart-noframework/src/webparts/noFrameworkWebPart/loc/en-us.js index d110a8fa..81325419 100644 --- a/examples/webpart-noframework/src/webparts/noFrameworkWebPart/loc/en-us.js +++ b/examples/webpart-noframework/src/webparts/noFrameworkWebPart/loc/en-us.js @@ -1,16 +1,16 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "Description", - "BasicGroupName": "Group Name", - "DescriptionFieldLabel": "Description Field", - "AppLocalEnvironmentSharePoint": "The app is running on your local environment as SharePoint web part", - "AppLocalEnvironmentTeams": "The app is running on your local environment as Microsoft Teams app", - "AppLocalEnvironmentOffice": "The app is running on your local environment in office.com", - "AppLocalEnvironmentOutlook": "The app is running on your local environment in Outlook", - "AppSharePointEnvironment": "The app is running on SharePoint page", - "AppTeamsTabEnvironment": "The app is running in Microsoft Teams", - "AppOfficeEnvironment": "The app is running in office.com", - "AppOutlookEnvironment": "The app is running in Outlook", - "UnknownEnvironment": "The app is running in an unknown environment" - } + PropertyPaneDescription: 'Description', + BasicGroupName: 'Group Name', + DescriptionFieldLabel: 'Description Field', + AppLocalEnvironmentSharePoint: 'The app is running on your local environment as SharePoint web part', + AppLocalEnvironmentTeams: 'The app is running on your local environment as Microsoft Teams app', + AppLocalEnvironmentOffice: 'The app is running on your local environment in office.com', + AppLocalEnvironmentOutlook: 'The app is running on your local environment in Outlook', + AppSharePointEnvironment: 'The app is running on SharePoint page', + AppTeamsTabEnvironment: 'The app is running in Microsoft Teams', + AppOfficeEnvironment: 'The app is running in office.com', + AppOutlookEnvironment: 'The app is running in Outlook', + UnknownEnvironment: 'The app is running in an unknown environment' + }; }); diff --git a/examples/webpart-react/.eslintrc.js b/examples/webpart-react/.eslintrc.js index 19628901..55937bc4 100644 --- a/examples/webpart-react/.eslintrc.js +++ b/examples/webpart-react/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { diff --git a/examples/webpart-react/config/sass.json b/examples/webpart-react/config/sass.json index 1cfc17b3..9022585d 100644 --- a/examples/webpart-react/config/sass.json +++ b/examples/webpart-react/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/examples/webpart-react/config/write-manifests.json b/examples/webpart-react/config/write-manifests.json index bad35260..11dca670 100644 --- a/examples/webpart-react/config/write-manifests.json +++ b/examples/webpart-react/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/examples/webpart-react/src/webparts/minimalWebPart/MinimalWebPart.manifest.json b/examples/webpart-react/src/webparts/minimalWebPart/MinimalWebPart.manifest.json index 3d82fd64..b9897f7a 100644 --- a/examples/webpart-react/src/webparts/minimalWebPart/MinimalWebPart.manifest.json +++ b/examples/webpart-react/src/webparts/minimalWebPart/MinimalWebPart.manifest.json @@ -15,14 +15,16 @@ "supportedHosts": ["SharePointWebPart", "TeamsPersonalApp", "TeamsTab", "SharePointFullPage"], "supportsThemeVariants": true, - "preconfiguredEntries": [{ - "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Advanced - "group": { "default": "Advanced" }, - "title": { "default": "Minimal Web Part" }, - "description": { "default": "Minimal Web Part Description" }, - "officeFabricIconFontName": "Page", - "properties": { - "description": "Minimal Web Part" + "preconfiguredEntries": [ + { + "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Advanced + "group": { "default": "Advanced" }, + "title": { "default": "Minimal Web Part" }, + "description": { "default": "Minimal Web Part Description" }, + "officeFabricIconFontName": "Page", + "properties": { + "description": "Minimal Web Part" + } } - }] + ] } diff --git a/examples/webpart-react/src/webparts/minimalWebPart/loc/en-us.js b/examples/webpart-react/src/webparts/minimalWebPart/loc/en-us.js index d110a8fa..81325419 100644 --- a/examples/webpart-react/src/webparts/minimalWebPart/loc/en-us.js +++ b/examples/webpart-react/src/webparts/minimalWebPart/loc/en-us.js @@ -1,16 +1,16 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "Description", - "BasicGroupName": "Group Name", - "DescriptionFieldLabel": "Description Field", - "AppLocalEnvironmentSharePoint": "The app is running on your local environment as SharePoint web part", - "AppLocalEnvironmentTeams": "The app is running on your local environment as Microsoft Teams app", - "AppLocalEnvironmentOffice": "The app is running on your local environment in office.com", - "AppLocalEnvironmentOutlook": "The app is running on your local environment in Outlook", - "AppSharePointEnvironment": "The app is running on SharePoint page", - "AppTeamsTabEnvironment": "The app is running in Microsoft Teams", - "AppOfficeEnvironment": "The app is running in office.com", - "AppOutlookEnvironment": "The app is running in Outlook", - "UnknownEnvironment": "The app is running in an unknown environment" - } + PropertyPaneDescription: 'Description', + BasicGroupName: 'Group Name', + DescriptionFieldLabel: 'Description Field', + AppLocalEnvironmentSharePoint: 'The app is running on your local environment as SharePoint web part', + AppLocalEnvironmentTeams: 'The app is running on your local environment as Microsoft Teams app', + AppLocalEnvironmentOffice: 'The app is running on your local environment in office.com', + AppLocalEnvironmentOutlook: 'The app is running on your local environment in Outlook', + AppSharePointEnvironment: 'The app is running on SharePoint page', + AppTeamsTabEnvironment: 'The app is running in Microsoft Teams', + AppOfficeEnvironment: 'The app is running in office.com', + AppOutlookEnvironment: 'The app is running in Outlook', + UnknownEnvironment: 'The app is running in an unknown environment' + }; }); diff --git a/templates/ace-data-visualization/.eslintrc.js b/templates/ace-data-visualization/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/templates/ace-data-visualization/.eslintrc.js +++ b/templates/ace-data-visualization/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/templates/ace-data-visualization/config/sass.json b/templates/ace-data-visualization/config/sass.json index 1cfc17b3..9022585d 100644 --- a/templates/ace-data-visualization/config/sass.json +++ b/templates/ace-data-visualization/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/templates/ace-data-visualization/config/write-manifests.json b/templates/ace-data-visualization/config/write-manifests.json index bad35260..11dca670 100644 --- a/templates/ace-data-visualization/config/write-manifests.json +++ b/templates/ace-data-visualization/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/templates/ace-data-visualization/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js b/templates/ace-data-visualization/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js index 50696d2e..5e239d74 100644 --- a/templates/ace-data-visualization/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js +++ b/templates/ace-data-visualization/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js @@ -1,11 +1,11 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "<%= componentDescription %>", - "TitleFieldLabel": "Card title", - "Title": "Adaptive Card Extension", - "SubTitle": "Quick view", - "PrimaryText": "SPFx Adaptive Card Extension", - "Description": "Create your SPFx Adaptive Card Extension solution!", - "QuickViewButton": "Quick view" - } -}); \ No newline at end of file + PropertyPaneDescription: '<%= componentDescription %>', + TitleFieldLabel: 'Card title', + Title: 'Adaptive Card Extension', + SubTitle: 'Quick view', + PrimaryText: 'SPFx Adaptive Card Extension', + Description: 'Create your SPFx Adaptive Card Extension solution!', + QuickViewButton: 'Quick view' + }; +}); diff --git a/templates/ace-data-visualization/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json b/templates/ace-data-visualization/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json index 295d6376..3ff7f6ed 100644 --- a/templates/ace-data-visualization/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json +++ b/templates/ace-data-visualization/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json @@ -25,4 +25,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/templates/ace-data-visualization/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json b/templates/ace-data-visualization/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json index 6e876b4f..ae7a5b50 100644 --- a/templates/ace-data-visualization/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json +++ b/templates/ace-data-visualization/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json @@ -13,15 +13,17 @@ // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f "requiresCustomScript": false, "supportedHosts": ["Dashboard"], - "preconfiguredEntries": [{ - "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard - "group": { "default": "Dashboard" }, - "title": { "default": "<%= componentNameCapitalCase %>" }, - "description": { "default": "<%= componentDescription %>" }, - "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", - "properties": { - "title": "<%= componentNameCapitalCase %>" - }, - "cardSize": "Medium" - }] -} \ No newline at end of file + "preconfiguredEntries": [ + { + "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard + "group": { "default": "Dashboard" }, + "title": { "default": "<%= componentNameCapitalCase %>" }, + "description": { "default": "<%= componentDescription %>" }, + "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", + "properties": { + "title": "<%= componentNameCapitalCase %>" + }, + "cardSize": "Medium" + } + ] +} diff --git a/templates/ace-data-visualization/template.json b/templates/ace-data-visualization/template.json index 0dbabe80..6e9bad33 100644 --- a/templates/ace-data-visualization/template.json +++ b/templates/ace-data-visualization/template.json @@ -1,52 +1,52 @@ { - "name": "ace-data-visualization", - "description": "A SharePoint Framework Adaptive Card Extension with Data Visualization", - "version": "1.0.0", - "spfxVersion": "1.22.2", - "contextSchema": { - "componentNameCapitalCase": { - "type": "string", - "description": "The component name in capital case (e.g., Minimal)" - }, - "componentNameCamelCase": { - "type": "string", - "description": "The component name in camel case (e.g., minimal)" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "The component name in hyphen case (e.g., minimal)" - }, - "componentNameUnescaped": { - "type": "string", - "description": "The component name unescaped" - }, - "componentDescription": { - "type": "string", - "description": "The component description" - }, - "componentAlias": { - "type": "string", - "description": "The component alias" - }, - "libraryName": { - "type": "string", - "description": "The library name" - }, - "solutionId": { - "type": "string", - "description": "The solution GUID" - }, - "componentId": { - "type": "string", - "description": "The component GUID" - }, - "featureId": { - "type": "string", - "description": "The feature GUID" - }, - "componentNameAllCaps": { - "type": "string", - "description": "The component name in ALL_CAPS" - } + "name": "ace-data-visualization", + "description": "A SharePoint Framework Adaptive Card Extension with Data Visualization", + "version": "1.0.0", + "spfxVersion": "1.22.2", + "contextSchema": { + "componentNameCapitalCase": { + "type": "string", + "description": "The component name in capital case (e.g., Minimal)" + }, + "componentNameCamelCase": { + "type": "string", + "description": "The component name in camel case (e.g., minimal)" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "The component name in hyphen case (e.g., minimal)" + }, + "componentNameUnescaped": { + "type": "string", + "description": "The component name unescaped" + }, + "componentDescription": { + "type": "string", + "description": "The component description" + }, + "componentAlias": { + "type": "string", + "description": "The component alias" + }, + "libraryName": { + "type": "string", + "description": "The library name" + }, + "solutionId": { + "type": "string", + "description": "The solution GUID" + }, + "componentId": { + "type": "string", + "description": "The component GUID" + }, + "featureId": { + "type": "string", + "description": "The feature GUID" + }, + "componentNameAllCaps": { + "type": "string", + "description": "The component name in ALL_CAPS" } + } } diff --git a/templates/ace-generic-card/.eslintrc.js b/templates/ace-generic-card/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/templates/ace-generic-card/.eslintrc.js +++ b/templates/ace-generic-card/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/templates/ace-generic-card/config/sass.json b/templates/ace-generic-card/config/sass.json index 1cfc17b3..9022585d 100644 --- a/templates/ace-generic-card/config/sass.json +++ b/templates/ace-generic-card/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/templates/ace-generic-card/config/write-manifests.json b/templates/ace-generic-card/config/write-manifests.json index bad35260..11dca670 100644 --- a/templates/ace-generic-card/config/write-manifests.json +++ b/templates/ace-generic-card/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/templates/ace-generic-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js b/templates/ace-generic-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js index 50696d2e..5e239d74 100644 --- a/templates/ace-generic-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js +++ b/templates/ace-generic-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js @@ -1,11 +1,11 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "<%= componentDescription %>", - "TitleFieldLabel": "Card title", - "Title": "Adaptive Card Extension", - "SubTitle": "Quick view", - "PrimaryText": "SPFx Adaptive Card Extension", - "Description": "Create your SPFx Adaptive Card Extension solution!", - "QuickViewButton": "Quick view" - } -}); \ No newline at end of file + PropertyPaneDescription: '<%= componentDescription %>', + TitleFieldLabel: 'Card title', + Title: 'Adaptive Card Extension', + SubTitle: 'Quick view', + PrimaryText: 'SPFx Adaptive Card Extension', + Description: 'Create your SPFx Adaptive Card Extension solution!', + QuickViewButton: 'Quick view' + }; +}); diff --git a/templates/ace-generic-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json b/templates/ace-generic-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json index 295d6376..3ff7f6ed 100644 --- a/templates/ace-generic-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json +++ b/templates/ace-generic-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json @@ -25,4 +25,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/templates/ace-generic-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json b/templates/ace-generic-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json index 6e876b4f..ae7a5b50 100644 --- a/templates/ace-generic-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json +++ b/templates/ace-generic-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json @@ -13,15 +13,17 @@ // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f "requiresCustomScript": false, "supportedHosts": ["Dashboard"], - "preconfiguredEntries": [{ - "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard - "group": { "default": "Dashboard" }, - "title": { "default": "<%= componentNameCapitalCase %>" }, - "description": { "default": "<%= componentDescription %>" }, - "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", - "properties": { - "title": "<%= componentNameCapitalCase %>" - }, - "cardSize": "Medium" - }] -} \ No newline at end of file + "preconfiguredEntries": [ + { + "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard + "group": { "default": "Dashboard" }, + "title": { "default": "<%= componentNameCapitalCase %>" }, + "description": { "default": "<%= componentDescription %>" }, + "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", + "properties": { + "title": "<%= componentNameCapitalCase %>" + }, + "cardSize": "Medium" + } + ] +} diff --git a/templates/ace-generic-card/template.json b/templates/ace-generic-card/template.json index add5e744..6e7f4c1e 100644 --- a/templates/ace-generic-card/template.json +++ b/templates/ace-generic-card/template.json @@ -1,52 +1,52 @@ { - "name": "ace-generic-card", - "description": "A SharePoint Framework Adaptive Card Extension with Generic Card Template", - "version": "1.0.0", - "spfxVersion": "1.22.2", - "contextSchema": { - "componentNameCapitalCase": { - "type": "string", - "description": "The component name in capital case (e.g., Minimal)" - }, - "componentNameCamelCase": { - "type": "string", - "description": "The component name in camel case (e.g., minimal)" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "The component name in hyphen case (e.g., minimal)" - }, - "componentNameUnescaped": { - "type": "string", - "description": "The component name unescaped" - }, - "componentAlias": { - "type": "string", - "description": "The component alias" - }, - "libraryName": { - "type": "string", - "description": "The library name" - }, - "solutionId": { - "type": "string", - "description": "The solution GUID" - }, - "componentId": { - "type": "string", - "description": "The component GUID" - }, - "featureId": { - "type": "string", - "description": "The feature GUID" - }, - "componentNameAllCaps": { - "type": "string", - "description": "The component name in ALL_CAPS" - }, - "componentDescription": { - "type": "string", - "description": "The component description" - } + "name": "ace-generic-card", + "description": "A SharePoint Framework Adaptive Card Extension with Generic Card Template", + "version": "1.0.0", + "spfxVersion": "1.22.2", + "contextSchema": { + "componentNameCapitalCase": { + "type": "string", + "description": "The component name in capital case (e.g., Minimal)" + }, + "componentNameCamelCase": { + "type": "string", + "description": "The component name in camel case (e.g., minimal)" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "The component name in hyphen case (e.g., minimal)" + }, + "componentNameUnescaped": { + "type": "string", + "description": "The component name unescaped" + }, + "componentAlias": { + "type": "string", + "description": "The component alias" + }, + "libraryName": { + "type": "string", + "description": "The library name" + }, + "solutionId": { + "type": "string", + "description": "The solution GUID" + }, + "componentId": { + "type": "string", + "description": "The component GUID" + }, + "featureId": { + "type": "string", + "description": "The feature GUID" + }, + "componentNameAllCaps": { + "type": "string", + "description": "The component name in ALL_CAPS" + }, + "componentDescription": { + "type": "string", + "description": "The component description" } + } } diff --git a/templates/ace-generic-image-card/.eslintrc.js b/templates/ace-generic-image-card/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/templates/ace-generic-image-card/.eslintrc.js +++ b/templates/ace-generic-image-card/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/templates/ace-generic-image-card/config/sass.json b/templates/ace-generic-image-card/config/sass.json index 2cb55ba4..422e3628 100644 --- a/templates/ace-generic-image-card/config/sass.json +++ b/templates/ace-generic-image-card/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/templates/ace-generic-image-card/config/write-manifests.json b/templates/ace-generic-image-card/config/write-manifests.json index 89f4ed06..666ff0db 100644 --- a/templates/ace-generic-image-card/config/write-manifests.json +++ b/templates/ace-generic-image-card/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/templates/ace-generic-image-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js b/templates/ace-generic-image-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js index b06fd98e..5e239d74 100644 --- a/templates/ace-generic-image-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js +++ b/templates/ace-generic-image-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js @@ -1,11 +1,11 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "<%= componentDescription %>", - "TitleFieldLabel": "Card title", - "Title": "Adaptive Card Extension", - "SubTitle": "Quick view", - "PrimaryText": "SPFx Adaptive Card Extension", - "Description": "Create your SPFx Adaptive Card Extension solution!", - "QuickViewButton": "Quick view" - } + PropertyPaneDescription: '<%= componentDescription %>', + TitleFieldLabel: 'Card title', + Title: 'Adaptive Card Extension', + SubTitle: 'Quick view', + PrimaryText: 'SPFx Adaptive Card Extension', + Description: 'Create your SPFx Adaptive Card Extension solution!', + QuickViewButton: 'Quick view' + }; }); diff --git a/templates/ace-generic-image-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json b/templates/ace-generic-image-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json index 295d6376..3ff7f6ed 100644 --- a/templates/ace-generic-image-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json +++ b/templates/ace-generic-image-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json @@ -25,4 +25,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/templates/ace-generic-image-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json b/templates/ace-generic-image-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json index b7f2f9be..9547c1c0 100644 --- a/templates/ace-generic-image-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json +++ b/templates/ace-generic-image-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json @@ -13,15 +13,17 @@ // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f "requiresCustomScript": false, "supportedHosts": ["Dashboard"], - "preconfiguredEntries": [{ - "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard - "group": { "default": "Dashboard" }, - "title": { "default": "<%= componentNameCapitalCase %>" }, - "description": { "default": "<%= componentDescription %>" }, - "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", - "cardSize": "Large", - "properties": { - "title": "<%= componentNameCapitalCase %>" + "preconfiguredEntries": [ + { + "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard + "group": { "default": "Dashboard" }, + "title": { "default": "<%= componentNameCapitalCase %>" }, + "description": { "default": "<%= componentDescription %>" }, + "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", + "cardSize": "Large", + "properties": { + "title": "<%= componentNameCapitalCase %>" + } } - }] -} \ No newline at end of file + ] +} diff --git a/templates/ace-generic-image-card/template.json b/templates/ace-generic-image-card/template.json index 8ad159f3..14ad3d77 100644 --- a/templates/ace-generic-image-card/template.json +++ b/templates/ace-generic-image-card/template.json @@ -1,52 +1,52 @@ { - "name": "ace-generic-image-card", - "description": "A SharePoint Framework Adaptive Card Extension with Image Card Template", - "version": "1.0.0", - "spfxVersion": "1.22.2", - "contextSchema": { - "componentNameCapitalCase": { - "type": "string", - "description": "The component name in capital case (e.g., Minimal)" - }, - "componentNameCamelCase": { - "type": "string", - "description": "The component name in camel case (e.g., minimal)" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "The component name in hyphen case (e.g., minimal)" - }, - "componentNameUnescaped": { - "type": "string", - "description": "The component name unescaped" - }, - "componentAlias": { - "type": "string", - "description": "The component alias" - }, - "libraryName": { - "type": "string", - "description": "The library name" - }, - "solutionId": { - "type": "string", - "description": "The solution GUID" - }, - "componentId": { - "type": "string", - "description": "The component GUID" - }, - "featureId": { - "type": "string", - "description": "The feature GUID" - }, - "componentNameAllCaps": { - "type": "string", - "description": "The component name in ALL_CAPS" - }, - "componentDescription": { - "type": "string", - "description": "The component description" - } + "name": "ace-generic-image-card", + "description": "A SharePoint Framework Adaptive Card Extension with Image Card Template", + "version": "1.0.0", + "spfxVersion": "1.22.2", + "contextSchema": { + "componentNameCapitalCase": { + "type": "string", + "description": "The component name in capital case (e.g., Minimal)" + }, + "componentNameCamelCase": { + "type": "string", + "description": "The component name in camel case (e.g., minimal)" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "The component name in hyphen case (e.g., minimal)" + }, + "componentNameUnescaped": { + "type": "string", + "description": "The component name unescaped" + }, + "componentAlias": { + "type": "string", + "description": "The component alias" + }, + "libraryName": { + "type": "string", + "description": "The library name" + }, + "solutionId": { + "type": "string", + "description": "The solution GUID" + }, + "componentId": { + "type": "string", + "description": "The component GUID" + }, + "featureId": { + "type": "string", + "description": "The feature GUID" + }, + "componentNameAllCaps": { + "type": "string", + "description": "The component name in ALL_CAPS" + }, + "componentDescription": { + "type": "string", + "description": "The component description" } + } } diff --git a/templates/ace-generic-primarytext-card/.eslintrc.js b/templates/ace-generic-primarytext-card/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/templates/ace-generic-primarytext-card/.eslintrc.js +++ b/templates/ace-generic-primarytext-card/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/templates/ace-generic-primarytext-card/config/sass.json b/templates/ace-generic-primarytext-card/config/sass.json index 2cb55ba4..422e3628 100644 --- a/templates/ace-generic-primarytext-card/config/sass.json +++ b/templates/ace-generic-primarytext-card/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/templates/ace-generic-primarytext-card/config/write-manifests.json b/templates/ace-generic-primarytext-card/config/write-manifests.json index 89f4ed06..666ff0db 100644 --- a/templates/ace-generic-primarytext-card/config/write-manifests.json +++ b/templates/ace-generic-primarytext-card/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/templates/ace-generic-primarytext-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js b/templates/ace-generic-primarytext-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js index b06fd98e..5e239d74 100644 --- a/templates/ace-generic-primarytext-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js +++ b/templates/ace-generic-primarytext-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js @@ -1,11 +1,11 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "<%= componentDescription %>", - "TitleFieldLabel": "Card title", - "Title": "Adaptive Card Extension", - "SubTitle": "Quick view", - "PrimaryText": "SPFx Adaptive Card Extension", - "Description": "Create your SPFx Adaptive Card Extension solution!", - "QuickViewButton": "Quick view" - } + PropertyPaneDescription: '<%= componentDescription %>', + TitleFieldLabel: 'Card title', + Title: 'Adaptive Card Extension', + SubTitle: 'Quick view', + PrimaryText: 'SPFx Adaptive Card Extension', + Description: 'Create your SPFx Adaptive Card Extension solution!', + QuickViewButton: 'Quick view' + }; }); diff --git a/templates/ace-generic-primarytext-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json b/templates/ace-generic-primarytext-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json index 295d6376..3ff7f6ed 100644 --- a/templates/ace-generic-primarytext-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json +++ b/templates/ace-generic-primarytext-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json @@ -25,4 +25,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/templates/ace-generic-primarytext-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json b/templates/ace-generic-primarytext-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json index 4542f999..9547c1c0 100644 --- a/templates/ace-generic-primarytext-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json +++ b/templates/ace-generic-primarytext-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json @@ -13,15 +13,17 @@ // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f "requiresCustomScript": false, "supportedHosts": ["Dashboard"], - "preconfiguredEntries": [{ - "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard - "group": { "default": "Dashboard" }, - "title": { "default": "<%= componentNameCapitalCase %>" }, - "description": { "default": "<%= componentDescription %>" }, - "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", - "cardSize": "Large", - "properties": { - "title": "<%= componentNameCapitalCase %>" + "preconfiguredEntries": [ + { + "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard + "group": { "default": "Dashboard" }, + "title": { "default": "<%= componentNameCapitalCase %>" }, + "description": { "default": "<%= componentDescription %>" }, + "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", + "cardSize": "Large", + "properties": { + "title": "<%= componentNameCapitalCase %>" + } } - }] + ] } diff --git a/templates/ace-generic-primarytext-card/template.json b/templates/ace-generic-primarytext-card/template.json index 3b386354..e6be2327 100644 --- a/templates/ace-generic-primarytext-card/template.json +++ b/templates/ace-generic-primarytext-card/template.json @@ -1,52 +1,52 @@ { - "name": "ace-generic-primarytext-card", - "description": "A SharePoint Framework Adaptive Card Extension with Primary Text Card Template", - "version": "1.0.0", - "spfxVersion": "1.22.2", - "contextSchema": { - "componentNameCapitalCase": { - "type": "string", - "description": "The component name in capital case (e.g., Minimal)" - }, - "componentNameCamelCase": { - "type": "string", - "description": "The component name in camel case (e.g., minimal)" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "The component name in hyphen case (e.g., minimal)" - }, - "componentNameUnescaped": { - "type": "string", - "description": "The component name unescaped" - }, - "componentAlias": { - "type": "string", - "description": "The component alias" - }, - "libraryName": { - "type": "string", - "description": "The library name" - }, - "solutionId": { - "type": "string", - "description": "The solution GUID" - }, - "componentId": { - "type": "string", - "description": "The component GUID" - }, - "featureId": { - "type": "string", - "description": "The feature GUID" - }, - "componentNameAllCaps": { - "type": "string", - "description": "The component name in ALL_CAPS" - }, - "componentDescription": { - "type": "string", - "description": "The component description" - } + "name": "ace-generic-primarytext-card", + "description": "A SharePoint Framework Adaptive Card Extension with Primary Text Card Template", + "version": "1.0.0", + "spfxVersion": "1.22.2", + "contextSchema": { + "componentNameCapitalCase": { + "type": "string", + "description": "The component name in capital case (e.g., Minimal)" + }, + "componentNameCamelCase": { + "type": "string", + "description": "The component name in camel case (e.g., minimal)" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "The component name in hyphen case (e.g., minimal)" + }, + "componentNameUnescaped": { + "type": "string", + "description": "The component name unescaped" + }, + "componentAlias": { + "type": "string", + "description": "The component alias" + }, + "libraryName": { + "type": "string", + "description": "The library name" + }, + "solutionId": { + "type": "string", + "description": "The solution GUID" + }, + "componentId": { + "type": "string", + "description": "The component GUID" + }, + "featureId": { + "type": "string", + "description": "The feature GUID" + }, + "componentNameAllCaps": { + "type": "string", + "description": "The component name in ALL_CAPS" + }, + "componentDescription": { + "type": "string", + "description": "The component description" } + } } diff --git a/templates/ace-search-card/.eslintrc.js b/templates/ace-search-card/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/templates/ace-search-card/.eslintrc.js +++ b/templates/ace-search-card/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/templates/ace-search-card/config/sass.json b/templates/ace-search-card/config/sass.json index 1cfc17b3..9022585d 100644 --- a/templates/ace-search-card/config/sass.json +++ b/templates/ace-search-card/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/templates/ace-search-card/config/write-manifests.json b/templates/ace-search-card/config/write-manifests.json index bad35260..11dca670 100644 --- a/templates/ace-search-card/config/write-manifests.json +++ b/templates/ace-search-card/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/templates/ace-search-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js b/templates/ace-search-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js index 50696d2e..5e239d74 100644 --- a/templates/ace-search-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js +++ b/templates/ace-search-card/src/adaptiveCardExtensions/{componentNameCamelCase}/loc/en-us.js @@ -1,11 +1,11 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "<%= componentDescription %>", - "TitleFieldLabel": "Card title", - "Title": "Adaptive Card Extension", - "SubTitle": "Quick view", - "PrimaryText": "SPFx Adaptive Card Extension", - "Description": "Create your SPFx Adaptive Card Extension solution!", - "QuickViewButton": "Quick view" - } -}); \ No newline at end of file + PropertyPaneDescription: '<%= componentDescription %>', + TitleFieldLabel: 'Card title', + Title: 'Adaptive Card Extension', + SubTitle: 'Quick view', + PrimaryText: 'SPFx Adaptive Card Extension', + Description: 'Create your SPFx Adaptive Card Extension solution!', + QuickViewButton: 'Quick view' + }; +}); diff --git a/templates/ace-search-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json b/templates/ace-search-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json index 295d6376..3ff7f6ed 100644 --- a/templates/ace-search-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json +++ b/templates/ace-search-card/src/adaptiveCardExtensions/{componentNameCamelCase}/quickView/template/QuickViewTemplate.json @@ -25,4 +25,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/templates/ace-search-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json b/templates/ace-search-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json index 7c76bbc5..ae7a5b50 100644 --- a/templates/ace-search-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json +++ b/templates/ace-search-card/src/adaptiveCardExtensions/{componentNameCamelCase}/{componentNameCapitalCase}AdaptiveCardExtension.manifest.json @@ -13,15 +13,17 @@ // https://support.office.com/en-us/article/Turn-scripting-capabilities-on-or-off-1f2c515f-5d7e-448a-9fd7-835da935584f "requiresCustomScript": false, "supportedHosts": ["Dashboard"], - "preconfiguredEntries": [{ - "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard - "group": { "default": "Dashboard" }, - "title": { "default": "<%= componentNameCapitalCase %>" }, - "description": { "default": "<%= componentDescription %>" }, - "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", - "properties": { - "title": "<%= componentNameCapitalCase %>" - }, - "cardSize": "Medium" - }] + "preconfiguredEntries": [ + { + "groupId": "bd067b1e-3ad5-4d5d-a5fe-505f07d7f59c", // Dashboard + "group": { "default": "Dashboard" }, + "title": { "default": "<%= componentNameCapitalCase %>" }, + "description": { "default": "<%= componentDescription %>" }, + "iconImageUrl": "https://res.cdn.office.net/files/fabric-cdn-prod_20240610.001/assets/brand-icons/product-monoline/svg/vivaconnections_32x1.svg", + "properties": { + "title": "<%= componentNameCapitalCase %>" + }, + "cardSize": "Medium" + } + ] } diff --git a/templates/ace-search-card/template.json b/templates/ace-search-card/template.json index da9ae51c..84af376a 100644 --- a/templates/ace-search-card/template.json +++ b/templates/ace-search-card/template.json @@ -1,52 +1,52 @@ { - "name": "ace-search-card", - "description": "Adaptive Card Extension with Search Card template", - "version": "1.0.0", - "spfxVersion": "1.22.2", - "contextSchema": { - "libraryName": { - "type": "string", - "description": "The library name for the component" - }, - "componentId": { - "type": "string", - "description": "The unique ID for the component" - }, - "solutionId": { - "type": "string", - "description": "The unique ID for the solution" - }, - "featureId": { - "type": "string", - "description": "The unique ID for the feature" - }, - "componentNameUnescaped": { - "type": "string", - "description": "The unescaped component name" - }, - "componentNameCamelCase": { - "type": "string", - "description": "The component name in camelCase" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "The component name in hyphen-case" - }, - "componentNameCapitalCase": { - "type": "string", - "description": "The component name in CapitalCase" - }, - "componentNameAllCaps": { - "type": "string", - "description": "The component name in ALL_CAPS" - }, - "componentDescription": { - "type": "string", - "description": "Description of the component" - }, - "componentAlias": { - "type": "string", - "description": "The component alias" - } + "name": "ace-search-card", + "description": "Adaptive Card Extension with Search Card template", + "version": "1.0.0", + "spfxVersion": "1.22.2", + "contextSchema": { + "libraryName": { + "type": "string", + "description": "The library name for the component" + }, + "componentId": { + "type": "string", + "description": "The unique ID for the component" + }, + "solutionId": { + "type": "string", + "description": "The unique ID for the solution" + }, + "featureId": { + "type": "string", + "description": "The unique ID for the feature" + }, + "componentNameUnescaped": { + "type": "string", + "description": "The unescaped component name" + }, + "componentNameCamelCase": { + "type": "string", + "description": "The component name in camelCase" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "The component name in hyphen-case" + }, + "componentNameCapitalCase": { + "type": "string", + "description": "The component name in CapitalCase" + }, + "componentNameAllCaps": { + "type": "string", + "description": "The component name in ALL_CAPS" + }, + "componentDescription": { + "type": "string", + "description": "Description of the component" + }, + "componentAlias": { + "type": "string", + "description": "The component alias" } + } } diff --git a/templates/extension-application-customizer/.eslintrc.js b/templates/extension-application-customizer/.eslintrc.js index 6f381f65..7a2d62ef 100644 --- a/templates/extension-application-customizer/.eslintrc.js +++ b/templates/extension-application-customizer/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { diff --git a/templates/extension-application-customizer/config/package-solution.json b/templates/extension-application-customizer/config/package-solution.json index 1174b62d..24483140 100644 --- a/templates/extension-application-customizer/config/package-solution.json +++ b/templates/extension-application-customizer/config/package-solution.json @@ -32,10 +32,7 @@ "id": "<%= featureId %>", "version": "1.0.0.0", "assets": { - "elementManifests": [ - "elements.xml", - "ClientSideInstance.xml" - ] + "elementManifests": ["elements.xml", "ClientSideInstance.xml"] } } ] diff --git a/templates/extension-application-customizer/src/extensions/{componentNameCamelCase}ApplicationCustomizer/loc/en-us.js b/templates/extension-application-customizer/src/extensions/{componentNameCamelCase}ApplicationCustomizer/loc/en-us.js index ee71bc3f..7036a00c 100644 --- a/templates/extension-application-customizer/src/extensions/{componentNameCamelCase}ApplicationCustomizer/loc/en-us.js +++ b/templates/extension-application-customizer/src/extensions/{componentNameCamelCase}ApplicationCustomizer/loc/en-us.js @@ -1,5 +1,5 @@ -define([], function() { +define([], function () { return { - "Title": "<%= componentNameCapitalCase %>ApplicationCustomizer" - } + Title: '<%= componentNameCapitalCase %>ApplicationCustomizer' + }; }); diff --git a/templates/extension-application-customizer/template.json b/templates/extension-application-customizer/template.json index f1d80ee5..d161c7aa 100644 --- a/templates/extension-application-customizer/template.json +++ b/templates/extension-application-customizer/template.json @@ -1,48 +1,48 @@ { - "name": "extension-application-customizer", - "description": "A SharePoint Framework Application Customizer extension template", - "version": "0.0.1", - "spfxVersion": "1.22.2", - "contextSchema": { - "libraryName": { - "type": "string", - "description": "The name of the library (also used as the package name)" - }, - "featureId": { - "type": "string", - "description": "The feature ID (GUID) for the solution feature" - }, - "solutionId": { - "type": "string", - "description": "The solution ID (GUID) for the SharePoint solution" - }, - "componentId": { - "type": "string", - "description": "The component ID (GUID) for the extension" - }, - "componentDescription": { - "type": "string", - "description": "The description of the component" - }, - "componentAlias": { - "type": "string", - "description": "The component alias (in manifest) for the extension" - }, - "componentNameUnescaped": { - "type": "string", - "description": "The component name (in manifest) for the extension, unescaped" - }, - "componentNameCamelCase": { - "type": "string", - "description": "The component name (in manifest) for the extension, in camel case" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "The component name (in manifest) for the extension, in hyphen case" - }, - "componentNameCapitalCase": { - "type": "string", - "description": "The component class name for the extension" - } + "name": "extension-application-customizer", + "description": "A SharePoint Framework Application Customizer extension template", + "version": "0.0.1", + "spfxVersion": "1.22.2", + "contextSchema": { + "libraryName": { + "type": "string", + "description": "The name of the library (also used as the package name)" + }, + "featureId": { + "type": "string", + "description": "The feature ID (GUID) for the solution feature" + }, + "solutionId": { + "type": "string", + "description": "The solution ID (GUID) for the SharePoint solution" + }, + "componentId": { + "type": "string", + "description": "The component ID (GUID) for the extension" + }, + "componentDescription": { + "type": "string", + "description": "The description of the component" + }, + "componentAlias": { + "type": "string", + "description": "The component alias (in manifest) for the extension" + }, + "componentNameUnescaped": { + "type": "string", + "description": "The component name (in manifest) for the extension, unescaped" + }, + "componentNameCamelCase": { + "type": "string", + "description": "The component name (in manifest) for the extension, in camel case" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "The component name (in manifest) for the extension, in hyphen case" + }, + "componentNameCapitalCase": { + "type": "string", + "description": "The component class name for the extension" } + } } diff --git a/templates/extension-fieldcustomizer-minimal/.eslintrc.js b/templates/extension-fieldcustomizer-minimal/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/templates/extension-fieldcustomizer-minimal/.eslintrc.js +++ b/templates/extension-fieldcustomizer-minimal/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/templates/extension-fieldcustomizer-minimal/config/package-solution.json b/templates/extension-fieldcustomizer-minimal/config/package-solution.json index a267cf7c..1a847bad 100644 --- a/templates/extension-fieldcustomizer-minimal/config/package-solution.json +++ b/templates/extension-fieldcustomizer-minimal/config/package-solution.json @@ -32,9 +32,7 @@ "id": "<%= featureId %>", "version": "1.0.0.0", "assets": { - "elementManifests": [ - "elements.xml" - ] + "elementManifests": ["elements.xml"] } } ] diff --git a/templates/extension-fieldcustomizer-minimal/src/extensions/{componentNameCamelCase}/loc/en-us.js b/templates/extension-fieldcustomizer-minimal/src/extensions/{componentNameCamelCase}/loc/en-us.js index 372a79bd..c31ea017 100644 --- a/templates/extension-fieldcustomizer-minimal/src/extensions/{componentNameCamelCase}/loc/en-us.js +++ b/templates/extension-fieldcustomizer-minimal/src/extensions/{componentNameCamelCase}/loc/en-us.js @@ -1,5 +1,5 @@ -define([], function() { +define([], function () { return { - "Title": "<%= componentNameCapitalCase %>FieldCustomizer" - } + Title: '<%= componentNameCapitalCase %>FieldCustomizer' + }; }); diff --git a/templates/extension-fieldcustomizer-minimal/template.json b/templates/extension-fieldcustomizer-minimal/template.json index 2bdcd655..71ed29d7 100644 --- a/templates/extension-fieldcustomizer-minimal/template.json +++ b/templates/extension-fieldcustomizer-minimal/template.json @@ -1,48 +1,48 @@ { - "name": "extension-fieldcustomizer-minimal", - "description": "A minimal Field Customizer extension for SharePoint Framework without any framework dependencies", - "version": "1.0.0", - "spfxVersion": "1.22.2", - "contextSchema": { - "componentNameCapitalCase": { - "type": "string", - "description": "Component name in capital case (e.g., 'Minimal')" - }, - "componentNameCamelCase": { - "type": "string", - "description": "Component name in camel case (e.g., 'minimal')" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "Component name in hyphen case (e.g., 'minimal')" - }, - "componentNameUnescaped": { - "type": "string", - "description": "Component display name (unescaped)" - }, - "componentAlias": { - "type": "string", - "description": "Short alias for the component" - }, - "libraryName": { - "type": "string", - "description": "Package/library name" - }, - "solutionId": { - "type": "string", - "description": "Solution GUID" - }, - "componentId": { - "type": "string", - "description": "Component GUID" - }, - "featureId": { - "type": "string", - "description": "Feature GUID" - }, - "componentDescription": { - "type": "string", - "description": "The component description" - } + "name": "extension-fieldcustomizer-minimal", + "description": "A minimal Field Customizer extension for SharePoint Framework without any framework dependencies", + "version": "1.0.0", + "spfxVersion": "1.22.2", + "contextSchema": { + "componentNameCapitalCase": { + "type": "string", + "description": "Component name in capital case (e.g., 'Minimal')" + }, + "componentNameCamelCase": { + "type": "string", + "description": "Component name in camel case (e.g., 'minimal')" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "Component name in hyphen case (e.g., 'minimal')" + }, + "componentNameUnescaped": { + "type": "string", + "description": "Component display name (unescaped)" + }, + "componentAlias": { + "type": "string", + "description": "Short alias for the component" + }, + "libraryName": { + "type": "string", + "description": "Package/library name" + }, + "solutionId": { + "type": "string", + "description": "Solution GUID" + }, + "componentId": { + "type": "string", + "description": "Component GUID" + }, + "featureId": { + "type": "string", + "description": "Feature GUID" + }, + "componentDescription": { + "type": "string", + "description": "The component description" } + } } diff --git a/templates/extension-fieldcustomizer-noframework/.eslintrc.js b/templates/extension-fieldcustomizer-noframework/.eslintrc.js index 6f381f65..7a2d62ef 100644 --- a/templates/extension-fieldcustomizer-noframework/.eslintrc.js +++ b/templates/extension-fieldcustomizer-noframework/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { diff --git a/templates/extension-fieldcustomizer-noframework/config/package-solution.json b/templates/extension-fieldcustomizer-noframework/config/package-solution.json index a267cf7c..1a847bad 100644 --- a/templates/extension-fieldcustomizer-noframework/config/package-solution.json +++ b/templates/extension-fieldcustomizer-noframework/config/package-solution.json @@ -32,9 +32,7 @@ "id": "<%= featureId %>", "version": "1.0.0.0", "assets": { - "elementManifests": [ - "elements.xml" - ] + "elementManifests": ["elements.xml"] } } ] diff --git a/templates/extension-fieldcustomizer-noframework/src/extensions/{componentNameCamelCase}/loc/en-us.js b/templates/extension-fieldcustomizer-noframework/src/extensions/{componentNameCamelCase}/loc/en-us.js index 372a79bd..c31ea017 100644 --- a/templates/extension-fieldcustomizer-noframework/src/extensions/{componentNameCamelCase}/loc/en-us.js +++ b/templates/extension-fieldcustomizer-noframework/src/extensions/{componentNameCamelCase}/loc/en-us.js @@ -1,5 +1,5 @@ -define([], function() { +define([], function () { return { - "Title": "<%= componentNameCapitalCase %>FieldCustomizer" - } + Title: '<%= componentNameCapitalCase %>FieldCustomizer' + }; }); diff --git a/templates/extension-fieldcustomizer-noframework/template.json b/templates/extension-fieldcustomizer-noframework/template.json index 0a7a46c8..3062b5c8 100644 --- a/templates/extension-fieldcustomizer-noframework/template.json +++ b/templates/extension-fieldcustomizer-noframework/template.json @@ -1,48 +1,48 @@ { - "name": "extension-fieldcustomizer-noframework", - "description": "A SharePoint Framework field customizer extension with no framework", - "version": "1.0.0", - "spfxVersion": "1.22.2", - "contextSchema": { - "componentNameCapitalCase": { - "type": "string", - "description": "The component name in CapitalCase (e.g., 'Minimal')" - }, - "componentNameCamelCase": { - "type": "string", - "description": "The component name in camelCase (e.g., 'minimal')" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "The component name in hyphen-case (e.g., 'minimal')" - }, - "componentNameUnescaped": { - "type": "string", - "description": "The component display name (unescaped)" - }, - "componentAlias": { - "type": "string", - "description": "Short alias for the component" - }, - "libraryName": { - "type": "string", - "description": "The package/library name" - }, - "solutionId": { - "type": "string", - "description": "Solution GUID" - }, - "componentId": { - "type": "string", - "description": "Component GUID" - }, - "featureId": { - "type": "string", - "description": "Feature GUID" - }, - "componentDescription": { - "type": "string", - "description": "The component description" - } + "name": "extension-fieldcustomizer-noframework", + "description": "A SharePoint Framework field customizer extension with no framework", + "version": "1.0.0", + "spfxVersion": "1.22.2", + "contextSchema": { + "componentNameCapitalCase": { + "type": "string", + "description": "The component name in CapitalCase (e.g., 'Minimal')" + }, + "componentNameCamelCase": { + "type": "string", + "description": "The component name in camelCase (e.g., 'minimal')" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "The component name in hyphen-case (e.g., 'minimal')" + }, + "componentNameUnescaped": { + "type": "string", + "description": "The component display name (unescaped)" + }, + "componentAlias": { + "type": "string", + "description": "Short alias for the component" + }, + "libraryName": { + "type": "string", + "description": "The package/library name" + }, + "solutionId": { + "type": "string", + "description": "Solution GUID" + }, + "componentId": { + "type": "string", + "description": "Component GUID" + }, + "featureId": { + "type": "string", + "description": "Feature GUID" + }, + "componentDescription": { + "type": "string", + "description": "The component description" } + } } diff --git a/templates/extension-fieldcustomizer-react/.eslintrc.js b/templates/extension-fieldcustomizer-react/.eslintrc.js index a790d607..dc746107 100644 --- a/templates/extension-fieldcustomizer-react/.eslintrc.js +++ b/templates/extension-fieldcustomizer-react/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/templates/extension-fieldcustomizer-react/config/package-solution.json b/templates/extension-fieldcustomizer-react/config/package-solution.json index 0498da5d..4feda4b5 100644 --- a/templates/extension-fieldcustomizer-react/config/package-solution.json +++ b/templates/extension-fieldcustomizer-react/config/package-solution.json @@ -32,9 +32,7 @@ "id": "<%= featureId %>", "version": "1.0.0.0", "assets": { - "elementManifests": [ - "elements.xml" - ] + "elementManifests": ["elements.xml"] } } ] diff --git a/templates/extension-fieldcustomizer-react/src/extensions/{componentNameCamelCase}/loc/en-us.js b/templates/extension-fieldcustomizer-react/src/extensions/{componentNameCamelCase}/loc/en-us.js index 372a79bd..c31ea017 100644 --- a/templates/extension-fieldcustomizer-react/src/extensions/{componentNameCamelCase}/loc/en-us.js +++ b/templates/extension-fieldcustomizer-react/src/extensions/{componentNameCamelCase}/loc/en-us.js @@ -1,5 +1,5 @@ -define([], function() { +define([], function () { return { - "Title": "<%= componentNameCapitalCase %>FieldCustomizer" - } + Title: '<%= componentNameCapitalCase %>FieldCustomizer' + }; }); diff --git a/templates/extension-fieldcustomizer-react/template.json b/templates/extension-fieldcustomizer-react/template.json index 1bbca142..b544f259 100644 --- a/templates/extension-fieldcustomizer-react/template.json +++ b/templates/extension-fieldcustomizer-react/template.json @@ -1,48 +1,48 @@ { - "name": "extension-fieldcustomizer-react", - "description": "SharePoint Framework Field Customizer extension with React framework", - "version": "1.0.0", - "spfxVersion": "1.22.2", - "contextSchema": { - "componentNameCapitalCase": { - "type": "string", - "description": "The component name in CapitalCase (e.g., 'Minimal')" - }, - "componentNameCamelCase": { - "type": "string", - "description": "The component name in camelCase (e.g., 'minimal')" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "The component name in hyphen-case (e.g., 'minimal')" - }, - "componentNameUnescaped": { - "type": "string", - "description": "The unescaped component display name" - }, - "componentAlias": { - "type": "string", - "description": "Short alias for the component" - }, - "libraryName": { - "type": "string", - "description": "Package/library name" - }, - "solutionId": { - "type": "string", - "description": "Solution GUID" - }, - "componentId": { - "type": "string", - "description": "Component GUID" - }, - "featureId": { - "type": "string", - "description": "Feature GUID" - }, - "componentDescription": { - "type": "string", - "description": "The component description" - } + "name": "extension-fieldcustomizer-react", + "description": "SharePoint Framework Field Customizer extension with React framework", + "version": "1.0.0", + "spfxVersion": "1.22.2", + "contextSchema": { + "componentNameCapitalCase": { + "type": "string", + "description": "The component name in CapitalCase (e.g., 'Minimal')" + }, + "componentNameCamelCase": { + "type": "string", + "description": "The component name in camelCase (e.g., 'minimal')" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "The component name in hyphen-case (e.g., 'minimal')" + }, + "componentNameUnescaped": { + "type": "string", + "description": "The unescaped component display name" + }, + "componentAlias": { + "type": "string", + "description": "Short alias for the component" + }, + "libraryName": { + "type": "string", + "description": "Package/library name" + }, + "solutionId": { + "type": "string", + "description": "Solution GUID" + }, + "componentId": { + "type": "string", + "description": "Component GUID" + }, + "featureId": { + "type": "string", + "description": "Feature GUID" + }, + "componentDescription": { + "type": "string", + "description": "The component description" } + } } diff --git a/templates/extension-formcustomizer-noframework/.eslintrc.js b/templates/extension-formcustomizer-noframework/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/templates/extension-formcustomizer-noframework/.eslintrc.js +++ b/templates/extension-formcustomizer-noframework/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/templates/extension-formcustomizer-noframework/src/extensions/{componentNameCamelCase}/loc/en-us.js b/templates/extension-formcustomizer-noframework/src/extensions/{componentNameCamelCase}/loc/en-us.js index c6b33ff9..c0568a84 100644 --- a/templates/extension-formcustomizer-noframework/src/extensions/{componentNameCamelCase}/loc/en-us.js +++ b/templates/extension-formcustomizer-noframework/src/extensions/{componentNameCamelCase}/loc/en-us.js @@ -1,7 +1,7 @@ -define([], function() { +define([], function () { return { - "Save": "Save", - "Cancel": "Cancel", - "Close": "Close" - } + Save: 'Save', + Cancel: 'Cancel', + Close: 'Close' + }; }); diff --git a/templates/extension-formcustomizer-noframework/template.json b/templates/extension-formcustomizer-noframework/template.json index 76bc65c5..0fc42382 100644 --- a/templates/extension-formcustomizer-noframework/template.json +++ b/templates/extension-formcustomizer-noframework/template.json @@ -1,48 +1,48 @@ { - "name": "extension-formcustomizer-noframework", - "description": "A SharePoint Framework Form Customizer extension with no framework", - "version": "1.0.0", - "spfxVersion": "1.22.2", - "contextSchema": { - "componentNameCapitalCase": { - "type": "string", - "description": "The component name in capital case (e.g., Minimal)" - }, - "componentNameCamelCase": { - "type": "string", - "description": "The component name in camel case (e.g., minimal)" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "The component name in hyphen case (e.g., minimal)" - }, - "componentNameUnescaped": { - "type": "string", - "description": "The component name unescaped" - }, - "componentAlias": { - "type": "string", - "description": "The component alias" - }, - "libraryName": { - "type": "string", - "description": "The library name" - }, - "solutionId": { - "type": "string", - "description": "The solution GUID" - }, - "componentId": { - "type": "string", - "description": "The component GUID" - }, - "featureId": { - "type": "string", - "description": "The feature GUID" - }, - "componentDescription": { - "type": "string", - "description": "The component description" - } + "name": "extension-formcustomizer-noframework", + "description": "A SharePoint Framework Form Customizer extension with no framework", + "version": "1.0.0", + "spfxVersion": "1.22.2", + "contextSchema": { + "componentNameCapitalCase": { + "type": "string", + "description": "The component name in capital case (e.g., Minimal)" + }, + "componentNameCamelCase": { + "type": "string", + "description": "The component name in camel case (e.g., minimal)" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "The component name in hyphen case (e.g., minimal)" + }, + "componentNameUnescaped": { + "type": "string", + "description": "The component name unescaped" + }, + "componentAlias": { + "type": "string", + "description": "The component alias" + }, + "libraryName": { + "type": "string", + "description": "The library name" + }, + "solutionId": { + "type": "string", + "description": "The solution GUID" + }, + "componentId": { + "type": "string", + "description": "The component GUID" + }, + "featureId": { + "type": "string", + "description": "The feature GUID" + }, + "componentDescription": { + "type": "string", + "description": "The component description" } + } } diff --git a/templates/extension-formcustomizer-react/.eslintrc.js b/templates/extension-formcustomizer-react/.eslintrc.js index a790d607..dc746107 100644 --- a/templates/extension-formcustomizer-react/.eslintrc.js +++ b/templates/extension-formcustomizer-react/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/templates/extension-formcustomizer-react/config/sass.json b/templates/extension-formcustomizer-react/config/sass.json index 1cfc17b3..9022585d 100644 --- a/templates/extension-formcustomizer-react/config/sass.json +++ b/templates/extension-formcustomizer-react/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/templates/extension-formcustomizer-react/config/write-manifests.json b/templates/extension-formcustomizer-react/config/write-manifests.json index bad35260..11dca670 100644 --- a/templates/extension-formcustomizer-react/config/write-manifests.json +++ b/templates/extension-formcustomizer-react/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/templates/extension-formcustomizer-react/src/extensions/{componentNameCamelCase}/loc/en-us.js b/templates/extension-formcustomizer-react/src/extensions/{componentNameCamelCase}/loc/en-us.js index 8b989099..c0568a84 100644 --- a/templates/extension-formcustomizer-react/src/extensions/{componentNameCamelCase}/loc/en-us.js +++ b/templates/extension-formcustomizer-react/src/extensions/{componentNameCamelCase}/loc/en-us.js @@ -1,7 +1,7 @@ -define([], function() { +define([], function () { return { - "Save": "Save", - "Cancel": "Cancel", - "Close": "Close" - } -}); \ No newline at end of file + Save: 'Save', + Cancel: 'Cancel', + Close: 'Close' + }; +}); diff --git a/templates/extension-formcustomizer-react/template.json b/templates/extension-formcustomizer-react/template.json index efd20533..9cdfdf53 100644 --- a/templates/extension-formcustomizer-react/template.json +++ b/templates/extension-formcustomizer-react/template.json @@ -1,48 +1,48 @@ { - "name": "extension-formcustomizer-react", - "description": "A SharePoint Framework Form Customizer extension with React", - "version": "1.0.0", - "spfxVersion": "1.22.2", - "contextSchema": { - "componentNameCapitalCase": { - "type": "string", - "description": "The component name in capital case (e.g., ReactFormCustomizer)" - }, - "componentNameCamelCase": { - "type": "string", - "description": "The component name in camel case (e.g., reactFormCustomizer)" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "The component name in hyphen case (e.g., react-form-customizer)" - }, - "componentNameUnescaped": { - "type": "string", - "description": "The component name unescaped" - }, - "componentAlias": { - "type": "string", - "description": "The component alias" - }, - "libraryName": { - "type": "string", - "description": "The library name" - }, - "solutionId": { - "type": "string", - "description": "The solution GUID" - }, - "componentId": { - "type": "string", - "description": "The component GUID" - }, - "featureId": { - "type": "string", - "description": "The feature GUID" - }, - "componentDescription": { - "type": "string", - "description": "The component description" - } + "name": "extension-formcustomizer-react", + "description": "A SharePoint Framework Form Customizer extension with React", + "version": "1.0.0", + "spfxVersion": "1.22.2", + "contextSchema": { + "componentNameCapitalCase": { + "type": "string", + "description": "The component name in capital case (e.g., ReactFormCustomizer)" + }, + "componentNameCamelCase": { + "type": "string", + "description": "The component name in camel case (e.g., reactFormCustomizer)" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "The component name in hyphen case (e.g., react-form-customizer)" + }, + "componentNameUnescaped": { + "type": "string", + "description": "The component name unescaped" + }, + "componentAlias": { + "type": "string", + "description": "The component alias" + }, + "libraryName": { + "type": "string", + "description": "The library name" + }, + "solutionId": { + "type": "string", + "description": "The solution GUID" + }, + "componentId": { + "type": "string", + "description": "The component GUID" + }, + "featureId": { + "type": "string", + "description": "The feature GUID" + }, + "componentDescription": { + "type": "string", + "description": "The component description" } + } } diff --git a/templates/extension-listviewcommandset/.eslintrc.js b/templates/extension-listviewcommandset/.eslintrc.js index 6f381f65..7a2d62ef 100644 --- a/templates/extension-listviewcommandset/.eslintrc.js +++ b/templates/extension-listviewcommandset/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { diff --git a/templates/extension-listviewcommandset/src/extensions/{componentNameCamelCase}CommandSet/loc/en-us.js b/templates/extension-listviewcommandset/src/extensions/{componentNameCamelCase}CommandSet/loc/en-us.js index 4bb1be79..d6a19e1b 100644 --- a/templates/extension-listviewcommandset/src/extensions/{componentNameCamelCase}CommandSet/loc/en-us.js +++ b/templates/extension-listviewcommandset/src/extensions/{componentNameCamelCase}CommandSet/loc/en-us.js @@ -1,6 +1,6 @@ -define([], function() { +define([], function () { return { - "Command1": "Command 1", - "Command2": "Command 2" - } + Command1: 'Command 1', + Command2: 'Command 2' + }; }); diff --git a/templates/extension-listviewcommandset/template.json b/templates/extension-listviewcommandset/template.json index 51bb6143..7d64ad8c 100644 --- a/templates/extension-listviewcommandset/template.json +++ b/templates/extension-listviewcommandset/template.json @@ -1,40 +1,40 @@ { - "name": "extension-listviewcommandset", - "description": "SharePoint Framework list view command set extension template", - "version": "1.0.0", - "spfxVersion": "1.22.2", - "contextSchema": { - "libraryName": { - "type": "string", - "description": "The library name (kebab-case)" - }, - "componentNameCamelCase": { - "type": "string", - "description": "The component name in camelCase" - }, - "componentNameCapitalCase": { - "type": "string", - "description": "The component name in CapitalCase" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "The component name in hyphen-case" - }, - "componentId": { - "type": "string", - "description": "The component ID (GUID)" - }, - "solutionId": { - "type": "string", - "description": "The solution ID (GUID)" - }, - "featureId": { - "type": "string", - "description": "The feature ID (GUID)" - }, - "componentDescription": { - "type": "string", - "description": "The component description" - } + "name": "extension-listviewcommandset", + "description": "SharePoint Framework list view command set extension template", + "version": "1.0.0", + "spfxVersion": "1.22.2", + "contextSchema": { + "libraryName": { + "type": "string", + "description": "The library name (kebab-case)" + }, + "componentNameCamelCase": { + "type": "string", + "description": "The component name in camelCase" + }, + "componentNameCapitalCase": { + "type": "string", + "description": "The component name in CapitalCase" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "The component name in hyphen-case" + }, + "componentId": { + "type": "string", + "description": "The component ID (GUID)" + }, + "solutionId": { + "type": "string", + "description": "The solution ID (GUID)" + }, + "featureId": { + "type": "string", + "description": "The feature ID (GUID)" + }, + "componentDescription": { + "type": "string", + "description": "The component description" } + } } diff --git a/templates/extension-search-query-modifier/.eslintrc.js b/templates/extension-search-query-modifier/.eslintrc.js index 6f381f65..7a2d62ef 100644 --- a/templates/extension-search-query-modifier/.eslintrc.js +++ b/templates/extension-search-query-modifier/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { diff --git a/templates/extension-search-query-modifier/config/package-solution.json b/templates/extension-search-query-modifier/config/package-solution.json index 2d54c47a..0b551a9d 100644 --- a/templates/extension-search-query-modifier/config/package-solution.json +++ b/templates/extension-search-query-modifier/config/package-solution.json @@ -32,10 +32,7 @@ "id": "<%= featureId %>", "version": "1.0.0.0", "assets": { - "elementManifests": [ - "elements.xml", - "ClientSideInstance.xml" - ] + "elementManifests": ["elements.xml", "ClientSideInstance.xml"] } } ] diff --git a/templates/extension-search-query-modifier/src/extensions/{componentNameCamelCase}SearchQueryModifier/loc/en-us.js b/templates/extension-search-query-modifier/src/extensions/{componentNameCamelCase}SearchQueryModifier/loc/en-us.js index 9e5b24f4..a3df75bc 100644 --- a/templates/extension-search-query-modifier/src/extensions/{componentNameCamelCase}SearchQueryModifier/loc/en-us.js +++ b/templates/extension-search-query-modifier/src/extensions/{componentNameCamelCase}SearchQueryModifier/loc/en-us.js @@ -1,5 +1,5 @@ -define([], function() { +define([], function () { return { - "Title": "<%= componentNameCapitalCase %>SearchQueryModifier" - } + Title: '<%= componentNameCapitalCase %>SearchQueryModifier' + }; }); diff --git a/templates/extension-search-query-modifier/template.json b/templates/extension-search-query-modifier/template.json index 9148fed0..c3bada30 100644 --- a/templates/extension-search-query-modifier/template.json +++ b/templates/extension-search-query-modifier/template.json @@ -1,40 +1,40 @@ { - "name": "extension-search-query-modifier", - "description": "A SharePoint Framework search query modifier extension", - "version": "1.0.0", - "spfxVersion": "1.22.2", - "contextSchema": { - "libraryName": { - "type": "string", - "description": "Name of the library/solution" - }, - "componentNameCapitalCase": { - "type": "string", - "description": "Component name in capital case" - }, - "componentNameCamelCase": { - "type": "string", - "description": "Component name in camel case" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "Component name in hyphen case" - }, - "componentId": { - "type": "string", - "description": "Unique ID for the component" - }, - "solutionId": { - "type": "string", - "description": "Solution ID" - }, - "featureId": { - "type": "string", - "description": "Feature ID" - }, - "componentDescription": { - "type": "string", - "description": "The component description" - } + "name": "extension-search-query-modifier", + "description": "A SharePoint Framework search query modifier extension", + "version": "1.0.0", + "spfxVersion": "1.22.2", + "contextSchema": { + "libraryName": { + "type": "string", + "description": "Name of the library/solution" + }, + "componentNameCapitalCase": { + "type": "string", + "description": "Component name in capital case" + }, + "componentNameCamelCase": { + "type": "string", + "description": "Component name in camel case" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "Component name in hyphen case" + }, + "componentId": { + "type": "string", + "description": "Unique ID for the component" + }, + "solutionId": { + "type": "string", + "description": "Solution ID" + }, + "featureId": { + "type": "string", + "description": "Feature ID" + }, + "componentDescription": { + "type": "string", + "description": "The component description" } + } } diff --git a/templates/library/.eslintrc.js b/templates/library/.eslintrc.js index c5f8cac7..7a2d62ef 100644 --- a/templates/library/.eslintrc.js +++ b/templates/library/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/templates/library/config/sass.json b/templates/library/config/sass.json index 2cb55ba4..422e3628 100644 --- a/templates/library/config/sass.json +++ b/templates/library/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/templates/library/config/write-manifests.json b/templates/library/config/write-manifests.json index 89f4ed06..666ff0db 100644 --- a/templates/library/config/write-manifests.json +++ b/templates/library/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/templates/library/src/libraries/{componentNameCamelCase}/loc/en-us.js b/templates/library/src/libraries/{componentNameCamelCase}/loc/en-us.js index 96b42ecf..613fff76 100644 --- a/templates/library/src/libraries/{componentNameCamelCase}/loc/en-us.js +++ b/templates/library/src/libraries/{componentNameCamelCase}/loc/en-us.js @@ -1,7 +1,7 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "<%= componentDescription %>", - "BasicGroupName": "Group Name", - "DescriptionFieldLabel": "Description Field" - } + PropertyPaneDescription: '<%= componentDescription %>', + BasicGroupName: 'Group Name', + DescriptionFieldLabel: 'Description Field' + }; }); diff --git a/templates/library/template.json b/templates/library/template.json index b38a8d0f..22c40a3a 100644 --- a/templates/library/template.json +++ b/templates/library/template.json @@ -1,52 +1,52 @@ { - "name": "library", - "description": "A SharePoint Framework Library Component", - "version": "1.0.0", - "spfxVersion": "1.22.2", - "contextSchema": { - "componentNameCapitalCase": { - "type": "string", - "description": "The component name in capital case (e.g., Minimal)" - }, - "componentNameCamelCase": { - "type": "string", - "description": "The component name in camel case (e.g., minimal)" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "The component name in hyphen case (e.g., minimal)" - }, - "componentNameUnescaped": { - "type": "string", - "description": "The component name unescaped" - }, - "componentAlias": { - "type": "string", - "description": "The component alias" - }, - "libraryName": { - "type": "string", - "description": "The library name" - }, - "solutionId": { - "type": "string", - "description": "The solution GUID" - }, - "componentId": { - "type": "string", - "description": "The component GUID" - }, - "featureId": { - "type": "string", - "description": "The feature GUID" - }, - "componentNameAllCaps": { - "type": "string", - "description": "The component name in ALL_CAPS" - }, - "componentDescription": { - "type": "string", - "description": "The component description" - } + "name": "library", + "description": "A SharePoint Framework Library Component", + "version": "1.0.0", + "spfxVersion": "1.22.2", + "contextSchema": { + "componentNameCapitalCase": { + "type": "string", + "description": "The component name in capital case (e.g., Minimal)" + }, + "componentNameCamelCase": { + "type": "string", + "description": "The component name in camel case (e.g., minimal)" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "The component name in hyphen case (e.g., minimal)" + }, + "componentNameUnescaped": { + "type": "string", + "description": "The component name unescaped" + }, + "componentAlias": { + "type": "string", + "description": "The component alias" + }, + "libraryName": { + "type": "string", + "description": "The library name" + }, + "solutionId": { + "type": "string", + "description": "The solution GUID" + }, + "componentId": { + "type": "string", + "description": "The component GUID" + }, + "featureId": { + "type": "string", + "description": "The feature GUID" + }, + "componentNameAllCaps": { + "type": "string", + "description": "The component name in ALL_CAPS" + }, + "componentDescription": { + "type": "string", + "description": "The component description" } + } } diff --git a/templates/webpart-minimal/.eslintrc.js b/templates/webpart-minimal/.eslintrc.js index b1c42cb0..d7790e7e 100644 --- a/templates/webpart-minimal/.eslintrc.js +++ b/templates/webpart-minimal/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/templates/webpart-minimal/config/sass.json b/templates/webpart-minimal/config/sass.json index 1cfc17b3..9022585d 100644 --- a/templates/webpart-minimal/config/sass.json +++ b/templates/webpart-minimal/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/templates/webpart-minimal/config/write-manifests.json b/templates/webpart-minimal/config/write-manifests.json index bad35260..11dca670 100644 --- a/templates/webpart-minimal/config/write-manifests.json +++ b/templates/webpart-minimal/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/templates/webpart-minimal/src/webparts/{componentNameCamelCase}WebPart/loc/en-us.js b/templates/webpart-minimal/src/webparts/{componentNameCamelCase}WebPart/loc/en-us.js index 27ba79d4..9f2dbda5 100644 --- a/templates/webpart-minimal/src/webparts/{componentNameCamelCase}WebPart/loc/en-us.js +++ b/templates/webpart-minimal/src/webparts/{componentNameCamelCase}WebPart/loc/en-us.js @@ -1,4 +1,3 @@ -define([], function() { - return { - } -}); \ No newline at end of file +define([], function () { + return {}; +}); diff --git a/templates/webpart-minimal/src/webparts/{componentNameCamelCase}WebPart/{componentNameCapitalCase}WebPart.manifest.json b/templates/webpart-minimal/src/webparts/{componentNameCamelCase}WebPart/{componentNameCapitalCase}WebPart.manifest.json index 336b5e88..c5d0a594 100644 --- a/templates/webpart-minimal/src/webparts/{componentNameCamelCase}WebPart/{componentNameCapitalCase}WebPart.manifest.json +++ b/templates/webpart-minimal/src/webparts/{componentNameCamelCase}WebPart/{componentNameCapitalCase}WebPart.manifest.json @@ -15,14 +15,16 @@ "supportedHosts": ["SharePointWebPart", "TeamsPersonalApp", "TeamsTab", "SharePointFullPage"], "supportsThemeVariants": true, - "preconfiguredEntries": [{ - "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Advanced - "group": { "default": "Advanced" }, - "title": { "default": "<%= componentNameUnescaped %> Web Part" }, - "description": { "default": "<%= componentNameUnescaped %> Web Part Description" }, - "officeFabricIconFontName": "Page", - "properties": { - "description": "<%= componentNameUnescaped %> Web Part" + "preconfiguredEntries": [ + { + "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Advanced + "group": { "default": "Advanced" }, + "title": { "default": "<%= componentNameUnescaped %> Web Part" }, + "description": { "default": "<%= componentNameUnescaped %> Web Part Description" }, + "officeFabricIconFontName": "Page", + "properties": { + "description": "<%= componentNameUnescaped %> Web Part" + } } - }] + ] } diff --git a/templates/webpart-minimal/template.json b/templates/webpart-minimal/template.json index 08f82206..c83eed80 100644 --- a/templates/webpart-minimal/template.json +++ b/templates/webpart-minimal/template.json @@ -1,48 +1,48 @@ { - "name": "webpart-minimal", - "description": "A minimal web part template (no framework) for SPFx", - "version": "0.0.1", - "spfxVersion": "1.22.2", - "contextSchema": { - "libraryName": { - "type": "string", - "description": "The name of the library (also used as the package name)" - }, - "featureId": { - "type": "string", - "description": "The feature ID (GUID) for the solution feature" - }, - "solutionId": { - "type": "string", - "description": "The solution ID (GUID) for the SharePoint solution" - }, - "componentId": { - "type": "string", - "description": "The component ID (GUID) for the web part" - }, - "componentAlias": { - "type": "string", - "description": "The component alias (in manifest) for the web part" - }, - "componentNameUnescaped": { - "type": "string", - "description": "The component name (in manifest) for the web part, unescaped" - }, - "componentNameCamelCase": { - "type": "string", - "description": "The component name (in manifest) for the web part, in camel case" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "The component name (in manifest) for the web part, in hyphen case" - }, - "componentNameCapitalCase": { - "type": "string", - "description": "The component class name for the web part" - }, - "componentDescription": { - "type": "string", - "description": "The description of the component" - } + "name": "webpart-minimal", + "description": "A minimal web part template (no framework) for SPFx", + "version": "0.0.1", + "spfxVersion": "1.22.2", + "contextSchema": { + "libraryName": { + "type": "string", + "description": "The name of the library (also used as the package name)" + }, + "featureId": { + "type": "string", + "description": "The feature ID (GUID) for the solution feature" + }, + "solutionId": { + "type": "string", + "description": "The solution ID (GUID) for the SharePoint solution" + }, + "componentId": { + "type": "string", + "description": "The component ID (GUID) for the web part" + }, + "componentAlias": { + "type": "string", + "description": "The component alias (in manifest) for the web part" + }, + "componentNameUnescaped": { + "type": "string", + "description": "The component name (in manifest) for the web part, unescaped" + }, + "componentNameCamelCase": { + "type": "string", + "description": "The component name (in manifest) for the web part, in camel case" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "The component name (in manifest) for the web part, in hyphen case" + }, + "componentNameCapitalCase": { + "type": "string", + "description": "The component class name for the web part" + }, + "componentDescription": { + "type": "string", + "description": "The description of the component" } -} \ No newline at end of file + } +} diff --git a/templates/webpart-noframework/.eslintrc.js b/templates/webpart-noframework/.eslintrc.js index 0e803339..7a2d62ef 100644 --- a/templates/webpart-noframework/.eslintrc.js +++ b/templates/webpart-noframework/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { @@ -318,4 +315,4 @@ module.exports = { rules: {} } ] -}; \ No newline at end of file +}; diff --git a/templates/webpart-noframework/config/sass.json b/templates/webpart-noframework/config/sass.json index 1cfc17b3..9022585d 100644 --- a/templates/webpart-noframework/config/sass.json +++ b/templates/webpart-noframework/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/templates/webpart-noframework/config/write-manifests.json b/templates/webpart-noframework/config/write-manifests.json index bad35260..11dca670 100644 --- a/templates/webpart-noframework/config/write-manifests.json +++ b/templates/webpart-noframework/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/templates/webpart-noframework/src/webparts/{componentNameCamelCase}WebPart/loc/en-us.js b/templates/webpart-noframework/src/webparts/{componentNameCamelCase}WebPart/loc/en-us.js index d110a8fa..81325419 100644 --- a/templates/webpart-noframework/src/webparts/{componentNameCamelCase}WebPart/loc/en-us.js +++ b/templates/webpart-noframework/src/webparts/{componentNameCamelCase}WebPart/loc/en-us.js @@ -1,16 +1,16 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "Description", - "BasicGroupName": "Group Name", - "DescriptionFieldLabel": "Description Field", - "AppLocalEnvironmentSharePoint": "The app is running on your local environment as SharePoint web part", - "AppLocalEnvironmentTeams": "The app is running on your local environment as Microsoft Teams app", - "AppLocalEnvironmentOffice": "The app is running on your local environment in office.com", - "AppLocalEnvironmentOutlook": "The app is running on your local environment in Outlook", - "AppSharePointEnvironment": "The app is running on SharePoint page", - "AppTeamsTabEnvironment": "The app is running in Microsoft Teams", - "AppOfficeEnvironment": "The app is running in office.com", - "AppOutlookEnvironment": "The app is running in Outlook", - "UnknownEnvironment": "The app is running in an unknown environment" - } + PropertyPaneDescription: 'Description', + BasicGroupName: 'Group Name', + DescriptionFieldLabel: 'Description Field', + AppLocalEnvironmentSharePoint: 'The app is running on your local environment as SharePoint web part', + AppLocalEnvironmentTeams: 'The app is running on your local environment as Microsoft Teams app', + AppLocalEnvironmentOffice: 'The app is running on your local environment in office.com', + AppLocalEnvironmentOutlook: 'The app is running on your local environment in Outlook', + AppSharePointEnvironment: 'The app is running on SharePoint page', + AppTeamsTabEnvironment: 'The app is running in Microsoft Teams', + AppOfficeEnvironment: 'The app is running in office.com', + AppOutlookEnvironment: 'The app is running in Outlook', + UnknownEnvironment: 'The app is running in an unknown environment' + }; }); diff --git a/templates/webpart-noframework/src/webparts/{componentNameCamelCase}WebPart/{componentNameCapitalCase}WebPart.manifest.json b/templates/webpart-noframework/src/webparts/{componentNameCamelCase}WebPart/{componentNameCapitalCase}WebPart.manifest.json index 8724d844..43938786 100644 --- a/templates/webpart-noframework/src/webparts/{componentNameCamelCase}WebPart/{componentNameCapitalCase}WebPart.manifest.json +++ b/templates/webpart-noframework/src/webparts/{componentNameCamelCase}WebPart/{componentNameCapitalCase}WebPart.manifest.json @@ -15,14 +15,16 @@ "supportedHosts": ["SharePointWebPart", "TeamsPersonalApp", "TeamsTab", "SharePointFullPage"], "supportsThemeVariants": true, - "preconfiguredEntries": [{ - "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Advanced - "group": { "default": "Advanced" }, - "title": { "default": "<%= componentNameUnescaped %>" }, - "description": { "default": "<%= componentNameUnescaped %> description" }, - "officeFabricIconFontName": "Page", - "properties": { - "description": "<%= componentNameUnescaped %>" + "preconfiguredEntries": [ + { + "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Advanced + "group": { "default": "Advanced" }, + "title": { "default": "<%= componentNameUnescaped %>" }, + "description": { "default": "<%= componentNameUnescaped %> description" }, + "officeFabricIconFontName": "Page", + "properties": { + "description": "<%= componentNameUnescaped %>" + } } - }] + ] } diff --git a/templates/webpart-noframework/template.json b/templates/webpart-noframework/template.json index 942c4747..9198395f 100644 --- a/templates/webpart-noframework/template.json +++ b/templates/webpart-noframework/template.json @@ -1,48 +1,48 @@ { - "name": "webpart-noframework", - "description": "A web part template with no framework (plain TypeScript) for SPFx", - "version": "0.0.1", - "spfxVersion": "1.22.2", - "contextSchema": { - "libraryName": { - "type": "string", - "description": "The name of the library (also used as the package name)" - }, - "featureId": { - "type": "string", - "description": "The feature ID (GUID) for the solution feature" - }, - "solutionId": { - "type": "string", - "description": "The solution ID (GUID) for the SharePoint solution" - }, - "componentId": { - "type": "string", - "description": "The component ID (GUID) for the web part" - }, - "componentAlias": { - "type": "string", - "description": "The component alias (in manifest) for the web part" - }, - "componentNameUnescaped": { - "type": "string", - "description": "The component name (in manifest) for the web part, unescaped" - }, - "componentNameCamelCase": { - "type": "string", - "description": "The component name (in manifest) for the web part, in camel case" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "The component name (in manifest) for the web part, in hyphen case" - }, - "componentNameCapitalCase": { - "type": "string", - "description": "The component class name for the web part" - }, - "componentDescription": { - "type": "string", - "description": "The description of the component" - } + "name": "webpart-noframework", + "description": "A web part template with no framework (plain TypeScript) for SPFx", + "version": "0.0.1", + "spfxVersion": "1.22.2", + "contextSchema": { + "libraryName": { + "type": "string", + "description": "The name of the library (also used as the package name)" + }, + "featureId": { + "type": "string", + "description": "The feature ID (GUID) for the solution feature" + }, + "solutionId": { + "type": "string", + "description": "The solution ID (GUID) for the SharePoint solution" + }, + "componentId": { + "type": "string", + "description": "The component ID (GUID) for the web part" + }, + "componentAlias": { + "type": "string", + "description": "The component alias (in manifest) for the web part" + }, + "componentNameUnescaped": { + "type": "string", + "description": "The component name (in manifest) for the web part, unescaped" + }, + "componentNameCamelCase": { + "type": "string", + "description": "The component name (in manifest) for the web part, in camel case" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "The component name (in manifest) for the web part, in hyphen case" + }, + "componentNameCapitalCase": { + "type": "string", + "description": "The component class name for the web part" + }, + "componentDescription": { + "type": "string", + "description": "The description of the component" } + } } diff --git a/templates/webpart-react/.eslintrc.js b/templates/webpart-react/.eslintrc.js index 19628901..55937bc4 100644 --- a/templates/webpart-react/.eslintrc.js +++ b/templates/webpart-react/.eslintrc.js @@ -6,10 +6,10 @@ module.exports = { { files: ['*.ts', '*.tsx'], parser: '@typescript-eslint/parser', - 'parserOptions': { - 'project': './tsconfig.json', - 'ecmaVersion': 2018, - 'sourceType': 'module' + parserOptions: { + project: './tsconfig.json', + ecmaVersion: 2018, + sourceType: 'module' }, rules: { // Prevent usage of the JavaScript null value, while allowing code to access existing APIs that may require null. https://www.npmjs.com/package/@rushstack/eslint-plugin @@ -33,9 +33,9 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': [ 1, { - 'allowExpressions': true, - 'allowTypedFunctionExpressions': true, - 'allowHigherOrderFunctions': false + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json @@ -76,8 +76,8 @@ module.exports = { '@typescript-eslint/no-namespace': [ 1, { - 'allowDeclarations': false, - 'allowDefinitionFiles': false + allowDeclarations: false, + allowDefinitionFiles: false } ], // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" @@ -97,22 +97,22 @@ module.exports = { '@typescript-eslint/no-unused-vars': [ 1, { - 'vars': 'all', + vars: 'all', // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - 'args': 'none' + args: 'none' } ], // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json '@typescript-eslint/no-use-before-define': [ 2, { - 'functions': false, - 'classes': true, - 'variables': true, - 'enums': true, - 'typedefs': true + functions: false, + classes: true, + variables: true, + enums: true, + typedefs: true } ], // Disallows require statements except in import statements. @@ -135,11 +135,11 @@ module.exports = { 'dot-notation': [ 1, { - 'allowPattern': '^_' + allowPattern: '^_' } ], // RATIONALE: Catches code that is likely to be incorrect - 'eqeqeq': 1, + eqeqeq: 1, // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'for-direction': 1, // RATIONALE: Catches a common coding mistake. @@ -278,10 +278,7 @@ module.exports = { // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'require-yield': 1, // "Use strict" is redundant when using the TypeScript compiler. - 'strict': [ - 2, - 'never' - ], + strict: [2, 'never'], // RATIONALE: Catches code that is likely to be incorrect // STANDARDIZED BY: eslint\conf\eslint-recommended.js 'use-isnan': 2, @@ -292,7 +289,7 @@ module.exports = { // ==================================================================== // @microsoft/eslint-plugin-spfx // ==================================================================== - '@microsoft/spfx/no-require-ensure': 2, + '@microsoft/spfx/no-require-ensure': 2 } }, { diff --git a/templates/webpart-react/config/sass.json b/templates/webpart-react/config/sass.json index 1cfc17b3..9022585d 100644 --- a/templates/webpart-react/config/sass.json +++ b/templates/webpart-react/config/sass.json @@ -2,4 +2,4 @@ "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json", "extends": "@microsoft/spfx-web-build-rig/profiles/default/config/sass.json" -} \ No newline at end of file +} diff --git a/templates/webpart-react/config/write-manifests.json b/templates/webpart-react/config/write-manifests.json index bad35260..11dca670 100644 --- a/templates/webpart-react/config/write-manifests.json +++ b/templates/webpart-react/config/write-manifests.json @@ -1,4 +1,4 @@ { "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/write-manifests.schema.json", "cdnBasePath": "" -} \ No newline at end of file +} diff --git a/templates/webpart-react/src/webparts/{componentNameCamelCase}WebPart/loc/en-us.js b/templates/webpart-react/src/webparts/{componentNameCamelCase}WebPart/loc/en-us.js index d110a8fa..81325419 100644 --- a/templates/webpart-react/src/webparts/{componentNameCamelCase}WebPart/loc/en-us.js +++ b/templates/webpart-react/src/webparts/{componentNameCamelCase}WebPart/loc/en-us.js @@ -1,16 +1,16 @@ -define([], function() { +define([], function () { return { - "PropertyPaneDescription": "Description", - "BasicGroupName": "Group Name", - "DescriptionFieldLabel": "Description Field", - "AppLocalEnvironmentSharePoint": "The app is running on your local environment as SharePoint web part", - "AppLocalEnvironmentTeams": "The app is running on your local environment as Microsoft Teams app", - "AppLocalEnvironmentOffice": "The app is running on your local environment in office.com", - "AppLocalEnvironmentOutlook": "The app is running on your local environment in Outlook", - "AppSharePointEnvironment": "The app is running on SharePoint page", - "AppTeamsTabEnvironment": "The app is running in Microsoft Teams", - "AppOfficeEnvironment": "The app is running in office.com", - "AppOutlookEnvironment": "The app is running in Outlook", - "UnknownEnvironment": "The app is running in an unknown environment" - } + PropertyPaneDescription: 'Description', + BasicGroupName: 'Group Name', + DescriptionFieldLabel: 'Description Field', + AppLocalEnvironmentSharePoint: 'The app is running on your local environment as SharePoint web part', + AppLocalEnvironmentTeams: 'The app is running on your local environment as Microsoft Teams app', + AppLocalEnvironmentOffice: 'The app is running on your local environment in office.com', + AppLocalEnvironmentOutlook: 'The app is running on your local environment in Outlook', + AppSharePointEnvironment: 'The app is running on SharePoint page', + AppTeamsTabEnvironment: 'The app is running in Microsoft Teams', + AppOfficeEnvironment: 'The app is running in office.com', + AppOutlookEnvironment: 'The app is running in Outlook', + UnknownEnvironment: 'The app is running in an unknown environment' + }; }); diff --git a/templates/webpart-react/src/webparts/{componentNameCamelCase}WebPart/{componentNameCapitalCase}WebPart.manifest.json b/templates/webpart-react/src/webparts/{componentNameCamelCase}WebPart/{componentNameCapitalCase}WebPart.manifest.json index be13ce47..bc45432e 100644 --- a/templates/webpart-react/src/webparts/{componentNameCamelCase}WebPart/{componentNameCapitalCase}WebPart.manifest.json +++ b/templates/webpart-react/src/webparts/{componentNameCamelCase}WebPart/{componentNameCapitalCase}WebPart.manifest.json @@ -15,14 +15,16 @@ "supportedHosts": ["SharePointWebPart", "TeamsPersonalApp", "TeamsTab", "SharePointFullPage"], "supportsThemeVariants": true, - "preconfiguredEntries": [{ - "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Advanced - "group": { "default": "Advanced" }, - "title": { "default": "<%= componentNameUnescaped %> Web Part" }, - "description": { "default": "<%= componentNameUnescaped %> Web Part Description" }, - "officeFabricIconFontName": "Page", - "properties": { - "description": "<%= componentNameUnescaped %> Web Part" + "preconfiguredEntries": [ + { + "groupId": "5c03119e-3074-46fd-976b-c60198311f70", // Advanced + "group": { "default": "Advanced" }, + "title": { "default": "<%= componentNameUnescaped %> Web Part" }, + "description": { "default": "<%= componentNameUnescaped %> Web Part Description" }, + "officeFabricIconFontName": "Page", + "properties": { + "description": "<%= componentNameUnescaped %> Web Part" + } } - }] + ] } diff --git a/templates/webpart-react/template.json b/templates/webpart-react/template.json index 1545e366..481a595b 100644 --- a/templates/webpart-react/template.json +++ b/templates/webpart-react/template.json @@ -1,48 +1,48 @@ { - "name": "webpart-react", - "description": "A React-based web part template for SPFx", - "version": "0.0.1", - "spfxVersion": "1.22.2", - "contextSchema": { - "libraryName": { - "type": "string", - "description": "The name of the library (also used as the package name)" - }, - "featureId": { - "type": "string", - "description": "The feature ID (GUID) for the solution feature" - }, - "solutionId": { - "type": "string", - "description": "The solution ID (GUID) for the SharePoint solution" - }, - "componentId": { - "type": "string", - "description": "The component ID (GUID) for the web part" - }, - "componentAlias": { - "type": "string", - "description": "The component alias (in manifest) for the web part" - }, - "componentNameUnescaped": { - "type": "string", - "description": "The component name (in manifest) for the web part, unescaped" - }, - "componentNameCamelCase": { - "type": "string", - "description": "The component name (in manifest) for the web part, in camel case" - }, - "componentNameHyphenCase": { - "type": "string", - "description": "The component name (in manifest) for the web part, in hyphen case" - }, - "componentNameCapitalCase": { - "type": "string", - "description": "The component class name for the web part" - }, - "componentDescription": { - "type": "string", - "description": "The description of the component" - } + "name": "webpart-react", + "description": "A React-based web part template for SPFx", + "version": "0.0.1", + "spfxVersion": "1.22.2", + "contextSchema": { + "libraryName": { + "type": "string", + "description": "The name of the library (also used as the package name)" + }, + "featureId": { + "type": "string", + "description": "The feature ID (GUID) for the solution feature" + }, + "solutionId": { + "type": "string", + "description": "The solution ID (GUID) for the SharePoint solution" + }, + "componentId": { + "type": "string", + "description": "The component ID (GUID) for the web part" + }, + "componentAlias": { + "type": "string", + "description": "The component alias (in manifest) for the web part" + }, + "componentNameUnescaped": { + "type": "string", + "description": "The component name (in manifest) for the web part, unescaped" + }, + "componentNameCamelCase": { + "type": "string", + "description": "The component name (in manifest) for the web part, in camel case" + }, + "componentNameHyphenCase": { + "type": "string", + "description": "The component name (in manifest) for the web part, in hyphen case" + }, + "componentNameCapitalCase": { + "type": "string", + "description": "The component class name for the web part" + }, + "componentDescription": { + "type": "string", + "description": "The description of the component" } + } } From b1a9917ed9f5b1ca72370ba374572c454a6003fc Mon Sep 17 00:00:00 2001 From: Ian Clanton-Thuon Date: Tue, 24 Mar 2026 11:50:15 -0400 Subject: [PATCH 8/8] Include Node 24 in the test matrix. (#172) ## Description Includes Node 24 in the test matrix. ## How was this tested? Added new test pipelines. ## Type of change - [ ] Bug fix - [ ] New feature / enhancement - [ ] Template change - [x] Documentation / CI / governance --- .github/workflows/ci.yml | 9 ++- api/spfx-template-api/README.md | 2 +- apps/spfx-cli/README.md | 2 +- apps/spfx-cli/package.json | 2 +- .../spfx-cli/node-24_2026-03-23-23-50.json | 11 +++ .../templates/install-node.yaml | 2 +- common/config/rush/pnpm-lock.yaml | 10 +-- common/config/rush/repo-state.json | 2 +- ...@microsoft__spfx-heft-plugins@1.22.2.patch | 78 +++++++++++++++++++ rush.json | 2 +- tests/spfx-template-test/package.json | 2 +- tools/spfx-cli-build-rig/package.json | 2 +- 12 files changed, 109 insertions(+), 15 deletions(-) create mode 100644 common/changes/@microsoft/spfx-cli/node-24_2026-03-23-23-50.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 61aed565..345fa62d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,8 +13,13 @@ jobs: matrix: include: - os: ubuntu-latest + nodeVersion: 22.14.x + displayName: Ubuntu (Node 22) + - os: ubuntu-latest + nodeVersion: 24.14.x displayName: Ubuntu - os: windows-latest + nodeVersion: 24.14.x displayName: Windows name: Build on ${{ matrix.displayName }} @@ -31,9 +36,9 @@ jobs: - run: git config --global user.name "SPFx CLI Bot" - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v6 with: - node-version: 22.15.0 + node-version: ${{ matrix.nodeVersion }} - name: Verify Change Logs run: node common/scripts/install-run-rush.js change --verify diff --git a/api/spfx-template-api/README.md b/api/spfx-template-api/README.md index 99730d3e..0224bd6b 100644 --- a/api/spfx-template-api/README.md +++ b/api/spfx-template-api/README.md @@ -8,7 +8,7 @@ Programmatic API for loading, rendering, and writing [SharePoint Framework (SPFx npm install @microsoft/spfx-template-api ``` -**Requires Node.js `>=22.14.0 <23.0.0` or `>=24.5.0 <25.0.0`** +**Requires Node.js `>=22.14.0 <23.0.0` or `>=24.12.0 <25.0.0`** --- diff --git a/apps/spfx-cli/README.md b/apps/spfx-cli/README.md index 3337830d..190baf15 100644 --- a/apps/spfx-cli/README.md +++ b/apps/spfx-cli/README.md @@ -8,7 +8,7 @@ The official CLI for scaffolding [SharePoint Framework (SPFx)](https://aka.ms/sp npm install -g @microsoft/spfx-cli ``` -**Requires Node.js `>=22.14.0 <23.0.0` or `>=24.5.0 <25.0.0`** +**Requires Node.js `>=22.14.0 <23.0.0` or `>=24.12.0 <25.0.0`** --- diff --git a/apps/spfx-cli/package.json b/apps/spfx-cli/package.json index 50c5f03e..e54b77c6 100644 --- a/apps/spfx-cli/package.json +++ b/apps/spfx-cli/package.json @@ -5,7 +5,7 @@ "main": "lib/index.js", "license": "MIT", "engines": { - "node": ">=22.14.0 <23.0.0 || >=24.5.0 <25.0.0" + "node": ">=22.14.0 <23.0.0 || >=24.12.0 <25.0.0" }, "scripts": { "build": "heft test --clean", diff --git a/common/changes/@microsoft/spfx-cli/node-24_2026-03-23-23-50.json b/common/changes/@microsoft/spfx-cli/node-24_2026-03-23-23-50.json new file mode 100644 index 00000000..0d6f227d --- /dev/null +++ b/common/changes/@microsoft/spfx-cli/node-24_2026-03-23-23-50.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@microsoft/spfx-cli" + } + ], + "packageName": "@microsoft/spfx-cli", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/config/azure-pipelines/templates/install-node.yaml b/common/config/azure-pipelines/templates/install-node.yaml index a01d22e4..2e309921 100644 --- a/common/config/azure-pipelines/templates/install-node.yaml +++ b/common/config/azure-pipelines/templates/install-node.yaml @@ -4,7 +4,7 @@ parameters: - name: NodeVersion type: string - default: '22.x' + default: '24.14.x' steps: - task: NodeTool@0 diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 7cd81b09..8b1da8b6 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -13,7 +13,7 @@ pnpmfileChecksum: sha256-E1T7OJ3DLTjpDqf4RdJzK9VDtAxgm4gDEQCLYdHD8nI= patchedDependencies: '@microsoft/spfx-heft-plugins@1.22.2': - hash: 24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42 + hash: 185ffebb2de7b1fb5f6ad4d92e9d8ad3b2d3207721e8db14e7ac1f3d716d0b1a path: patches/@microsoft__spfx-heft-plugins@1.22.2.patch importers: @@ -24,7 +24,7 @@ importers: dependencies: '@microsoft/spfx-heft-plugins': specifier: 1.22.2 - version: 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) + version: 1.22.2(patch_hash=185ffebb2de7b1fb5f6ad4d92e9d8ad3b2d3207721e8db14e7ac1f3d716d0b1a)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13) '@rushstack/node-core-library': specifier: ~5.20.3 version: 5.20.3(@types/node@22.19.13) @@ -9647,7 +9647,7 @@ snapshots: - scheduler - supports-color - '@microsoft/spfx-heft-plugins@1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.1.2(@types/node@22.19.13))(@types/node@22.19.13)': + '@microsoft/spfx-heft-plugins@1.22.2(patch_hash=185ffebb2de7b1fb5f6ad4d92e9d8ad3b2d3207721e8db14e7ac1f3d716d0b1a)(@rushstack/heft@1.1.2(@types/node@22.19.13))(@types/node@22.19.13)': dependencies: '@azure/storage-blob': 12.26.0 '@microsoft/sp-css-loader': 1.22.2(@types/node@22.19.13)(webpack@5.95.0) @@ -9692,7 +9692,7 @@ snapshots: - uglify-js - webpack-cli - '@microsoft/spfx-heft-plugins@1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13)': + '@microsoft/spfx-heft-plugins@1.22.2(patch_hash=185ffebb2de7b1fb5f6ad4d92e9d8ad3b2d3207721e8db14e7ac1f3d716d0b1a)(@rushstack/heft@1.2.7(@types/node@22.19.13))(@types/node@22.19.13)': dependencies: '@azure/storage-blob': 12.26.0 '@microsoft/sp-css-loader': 1.22.2(@types/node@22.19.13)(webpack@5.95.0) @@ -9740,7 +9740,7 @@ snapshots: '@microsoft/spfx-web-build-rig@1.22.2(@types/node@22.19.13)(jest-environment-node@29.7.0)(tslib@2.3.1)': dependencies: '@microsoft/api-extractor': 7.52.5(@types/node@22.19.13) - '@microsoft/spfx-heft-plugins': 1.22.2(patch_hash=24d1150069b5b5d5f0ff4aabd70e56d05d64ea1774454ac189298673ea1a9d42)(@rushstack/heft@1.1.2(@types/node@22.19.13))(@types/node@22.19.13) + '@microsoft/spfx-heft-plugins': 1.22.2(patch_hash=185ffebb2de7b1fb5f6ad4d92e9d8ad3b2d3207721e8db14e7ac1f3d716d0b1a)(@rushstack/heft@1.1.2(@types/node@22.19.13))(@types/node@22.19.13) '@rushstack/heft': 1.1.2(@types/node@22.19.13) '@rushstack/heft-dev-cert-plugin': 1.0.3(@rushstack/heft@1.1.2(@types/node@22.19.13))(@types/node@22.19.13) '@rushstack/heft-jest-plugin': 1.1.2(@rushstack/heft@1.1.2(@types/node@22.19.13))(@types/node@22.19.13)(jest-environment-jsdom@29.5.0)(jest-environment-node@29.7.0) diff --git a/common/config/rush/repo-state.json b/common/config/rush/repo-state.json index d75dd10c..18963d3f 100644 --- a/common/config/rush/repo-state.json +++ b/common/config/rush/repo-state.json @@ -1,5 +1,5 @@ // DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush. { - "pnpmShrinkwrapHash": "d0c2b4c2bb17130040e4ffbb561953c91474305b", + "pnpmShrinkwrapHash": "ad3117c46ae53ec55dec8ea14224afdc5cd0e1ab", "preferredVersionsHash": "638ac00f60a6145690289c29fb0e56eb5147428e" } diff --git a/common/pnpm-patches/@microsoft__spfx-heft-plugins@1.22.2.patch b/common/pnpm-patches/@microsoft__spfx-heft-plugins@1.22.2.patch index 1d6c3801..7219517f 100644 --- a/common/pnpm-patches/@microsoft__spfx-heft-plugins@1.22.2.patch +++ b/common/pnpm-patches/@microsoft__spfx-heft-plugins@1.22.2.patch @@ -20,3 +20,81 @@ index ad764968a18d522dd2f3ad22eabc176c05a6d916..f860e528c88867a525f006a3725cadae hasWarning = true; } } +diff --git a/lib-commonjs/utilities/UrlUtilities.js b/lib-commonjs/utilities/UrlUtilities.js +index 39e439bb3287190582ad1535938465d1d597aa16..4e0a036d295aceef5920725c59324084b27d4f11 100644 +--- a/lib-commonjs/utilities/UrlUtilities.js ++++ b/lib-commonjs/utilities/UrlUtilities.js +@@ -1,4 +1,7 @@ +-"use strict"; ++/** ++ * Resolves a relative URL segment against a base, using the WHATWG URL API ++ * instead of the deprecated `url.resolve()`. ++ */ "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); +@@ -8,47 +11,15 @@ Object.defineProperty(exports, "UrlUtilities", { + return UrlUtilities; + } + }); +-const _nodeurl = /*#__PURE__*/ _interop_require_wildcard(require("node:url")); +-function _getRequireWildcardCache(nodeInterop) { +- if (typeof WeakMap !== "function") return null; +- var cacheBabelInterop = new WeakMap(); +- var cacheNodeInterop = new WeakMap(); +- return (_getRequireWildcardCache = function(nodeInterop) { +- return nodeInterop ? cacheNodeInterop : cacheBabelInterop; +- })(nodeInterop); +-} +-function _interop_require_wildcard(obj, nodeInterop) { +- if (!nodeInterop && obj && obj.__esModule) { +- return obj; +- } +- if (obj === null || typeof obj !== "object" && typeof obj !== "function") { +- return { +- default: obj +- }; +- } +- var cache = _getRequireWildcardCache(nodeInterop); +- if (cache && cache.has(obj)) { +- return cache.get(obj); +- } +- var newObj = { +- __proto__: null +- }; +- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; +- for(var key in obj){ +- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { +- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; +- if (desc && (desc.get || desc.set)) { +- Object.defineProperty(newObj, key, desc); +- } else { +- newObj[key] = obj[key]; +- } +- } +- } +- newObj.default = obj; +- if (cache) { +- cache.set(obj, newObj); ++function resolveUrl(base, relative) { ++ const isAbsoluteUrl = /^[a-z][a-z0-9+\-.]*:\/\//i.test(base); ++ if (isAbsoluteUrl) { ++ return new URL(relative, base).href; + } +- return newObj; ++ const hasLeadingSlash = base.startsWith('/'); ++ const dummyBase = hasLeadingSlash ? `http://d${base}` : `http://d/${base}`; ++ const pathname = new URL(relative, dummyBase).pathname; ++ return hasLeadingSlash ? pathname : pathname.substring(1); + } + class UrlUtilities { + static joinUrlSegments(...segments) { +@@ -58,7 +29,7 @@ class UrlUtilities { + segments = segments.filter((value)=>!!value); + let result = segments[0]; + for(let i = 1; i < segments.length; i++){ +- result = _nodeurl.resolve(`${UrlUtilities.trimTrailingSlashes(result)}/`, UrlUtilities.trimLeadingSlashes(segments[i])); ++ result = resolveUrl(`${UrlUtilities.trimTrailingSlashes(result)}/`, UrlUtilities.trimLeadingSlashes(segments[i])); + } + return UrlUtilities.trimTrailingSlashes(result); + } diff --git a/rush.json b/rush.json index 7ddaddd6..37421a85 100644 --- a/rush.json +++ b/rush.json @@ -42,7 +42,7 @@ * LTS schedule: https://nodejs.org/en/about/releases/ * LTS versions: https://nodejs.org/en/download/releases/ */ - "nodeSupportedVersionRange": ">=22.14.0 < 23.0.0", + "nodeSupportedVersionRange": ">=22.14.0 < 23.0.0 || >=24.12.0 < 25.0.0", /** * If the version check above fails, Rush will display a message showing the current diff --git a/tests/spfx-template-test/package.json b/tests/spfx-template-test/package.json index 8a0eadfd..572a61ed 100644 --- a/tests/spfx-template-test/package.json +++ b/tests/spfx-template-test/package.json @@ -6,7 +6,7 @@ "main": "lib/index.js", "license": "MIT", "engines": { - "node": ">=22.14.0 <23.0.0 || >=24.5.0 <25.0.0" + "node": ">=22.14.0 <23.0.0 || >=24.12.0 <25.0.0" }, "scripts": { "build": "heft build --clean && heft test", diff --git a/tools/spfx-cli-build-rig/package.json b/tools/spfx-cli-build-rig/package.json index c0b41652..12be8350 100644 --- a/tools/spfx-cli-build-rig/package.json +++ b/tools/spfx-cli-build-rig/package.json @@ -10,7 +10,7 @@ ], "license": "MIT", "engines": { - "node": ">=22.14.0 <23.0.0 || >=24.5.0 <25.0.0" + "node": ">=22.14.0 <23.0.0 || >=24.12.0 <25.0.0" }, "packageManager": "pnpm@10.15.1", "scripts": {