diff --git a/package.json b/package.json index 90e5ccb..8ca28f5 100644 --- a/package.json +++ b/package.json @@ -42,14 +42,14 @@ "url": "git+https://github.com/imjuni/fast-maker.git" }, "bin": { - "fast-maker": "dist/cli.js" + "fast-maker": "dist/cjs/cli.cjs" }, "private": false, "author": "ByungJoon Lee", "license": "MIT", - "main": "dist/cjs/fast-maker.js", - "module": "dist/esm/fast-maker.js", - "types": "dist/esm/fast-maker.d.ts", + "main": "dist/cjs/index.cjs", + "module": "dist/esm/index.,js", + "types": "dist/types/index.d.ts", "exports": { ".": { "require": { @@ -74,7 +74,6 @@ "@rollup/plugin-node-resolve": "^15.0.1", "@tsconfig/node18": "^18.2.2", "@types/cli-progress": "^3.11.0", - "@types/figlet": "^1.5.5", "@types/inquirer": "^9.0.1", "@types/minimist": "^1.2.2", "@types/node": "^18.15.3", @@ -104,12 +103,12 @@ "lint-staged": "^15.2.0", "npm-run-all": "^4.1.5", "prettier-eslint": "^16.2.0", - "prettier-plugin-organize-imports": "^3.2.2", "read-pkg": "^5.2.0", "rimraf": "^5.0.5", "rollup": "^4.9.1", "rollup-plugin-dts": "^6.1.0", "ts-node": "^10.9.1", + "tsc-alias": "^1.8.8", "tsconfig-paths": "^4.1.2", "tslib": "^2.5.0", "typescript": "^5.3.3", @@ -119,7 +118,6 @@ "dependencies": { "@maeum/cli-logo": "^1.0.0", "chalk": "^4.1.2", - "chokidar": "^3.5.3", "cli-progress": "^3.12.0", "cli-table3": "^0.6.3", "comment-parser": "^1.4.1", @@ -144,12 +142,11 @@ "my-only-either": "^1.3.0", "ora": "^5.4.1", "prettier": "^3.2.4", - "rxjs": "^7.8.0", + "prettier-plugin-organize-imports": "^3.2.4", "ts-morph": "^21.0.1", "type-fest": "^4.9.0", "url-join": "^4.0.1", "uuid": "^9.0.0", - "xstate": "^5.4.1", "yargs": "^17.7.1" }, "lint-staged": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2e29e35..f7e593a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,9 +11,6 @@ dependencies: chalk: specifier: ^4.1.2 version: 4.1.2 - chokidar: - specifier: ^3.5.3 - version: 3.5.3 cli-progress: specifier: ^3.12.0 version: 3.12.0 @@ -86,9 +83,9 @@ dependencies: prettier: specifier: ^3.2.4 version: 3.2.4 - rxjs: - specifier: ^7.8.0 - version: 7.8.1 + prettier-plugin-organize-imports: + specifier: ^3.2.4 + version: 3.2.4(prettier@3.2.4)(typescript@5.3.3) ts-morph: specifier: ^21.0.1 version: 21.0.1 @@ -101,9 +98,6 @@ dependencies: uuid: specifier: ^9.0.0 version: 9.0.1 - xstate: - specifier: ^5.4.1 - version: 5.4.1 yargs: specifier: ^17.7.1 version: 17.7.2 @@ -118,9 +112,6 @@ devDependencies: '@types/cli-progress': specifier: ^3.11.0 version: 3.11.5 - '@types/figlet': - specifier: ^1.5.5 - version: 1.5.8 '@types/inquirer': specifier: ^9.0.1 version: 9.0.7 @@ -208,9 +199,6 @@ devDependencies: prettier-eslint: specifier: ^16.2.0 version: 16.2.0 - prettier-plugin-organize-imports: - specifier: ^3.2.2 - version: 3.2.4(prettier@3.2.4)(typescript@5.3.3) read-pkg: specifier: ^5.2.0 version: 5.2.0 @@ -226,6 +214,9 @@ devDependencies: ts-node: specifier: ^10.9.1 version: 10.9.2(@types/node@18.19.3)(typescript@5.3.3) + tsc-alias: + specifier: ^1.8.8 + version: 1.8.8 tsconfig-paths: specifier: ^4.1.2 version: 4.2.0 @@ -919,10 +910,6 @@ packages: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true - /@types/figlet@1.5.8: - resolution: {integrity: sha512-G22AUvy4Tl95XLE7jmUM8s8mKcoz+Hr+Xm9W90gJsppJq9f9tHvOGkrpn4gRX0q/cLtBdNkWtWCKDg2UDZoZvQ==} - dev: true - /@types/inquirer@9.0.7: resolution: {integrity: sha512-Q0zyBupO6NxGRZut/JdmqYKOnN95Eg5V8Csg3PGKkP+FnvsUZx1jAyK7fztIszxxMuoBA6E3KXWvdZVXIpx60g==} dependencies: @@ -1303,7 +1290,7 @@ packages: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: false + dev: true /archy@1.0.0: resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} @@ -1435,7 +1422,7 @@ packages: /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - dev: false + dev: true /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -1602,7 +1589,7 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: false + dev: true /cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} @@ -1691,6 +1678,11 @@ packages: engines: {node: '>=16'} dev: true + /commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + dev: true + /comment-parser@1.4.1: resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} @@ -2652,6 +2644,7 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true + dev: true optional: true /function-bind@1.1.2: @@ -3049,7 +3042,7 @@ packages: engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 - dev: false + dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -3623,6 +3616,11 @@ packages: /my-only-either@1.3.0: resolution: {integrity: sha512-Ww01dhgmQLLHwEww6b0F5eyPMz0zfCYId4SsP8p7VPxtxPrh6v+fwORrBDYAHgOcVE2Bg9+wwztDKkSEbuxZog==} + /mylas@2.1.13: + resolution: {integrity: sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==} + engines: {node: '>=12.0.0'} + dev: true + /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3656,7 +3654,7 @@ packages: /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - dev: false + dev: true /npm-run-all@4.1.5: resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} @@ -3978,6 +3976,13 @@ packages: pathe: 1.1.1 dev: true + /plimit-lit@1.6.1: + resolution: {integrity: sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==} + engines: {node: '>=12'} + dependencies: + queue-lit: 1.5.2 + dev: true + /portfinder@1.0.32: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} @@ -4045,7 +4050,7 @@ packages: dependencies: prettier: 3.2.4 typescript: 5.3.3 - dev: true + dev: false /prettier@3.2.4: resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} @@ -4093,6 +4098,11 @@ packages: side-channel: 1.0.4 dev: true + /queue-lit@1.5.2: + resolution: {integrity: sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==} + engines: {node: '>=12'} + dev: true + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -4147,7 +4157,7 @@ packages: engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - dev: false + dev: true /real-require@0.2.0: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} @@ -4845,6 +4855,18 @@ packages: resolution: {integrity: sha512-Y+jOjihlFriWzcBjncPCf2/am+Hgz7LtsWs77pWg5vQQKLQj07oNrJryo/wK2G0ndNaoVn2ownFMeoeAuReu3Q==} dev: true + /tsc-alias@1.8.8: + resolution: {integrity: sha512-OYUOd2wl0H858NvABWr/BoSKNERw3N9GTi3rHPK8Iv4O1UyUXIrTTOAZNHsjlVpXFOhpJBVARI1s+rzwLivN3Q==} + hasBin: true + dependencies: + chokidar: 3.5.3 + commander: 9.5.0 + globby: 11.1.0 + mylas: 2.1.13 + normalize-path: 3.0.0 + plimit-lit: 1.6.1 + dev: true + /tsconfck@2.1.2(typescript@5.3.3): resolution: {integrity: sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==} engines: {node: ^14.13.1 || ^16 || >=18} @@ -4960,7 +4982,6 @@ packages: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} hasBin: true - dev: true /ufo@1.3.2: resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} @@ -5275,10 +5296,6 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /xstate@5.4.1: - resolution: {integrity: sha512-1DDT047hsTCSgm3BwLyb4sXQDmTdbLutc4ni0MLACgd2yX6vij35pnNNf1F4U6kQ8njx6NxQ6wpLjlh1lqs0NQ==} - dev: false - /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} diff --git a/src/cli.ts b/src/cli.ts index c6bf598..edc3feb 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -45,28 +45,6 @@ const routeCmd: CommandModule = { }, }; -// const watchCmd: CommandModule = { -// command: CE_COMMAND_LIST.WATCH, -// aliases: CE_COMMAND_LIST.WATCH_ALIAS, -// describe: 'watch for create route.ts file in your directory using by tsconfig.json', -// builder: (argv) => watchBuilder(builder(argv)), -// handler: async (argv) => { -// try { -// progress.isEnable = true; -// spinner.isEnable = true; - -// if (process.env.SYNC_MODE === 'true') { -// await watchCommandSyncHandler(argv); -// } else { -// await watchCommandClusterHandler(argv); -// } -// } catch (caught) { -// const err = isError(caught, new Error('unknown error raised')); -// consola.error(err); -// } -// }, -// }; - const parser = yargs(process.argv.slice(2)); parser diff --git a/src/cli/builders/builder.ts b/src/cli/builders/builder.ts index 4377aa2..d94b547 100644 --- a/src/cli/builders/builder.ts +++ b/src/cli/builders/builder.ts @@ -1,4 +1,4 @@ -import { CE_DEFAULT_VALUE } from '#/configs/const-enum/CE_DEFAULT_VALUE'; +import { CE_EXT_KIND } from '#/configs/const-enum/CE_EXT_KIND'; import type { Argv } from 'yargs'; export function builder(args: Argv): Argv { @@ -41,15 +41,29 @@ export function builder(args: Argv): Argv { type: 'boolean', default: false, }) - .option('max-workers', { - describe: 'max worker count', - type: 'number', - default: undefined, + .option('banner', { + describe: '생성된 파일에 배너와 시간을 추가합니다', + type: 'boolean', + default: false, }) - .option('worker-timeout', { - describe: 'route code generation worker timeout: default 90 seconds', - type: 'number', - default: CE_DEFAULT_VALUE.DEFAULT_TASK_WAIT_SECOND * 3, + .option('templates', { + description: '템플릿 파일 경로를 결정합니다', + type: 'string', + }) + .option('ext-kind', { + describe: 'import 구문의 확장자 처리 방법을 결정합니다', + type: 'string', + choices: [ + CE_EXT_KIND.NONE, + CE_EXT_KIND.KEEP, + CE_EXT_KIND.JS, + CE_EXT_KIND.CJS, + CE_EXT_KIND.MJS, + CE_EXT_KIND.TS, + CE_EXT_KIND.CTS, + CE_EXT_KIND.MTS, + ], + default: CE_EXT_KIND.NONE, }) .option('use-default-export', { description: 'route function in output file that use default export', diff --git a/src/cli/builders/watchBuilder.ts b/src/cli/builders/watchBuilder.ts deleted file mode 100644 index b627c93..0000000 --- a/src/cli/builders/watchBuilder.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { TWatchOption } from '#/configs/interfaces/TWatchOption'; -import type { Argv } from 'yargs'; - -export function watchBuilder(argv: Argv) { - argv.option('debounceTime', { - description: 'watch file debounceTime. unit use milliseconds', - type: 'number', - default: 1000, - }); - - return argv as Argv; -} diff --git a/src/cli/commands/routeCommandSyncHandler.ts b/src/cli/commands/routeCommandSyncHandler.ts index 98b4657..eb00914 100644 --- a/src/cli/commands/routeCommandSyncHandler.ts +++ b/src/cli/commands/routeCommandSyncHandler.ts @@ -11,6 +11,7 @@ import { getOutputFilePath } from '#/modules/getOutputFilePath'; import { writeOutputFile } from '#/modules/writeOutputFile'; import { TemplateContainer } from '#/template/TemplateContainer'; import { showLogo } from '@maeum/cli-logo'; +import dayjs from 'dayjs'; export async function routeCommandSyncHandler(options: TRouteOption) { if (options.cliLogo) { @@ -23,12 +24,16 @@ export async function routeCommandSyncHandler(options: TRouteOption) { Spinner.it.start(`load tsconfig.json: ${options.project}`); const project = getTypeScriptProject(options.project); - await TemplateContainer.bootstrap(); + await TemplateContainer.bootstrap(options); Spinner.it.update(`load tsconfig.json: ${options.project}`, 'succeed'); const routings = await routing(options, project); - const routeEvaluated = await TemplateContainer.it.evaluate('routing', routings); + const routeEvaluated = await TemplateContainer.it.evaluate('routing', { + ...routings, + options, + banner: `// generated by fast-maker: ${dayjs().format('YYYY-MM-DD HH:mm')}`, + }); const prettfiedRouteCode = await prettierProcessing({ code: routeEvaluated }); const outputFilePath = getOutputFilePath('route.ts', options.output); await writeOutputFile(outputFilePath, prettfiedRouteCode); @@ -36,6 +41,7 @@ export async function routeCommandSyncHandler(options: TRouteOption) { if (options.routeMap) { const routeMapEvaluated = await TemplateContainer.it.evaluate('route-map', { routes: routeMapTransform(routings.routes), + banner: `// generated by fast-maker: ${dayjs().format('YYYY-MM-DD HH:mm')}`, }); const prettfiedRouteMapCode = await prettierProcessing({ code: routeMapEvaluated }); const outputMapFilePath = getOutputFilePath('route-map.ts', options.output); diff --git a/src/cli/interfaces/CE_COMMAND_LIST.ts b/src/cli/interfaces/CE_COMMAND_LIST.ts index 1bd4d52..fa6a3fd 100644 --- a/src/cli/interfaces/CE_COMMAND_LIST.ts +++ b/src/cli/interfaces/CE_COMMAND_LIST.ts @@ -1,9 +1,7 @@ export const CE_COMMAND_LIST = { ROUTE: 'route', - WATCH: 'watch', INIT: 'init', ROUTE_ALIAS: 'r', - WATCH_ALIAS: 'w', INIT_ALIAS: 'i', } as const; diff --git a/src/compilers/navigate/getResolvedImportedModules.ts b/src/compilers/navigate/getResolvedImportedModules.ts index 73fd5c6..1accfe0 100644 --- a/src/compilers/navigate/getResolvedImportedModules.ts +++ b/src/compilers/navigate/getResolvedImportedModules.ts @@ -1,7 +1,6 @@ import type { IResolvedImportModule } from '#/compilers/interfaces/IResolvedImportModule'; import { getNamedBindingName } from '#/compilers/tools/getNamedBindingName'; import { isExternalModule } from '#/compilers/type-tools/isExternalModule'; -import { CE_EXT_KIND } from '#/configs/const-enum/CE_EXT_KIND'; import type { IBaseOption } from '#/configs/interfaces/IBaseOption'; import { getHash } from '#/tools/getHash'; import { getRelativeModulePath } from '#/tools/getRelativeModulePath'; @@ -88,7 +87,6 @@ export function getResolvedImportedModules({ }; } - // importStatement.importDeclaration.getModuleSpecifier().getText(); const moduleSourceFilePath = moduleSourceFile.getFilePath(); const declarationMap = moduleSourceFile.getExportedDeclarations(); const relativePath = importStatement.isExternalModule @@ -96,7 +94,7 @@ export function getResolvedImportedModules({ : getRelativeModulePath({ modulePath: moduleSourceFilePath, output: options.output, - extKind: CE_EXT_KIND.NONE, + extKind: options.extKind, }); const moduleHash = getHash(relativePath); diff --git a/src/configs/interfaces/IBaseOption.ts b/src/configs/interfaces/IBaseOption.ts index 22d6957..b716b7a 100644 --- a/src/configs/interfaces/IBaseOption.ts +++ b/src/configs/interfaces/IBaseOption.ts @@ -40,12 +40,6 @@ export interface IBaseOption { */ exclude: string[]; - /** max worker count */ - maxWorkers?: number; - - /** route code generation worker timeout: default 90 seconds */ - workerTimeout: number; - /** * route function in output file that use default export * @default true diff --git a/src/configs/interfaces/TWatchOption.ts b/src/configs/interfaces/TWatchOption.ts deleted file mode 100644 index 3c52e22..0000000 --- a/src/configs/interfaces/TWatchOption.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { IBaseOption } from '#/configs/interfaces/IBaseOption'; -import type { IResolvedPaths } from '#/configs/interfaces/IResolvedPaths'; - -export interface IWatchOption { - kind: 'watch'; - /** - * watch file debounceTime. unit use milliseconds. - * @default 1000 - * */ - debounceTime: number; -} - -export type TWatchBaseOption = IBaseOption & IWatchOption; - -export type TWatchOption = IBaseOption & IResolvedPaths & IWatchOption; diff --git a/src/configs/isValidConfig.ts b/src/configs/isValidConfig.ts index f07a6a4..6ec5e34 100644 --- a/src/configs/isValidConfig.ts +++ b/src/configs/isValidConfig.ts @@ -5,8 +5,6 @@ import { atOrUndefined } from 'my-easy-fp'; const commands: string[] = [ CE_COMMAND_LIST.ROUTE, CE_COMMAND_LIST.ROUTE_ALIAS, - CE_COMMAND_LIST.WATCH, - CE_COMMAND_LIST.WATCH_ALIAS, CE_COMMAND_LIST.INIT, CE_COMMAND_LIST.INIT_ALIAS, ]; diff --git a/src/configs/preLoadConfig.ts b/src/configs/preLoadConfig.ts index 21e15e4..2d6b21c 100644 --- a/src/configs/preLoadConfig.ts +++ b/src/configs/preLoadConfig.ts @@ -1,6 +1,5 @@ import { CE_DEFAULT_VALUE } from '#/configs/const-enum/CE_DEFAULT_VALUE'; import type { TRouteOption } from '#/configs/interfaces/TRouteOption'; -import type { TWatchOption } from '#/configs/interfaces/TWatchOption'; import { getConfigFilePath } from '#/configs/interfaces/getConfigFilePath'; import consola from 'consola'; import * as findUp from 'find-up'; @@ -20,7 +19,7 @@ export function preLoadConfig() { const configFilePath = getConfigFilePath(argv, tsconfigPath); const config = configFilePath != null - ? (parse(fs.readFileSync(configFilePath).toString()) as TRouteOption | TWatchOption) + ? (parse(fs.readFileSync(configFilePath).toString()) as TRouteOption) : { project: undefined }; return { diff --git a/src/generators/prettierProcessing.ts b/src/generators/prettierProcessing.ts index 6270162..582b449 100644 --- a/src/generators/prettierProcessing.ts +++ b/src/generators/prettierProcessing.ts @@ -17,8 +17,9 @@ export async function prettierProcessing({ code, optionPath }: IPrettierProcessi printWidth: 80, arrowParens: 'always', parser: 'typescript', + plugins: ['prettier-plugin-organize-imports'], } - : { ...userOption, parser: userOption.parser ?? 'typescript' }; + : { ...userOption, parser: userOption.parser ?? 'typescript', plugins: ['prettier-plugin-organize-imports'] }; const prettfied = prettier.format(code, option); diff --git a/src/template/__tests__/template.test.ts b/src/template/__tests__/template.test.ts index 93d0126..573fd6c 100644 --- a/src/template/__tests__/template.test.ts +++ b/src/template/__tests__/template.test.ts @@ -15,6 +15,8 @@ describe('TemplateContainer', () => { const handlerMethod = 'get.ts'; const r01 = await TemplateContainer.it.evaluate('routing', { + banner: 'test', + options: { banner: false, useDefaultExport: true, routeFunctionName: 'routing' }, imports: [ { hash: 'zLRHkFp00cylJZ0CJlgEiLOpyIGY5Pwl', diff --git a/templates/route.eta b/templates/route.eta index 65b76a4..657b556 100644 --- a/templates/route.eta +++ b/templates/route.eta @@ -16,7 +16,7 @@ } } %> -export default function routing(fastify: FastifyInstance): void { +export <%= it.options.useDefaultExport ? 'default ' : '' %>function <%= it.options.routeFunctionName %>(fastify: FastifyInstance): void { <% it.routes.forEach((route) => { %> <% if (route.typeArgument != null && route.typeArgument.text !== '' ) { %> fastify.route<<%= route.typeArgument.text %>>({ diff --git a/templates/routing.eta b/templates/routing.eta index 7bae54e..62daf0d 100644 --- a/templates/routing.eta +++ b/templates/routing.eta @@ -1,5 +1,6 @@ +<%= it.options.banner ? it.banner + '\n\n' : '' _%> <%~ include('import', { imports: it.imports }) %> -<%~ include('route', { routes: it.routes }) %> +<%~ include('route', { routes: it.routes, options: it.options }) %>