From 965a6791f6f891d874d9de9182fc702516df2a75 Mon Sep 17 00:00:00 2001 From: Gui Seek Date: Sat, 7 Dec 2024 08:38:49 -0300 Subject: [PATCH] refactor(tools): granulariza geradores de entidades e casos de uso --- tools/plugin/dx-dev/generators.json | 5 ++++ .../use-cases/create-__fileName__.ts.template | 21 +++++++++++++++++ .../use-cases/delete-__fileName__.ts.template | 15 ++++++++++++ .../find-__fileNamePlural__.ts.template | 22 ++++++++++++++++++ .../find-__fileName__-by-id.ts.template | 17 ++++++++++++++ .../use-cases/update-__fileName__.ts.template | 15 ++++++++++++ .../use-cases/create-__fileName__.ts.template | 15 ++++++++++++ .../use-cases/delete-__fileName__.ts.template | 15 ++++++++++++ .../find-__fileNamePlural__.ts.template | 22 ++++++++++++++++++ .../find-__fileName__-by-id.ts.template | 15 ++++++++++++ .../use-cases/update-__fileName__.ts.template | 15 ++++++++++++ .../use-cases/__scope__/index.ts.template | 1 + .../use-cases/create-__fileName__.ts.template | 5 ++++ .../use-cases/delete-__fileName__.ts.template | 5 ++++ .../find-__fileNamePlural__.ts.template | 5 ++++ .../find-__fileName__-by-id.ts.template | 5 ++++ .../use-cases/update-__fileName__.ts.template | 5 ++++ .../entity/lib/normalize-options.ts | 15 +----------- .../src/generators/use-cases/generator.ts | 19 +++++++++++++++ .../src/generators/use-cases/lib/index.ts | 1 + .../use-cases/lib/normalize-options.ts | 12 ++++++++++ .../src/generators/use-cases/schema.d.ts | 17 ++++++++++++++ .../src/generators/use-cases/schema.json | 23 +++++++++++++++++++ .../plugin/dx-dev/src/utils/get-all-names.ts | 14 +++++++++++ tools/plugin/dx-dev/src/utils/index.ts | 3 ++- 25 files changed, 292 insertions(+), 15 deletions(-) create mode 100644 tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/create-__fileName__.ts.template create mode 100644 tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/delete-__fileName__.ts.template create mode 100644 tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/find-__fileNamePlural__.ts.template create mode 100644 tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/find-__fileName__-by-id.ts.template create mode 100644 tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/update-__fileName__.ts.template create mode 100644 tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/create-__fileName__.ts.template create mode 100644 tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/delete-__fileName__.ts.template create mode 100644 tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/find-__fileNamePlural__.ts.template create mode 100644 tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/find-__fileName__-by-id.ts.template create mode 100644 tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/update-__fileName__.ts.template create mode 100644 tools/plugin/dx-dev/src/files/use-cases/__scope__/index.ts.template create mode 100644 tools/plugin/dx-dev/src/generators/use-cases/generator.ts create mode 100644 tools/plugin/dx-dev/src/generators/use-cases/lib/index.ts create mode 100644 tools/plugin/dx-dev/src/generators/use-cases/lib/normalize-options.ts create mode 100644 tools/plugin/dx-dev/src/generators/use-cases/schema.d.ts create mode 100644 tools/plugin/dx-dev/src/generators/use-cases/schema.json create mode 100644 tools/plugin/dx-dev/src/utils/get-all-names.ts diff --git a/tools/plugin/dx-dev/generators.json b/tools/plugin/dx-dev/generators.json index a2c7444e..4979ae3a 100644 --- a/tools/plugin/dx-dev/generators.json +++ b/tools/plugin/dx-dev/generators.json @@ -4,6 +4,11 @@ "factory": "./src/generators/entity/generator", "schema": "./src/generators/entity/schema.json", "description": "Entity generator" + }, + "use-cases": { + "factory": "./src/generators/use-cases/generator", + "schema": "./src/generators/use-cases/schema.json", + "description": "Use Cases" } } } diff --git a/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/create-__fileName__.ts.template b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/create-__fileName__.ts.template new file mode 100644 index 00000000..45ae57f3 --- /dev/null +++ b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/create-__fileName__.ts.template @@ -0,0 +1,21 @@ +import { createUseCaseProvider } from '@devmx/shared-util-data/client'; +import { <%= className %>Service } from '../services'; +import { + UseCase, + <%= className %>, + Editable<%= className %>, +} from '@devmx/shared-api-interfaces'; + +export class Create<%= className %>UseCase + implements UseCase, <%= className %>> +{ + constructor(private <%= propertyName %>Service: <%= className %>Service) {} + + execute(data: Editable<%= className %>) { + return this.<%= propertyName %>Service.create(data); + } +} + +export function provideCreate<%= className %>UseCase() { + return createUseCaseProvider(Create<%= className %>UseCase, [<%= className %>Service]); +} diff --git a/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/delete-__fileName__.ts.template b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/delete-__fileName__.ts.template new file mode 100644 index 00000000..fdbc3bca --- /dev/null +++ b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/delete-__fileName__.ts.template @@ -0,0 +1,15 @@ +import { createUseCaseProvider } from '@devmx/shared-util-data/client'; +import { <%= className %>, UseCase } from '@devmx/shared-api-interfaces'; +import { <%= className %>Service } from '../services'; + +export class Delete<%= className %>UseCase implements UseCase | null> { + constructor(private <%= propertyName %>Service: <%= className %>Service) {} + + execute(id: string) { + return this.<%= propertyName %>Service.delete(id); + } +} + +export function provideDelete<%= className %>UseCase() { + return createUseCaseProvider(Delete<%= className %>UseCase, [<%= className %>Service]); +} diff --git a/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/find-__fileNamePlural__.ts.template b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/find-__fileNamePlural__.ts.template new file mode 100644 index 00000000..d6517e7a --- /dev/null +++ b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/find-__fileNamePlural__.ts.template @@ -0,0 +1,22 @@ +import { createUseCaseProvider } from '@devmx/shared-util-data/client'; +import { <%= className %>Service } from '../services'; +import { + Page, + UseCase, + <%= className %>, + QueryParams, +} from '@devmx/shared-api-interfaces'; + +export class Find<%= classNamePlural %>UseCase + implements UseCase>, Page<<%= className %>>> +{ + constructor(private <%= propertyName %>Service: <%= className %>Service) {} + + execute(params: QueryParams<<%= className %>>) { + return this.<%= propertyName %>Service.find(params); + } +} + +export function provideFind<%= classNamePlural %>UseCase() { + return createUseCaseProvider(Find<%= classNamePlural %>UseCase, [<%= className %>Service]); +} diff --git a/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/find-__fileName__-by-id.ts.template b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/find-__fileName__-by-id.ts.template new file mode 100644 index 00000000..1562c800 --- /dev/null +++ b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/find-__fileName__-by-id.ts.template @@ -0,0 +1,17 @@ +import { createUseCaseProvider } from '@devmx/shared-util-data/client'; +import { <%= className %>, UseCase } from '@devmx/shared-api-interfaces'; +import { <%= className %>Service } from '../services'; + +export class Find<%= className %>ByIDUseCase + implements UseCase | null> +{ + constructor(private <%= propertyName %>Service: <%= className %>Service) {} + + execute(id: string) { + return this.<%= propertyName %>Service.findOne(id); + } +} + +export function provideFind<%= className %>ByIDUseCase() { + return createUseCaseProvider(Find<%= className %>ByIDUseCase, [<%= className %>Service]); +} diff --git a/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/update-__fileName__.ts.template b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/update-__fileName__.ts.template new file mode 100644 index 00000000..434c4be8 --- /dev/null +++ b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/clent/use-cases/update-__fileName__.ts.template @@ -0,0 +1,15 @@ +import { UseCase, <%= className %>, Editable<%= className %> } from '@devmx/shared-api-interfaces'; +import { createUseCaseProvider } from '@devmx/shared-util-data/client'; +import { <%= className %>Service } from '../services'; + +export class Update<%= className %>UseCase implements UseCase, <%= className %>> { + constructor(private <%= propertyName %>Service: <%= className %>Service) {} + + execute(data: Editable<%= className %>) { + return this.<%= propertyName %>Service.update(data.id, data); + } +} + +export function provideUpdate<%= className %>UseCase() { + return createUseCaseProvider(Update<%= className %>UseCase, [<%= className %>Service]); +} diff --git a/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/create-__fileName__.ts.template b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/create-__fileName__.ts.template new file mode 100644 index 00000000..619f1b34 --- /dev/null +++ b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/create-__fileName__.ts.template @@ -0,0 +1,15 @@ +import { createUseCaseProvider } from '@devmx/shared-util-data/server'; +import { UseCase, <%= className %>, Editable<%= className %> } from '@devmx/shared-api-interfaces'; +import { <%= classNamePlural %>Service } from '../services'; + +export class Create<%= className %>UseCase implements UseCase, <%= className %>> { + constructor(private <%= propertyNamePlural %>Service: <%= classNamePlural %>Service) {} + + execute(data: Editable<%= className %>) { + return this.<%= propertyNamePlural %>Service.create(data); + } +} + +export function provideCreate<%= className %>UseCase() { + return createUseCaseProvider(Create<%= className %>UseCase, [<%= classNamePlural %>Service]); +} diff --git a/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/delete-__fileName__.ts.template b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/delete-__fileName__.ts.template new file mode 100644 index 00000000..bfb639e4 --- /dev/null +++ b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/delete-__fileName__.ts.template @@ -0,0 +1,15 @@ +import { createUseCaseProvider } from '@devmx/shared-util-data/server'; +import { <%= className %>, UseCase } from '@devmx/shared-api-interfaces'; +import { <%= classNamePlural %>Service } from '../services'; + +export class Delete<%= className %>UseCase implements UseCase> { + constructor(private <%= propertyNamePlural %>Service: <%= classNamePlural %>Service) {} + + async execute(id: string) { + return this.<%= propertyNamePlural %>Service.delete(id); + } +} + +export function provideDelete<%= className %>UseCase() { + return createUseCaseProvider(Delete<%= className %>UseCase, [<%= classNamePlural %>Service]) +} diff --git a/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/find-__fileNamePlural__.ts.template b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/find-__fileNamePlural__.ts.template new file mode 100644 index 00000000..d1924556 --- /dev/null +++ b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/find-__fileNamePlural__.ts.template @@ -0,0 +1,22 @@ +import { createUseCaseProvider } from '@devmx/shared-util-data/server'; +import { <%= classNamePlural %>Service } from '../services'; +import { + Page, + UseCase, + <%= className %>, + QueryParams, +} from '@devmx/shared-api-interfaces'; + +export class Find<%= classNamePlural %>UseCase + implements UseCase>, Page<<%= className %>>> +{ + constructor(private <%= propertyNamePlural %>Service: <%= classNamePlural %>Service) {} + + async execute(params: QueryParams<<%= className %>>) { + return this.<%= propertyNamePlural %>Service.find(params); + } +} + +export function provideFind<%= classNamePlural %>UseCase() { + return createUseCaseProvider(Find<%= classNamePlural %>UseCase, [<%= classNamePlural %>Service]) +} diff --git a/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/find-__fileName__-by-id.ts.template b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/find-__fileName__-by-id.ts.template new file mode 100644 index 00000000..fde3d023 --- /dev/null +++ b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/find-__fileName__-by-id.ts.template @@ -0,0 +1,15 @@ +import { createUseCaseProvider } from '@devmx/shared-util-data/server'; +import { <%= className %>, UseCase } from '@devmx/shared-api-interfaces'; +import { <%= classNamePlural %>Service } from '../services'; + +export class Find<%= className %>ByIDUseCase implements UseCase | null> { + constructor(private <%= propertyNamePlural %>Service: <%= classNamePlural %>Service) {} + + async execute(id: string) { + return this.<%= propertyNamePlural %>Service.findOne(id); + } +} + +export function provideFind<%= className %>ByIDUseCase() { + return createUseCaseProvider(Find<%= className %>ByIDUseCase, [<%= classNamePlural %>Service]) +} diff --git a/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/update-__fileName__.ts.template b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/update-__fileName__.ts.template new file mode 100644 index 00000000..dcde056c --- /dev/null +++ b/tools/plugin/dx-dev/src/files/use-cases/__scope__/domain/src/server/use-cases/update-__fileName__.ts.template @@ -0,0 +1,15 @@ +import { createUseCaseProvider } from '@devmx/shared-util-data/server'; +import { UseCase, <%= className %>, Editable<%= className %> } from '@devmx/shared-api-interfaces'; +import { <%= classNamePlural %>Service } from '../services'; + +export class Update<%= className %>UseCase implements UseCase, <%= className %>> { + constructor(private <%= propertyNamePlural %>Service: <%= classNamePlural %>Service) {} + + async execute(data: Editable<%= className %>) { + return this.<%= propertyNamePlural %>Service.update(data.id, data); + } +} + +export function provideUpdate<%= className %>UseCase() { + return createUseCaseProvider(Update<%= className %>UseCase, [<%= classNamePlural %>Service]) +} diff --git a/tools/plugin/dx-dev/src/files/use-cases/__scope__/index.ts.template b/tools/plugin/dx-dev/src/files/use-cases/__scope__/index.ts.template new file mode 100644 index 00000000..877d4302 --- /dev/null +++ b/tools/plugin/dx-dev/src/files/use-cases/__scope__/index.ts.template @@ -0,0 +1 @@ +const variable = "<%= name %>"; \ No newline at end of file diff --git a/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/create-__fileName__.ts.template b/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/create-__fileName__.ts.template index a3571455..619f1b34 100644 --- a/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/create-__fileName__.ts.template +++ b/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/create-__fileName__.ts.template @@ -1,3 +1,4 @@ +import { createUseCaseProvider } from '@devmx/shared-util-data/server'; import { UseCase, <%= className %>, Editable<%= className %> } from '@devmx/shared-api-interfaces'; import { <%= classNamePlural %>Service } from '../services'; @@ -8,3 +9,7 @@ export class Create<%= className %>UseCase implements UseCaseService.create(data); } } + +export function provideCreate<%= className %>UseCase() { + return createUseCaseProvider(Create<%= className %>UseCase, [<%= classNamePlural %>Service]); +} diff --git a/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/delete-__fileName__.ts.template b/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/delete-__fileName__.ts.template index ec33ff4c..bfb639e4 100644 --- a/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/delete-__fileName__.ts.template +++ b/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/delete-__fileName__.ts.template @@ -1,3 +1,4 @@ +import { createUseCaseProvider } from '@devmx/shared-util-data/server'; import { <%= className %>, UseCase } from '@devmx/shared-api-interfaces'; import { <%= classNamePlural %>Service } from '../services'; @@ -8,3 +9,7 @@ export class Delete<%= className %>UseCase implements UseCaseService.delete(id); } } + +export function provideDelete<%= className %>UseCase() { + return createUseCaseProvider(Delete<%= className %>UseCase, [<%= classNamePlural %>Service]) +} diff --git a/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/find-__fileNamePlural__.ts.template b/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/find-__fileNamePlural__.ts.template index 8929f264..d1924556 100644 --- a/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/find-__fileNamePlural__.ts.template +++ b/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/find-__fileNamePlural__.ts.template @@ -1,3 +1,4 @@ +import { createUseCaseProvider } from '@devmx/shared-util-data/server'; import { <%= classNamePlural %>Service } from '../services'; import { Page, @@ -15,3 +16,7 @@ export class Find<%= classNamePlural %>UseCase return this.<%= propertyNamePlural %>Service.find(params); } } + +export function provideFind<%= classNamePlural %>UseCase() { + return createUseCaseProvider(Find<%= classNamePlural %>UseCase, [<%= classNamePlural %>Service]) +} diff --git a/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/find-__fileName__-by-id.ts.template b/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/find-__fileName__-by-id.ts.template index d0495bf5..fde3d023 100644 --- a/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/find-__fileName__-by-id.ts.template +++ b/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/find-__fileName__-by-id.ts.template @@ -1,3 +1,4 @@ +import { createUseCaseProvider } from '@devmx/shared-util-data/server'; import { <%= className %>, UseCase } from '@devmx/shared-api-interfaces'; import { <%= classNamePlural %>Service } from '../services'; @@ -8,3 +9,7 @@ export class Find<%= className %>ByIDUseCase implements UseCaseService.findOne(id); } } + +export function provideFind<%= className %>ByIDUseCase() { + return createUseCaseProvider(Find<%= className %>ByIDUseCase, [<%= classNamePlural %>Service]) +} diff --git a/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/update-__fileName__.ts.template b/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/update-__fileName__.ts.template index 0d2e1c4e..dcde056c 100644 --- a/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/update-__fileName__.ts.template +++ b/tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/update-__fileName__.ts.template @@ -1,3 +1,4 @@ +import { createUseCaseProvider } from '@devmx/shared-util-data/server'; import { UseCase, <%= className %>, Editable<%= className %> } from '@devmx/shared-api-interfaces'; import { <%= classNamePlural %>Service } from '../services'; @@ -8,3 +9,7 @@ export class Update<%= className %>UseCase implements UseCaseService.update(data.id, data); } } + +export function provideUpdate<%= className %>UseCase() { + return createUseCaseProvider(Update<%= className %>UseCase, [<%= classNamePlural %>Service]) +} diff --git a/tools/plugin/dx-dev/src/generators/entity/lib/normalize-options.ts b/tools/plugin/dx-dev/src/generators/entity/lib/normalize-options.ts index 469e9bf5..5bbc7d99 100644 --- a/tools/plugin/dx-dev/src/generators/entity/lib/normalize-options.ts +++ b/tools/plugin/dx-dev/src/generators/entity/lib/normalize-options.ts @@ -1,22 +1,9 @@ -import { pluralize } from '../../../utils'; -import { names } from '@nx/devkit'; +import { getAllNames } from '../../../utils'; import { EntityGeneratorSchema, NormalizedEntityGeneratorSchema, } from '../schema'; -function getAllNames(original: string) { - const normalized = names(original); - const pluralNames = { - namePlural: pluralize(normalized.name, 2), - classNamePlural: pluralize(normalized.className, 2), - fileNamePlural: pluralize(normalized.fileName, 2), - propertyNamePlural: pluralize(normalized.propertyName, 2), - constantNamePlural: pluralize(normalized.constantName, 2), - }; - return { ...normalized, ...pluralNames }; -} - export function normalizeOptions( options: EntityGeneratorSchema ): NormalizedEntityGeneratorSchema { diff --git a/tools/plugin/dx-dev/src/generators/use-cases/generator.ts b/tools/plugin/dx-dev/src/generators/use-cases/generator.ts new file mode 100644 index 00000000..11278226 --- /dev/null +++ b/tools/plugin/dx-dev/src/generators/use-cases/generator.ts @@ -0,0 +1,19 @@ +import { Tree, formatFiles, generateFiles } from '@nx/devkit'; +import { UseCasesGeneratorSchema } from './schema'; +import { normalizeOptions } from './lib'; +import { join } from 'path'; + +export async function useCasesGenerator( + tree: Tree, + options: UseCasesGeneratorSchema +) { + const normalizedOptions = normalizeOptions(options); + + const srcFolder = join(__dirname, '..', '..', 'files', 'use-cases'); + + generateFiles(tree, srcFolder, 'packages', normalizedOptions); + + await formatFiles(tree); +} + +export default useCasesGenerator; diff --git a/tools/plugin/dx-dev/src/generators/use-cases/lib/index.ts b/tools/plugin/dx-dev/src/generators/use-cases/lib/index.ts new file mode 100644 index 00000000..757de932 --- /dev/null +++ b/tools/plugin/dx-dev/src/generators/use-cases/lib/index.ts @@ -0,0 +1 @@ +export * from './normalize-options'; diff --git a/tools/plugin/dx-dev/src/generators/use-cases/lib/normalize-options.ts b/tools/plugin/dx-dev/src/generators/use-cases/lib/normalize-options.ts new file mode 100644 index 00000000..257b218b --- /dev/null +++ b/tools/plugin/dx-dev/src/generators/use-cases/lib/normalize-options.ts @@ -0,0 +1,12 @@ +import { getAllNames } from '../../../utils'; +import { + UseCasesGeneratorSchema, + NormalizedUseCasesGeneratorSchema, +} from '../schema'; + +export function normalizeOptions( + options: UseCasesGeneratorSchema +): NormalizedUseCasesGeneratorSchema { + const allNames = getAllNames(options.name); + return { ...options, ...allNames }; +} diff --git a/tools/plugin/dx-dev/src/generators/use-cases/schema.d.ts b/tools/plugin/dx-dev/src/generators/use-cases/schema.d.ts new file mode 100644 index 00000000..ad1b6d89 --- /dev/null +++ b/tools/plugin/dx-dev/src/generators/use-cases/schema.d.ts @@ -0,0 +1,17 @@ +export interface UseCasesGeneratorSchema { + name: string; + scope: string; +} + +export interface NormalizedUseCasesGeneratorSchema + extends EntityGeneratorSchema { + constantName: string; + propertyName: string; + className: string; + fileName: string; + namePlural: string; + classNamePlural: string; + fileNamePlural: string; + propertyNamePlural: string; + constantNamePlural: string; +} diff --git a/tools/plugin/dx-dev/src/generators/use-cases/schema.json b/tools/plugin/dx-dev/src/generators/use-cases/schema.json new file mode 100644 index 00000000..a6d968d6 --- /dev/null +++ b/tools/plugin/dx-dev/src/generators/use-cases/schema.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json-schema.org/schema", + "$id": "UseCases", + "title": "", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "", + "$default": { + "$source": "argv", + "index": 0 + }, + "x-prompt": "What name would you like to use?" + }, + "scope": { + "type": "string", + "description": "" + }, + "x-prompt": "What scope would you like to place files?" + }, + "required": ["name", "scope"] +} diff --git a/tools/plugin/dx-dev/src/utils/get-all-names.ts b/tools/plugin/dx-dev/src/utils/get-all-names.ts new file mode 100644 index 00000000..8ca4431e --- /dev/null +++ b/tools/plugin/dx-dev/src/utils/get-all-names.ts @@ -0,0 +1,14 @@ +import { pluralize } from './pluralize'; +import { names } from '@nx/devkit'; + +export function getAllNames(original: string) { + const normalized = names(original); + const pluralNames = { + namePlural: pluralize(normalized.name, 2), + classNamePlural: pluralize(normalized.className, 2), + fileNamePlural: pluralize(normalized.fileName, 2), + propertyNamePlural: pluralize(normalized.propertyName, 2), + constantNamePlural: pluralize(normalized.constantName, 2), + }; + return { ...normalized, ...pluralNames }; +} diff --git a/tools/plugin/dx-dev/src/utils/index.ts b/tools/plugin/dx-dev/src/utils/index.ts index ad9b2bee..86dcfa53 100644 --- a/tools/plugin/dx-dev/src/utils/index.ts +++ b/tools/plugin/dx-dev/src/utils/index.ts @@ -1 +1,2 @@ -export * from './pluralize'; +export * from './get-all-names'; +export * from './pluralize';