diff --git a/docs/generated/devkit/AsyncIteratorExecutor.md b/docs/generated/devkit/AsyncIteratorExecutor.md new file mode 100644 index 0000000000..e4fba3a2b8 --- /dev/null +++ b/docs/generated/devkit/AsyncIteratorExecutor.md @@ -0,0 +1,26 @@ +# Type alias: AsyncIteratorExecutor\ + +Ƭ **AsyncIteratorExecutor**\<`T`\>: (`options`: `T`, `context`: [`ExecutorContext`](../../devkit/documents/ExecutorContext)) => `AsyncIterableIterator`\<\{ `success`: `boolean` }\> + +An executor implementation that returns an async iterator + +#### Type parameters + +| Name | Type | +| :--- | :---- | +| `T` | `any` | + +#### Type declaration + +▸ (`options`, `context`): `AsyncIterableIterator`\<\{ `success`: `boolean` }\> + +##### Parameters + +| Name | Type | +| :-------- | :---------------------------------------------------------- | +| `options` | `T` | +| `context` | [`ExecutorContext`](../../devkit/documents/ExecutorContext) | + +##### Returns + +`AsyncIterableIterator`\<\{ `success`: `boolean` }\> diff --git a/docs/generated/devkit/Executor.md b/docs/generated/devkit/Executor.md index 3e44f1f533..c4e4d24299 100644 --- a/docs/generated/devkit/Executor.md +++ b/docs/generated/devkit/Executor.md @@ -1,6 +1,6 @@ # Type alias: Executor\ -Ƭ **Executor**\<`T`\>: (`options`: `T`, `context`: [`ExecutorContext`](../../devkit/documents/ExecutorContext)) => `Promise`\<\{ `success`: `boolean` }\> \| `AsyncIterableIterator`\<\{ `success`: `boolean` }\> +Ƭ **Executor**\<`T`\>: [`PromiseExecutor`](../../devkit/documents/PromiseExecutor)\<`T`\> \| [`AsyncIteratorExecutor`](../../devkit/documents/AsyncIteratorExecutor)\<`T`\> Implementation of a target of a project @@ -9,18 +9,3 @@ Implementation of a target of a project | Name | Type | | :--- | :---- | | `T` | `any` | - -#### Type declaration - -▸ (`options`, `context`): `Promise`\<\{ `success`: `boolean` }\> \| `AsyncIterableIterator`\<\{ `success`: `boolean` }\> - -##### Parameters - -| Name | Type | -| :-------- | :---------------------------------------------------------- | -| `options` | `T` | -| `context` | [`ExecutorContext`](../../devkit/documents/ExecutorContext) | - -##### Returns - -`Promise`\<\{ `success`: `boolean` }\> \| `AsyncIterableIterator`\<\{ `success`: `boolean` }\> diff --git a/docs/generated/devkit/PromiseExecutor.md b/docs/generated/devkit/PromiseExecutor.md new file mode 100644 index 0000000000..8446698ec4 --- /dev/null +++ b/docs/generated/devkit/PromiseExecutor.md @@ -0,0 +1,26 @@ +# Type alias: PromiseExecutor\ + +Ƭ **PromiseExecutor**\<`T`\>: (`options`: `T`, `context`: [`ExecutorContext`](../../devkit/documents/ExecutorContext)) => `Promise`\<\{ `success`: `boolean` }\> + +An executor implementation that returns a promise + +#### Type parameters + +| Name | Type | +| :--- | :---- | +| `T` | `any` | + +#### Type declaration + +▸ (`options`, `context`): `Promise`\<\{ `success`: `boolean` }\> + +##### Parameters + +| Name | Type | +| :-------- | :---------------------------------------------------------- | +| `options` | `T` | +| `context` | [`ExecutorContext`](../../devkit/documents/ExecutorContext) | + +##### Returns + +`Promise`\<\{ `success`: `boolean` }\> diff --git a/docs/generated/devkit/README.md b/docs/generated/devkit/README.md index 64890a9d58..61a5a9fabd 100644 --- a/docs/generated/devkit/README.md +++ b/docs/generated/devkit/README.md @@ -65,6 +65,7 @@ It only uses language primitives and immutable objects ### Type Aliases +- [AsyncIteratorExecutor](../../devkit/documents/AsyncIteratorExecutor) - [CreateDependencies](../../devkit/documents/CreateDependencies) - [CreateMetadata](../../devkit/documents/CreateMetadata) - [CreateMetadataContext](../../devkit/documents/CreateMetadataContext) @@ -91,6 +92,7 @@ It only uses language primitives and immutable objects - [ProjectTargetConfigurator](../../devkit/documents/ProjectTargetConfigurator) - [ProjectType](../../devkit/documents/ProjectType) - [ProjectsMetadata](../../devkit/documents/ProjectsMetadata) +- [PromiseExecutor](../../devkit/documents/PromiseExecutor) - [RawProjectGraphDependency](../../devkit/documents/RawProjectGraphDependency) - [StaticDependency](../../devkit/documents/StaticDependency) - [StringChange](../../devkit/documents/StringChange) diff --git a/docs/generated/packages/devkit/documents/nx_devkit.md b/docs/generated/packages/devkit/documents/nx_devkit.md index 64890a9d58..61a5a9fabd 100644 --- a/docs/generated/packages/devkit/documents/nx_devkit.md +++ b/docs/generated/packages/devkit/documents/nx_devkit.md @@ -65,6 +65,7 @@ It only uses language primitives and immutable objects ### Type Aliases +- [AsyncIteratorExecutor](../../devkit/documents/AsyncIteratorExecutor) - [CreateDependencies](../../devkit/documents/CreateDependencies) - [CreateMetadata](../../devkit/documents/CreateMetadata) - [CreateMetadataContext](../../devkit/documents/CreateMetadataContext) @@ -91,6 +92,7 @@ It only uses language primitives and immutable objects - [ProjectTargetConfigurator](../../devkit/documents/ProjectTargetConfigurator) - [ProjectType](../../devkit/documents/ProjectType) - [ProjectsMetadata](../../devkit/documents/ProjectsMetadata) +- [PromiseExecutor](../../devkit/documents/PromiseExecutor) - [RawProjectGraphDependency](../../devkit/documents/RawProjectGraphDependency) - [StaticDependency](../../devkit/documents/StaticDependency) - [StringChange](../../devkit/documents/StringChange) diff --git a/packages/nx/src/config/misc-interfaces.ts b/packages/nx/src/config/misc-interfaces.ts index 3485485bc3..dc9fee884c 100644 --- a/packages/nx/src/config/misc-interfaces.ts +++ b/packages/nx/src/config/misc-interfaces.ts @@ -106,17 +106,31 @@ export interface ExecutorConfig { } /** - * Implementation of a target of a project + * An executor implementation that returns a promise */ -export type Executor = ( +export type PromiseExecutor = ( /** * Options that users configure or pass via the command line */ options: T, context: ExecutorContext -) => - | Promise<{ success: boolean }> - | AsyncIterableIterator<{ success: boolean }>; +) => Promise<{ success: boolean }>; + +/** + * An executor implementation that returns an async iterator + */ +export type AsyncIteratorExecutor = ( + /** + * Options that users configure or pass via the command line + */ + options: T, + context: ExecutorContext +) => AsyncIterableIterator<{ success: boolean }>; + +/** + * Implementation of a target of a project + */ +export type Executor = PromiseExecutor | AsyncIteratorExecutor; export interface HasherContext { hasher: TaskHasher; diff --git a/packages/nx/src/devkit-exports.ts b/packages/nx/src/devkit-exports.ts index 2f205dce74..6493cbf493 100644 --- a/packages/nx/src/devkit-exports.ts +++ b/packages/nx/src/devkit-exports.ts @@ -27,6 +27,8 @@ export type { export type { Generator, GeneratorCallback, + PromiseExecutor, + AsyncIteratorExecutor, Executor, ExecutorContext, TaskGraphExecutor, diff --git a/packages/plugin/src/generators/executor/files/executor/executor.spec.ts.template b/packages/plugin/src/generators/executor/files/executor/executor.spec.ts.template index 97f3fa015b..f899a8ae56 100644 --- a/packages/plugin/src/generators/executor/files/executor/executor.spec.ts.template +++ b/packages/plugin/src/generators/executor/files/executor/executor.spec.ts.template @@ -1,11 +1,18 @@ +import { ExecutorContext } from '@nx/devkit'; + import { <%= className %>ExecutorSchema } from './schema'; import executor from './executor'; const options: <%= className %>ExecutorSchema = {}; +const context: ExecutorContext = { + root: '', + cwd: process.cwd(), + isVerbose: false, +}; describe('<%= className %> Executor', () => { it('can run', async () => { - const output = await executor(options); + const output = await executor(options, context); expect(output.success).toBe(true); }); }); \ No newline at end of file diff --git a/packages/plugin/src/generators/executor/files/executor/executor.ts.template b/packages/plugin/src/generators/executor/files/executor/executor.ts.template index e6799fce8d..060dd69d5a 100644 --- a/packages/plugin/src/generators/executor/files/executor/executor.ts.template +++ b/packages/plugin/src/generators/executor/files/executor/executor.ts.template @@ -1,11 +1,11 @@ +import { PromiseExecutor } from "@nx/devkit"; import { <%= className %>ExecutorSchema } from './schema'; -export default async function runExecutor( - options: <%= className %>ExecutorSchema, -) { +const runExecutor: PromiseExecutor<<%= className %>ExecutorSchema> = async (options) => { console.log('Executor ran for <%= className %>', options); return { success: true }; } +export default runExecutor;