diff --git a/.changeset/bright-doors-cover.md b/.changeset/bright-doors-cover.md new file mode 100644 index 0000000..d34eea8 --- /dev/null +++ b/.changeset/bright-doors-cover.md @@ -0,0 +1,5 @@ +--- +'nx-ngrok': patch +--- + +Rename "serverTarget" to "target" diff --git a/README.md b/README.md index f17e3f9..4b44de6 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ Start a new Ngrok tunnel. "dev": { "executor": "nx-ngrok:tunnel", "options": { - "serverTarget": "examples-nextjs:serve", + "target": "examples-nextjs:serve", }, }, } @@ -117,17 +117,17 @@ Start a new Ngrok tunnel.
tunnel executor options -| Name | Type | Required | Default | Description | -| -------------- | ---------------------------------------- | :------: | --------------- | -------------------------------------------------------------------------------------------------------- | -| `serverTarget` | `string` | - | - | Server target to run tunnel for. | -| `protocol` | `http`, `tcp`, `tls` | - | `http` | The tunnel protocol name. This defines the type of tunnel you would like to start. | -| `address` | `string`, `number` | - | - | Forward traffic to this local port number or network address. | -| `auth` | `string` | - | - | HTTP Basic authentication for tunnel. | -| `port` | `targetDefault`, `auto`, `number` | - | `targetDefault` | Override the serverTarget's port number — only supported if the serverTarget accepts a port setting. | -| `subdomain` | `string` | - | - | Subdomain name to request. If unspecified, ngrok provides a unique subdomain based on your account type. | -| `authToken` | `string` | - | - | Specifies the authentication token (authtoken) used to connect to the ngrok service. | -| `region` | `us`, `eu`, `au`, `ap`, `sa`, `jp`, `in` | - | `us` | Choose the region where the ngrok agent will connect to host its tunnels. | -| `ngrokConfig` | `string` | - | - | Custom path for ngrok config file. | +| Name | Type | Required | Default | Description | +| ------------- | ---------------------------------------- | :------: | --------------- | -------------------------------------------------------------------------------------------------------- | +| `target` | `string` | - | - | Server target to run tunnel for. | +| `protocol` | `http`, `tcp`, `tls` | - | `http` | The tunnel protocol name. This defines the type of tunnel you would like to start. | +| `address` | `string`, `number` | - | - | Forward traffic to this local port number or network address. | +| `auth` | `string` | - | - | HTTP Basic authentication for tunnel. | +| `port` | `targetDefault`, `auto`, `number` | - | `targetDefault` | Override the target's port number — only supported if the target accepts a port setting. | +| `subdomain` | `string` | - | - | Subdomain name to request. If unspecified, ngrok provides a unique subdomain based on your account type. | +| `authToken` | `string` | - | - | Specifies the authentication token (authtoken) used to connect to the ngrok service. | +| `region` | `us`, `eu`, `au`, `ap`, `sa`, `jp`, `in` | - | `us` | Choose the region where the ngrok agent will connect to host its tunnels. | +| `ngrokConfig` | `string` | - | - | Custom path for ngrok config file. |
@@ -140,7 +140,7 @@ Start a new Ngrok tunnel. Generate a target to run a Ngrok tunnel for a local server. ```bash -nx generate nx-grok:tunnel dev --project=my-app --serverTarget=serve +nx generate nx-grok:tunnel dev --project=my-app --target=serve ```
@@ -157,17 +157,17 @@ UPDATE apps/my-app/project.json
tunnel generator options -| Name | Alias | Type | Required | Default | Description | -| -------------- | --------------------------------- | ---------------------------------------- | :-------------: | ---------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -| `name` | - | `string` | ✅ | - | Target name. | -| `project` | - | `string` | ✅ | - | What project does the target belong to? | -| `serverTarget` | - | `string` | - | - | Server target to run tunnel for. | -| `port` | `targetDefault`, `auto`, `number` | - | `targetDefault` | Override the serverTarget's port number — only supported if the serverTarget accepts a port setting. | -| `protocol` | - | `http`, `tcp`, `tls` | - | `http` | The tunnel protocol name. This defines the type of tunnel you would like to start. | -| `address` | - | `string`, `number` | - | - | Forward traffic to this local port number or network address. | -| `auth` | - | `string` | - | - | HTTP Basic authentication for tunnel. | -| `subdomain` | - | `string` | - | - | Subdomain name to request. If unspecified, ngrok provides a unique subdomain based on your account type. | -| `region` | - | `us`, `eu`, `au`, `ap`, `sa`, `jp`, `in` | - | `us` | Choose the region where the ngrok agent will connect to host its tunnels. | +| Name | Alias | Type | Required | Default | Description | +| ----------- | --------------------------------- | ---------------------------------------- | :-------------: | ---------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `name` | - | `string` | ✅ | - | Target name. | +| `project` | - | `string` | ✅ | - | What project does the target belong to? | +| `target` | - | `string` | - | - | Server target to run tunnel for. | +| `port` | `targetDefault`, `auto`, `number` | - | `targetDefault` | Override the target's port number — only supported if the target accepts a port setting. | +| `protocol` | - | `http`, `tcp`, `tls` | - | `http` | The tunnel protocol name. This defines the type of tunnel you would like to start. | +| `address` | - | `string`, `number` | - | - | Forward traffic to this local port number or network address. | +| `auth` | - | `string` | - | - | HTTP Basic authentication for tunnel. | +| `subdomain` | - | `string` | - | - | Subdomain name to request. If unspecified, ngrok provides a unique subdomain based on your account type. | +| `region` | - | `us`, `eu`, `au`, `ap`, `sa`, `jp`, `in` | - | `us` | Choose the region where the ngrok agent will connect to host its tunnels. |
diff --git a/e2e/nx-ngrok-e2e/tests/nx-ngrok.spec.ts b/e2e/nx-ngrok-e2e/tests/nx-ngrok.spec.ts index 4ab377e..7e5e10d 100644 --- a/e2e/nx-ngrok-e2e/tests/nx-ngrok.spec.ts +++ b/e2e/nx-ngrok-e2e/tests/nx-ngrok.spec.ts @@ -33,14 +33,14 @@ describe('test e2e', () => { ); await runCli( - `pnpm nx generate nx-ngrok:tunnel dev --project=${appName} --serverTarget=${appName}:serve`, + `pnpm nx generate nx-ngrok:tunnel dev --project=${appName} --target=${appName}:serve`, { cwd: workspacePath } ); const project = readJson(`apps/${appName}/project.json`); expect(project?.targets?.dev?.options).toEqual({ - serverTarget: `${appName}:serve`, + target: `${appName}:serve`, }); }, 120000); @@ -53,7 +53,7 @@ describe('test e2e', () => { ); await runCli( - `pnpm nx generate nx-ngrok:tunnel dev --project=${appName} --serverTarget=${appName}:serve`, + `pnpm nx generate nx-ngrok:tunnel dev --project=${appName} --target=${appName}:serve`, { cwd: workspacePath } ); @@ -79,7 +79,7 @@ describe('test e2e', () => { ); await runCli( - `pnpm nx generate nx-ngrok:tunnel dev --project=${appName} --serverTarget=${appName}:serve --port=${port}`, + `pnpm nx generate nx-ngrok:tunnel dev --project=${appName} --target=${appName}:serve --port=${port}`, { cwd: workspacePath } ); @@ -104,7 +104,7 @@ describe('test e2e', () => { ); await runCli( - `pnpm nx generate nx-ngrok:tunnel dev --project=${appName} --serverTarget=${appName}:serve --port=auto`, + `pnpm nx generate nx-ngrok:tunnel dev --project=${appName} --target=${appName}:serve --port=auto`, { cwd: workspacePath } ); diff --git a/examples/nest/project.json b/examples/nest/project.json index e902d85..2076a95 100644 --- a/examples/nest/project.json +++ b/examples/nest/project.json @@ -39,12 +39,12 @@ "dev": { "executor": "nx-ngrok:tunnel", "options": { - "serverTarget": "examples-nest:serve:development", + "target": "examples-nest:serve:development", "address": 3333 }, "configurations": { "production": { - "serverTarget": "examples-nest:serve:production" + "target": "examples-nest:serve:production" } } }, diff --git a/examples/nextjs/project.json b/examples/nextjs/project.json index 1e93041..51cbe72 100644 --- a/examples/nextjs/project.json +++ b/examples/nextjs/project.json @@ -22,12 +22,12 @@ "dev": { "executor": "nx-ngrok:tunnel", "options": { - "serverTarget": "examples-nextjs:serve:development", + "target": "examples-nextjs:serve:development", "port": 8000 }, "configurations": { "production": { - "serverTarget": "examples-nextjs:serve:development" + "target": "examples-nextjs:serve:development" } } }, diff --git a/examples/nx-mesh-app/project.json b/examples/nx-mesh-app/project.json index e9ba626..f7d1010 100644 --- a/examples/nx-mesh-app/project.json +++ b/examples/nx-mesh-app/project.json @@ -17,11 +17,11 @@ "dev": { "executor": "nx-ngrok:tunnel", "options": { - "serverTarget": "examples-nx-mesh-app:serve:development" + "target": "examples-nx-mesh-app:serve:development" }, "configurations": { "production": { - "serverTarget": "examples-nx-mesh-app:serve:production" + "target": "examples-nx-mesh-app:serve:production" } } }, diff --git a/packages/nx-ngrok/.eslintrc.json b/packages/nx-ngrok/.eslintrc.json index 556554a..f300fc1 100644 --- a/packages/nx-ngrok/.eslintrc.json +++ b/packages/nx-ngrok/.eslintrc.json @@ -15,7 +15,12 @@ "rules": {} }, { - "files": ["./package.json", "./generators.json", "./executors.json"], + "files": [ + "./package.json", + "./generators.json", + "./executors.json", + "./migrations.json" + ], "parser": "jsonc-eslint-parser", "rules": { "@nrwl/nx/nx-plugin-checks": "error" diff --git a/packages/nx-ngrok/migrations.json b/packages/nx-ngrok/migrations.json new file mode 100644 index 0000000..6a02a29 --- /dev/null +++ b/packages/nx-ngrok/migrations.json @@ -0,0 +1,10 @@ +{ + "generators": { + "rename-servertarget-to-target": { + "version": "1.2.0", + "description": "Rename 'serverTarget' setting to 'target'", + "cli": "nx", + "implementation": "./src/migrations/1.2.0/rename-servertarget-to-target" + } + } +} diff --git a/packages/nx-ngrok/project.json b/packages/nx-ngrok/project.json index e72c349..0bc665f 100644 --- a/packages/nx-ngrok/project.json +++ b/packages/nx-ngrok/project.json @@ -23,11 +23,14 @@ "format": ["cjs"], "minify": true, "esbuildOptions": { - "outExtension": { ".js": ".js" } + "outExtension": { + ".js": ".js" + } }, "sourcemap": true, "additionalEntryPoints": [ - "packages/nx-ngrok/src/executors/tunnel/executor.ts" + "packages/nx-ngrok/src/executors/tunnel/executor.ts", + "packages/nx-ngrok/src/migrations/1.2.0/rename-servertarget-to-target" ], "external": ["@nrwl/devkit", "ngrok"], "assets": [ @@ -87,7 +90,8 @@ "packages/nx-ngrok/**/*.ts", "packages/nx-ngrok/generators.json", "packages/nx-ngrok/executors.json", - "packages/nx-ngrok/package.json" + "packages/nx-ngrok/package.json", + "packages/nx-ngrok/migrations.json" ] }, "configurations": { diff --git a/packages/nx-ngrok/src/executors/tunnel/executor.spec.ts b/packages/nx-ngrok/src/executors/tunnel/executor.spec.ts index 6ffcca3..de1e244 100644 --- a/packages/nx-ngrok/src/executors/tunnel/executor.spec.ts +++ b/packages/nx-ngrok/src/executors/tunnel/executor.spec.ts @@ -85,9 +85,9 @@ describe('tunnel Executor', () => { ); }); - it('should get baseUrl from the serverTarget', async () => { + it('should get baseUrl from the target', async () => { const tunnel = await tunnelExecutor( - { serverTarget: 'myapp:serve' }, + { target: 'myapp:serve' }, mockContext ).next(); diff --git a/packages/nx-ngrok/src/executors/tunnel/schema.d.ts b/packages/nx-ngrok/src/executors/tunnel/schema.d.ts index 6859c44..f93b323 100644 --- a/packages/nx-ngrok/src/executors/tunnel/schema.d.ts +++ b/packages/nx-ngrok/src/executors/tunnel/schema.d.ts @@ -8,6 +8,6 @@ export interface TunnelExecutorSchema { port?: 'targetDefault' | 'auto' | number; protocol?: Ngrok.Options['proto']; region?: Ngrok.Options['region']; - serverTarget?: string; + target?: string; subdomain?: string; } diff --git a/packages/nx-ngrok/src/executors/tunnel/schema.json b/packages/nx-ngrok/src/executors/tunnel/schema.json index 0340bfb..26868c3 100644 --- a/packages/nx-ngrok/src/executors/tunnel/schema.json +++ b/packages/nx-ngrok/src/executors/tunnel/schema.json @@ -6,13 +6,13 @@ "description": "", "type": "object", "properties": { - "serverTarget": { + "target": { "type": "string", "description": "Server target to run tunnel for." }, "port": { "type": "string", - "description": "Override the serverTarget's port number — only supported if the serverTarget accepts a port setting.", + "description": "Override the target's port number — only supported if the target accepts a port setting.", "oneOf": [ { "type": "string", diff --git a/packages/nx-ngrok/src/executors/tunnel/utils/start-target.ts b/packages/nx-ngrok/src/executors/tunnel/utils/start-target.ts index d4f830c..e9f294b 100644 --- a/packages/nx-ngrok/src/executors/tunnel/utils/start-target.ts +++ b/packages/nx-ngrok/src/executors/tunnel/utils/start-target.ts @@ -19,14 +19,14 @@ export async function* startTarget( port = options.port; } - if (!options.serverTarget) { + if (!options.target) { yield { baseUrl: options.address ?? undefined }; return; } - const parsedDevServerTarget = parseTargetString( - options.serverTarget, + const parsedDevtarget = parseTargetString( + options.target, context.projectGraph ); @@ -35,7 +35,7 @@ export async function* startTarget( baseUrl?: string; info?: { port: number; baseUrl?: string }; }>( - parsedDevServerTarget, + parsedDevtarget, { port, }, diff --git a/packages/nx-ngrok/src/generators/tunnel/schema.d.ts b/packages/nx-ngrok/src/generators/tunnel/schema.d.ts index 85ded3c..d5b6f52 100644 --- a/packages/nx-ngrok/src/generators/tunnel/schema.d.ts +++ b/packages/nx-ngrok/src/generators/tunnel/schema.d.ts @@ -8,6 +8,6 @@ export interface TunnelGeneratorSchema { port?: 'targetDefault' | 'auto' | number; protocol?: Ngrok.Options['proto']; region?: Ngrok.Options['region']; - serverTarget?: string; + target?: string; subdomain?: string; } diff --git a/packages/nx-ngrok/src/generators/tunnel/schema.json b/packages/nx-ngrok/src/generators/tunnel/schema.json index 7784faf..76955e9 100644 --- a/packages/nx-ngrok/src/generators/tunnel/schema.json +++ b/packages/nx-ngrok/src/generators/tunnel/schema.json @@ -7,7 +7,7 @@ "type": "object", "examples": [ { - "command": "nx g nx-ngrok:tunnel dev --project my-app --serverTarget 'my-app:serve'", + "command": "nx g nx-ngrok:tunnel dev --project my-app --target 'my-app:serve'", "description": "Add the `dev` target to `my-app`" } ], @@ -23,7 +23,7 @@ }, "port": { "type": "string", - "description": "Override the serverTarget's port number — only supported if the serverTarget accepts a port setting.", + "description": "Override the target's port number — only supported if the target accepts a port setting.", "oneOf": [ { "type": "string", @@ -42,7 +42,7 @@ "x-prompt": "What project does the target belong to?", "x-dropdown": "projects" }, - "serverTarget": { + "target": { "type": "string", "description": "Server target to run tunnel for.", "x-priority": "important" diff --git a/packages/nx-ngrok/src/generators/tunnel/tunnel.spec.ts b/packages/nx-ngrok/src/generators/tunnel/tunnel.spec.ts index ba77ec0..9f291ff 100644 --- a/packages/nx-ngrok/src/generators/tunnel/tunnel.spec.ts +++ b/packages/nx-ngrok/src/generators/tunnel/tunnel.spec.ts @@ -16,7 +16,7 @@ describe('tunnel', () => { await tunnelGenerator(tree, { name: 'dev', project: 'my-lib', - serverTarget: 'my-lib:serve', + target: 'my-lib:serve', }); const customTarget = readProjectConfiguration(tree, 'my-lib').targets.dev; @@ -24,7 +24,7 @@ describe('tunnel', () => { expect(customTarget).toEqual({ executor: 'nx-ngrok:tunnel', options: { - serverTarget: 'my-lib:serve', + target: 'my-lib:serve', }, }); }); @@ -69,7 +69,7 @@ describe('tunnel', () => { name: 'dev', port: 3000, project: 'my-lib', - serverTarget: 'example:serve', + target: 'example:serve', }); const customTarget = readProjectConfiguration(tree, 'my-lib').targets.dev; @@ -78,7 +78,7 @@ describe('tunnel', () => { executor: 'nx-ngrok:tunnel', options: { port: 3000, - serverTarget: 'example:serve', + target: 'example:serve', }, }); }); @@ -94,7 +94,7 @@ describe('tunnel', () => { name: 'dev', port: 'auto', project: 'my-lib', - serverTarget: 'example:serve', + target: 'example:serve', }); const customTarget = readProjectConfiguration(tree, 'my-lib').targets.dev; @@ -103,7 +103,7 @@ describe('tunnel', () => { executor: 'nx-ngrok:tunnel', options: { port: 'auto', - serverTarget: 'example:serve', + target: 'example:serve', }, }); }); diff --git a/packages/nx-ngrok/src/generators/tunnel/tunnel.ts b/packages/nx-ngrok/src/generators/tunnel/tunnel.ts index 51dfdd8..54cf3d2 100644 --- a/packages/nx-ngrok/src/generators/tunnel/tunnel.ts +++ b/packages/nx-ngrok/src/generators/tunnel/tunnel.ts @@ -23,7 +23,7 @@ export async function tunnelGenerator( port: undefined, protocol: config.protocol, region: config.region, - serverTarget: config.serverTarget, + target: config.target, subdomain: config.subdomain, }; diff --git a/packages/nx-ngrok/src/migrations/1.2.0/rename-servertarget-to-target/index.ts b/packages/nx-ngrok/src/migrations/1.2.0/rename-servertarget-to-target/index.ts new file mode 100644 index 0000000..3b914b6 --- /dev/null +++ b/packages/nx-ngrok/src/migrations/1.2.0/rename-servertarget-to-target/index.ts @@ -0,0 +1 @@ +export * from './rename-servertarget-to-target'; diff --git a/packages/nx-ngrok/src/migrations/1.2.0/rename-servertarget-to-target/rename-servertarget-to-target.spec.ts b/packages/nx-ngrok/src/migrations/1.2.0/rename-servertarget-to-target/rename-servertarget-to-target.spec.ts new file mode 100644 index 0000000..844f905 --- /dev/null +++ b/packages/nx-ngrok/src/migrations/1.2.0/rename-servertarget-to-target/rename-servertarget-to-target.spec.ts @@ -0,0 +1,72 @@ +import { + addProjectConfiguration, + readProjectConfiguration, +} from '@nrwl/devkit'; +import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing'; + +import update from './rename-servertarget-to-target'; + +describe('Migration - rename-servertarget-to-target', () => { + it('should rename serverTarget to target', async () => { + const tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); + + addProjectConfiguration( + tree, + 'example', + { + root: 'apps/example', + projectType: 'application', + targets: { + dev: { + executor: 'nx-ngrok:tunnel', + options: { + serverTarget: 'my-app:serve', + }, + }, + }, + }, + true + ); + + await update(tree); + + const config = readProjectConfiguration(tree, 'example'); + + expect(config.targets?.dev.options).not.toHaveProperty('serverTarget'); + expect(config.targets?.dev.options).toHaveProperty( + 'target', + 'my-app:serve' + ); + }); + + it('should not add target to configurations without a serverTarget', async () => { + const tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); + + addProjectConfiguration( + tree, + 'example', + { + root: 'apps/example', + projectType: 'application', + targets: { + dev: { + executor: 'nx-ngrok:tunnel', + options: { + port: 3000, + }, + }, + }, + }, + true + ); + + await update(tree); + + const config = readProjectConfiguration(tree, 'example'); + + expect(config.targets?.dev.options).not.toHaveProperty('serverTarget'); + expect(config.targets?.dev.options).not.toHaveProperty('target'); + + expect(config.targets?.dev.options).toHaveProperty('port', 3000); + }); +}); diff --git a/packages/nx-ngrok/src/migrations/1.2.0/rename-servertarget-to-target/rename-servertarget-to-target.ts b/packages/nx-ngrok/src/migrations/1.2.0/rename-servertarget-to-target/rename-servertarget-to-target.ts new file mode 100644 index 0000000..e7822f5 --- /dev/null +++ b/packages/nx-ngrok/src/migrations/1.2.0/rename-servertarget-to-target/rename-servertarget-to-target.ts @@ -0,0 +1,38 @@ +import type { Tree } from '@nrwl/devkit'; + +import { + formatFiles, + getProjects, + updateProjectConfiguration, +} from '@nrwl/devkit'; + +export async function update(tree: Tree) { + const projects = getProjects(tree); + + projects.forEach((config, name) => { + let shouldUpdate = false; + + Object.entries(config.targets ?? {})?.forEach(([targetName, target]) => { + if (target.executor === 'nx-ngrok:tunnel') { + if ( + Object.prototype.hasOwnProperty.call(target.options, 'serverTarget') + ) { + const value = target.options['serverTarget']; + + if (config.targets?.[targetName].options['serverTarget']) { + shouldUpdate = true; + + delete config.targets[targetName].options['serverTarget']; + config.targets[targetName].options['target'] = value; + } + } + } + }); + + if (shouldUpdate) updateProjectConfiguration(tree, name, config); + }); + + await formatFiles(tree); +} + +export default update;