diff --git a/.changeset/crazy-pants-exist.md b/.changeset/crazy-pants-exist.md new file mode 100644 index 0000000000..c43a1134fa --- /dev/null +++ b/.changeset/crazy-pants-exist.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': minor +--- + +Support frontend plugin modules in CLI diff --git a/packages/cli/src/lib/version.ts b/packages/cli/src/lib/version.ts index f267dadfeb..5b5f74b89c 100644 --- a/packages/cli/src/lib/version.ts +++ b/packages/cli/src/lib/version.ts @@ -42,6 +42,7 @@ import { version as coreComponents } from '../../../../packages/core-components/ import { version as corePluginApi } from '../../../../packages/core-plugin-api/package.json'; import { version as devUtils } from '../../../../packages/dev-utils/package.json'; import { version as errors } from '../../../../packages/errors/package.json'; +import { version as frontendPluginApi } from '../../../../packages/frontend-plugin-api/package.json'; import { version as testUtils } from '../../../../packages/test-utils/package.json'; import { version as scaffolderNode } from '../../../../plugins/scaffolder-node/package.json'; import { version as scaffolderNodeTestUtils } from '../../../../plugins/scaffolder-node-test-utils/package.json'; @@ -63,6 +64,7 @@ export const packageVersions: Record = { '@backstage/core-plugin-api': corePluginApi, '@backstage/dev-utils': devUtils, '@backstage/errors': errors, + '@backstage/frontend-plugin-api': frontendPluginApi, '@backstage/test-utils': testUtils, '@backstage/theme': theme, '@backstage/plugin-scaffolder-node': scaffolderNode, diff --git a/packages/cli/src/modules/new/lib/defaultTemplates.ts b/packages/cli/src/modules/new/lib/defaultTemplates.ts index 1a2f7a89d4..2a4ff9e963 100644 --- a/packages/cli/src/modules/new/lib/defaultTemplates.ts +++ b/packages/cli/src/modules/new/lib/defaultTemplates.ts @@ -16,6 +16,7 @@ export const defaultTemplates = [ '@backstage/cli/templates/frontend-plugin', + '@backstage/cli/templates/frontend-plugin-module', '@backstage/cli/templates/backend-plugin', '@backstage/cli/templates/backend-plugin-module', '@backstage/cli/templates/plugin-web-library', diff --git a/packages/cli/templates/frontend-plugin-module/.eslintrc.js.hbs b/packages/cli/templates/frontend-plugin-module/.eslintrc.js.hbs new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/packages/cli/templates/frontend-plugin-module/.eslintrc.js.hbs @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/cli/templates/frontend-plugin-module/README.md.hbs b/packages/cli/templates/frontend-plugin-module/README.md.hbs new file mode 100644 index 0000000000..534ea2faab --- /dev/null +++ b/packages/cli/templates/frontend-plugin-module/README.md.hbs @@ -0,0 +1,5 @@ +# {{packageName}} + +The {{moduleId}} frontend module for the {{pluginId}} plugin. + +_This plugin was created through the Backstage CLI_ diff --git a/packages/cli/templates/frontend-plugin-module/package.json.hbs b/packages/cli/templates/frontend-plugin-module/package.json.hbs new file mode 100644 index 0000000000..2a12cb3559 --- /dev/null +++ b/packages/cli/templates/frontend-plugin-module/package.json.hbs @@ -0,0 +1,34 @@ +{ + "name": "{{packageName}}", + "description": "The {{moduleId}} frontend module for the {{pluginId}} plugin.", + "main": "src/index.ts", + "types": "src/index.ts", + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "module": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "frontend-plugin-module" + }, + "sideEffects": false, + "scripts": { + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@backstage/frontend-plugin-api": "{{versionQuery '@backstage/frontend-plugin-api'}}" + }, + "devDependencies": { + "@backstage/cli": "{{versionQuery '@backstage/cli'}}", + "@testing-library/jest-dom": "{{versionQuery '@testing-library/jest-dom' '6.0.0'}}" + }, + "files": [ + "dist" + ] +} diff --git a/packages/cli/templates/frontend-plugin-module/portable-template.yaml b/packages/cli/templates/frontend-plugin-module/portable-template.yaml new file mode 100644 index 0000000000..2af3faa922 --- /dev/null +++ b/packages/cli/templates/frontend-plugin-module/portable-template.yaml @@ -0,0 +1,5 @@ +name: frontend-plugin-module +role: frontend-plugin-module +description: A new frontend module that extends an existing frontend plugin +values: + moduleVar: '{{ camelCase pluginId }}Module{{ upperFirst ( camelCase moduleId ) }}' diff --git a/packages/cli/templates/frontend-plugin-module/src/index.ts.hbs b/packages/cli/templates/frontend-plugin-module/src/index.ts.hbs new file mode 100644 index 0000000000..63ead4f9c9 --- /dev/null +++ b/packages/cli/templates/frontend-plugin-module/src/index.ts.hbs @@ -0,0 +1 @@ +export { {{ moduleVar }} } from './plugin'; diff --git a/packages/cli/templates/frontend-plugin-module/src/plugin.ts.hbs b/packages/cli/templates/frontend-plugin-module/src/plugin.ts.hbs new file mode 100644 index 0000000000..a908603fcc --- /dev/null +++ b/packages/cli/templates/frontend-plugin-module/src/plugin.ts.hbs @@ -0,0 +1,8 @@ +import { createFrontendModule } from '@backstage/frontend-plugin-api'; + +export const {{ moduleVar }} = createFrontendModule({ + pluginId: '{{ pluginId }}', + extensions: [ + /* TODO */ + ], +}); diff --git a/packages/cli/templates/frontend-plugin-module/src/setupTests.ts b/packages/cli/templates/frontend-plugin-module/src/setupTests.ts new file mode 100644 index 0000000000..7b0828bfa8 --- /dev/null +++ b/packages/cli/templates/frontend-plugin-module/src/setupTests.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom';