From f77acfcf1a4246a005029fbc85a6c185f86a2518 Mon Sep 17 00:00:00 2001 From: robby rabbitman Date: Sat, 29 Jun 2024 23:49:43 +0200 Subject: [PATCH] feat(web-test-runner): add init generator --- packages/web-test-runner-plugin/README.md | 1 - packages/web-test-runner-plugin/src/index.ts | 1 - .../.eslintrc.json | 0 packages/web-test-runner/README.md | 1 + packages/web-test-runner/generators.json | 11 ++++ .../jest.config.ts | 2 +- .../package.json | 16 ++++-- .../project.json | 7 +-- .../src/generators/init.schema.json | 25 +++++++++ .../web-test-runner/src/generators/init.ts | 52 +++++++++++++++++++ packages/web-test-runner/src/index.ts | 2 + .../src/plugin.spec.ts | 0 .../src/plugin.ts | 0 .../tsconfig.json | 0 .../tsconfig.lib.json | 0 .../tsconfig.spec.json | 0 tsconfig.base.json | 7 ++- 17 files changed, 109 insertions(+), 16 deletions(-) delete mode 100644 packages/web-test-runner-plugin/README.md delete mode 100644 packages/web-test-runner-plugin/src/index.ts rename packages/{web-test-runner-plugin => web-test-runner}/.eslintrc.json (100%) create mode 100644 packages/web-test-runner/README.md create mode 100644 packages/web-test-runner/generators.json rename packages/{web-test-runner-plugin => web-test-runner}/jest.config.ts (87%) rename packages/{web-test-runner-plugin => web-test-runner}/package.json (63%) rename packages/{web-test-runner-plugin => web-test-runner}/project.json (83%) create mode 100644 packages/web-test-runner/src/generators/init.schema.json create mode 100644 packages/web-test-runner/src/generators/init.ts create mode 100644 packages/web-test-runner/src/index.ts rename packages/{web-test-runner-plugin => web-test-runner}/src/plugin.spec.ts (100%) rename packages/{web-test-runner-plugin => web-test-runner}/src/plugin.ts (100%) rename packages/{web-test-runner-plugin => web-test-runner}/tsconfig.json (100%) rename packages/{web-test-runner-plugin => web-test-runner}/tsconfig.lib.json (100%) rename packages/{web-test-runner-plugin => web-test-runner}/tsconfig.spec.json (100%) diff --git a/packages/web-test-runner-plugin/README.md b/packages/web-test-runner-plugin/README.md deleted file mode 100644 index b056a2c..0000000 --- a/packages/web-test-runner-plugin/README.md +++ /dev/null @@ -1 +0,0 @@ -# web-test-runner-plugin diff --git a/packages/web-test-runner-plugin/src/index.ts b/packages/web-test-runner-plugin/src/index.ts deleted file mode 100644 index df4a6b5..0000000 --- a/packages/web-test-runner-plugin/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { createNodesV2 } from './plugin'; diff --git a/packages/web-test-runner-plugin/.eslintrc.json b/packages/web-test-runner/.eslintrc.json similarity index 100% rename from packages/web-test-runner-plugin/.eslintrc.json rename to packages/web-test-runner/.eslintrc.json diff --git a/packages/web-test-runner/README.md b/packages/web-test-runner/README.md new file mode 100644 index 0000000..9101842 --- /dev/null +++ b/packages/web-test-runner/README.md @@ -0,0 +1 @@ +# web-test-runner diff --git a/packages/web-test-runner/generators.json b/packages/web-test-runner/generators.json new file mode 100644 index 0000000..1059062 --- /dev/null +++ b/packages/web-test-runner/generators.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://json-schema.org/draft-07/schema", + "generators": { + "init": { + "factory": "./src/generators/init", + "schema": "./src/generators/init.schema.json", + "description": "Registers @robby-rabbitman/web-test-runner/plugin in the nx.json.", + "hidden": true + } + } +} diff --git a/packages/web-test-runner-plugin/jest.config.ts b/packages/web-test-runner/jest.config.ts similarity index 87% rename from packages/web-test-runner-plugin/jest.config.ts rename to packages/web-test-runner/jest.config.ts index 5609285..79a881e 100644 --- a/packages/web-test-runner-plugin/jest.config.ts +++ b/packages/web-test-runner/jest.config.ts @@ -1,6 +1,6 @@ /* eslint-disable */ export default { - displayName: 'web-test-runner-plugin', + displayName: 'web-test-runner', preset: '../../jest.preset.js', transform: { '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], diff --git a/packages/web-test-runner-plugin/package.json b/packages/web-test-runner/package.json similarity index 63% rename from packages/web-test-runner-plugin/package.json rename to packages/web-test-runner/package.json index 7262fa3..0ff325b 100644 --- a/packages/web-test-runner-plugin/package.json +++ b/packages/web-test-runner/package.json @@ -1,18 +1,19 @@ { - "name": "@robby-rabbitman/web-test-runner-plugin", + "name": "@robby-rabbitman/web-test-runner", "version": "0.0.0", - "description": "Web Test Runner Plugin for Nx workspaces.", + "description": "Web Test Runner Generator for Nx workspaces.", "repository": { "type": "git", "url": "https://github.com/RobbyRabbitman/nx-plus.git", - "directory": "packages/web-test-runner-plugin" + "directory": "packages/web-test-runner" }, "keywords": [ "Nx", "Web Test Runner", + "Plugin", "Monorepo", "Nrwl", - "Plugin", + "Generator", "Test", "Web" ], @@ -26,7 +27,12 @@ "tslib": "^2.3.0", "@nx/devkit": "^19.3.0" }, + "generators": "./generators.json", "type": "commonjs", "main": "./src/index.js", - "typings": "./src/index.d.ts" + "typings": "./src/index.d.ts", + "exports": { + ".": "./src/index.js", + "./plugin": "./src/plugin.js" + } } diff --git a/packages/web-test-runner-plugin/project.json b/packages/web-test-runner/project.json similarity index 83% rename from packages/web-test-runner-plugin/project.json rename to packages/web-test-runner/project.json index 363d011..93caddb 100644 --- a/packages/web-test-runner-plugin/project.json +++ b/packages/web-test-runner/project.json @@ -1,5 +1,5 @@ { - "name": "web-test-runner-plugin", + "name": "web-test-runner", "$schema": "../../node_modules/nx/schemas/project-schema.json", "tags": ["scope:node", "type:plugin"], "targets": { @@ -26,11 +26,6 @@ "input": "{projectRoot}", "glob": "generators.json", "output": "." - }, - { - "input": "{projectRoot}", - "glob": "executors.json", - "output": "." } ] } diff --git a/packages/web-test-runner/src/generators/init.schema.json b/packages/web-test-runner/src/generators/init.schema.json new file mode 100644 index 0000000..87685dc --- /dev/null +++ b/packages/web-test-runner/src/generators/init.schema.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://json-schema.org/draft-07/schema", + "cli": "nx", + "$id": "RobbyRabbitmanWebTestRunnerInit", + "title": "Initializes the @robby-rabbitman/web-test-runner in a nx workspace.", + "description": "Registers @robby-rabbitman/web-test-runner/plugin in the nx.json.", + "type": "object", + "additionalProperties": false, + "properties": { + "targetName": { + "description": "The name of the web-test-runner target", + "type": "string", + "default": "test" + }, + "skipFormat": { + "type": "boolean", + "default": false + }, + "skipAddPlugin": { + "type": "boolean", + "default": false + } + }, + "required": [] +} diff --git a/packages/web-test-runner/src/generators/init.ts b/packages/web-test-runner/src/generators/init.ts new file mode 100644 index 0000000..d24f2f1 --- /dev/null +++ b/packages/web-test-runner/src/generators/init.ts @@ -0,0 +1,52 @@ +import { + ExpandedPluginConfiguration, + Generator, + formatFiles, + readNxJson, + updateNxJson, +} from '@nx/devkit'; + +export const webTestRunnerPluginPath = + '@robby-rabbitman/web-test-runner/plugin'; + +export interface WebTestRunnerInitGeneratorSchema { + testTarget?: string; + skipAddPlugin?: boolean; + skipFormat?: boolean; +} + +export const initGenerator: Generator< + WebTestRunnerInitGeneratorSchema +> = async (tree, schema) => { + if (!schema?.skipAddPlugin) { + const nxJson = readNxJson(tree); + nxJson.plugins ??= []; + + const hasPlugin = nxJson.plugins.some((pluginConfig) => + typeof pluginConfig === 'string' + ? pluginConfig === webTestRunnerPluginPath + : pluginConfig.plugin === webTestRunnerPluginPath + ); + + if (!hasPlugin) { + nxJson.plugins.push(webTestRunnerPluginConfiguration(schema)); + updateNxJson(tree, nxJson); + } + } + + if (!schema?.skipFormat) { + await formatFiles(tree); + } +}; + +export default initGenerator; + +const webTestRunnerPluginConfiguration = ( + schema?: WebTestRunnerInitGeneratorSchema +) => + ({ + plugin: webTestRunnerPluginPath, + options: { + targetName: schema?.testTarget ?? 'test', + }, + } as ExpandedPluginConfiguration); diff --git a/packages/web-test-runner/src/index.ts b/packages/web-test-runner/src/index.ts new file mode 100644 index 0000000..ad66d1f --- /dev/null +++ b/packages/web-test-runner/src/index.ts @@ -0,0 +1,2 @@ +export { initGenerator as generator } from './generators/init'; +export { createNodesV2 } from './plugin'; diff --git a/packages/web-test-runner-plugin/src/plugin.spec.ts b/packages/web-test-runner/src/plugin.spec.ts similarity index 100% rename from packages/web-test-runner-plugin/src/plugin.spec.ts rename to packages/web-test-runner/src/plugin.spec.ts diff --git a/packages/web-test-runner-plugin/src/plugin.ts b/packages/web-test-runner/src/plugin.ts similarity index 100% rename from packages/web-test-runner-plugin/src/plugin.ts rename to packages/web-test-runner/src/plugin.ts diff --git a/packages/web-test-runner-plugin/tsconfig.json b/packages/web-test-runner/tsconfig.json similarity index 100% rename from packages/web-test-runner-plugin/tsconfig.json rename to packages/web-test-runner/tsconfig.json diff --git a/packages/web-test-runner-plugin/tsconfig.lib.json b/packages/web-test-runner/tsconfig.lib.json similarity index 100% rename from packages/web-test-runner-plugin/tsconfig.lib.json rename to packages/web-test-runner/tsconfig.lib.json diff --git a/packages/web-test-runner-plugin/tsconfig.spec.json b/packages/web-test-runner/tsconfig.spec.json similarity index 100% rename from packages/web-test-runner-plugin/tsconfig.spec.json rename to packages/web-test-runner/tsconfig.spec.json diff --git a/tsconfig.base.json b/tsconfig.base.json index a2ff356..a4374b8 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -15,8 +15,11 @@ "skipLibCheck": true, "skipDefaultLibCheck": true, "paths": { - "@robby-rabbitman/web-test-runner-plugin": [ - "packages/web-test-runner-plugin/src/index.ts" + "@robby-rabbitman/web-test-runner": [ + "packages/web-test-runner/src/index.ts" + ], + "@robby-rabbitman/web-test-runner/plugin": [ + "packages/web-test-runner/src/plugin.ts" ] } },