{"_id":"@midwayjs/cli-plugin-generator","_rev":"113-bf190e4f9da8ab2561490b224679622a","name":"@midwayjs/cli-plugin-generator","dist-tags":{"beta":"2.0.14-beta.4","latest":"2.1.0","beta-2":"2.0.10-beta.2","latest-2":"2.0.8","latest-1":"1.3.22"},"versions":{"1.2.79-beta.4":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.79-beta.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.79-beta.4","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.78-beta.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^9.0.12","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","ts-node-dev":"^1.1.8","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"tsnd  --respawn --transpile-only ./scripts/copy.ts","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.79-beta.4","_nodeVersion":"14.17.1","_npmVersion":"6.14.13","dist":{"integrity":"sha512-r9Da9DPvTDcN/5Y9EpW48EA/KiXt2rg6H8Wny7BaRWMNX1njhbW4M3E6hn+kpIgA7Pyu68Cfsd1CDEo/vn6x9A==","shasum":"cf1b24e2e5244c313c6b72de5ca6bf05aa13ec57","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.79-beta.4.tgz","fileCount":166,"unpackedSize":382957,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhEqr+CRA9TVsSAnZWagAANuwP/0/u/LEIvfS+cM+n629G\nNSHaITwbP0+z4l2zPd1kj8ZjzWE7kVtSLP0wsI3WUaBYakcsICTAtJOBPlfm\nmLf+Q+kjCFkNQGWxSSCJbx99F0TdXJmJFPgquV8W2xgc5rpJuOQyLnkQ1IOd\nwW3yBG7AuLK0uZgF7YFI8w1Ppf8AF7LKiSK5ZxRSX5o3JWb7oPuHpNByY9Hm\nUXsIjevAtOORPGX3+ATYlyO8Mfvx3jhTn6jJI930/qkowifAEqfBz704S1vy\nD1VyVvlofuuOwNBkCJewQomdzv3BzsL9klajcsPU32gpCeCtBx6iZLQCUrK1\nHBMTVCh6gLOXK7k69Nmf2b/Kg9yZS54VvC2lEGtrT+NXAxGkKu1OUmrFBtCb\n/UrXiSv7NQA1v31R7NWhcRUgtAK6a1VMuU9aO5374VIbrkDQZkmtMWsk0CMp\nP5X5IqZmx56xzAQDSQasu6dwXAJTg3bENJCaAbl77C2WEXnhDRoxWjR/i1Ih\n50rSCwHS0mT1BpHhQfTBFspDOXmukcjppJph66rfvZb95vBoD2trRi39h6Tl\ngWWJHbdnjH9GK30WcycBVVpO5Fcda1FmA75KBpe5kZhs2df11J7lrvrqJiNw\nf1CaApdBauYoUXp58JRLa65WoVrEEJywE94RD7yztsmVxuVK6m7Y5g4j2Hjz\npnx8\r\n=NNRN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBR2A2AsSgbvS/SEY7Py/Uid/uDIKA894tT/0TVJNVL+AiEA4PEae7+Llv82jHLhGOdlKiq34KGxlXmP/ExkELOpweU="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.79-beta.4_1628613374131_0.3056902223475808"},"_hasShrinkwrap":false},"1.2.79-beta.5":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.79-beta.5","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.79-beta.4","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.78-beta.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"3dab5181af320c465bcda288e35782ad63ff6d13","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.79-beta.5","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-UY8qh6wzQxURWz4fcsxINYZMaEQm25M3+kpiAJEEyHMfu836QrOxbsWQfmXugB/FWDyKWYNIRiJjekPnrjwOHQ==","shasum":"9caa742acfce725daf2903fb207d5016aaabf66d","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.79-beta.5.tgz","fileCount":190,"unpackedSize":395055,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhErKSCRA9TVsSAnZWagAAUIwP/3uFfmaleiJQ9nZXRJAh\noyT/fudncEl3hZXDyjiHADxAELvu1kGwnbdr2iRPKYCwdUiq6Qzw2d/vOGS2\nrVcDcPVNg/sngIG0nlOdAoHt0Ztp0myjw6Nycw7yHlXmjFhKIHxf1clOA9BT\noi3BOvct2lID5xXIVJzkNTPzKQj6C4Dc0KMUQfdGev7RvxMM9A79tGjYoNaW\neLBbzciyl/Eo0JMDL9lOtfxt5iGxZ8PE+SNa6wlDUNW7Ri2U0qGv38gySWzn\ntMBVSpuZIO700DwRUoyhNuDECH4RWbsKd01ld+tH3+9H8uxQrjOtLaqTXHyG\nanj6Gv/lmYdZReEOJWmJFaT7UaRraroqL5yOimS4d8ae0+IEvMqHWrNwVPYF\nEy9xvJB5anKV3siarsfcvhBZlKKDcNJz3Z5VW5AJKA5wSDQcASDEZGsQ2J4K\nX7FQr+KU6E9eOg8595i3LA6KD4cHYsDS0ghGXo8gB8U2Ze5nMijn6l3VALpv\n1TSIQORy/UOJ31frQ42KTC2qd6uOzAQN+LqlMd9Q/dyJsxns1dbMwcvpH5AM\nRhJoHghjUrhSxALuSWdaqqxuMPxai4OzysyOORXeVzMaFL6vXI/QJ48/CvTD\n1C1hKQzLO1GdByMT5Rp/XeVOt24XjfRIQpE9dEgsdxHtqlnHGd9GNpMVoglJ\nMtje\r\n=tJ+c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBTrU8ly8D743E/uHbbwR/TboNZBbSg5rsZczpyEBK5BAiEA91BotZg0Sj9PWRhriSU5VBLJis3xS8XHx8ww2uNGI10="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.79-beta.5_1628615314158_0.5373005725369682"},"_hasShrinkwrap":false},"1.2.79":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.79","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.79-beta.4","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.78-beta.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"cc8224d7b0540711c860571434b1ecbafc241392","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.79","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-V4/pRJ+vXEpPsgjKKueXGsQ8I15DfD+0DP06ibMnE8dlGk5qXVP9XS4ybInFWiB8A/z9ECYaZmO1IukVQAk9Yw==","shasum":"6756f189589a24e1185e289c83c590d31c1d5986","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.79.tgz","fileCount":191,"unpackedSize":395371,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhE2jVCRA9TVsSAnZWagAAuFAP/0dk3a8dzGR4KOjloXpx\n1AfMBhPkbEcRLYAnmIrH4Acg+vVwdgidlxe/sNlQHRy43sLsHbDsS6pU6EdQ\nw6SaHvn6SbsWMjiojWwfGlKIQSXKQ/7DlJcApOXK87vKf4mMhkKQmXH70FDl\nLxKuFJVb5fR/K+RlGr6JCANcTody4fQ49ifpRYNOhB30UFItRy/+7sW8+EOY\nvbTLRLo9ccZ9COvMEaceNv2PJ9POIPpniFy7uqTrX4jIyS27yFbXOrEO5PhK\njWIyABaDuZBrziqAB2n2M62n+AuBdag6/KlVtlF9z1wDXpWEKFrmVEqogLx3\n+Kjfa9Fi1zZuNLJWjlaAIkYIk9GrQmQmo0b5hPbUJefxGHAywD9hSRNNzQYt\nWz84P3lXFCVxgiTgHwFYq38bVxIj7CTwezKDQqywfJH+mm4CqsYU3+e83EPb\n5d+yAUm9danbQNCOg1VRqdT/f9b9Etq7PvD/6DTJK2RMCpW+iN9IzfaMe4YK\ntY97CCq94H80AKw/XTUqXYMD/xfFyfF2ldxfs1DAn0qe9EO/ZFODDLovmX6V\n9aeG5MlzLyTWdRFk4JW9lCf8a0YjFGS0ezNR85KQI/hx8wZR9kUKbhaH5vbt\ngcxsIs9sNcDNurxsD8RvepNw6YulHGNvkmylZ+NylJwlY1FQq9a2HAlqxWfg\n4E/E\r\n=GXj2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHKoPghV967lR7qrqXxpoVjoOkziJmW8XsZMzrheHXuaAiBXB0cZek35f8WH9USyrPKqW9mzoscJs1E4qSKoXxlrzw=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.79_1628661973622_0.3190170354763304"},"_hasShrinkwrap":false},"1.2.80":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.80","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.79-beta.4","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.80","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"22a9318da016c9e55708d851ecc1b1612fd8143c","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.80","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-trJ9vwKvd3YehEbIYGKxhymDd6RTBhpki+EWDmjlYieUSIR5MnMC3GJq1TRnjAC6MPUUEC/HG4Ko75oTD2V/9A==","shasum":"c96074f388e74d563f64f9c48fbd442cce6d1010","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.80.tgz","fileCount":191,"unpackedSize":407476,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhGizeCRA9TVsSAnZWagAAA4UQAJG48v5tOERofspsgPqk\nqvIYCa+gjvA5WOxvEYEueQP1AuCjkjf1yHsbuHgcQ8Q2yzeqvqP0MwdtvY4B\nGwEvHCRd2wtn7vM5LNalswqd0l0E2NmEKySIbn7TNa4kN1V3s7AWnbEPM8Km\nbUFertE9qqoxs+3RbH4ffw2hzuVSwV0YTcGH+ynFUfr9r6OaTTfGa6GDEE0Z\nefXHMm08GBKTHJUIJ+omZMaiHv82dkbmEx/YIFDGjp0hVgFd7DnKU1NDtPIO\nzWE6JW+dmQ5R+s5GL1X6xxd/BF5LHgViOIsNrcsL0YJbjnNiHt0zcMzqyAzp\nj0P0P3V2Zad1Si5h7vuutbysazBMPU2CiBRyohx5c3QtoUnYUhGuqW13SjG6\n132B//mPbTXpSEdMSU1KtZVfQlvPHwNz0nvAkOZ8REH5B/snBb0OljU4eCa7\np2sqToNaTF22265GubxGSV1/nkSScW5osGYc3azdJ6Xc2gZUfXKV1GjbcAkG\nCw7vaL7OcZfDGDQuj7yQL+QWHJigd/JTq2J4yKZVufUVuno4LGsC63KFyUVT\nIwYRKZ4b+9waql1w30v3ez1Lx9k4u4ORDSJNcioNU82WL33/Z8yaZnVtPLjz\n01j7GhL1T7i8BoILj6ZaCrmbFlMerTr6dF7Bt9S7v65Ue118czJXPRoYrYgf\n5eTu\r\n=umXW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICQHQQ+uFKu1JgbpatIQEgcv9Mn1udTQR1rdDPIE6OOlAiEA5IAZh4gk8XCd2jCazbtgky9zO1d1JA1iDDqwUM43Dwo="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.80_1629105374474_0.9994934813975997"},"_hasShrinkwrap":false},"1.2.82-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.82-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.82-beta.1","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.82-beta.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"283a3105e3be13b5c7075a95b982e5caf8267bd7","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.82-beta.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-jex6wJ55sIE06Wf+hDLH5GoUtjKKL60D00rvLaWUYKSWp/neupRvAHqfp+E1KSTwK8LWFxTi8Rxai8BFrhEdiQ==","shasum":"a0a936893e7f6698eb6fc2a899495f5137e0678b","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.82-beta.1.tgz","fileCount":191,"unpackedSize":407490,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLdPeCRA9TVsSAnZWagAAWDgQAIExNw5fUWPIUwzhNPeL\nQHKsCeImP8R8vVaK++qofokmmXq/HWltAV+0meWRlU8JMlkn5sgoHLL0t6hB\nd3tuMD1qR1t42XzFZbWL/JznsCe+pJPVBZ5kt/OnirRUuR8Fchv+InXzXt6b\nb+Q9TtUS0BCKgmr+OJKgl93b7Mth+UbSBUo/FepFGFzjuwCvyzSW3fNc3XHz\nW3CAf/S8ZYactLd1+tHGd5k05FEh9ttCavAFeJhxsu30nJDkjQL3PH4dNKnD\nGSig50y5BfaNfoJxonIRaJ8Jmk+JM+47n58xRk0bq+32Yq6g8yD56aW0eTYe\n1os1zEqFM/0q6wMdxsfgDF1Y6k7F/6Iw1sfWcQv5elagmTpf6yw4GZ4K4BcT\nrY1UGwdmLs7bAkSB4nCLyBPQw640VI7kJHL3IR1WjDcD/blB9u3QNmiTGne7\nMak2cUYIcbvWAE0uXsxdya/ntrs4+nImryyNufu4pLVK4nyTCCTAea4fx3rv\nywOQ3iLHsaRYlN6hk1CXb2XSfwPr/OCsdCI4A+7DCHjb1Hnh8t+jScn+0T7f\nz3dpfZAdC9Y9whljY+lpru1Q8KG1ikZAK9YfmP+Y+9GCDIEZDp9vJzQhwlQj\nrdUW98gDIaMQoNygYwS+JYh3/nCH/upy6TDxaFDVTTQaIPN1Zz90pRo3/npI\nI9Bl\r\n=sIiL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBI4eqjVCcOowVicEcLDKFWcj/ieoEuTaPeaxvw/ZnZXAiEA+vrF4RnFPbZup2LmGEt+RcVwx5nn6BzF9sy08cwJ5Q8="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.82-beta.1_1630393310520_0.42775369982404765"},"_hasShrinkwrap":false},"1.2.82-beta.2":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.82-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.82-beta.2","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.82-beta.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"b0784c9bff8fcd0ea95d487aa483a2a07f07ef67","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.82-beta.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-EwhQfWleja44SvB0JgeJ/sHOu4hTmucgfOWkVM7p2v2rr9vSciio92XXmMbWKldVSPNBLKo1uq2YzOWt7BV/sQ==","shasum":"a4bac775fa12837c14c04b34f8013c8f533a64fd","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.82-beta.2.tgz","fileCount":191,"unpackedSize":407490,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLetzCRA9TVsSAnZWagAAn6UP/2moiGT92ZGII4l9cgY8\nhf6j12W8ewDpenydIQi5BppM6zE5fjnZOxIJ8gIOil/8l2EV2VopsEuFs3+3\nNFrj2MPT842rZggBCZXsEO4JU2PXe8MAAEHNj1/2Fk3XT30LEdmJ1le030D/\nC2cuOE/FmZpE4ZgzdVp1we0Snmq0G1EQ/QdDiRcMfxRmADfwAY/LCb4mfBzx\nfXiVZyGkCvNWz2ilM/59EEQ70hJAKK6t5Go02/+hT29HL2Hv5/twP04bG7dv\nMFb6YVllvwVYwv4MY4sGH4bo1eVMwqoJuNs8/N1C7BNwlCTxoHt+SRouAthi\nj0MZpkboTQDudutRQsJSBSBOAP6JyNhtqVWBoWPPFTaBEGHiaskBU9jlDWYq\n4CkoYAg0TS8xjM4TfPxHb540ge/H9tVGh0GevDVV5CCr4CKFpuMNh2l5kfTF\ns7qXDdIZUNmvKN9e08i9Yr05FHOHGpDb3210jtdKFATh/MPMqA7NZv1KaVa5\nnvkcmuI/oV7Mxhp/L5VVF0jmimmPK7aB4hH49B0JzGcSS/7iz512SwlS6Cme\nSayxoFBiLz61pHbcQC5voCAD2YCM9AJ4u5XRzrKhef/cPD4s4xPjoKRk1kvR\nIh4fC9F0MIp6mQufmyX8CXcKMjqJ0DG68s86j9OMm9ogeMoG6/ZWuZXWrcGP\nP81x\r\n=Ohwo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG2F2EZasoIsc/hTRN6roiX6OFHQ/qY4UTq3o1e28QiNAiAL4KgbWIqZ24CFuf7xcb+fPTVvYoRZJlJ1PlTmNEVIdg=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.82-beta.2_1630399347829_0.5818037446038811"},"_hasShrinkwrap":false},"1.2.82":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.82","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.82","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.82","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"644e333c2744972924d3d1577365e56b062cd898","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.82","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-eKm2qpiSfiQ03zzFnWJNETa2DzIxEj5BnX9Gg3kstm0FYflnLp/v7fmCDza+6ZbASqyOxG7SEQ+5XKeuUn/F0g==","shasum":"10656fc1b257c7bd35a97f8eef59873bde0927a5","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.82.tgz","fileCount":191,"unpackedSize":407738,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLfUPCRA9TVsSAnZWagAAqVYP/RpvRyj176VRX/vG98Wr\nX0gS+80+i3/pOjBeNqjGZBSKh+otIZDg6Ro9e9TNuxOAN5M1+AIB3Wl/my3D\nYFboVievlRh3cIOG0wKwdf3fYVq88x3H2GT13WQpHwi1vILu7WnqlgXgnHos\nWhe4B5ICrHOdeFnjWKiYWaCjoPl+asw9x+rXMC8VBqfJRl5xAo1DolT9lq+4\nSzhUc2mvHLPuc/5IS18TQLXa3DRIzRRJlA36kuU/+c1pGE3iyglao1mcC7Jv\nLn20+GRwu+n5ItjASQJY7eOtkXmfZ/fbeFYLzczqgSw+at3nACUjjyzi6C3+\nhyMxobA/3HYBvKdeWjICI6pFEtqCqzmwe+XutuoL/8T5mcFGSBegTb/jONcm\nfSsYuIDJqaYoMoDPdGfd1NaFeM9adKlGa35eWRDz2draIXkYhFEYJFNnN63o\nFDJoAVZXzIHwObEiTaESg/2DO+BgriVKELDCXCzZg1oUKUwdRTtVLMwdom4T\n1M4PFdFbZe/nCjYRBm2oRlLvhcxl2MRySoyu6Plx8gX0+4IgtFCiPHqPp8SF\ndjp5yUBQNG88WUnDRcn9h07uhHJwovT8uwMjtWXXZDJa5ADgSnmDuaYSSZfY\nr8RAS/L01gmjeIZGCJr3Vi/KvNp6maueFaEMnqUJToBffXN8cADXZ5PkjClw\nwc62\r\n=m956\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIByYydb9OydpwojpBt5uPGJU3f2cfHEPKLgjegPIRSBeAiB6wgZSqAugypwvz+n4Gw959cpQtph14xHo3JSHHSqg6A=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.82_1630401806861_0.3085485497781084"},"_hasShrinkwrap":false},"1.2.83":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.83","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.82","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.83","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"f17b01e74c5c9bc486f64c47a7104e46124697b4","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.83","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-Tw3kEmJrSJTzZY+AZU2RqVBcY3oGHDusek2Oki7Y+YXYmiAxgt0Ri8F7GqJvQ5pJ1AFz7xtCspgBXuXECqIRHg==","shasum":"715eebb9a4f328a3478c5b9c872d29b5f141bcaa","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.83.tgz","fileCount":191,"unpackedSize":407899,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhPsO5CRA9TVsSAnZWagAAsxcP/AiU356KASU1K2ju2yyi\nKZ0pC/guNLm4POiGWGlCeVLCfM54EVZNXglFMfKo7JdvDqLUwNGRzMV574vK\nOls+bTr/leGmVN+5FOlUfTANsWpl3LpZ48/JlsCvS1+kncmXw760BF73jpXW\nmMzttj/Jzxr0In8Och7hfUwo8sLxORHRMQDj4V5oPuVtH20k/ckfqgZEPxVq\nRKkg2s1DWrIEPqhSAJiPPIuo9DnnwxCnITzVk7MtbqUdHvCTmGRUIHe73ig3\niLZyhapLHjj9KU9kIBDmnc5DIRKVpO2TXAhmThkWbOWFq8B0VvJdjB/U2QJg\na/4qz8zgmayp00tAIj4XFOHrt0HbgXOYVSK1orvia0yO6hAV302BnPZINJ/8\nUn6IRTHPdg0XkVHWCS9oCjL5BU7wQZK/O16Ny7fiBPTS9uzXqVxwKB2AD4RO\n+C8dQL3oVG1hlrXPlcWh19x+IW+TMgY6tVlww67TqTk34FZYDm6IqpYRggYl\nl3GDhimTB1syhUSIefLH3Y0F3YxCP7w8wrj2LHcGLVM50ffReTxs5iUzDlz3\nQ7X3IsNziicPWQ8UpHKzuAAF28SorzZVufwnuqNNvDf+KirDVPA4cvaR1V7O\n/MdfIgkb0PUQR+mg+4krsa3rYjVmNcNRs9+FNsb79T3JXqAsJ7oXlwrwBgi2\nsw3N\r\n=4+c5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDyHIjHqc8Fy9RCw9jAaMyab3EsnQExeWLw9LKcRtGu0AiByOHK9gC4hFa9Cm855Oekh1T7whgWaxlRghrZbj1E4qg=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.83_1631503289544_0.45887456121119974"},"_hasShrinkwrap":false},"1.2.84":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.84","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.84","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.84","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"97778af6194dae45c1c98b7463b8d6346722c893","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.84","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-hEjVE9ckKgrHyC9gso5kNuGoI2PIzRoCCAaCvTAFRLvbIyFTLaNs3RbwFeNd667Xs4j4NGiq9lC6NVvIx+gAvg==","shasum":"55f20efd263f0fd44d1dd73f8cb4c3438c791de9","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.84.tgz","fileCount":191,"unpackedSize":408060,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC74DfhY+4xgxUTd/pyLpjvhcRs/c9yCuHL8z4F4wUpJAIhAMfsQsLly6jEFPBoHNA/cB4+qQYfqXT9V66qNBFASFwR"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.84_1632731245440_0.4759920320687332"},"_hasShrinkwrap":false},"1.2.85":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.85","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.85","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.85","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"263a5f22fc8f33c49176a1e86f6e2f487c40f437","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.85","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-7lWBraxCEBlyagTYN5d+ERh01ZKPfBd9uizQF75Wgx4U1d9ZIwiwA5NgjGy+OymDXX+pcV3lY4CH/wSwPV1LUg==","shasum":"911b60372920691be796633ef197ef1dc4e0bcce","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.85.tgz","fileCount":191,"unpackedSize":408221,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChNmXYuSpvR2T5epVCkh8Bchy0CAvOuldb4cdcK86qlAIgQw3y1psJjYu5i508PoRuBkYaG0yxD64eGtxhH/189o8="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.85_1634811012449_0.4959474490157032"},"_hasShrinkwrap":false},"1.2.86-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.86-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.86-beta.1","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.86-beta.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"a26bb91c4da07584e3933a96f1b5c0f70711c8aa","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.86-beta.1","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-i/VGxRz+p5kT9aAU5AIZvPRzUKCJ9bApA1BS95/fTHrG+j6R2LYOt9DOX07PDbZF0bJDAx2/NfrdiRootSI9KQ==","shasum":"d26959b020641501f6c4af88e25a42a6025edd1a","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.86-beta.1.tgz","fileCount":191,"unpackedSize":408242,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFb0NrjGMWmclJqT7AIA33WATppiGZHaE919985Dd5ylAiBZcir8esUF4+s95Ey7gdfxqf3CwTZ5G9IVmc9xbPQmNg=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.86-beta.1_1635750786235_0.6778782629983902"},"_hasShrinkwrap":false},"1.2.86-beta.2":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.86-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.86-beta.2","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.86-beta.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"345658cc9f32f384676e433bcc3ea9656e02b749","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.86-beta.2","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-TR5AKiUXnL9eSJvTp6FBykaZCXeS8erCwo8WEfZkRsW/sJKgbavEWaDY5/xf8W1VbXuwA7rFODkgzPXY4NVDiA==","shasum":"d24f5160262ab083f422c98b8421736a59a46f6b","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.86-beta.2.tgz","fileCount":191,"unpackedSize":408242,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1gVxpVtobmBdEwUGEhwVrEsovJVp4/z96HvKd9n6fhAIgCIfbwdUNiKJ6nkfMK7wxMUC4V5j2GU6BbLJNr3fiSg4="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.86-beta.2_1635947888456_0.7076100711561262"},"_hasShrinkwrap":false},"1.2.86-beta.3":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.86-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.86-beta.3","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.86-beta.3","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"0f35d76783e29cbbb56169d5079442497fb8145e","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.86-beta.3","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-sJafjb269kk3B5WaA6yD9Ing71I/IcStKW7DUA9Z8JMw9VUIU9aBJAwL9sRF0X7qsSGsspYdXsuP0T+BVDeyng==","shasum":"a4bc018bbfc6699e21e385e060a91dd6ecfa4c2f","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.86-beta.3.tgz","fileCount":191,"unpackedSize":408242,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB47rgUjViGPn7FctxtQQ1YQaQ4sx4NllAxd0GJAjkVwAiBz+VXmTG0uEGMnYI1ywrimnyrPGNI9NdxX8tDT8bifrg=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.86-beta.3_1635950628443_0.5660344235212067"},"_hasShrinkwrap":false},"1.2.86":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.86","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.86","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.86","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"7c18472f44126d641201f1adfb95cb1a94071ddf","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.86","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-UJocgjfgH0s6Q1x4OsQl0JTinTLeSmc040D+YPV8f/MtvmD6Ao4zcotgL2t3KnK+ZhXw3iFlAHnWTEMUL7y+WA==","shasum":"28c99bce0c0cf28110f781b6d19d75c2dbc54b27","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.86.tgz","fileCount":191,"unpackedSize":408382,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFv9FyW63RC0e/06bkQLpQO9eYYFwUUfcli/tistqndqAiApNp/fFWaFSHee8JwKQCUnfkmmV25GhQSxXMT+tUID0g=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.86_1635994801290_0.6693609799634561"},"_hasShrinkwrap":false},"1.2.91-beta.2":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.91-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.91-beta.2","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.86","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"88a014d4c6e0cbb03d8dccfdde725837dbcd4912","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.91-beta.2","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-OLkt2aeyk9gzW1VaWHvyBRD8rG/A+Cm2sU7uTRtOiY/mX3QFexfhGa8pGuAWHD1X1rq3rVeA5nL1z0cN1DcyYw==","shasum":"0ce324feea1dd62bc68ba390b73e660e5127f84b","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.91-beta.2.tgz","fileCount":191,"unpackedSize":408396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoI+yCRA9TVsSAnZWagAAH/EQAINkIE3mJIMy4EGYW8wQ\n1Kn+lIs+tQfBqXhKfVN5yqHwseq6wsR+DW8lFdo8o9QS9KVoek1Ybf/Fjhw3\nd/+632Gy54L3kMJVzhDHbY9B6SRV4yw9V4tyOPF7mIInO4r9o+zsX9Hv4v/N\njLfUtOmAMGKKoetXXp860w3r7W5h8Txw/Zsl2/k9nNA79VWL9dzxsrfP0vL2\nWgFtf+0BTWUpV0zW5AkxzhlOE7d6SGEK4G9R9d0ohnQdWMvG93Ih9bX64WqW\nv9ho/SYkvl98Lp9qnlck7snCCtr4JvAZRQKSj/6zbNfZIEwavVLHw3WS7/EZ\n/qGBzXKSAaeV2w4bWeX62JhRt/3C7alttUvkO7/lkYNjJFdYZ24cmFSrkEk1\nAkLKsEkXbBZKmhoLnI9/7d+NZ47tz54rRNCQO9fo8rCsIo6PFEplsx0syJHF\nFwffPSr/y6F5W9JRygG0wrybZ23c06kNgenrGOsu5ChtoF0AIE5hCzGANPLA\nj9lQlzvDbOCQJHRUNPfm3DSkaaDSWO5LXRs62c5Rqlitog8JBLdQc1RDr+eb\n4VVshE/TG+vLjO0OL5FlnvtcV4SHugBYprmaVq+icwTKuypEFuaDoialj17n\nWofhA0u1msRnYnNZZSXZhsONh+6tAy2MhMFDvBXWQgAi6u19tTP7D95feBTI\nU42O\r\n=3lU5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAIdQVPdpkoRoJG0Fke/zFUgI5IDztbqLxOPG37sK0BHAiEA+XzdvqBelQR5ejPQFTyYx+rqZrbftABLCk8PpsDU9i4="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.91-beta.2_1637912498420_0.6134980039506417"},"_hasShrinkwrap":false},"1.2.91-beta.3":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.91-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.91-beta.3","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.86","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"fccc7b27b9e315b5c2fba044a66c513ed9a6288c","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.91-beta.3","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-G7UJuno0Ly4yNk4mUUtSGlBx2EEiZue5k76y2irQGuXKt760ehUm3hJFYoqWG+0WosloOn4J66omYXMPMpkTWw==","shasum":"3ddc44593489ef105aaef38ad4c07f5a2846be1d","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.91-beta.3.tgz","fileCount":191,"unpackedSize":408396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoJYKCRA9TVsSAnZWagAA2QkP/AqfYjGPh01WOymKeONS\nDM/Bm8baekKlAsPIzp1O3BiByh7XcHSs4JLbzPZbMbH7+yowgr9vA4CfHaGc\nQdxuaOmGYQUdylbzfmO+qu0g8BgAb5flOc84XsUec3GKHWbJXtFJoWz8qhgY\nxrsmpxNT4nlUkXJG7j/JwKGuggLDhWh+sHDg1QM5Uk1MHmgbWcsWPMOdIRtf\nabHf65Seke0R8Zv80gC8B2ygK8BdmCEGuTp26+Gn4te7ZJa9g/mVC6DEVu7h\nOpu9a2Zp9qoQmUI17/TkPTOSVW4v1wUY6awpqMN5Dl1eIIfWTvpBZktlRJcT\nTqpjcMz0c8v6crNNGY7pu0FPRSXW7kPnfaN2OuI7yrSvtu/hERx2b0pohCWX\nDHtDIUZQv3S/bR2VwQXRBYKrJce/rTi9vM9hsWcJDjahxJmakq/850sGpass\nervxCOrxNjVHSiuLgVY8+MkH7fSoweKv8AdIL2jx3zSxH0vsROFAFJAfhpQF\nvRW0sU2vl1bObx8+mvKjwsefyiQmGPGgeAP6Ddc4VuuGOMBOaNyD966lP2qJ\nkaprUSqHrW1dhesQUzVh34LR3/X0daL7LHe993wn52ortrXAhTKFpAH++vQV\nKYma5r7p/HWVPDGbzjICd4C1Ko4Xe4I9ubhpyDCQlQ+h0Z0o8rw3GJe62fnS\nutnX\r\n=Ei7l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbmigukWgRE/hqRXXiYFxoJTL/1LDX/UqiiAzRJs2O2QIgETNrV6lJYWq0CRKzc7B3OwLQVwHXw3fMAiHQSwquPGE="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.91-beta.3_1637914122368_0.4670873388996555"},"_hasShrinkwrap":false},"1.2.91":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.91","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.91","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.86","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"57dd71d2564864a14f7be8ff089428dfb8d5f89f","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.91","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-Drf3zXIitdlb9lSFvuSmNun93k0QOz58MFS3Is88fziUYBiDjWmbBb1SqHtESuB4Ccvyr6ZCE2Bw2e3DXAOBQQ==","shasum":"c48f2385c08f69ffa83a6b59a07b80564125ed42","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.91.tgz","fileCount":191,"unpackedSize":410476,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhoJ22CRA9TVsSAnZWagAAEjcQAJov8r0ZnMSUIgfHCLT1\njHS53o/B4M58TCkNzxaRCjVF4e9dr+1c6jsejOaAsazIb83GwcEWYP08Ps/U\nrExDxz49mvYDp6ecOc+mNacttEHNlXmwt9ia29eRIrmlVbdc5SUOptJhWSoZ\nvSFNz/opMO6NVXM2aSEu6H4GKqL5EduzcZe5fF/LXyeDDonHFk1cAteaLH5q\nk9VSrRX/NPhrIDr1l1kpvwvzYIaXd1jWuRW6oqB8izEHGWOtRQHhakkARz9L\nPLaFMycgmMpPa7FPp72q8PWkhf7K5xSsALY0qyBLIFuK+1Pb7FOIbSNpIdR8\n3cpOEnzHQE9bkvfHMq6NRpguwlauVm6M5+G5qKYvEkIFQRv5bqWSX4hOCaMR\n1kJSQI6cREzBXpsy/ve+Mi3kJCcE4udVlbTyXLkLBt+j11wqsDC3I7U3LICZ\nMXyrmnCMHan6LWMsLwEm9czBnUWekmUZQKBHiBCZVuAPdmg/WRmivDEXty2L\n9e0n+dXHDxd4GoTUGQ4a93xnwoxamk6vIa1bonK3LewJBi+HPfBWf4FiEBr6\n9984VfIK2UtM2g+bG9cFwuE+giL3wfXYvrIkVBle7XgbeWNNhEP1pvx7NqN7\nl8qtWlmvASJb+OwKPLgGWurwfqcXF/3GsZu/AgH6l9oZkGGC6lcZ1mb5gsLV\nAmY3\r\n=QhbI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7aJuo08h/Em+ISl6+bYjflzqphzLPMU6l2dBst26aLAIhAPwe1H1OdV8Y6LsOSmXBmzrSrI91djY+qSjySaAfWyy6"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.91_1637916086054_0.5662929192499986"},"_hasShrinkwrap":false},"1.2.92":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.92","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.92","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.86","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"90c933cce23c05512e91db93308172770f8d94c4","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.92","_nodeVersion":"14.18.1","_npmVersion":"lerna/3.22.1/node@v14.18.1+x64 (darwin)","dist":{"integrity":"sha512-U9BdziP4lgnXO9ZnZplrQEPQHH0AaBEL+uK5mExZ7rJlE12cOJy+XFTZAXiJwJyIqb8ZjLcvIYTnELf+S7y6oA==","shasum":"10434453b5fb02b1fce8c2903c55dd33fe2f726d","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.92.tgz","fileCount":191,"unpackedSize":410637,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhqc7eCRA9TVsSAnZWagAALvYP/jZfUkbaeo0cttDHS2TU\n9v7xuWeSmgxW582zBkXKhcSPdDhfYGeYPiJ4fa1DJTpaX2im7DPijhV3tyAO\njitFjNut6+m0K/vucStK/sovPj2WNNUMe5sXiu0/9xO1BxYr9qdGGjp/kDGC\nIPUsN8gGBlD1XFr6Jr1Kxb0AS0qJ56WlEkV++ekNpqvydx0bRbrEqlwlAMSf\nLgLnTuMNutfSGDR3e2igkxEqf5Qo5vdw9QsEtPcEanBd6xVyDuFsex2HC0Hn\n2SJrKgCJYbTljbnloWSM1ncjG7/TwK2wYqtgXh2HR40YOjriUqyLZ1XkN0DK\nCHg7GbHgEb2CmDwg+EEXdfnF6NygoYNjUlRnWZ0HrE60G8ag08z6vMCvHw9N\nPr7Z4RYXzbAK6y8ehJ2utLQhRwPPq6X2QJivw6An9iDbEDeE5aBWnZNkixC0\nYsgnxJ8H5HpwNE1xnhhgFjbY2Jn2dZq2FccA0DJS+1P4uV/4tTbrj9AWjsB8\n4biaJ4SBqNmM0ZjTczjgqXyhLNCMMLgrJ9CKC74GR20KPzfbP2JxIJ8YPtUF\ncjWi9ohO9jZddX7NaRhMWdP245IfsgUaQpkO0fplJt5dJ5uWr2F+WMmShGmC\nQwKwv47Ip5H20F1cx9vu+cSSbUedG4XwcNnTjRn1CYWd5E3D55auTh6DuFUD\n3dtW\r\n=8fxV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDY0k0em8aNZGqSC4T3NGU+R7P8qGplv8nYkU5z1yfidQIgRi3hERIKJ+eju/pXLTcV/CV+ZiD18QIRxvdApL/ME5s="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.92_1638518494021_0.166420989764539"},"_hasShrinkwrap":false},"1.2.93":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.93","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.93","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.93","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"7ff9d10e20075f1eb184e02fbb459f9600bcbfd5","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.93","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-nwOk2h+WyN61KKqbCkteu2g2G0oU8AaslppADyPT7GaHRZVK7owlwBqt0he+YbBz3Xepuox64gCZ7mq3ypXh1g==","shasum":"72dbc4c1f0d7ea5f495469f97c901ff3aae2c900","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.93.tgz","fileCount":191,"unpackedSize":410798,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhy9eNCRA9TVsSAnZWagAAq0gP/i3zapKtQohyNZ1WPGsI\nzn2iA8eTUCy9hqlfsb3yTNQags82MN3Nz5SNommmlkSAYLG6Ttx+4G+ma3a9\nbHCqzOyeA2Y/zBlapmQc/GoYgjfFwDgQlRDd3q3BB75MhOL1czCoU44COQjX\ngg/sf0PGpm/wicpRKtyujF89YtRg5bYB+WOWQDGu3TltOKeHrQAr8nBBLPzr\nAw0g7MCfBcf6Vczxr2b/+ax46GiSbZUYLDvqfHNaVfMFrl0p2n3yPzqVQV4j\n1XTmjKkwNNfsiW8e6BVt7r2synlIHOe5ecHniTGAwkOXLx8vo5HiLtELTr/Z\nLwcKABBHZNDZfHM3P94lRuLHSQ8UXivARU7ThWrO3j5LA08hgxheZRK2S9+H\nDg4iS4GPRXQQt6J9Ewpi0Toc2JO8FowFl9bbNWi+JtB/2aFF+ghohd7H3VHG\n03J0atbY1epb16qyS+avF0fT4UafqyDFQP/FUIlqlkfwU9bH7Scz6YDJvkma\nzDVZiCjn3deXyiPY5NgBoShOG00FMGpnRQsYcS8idTSMz5ZoFSHsaC6kFbd8\nFR4tjzd3JfuaOxn4r3OyLGsuN6SqoJ7tlmdmwWCGtRsB26edDigH1ghnJEMj\nkAfTISnTypJ5yws73Pje2wncMO5TfKnpLjMV95+ZlKVzfiOI4rGBCoELD8Gl\nZzf0\r\n=Swu2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHp8KYLK9Rv/i3qa72F6Zke6z7DlmwExrCmupt83VpHjAiBlCHxM/2sY99Nbo/XTSHw0AM9JQbZmTCaJ83eIVzUsiw=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.93_1640748941519_0.23435518544432665"},"_hasShrinkwrap":false},"1.2.94-beta.2":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.94-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.94-beta.2","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.93","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"7449c2acd262f73e4305954646a66f7ff2f8beb0","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.94-beta.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-qVbUx7sPvg579+T7szVunwIW6mr2keX6nFv6Zv+KA4UG0vYgkAo8QTex8kvVBrnKTnoznd7B7R/VAd6eQeQ2eg==","shasum":"026ccfbb15fe660ac37f3ae37e926296d5b33cf0","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.94-beta.2.tgz","fileCount":191,"unpackedSize":410812,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2952CRA9TVsSAnZWagAACHkP/R5aVqEU5YribNR6pnH/\nyo/j76Cbn63OId+ZxLr9W+u5lQammNjV4fJF2ZdhJNIFg6r4/ISruKp0Tin6\nTtUR+cKKszgkXf5MxdOmJcouclRu+0FehUTewhBKl6yq1h+MUh3KTUbwqSYG\njOw4aFYY1MM8DWn0hKOZv76UNmniXEk8IHVldskPq0lUA1ephTfNHTi+JFF2\nph1WKLHpH8aBqMkUteyBaAfPbwxZ9i6UyoC2Hai+jnmgfeIG/iy+itiUy+K1\n//yCyKRLUZ7jqyLGWsqM7O5CYlPPMc6irmyjZ+3MAPyCagJegmQlQcJGZRd9\nYjE/svdEFncOIHJ1Ksggsi3w6kD4HQrGT3zKNZLFgsS+LLGz2UEF5175b2Wx\nJBv2iIlh/+UTyUAc23fGnNoxk1bWBQwZSOe4FUDU2n+mohnY9YGdzm+Mgba3\nw+9yv5DLVoQitDXxLECcOnjH1TCa7pCNouuuMoMd0KoLqEKln+IxI9zHRUHd\nfr8oS6hCVuymMb8OxCj6Qv8p1O7JNJnOpTmNiZ1W9Npvzi9L8gEXt8trxgoo\n5TixAdiN6xLp5FDCzPhk9Cctl/rCzjJ7dforOKrzN5ZhHMuffajcNMPTOHg8\nQkvbwnQJJFbAnJyx++/BeBWOu5JYPMi/2KN2Zje+rraCa3DBbinicXdjT03T\nT32W\r\n=1PsJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgYVa+sxaHxUyVdYveJrVUeAt102tswt/9Q6BXcDmXIwIgZ9aSHvRQGo0W+2CrHtnsJtoVBsi9YsQv0DFjbHHxsSk="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.94-beta.2_1641799286077_0.3850012260777571"},"_hasShrinkwrap":false},"1.2.94":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.94","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.94","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.93","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"752a456c606a23b6392dbd27181552b405849512","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.94","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-/2rZ7p+Jk1iJXJh5ZLjT72Vngenn7MjzaSe/2ND0L/WjhdQapBGABTrxe0hpiBngcDygcxD78nFWZH2QR2NpBg==","shasum":"7bfb0418bb3b611b5f27a7b61d68222594329715","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.94.tgz","fileCount":191,"unpackedSize":411068,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3TirCRA9TVsSAnZWagAA1QMP/if1i7rC90S5IeuiP4Rx\n9RND6RVOnkjaXLGsZa4JRP+oiqlt1TnV/hVyWUOrR/p8G8EqCY7/nDtHGtsV\nAk+sPLvogeHITRQ50IDE38mQf75KSCl6S5ju6GjbPjZnvtf8Bra6hKqPItiC\nC/H2gIEB47BVe5nhesV1z66Y+SiN7y7Qpv0GliAnQ5IAZ9BfrvATtxky8XJk\napxyTtSlQsh6x6DQZxljscFkx/lOJTP0TMNI4SmgsCEjw3wqYonclobeVNYh\ny3l3B0FulAyRdkZra+Uj5Pw+8artYU/g7MMM2vRWDvjs0etjDz4uTkoj9q2b\niOtCnCq2KKQ/IqHDjRqWMgJh0pYHhDJ27PVP+SE8zP59fNKkh4tztPAYLzKm\nasBm/Q9OWJdu1qBGc/CigOFHf+aXnltJOyy7BAtMZdb8cSL38IFJQKsx/ZXd\ny2xOvjXnnEaLkpA8ZY6r4PfeftDmILNBsQHgk9HEii9h+U1nLO7fd/b1/70J\ntQSaDrm4CaErkrq2lXN0LjN/uzspz0KB6VJsv02GseS7j6U5piUD4imTUS6e\nWol/kt4ThGT7xX0kPb73kxTY/PjvzuBKg75IJwVJlglkob5FGZ733hOlSFoS\ndjIinujJ6/8BephESH3K8QSNkqEzYSAJ1VETT7D7F/iBAmP7xfiefPLjSHEa\ntVSM\r\n=Y+Zi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHOo/khtNLDtn8T4D00BTKqczM4w6IxyvdaxQwdZzDVPAiBIAhV46f1ERbfkZFwHB4Ro9FgHgs5riD58D5Z+iVId9Q=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.94_1641887914787_0.4075667786225017"},"_hasShrinkwrap":false},"1.2.95-beta.2":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.95-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.95-beta.2","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.93","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"21b9c0ba3270a8f7b12c6cf8d44ce38362f04c65","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.95-beta.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-P0OIB3PmYimfMVBOIv8v89zBgeaXBHKDLYUHW3ZBlF4AZnG0jrzPRwga1OBnKMJA9rlonjaLkPm8GwmESfPGWw==","shasum":"6aad292dd9d86528eb87b1cbc459bbcbced60963","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.95-beta.2.tgz","fileCount":191,"unpackedSize":411082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6NLOCRA9TVsSAnZWagAAxTwP/2EC4Z5d4vXdvdEHqTW/\ncmiQDXQiBIbkyB8k3JXj6WJxdD8JFblTuvz/QwuwvMixXZfTxtbrx2Kxcl1g\n/4KWak4nOlEscvq4JpzlII4dsUU3WEIwQ3v1WLHlvYBdZkL/pUFkbFTTuOVT\nzudb5pcLR14d65k5iIlQAXdz1NTyM+NoIf2BwDZo6fVH9Oubc7yGimQF4JKp\n0cdsBM94sB5FTdaPUFkiMp4LH6D6Um0etWjfOeNhqn9WdRj5bZK8m5byFJG1\n5GDFBGLeQ2NvkPM7ucGY4mvmbgNT9ooy+OYbsMBJz6yEZHMOV/G1pvMTQQHH\nEIbKTkNnvLzoDTUGNd/T7Ue9r3UATn83HtquAWKkrvxq2rQ7a2owvt0sR3lY\nq+W/+Rk3yEppNYW0oILe7jFXOdhEdSz3ahFaXlmhTxN3hkroL1PF6DkPCask\nb7xFS8jrJtfqcdt31BU9a2jeYUZNIPdXWr9F9bYQjHc7axmcvKbhdAHTt2i5\nS53BeaLBp2wP+Ebq/0ShSnq94V6PLnC4O+Tzm7MlsmxHp+U3tH0oMi9Q2PsC\nTm54xPGgqNni5UrMnpGOY6AgXNStLReQlwg8ULS2vZFxjtoo9aotMqsAN7xq\nTXLvHRAS8CBZwxoDb3Cvh1+TocyN85/dHT5jvh2nF7a6onoYTST0pqkQhXWz\naL0c\r\n=eSZd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0dEfY53LLfGSXuK3AjavrvV3goabC7YIK4CumIvOD3AIhAJPUnc5sZ7mjXlFlHjyWjA60QAI2VOQo9U/4dXyK9Xzx"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.95-beta.2_1642648270506_0.40348327873433676"},"_hasShrinkwrap":false},"1.2.95-beta.3":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.95-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.95-beta.3","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.93","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c320364053cf50fc87c831b85d6d7551189ff997","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.95-beta.3","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-yI4WzHnqi5b06GCCXDY1oMdi3Oy88AsOOk4LANiV17RILqjjxJx6m6RYYE/vcQOWuc51U9IVn2swVDYvik7MWA==","shasum":"980d7a3901c5fe97c081ba5f01a1f39b652335d8","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.95-beta.3.tgz","fileCount":191,"unpackedSize":411082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6P/pCRA9TVsSAnZWagAA1EAP/iL/oT/X//hPnEnvz+aN\nIgifsIbJy43fVcKmx1xTIU9NejWKUQ3olD5nJdwAMFaU4ZxBlRTzOaQbZMsY\nkLbbz4lESiEeGTLBx6o+XWZlhTOFo6ll5iN6hyhltjzg0MCPooY7mlq92ppq\ntGsHjS62WsBzDwyR9NWdIwWgrSafOyaGRumdvAxiHO/dBgp5knQz5DkewwRi\nYAGrd4aFLUhtmjjYE5cm2GgWuNHhl4UuILYpPR7NWIjD7n1gEqjp3SFYQNdG\nJvJUVCBZzn2VqRTdLNjwlsYxvVW9Y62BSt9dzNU7EgtdFad+mQHgJuwey0lM\nw+QqqUZK7mNL3Tb/78Ul5UU7to+84Wc0exV+xwSqTekcikKpwXYmxlnBYsIH\nV56sgES5B6dupxv9QpNoGAPf0rHyhZ/tUm7kyNvUd8Xtpq8KBKlsPm+TcAzH\nfYjSQREfnULfzpLOfPKcwXfowRyhb/mivwEUOXbw+8S2NxGMq4WJc2YBdEWy\nj9zYbbAPTF+Bxh6TQCY+hN544UrKOj/BqlOUR17pqUp3rQ4yGWQ94wgSSlxa\nU0KJTcf7JeuKQjsuKRmMUvnOwuB6UXXS0SWHpBleL+j5Psr9QAaGEKNOPmy/\nqMMGg0JV39WjOixaIsSMmALHWCFSWsul/sNKQ0J5dhCY4lsoZ6rjZI3+mmdj\nApDF\r\n=qTGx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHKgQb3wdEoqssk4MRbkH2JvROD5VCXS1zxJK1jhBDElAiEAgfsT1/nrq19WMOUTyXmwVVNwREdjiwxn9rWXkcCRgSA="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.95-beta.3_1642659816806_0.8720857567668368"},"_hasShrinkwrap":false},"1.2.95-beta.9":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.95-beta.9","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.95-beta.9","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.93","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"29294060abad75514d0019b374be2cee5ee34f68","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.95-beta.9","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-0n2ToFdiQcV3BfhRWKMGAHjseznntKd6e8ImCLcLWyywj5bkGmynyokthDvLqmrx+Tf9dd/MOvFaw5uoof+drQ==","shasum":"2f750320b656ebb7fc90f39cd41a20bce8202f22","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.95-beta.9.tgz","fileCount":191,"unpackedSize":411082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6STCCRA9TVsSAnZWagAAfVkP/i0BH2N29XOFa6F1af5N\nDpD/jQCaMVqSsOzagIH2hGmJtsYc4OMjciixm8BmwyD9TGvR2K2K4RtwKPIB\nii2oNCZfDuFMguUYwHAy1NFE0uCktDXkWRIF8C1iEv/yYEUTFNK41qxRDyOL\nmID7FK+iEPkJiEdLRAegqdVzk4nAaGW//8/mEdes9fbeUCfQjn78cstFU3MV\nomEQ/SmLmUWAhy0oF4Qg3rreIF16Q3S0ywb8ck3AiNPfxZRi84nTvLlmH7g1\nxKRsUXcLspLAWEzMcJtMTtzXDzM2WZ1M0beTTrJyCEucs1982ka97dd4Ja52\nwEC67ARO3RFnWLvJ2pGujoK0+LdvXxIHqYmllATJBUedA7H/MVNNVFEmd7Z+\nTJcQi6HNl20W6vtiUNofIsJgDpF5Ui6uZRjzM5SKezqdPd3VeQkTkSIzRSda\naPTde8/Xc8nBQ0AkNYXL7LZqrahqE9lKHpk86+qK+rtYByPsdUGl0FBQ07aK\n8dVWmSCsLOt+cZM6lyRFlkYy2QLDDlbHpbpp5DsNublkuvKWbBJWBGlWXjPs\nllZCuXJIqF8ZRs7LJj7zajvso9tEpJ+3CHc7+G59sNslGHqhHgGkp63jtxFm\nl2eB0+jXDygB11Y6q8AWmXszioyYGwh+h8xex5hzIBCyrnrA0x/NoB462jWg\nDYeB\r\n=zq8c\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDR8oMnT99dUHujj80uzxMsYukptMYpCx+kSeSqE5qT6AiAFj1atMoHmlDhLCWJ7+/yJDRq/AZqs0jr5Rn5e/NDjnA=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.95-beta.9_1642669250111_0.817420494473982"},"_hasShrinkwrap":false},"1.2.95-beta.10":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.95-beta.10","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.95-beta.10","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.93","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"a0a0e9fbe14b91de539590cd4e64d0ccaa0c66d6","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.95-beta.10","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-fPsc3udM8eiOsx0QIr2dZ1MyBMpSviJFFJL+4ewWl3x6i9FPoDeaiIpmUpjZb9bBwKEodT5aubytV1Hh3UOaag==","shasum":"b70ab1fb1993be0e3657eb04d29522a3fe8daf67","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.95-beta.10.tgz","fileCount":191,"unpackedSize":411084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6S9nCRA9TVsSAnZWagAAiWMP/Rp+n7znl0AUkbni36nk\nUo4/YxFoTFt5pSI37z0m21Fs0bbqb8XX452VHb6CMkN2UL8KSlXJmQdPxZuk\nD4INc0SF0alaXEdgQyH6/sl1IPhgoz2sEXEjzaAWwIuaU/1e5sZRKuorvKbB\nIGK9N+L2kgVJen9oBhdxoW5IzHA+34e7TQedwUeHwGKmULfNN5ui72bzVuQf\nFXRZ2f85c+fbA73sqAkEpQDAkKL9jWh30KEyeYz69pYf30keCKHyZQsLT8Lc\n6cr/LY5KqsebB/hKqdMXcO4opwp0kSUUUpABbxCu7VWs/+/au8J6KLdv/e8k\nz5mMhcYmJSXqeoeQTE/hvXBNgvTKLY1XQpBT/Rno7/M/OHdF/KnYaUbsZaF8\nG/ueKIODTNHCUUHdddszraKEs2zOUTNgufDAvBQ8rxtmWfPcD6lkC7wXku6U\njh5F90fSyUsBgdk359C4D9219QuE8lazGyhoEqvP+UfSEb5t+hNoNcJfP3tJ\n+Ts+85wnUiG0ygUm17uWgslDGvrBcSlFWz4Dj4xwaeuO2pO28B9+6+Qz3uCU\n1bjFO0cYM+TChOzqMal8SOSXSCs68V1AurxOlBdwhz42CvLoaiBQqbVDaYTj\nZO4qzEOqdKsEZ+PKCY2Uinvs4cLKKNXU0RwAqABohWz+KTJc8352DlDgip7+\n2oV7\r\n=i/1C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICCvJV1tVtfVYYQB3hkJkB2xSJEiGFSHYYQLhQrtG6+EAiEAmXE8WPf6dJBLeyAZXjJ/upUH4BIVgLH5kVSYHYmyRig="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.95-beta.10_1642671975169_0.055042135850219776"},"_hasShrinkwrap":false},"1.2.95-beta.11":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.95-beta.11","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.95-beta.11","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.93","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"9d1a992b239fd60fe50c78eb0fc5a8cc2cd1f2c9","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.95-beta.11","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-rG/aNbMsq1K4cgVnrVQ9mJl6PKCsk1/zg4jwof/ex0oMCChgyfbuLleK5fVOdfZrj1q4WRUMAEXNCOPLFodKJA==","shasum":"97451477d29d57c93055df592ed12843752dac90","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.95-beta.11.tgz","fileCount":191,"unpackedSize":411084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6UjNCRA9TVsSAnZWagAAwdoP/jReWJtrk9bk6jPugX7f\n6Qt4NIwFCpfFcl5O8Jj2MWZ5ZXV199lb4WdBFFk3qOMndr1lKw98t27ozLVY\nvMlE/Yoj4UH52xzNnuz1vDS0yFaECtopj9zuhUdZEFwR3ZMzQ8Cmk6+7KkcF\n0kAZKwwK0AOdkbb3nVpwC8KRp7Rzy3N3i1oumF23g343AIQzOJRQiO5Tm4gR\npclF8k9k2J5Xw9MpWY10l5QPCh56vc5XACOg/PFIdlsfjy/mSv6tdV/egzC8\nmswRVvEoEDzDujvMjhguzceO94e+9k8MrHClezi2uTzdLTAcSGag9fvIsqIN\noPPnR6cJsdJsXR/BuC73e8lzMNpMJ5bASZKS68Yn5eFS+1OhjK1OOAomAbS2\nSfPHNIFVwndCCb9tQfGPVvqa5t+DEKaKWk83pKgHqL+B52tBPq+6ytrNiejO\ndYiIIwWq20pbVOA73+jnViYeN515+gu6zEzug8PhqqX7GG4G5TdHOms4kGHJ\nQdBbFarV+8Cr0eFmk+rDlNKDLMKoCS4uVwvWnfvvSZN168nE5pWWFvjqnzmp\npkVDt/Aa+8Chy4UjNolKfTfxrknEulr3/O4E6QP8PX1ln4KJOauUykTCK+3N\ne7acKrZC03xnRxEPQBsFXm8EoAjzvTbeQpfyaJw30/JypefcWb70fghCQuz3\nxkc8\r\n=m8m/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTv3kZPQoppnlMPzvXQtg+Ct7aT0uYpOhbaVtBmbprrgIgfKMM4rI5lpcQ0dd42zGsbCJBj3BwaTtOAFFhxC4V/Ro="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.95-beta.11_1642678476966_0.37068192478052975"},"_hasShrinkwrap":false},"1.2.95-beta.12":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.95-beta.12","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.95-beta.12","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.93","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c77f56cd86e7ba74bdda72e4c154ea31cdec3182","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.95-beta.12","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-p7aFc9pce8LvR1amybosN8XA2q9CinsYoN4FbRzxqWckBCa8r6XTWH2bzn+ODibhqoiVrXXc0NlbKSFMg78UXw==","shasum":"082c5941830b60777c36e9ce438dbb14a23b1b1c","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.95-beta.12.tgz","fileCount":191,"unpackedSize":411084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6U8LCRA9TVsSAnZWagAAjGgQAKDjCczVh2CnHRL0olrQ\nT8X7qdxbdg9J3wj/I+e9FlFyGk7FJFKOfM9pUilPukoNIWbYO0RVtG1jObGP\nqXdtkO5P28/BcVn/y1nj0Pn6oE99Nz7vsCURpBEGtT8mZoh6wisDl/c3Q8qc\n+oV0pgsKXWl/vccMtfHx8aDUINf002tn4iFEOoWAxh/45cKdKZUjYIoEAbuR\ncey3huxTS4TE6G9Xt2W8CKAXW8LrGMNuZqqRi6jpGdn64wn6k3Twibq5gL9o\nhbY83lhPjgYiAmR2of7suCIW+ptT6cSN4wnrIdGSnvPm+0ImQz4FDRW5XMRW\nDbTXK1PFGSz5DbrKFgPZHvIAcgsBZdg6xgdaEKT4J2PAP2Wsjtf6CCyKTXxx\nv15sq5YT+yRWaklM+HZ+m5LoVaSLD/yXoU4F1npGmhdHeswr/22gb5yzT6/z\nAWWccoKuz+jvs0VLVYHipjT2fiZGVjfefSlzMm01EUoOByKXAbHS60nxcU8b\nTt715+O3/1AeCJHBCSICiHDxY7j6i7A7snu3OsUaj/pYiYy+N6otpZx6ngMc\nSmRjuCezkXJ1x4hqzuTgXFNAej6f7Mm82z9+W3Az4NR5t4zUf7yvv8rhF4UO\nk1EezxWyeU7nh/cnjzPJetnOWfCU4+vPcoL1w5Ix1opnPvgiNNWRA7YUZYrN\naZ2M\r\n=rdoW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGTiRDpKKquki30es5LmmsECJbAgHBIn9qzY6kgCXQMvAiEA4n+MGy0KcSmD+mhj6lNE/kfI2unRcK1MeYyrXWy5Y0M="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.95-beta.12_1642680075592_0.7591494033456394"},"_hasShrinkwrap":false},"1.2.95-beta.13":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.95-beta.13","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.95-beta.13","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.95-beta.13","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"33da033e68358b03f1a77d25318078d78a37e99e","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.95-beta.13","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-SDoOuiRk1JQ+QLj/t6EvPH8lr0kp28z2A8iI14y0x3kF+ZcERHRRcBxibNneXSAbMM+tnkEbyPSE4RPzJ3rJPg==","shasum":"85241e34a7354b124bb212b3d5541a109f3d74aa","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.95-beta.13.tgz","fileCount":191,"unpackedSize":411092,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6XsGCRA9TVsSAnZWagAAz2oP+gIeZBBDJ8VlOEaSRAH0\nhJqdYR5CjeHsJLgQ+ihdcHEM7Mz5h9uxWjgPt819qzgHrMSUkjQeOOADCCCe\nuq2e0LLj6sAT7CSlUMdGRDrjfTpvX01nR5ezXiCv9TqrpnPE1ZyyGTugt68D\nxDkxn7cCTM9+tREnr0eOYMI6YWgY7RIGp6ASzy3gwk0Xmb26ZCPcAxDpxom6\nY7rYl+MYBW5JIPbIgeMMP0RMxDzbNFgobxHvGOAX17xHuHtWN+99MjuXN3Up\nyY7+ci2OkuRBBbYPRz15qJZJoJiQ34u/IB9qrNfdq0DzMMW5ev3Pnbg6xstN\nv1hv3cCzCxAi9mzNyj9fKqIfeMIMrNTaFnfh9RArUKxfOIqGwA9aj5APifBA\naxX+esoMtAjXOoDNsvIIT6gP+HDvX9DBtIkc/J9lBQpos8HJXcQVdz8jY/GT\npLynxTTJBdjKkbSpBG51A4ef6kVHcy6vNSq5Lxm0ixsWvwl9IdBvK0Q1JA0J\ncsv6YakpKDOG4WSZ7lNIY1jNJfhsovQw012x4LNJxtqzlE0FQC5TGJY47cKq\n3EO48uHFILVmsSppn0z9FmnqMAtFztPQFafgoibafKIWu+HUvqcTeeXrgKqf\n/zKI0mB7cSNpepFg/Nv1A2C4sQqPKs8aNRq/kajWe71TbMzPLodS8eyD3M9a\n6HJQ\r\n=YU6b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA3FYosnzs40HKJR3IVYrt1EBA9WAZJ0jsnGZ0CYixhIAiB/VSyAN3npxa/SEh+tzAsJjijd2T0t8o619FlvD97zPQ=="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.95-beta.13_1642691334764_0.48797931238046566"},"_hasShrinkwrap":false},"1.2.95":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.95","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.95","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.95","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"83612356c419e534bb43e3871e75fdac45b31a46","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.95","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-OdjhaUJbyqj2SP3MQLWIX2I8W0o+/WIPlvgk+RvTXO0m2H+9WFVOM2SkoRCw6y8YtMSHRSEGPQ0tKZRSQ6AmqA==","shasum":"91bfbb0221da246d4e27a986d9b44088148bbbdd","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.95.tgz","fileCount":191,"unpackedSize":411229,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6YA6CRA9TVsSAnZWagAAsFkP/2leIgf9fhD//R82GXAW\n8+jtXTA/hUHoFnlUtTEKlVe3+2bLJ/LvwGtOTx6XX5jxWr0B8qa1rxmZhNaC\nJqcghwTCXOl9hIt7BR9x58xfNQONM1IVY+NNabhu5C7mGS2vgjapuM7rTLQ7\n39v0ZjITXh1YlYDnJ5f8UQIsNeJogAFYH08YuVQ0pWPcbhTewhufzOI5mjJ4\nsyWzv0YLiNueoYzpVP1A8u/HeIXcGMNmMSGN5zWouPNTxP12IeIS2fVXyHLk\nVk/BZxO3KMZ6tnyE8D41+VsctjpVbG4/CydFQZfN225au6FVCsn7cSgDtijo\neqHcl/k5Bw3wBCsE5dSsb8MCIH7NtS/ityzlwoSleQqlKXO+IQx0ju0e0Q1s\np8C6QPFG1VheMR5UBGE8QtmterR4ptQUQh8zaVONF3UBvLngIfls9fGRQVXX\noPh6Xaa8br6WdeYRJYcYEhWDi4mf/K8e/x39rk4dWthNQsBVxIMqLvXbFCYi\nBY+yjOOIbK5WeuBMD2nyxUDe54eGjJJOTXxsU66RGdEKn/o78BN5Wkt4+2jK\nq2CAp8LUMq3OdNuN7vSHRgpHQm3aPQnlZKXV/eoCpKn2kzOhWPyImvRC64qt\ndkz0Q6fTNTKA+D3Uw9PN/Lqe25vGHL5sVMUtIl3/7rrkna3lW32ebZnfkoNk\n6jLF\r\n=OBHR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNTTpJqtHffswM74lgZgKAEy6E6fRqRen9vFJvs8f1EgIhAPGriaJVzRRD22M97wgkwoFQstDUp8n8DHz7H4eKXYs9"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.95_1642692665697_0.717544773507439"},"_hasShrinkwrap":false},"1.2.96-beta.3":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.96-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.96-beta.3","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.95","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c573c418b38846be8f64138df6390c6fff56d3df","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.96-beta.3","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-wniQ6C7k7QfuwhxT8vodmpSalIDcoeHcKd7TvVqBTz9wxXCboHQ6iBAucYaaxQTsg2v1K0/qTugnh9Xrvru2hA==","shasum":"afb874ec6ac78e4ece3cd8f9d57fb84307944b7e","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.96-beta.3.tgz","fileCount":191,"unpackedSize":411243,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7k6QCRA9TVsSAnZWagAAjI8QAJVQtsv8cb0Rk2OBzOh6\ngrmp35uemXYWhE1LfOm9go04T9G/MZv+zYkdcHDOn5Ct1/EzG/wo/hRzkVaq\nvdPd1vtnfjoB+u3uOI4LuNgUtRiUxzra9VwDfnenQvxUa/u67907DEcsVEHv\noz4SFF6MLUNH+GC7pU5J27sKDHsnNZdqVK4fqOC1IfPLptr8DPgE8UkJfmhS\nTB0B/ZMKf0at9n7nUJeVWD85MLkpby6swnAP3SrtrxemWDE+SDtsvO6P34p7\nQ27ptSfGpDPmjJfJcoycwAAGHGpj/SRU9f65ju85RPQ2DDtGj6wCXdMv84L4\nL1wlk6efTVy28ZMt1Wlb5zAkakFxiPsjOepnNMZK0HfSbyup28JdrPiPsZ0C\nUBgzz134YhYuVwO8PxWskPrJblwahb71W9tkShqgLAGsHj1AC0a8PeXAoQeo\ndUZTrOhMoYHGD7x3SfymMHII7+zivG7vzPAEtU/CWu98HBRfw1fFyriOk7+5\nYJv3FLEbl0jIJcG3ngvIBSe/mC4b/SHaPLnM2Gz8ZXhkqJ/sjBaaGJOboljy\nrbk9uhTpszbZMzFs9A3oqA5ihERD9UdIdOxXY0VlHHSYTVXQCeFtzz9a5/yz\nDHf4eo/zvZ+SNMBJdFLBXubAYF1uDVJ1PweMxc2949J2h7tDgRFnd+01Y6pG\nxGgV\r\n=0oog\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBf3hlvQkjH73XTjKxLfafx0ASyDHMu98Dpw7UwmFKXyAiEA/Ac5lgLIfO2gQFeayY3wP+ivFfvTO/atx3AADXAC1TA="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.96-beta.3_1643007632127_0.8725789916053295"},"_hasShrinkwrap":false},"1.2.96-beta.5":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.96-beta.5","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.96-beta.5","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.95","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"b15a2939924ff6a448a0685e6e1d981d4fd68885","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.96-beta.5","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-xFGMjHbMZyq6RZ+EjdhLj6B+z2Sy90IS3/4XbrBAjTwT8fQyPj15KkwekYXJD/MsU5ZtjNhPba2JK59IDlKKVw==","shasum":"aac5f67ebe5bb244a1f2e157a85824c55cc115c9","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.96-beta.5.tgz","fileCount":191,"unpackedSize":411243,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7mguCRA9TVsSAnZWagAAmRUQAIMnrYXCmKBp/0T3FxkG\nlDYtlew2W4Xl+KuabDKiStlAGJHfc55DP39io9AWm50gVV7lQYszSTuUPeqb\nRrrklf2NtnZAkuTYxuv27KQ6nVp0Ac0f9B157PCaPmEgLfw6YPKyild+iuQa\nmu0TwDDhDSZwKxEA2yh96AhvEtHnElKjc+bkHOx4lm/ewaLjW8pR8dQddC/h\nigpVj0o2Bb3+s52LwYX7subJwLH4Bl1jZErBR+WZLo4/XuC3liWmRNx4xVqQ\nrfHNLdaVUI9rDtELyMPlEMhJX4BMi4RA9jDJFaufGdZuXHCSYrPH9idfiDz9\nsUhkAvuRLhDI43GFfmzMpnQPMWakqVG33oUft0viZzL1/Hqv2JOLCmQpJtsp\n8jwfLRWF6VxJlAKOyHLUWyTDGUKlsF5aUF4C3k5PwvR7nwzQiXDj5gDc12a5\n+UQQ3gJ9H8/bGPTtkuLcmL8L1gnNWFduWvgzWv44dlbsfsCOtLJzKYeTIuMQ\nbWzvvkglBbDyF2SugSc0/BbRQ/S8g4VcTn+Lv5drEvN+yGPfMgFjg1nSipTv\nr6RDXNf6goZs0lXINFjYGfKf5y1/+uwOrwiDXBcWyqY+Kpm4pKfQxeTL8bP+\n4IXmarojQlb+QpmK4aMTUycrJ5kVCfJYPuj3FRoeeOo7wlWQJLuRxpAgFFRb\nZWDU\r\n=iST1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaLutOpO1z3nYcrLrbItTA60XAGIzVElpTalwYxxwsPQIgC/3SL3HOVihmAx19d6DJKYxk8vEJioDQ+684YaiCnpI="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.96-beta.5_1643014190793_0.4838267287548428"},"_hasShrinkwrap":false},"1.2.96-beta.16":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.96-beta.16","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.96-beta.16","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.95","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"bcf935e4105138e4e14e2d3311829e667df94d9a","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.96-beta.16","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-4T4XkJssadQAKDL5rsksZNyX+TS8qPD8Wz7PZaav/A/FpB4JEllxIQ3NKiQdKVp2FahBklMhpOaotqELoU4W8w==","shasum":"fca0d908691e202af477b6415ec88f935f698c0f","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.96-beta.16.tgz","fileCount":191,"unpackedSize":411245,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7n7/CRA9TVsSAnZWagAAzMoQAJsGtg0OiEhgFjU+gg10\nfYc6lR75v5TUguvqVLbC+G79Hm/YwKx+Iu42snrnDhh51141zqyY/+xfDukj\n07VIForN0Nprat6i3akllrbXqBUnGasGf0t9azUpjizhGVju84eIathoYFVL\ncsJ0hh8Vd/J/rh4ttlE4HMgXjzRioirAcphn8Q2BJun7zGw1Gl+nOcUAmhh7\nf60EcfhPoFpVUMkvWpAB1UBSM4mwWDoiMQMLgPtba/uRbnR5JzqXIJbzTxSU\n3XqZKkHO6mdfa+9al7U6Vu9nOPJMhM9Innfd1TbFyIUWBoi5hejxdO3dY8xd\nyv4a/5d9BMou7aGAx3eRKxQayLAUkqs1WRnOBDPr2eAtU3Iw50HW0NNCbIkX\nUwtsCroBlczZptL3ShC5fsuKQbDHdsQHXEtGvMBpMg2AInqef9POSgiJ64M/\n+JgEggb9GNBrvZkcjAm6FgHYlsTU1QWP0VDmj2VQVgiCPjACTFNSlDv6ax94\n6EcC54g+9opKHlva4n7h3PbGDAMh2hVdscKat9ka+w21Whlejf2LKjWJNwDi\nf1PH8MfzfktE+D//Hn+QCRXNKRcammmL13NInqzDpdAlTz+Pzrrq2Hi00gnW\nDMmzSntdHniJ47ReHwQLZktDlXzfNw1bnBaRX6vs12FtTIe28JNihHSxf8Fj\nKauY\r\n=LD3N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJ6mP5QVIOt62xWviH/yc8ROPGwCvCPTym+GMMfj/hXQIgCygI24nuYI2mqzWLF8F0VGOUmd44c4I7N6gz1Fn3Io0="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.96-beta.16_1643020030953_0.5486798277333189"},"_hasShrinkwrap":false},"1.2.96-beta.17":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.96-beta.17","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.96-beta.17","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.95","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"382cd382bc6e79853019eecf442ead207a7d31af","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.96-beta.17","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-Ro9fP+N1MJE/Nu4gfq8DkQTQrnEmoY0ZIgE4WvkTKJjd2tkFmnvjue+AhwfmKuTzKD5S1o3Z1omk65R6pZT+AA==","shasum":"4b2ffd949cc7adf29423422522097df15cbe33d0","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.96-beta.17.tgz","fileCount":191,"unpackedSize":411245,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7oeICRA9TVsSAnZWagAAt6IP/29t1Sy8DsaMjWG69dO0\n4BzTe0VZ09ayaNqYGNlOPMyO9f43FKetkzzQnQ8xN3hywMyjT05NhikRDgIJ\noCVJSwlpHUpjYNx4/ir8WhxJMUkKjOOKgXKJejLyopNnNnYKRYPkcmSnPlvw\nHg9mhCWTBwHxuGUWb/a4KDJl3uFbjFnDTSpuMByvDW7/3MezetkJZYLmT01T\n6KKpZsq2YkWwXJlV8Zok9n/lhIFz18azJvEpXRbd5oMtZ1Aw2tk/u7LiUf0N\n+smtLWEHEW7nfDCFU4inKBzFeFGy/LACjr429Mri+SZyL9twmKW1q2JhLlOH\nr14xM2r9nF076qo4ma24085Ve8gaHHgNwj2xG+GTGxPpACoJ8Ovucmi6T9O/\nMAvvW9hT5N69Yrq0wuk5ecX9VUn9S1YMSDarG5QnpYCffZr8T0WyAK9apdPe\nGs7rmC13YfXbJcMh/zIf3Gu+v6gm/x5mKqgHS5dRLW2H+bIc3qz2db29gmBt\nAtkg7uBPNaC+13o2wnOlUlI0CsXkXGG8KN17pAACuLg4UuEB5pzWAFo8zYxY\nUjA6tXeXx1trDZilan78RFaRhPVeVTCQEciEd6SSxNRnHPpFVDlvIqTIISGV\n0Fbs9lu1aWykXSokzIfSm8ev+Ky9YOWD2RXnF7Kvwt+aa8PVeTjH+t9sDRHh\ndE23\r\n=FDJ2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4vUIfehgE1m7HV0SFy47RdrXCebSCyz3vMnLThOTazgIgHfVFl64l490SIpJflNStIeGZHH1ncNY/Q2CA3WsM05k="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.96-beta.17_1643022216785_0.3992563536010909"},"_hasShrinkwrap":false},"1.2.97":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.97","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.97","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.95","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"1499c3184a10905560a5863a4fec677dd50785c2","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.97","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-fSGbheW3JYXv0l/mfDxABSDkPntwsGbyn4wIOJbZcBxzjZLMA3S5gcFApCUQkejllm8IV0Y3C8cN6L4llbPlEg==","shasum":"d06bd855c3ae1cffa3c319d6b16c3e46a7305320","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.97.tgz","fileCount":191,"unpackedSize":411390,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7r2ICRA9TVsSAnZWagAA4vIQAJRJKR8KVYUXAPhwpr/l\nfW3wHsrXC/hdTzY6iS7nIZzYbgbO/tiXMqpgl+ZK83F8dIlFA1407KojX2eu\nUgyWcqKHobws3jvT4Skw40VO4lHiX3o3QQmZtSssmAYypFFJb0HjV83/MtwP\noJ8jtLxRdkv124hHTOYZ2dczOzPtKA7jq6enOKaxxqSAAyFqDxs/nNqJPu1e\nVC80tRhmB3Z48wou1nnLmMqJI0MighbUN7vm4YwpKWDkAeRwnfqy+dvBxomg\nkfa2YDljI/f/kDcq2pXx73QhHsgVEdAv0odlpc/xc7yQrWRoGxwryNNBCU/P\n54fpt0lnrQ4bhrH4QZn3edkNgkre3Yz4XripteCky5yI47vUnn+53ehLhfJx\nY6Ufz7mdVMqUdjymFVLCJzISeCuYqmvnABKvuaMdkKkyQDpAmcdbB8L/fIlH\n+vILDR0uk8mV4AZt0hteAnHiBvFeS04AQf3IlgLat8HkkydQtvGyLXTq1/8o\ni5PnBPb8cvySY7+9p9d4HKftPF8zMum/s/XoDv2wDDgFCKmLt7IeCriEoP8v\nCnjBkIiVTHXGbIVnr8zfP4giEKBKTLq9rq4s1ZbNSj7J8Bw25psrRQ0a5W+v\nkWA/9PezIpw1Q27s0QY93wn+AJECtUxB7UVDDDtWk31yBWo35UyNt9BdbdVI\n9mjy\r\n=CaUL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH5JgKJhIW0aSfGc9h2qovpKYuHSJMslF9PZhFbZSt8sAiEA8/hrSGbbg65i/F12dhkvowLuMUBiiCE/0WIjzyeE96E="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.97_1643036040039_0.633471194481456"},"_hasShrinkwrap":false},"1.2.99-beta.2":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.99-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.97","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.99-beta.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"fa5757a3354930da5bc89598441856b81ad8d043","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.99-beta.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-Q849rB5SoU6R8pCYDrcwXTrgMpioYvu1o4j2t3+XsNWL5SQWEJdaPI3Q7vp/iCxnyFZRPNpUuHThVBbccNO/qA==","shasum":"5da07071044036c02ecd191fc0843cfe20526b44","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.99-beta.2.tgz","fileCount":191,"unpackedSize":411586,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiDG+uCRA9TVsSAnZWagAAxtAP/il1b01xSFBPQX83i9k0\nDJmZvL+7A3RF3kQNF5ATlkqf+aFTEJISWtcE7dBq8hWeHtReDRqkIggh0vq2\nTyhMAts1pv/H7Kq2LuKA6zFW5Rgi78fLcFi8oR3pPaBIy9/qFaSheywCbaBU\nFyrVEfgSivc0E1a8sJP1P7BmFvKVUB56eyWbdtPAG2YSnNaJk7dLqI14MYaz\nrUwOE/wTaVE75F08kSN8CfQeyGxAPw0svV/tY9PNB+DHtIheCxp3tIdwEp6R\n3qFHiulwdb8r+3lP6RUgP0KFAj1+mLP+06ZS1W3A3E+aNPUmOSltFaU8XfPT\nlWaw//9RmpV38QcgkXQtfNUFJ3nln+/XyXbu8hfATgzPGaPv/mFx3GHDBarc\nwuobNHPLQfKQ2wJ/vFYnHwRpihjNlwYSxCmL56V5kucVcmCT/hXggLPKLCmO\n0Jv4gPXeiCFVOOxA3FRdkgLuHDkFtVht8D18+qqxHIo6G+EONJrkm5p4WAMZ\nqpB1oBjvoB7T1q1dStvU8iPnwjnUHAv0jk+HkkzB2jpfSIUP3UzuzfC6+3Sw\nHQAHC69+BQPGmZoNO6e/Foa8vHuAJqJ5Tc59ovstMyiHnQuWz/5Xqnw+jfVp\nWTzIS9BIZXc6U4qapq62JttbP+KOXk1LI9lJjBO647iqxh+h+PKGlrTZuNmv\n5AQU\r\n=l7Pb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+mBJn/ivoCag1ag6dYDRmOT1kXVcqCER0nqpU+P3x+wIhAK5ip/X2eyM1uNeAyiOfS5pmwSSurp8jP5jWH8CbZwFy"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.99-beta.2_1644982190819_0.4484570451292613"},"_hasShrinkwrap":false},"1.2.99":{"name":"@midwayjs/cli-plugin-generator","version":"1.2.99","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.97","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.2.99","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"8a9bd7dd7eda03019cb94056c24dc421ce8ac1c3","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.2.99","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-NDv3k/pMVbad7deG9UTTBR5C/hco86to21D1BGyM1IJwHTjzIlLca97xIoN0ZfmotNVDRLIlTQ8EKHTTR7/aiw==","shasum":"58a2117c7ab713b564cbb216a893a0545e31741a","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.2.99.tgz","fileCount":191,"unpackedSize":411835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiDJIICRA9TVsSAnZWagAAPCYQAJQM+POO3kF1vkfE35Hx\ntMedyk9KMnQszrsRlKD5RTvsOFO7unhbZdWTwW2O2mhBpDUWQXmi74/sEoFP\n+2tcTw/+PoY1cEmIO26DKEzfJ8BQsovEoqF7ToJ4U4CdLHpMRFtsckMcF8XY\nlGPe/BgmfeU4IdcD2DMpZVPzCMG3/cnASxFKKd66zF9XCrk3oa99Fp5xIGj5\n+ttVXe5SvYzbP86h+xgXknuN88QOrjpl6FWBtzWVbS2FlKkQmb9oGHZto7KM\nvUXndqixSZYBFiBmFS0ulQx9FKQ15pVyzMJLymjabhocV93FjkvzcTRxVUeO\nPzTfGyKLz0HUWq0XYZma0mWwXOQkEfQN/wJKzx1G/tIgkNmt1YmEvTq+0kLK\n62y7qnlTn3JCIfMGnCYAtUYPBPI8laeFCHwhm5Snia6oVwFWRdT2Fmkok9lp\n+nekOWwSFyy8fVprdzIMVu0fnq/UC+fz6gGUCJfLHOWOv8KYOnQCRrQmNb7Z\njiAmio6nN6zsaWNGmrJdIs74PsNnE99adpwwPQcMlagbyGS5bnkSWXOBTfoj\nw984q6RE8lsfhC4xK3i68GEemxdopN7ew7lgJJnktHtkXPd8HQX4+3fiLt3w\nCecGCk7hSDjKAFd6wkyg1GBfOEHpCiwXTrTJqWYmjPaLtCtVK/YSPs3sXw/G\nBKJ8\r\n=sSRf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRtDY/+ACTZDv/0tyBJEEYTdzw0g5tylxwc1f2t8QfvAIhAO2wONmOSdk5dON97GQCNstKLz4rbIxTW97GJDFHa54b"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.2.99_1644990984002_0.9569207919665492"},"_hasShrinkwrap":false},"1.3.0-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.0-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.97","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.3.0-beta.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"615e3d2663c9a5012bcd0aa31834c4c581bc35d7","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.0-beta.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-uw3J0uoupe2oVqAPBfVrskUjKUFW04FPwL0eAYg1CPaiknqtuJeJh6IXXCjnII7YB/CUaytXtru9eIdQW+xjzQ==","shasum":"aadbf26bfc6510f892527a3f0b7a4476d2d9325c","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.0-beta.1.tgz","fileCount":191,"unpackedSize":412019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiEv8zACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqS9A//VQkP9YfCU4qKqFlmHSbFiOkM9ldyuHT2KEX81I36QIoKNGLR\r\n5zrDOo9rJNV3YfmfbAwoXG6Ygf/beG3aWua1UTf3qmumT28eD4nX5/KXjnPu\r\nW1zefvzatszL9yRBi+sqXqATPX+pM6OoqVNW5cYZXcQp8MfBNdJ8skOGsvz0\r\nVHX79naQiHR2MWxbloxZHf02vlUM1hy9P7mTihedoKgEydQQjIqYfnvq4BXb\r\n/p1bj39nT+wdDhsABnkkejyU/SVu443CFHDSmyOApv0TmkiRuanTBG5YBxkK\r\npI2ERHcCTvmj/mRcpZfEP1Te7VopphGbLpMUt5q1Q6P/dFSTC8ZxXlubKblq\r\n0K4dDLzT+oJnWGCIOO+GP5Zffi5IWoQ1gMCZDA8A7RrRhy1mdu3EhkkKthPd\r\nbSJQAnrcPQQNb9/pR1sFy+d3LAca4p16hqi3UnrUtyBWp+XOKMmMskuO3HM9\r\n+3KF+QNb6wOmyW3GFyidnf3O+V3B06qfVJXi8NOH7CVqC8gauhQRkaGr88Z3\r\niqJCsUr6xhBG2843poJcK8s7hv/HpYFa9lBJ3lsuZ6gvxMdVqpuJ6xadx2PN\r\nz8KZ1SMw6ux51n+SB3nQ6350n5mGCbb7vv9CtvUlmz2AtT2VixBf4WIkvXZY\r\nOwnLELrgeEw++zRiVrc6zQ+ZUBCT9QFflHg=\r\n=CFvF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCT2YRkuYhKt7Pw0AaeEhHCowDUEAxHfvWMpXuS3j1ByAIhAJFhFpEsMxFg8rjqoux7UesGg/zQXiD2wLPc+pfdV2Jo"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.0-beta.1_1645412147757_0.621027813682909"},"_hasShrinkwrap":false},"1.3.0":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.0","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.2.97","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.3.0","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"0f50734decf8613076b357a3cd7bfacf4bf171da","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.0","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-TOvfaaXlx7f6ukgvaYzG+Q4ic28FMGTaCthuvmyzXQ0Iqux0A/iCkaLoZD2/2npPT9UoCxkyBj9Yg8f4gh5/ag==","shasum":"fba39ea10352aefc59d1ca1d74b7ae0cbcda84ab","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.0.tgz","fileCount":191,"unpackedSize":412271,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiFff6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoTwQ/9FKN7RtJkyqW+/NDLzoKu7MD99w1+pyJj50/wx7lUBz2KfRSH\r\nGmiDgnnIHDaoHA4KIMBc9Swn3H+BZqvXVaTU7dTA5hROnPyjPTNGc4boJIHj\r\n5t0WBn2PcQicdFwbeEUIz8O5suOUW4yQ6VfbjwIjEL/kWfr30D4/KiFm3fGD\r\nsejjYgKVRSqYfCofsAzZ9Vw5/808bfZZqp4X+dz7/a7MQFVV5N+0oCAPh6Nh\r\npA/wfZXnJCqiSsmECjwpdOUcEPf6SxZrjc9Y1qKtgr2oQfvmLSuSSpn4JOc0\r\nUNtf9AYyEj0c1+8P71HzR6jjGDIMJjGPFtkaO2nyLMb0b7xmeOjXzUi74KLi\r\nZpaKiyD3xzFNxd7dyTGVeHToJh3yPaOWfaoRNO5taN7YjSbAQZcHzz6AHJJl\r\nj4vd09g4GLNmTIW3mUQg0WZmP6qmz71TdE6T5MrpDH1owO57iUeZmo8v1lCF\r\nI1Mpokg6ynqL7SjeqGjarywlwNpKEkpX+6utVSkgKK7uKo7Hw36oTd4ha+ag\r\nsBhgPr2S58HeKY3pHq6zgj9teRz66sVe6I13Zhr6nQSDOqQdx2qHEdFS9xOg\r\nArB6wlFYUtvqC19Ngg+FJ92Tmje0bnA6bkQrFvQB6VY220q5v1MI2Fcw0zVq\r\nESq4WEHMtYuJg35KTgQg0Tg6fNBE9bJmPv0=\r\n=kLMT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD50uSHjPWGFA+KCv6rv10fjgzvgytIOwABRhXbXkFpIAIgEVxdaYIT5zEjRVXAqfUMkOKn6jPYJJHNpPxU1NHtYyU="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.0_1645606906220_0.536273963513016"},"_hasShrinkwrap":false},"1.3.1-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.1-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.1-beta.1","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.3.1-beta.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"fad65b5add24c0dc8941265327ab0dadd7948509","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.1-beta.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-FixaTbnRFd8bdz22/PmB1pmf/j2wpo4s8hSmrtXw4/lcjSycVYddqWqe8CX8XfXxEcJm+XbAaoA8B6ZjCAAOpg==","shasum":"70a7a3eaf9f3595a5c4d220d42638b010ac762a7","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.1-beta.1.tgz","fileCount":191,"unpackedSize":412463,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKazXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpYBA/8DUkTI5dY6zLQXqBhTeaaXm1fA174cvryR91Sly+5urClalwF\r\nwPKFW7WDsfS3dAaxD6xB6wh5Po2nIkj5Kyww3nOVD7IB2nSxD9gITIC9f8gz\r\nrXj58rMjZVAgLYmbx9W7rq799iMVjdT01E1mu9NXPqTpiUhfNXadwIX5p4GA\r\nSTqPRb8G+Z4TQqQBmORM5aUA8cvzjbyWX9Lnqkf+ojRqcrcArXvWH1G2hBfo\r\nSBCvbAsPERKpT5zpluvm/dxJGG/0Ac1J1gLV+eik5Pn60iBZUbhXPh1iXLJ6\r\n9WOzWU8B+RSxSO48r9m/KKe5SDv+EyY9kydRCD84yXDjWmUuJyaxFWeGuqCw\r\nfmCqmgQLoDait2UIY/ecHxud4kx7jA2ukGav45dtX7bjSW9dOltmsXIf0Obs\r\nIKNlcDDyw3f2BrWkC1D1U3bfrClp6fTs+Wv8bXjI/eH2BNS6gVmDOBXSD8pF\r\n4kZDYfyhokjTQ6UM+ZQGjuhAnzvRqPhd2H6Xz/SAdSFSH3XBuDCum+wMCf8N\r\nFj3ZfTeIsGQ60RIHMfmSJyZxjzA+ts23TVOgqZ6ssNzgRbO+Y7PmmFNA4qUP\r\naoKICqLKeZz+KcpEbqz4caRskQUA4D1cMK/V6vDOZV8kscHiLVayi0emJLIb\r\npbotLRSOyoxMCMYjaGc4TX9fsYEFVQl3bNk=\r\n=eNZQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICKyml7o1Ns0Wourm5edEh25v1IWzYVCNbziIaivgj9ZAiEA+sBm1zR0X719wBrXlklsLaPlPjXNXtNphI6LvZxcoeE="}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.1-beta.1_1646898391386_0.8594525020448636"},"_hasShrinkwrap":false},"1.3.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.1","@midwayjs/orm":"^2.12.1","@midwayjs/serverless-spec-builder":"^1.3.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"4ec53aba0c3fc5f6d3a2c609a6e00ae7b71901f3","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-579KLJPj24EoowKLcuFCl5Wrd6GzOGPXM5lG6dJ4LFClCqLz5oeN60vy9DjbDF8LPGu2SVG86+RXDfaSBVsA8g==","shasum":"7c2821b9cee4ea126e061c986a78e1df83de1841","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.1.tgz","fileCount":191,"unpackedSize":412607,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKbDgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrExBAAiaUey8TQ2a5d9YxOOrElQRKo4n2nc5U0gOuIoIAyXdyIglXm\r\nIbfDJEh3P4lSd8ffxfciInqrVV8ZAAetuMWY0MKmX2PmDo7/9EGEBN/0TOXC\r\nPJphaEKWuRqJR28dHyH+NzhJ0aY8Nmz8urU0RdtV0FjyOeNaH9B7rAnQ5lwQ\r\nlhf8lJm8WKfRP61ZyLO8m0/c/m7kFG41+gnUcgdxAgn2OSAnhtNacpX6wdmK\r\nt+W2XfzomwoRAOmZ4rkjJ45DaYpo65C3qHXjLH3u5AdffC6izmhxRJKipuu2\r\nUCES79ATk28sJOAbNM6wgmhTTJM1IYpaanPM0B8g5LCuViAwG8kfcZb7JOba\r\n/lGbtC651KULi+dkBfjPheNbBGQ7byI06PZK2CdfYeHmuY6tUsyuVPH9x2Wh\r\nqI8cm93Z8yM8iu7oVSTooZBIT6FSC43A2rOwkSxOyCfMnr/mLaAFeQxsaJht\r\nLT9wGTOH8Vquinr4XdRmMmWmDLxphN3YGl5SbeGUtZjp0OU6iD/eMRTm18xl\r\n4EplfA+j+vfeRdof4MyWsEoOD62bTkrPSrNu+QGgXQQa/5QHcL9NgbLlbzUK\r\n5yyMzrbqEesbU7bEyqKtRTyTblMO9zY5jLNJEty0P/6vOwJfK7HrMoceAbuR\r\nfPfGGXAJcttar41NwmzWj3QPR7sM+P0mqks=\r\n=PmFV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6XVs1jykZ9KkroUoJRPFHHPe5sWv8YzjTWrepo2WOQQIhAKbkFkDgKYGfXUZDXhwc/YkDeeGC8/FKmeLE19UmhAmG"}]},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.1_1646899424263_0.3493901175746654"},"_hasShrinkwrap":false},"1.3.2-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.2-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.1","@midwayjs/serverless-spec-builder":"^1.3.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"512274d013016a8af0e10eff0d6fbebc66cbffa2","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.2-beta.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-MIq+pXBMwzRl78DlkA64oHTzDyLwgPxraU0YuHaVeXUzXPd2qHKm1JKi3G04HZ3t/IGIa883KrFVEUPqni46mw==","shasum":"bf1edf7f5bfd8e921ccb8a1b9618543dc42219dd","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.2-beta.1.tgz","fileCount":191,"unpackedSize":412754,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGdazIR1nTP7v93jrjI7uIc2FKrg403SzXDyhmHSMJNDAiEAt0v/CtaJbmcoxHWq+Hoz48TD+ycRBbxS22qjZQgwjV4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiR+msACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrEgg/+K9I3qZ0ozdOcXOIx8ZQpzikBrLII4qZ3v6Zl0kILlfHyXBpn\r\noNx//hDXpmXc6ixspqTusvTw5viVYamPoiBnCY48oIllgzqqjy1QisN4CN8K\r\nme8dfo0DF+cBOKSXNZ+3VcHTINp0oymmJWxu2JUa1aVh3dQDwscGutdIZDzy\r\ng6umoKV7LLCvPv53LAFhsb4sn70+qyDlVuaK6UDrRN+LEw2Gu3yEn+lGwk8C\r\nE2szjsFikEFJRfW0Ntg10e1eerlY4z2O1ueRu0p1kRGA2ytM5X56GZhyc/S7\r\nDc3dcTwvWfmh2LjQ3U+UOiZPi5Npx7csG6gUSnqceRqsBmenZ1+Zio0+DSEv\r\nL2iE1Ysxd3wFU8GDt8ca2vLRxi1cSoUTPw4w5eON/DJrItmqdCYwwnT1Exgy\r\nkwomURzrv+lKt1VzxDaTsGd97Ae3lxq3txGuf0/yHVWcCvn2TD9YtjMexQhN\r\nkULfCNlWLERmtsk8RbjLMdF2nnKz+ny81ajcEHt4FY8cXBCBWyXrwUqtSQwD\r\nycDEAXxfdx5bJpN+NqnVoy++KAIdY3xIR4elNRrAvBa/5UbVTGs3i3eetDOq\r\nhs7hoBh62BxmKKweQ7d25Fg3DG8nFx5xCTL6xN22zSQCacWpxHpraGZsHrj4\r\nlyt4icKhAcI29eGO0d780XKIw08/kNjcisM=\r\n=dQ50\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.2-beta.1_1648880043959_0.4303225118121776"},"_hasShrinkwrap":false},"1.3.2":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.1","@midwayjs/serverless-spec-builder":"^1.3.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"06b2ffbfd969192830b0fbd71eb90a0769556bf9","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-ivHWyFNBV+nsZLx1pZ45c/jdz1CCS/hV/6MokOswncty2kISo9FJJS0wnvtcHyuZScC+xKSk2cDi7jl6HDHU4A==","shasum":"a5462c2886e190db8ad55fea8d96e4e167c98dbc","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.2.tgz","fileCount":191,"unpackedSize":413010,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBQhbglOjEwKonmSXWv78VGS4PoNLNk0O3yDYEqxKfS6AiB8/xUQaTjBTlgXsALx+nOEeHBQdUWtiPkUIXC1ybBoug=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiV4v6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqzqBAAmvw4j1RYHj6nuWznKfG2p4fa+ikrGGPgSkUeiAalb+GqNjqH\r\nykS6tit7ccHh8GTxAMH1YDRpMvINR5dctTZurv5klD72nFYIFxNrAd/KwTld\r\nbPnrkw99G170QLekacUqRWAcGJQIppgaHsINXg+yZDqXXuZXzDfA7IAUXz8h\r\nPkDiIFgpxs7TtBQj8MLZ3wPlqNUyz/McKly4cQYzrRWCxuHKApF0S6/ensfH\r\nEREOyoBbwToXy2plRdoUVDZWj+IVIX8thpQCMrzI0Li0zJQASotuCeGHerm9\r\nu1TBoX6xBWbLAuZe0dMqSXF1ozHZHeYTD325UyZMTdNKYHcne3/gggDWo4k+\r\n5AucsBGmcjx/gxD+GCjSHPMbs8iO4l+derl/Px4M/gdDZoxFiPx7hNMfy+7W\r\nh5wIy9LPqAi1sshefUo++xIzXmOgD8mKVBCx20lHWIN4bUA76oTUpmltIaEL\r\nYnR74Mb4n0FPVAbCBgrbTeC+iGTEswGOHfu6gHAAFg2oS/dQQsVKLRGn1/5j\r\nAYTyEzxDlX33haNtxUezSJwih0j8KdZYBKGpCEaVFYKI8xCNiuTk9dTTMa1G\r\nQ/a6YN/NbBhOmE+KV8vInSakOzxw5OuIh0oKGPoiJgsklQ5z+IlMQu1444cc\r\nS4Y0Wy8vAeQ3eGmKwA8HzEnsXSpaqbABXt8=\r\n=oufX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.2_1649904634746_0.1126470164588429"},"_hasShrinkwrap":false},"1.3.3":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.3","@midwayjs/serverless-spec-builder":"^1.3.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"eabcb6b8bbd9c0c7263c8c5551230598bd1b3e56","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.3","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-AzS5E5ntrgjJ6ZRunMWa027TOe7Z1PRRAaz5anKGmdu085x1dhLEleDQSuB9x/sF79K35p7II9ckiRUtkAai0w==","shasum":"0f1513c0b184cac02ff4bc416958f13c069e5770","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.3.tgz","fileCount":191,"unpackedSize":413170,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDzqF0VIU6GTn2q2NVK3tEMY+fdtTVhzvux4SNh3gI7kgIgTRiTKWn/GEOi2VogbyPB2HjqNBy5ZCvfgdhMZZEbEdI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiX2t/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr3Uw//aYdCeU4u6CN0cYhRQh5NqAPDaZk1J92VASgDsh3CH8kvRhVW\r\n3VELRKWj/wGy0+dSrBnuErnmxaWv1SRmPiN5/s5pZOPg90KD4Y37vs7ZSaxc\r\nOgTiN+amyHolxR8ELqNUHHJT4kawOqxiveCYSiWYoPgCky1u+X6QkfUvHQN5\r\nfAjZIdKtibqVzYgDLoZ4UzWpr6tmb7ya/MegApp3Sg+bf4ih3bRRTAQB2cqm\r\nPDHDk8wrG/3pXcP6XVkBnaax0oclhc8UEghfl9xacuyuUICnvN9ldPBLWvQ0\r\nKd62sWgeK/VTNxAVNVhF6dh94q5Kgrnr1zMV5+p8wx0rRYib3J3RDjPgkmLW\r\nzxkuzRTLSgJHouMM9ZCG/3OZz7emprH3je4wAWC9SeiO03wyo8nPxhEzWg/H\r\nT5r1X7c2EQqYa9TdZuOYK+NFr75uUeZmnbyhTCN3p3K5D3NBBNeJGAy14fWj\r\na5rWF19g3UkwT5eG8lmUr0DZ1/32qO6E2jduim5WTtQMH7r15XrscCVSF+0N\r\nsLW7ZeNkop6rOwC5m9E5+IZLBmPKJr8S62dFeUfKxzKIZ+yU42F0mbpwBdLN\r\n8AWU6v7DYfq/bLOhU2HVxx7g+rP2MOra51JYNC5RdM84GVYPVdrndugSld8e\r\nehEGA0pDwBCoCoHBCuO9nw71eLTlfsM7CK0=\r\n=falW\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.3_1650420607270_0.367926679424345"},"_hasShrinkwrap":false},"1.3.4-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.4-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.4-beta.1","@midwayjs/serverless-spec-builder":"^1.3.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"af10112a6eeb4de7801a10010031e66782861210","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.4-beta.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-6jsQrDP69Hpl6YLtGvqXFiwB8USZ7FTkGCuNiauTodSAHJ8vYObMhQwH5Hg2a7gf14c9kenPRo0CLHGXqGyE8w==","shasum":"e906d34ff2fc86e10c171d7085c2d2e928597bdf","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.4-beta.1.tgz","fileCount":191,"unpackedSize":413356,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/uKtztxrSKIo28RGDSmJVOlYsDBBIcdXYKEpjg9NPOQIgCHXeSeF8wJguoHG8mlaoAeGHh8qyyTnU4ZEgCqh8jso="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiYPROACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqEjw/9HYQn2i2UrZZktFjAmftS+cPSgc3DcE+88cx7TBi4ogg44mIe\r\nJf5DGaBNgufjqzxI8GcwPmvns+UwLyVLp645g71Gd57hRHlo6SXv3PxarZGV\r\nFeiYLSaM5zAglEFwLx1GHE/1lKdSyYL8qczvxBx0XG3ARtHVFbBhjdFOlfnL\r\n3BmkFvp4gkxwxu509zwSLK9/lvpUoYZNHL+na9G91ohMrBGF7xJH90soIX6n\r\n0F6pxpDA2Ua/Pj2O9ausOXwfT7YmJTZqmRO4S3zr4REnnSCGjLCYI2f1x9Zb\r\nV3vG3RKhOTOlfeiRIvPGjAAswiLLuWR7X9kmVmbXln3CXAuMcU+m2mKCf9fp\r\nR0XliBgBS+wCvdQL4SbS/Pyj/G0/WdCUkFFZH+vFE/E/nCHjHj7PS/D8pdtl\r\ns0LQsJU0AT40JKTWErnE/OkkE/cLjiMiekIpvCTgtgNrWIrjJKtjLf52BiPC\r\nVrhUiZq4AzDAY8PKrIhrph5ufYtkJE1sETTjHRMXgIWajD9yyBswu3etQwlP\r\n7L7I4NSrD5R4hyG5CR8x2nwKf9/RQCz+264YpKotfxstHgZsO45+9DDfI6ol\r\nCBtcpgntvd9zX80TKXnS9bNWVVtA5B7Bh0WO8Tvm5OKfPZgDKlNeei8Wx6VZ\r\ngn5F+JaXHjV7zfWRUPS5HGo/4WRfxHUKkds=\r\n=DkwV\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.4-beta.1_1650521166719_0.7083760464162088"},"_hasShrinkwrap":false},"1.3.4-beta.2":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.4-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.4-beta.2","@midwayjs/serverless-spec-builder":"^1.3.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"26cc507cf8bb702363c14735a7a523197c2d4d3b","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.4-beta.2","_nodeVersion":"16.14.2","_npmVersion":"lerna/3.22.1/node@v16.14.2+arm64 (darwin)","dist":{"integrity":"sha512-uv54xXu/UwvyJpUxxZUc4eoZfBVSOHKRUHDlvWsIhKUCRNtdThlydJv87XrLSbTFAtW9cPxHRXQEsj9nqPoh9A==","shasum":"b8597b87da7d8dcae2832c38f62667729b803d18","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.4-beta.2.tgz","fileCount":191,"unpackedSize":413635,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDokGxuvQkeVpXM0OBGn6264wYmJyQEnu3nNvZT2/o2CwIhAPYwhIUUGxlI/iVdvIukIoUcmnq7EBqiZZmgpJndbXZK"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJie1hhACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmorWg/5ALfdvyrb38YFUq1EZvHXLHyP1uPMUTUaGUGQyZcOkrD9Cd8H\r\nj/EyD532/RZg0lUc8uoCo9L/l41W5U08XSmLS9welAiVw6L0EqN9K/NT5xyQ\r\nGeK82gzzz0PvEiOe30rIQ3QgTdXScRWXoBeqCkTHYI3axuQZAWavDAMyvfDG\r\nD5FylIbEAZ0HDe2Ji/GDGe16HM94TdiTRNEk+a+B0qB8feVk0NcEMZV7K53k\r\nZU9xScMMuRepwoa8mKlQmE0asOQFi7KojrDDy1L2ZdLmYOwB56YlrZ+DIhs0\r\nnaevQAhCQAw78T8wEJOhix5OIOFdAJr7iNyReoIgvFq3+JRz8TdSr3fh800F\r\n0HEig+zjqfXtpvUlH93zTabAFsqXTBWlq9zhpxwEcopxxGfUDgmzjffCc1Nw\r\nWvUey1T2cDxoBeBUaJAzA3lEyOstaRgnOJ7eOkKM4U1gra4gDBp0431znnK4\r\naWWvx9tuKOcoOHrwM/eKRx/rrmVLcR42P+2jTfUSNDX9MR98ndwC3XTAsWiW\r\n45iQOALqCctRwGemsyuUuQ/A+n6A9/Hf11eVBcpRz5iTkGpnz/NzReZWfJj0\r\nPX0YOP8pkJrzJ0hyjzvQk3C4rhqxaaVVGeB48hUlxcNPhQS4HjYlk+Tzr+7l\r\nfGikFKWDHe+FWc08wT5osXNL3/EiqstXDBU=\r\n=G21J\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.4-beta.2_1652250721784_0.5510508952051703"},"_hasShrinkwrap":false},"1.3.4":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.4","@midwayjs/serverless-spec-builder":"^1.3.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c155e5fc5dddf6b71d07530115a0b194f73da262","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.4","_nodeVersion":"16.14.2","_npmVersion":"lerna/3.22.1/node@v16.14.2+arm64 (darwin)","dist":{"integrity":"sha512-rwTtP1BYKH2xjKGy235jupqJprzBuvYdy57mH2iRW/S5iw1qprluC0+kBNETCdECvs55JIApR18KhEvWs7YosQ==","shasum":"3845f72fb4871325f14e89059e78165cdec5062a","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.4.tgz","fileCount":191,"unpackedSize":413607,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF7RNmHdPxaqVNkub9QPCgXbnnIX9wcoIB3mzTDJLYjYAiEAib6+gM/R3Ma1voFM1bfx2WJ7+PXlWvu3Xp2uznNkGZ0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJie15aACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoLGA/+Nub0IO0Kxzfht+ZLyKdZfjeL4KUhGFp0KJAWFrkUA8OT3CBd\r\nLDOnMc537VYQe4gsDG3eh4yVJ7ql/HgJ+ox5+MkxLcmM3AzvBN9QYb8bIc+d\r\ncLwVVrA98AsSHPcBNZ8DsAeT2C/tRIEPFH4OBvKbEiqE8PgrXtyEaoszGZ/O\r\nYhKJl8e0b4KVORAx8uxNkzMfwRs79ehUddhSGrI0JaU3VVoQaQFApW+UE+S1\r\nkxBJpy1ATs6NARfaOa4+NX3gG/wYX86FU9byej6sFAig7Q959az/wNGaadA4\r\n8CXN8ji+hRxZfFSI0BwKtE5qvlrA1EqXZOl64QtrAWzzyCqgHtgY3jczXiDi\r\ncQGMjk9oExs5XsxU/PJ+beeOMvFQNJvLyt09APooAfpxzj2aVCTxgmlivIwk\r\ns6OugNQjvf0q0qoha3u0I+MMnCNXoWsJ0BpCngksqC6peUupJVJ3RT7jLlx0\r\nDoxoojU4uqewUYhBSzTdDeayeCMFIUD2ieY21QORgm2v7vZQEzOz3QjVN0lh\r\nH+n9xZyHUCkJ0Pa/FFom+LlPjqb+1HeCcgnxHi8LswHfYJ0hRA8FG9zNN8/n\r\n66hITUyzfocnP+9BaEaZad+GdACBAsbyVlh1lg1moEU4TS9CAbmh3kI9El8f\r\nipsn86uX2iJVOGeVt0N52mHoTMm8C0nj5GQ=\r\n=07jq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.4_1652252250399_0.4828452989286076"},"_hasShrinkwrap":false},"1.3.5-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.5-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.4","@midwayjs/serverless-spec-builder":"^1.3.5-beta.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"11419a5aeb5b7e934764c26664360b491067f264","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.5-beta.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-nH221aaith5zdeYMmFDGhKYIrYt6gukjieAYDVKm768/LYw+CN6CnYSg1H9sdGtPz55r4V/BbOXHMOAqs8QDKQ==","shasum":"d98b5f84be86a9af39deff6c7a925cc09f55e98f","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.5-beta.1.tgz","fileCount":191,"unpackedSize":413793,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqXMTRbmVDCpC2dU6uiOCWJjCvX4UyWj0UcYGWCqIQQQIgZdowuE2j5JBsi24Hki0uPzRS0L9FSjNGEf/HGUtqfak="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJijIY6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrDCA//bvlvn3KdQbQyx6ZfSJdBDtoJYQvrlbw2LYcRbn0m10uGF0Wk\r\naW3eMGia2Zq+jTN8b0i7ary1Vd3LifSbOktvRgrB13chsFLmLajOZTNAjAKt\r\n9tfxc1j0mmhdbDZerd04sAMiJzUFCqLvWyvg0oXiLjTYhzYPf2flYohGVfPE\r\ngoJTZIuDmn9P/3bQj7HqopowIBqbzvZuaUlcsnAZjO9QX658k/Z62QWgN+Lg\r\n9Cjp1zTOcouuFpIOcvk4v+CTC2fo4nNfyIYjar0VHAVtwYM6ZJ1wGURDiAOP\r\n8RJYabT23/yB2VUl/PErhiCyNKosezLcO0U9fccK+lc2Wlulr4DZ0R0ov7Cl\r\nxIgNRkW6vCY0eWauijvvkUtGl88hzSeQPke8m8TrZxMDNymcpM2u5XKzO+vK\r\nk9ZUCTr70eprV2HkFwdhB8EaQGetOo7ymY/VYTVwS+f+L26cZnerXUGE4D6p\r\nzHMSYbC27I3Frb09LEv8FFeuU9ukj3YJVyOqz5tcXVh7d1H8d4SRTuRCZsel\r\nZcS1RcGfOwsMitMBDECce+UE9+FUryH2MFOU/mkrVYM+3OVLpfzuSm03n++T\r\nCvIF6gW3/+z6lX+Gc0rYpO7Z3ywWcdMmPU6qRzn+pMEoVQw8LF/KOBEFrXNA\r\nWQ8bRZ1au+5XoB39PJZ5hQ0Tenc2uGR5/Ak=\r\n=wTg9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.5-beta.1_1653376570658_0.05795857972983165"},"_hasShrinkwrap":false},"1.3.5-beta.2":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.5-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.5-beta.2","@midwayjs/serverless-spec-builder":"^1.3.5-beta.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"98b1732d131d0d8826092fb28ebd60d0fc3b9948","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.5-beta.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-eBu5u7KquDnRR2fTxoiCUO9Ic14hhmIwg/Kud2K3q/52bpNHssB3ZOVjlt8GVdLHkUlrkCeSeUCmJ+wEQjKegw==","shasum":"31a182286fb372ddc642181d5cb5193ace128f57","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.5-beta.2.tgz","fileCount":191,"unpackedSize":413979,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF2E6tDhC1+hWrRMgorHXBDMVz6oQudI51gm4YUqw2SMAiBEaJVqZDmiLcH/IhN6FNnHZ4uSjnC6lLA52QKyQ9xPzg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJijImKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmptLQ/+PmszlZpjIqAQy18/e4UKQhDRgZrhdFktP/x3P6Mu0aHOGp2a\r\nRkyLtQgK2fosl91Q0Ph7FQ8GOoaziE7i7npEA2N9aKpQhJ5s/ymqlSEhMUed\r\nmU1rPbPyOJMi9oOVKZXio1ee/2baftmVUSWQF50SrnN/Ahr5BhAiRPSRQmGm\r\nzN2JnrkZ5v9V7+8P4yDFrP4JaBwfVbqpv/f0cZJGJPGjZtEyMUofcvwCLjXJ\r\nwliYPosMnABinYcIQpiK6+mvATDGLg3FDueK8wnXgZ/LYSp94pSwZ/ottnbO\r\ncUETVbADzVAN4PSMSmRetz+tTI88PolM6mgE+AW6Dic5Tu/R0ZbbCNqweZXy\r\nzfssYiL24P6PSwOHkLU14Hw0iVsMfG7YWJ6NzOKa18xk/nF+3CAfbOpzfRR0\r\nWzVZNGvaMkxWCXxw7gk3EB5cJvgynEz/5RzkTBLTRzeq/+eNGB5LtRQ20bS4\r\nP8pb0EQiRIisFAFlJpuTErRYzt/hifzJZesX+roHxBTUk8V1l5X6aTid6zxW\r\n3LnQWf7eyi5wXzQK4Z+4evar4yn2ssLBW3OCcLD8YUx//Y2F59R5/bgL/ksm\r\nkNmDwj39u39yQKmAuOZ6lFrmb/zRm7y0+vqGlgUC1sEbvuhbHzrGfL25s6Oo\r\nOeUCmMCa39OlwEK8czJSbIoLey2CehPHQ54=\r\n=o2O0\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.5-beta.2_1653377418291_0.6648474043115431"},"_hasShrinkwrap":false},"1.3.5-beta.3":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.5-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.5-beta.3","@midwayjs/serverless-spec-builder":"^1.3.5-beta.3","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"09d75fd3ddd795c3259c6c9f6add0ee7ce509f6e","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.5-beta.3","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-D+oRp4h0wt/DP0ArUe9MsWcs4r7/20+SLSq3jEzOkglIAKvSFL3Jb/DhB8Mr9a/8yo9mRcw0UbIU3zy7djoSaw==","shasum":"8ea24649e68444c318622f5a2755764592405441","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.5-beta.3.tgz","fileCount":191,"unpackedSize":414277,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHGom4FRMaFwNwJsFS523ABvTHT7SpFyic9Lpvk26AaKAiEAy/dKYP7Kg4xgpZ+VK9r2hjgr+Jh3wgK4i5j0dBoqKiw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJijdk5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrMwg/8DKThf23wFM1pCcFEeH1JGdd5zPcKSe99XeSobgqqW+wiyAt8\r\nf7zSP4Q2dQk2+M4/7AcL2tw/YqIC3FeS8BKWbI+IumwbyW/Hw4WoQoZXJHo2\r\nOQd4kmUEkemABne/rw5Nes8DSxKBH0NBEOSv3e1eL9zMSHobuuA7bdC6csuI\r\ngpzyAsPCLc99U6n7Dj/3uFQUYr6Wn7edv0vLDd7gCKbWOfvxbB/rw+WrxjN4\r\nTYwF8G6GJIU38z9aNmq9R5Th+d1pSENO9AkhaSETbMZ8h1poA0oInBE538WQ\r\ny9lBw3pI0Q6AXZOEkGbMDecirMXqr88bkOlcOcXEqz6fe4wrMxAaWKeAPoya\r\nWKeqUilr1tuysQ6SMIiPl92JOaGkhOaEW8/hci3CzMnO5LmmBVHq4NZy33D5\r\nbaL1qXF6plDm7nwsRMJuZnSYp9CRrHr9MKxkNBa0XB3pSy3HhFkYeAG8JQ+w\r\nxFF3A87cdCtWTokS9RlY2a8854Io21o7RNxEksQTpzNM/8SIUct+ApA0sca2\r\njJ8lwHPwl5AK/8yDOBtvzhlQ7uC2KD1VCHYrhTotWdU1SL8gC46lAAWNgoGA\r\nocJaLVkpodIQlCSv2AZqAqfNr0Q5XiTiqBLoTbm03KAqIh+VDyRVtBlaVetd\r\n8/iO+eF6WxxIlhbvqTPMMqYqwi9kGhfPTZ8=\r\n=iIMp\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.5-beta.3_1653463353727_0.914041093211456"},"_hasShrinkwrap":false},"1.3.5":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.5","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.5","@midwayjs/serverless-spec-builder":"^1.3.5","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"6ea76a7c528b9828420bb9ac4b061ff9b7f71d2f","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.5","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-SHtwUOXZYgDdYnw6KgTRzIyTWQR1tyy/EBAiX2zLFgurhLSG1lYodDoUjBp5Qg9v8yRgFpR1zUsWyG8Awwz/Pw==","shasum":"4eb0c07ba60ff1dc3b6c9389d54afb736314b0f5","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.5.tgz","fileCount":191,"unpackedSize":414421,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA9SH7iAuST9Llg0998FjKr2LgeL5SkzdwCGwboDzoSKAiEA8CbwiHyZXvuhg5pgq4qJJrUg0V9xstKePTSJjYM51SU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJijdvZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqh1Q/+NaHQziJ2pGM9EOoSawh+Nh7E+UyqyEigN8lESLXvWD3sIFGq\r\n5vvPCrIE+sMdUV9BMRdHHJYOxxlYB6ag/5V+NQc9cuJwHgGNItUhjM2vL6zy\r\nK8QzAbyL6ja9PGTvqXzfcfA+LnNw5WSXj9QY6tnSwEVKfY6tW8h6H3ww0JII\r\nD5dBfzKQD5d+i+9InY1Ouede7zDGCu9zJfPzOe5gIXitpP0cN+Hxl6pq3C37\r\nYML8uGwFwYd+RJSSUbGJv7H5e680yJIU+/bdapcaA3NvTed4ZrUIgZKS4GZm\r\niob/sjpMsIvD8fDtndpbb9I+AkFu5UFtmMI0HdHoffyGzdJpKZQgpZ51f03P\r\nFwI/Yb1MDJkg2jqGmV79nSJUgINANIJ6KtaDFWPklCn7LY+tyPfrdCbwnTFp\r\nPJ14WwDe8aM+a5akYVS3gHHAZDQZcYIb7+ipjH3QwE2N3MoBtFPwsubVAd5l\r\nSyl5e+QjtrV3KcKedf1alhQWirVvaE3gdxDpSGFF+DYw16yHYCtqYkekj9cU\r\nYekrmrmI3gaW8K+YGg/eTUK1iglzStI40S4AImc0vbXJ+8vZwtLwjkhsBHpE\r\n+lxeQcuwfun+V5kJTnJfWvqHAnbtowKtcbqBVq3NAT9u3ZSSOmXdXoyzkXcl\r\n5EP16ytzXXXLY/7JeNSOmsoIfWGvzktFJFY=\r\n=8t7Q\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.5_1653464025036_0.5940876551902241"},"_hasShrinkwrap":false},"1.3.6-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.6-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.5","@midwayjs/serverless-spec-builder":"^1.3.6-beta.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"b5c33320870dd0b8cb7dc6ab9aa6b2a0013f86a8","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.6-beta.1","_nodeVersion":"16.3.0","_npmVersion":"lerna/3.22.1/node@v16.3.0+arm64 (darwin)","dist":{"integrity":"sha512-k3UEjCAZHHc8LPEGKIy5CqFtkulVxaqSHrfh3wo9JDPngVWoKjZ8kqwtPq6bFIY4DjjGf2D2/gxV8IK6KKlpLQ==","shasum":"65d9035fa9d3f7e9c2478dc40165e5dc92ab35d3","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.6-beta.1.tgz","fileCount":191,"unpackedSize":414607,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDeh6+M9ryd2Qz4vlKStAJMP0HrGsCFdStcpFzZmCTinAiBfpYHyOPhc0DjlZNwk/eXmkpcW5kn0KNVcfeqYcNw52Q=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJilyLKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoDNQ/5AXz7mh7E5tXnH2/D5CJ4aY8oqD/k5YXwrbCLUwyYFn5Nej0g\r\nW8hbRKuIw+hiVjq9LCiFZYZN2YsaLXv1DG1Yy9cXmQ/syN6t4HrEl3TZaLYD\r\n9hgZ6BVaP4qTv5sgrfVZkTLDiryJ7ilsOHhdPpqpOBLWj1sxNwoFSog2Ol2x\r\nZDypOZI3PkvK243TLpREsSWNNNMItpLDwDVLkvLC6LctFLKOJX6t8SbQTY4l\r\nK38kzmGFUZyOIDNVec52rcTQs1POjpFyrnnPdS1Y/aXk3Ydss50tKSp/DJpc\r\nVzKbGssKIPS+qOOaZViXqIed80yJtZiLNKR7IpGt0qZw5xxSNw7hdHtgZSws\r\nt/qXviDHhpTBMxIg/eCrrXMRfkG+Hdrwqv16jExiABB6AQpJRd6EgIY29gAL\r\nW0FnpTcizeofG1RPQEOtympfrIMrhkoShzvxZeMLJvTyBvBXRfhuDpPidnco\r\nRdfq0vHVLGwVijZfsw32mCBEMFF1xHlQddIFHkFts5bROxXWoCvjCsg5y1ar\r\nHNUabwqhJATbv1tcNr0/Z0SBT0L48uvQGFsRCwekH65u5HuTM2vbygljAoU4\r\nGOPqEvKmKbgAprerX57oyS20NQfo+mb4gR5DlaXP4Z5yd1HeV8NKem0ksJKA\r\nrR/R/uJadjkjqj6h5hiomEqzt0BAas7vN9s=\r\n=1FUK\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.6-beta.1_1654072010418_0.8473246201669888"},"_hasShrinkwrap":false},"1.3.6":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.6","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.5","@midwayjs/serverless-spec-builder":"^1.3.6","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"e4734e2e0d27f97e6780748bc58f27ca8955102e","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.6","_nodeVersion":"16.3.0","_npmVersion":"lerna/3.22.1/node@v16.3.0+arm64 (darwin)","dist":{"integrity":"sha512-DKZirls21Ko8P2zs9PZDbmIz9kJPirdZFvEdWgE0DoqTlvFFObaMpYzIA5CbepEEna7wAGPGQ8/jIg8L77X0xw==","shasum":"f851889556bd53f0013f246ce55d817a4a044ef7","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.6.tgz","fileCount":191,"unpackedSize":414872,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCO6tYrEwlHHwCc5qI2rxa7CbXtPx2mAkr2gxQmwdLcvgIhAI/hYGMzYhC5UZSY2CYXrWBGEePpk4NWtSbZShHEXNdL"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJimGRyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrhww/8Cp4Jk9IEPiDR1Icnqd251z4lvQLXSacBFwRv89YXhhY7becu\r\nVgHhNSQRkoZ0+J5bDU30NajSOXIRA1EgshHWlly+Ed0RPYyqRQtSNVe4B8Dp\r\nl45l/+9sXv9gpYPLMkMgaFkwrg1+hMrRHLzUPWV5OOzSGlkPke8lB0OwIXXZ\r\nHm/kCjfgA8kTo6VnxMmeT1nwqeEkJaj+tGQxf3JAO+h3XpTZLz0VeTfZoDxI\r\n9L1Pq2Vf+j8asRqRJJv6nCfAPfZFoyZzw44M45MbRyujwKnZ8DvHWL0k/0D6\r\nP7G25zDEMM64JZr+VnvroBBlyeGAG8rZNqWnUNqKDw4dsGsre2x1oaxsL036\r\nVTEDetSJ37lupXltTb8r2VD9IGz5foShRfvyEeU1jnDOxXsrCelAp9/zTscP\r\nKIBqZNinGt7OLS9xIfb4qD7QTdNAY1nN2QWo1wh6a/XxT9Q+1sTHPxEVdP2q\r\nmf/ngqPcAsR64DIDHU+3mcbYyZqdHfaZ9ZiGPi6l1q/F8WJQd/ki/vfLcLR2\r\nAKkwGyn3FqUNDB3MaZWov+brjA5siH4ILcIVqhLTIKBoNq+Wv7OaNNmKI4IB\r\nkoOqmR8k591+6DZyhTSOELngoqITAOJqWQLTzFgqecC4KEm98hWp06sJi1UK\r\nCrlc58aWJ0cU4fltmUyDj+vhPfPXpD82YdM=\r\n=+voF\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.6_1654154354425_0.1524050483676509"},"_hasShrinkwrap":false},"1.3.8-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.8-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.5","@midwayjs/serverless-spec-builder":"^1.3.8-beta.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"7c8525fab169c672d0e42e57deb1aab0ee584fa5","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.8-beta.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-KSaXwPXRhVgqf09KMnAxQkIpYn5OENsDm7Dywdy4jwbsP9X+U9KnfWVLFUvyP58CG+Ueu58or3HdEH0d6jUQYQ==","shasum":"0022b9161957e254318a3ebf9d519727e0c9da78","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.8-beta.1.tgz","fileCount":191,"unpackedSize":415058,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGLI+jKM0e91MRKE865aSjp0g+UM7TxVDRDgs/5PT9z1AiEAp8wwBaZXQar2Hk3o1AWWImaxVgJ4nsR8ZY4e/iHNYi4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJizTAgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo6Gg//TrtH2AocwtNn9dhD713demYBQKY3Q/H5T8wLM1qq61WyAiBz\r\nm52hG0yrwhjWuzlJ6PhMUyFU8h/FFVo5set5bntaI/bTHCnxUHZQfxHOoHTC\r\nivrl1bG5kdAXruW5NztVTlIrgan4i1AUVMFgV60NvFCAedRy1dWUTvCILKnu\r\n0FJpTQ0Ug1QWNcHGDpMDn5Q21GM39ESry/esz2OXL+NkY5SZmMobmF99vyI9\r\nB664BfBoVdv1cppavmkK91HyB6jS0b1eoMVsQVu+nCC50xhw4TP0fYwiMqtE\r\nE7yiTIK+aQioGxtsqEhEK7vfQ7GeQOQ33Vy+/CjwNVlCrqkY9RCnLf7h9pGl\r\nRyToUwd0jC9fhg2Cmuyv8K6TTYazqIYMXimFjyzyXlmPDcTYsEEN70gnLOiG\r\nOZr/QiCzgMhHd8gx1/qFfHnx6PEklGZ0nEzisUTW7K44Xso3xgd2Gcqre1DO\r\nzLO+OilC0rDOYwXWkh7hvqVu/XMYf7LCMMBhz0oi5DOWyGtBI3heTf8P4UM2\r\nhwOd4A/eU8TKrXwyIoqfTu0Mq8sPsxRGekMCZDEuZv/XpwjIohJj1tjShL3u\r\nWqRT8BKKETxyToCsytfKM7bP7ef8NFbK6KcocMQUx1wLRUp8XI93NVkxIGBm\r\nTp6eS4wYUja/yPaOGQdCJJiC55yDtHVJNA0=\r\n=0RUa\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.8-beta.1_1657614368706_0.4832251630655182"},"_hasShrinkwrap":false},"1.3.8-beta.2":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.8-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.5","@midwayjs/serverless-spec-builder":"^1.3.8-beta.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"f59c113e201d230938866fd0c54e23b4635e3a6c","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.8-beta.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-w94VQKd4Wcy2tube3NP//+kWzt68FnKeh1gjXiR9RKofE2EhJCLKpG2ICx0pp6O9EsTzj0fSR1CAwfxrt+DIwQ==","shasum":"e25dfa060a56f876e31a4483d8f0e7c1345c9b59","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.8-beta.2.tgz","fileCount":191,"unpackedSize":415237,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFH5U2IysyHcVV6tIci1YSAaIkV8LGv6UYAwrSWF/yhzAiA2G8uClPrz4aLfGPhDmhZBMkMmfk+GQFzNCCGB0fkQQQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJizUK9ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoqfA//WuPyzhTLXTwl5H+Lvda/AXP4Xwibd0SBkqcS/eLLh0/XXqSQ\r\n8JAo5xbkl9VUPb59L+iInT4iCLR6jdoCaBl/I2/3GxXs5vBHis95YkYQUjXH\r\nCAikhrOCffsgm1NaifJtG5MonFy7W6dlGh9dm0I5Iq8/a51KWpOea3OOJ/ig\r\n1V+6bo2Afpq4O7/hwFOjjo3ZLNys6HUzqWNqPe5MAJLSN83HFFIoVppU7xnI\r\nxuIAcu4JUcAabl4zCnpbIFNF4mNv96L1W3fdN/5TtmWUcSzT+wlPhm/IPYXu\r\nj6bT2wh/b5roI8qIFXilDHPzefEySb9b0A22bcCWc5822rKF0+cRCXO8vhvO\r\nA97Sm+yRi1jrYMhVNmYTM810/rf2VDz1hEgg35Jev94jlqjt5/eohy+bkWUE\r\na4rNDoC6DjoNJey6uMIh/hPDm4yUt3xQOhfe3ymN3XeqykBJm5Lk+z4w+eM9\r\nR6RFeIQO85kNonJ4YNkwy4bppwZIHwciqbsfbfnh7kzqXLaNo85BXVRHc05Q\r\nXBEaQ6waTuDfyEDDUNAiPrXeTjTdltNqqViDtb5gaononj7a5IOdD40cX4ZG\r\nHqJlaqTEYpFl2bRO/OZx/5bv/bi8q5Aiqh6Ne9iacztB+OHtHBYrrY5i1K7e\r\nIv9s1z46qfh8HXP54EqegYDRgocqabJUwjE=\r\n=F9fC\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.8-beta.2_1657619133386_0.6915386511890529"},"_hasShrinkwrap":false},"1.3.8-beta.3":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.8-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.5","@midwayjs/serverless-spec-builder":"^1.3.8-beta.3","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"74ecb4dc44b745e780c4e351c22277fc2ef8f16c","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.8-beta.3","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-vzMhubr9xl4STrnkzN92wHBncJxaWt+3j5o+oKoZtjTL0pqeCSm1CiC3QVZp1KZdvBfvwAT4uI3i6cOGBtIAHw==","shasum":"12448c924f604642d3803af24b2550c019afcb7c","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.8-beta.3.tgz","fileCount":191,"unpackedSize":415416,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICtDD5zXU5OjULUGSB8lFDCoql0fapc7tMGboRboyD4HAiBok2WYfdgm+rb5rB2NT4QFage2MrK7g9jdjDYF6UEomA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi0tZmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrr6w/9G9wPrRY70s9HeASBLM9Kj2IeBKQGXgCVJehxXZm65eIa/CAh\r\nCksmgiT2YDC0Jqbb1v1Kpm9pMHS89pSi3CJ6d1nRaJJuTkr46jGBCS36evJu\r\nufh/bzONbHjTchrbD0xsLzTX7sfB7pqcBMYNZIjcPjHB8+qRtUsDlRR4iq+G\r\nzjCg5s2zg1cAOuzyYKdO5MC2sFwL819VB4ip7+0+/iLQmyTTTdGA2PX76PGP\r\nCg9dkwpgUiJBvtkX+jg56zOPE2+GvmT2TqJfwL3NE0DxIgw9iiNySgVhg2c/\r\ncrZ3lQd5I1QxJuoDNIPAM1+uWp/yKGD3LiHR85GDRNb8DtBidA2uq1V1hV/5\r\npPdwEo7CBxHcJhE7qbXDk7peL/hR8Hdz80QqYHC1W/rE0q6Cl7mJF+9DEwPF\r\nVn4KRcMizz5r3GocbGfJZosC/+4V8Hcq9pyBcCDMGbk5DQipv8U7OvZ+Dthf\r\nAOG9pXPnTD5ssr/P1E7vnU4dxVW/6/RGG6RYKi7oAEwSlszlwfA6wik1OeNg\r\nvKjRiimIcWbzy9sWnGEuhmFbtY4saxTmkKPLRaMEBNF9ICiovP1oqWc3/fVf\r\n0+RMwCj5eRBL4F/Nym5ESICxAy8EkT0CsZmU36Eq5iHmuVpsU3gz/J0pzhwQ\r\ns4tj2cA761/1hsVJbZBR/TM+zlDDECSAUQY=\r\n=tFu1\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.8-beta.3_1657984613965_0.5644943563963547"},"_hasShrinkwrap":false},"1.3.8-beta.4":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.8-beta.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.5","@midwayjs/serverless-spec-builder":"^1.3.8-beta.4","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"64af956648b83f97b56ce00c4e8fd49af14dfc6a","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.8-beta.4","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-roNZzp4v8++RU+RlfmGDbCoKWJW+shhiWfP8+EJA0rPTpsxJQfl7QBy8Uq9PWUvhRdb+RgJPyboJK9g+oHKnYw==","shasum":"d19c7b3f4d02ee09c2136645f10b7a47b32d4ead","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.8-beta.4.tgz","fileCount":191,"unpackedSize":415595,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFzBSyixjVV78jnVnc3cZe2xlQYuq5bcrv7zFMaSCFEzAiEA69td37pb1ljJRqffI3/DkXtgARzqjzEh0Q41XyghPzg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi0tvNACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrpZw/9Hy7LFGmHUpR8GyIjrW5DJeTvqF4+C1GKXG3nuMKdSpxT83v8\r\nggRE3SiTFPfXNy4d5MXg12szlQwJyL2ZCXYs8kh6JMhh3VHSOrShKumMhlZX\r\nd0MKKLOjgrrKsgCQXuueAk98HBUQCWvfWOSkdNWztcHPxURMNDsFBiJu5WLT\r\nQdSLqicinAxynKhikiRDUUvRHaCHlz92pBRSqDv6Yom9GP4rudkEWP5CeFOm\r\nqDF4t96rJPbeFdmNgIYhZ4lQSaGbW9ZXXuRFY/EcavOLJsSZbO/fu6yVw8ys\r\nWNR9wVgRPA7guJANm7CgM6lZA3i8f2OxnezAjnwb0HVH0DPrsX/hrz6RGwxa\r\ncfbmAwo5RsObz4XOaEpDokJhZFAUieqM4UWCClIPHTn1YrdCtTzKARyNnpFs\r\nHQifWomoswHoKvdBr/Feimsiq9jXTMcyOvvG4LhQQmK3KA5ySx8GLOj4RUh5\r\nPBC4TGMn1VPtj8Z4snPmnbQcMFrs4z1Kfq41Me72H/dqe4wAXi/zwJMVmcyv\r\npTF0qoL8MfAiFswq8JH4t6WeyrUeGRz09/IyL3aqNbQ5ZJg1V8HkZAjpi32p\r\nG/MlodpiSn5rQqfcL0hToycf1xvLsb1pzjteVWqWFyhyklYqXxYloQSVqcaA\r\nScBcXTn7Mzztf2/tBsZfpMHV/ZJTs1CGg9M=\r\n=Kg9K\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.8-beta.4_1657985996838_0.8318069184005386"},"_hasShrinkwrap":false},"1.3.8":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.8","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.5","@midwayjs/serverless-spec-builder":"^1.3.8","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"2ce7c9eda866f614e450de6c49061fc27a11077a","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.8","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-7rT1ctTc+QUdsR3+wezTOmnmWBtyWXVeC3IVoRixa5hxsJZynz7PoqNdwMP5dHl08Laxb+LZ7eE7pt7B1rGTag==","shasum":"4487d18b9347aaae9b7bb959c1ce7874059c8764","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.8.tgz","fileCount":191,"unpackedSize":415848,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZAczi8NvrrjfJvSrgWTJwqqYWPvM9yAxI8eTipR4CbwIgR/zbUSbx9De4zYrDFEUlaFxqD42ymNcwBiilE6u2KZE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2PjPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpUkQ//RBV9OQSzTZgzaLHaLg/3qD0AW7Iw6K5EATHJe4r0iBHt/Dqb\r\n5wgEcOBCIgTdksGXA4nvn3ycO4W5vWxmew92dgDLxfN/1vp+ZjN36u2vP/9M\r\nwpm2pTb4ZpksmJ5J3AMlc+icwmzqjQxlgajCQCeYG02WuHK3IxQ0vHGygLOM\r\nsLzbVy4lAfbEjhTlvO7r057q7qPzCjg/9zdvHnvQgfjoEoml3dW2OLkL50kV\r\n5pOxSK9COlVYP+l1griPGZCBuZovvPlKWydRLeaOeqk+NaeIiWNJRL7dr1Zi\r\nW8yhVLi2ZqHfiD3lsEDVIFDy4HTWXO8tp9F3HAMLMBJoAYNmvbWZ7ZVfHlLT\r\n9NUjJA3aevJCwlpTeKz6GNoEDiZt8N6IBsZJ4v/3JwNjpss/cMQ6fWffCNwe\r\nwudxnQaj6McHez9avO4DuoE0XRVoYp8/1EFfGjtNME1IJo0O32PbXpeHufIy\r\nTQmdUyowVS/TYLLJQNQjg9AmI/0b4dIC16p2SaVzvVaxKo4CgilSg8Lc9ILN\r\nrIzWrJhUBvFNyNZl4YvR5+WCDtVnje71bQ6GwWdkY6yPagVpur3mmGcnAuAt\r\nXni3CsB3uhbLlJMnkYiEVz05K7jYuhANueZ/FiUiqSWsyI6WVD4xDOTNlz6u\r\nlxkJ7atFr6NgpI/ATsBpc211KBuo4fJn5Jg=\r\n=Qgza\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.8_1658386639091_0.042493452475449445"},"_hasShrinkwrap":false},"1.3.9-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.9-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.5","@midwayjs/serverless-spec-builder":"^1.3.9-beta.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"bc3e22df73b5a4eeb057be3ba1ea4c5ae29e6475","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.9-beta.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-asWr6Qe9NVnwy4/D9hi9eW6rurm9R2nZRYDxURoXbFdn37nkOkamFKP3DFLQmTwQY/MMoUgYJt6AoqTydc6pww==","shasum":"256fd93bf9e4a49d903d7cca46cfa75acacf5214","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.9-beta.1.tgz","fileCount":191,"unpackedSize":416034,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTWbuOY1lCUGr8YQrZmMAB7AicYJyiggTEuxq7GCgfewIgZkwhVl2UZjUyGoV4CuxowwWdjXabUt0mVrT804JRHLA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi37NeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqlSw//akhpcIfNCXAe4xuTaZ+lmsCox+5WWKOKx4yyAJeKKPI0xDBh\r\n2d05ck7g7M0+sAdkPNgtZKxVnx9wO+FAg4Fjl4Xr6Jn9YV+uCgwqXeE/lzOA\r\nHyfJMa+NJzXkUjAFDkgVaLiP7BxqUp7Wa7xCrFQ+xkVzeLZM/b7J1XI59z1j\r\nPcTajpk338e0a7GDz6Y971EIYcQXz+j0efI4pxAYjg1b9j4vJkY6OHmQKHwI\r\nCk3CjKqlC3r8Oo5yv5+UbQW7hqxue0UNvaMx65t3vcsnS5jczsRLxKL7E1XM\r\n8u2EO5qKLiUwvTwD+iAaWdc7cjWAgnvvap5yk1lIStA6iZWcCqt6gHZY0UcE\r\nyMrJS0+61Kj+zOXdQc6I/gbWwWpYXIMNfdtwsMygINyYUIFgITvt54A9jmx3\r\nZ8dxvRDwrS+JBmmlVIxBlqignx/rP990LTWQEw8phZHj2AuHiOkhVQ8Pd4u6\r\naGns6zDYKabUuyMcOyt53idA5I0urLN7L1JIudmO1v8pBGzYjzUrDJPZV6Aa\r\nH64TSP5716c27yHbc9YuvgKtxgrNkd+DD9nsoWsyJvpWU5sNmo198Fdvlac8\r\n7KLvAUudufHimYPC8o5qQoYaWVoZxgqi/cqy6cUyxaNdn1lFebilt6Wm2R6D\r\nSxwM+6IXMeqIwSeQxFS559b4u/2pM9NTu2c=\r\n=U96G\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.9-beta.1_1658827614448_0.18957457998830707"},"_hasShrinkwrap":false},"1.3.9-beta.2":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.9-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.5","@midwayjs/serverless-spec-builder":"^1.3.9-beta.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"2e691e7f01c083b2c53beb50aa4854d1bb981497","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.9-beta.2","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-DdaQAs2Lm/93GE1kSBSYq9LhXjtuasbXLrTLmryWBtHwNz4N6llT92J+unxHy3fshsmuK/E37LlcF39vYdRW5g==","shasum":"bb62dcd7930460aabe704bcf499a72697c6fbcc2","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.9-beta.2.tgz","fileCount":191,"unpackedSize":416213,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEtISHcS8a3LtoAWq8aitYQjqUCKh/3nzfR1KjmglfZ1AiEA+UpZ8WQwn71PhVAGhix1mC6RceDdNMnTl+kqhCxaQfw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi38bRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqE0BAAjOAeGcTA5eColaLb874PG3Xs3ilX2xkfHvpT7xxYeZZkRmfH\r\n9y79PE1jwo6pPc9a1140Zp4T/MZcF1d/uo2K3+dlMccWgXuenBPnZHqaitwh\r\nBvh/BED5IiPZGziy/qfmSohBI+1+GWzJAvAY6tuJEdXf37tjN7vmJzwUYJHJ\r\ntm2dBjg65saY9+XnZeRf0whRLSFjmhgXQ6GYMyyHSqcUB6LNBSAmEJ0IKA23\r\nNzhOmQN4gSJ+IlmrChxU+PokCim6UiHivYSBACPLTexFxI4L2W0cykC66Abn\r\nUsxm2HM0W05ZOz5r2da0cbWfP0tnp6lgajsOkU3ZWwJwfzxlp/t69qT+6qJB\r\ncxdnfM0iscHDfL6SpHDj+Y7CPI0Y0Q1rkzFrZn3ttTBns4nvl1A6STquujT4\r\n3tgiOKEtYZBx/+thfpAuzOjD/Z83ZpzY4zY1EK10T0g66FH+gUzUjfdoxA88\r\nTffK/xml1BDOYY03wtlGl90Dq5uit7T7WpG8sN3fVd0668sN6XxdhBrw9ei0\r\n0cpj0GUy6LLSNtlTaSAjGcAuFRZTfQixOx2pfDGsu4DR0Fx/C0J2JeTHuxPN\r\n0MJOf8rS0JRVXGh4nQKB822Inc1NkKjrdOEkyr1SqVJFrtgHoS54WnUbkKI0\r\nb0XGeJbPsGGymXv2gzsuNd+ecG7nNUBtfDE=\r\n=XVTq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.9-beta.2_1658832593259_0.642716062689912"},"_hasShrinkwrap":false},"1.3.9":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.9","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.5","@midwayjs/serverless-spec-builder":"^1.3.9","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"1567528535987d5884079bab40974613da0e8171","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.9","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-dJKdEvDaiSOsjq4IrbsxnHTEq9HPVa8KC4ASGIgH9MoB6oj3ZdCmiFT6lZQfUwa3InXYhFXcCaGYMYC3cDfwNQ==","shasum":"971d2a1f3af0d3da93e6ebae3137fe17b59d3f21","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.9.tgz","fileCount":191,"unpackedSize":416480,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCURVRa1mlAI4b8jlKI6iNnyPMGAMao7o4oT/ns4Y6+TAIgA+UyaH/7ASX251QrIYmqs37icXvjx1+JMZS3qXUwErI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi4MtTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmogSw/7BdUwRwAinlkcdzta9JymwIdKNzMHYNgLTVBzx10CgwRQn1Uc\r\nlGJ27kqSOfYPLWzi6zSpUD3fUgS/vOxfUi/SkqpfYKxltWEsp1fTUK7bvu4t\r\n+ZyNu8LNjw3pzrHLiLeuJgrJQSEVw3DLJ+0a9w5NBcxrTZzojaKFLXrLaEwH\r\nTid2RViekBVSodTUOdEYwba6uR4HalS3xEkpGrysNZ2dUQxafElbC4aAx5uz\r\nZNEsaG3iEOHWCASobrd9cMLZlF9aU2q7/U6iIAvfWr5YVdkOqmBU6lzJpA4E\r\nLAwLHDX6aW2+OzlFhB86Z0SA5Kd73I/0hDK+/P0AsfRyGXywbl/fkdiT+P+X\r\nINiQEhFWuPq+TPjFPRJh7cINH8/y+sU028pX031FZIhf8xvzx5NrwbhybQm4\r\nBWoRHpCBRNO1t09R98Xdw3elkHPDc7te9Fdwlb6bdJJg0gTagrDUoWUZfgAz\r\nYeG4vqdiancNfzjb3RGp336ItsnxdU7NZihX/uowqfG6A7C14LVlcrko8xUr\r\n5P57KIaDaVydCAZFarPKMvwwsKteNcLVHbs4V1aXd/B2G9kGWR1zyVZhz3jG\r\nXNDY1hpLNFmhfyCos+9ntkvA1V1a44K58fRc8UpmCS0Y6qBNqf4tlqgFsA8O\r\nOigkpG/TWeIRFMuIaXcN5eE+jMvsLLNww0Q=\r\n=xHUn\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.9_1658899283603_0.6978041780981905"},"_hasShrinkwrap":false},"1.3.10-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.10-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.10-beta.1","@midwayjs/serverless-spec-builder":"^1.3.10-beta.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"~4.6.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"222c8f8cbf09da7f6a43a36a29fd32d7634e8760","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.10-beta.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-6R9A0KhkBbeLFJIIL8tnLOqDm0QyikCxWb2jNf//R1SqBk88OG8xkXprKwQfoUO2mT2+38Nh2ndha/r1utsQ9A==","shasum":"54d975f3cdeb699fd0495c2a00de1c5aab285b2f","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.10-beta.1.tgz","fileCount":191,"unpackedSize":416764,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCROXfFODGnAEpOnu7EdRdSyDFGn50+47sqS2SKrgof1gIgdoDe8mSbJh99cRLYPOlODWX6Zj2A4zI1V16XTn+oVmE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi6jutACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmplQg//VfTEjAVjy8WQHyuld0qJ7fVhRdcmbUhhFLZNbxw50qiCPgUd\r\nDYcYW50WIJo86EoxubZ/Zf/SGQhBietf1bxH5BYerpGJadQnnAMTGgncsuJC\r\nhMy2YWAizHtwq1Ee7apJBj5uSq4SYHMoMNyLTtFhPSD8SmOW26qa63tx+tqJ\r\nPQO2HstKoJnYcFRJvLQQ7OoZCKF0Yp0+G4sbk3TRGtsf15m8OT8t2pdA2oDR\r\nAiX4hIvqsSaACr/A2JL1nkpiwDXaW7xXCBryNv6hE7P21l4x53sOIS+FYuMe\r\nHoQachXcAGyELf6iIQEITrNGk5vSZYM2EBzSYjZcmZkOcD77SJQCgqc+CqEe\r\nQB8gqpxlwzPhlIUmPbOdHUmW6N3JjO0JClIJQDMpOg7QJxCQUEyWCktEV443\r\nqpVf0ioHB45x18HQBeJB9OXFTLWw7xvACdXPu7Dr8Nxf7X/rkUzALsvOnklU\r\nM/bFwIEn1FUPoEkmfui0SMgjFMJCtVySBxeVy3YhjnE2j+LZkFU743SBqMZl\r\nBpgYaUjPwYGpTfsjTwnRA3PGF6fWnF7jpUMzq6uqBGMd8EGK4lhmhk0iDwh4\r\nVJiDMzgwA1RkeMkUhKMpvZ5zLRUpLcyhAE1+r1qIDLYJKF9zZPkfDFRG3Xjb\r\no8SE1ZAEA3PjeSXgJq23fZLKkXlNDELcFx4=\r\n=kq1l\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.10-beta.1_1659517869540_0.9190396617447223"},"_hasShrinkwrap":false},"1.3.10":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.10","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.10","@midwayjs/serverless-spec-builder":"^1.3.10","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"~4.6.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"d1efbbc188da05a027086264b7f624675601b6e9","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.10","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-VpqbWhFaJv19haiq5s0E4kLJcOBQ1YvEbcMweO9RJFj3oR9/2hPoT/xxkZV6Lr6SiiWA9+7ZjE2ZwOmn0n43mw==","shasum":"8c8793baeeb818ce7300f9aa3d13a3e06b9359eb","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.10.tgz","fileCount":191,"unpackedSize":416903,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWNJzhJ2zCQBGYNMoiEqq/jk/UGpPY9FHxd7R/V162PQIgSPujdspWLkHP3BsfCDvbA548vjel0N3vLDZRuTOnZeY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi6zh1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpZ3Q/8DxaWfStYRv+uBeuaosw/aV99FqH8vtLHbaxRwwJQ1/AyK69V\r\n9TITfw4ZSe/blE2C/EceEzObu6yORgzakbTuTaHYMGHaa3BkvI7Xh1xpfn1l\r\nACRmJM/ncurm+gORRjdAM5bdQPh3dIqCSbHVA8tcmeYHWXZ8pExEVyvXPNU1\r\nksQdxXlg2VxqBsKnfgZrmoDROV5vmILPkaWeFyPXSqGunUhksupv9DnRqt1v\r\nc8CpBB/cuQdwVmwimsitnq1gMMuoIBqo3SYIxNytGJAG+g1V8cDam5RP210T\r\n+aC35ZB3Vynycr/M5/8DVJcadDgBrGnfXR3+wsiuGqH64F/z5joI2du5Cy63\r\nSZHDwmrTyyzAux95LzljPZgb7zIaiRAPgeBNrO1Fg5I9bbQCD+EaVKdc59Xw\r\ncBDPof5Np9UoL2v0pzzwo91g+I70/Tdq1S9GWXqUN/Avarl44WDRbNuEOVMH\r\nhheBWgYJ4uMv/ati3oXP8sBYGzdwBIjzv5aijevRuYvv12DPBqussrYbGXRj\r\nD0gR6OIP2c7qIGihFdnJIio+P7XO2LMThCCTIHmSxSSyceg0m5AwOfcCxJiP\r\n0Wl2Xeaduvc59WS7fECam9+hAS/ezWXdEfFkUx/GEIZv919KMz9inUufKMxw\r\nZQm6imYSYxy/p1qCVPx9N4KBezAQfFHJllk=\r\n=Ccx4\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.10_1659582580957_0.12876441302757802"},"_hasShrinkwrap":false},"1.3.11-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.11-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.5","@midwayjs/serverless-spec-builder":"^1.3.11-beta.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c68e6b1117ab4ac9314ce180d76730dd92fc2a73","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.11-beta.1","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-YV+ckSKNqIFLGCN6EONYXOdxull5tRtJhtqbryQr+OywA+CesFY77Sq2/ez3Afb2ZsYQcBw1egG6DI/BcZBbrA==","shasum":"33593eda8af1499639e4dd2143d70341bdcd1fbd","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.11-beta.1.tgz","fileCount":191,"unpackedSize":416670,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDim1l+uusppgRO6DgZCzyhnMDNWyh9O02S9RkB+48DrQIhANR/LEQEIxBFp0zYxr5HA6OjbEGtJ6oYEPlct6ZsKqGd"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi65VgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrfRxAAkm5pgMGOxxORHdcjV3cOmp8PHfTY1DW+IBKYjvMZrH3232Ht\r\nljHWtxb+2cu2REX95LpBnvV/BenfvLkmm59V1ARsYdRep9WxsKc3jBIgbsov\r\nvFqPNKn8RyrTI5kx0OxNMKuEear+HxdgLADsl6S9GeMSLxQSgmp67s5KAnBH\r\nbFuPTXvRYdlOa6I5roH4h/ctlwWge1q7vMle2U41Ci7vx7YHZOJ8IcIE+ora\r\nGYFYEZ3DOWcCQk+DxqXfdXcU9T57SLnC+e2TyWMefeWe13wmlFZvrH1+utse\r\nu14DqziShOJrhGzlsEt1vzy3zZWwc+sfSCyP7eA0S4cM9gtU93ZIIquo19pE\r\n8Ggh4CtIoZ6iVand6Y7bXwwJCVTovNVE1MjoJa8rPPD+FYPWNYDcCTt9GCE+\r\nbgjYnz6o2i5YQt26rjPrOgDRKpv1whRLkYx6Zm46SFKT4hfzj2Xss6bcBPlp\r\n0HsUdWPmbbPE1rtDfM7eR+smVxcEQedjCSzdlZoBsAOVD2UpHY/R8N4/nqLH\r\n70K8LCFK3up6+juLpCyNAI+e+R5HfYZS38cWC7ywjpn5yNkuX8bMuu/bZmTu\r\nqnINhxzQA9rAAMn60TlbnE+89nyVeBF3xJQtF61EOKepcAzqkgpAWNo+8Ds5\r\nwrzHBwMJZwAGXDNUqm6Ix5BgtkYKYqUo8Os=\r\n=H67E\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.11-beta.1_1659606368080_0.21795582462090723"},"_hasShrinkwrap":false},"1.3.11":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.11","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.5","@midwayjs/serverless-spec-builder":"^1.3.11","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"98bce5e8e1df0bd2b806b3e961e5dd85e7385e1d","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.11","_nodeVersion":"14.17.1","_npmVersion":"lerna/3.22.1/node@v14.17.1+x64 (darwin)","dist":{"integrity":"sha512-uMCeK2CFv25Vo7kITk24a2u5X83NYjfFlJ4mDRglF35lTVkfdHtMCb2bFz+tI8+fhhKSedrIoSaVTDo0ldjG9Q==","shasum":"02631bea6f809fd8c4a8028b2c9a1986d24dacba","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.11.tgz","fileCount":191,"unpackedSize":416816,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJ14XoWJDPtAxdJhNdVL14TPopqW4iTN5NL871GHIXkgIgevasHj8xBAqv3v66cvsc4uDzR7jSxDTqEh/Oy3lrmxQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi66IDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrxew/+OnP4q2b8f4WkTmzD2H78/00NwHhfA3/wyO2kSDVMMxe4MR70\r\nrChsCWLR6vDikOHBGkgNxhpEDArS+90E7fn7G0uQoy0wwy0GafcJNOxYR6dq\r\n7wZ9MFMHCXzSv65K3qCiAlmBPgpX1CzBdhrGHvhx52ncM/mt58neMxkrrCiG\r\nWMjuHH6n6UBmPF/Mho+VozQWUTvx1NhwxVNpg48oL2NLns7bCZyj6srOcfyv\r\nDwfp+pS7nqVUfMQI9WHe1c90QjjX0MZTsp4t4VzqE5AxsNwL1m6mewUy+B3V\r\n06AEF2VjJoPcZ0nxJpuwCRgnZt1ECpBn9YimPhJ+pP8Kc0v/PKb51/Ra4h6q\r\nYvMpX5RsEJgFrRNf6sY+X2/HzoC3tZ5eZYc/xm1c1LiqlB0NutTzITD4N+sI\r\njflAlmfaAtg4iFLktVwRS5uZPsTWEyhqqQixDdOJWCddoixqj+znXArNCCe1\r\nrGCqgfEjSpD24clyMkdmE2UsdMJ0WyGXx5K0MyD6+F8uwfm5LoCSAbXvjXNO\r\ntfPzbfNenFs/EypbeaQGctcLyKmm0W24pk/J5GsDayS0y1lEwD05NCNgkbad\r\nbP4UATbfCNrl2XivEJkPFt1yHCJK842L5k9TbrzW5eTrGEjbARy+wTtIF81W\r\nCA09RENfrgoEWtj/EiNUM4dod1yF/UUbVD0=\r\n=zD9L\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.11_1659609602723_0.8063888555277123"},"_hasShrinkwrap":false},"1.3.12":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.12","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.12","@midwayjs/serverless-spec-builder":"^1.3.11","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"3ed09206a2cedd363ba707a5f6ac0160540737db","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.12","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-TOM9MaJtRmtvI0y4oaSATC7t1qGWm1Cc1YJE7E0JgVOYv5RsheX/OYwhZOmExx/j/uhq/TtPyt+o0Ka9zBaazg==","shasum":"0c40b098303fbc02026a3bf0d20f9089a3fd935f","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.12.tgz","fileCount":191,"unpackedSize":417501,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpg9WxwxAxETto9fG4tLYJd81HuDCGwbNoLQnFgaz6VQIgDp19RNMonIaatAVjNTswwmcd7vdlnThzgFBRnGHNw/Y="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjBzcDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq4Qw//eEc0K5KxlHKzwcCaclzGIEMhN+emG+10yA/c8UWxMM+uiLFm\r\nxCpoe/R9ND/nBOsTcMoBAab9BCGgZADC8fkBWuchG0AdaO9Jk9vyRuG8U/U0\r\n6qT+78q2FzU8kIPWP1g8++D2WEspOu9B4L4l9ksPGyFLtwUKU6cplqJfl66q\r\nZ23r01pZYozBZV/kHm+bCYeJ4qW1vD/oBrjUcJE07+fPxXc9w3o5BP6UR0M9\r\nDyZj1Emm1YuTdEyYkXT7OZrMWO8uizCNRV3aR1VzaFYiPGCUnUJbTNEar4ib\r\nWJ6mZUOHLwWyRB9Mh4UeI21yS7YRmNsQVS1hnhoeJN1x7zboxduvlwp48fSm\r\nbPEvZzKg80XC0I+DcbU3A70/ecqSxud/NuA2VVNwH4h+K4HU5sZTdXDVFdRP\r\n8UoBdt5rpfu8qDiX4X+8mTy+KZO9tKkgRBJhOgpvpVYS2gM2arD4PbpW05r8\r\ns0hD7IPy9J30Gt/zzdRBU/axEnN8dh6V9c9JiBzbB/Q6STLoBUp0b/AII8kx\r\ny2U3U1GCXAwL62NXkCcP1LqScgVLIvpmgeNmMF/KsqQdn9ILZ83AU/ZqK+FE\r\nRRfyUNW8g8gy77AtI8YqOW+KSG//nADoGQSYti0cqGAaTjzUOXdZIszMDMCZ\r\nWF7T0sSKMXGFj+kNMDUNm1Gx6rCsacENAiU=\r\n=KLUo\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.12_1661417219318_0.8383587234200425"},"_hasShrinkwrap":false},"1.3.13-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.13-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.13-beta.1","@midwayjs/serverless-spec-builder":"^1.3.11","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"94231cd48c74050a35e6f5d8e6403a41d1d8dbd7","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.13-beta.1","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-ntTWJpLJwN/rmJUqJGDRe1hp1NkikXgHx/E6JVdzzcDJsuQZyphYxS5anBJiYLIlv5RMFzVwBnGjAqBlUgDJmw==","shasum":"7c45d034e46eef066245801b547e15bd98193849","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.13-beta.1.tgz","fileCount":191,"unpackedSize":417690,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGVEOEY74I0WI7TJ8pdpjZ1Q9eHyRUDbvD3dhvHoarXeAiBP4chWkn3i6lDTTnxrhdG9kVoxTDo0ugfF/hOgSGM05w=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjDDqMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmomrA/8D8olu8hop11Cf8TMBolasSW7PJkyqs7jZl3PlDC72K0Km30z\r\nQZdWv8Km4e0G1WEYnkLIEy7Z8lf+b+H8eMef3OZV2UUzMnCXMPPSoyA9jsR0\r\ne1WDbqRNaF3Y2XZHf6PItReKPJEd/cXxDDUlhZ5Y5csfoJ+4EzePnvLIcbbx\r\nG9Cm1ZEiGn8gxoODvek+FM02gyOwz9Hau6vs8nlUz8nPy6EasDIvYGKv0ulf\r\noY3utaqe4Tq8drfqptZkaYEQPCt2eeF7HcDluxzGX/JT8hZOPO9EmA7lw5bq\r\nONlDZS04HrMSWpEjFxnF/MB2lwTkAPNDOTPP8JSH5Mk8iDBRrcY9i6O73ba7\r\nYYo8tv95x5k5CewT7f9M/ZDZSoJTR0Yl765qu5UWi1Z+HKgv93snNr77cTDz\r\neE/BroPMlmqZJEvtwWOyjfse9CO7FG2IAtAmoDtuSXt3EfsCNIF5CS4z0x1q\r\n6pLze7mNxvhU08nQLwVIZf7lV4UpgfMYbbqvfKQuexbR0k552U/5T2sL75pf\r\nZVvVP91U/AIcCFo7Lb1b7is1JJJTSrV1VwMtqRPCswHofsBoLlM6fImuQFbf\r\n5NdO4f/6OAad8vYWoG/bGBKUGyCQQ0OpwcZw2sQELGYKkK39ppmbvAFx39uC\r\nn9Mg/oL4xOIBC5OFNY8YpLwDQV93A7Yn64w=\r\n=YpDz\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.13-beta.1_1661745804463_0.9074051625553872"},"_hasShrinkwrap":false},"1.3.13-beta.2":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.13-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.13-beta.2","@midwayjs/serverless-spec-builder":"^1.3.11","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"d1f2ec84c5eb2063728b16b69887b2b68b7664a6","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.13-beta.2","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-/XcVgRaBPkYAR3cnzuALeM3WRLjFvwySuj/D7kvh7xJZCedZub3sTTphRZl8n7VJTdh8nseIaZ7+9UD/ST3j1g==","shasum":"7f7179b23a4a5e2ebd70411106edd73c729d3f13","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.13-beta.2.tgz","fileCount":191,"unpackedSize":417872,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBeVU6SUc4vVHTpeQyrYOjUE6NtdtqXNzh/NOaTBsjy4AiEAltk81Vrmvig2Q89UCiPKt6JGKPkqJrehC8T1ZVNRVHk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjFwYqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp4mRAAmOf4aoSTODawMAbYw15MoitaqjbJuHY3mNQDbQdwuHmjmOZg\r\nqUR6DHcX7BYKlL9lIvvpak3gshqspAHCqp3cVztf3+BSlgEs9LAwTYah2fdt\r\n2DwO01UxdUHMuMiT2pPuTqK9wyyX4j4oD9nv989EsoRQXXVexgcQzbMZ6Oyi\r\nkF498TalIGcfhihenKGSa9kBJ4axmqK+/Pt4PIlZYvux30y596qckzuFp8Dy\r\nfIjg9uW7OsudHIyoAeqxUfEiqySkJmUAsY10FKU8hlgMscdjkROEIl6OK8vA\r\nXxYqxgw4euykI0NtzRaWrD3I2z2UO87WE6TqM88P0Ho3kMXfhUCHfmhkE92S\r\n2Vu3aVEpuiFg8OVHaNC2uMyI8Lj+00USoMTIIEZXXLlxsbgK40bM4vPBSlJ8\r\nATVcNSYOmRqbMBzgzonn715WKPWmzd0PR+gKhSXJIAcfeC4q6mvmIzb74FLY\r\njlNJoNScv+PJ/KOwnBl8PKlgsEqnaNw0YVuKPTu3/DQYw8783LMYHrSj9ws9\r\nEVoU6/1NSfQB8H73qjfYoB7zwRnEcsYb1ptjyj3deV+kmWZQMOxyglbLQ409\r\nL1IPwTRmLtpYvwXzAY59NuUOpezs4voIKLc6UoyrksFC2xoOgFbfvqjKSW3i\r\nO8tSIaYksLcp9qSD5Awisr0I6XosEvrWSPs=\r\n=hOtA\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.13-beta.2_1662453289986_0.1812506114872905"},"_hasShrinkwrap":false},"1.3.13-beta.3":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.13-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.13-beta.3","@midwayjs/serverless-spec-builder":"^1.3.13-beta.3","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"feb6e6db71be1c9eb45ab51cd047ddd68c650261","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.13-beta.3","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-j3HHXohXQOps5Ie1xCMSON0gX/i7/vtbDIgIL434bNII+be+3TIIE5jlZXGi8VsUWjWae0OgSsFB15maSk+jWg==","shasum":"eaff2bc72a3bde6c3af00a71e59524a2c19e8da5","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.13-beta.3.tgz","fileCount":191,"unpackedSize":418215,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIENeuNqQXpHhKp++SY975cFLQnOmU+pketNxNypFPLrfAiBs2ju7qGOCVTW6/OY5Ml7lmcOuUNPEbCHvt3kmle6/TQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjGBRQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrtgQ/6A4P9cImxuuULFxozVgCqCJhr/IunBtkBPYiliufGgUlUhu3y\r\nzweOLZ++NXiwP7nc6fBCuIsxR7+LGQGNpwDdRzqwKTJ2FRG+oUBKam2U95Yp\r\ngvFI1noVCFK0t3jupmhM6Aflgv97bBewcoGJqFPgb4olYMrbPVJNB/OKebEi\r\n/3zp8S+2PGXNju9PLXUr6qdBAi9pbVz4GN1ygMWBhW5RtEanzLMMXFN23SrC\r\naTIu3TSUe7+XFCUwfwc67yC1kUGTZNBsDWv8IR/6Ub5zqrZsBWxIBKOKyqYk\r\nB9qSKJWNVAY9ssBHjNoWBmwwN2rXR6UFhm+RZzts9JzFoUpmFOEbWxpoaiQt\r\npjRqWwYHXXnVWM3T0GGm/JjwNBZQxwJ8tMN9gChOOvy+7sJC/y8UcpGoEhdg\r\nD8tjgJzrvfqxIB4PA/jqp12Hi1JX5F2DDt8oKe+gmhL01LrlpS0cJ3CLTdx8\r\nSbyYbJYeotodpqsrSUL55X0Bh0COHIuFyKbNhXEz/6mL12vaExKnST2LxZAO\r\nOYQ8zdKy4RRZDKYKIG7dFuSeSzTzFRv99qMh8aShHLuvz2BZayA9bLWCTIQQ\r\nr+Ab6WXlkALw704u0U/RXPsispooM7NAPwg+l3WR9oRyR5Oe2+hqW17aA6AL\r\n8c+4GETbnyVr6KdSQFCsyTFjn3O7I2b07wo=\r\n=LvUF\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.13-beta.3_1662522447921_0.4669749568512891"},"_hasShrinkwrap":false},"1.3.13-beta.4":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.13-beta.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.13-beta.4","@midwayjs/serverless-spec-builder":"^1.3.13-beta.4","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"96873feda038ef462ccbdc2122043d98fdbf73c7","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.13-beta.4","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-BBxQdmUAAxRd4lJG+0lmEEbBbZ/1AYXBRm07+PuJOk8qd1iCfgACaWq6yxMj7ztyVzydgnqrtAl6K6/QGbfb8w==","shasum":"de6fd98f46f68af827595d3bae3e0bc8e375cbfb","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.13-beta.4.tgz","fileCount":191,"unpackedSize":418397,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG5R5Msz1ZAm3u21PRydDtdshGnA2xbwkbw4/38X1DPrAiBQ117SUEzIstkJQ0o6JnAFC59jU5iV8TztFZ9YEbn33g=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjGBhBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq4tA/9GPv68HQi2PNknY0VIHWgI9sXy8Hq83nR6yDIJt/fnFkJPmhx\r\nx97mw5GNtiI8Prhz7XOxbDI8i5AGB3a2BQahmDuyMaU4QoIIEZyyk7mAWYI4\r\nWN8X6upt1rkLPJyp2V0jIZyvdbT8+Mh+QVcD49hIHbBYO2G0674LX0LnCYg4\r\nJL/xuLdTyBKXeVWESZvXRMMJ2tAyF0VORAWUfyMI29Nl9dZNY5DOylEgyu02\r\nK7k6fvdlqyUPyUPzTl7yvKNl57f22XgQC+gW1Og1CX7MKinpiN/MKxVWn1EQ\r\noXieQDufhGTYUCV6nccT8c3dCSFDw1QrKS1dtqTiuEqNLxBxUJn2jnSrEPpY\r\ndmdMOQP230foBV+A84Ro//NteCR/n7jXoCWQZpDEwgSet8HaYKsaf9nquowo\r\n8K5ysJ2VbCbbCoFaimYMs5dpWKLQKbXgUl7GORcXLjoS79dsmg2h7Yro47d6\r\n1gZWaKa1FQ9HS9ADsODgLDl8o8KW1rD/GjSXDAE38uSutHA6TgrPzZuMAO0B\r\nyRFCLmf56q6WhK8FNBl17TZl9eBbuiqOZ57O7UTBU4Hr7DYFYggl1qMEyirX\r\nENQ6ljHIxHfigsIPTNY+Ka4ay5DxtdJC840zCcXzpb8LAoGUjgw6Czvk7DsK\r\nEwiy1CWQqFhEJDotyhuZBPZI/m5o7dKYHYg=\r\n=6Qyn\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.13-beta.4_1662523457610_0.9608620093647409"},"_hasShrinkwrap":false},"1.3.13":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.13","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.13","@midwayjs/serverless-spec-builder":"^1.3.13","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"2387cc23a730b7a3e37e9e66084b7907c382fbf1","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.13","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-TYxnWvNDnQ1KO7YpA+9489PouYsVcOusdo8z8SFaxHR2NBr3P1RfNtdSrMB3bFTMNopdo5/cmxBiJfx3z9zbGg==","shasum":"07ae918b0b4a6dc544318daa350805839cf28252","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.13.tgz","fileCount":191,"unpackedSize":419572,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWc+QGI1O13arf7oOfOSKMBBfolceMjTXIcndAuCG2fwIhAPSOJQNPNrAV0dKxa8cadDRl1J664kM4eqdEpoUxGmlp"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjGDbfACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqtkQ/+PF2b/Fw1idr38wIRLJj7gfyCyGyjesi2tk4p6lLNsDF6kcnm\r\nnaYEzQLY57dM2Ro7xREOL5qUeyyfIhE+e8c88wMIlq9Eq+7eDDV9GbBqVaUo\r\nD/8f07hadLOUurnhP08ouZzi5dI56xfygGtj/fBSqIagDC2sRcuO7gihTsRg\r\nnvvikskk2YNAmeB1mVAW1y2JuxLw/zv10GSIoZEuSLKAmD5GUiicQ7O2TEZZ\r\nMOPma2FsPVC1Eb+Z3+1jM3bqDNc+u89KWE0cU6wMsB6+wYlKhdJXruvT2GKy\r\nfQDIG02qZH2cBSRZfZxYTPkA/oY2v/7I+61sRuMRgyw47paiRWkvH7anLZVm\r\nEZQeLbR5EMxhihx6onng8qtn3BzYnFc99r+1u+8NU1AQ3VFRpHLwLZ7TARzp\r\nD4btdAFy0nwD/00Q3eGSZAgcz0m+4KVFca0yHHUZFFFy/ne4Bp9uwGcQnOUB\r\nbefrt0s3fb9e/+YIgbNPJjrLmMc+sV+JZ14TxQtOX/z5CHRPAwF+OARlKBDk\r\n0CZc7TjqvsiyaR6IiPZ4tVxL93dGDtk4ifZo66Wbot+gVZhIfBXZsLt2I6N5\r\n7kOwE2Pd0a3KceNqmrEa9IPcjbu1YBCKdUpPF/3in7lahO0cxigu41CYejlP\r\nhxIV7YaWzknWY5NBoNnRsWy8aBfQvus1u34=\r\n=lzlI\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.13_1662531294964_0.7752893008087403"},"_hasShrinkwrap":false},"1.3.14-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.14-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.13","@midwayjs/serverless-spec-builder":"^1.3.14-beta.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"5926e5efa02d4124dde9645c664bab6d731b3252","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.14-beta.1","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-YHWXdOKXaAEve2561Z/dDR0LYqh07hfZ0ifOVVJ5Q1t+HcWGR/DO09MWdhCDEHMi6VsXWPIhf2Q8Scn+xq9SPw==","shasum":"1ec14ce18bcfd9bf6ba21339241039f125d20c13","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.14-beta.1.tgz","fileCount":191,"unpackedSize":419761,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBxa8hBliwDej30kaeE9HO3EbRHu0tBR0t/SeDZVUliEAiAopsUev4qMkfZV40NFjWOym5O+8Rjg6PfGMph6Phpq8g=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjGG5AACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoo3g//fJr0DkVTQ3B/kfAf5L/lmK22V2C2BQQXzKwA3zkAV9v8g3K0\r\nAkMb5GK7JA8Onp4vv2zjSes3AEBWOwf4NawaOd+WHA6pbEYFMLud6GuWTgFh\r\n/YuaM1b/93hm1jQYoX5PsUpbVMzy6b68C4BGL0AJxnIQe7U4PDcdJ7in86CP\r\nvwto9nlXBWFgNOOi1KQKPZ4A0SWvo2D11ZKN+aHaAeSGInjNgRvWBOtVfMKI\r\n7a0sRoZX5TRTDDzNDHdrp0ssRyOD6aNWMCDpQ0/8Oq6nLN5dEpj9zfkd0ZnM\r\nkQ5HxncU7Wx4o1+okRrhslMNvul0vMlbnMGxkYM64XaYHg9IJ8Tl/frLk3WW\r\n5dofkp6y9n3lZBOzZitRG8/38WUeQ19dMPFBP8yt6PSoke59g5qiRwkSceZq\r\nOivX57F2cTrPLpdg8vLmnyG8LH3AAQvd4DqywnyQwPoz2OdHVy/SHka1HOhT\r\nb4tQL8N2+UzzoMSe6oIwI2zutCn1HEvK05KLQVYqw5ESZUN1lKBYU6CqQmga\r\nu0hq82TxYcdG7DobaULteFr98Bz1nj/dbYwX4LgFTa5x8YZmq7Cq5nMS17Qz\r\njOufKXXXTH6kwsWz41bKfr1At/qtN/6FVWT/EOPFQvV9b/LjQjY95Q3OuKpM\r\nnN5CZCurV3ZFaz5uVZTRoapt3QRk1M/+Yqg=\r\n=fVMS\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.14-beta.1_1662545472669_0.8947959220850707"},"_hasShrinkwrap":false},"1.3.14-beta.2":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.14-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.13","@midwayjs/serverless-spec-builder":"^1.3.14-beta.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"caf91726f8ed34df5fbff5d38269ae63b3654cbb","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.14-beta.2","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-qEG4bUmLIabgPwM5BcN50X7alQS6wZaiNMZfOyKPfR4IInBUHTio3ha+A9ig68OrlNd8OpVYlTQG2Rzk1iSGog==","shasum":"bacc0ec1e4da98ac8d58a56b7e8f210c9d83b28e","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.14-beta.2.tgz","fileCount":191,"unpackedSize":419943,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAYVLpptUHkdIhJTOr/ZjvWDSWiaWpNzeG0Dhk8maeS4AiEA+3Y0X8elLp/GEwfYMoyTNKEwkQk9YHnxyh9m4WcxqJ0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjGKjrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpy4A//ajKb2hTcaVm1eZI0WpmJ3GbYRz92LS74oPy10rq475WwPgjV\r\nXgRz1tBgqsWbzcT0uEgzAD4IDanWiCRYgDtYBZigfJXXQf2V1CzNzyDZP//q\r\nK+pt3HKVbMYz8bVCjfpbIfdxpUWKPcn+PRquDDviPdbpBeHPzHEfp6YQzKAs\r\nYMxtIJ+qwRpct0+f3gPPkjv0Gt3W2ao9SK/JbXk0HbH6WeDtReXiyZMuLag/\r\n/mUvrEP1HOm3K4vr4E1JWd4MLXYEosTx45qgixRLKL5lTJMFjPZxvYy/enjS\r\n3tqaKqpuFdB5rdnRlfwvrMLVqC+6+e9C5HGjJDm0GKAhLOvKdI7sQBIZlUYK\r\n20EQ6OJuzycGWtBj5L/u8SnhN/hRxoyWmRA6IxlXTsRm4pjTHAHFTZgFdlkv\r\nrfDUQ3h1HWDNg/3DjFhpr2P4SzoKupHVUZiK6G/9jFg9SP/HlAyx5flKwrc0\r\n+bEO5T5nMBzH5GAh8byvNGhPJD07e9SbQf356p7zqy/wX7M8qeov96XQW3lq\r\nyO/DUjd6qxPM15jWl/HCS3gX2PpXFY6tnUlIEny6ZQzDcc8FnHhPHpX+8UuZ\r\nrTeYH9KcpWDlSCRNsDzi+ipiSrhfMMiVisoNtGZlyJ0UR8N0a/ki5SmWN2U5\r\ns/tcPPWTB6jjI65T2d2SdgaT2Xg4xtu6N64=\r\n=mXeL\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.14-beta.2_1662560491542_0.663891882964813"},"_hasShrinkwrap":false},"1.3.14-beta.3":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.14-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.13","@midwayjs/serverless-spec-builder":"^1.3.14-beta.3","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"9032ea01412449b6ef659b8ceb5f6af3008bce63","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.14-beta.3","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-qfkY/y7B1E6big3jatfBG/es/lNcvcUyau/ULGOdTsDMtr8z0kpU40xRDcID7eXj2Dkk5KztDj2HUMzNVrvtrw==","shasum":"cc9ccd08cd202e7453b5d7768502d65338177ae3","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.14-beta.3.tgz","fileCount":191,"unpackedSize":420125,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHbnpZjpVd3gR6y67kSECzh54NJmQtlp0bb6Gz/ygFhQIhAJBC/JEXFZ1A3DJIIqdoKVfOJfBWVUeXGtRF8rtJNtW5"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjKVqpACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrdQw/+L9/REk0RF2l2KlW4GJ/TwV/3xMri6DRjMc79Wq981C0pEu9d\r\nr7CRBn9Pl1wXph4ZnyOG3xBspenz9d/WTFGV/xaz6m70ZV31UDyC39eIAaMl\r\nc/yIX1VZgpeMXmZuNorRut+AFXkyoGtOJdpkAmI2qgm8gID17pWs3MfS3W7/\r\n6kdOyqXsbhH9MrfRd4bBAit5Lt1zsWG0tbh0bYWcpOCRH5TM92ScUMkCWXe3\r\nHWW2aHgUji64Y/E77ND8byU8Ndj5G++RRJdklP7wYXFSRsREyGpOd4WE0xtd\r\ndNn+J9j4UTZxBueQskIyaqh7Do5aik7lFS7UTUIOVLkC9QAXnCGgVbEnS4Cu\r\nvqwO+lEfVGNkQqR2CDXPru+CCRKkZRHR7pP69RrlHkVrEpNW72TRHDSvm5ch\r\nHrb8SnsNCKeaeSH/aunNOAmI9IbDnEefK2Zdl4k1Rp8Uecxzs2Q+BvxOFZNp\r\nItSeC8lxTMZ32evh8JKUIUvR+MxVhP9YLA64bPOLMLfaLzwujIpnh5B4xy08\r\n67XjSx1qtHo8MvFgG7zQCVoBYxTjskiy129QD5jAtanDh91KZl6nKTxdV0Ed\r\n8qtVx5D3JFYKlB60J8CZ1taSVXbxFLYvM5o32NbI0T4I4GY5atGwU9dyjbsq\r\nMuzNriZ1ZhyMDEbSJiT4eiJsZWq6fmI1Q+U=\r\n=Kvm2\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.14-beta.3_1663654569363_0.8364106849189312"},"_hasShrinkwrap":false},"1.3.14-beta.4":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.14-beta.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.13","@midwayjs/serverless-spec-builder":"^1.3.14-beta.4","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"801120d3bd37cc9ffc24e988d51316947e57859b","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.14-beta.4","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-xmwtz8L1tbOIubnbUlr9O/NZvusr3bmBYW/M1AnXC1Py6bhg6pZh+vUlCMgjNekARQrkBxFCbMKwfQOSY/RTnw==","shasum":"bfa7ca5cd1f4fc1502053ad452237394da79d73e","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.14-beta.4.tgz","fileCount":191,"unpackedSize":420307,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDoh66oW+kqUIiKs4ff310Lh5wDgyO4hT+LS/kzQzCFQQIhAKDDY4eq1CFcKWR1bdxpIisAwkBsYtb0x+gkUdgWc1bF"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjLAjjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqVfQ//RgJMZLYCSwhnEtUUKRKb/uCuAEkU1rraccQLFe0PDTj4SM52\r\nWHm18OW883b/QykNdBKgpB/tyZhGYy9AN6xXmN7sLh2suJE4fIRGLp6l5BhG\r\nJ1axgHJbWnef159FbVTilIlYkx2H4lg3rxvEVI9btnd9ktbSrDCUhYjAVOeQ\r\nFGLSeMfOtLfcWkTqncK/RzPeNgUay4DfFWjsbqUtApcoF1UFS+SIZIyTdu/4\r\nWLTH9SnBW136KC5336YB+U+zLQOpQ4NCofIJAvKBDn6DxEdtrL0uXmKYZDCM\r\n/tzvjFnegR9YxzFInHOGoPKu8E3NbvIyjjKD/O8V8C3S7FMQe6eDjIOWTUQe\r\nKIxIka5tWLaVznQK1GANX5OJ1Mc1WzBFzgkgVJEiAGGIm1bfcQvRma4cw0Ke\r\nUJCsY5tA0NYY3Ts9PW2dA5pXjj57gxJCKjoNmBefIPIcKZzVPMIpRqoOshRd\r\nf8I8CIdlqB5o8R5uK5n2lAdMvyN6KYtfr7Kgw3BKP2zEGASQe8N+wWl+k8yj\r\nTNG0wu4tP9cMFxzqjQK9m9He1eBf6Tt+YxpLw1wKpAIevvGdLtTOYTciqqsY\r\n4Zh6qZc2VPH+qa+ZAamtjAMecJOTHRYcJ6kX01scwVnaVIO/mT3wbaJg9jHG\r\n+DJvqE7J3m0uF5Bcupy8iUwXYFOJGFtuzMk=\r\n=XyZi\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.14-beta.4_1663830243263_0.8195321524926196"},"_hasShrinkwrap":false},"1.3.14-beta.5":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.14-beta.5","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.13","@midwayjs/serverless-spec-builder":"^1.3.14-beta.5","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c2f0de7d3f8d1a82429d9b92be70da953c51be0a","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.14-beta.5","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-K1Zk4mrUbFDL+q+qnlpu+IMmoN7SJkTM+364rTVHK7elap3QTm+gD8TdZg1oVeN4X8z5EedwKtZv1qeJCo+yFg==","shasum":"2f83b451acd5903b769acabe2b9841e8b55701c7","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.14-beta.5.tgz","fileCount":191,"unpackedSize":420489,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGpStgz012S/vYIlhrEWX67HPcJniAS/YTvQzix3ypjAAiEArsbzpFfOltAcsYoVge5Wv+PxoVrQtlJk0mTQicE7UUA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjMUq1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoV1BAAm1fqytp0CRLkCU1WBWSO+KT6XAHh7FMbJqraDVL5nU/dhyzm\r\nQKVyGFzQB5qt2XU40qM1UTTticbz6Kply8CZeHoAr6kDMQjRRlQtKr4iCB5+\r\nAEUnLV2tVq2Nd2iKzSsCjIrnyqnvgDFgDq5pkL1E6Re1w+ko4RWL61Oi5WCn\r\nXxebHmoP2DxFVXyEoprxsc9RLFRy8fymX+/b5NvXxapV3/z3wUs6a5kIMFjV\r\nsy6RjaICZ4l1kkaCoocKa6rfx/P0czPAWk2Dk8lcEYzG8vLfiC5g1eFaVPMq\r\nAt2bjHkxPOu7tquGMIib4oduHMvELz88bY0NY0pRe942xk9eK/e6+0LqrXv+\r\nBhQROT7zWuFY+3ouoFpQ8x85z80Zi1c1aN6h2kpOexI52+d1t82KQ9oaoTZN\r\nOzA4ghCZtiXC0ZmoDxbdFtd8nGVAhU8sFogcL6lUGRlf3O1ZeNy5cLE4B89w\r\nG7T1JmBmx36/QjY+lgtRSNsM9izkhNKZI4k8cjZGXzMODSf5hjxDX/K9RRqm\r\n/D8/Ga5XxOn8YfzCBbGQUywj6ABQ5UxfVJLLwwSf/gIps2/bQY4hKF6IHVhb\r\nvWWP/uYwcG73z2STpH1CFIscx1GwKqxGZwLxMi0fCsBrbK70HRqX6Qp0Jbh9\r\nmj0YFd/IAHHa19qKzHBGxi/Y2VknnzZWgpU=\r\n=1ZHq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.14-beta.5_1664174773584_0.3412692722215023"},"_hasShrinkwrap":false},"1.3.14-beta.6":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.14-beta.6","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.14-beta.6","@midwayjs/serverless-spec-builder":"^1.3.14-beta.6","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"0a9cbecd54819544181f5a0b2d8daaf56ea14ae3","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.14-beta.6","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-KbQUZ0ap2NYKHvTr6/lEVc4YpAWMLgOdZF3ThYoG30QRxChAKgNSkaEW6D+0IWLGiiqmp4vPzi/cZ+Q5r4YdfQ==","shasum":"80550c90c8a75df7db3b92d8e3917280875caaae","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.14-beta.6.tgz","fileCount":191,"unpackedSize":420678,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFBdW8n9yQjVSm2BsTJwW6UPVGMUJyB1Z444kcGKkR2GAiBTKx0ato4coXRsSwO4Oa7k+evGZ11sP37lIxWSLN1hfQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjMVaCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq/fQ/9F94Tla7i+QJT/a1uDcEzby5oTx/k24NW6/PiOsMpbDQ2i5Z+\r\njiFP+tN147vBROsCjKDg4FDcL+iwblDAxWwQ8j3VHCK1+EgF0yzk7r6IPseX\r\ninPxlWYe3hbQSoaQ8mizV2e0QCAo+XPP9pC6yzXlj525bDJpCBBslwuHJKg0\r\nBd/Hm+v4+XA56ZQHSzEjIZNOYchgq8HffZkxfPRiCz6ekX33l8dFuJKJX14s\r\nwGea1DzFxTaF4Nb7hNyy2USueN/BIpjDhMEITcMLUlS3GIoHDP8Z82FdE5pw\r\n01twrcJYQMqP9BoO173wOkEMdstNwS9YHfmJDALyaRROFwDwPAtQGsJMZM7u\r\nURQH0fxtlJEGJY3OaUfhSNRnvKimZxxhk3M6Hs1BgxsxV/HZF5yESKyY7Ulc\r\nys8PG1vYAOO6M3tkPAm6E7eWOIqhgne72LYQZZGo7vJHTAe9XVBLU2/vRazG\r\nYr0ulYKFkih9csNs/qSN3LozGAUdFmaPPWM/EgcHQFPvBH4h5b3JKBB5c295\r\nizzSkk4TPnzD4V3VXlPdei29wCZDA4Nz04P5HtQ/VLSRrP2d79VwuCk2Lior\r\n+o0fvLLM3kYqTxZnUJb6wfAoQbldcR6ZBXKJITxN5pRNuRdVloP/CHUKWKqZ\r\nudvratamYGAk1qTYTFy+b9MjMmhk41a0zKE=\r\n=ikxI\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.14-beta.6_1664177794103_0.8532337708569391"},"_hasShrinkwrap":false},"1.3.14-beta.7":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.14-beta.7","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.14-beta.7","@midwayjs/serverless-spec-builder":"^1.3.14-beta.7","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"079ea11cfbeaabb4d2ed693cb7069f7b2be19446","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.14-beta.7","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-pGurAkTjzr4XpVxnmQjQkiFgVbpln/sAwBr+qNIkw+YSwASA3uIpkPmBaZhfFc5NETFDHBf+M517q3aIU91JBQ==","shasum":"18c3e9cf5769edfc801524d1f7ad2eee2c953bce","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.14-beta.7.tgz","fileCount":191,"unpackedSize":420860,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOSFWjChjqjGnmyI0ndMG+EcvBajeAjW8pKaSag+FawgIgCjZc82B93zkPNwuQ46JidowE/EqvzjdfBCdYRI3r05M="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjMlurACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpb4w/9F5R7qK5tOKA3AoQXzxjN6B0vzoL+aAk/7JsiceTRhUkEUuAS\r\nG3WL1dvZlnt93ZJaLAhpriQBIqSoP050bKszuM4qIeiKrePBX/mGLWMxrVUX\r\nqWgknZ8djHE7i02Mj+vmbuIK5fHZTqHrA8/p7EHlR+n155rjvb7J6ffwnc3Y\r\nl83hn27kADcX22sg8ILwuGykcTLZyVJjmp4aFE0hSDP0b5nobha8b8GTee/0\r\nZTmxJ+2BANEA+OUV0kwDXLiE4vyxvqyJS+RkeF8q1+vMWQC+vsJtNF1W6nO8\r\nahcJn7VjZ4d+X0L4yTJew/z16yNvq+TWtqqKQTBs/5ktLi+GVie95zjddEgY\r\nO7+3MeFYsOWc1+frdQlzQLQift15gu0cnX05nsEOHTKhDiYi3LzhzC1IOF+p\r\nPpeJkZMx6jDxUDKO6SNjOrXkHZjqh3tjt6x/ousraFpU8UdK7RfIQWZqhQyG\r\n03FcuiSOx7pHI8zVJEa2D+H1I2TQ3ifORJLHoLyd2ZnQQ8Da9QuoGHrMci3K\r\nZhhN0mZB+yoCH8sdk7WRMrkvZn3Fq48mkItrmckGaDOEaYfp9hLqVHMaXS4E\r\nxiLF42GivN+T/4feJAClXbZUGqugI/y4EBVX+SLo5rvIcEQVqG20bsSCjwKa\r\ngDXyUHd8GUshueQ90s9uw5ubzeKob+Fmsbs=\r\n=7uPy\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.14-beta.7_1664244651652_0.6536815700409797"},"_hasShrinkwrap":false},"1.3.14-beta.8":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.14-beta.8","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.14-beta.8","@midwayjs/serverless-spec-builder":"^1.3.14-beta.8","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"048751fac25edbacd5184df4ce0b8f92eb59d223","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.14-beta.8","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-S8+5a3yqKP/HE9TrFyZvVgqjSODpzbfRVm3V25NkjquoTgVGNdMNbQsodS0GlKww8wxs4S6OwP8p6bEyHQ9ybg==","shasum":"cce6128f7f4c66af0cc7c0d36595d455a1c2e213","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.14-beta.8.tgz","fileCount":191,"unpackedSize":421042,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiOFQZzoXM3JuQs6IsureAI+K63PRTCzUVVIATAsxjIAIhAK2stZ2gVViit5UqPO2eoJCs9QPm3Cvtz0fG1Pox62/G"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjMnHoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmosOhAAgv1W1rLDEd6Oebn2KarxKAo5107E3W9ki9flMWEAqLDSrPLU\r\noP9GqJsLcq8PCuRelBvOwNEpIcppHKu7OBpDkoB3TLmu8HTQiEGGpHi4Gcdq\r\nxzeBpSzp9rNgdtlPlnOHoikXF4RyzZDssRCmSP1LP+HTYwYwLl71hxF37Cg5\r\nuILQ+NsEr6j+bTBp0Vr0BeMgL6gu38HxzAPsI3Rj1/0CvgL55saLZW7VsgWf\r\nVFgbp3fcdXZMinX4UOdEaN8HlMwnx5EZNGhodIoB4hDw8q7ISbibGTP7+BRQ\r\nlfOBP0+6n9b3oPUUjD4sws18/YhKsdOIEg/KGSrt7ddJ5E4VNt0TwvqHo5zi\r\nruGRLT2PFW5xZE+ZGXKvl5yTPrcILHVulfvSvo/+Y9YO47Vk9DPrlEghEt+H\r\nCDBslEKjMDIv6MhKrpxSq8WwfJZIpaJXCBnUEatWoS/J5xPXSfpHhV4A79fP\r\nPwfgQ8YwjNvq7dTGY/V3zJFf1bCE1/KpEdJo89BbY7Rq10QHTxwSw29dQ/3j\r\n103WfCyU3iHjtu8p06hhD1y0VePBrP78fkdKr5vQu4Lhg7oJWTSNLNmbIvX5\r\nl/hF4e3OMEIPI7Amem931e2qiurdq1VY67+0v+vCFwVz5r8QOFJ5a30dbUvo\r\nycisnhIQGFSU9FdHzku4/SON+wAvWzItlp0=\r\n=bqLR\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.14-beta.8_1664250343895_0.3693518504972011"},"_hasShrinkwrap":false},"1.3.14-beta.9":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.14-beta.9","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.14-beta.9","@midwayjs/serverless-spec-builder":"^1.3.14-beta.9","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"65c6e332eec78d3b6966d938868e6234766e7f62","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.14-beta.9","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-TAeOdrjCJtBXtSTePCszdVpSVu06ix3dDGGktByFcPya27zh5NduOxDdSrYUNv+1enRtMe0JIW9Fbz8cofssVg==","shasum":"4097f4a1f7a1bab8b6b356680d0f76729213a5e5","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.14-beta.9.tgz","fileCount":191,"unpackedSize":421224,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICYXygdDWnEQhe4TBev26OD9aJgNSX5doWDKFk3yI9dpAiEA18yZLShe9T/HyjdJ7bIMIEhVKmzzvpkpjhEPFUkc/zY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjMplaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoySRAAjov6bVy05R8duQJTiRVUWCKTDOgJ/1tUVUQeMeZoufFK2Prj\r\nNSI3yHE+Ke7oW6YzgjUc3fNtWthTEoYJpCIriXepvWLsjpoY28FZzsb7cMbd\r\nfRGIntflax2kYjnbKbhk7T7jL0NUfp8G26t33Ay+Z+ZbFk84z0S/wAO42eDe\r\nrl5la/QOhaLvSV+MlXLqa+7+0hI6v5xsrXTPmafDy1MbV+KEhbnbl1VMDahY\r\nXzNxxJkGIgSXwlI7jd2aqiaH41zX7F7Qc/1hlm6apjvdyvXaja8YipjFd0YZ\r\nBBWtCZhz6AzyWRA3NRAVtc5y6Vk3r1uArALHhHLrDbFCriqf9VbR/PMUvggi\r\nxWMlUtPPjKqyCs4a6S64/bbqtselyYzfrUW/QlmUYSSOwpTlkFzmWJH9y5KH\r\naGlbsY4jnM3oB7JpXUXrQjJ5R0Lv+xWZW/YevpP6+KoB6Y8r4iS04DyreJOo\r\nWeZYWLwTA9SOm6x2uLSrdS7BFMnDHIgipD4TTotEFKLGyuqArRLDkJp7Qpiv\r\nOkeGKqgs2eZbahtuHJfJRrKnpYKQscNgDwvWfc/943NpQHNuvLUpv4PoE5sf\r\nZFU8br5Y81B/XivChrUFoyvu7LPPKD93rWvkNSvEG/GJDMbt5tPjruBStwfD\r\nik0ozCVT3w9I0Ynd1XmWZ/PQXVA9xYJugwI=\r\n=+KdI\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.14-beta.9_1664260442193_0.33970649278146214"},"_hasShrinkwrap":false},"1.3.14-beta.10":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.14-beta.10","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.14-beta.10","@midwayjs/serverless-spec-builder":"^1.3.14-beta.10","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"3d7da11053d28cb3d6cbea0616bb0528f9c92bff","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.14-beta.10","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-0b9GoJttwPfgife09+jY+Jee8HwXvCjlhfH3T4YLEgCSFGHAz9OR6KgZHvgFnCMFbBcdTM4ZcCVlN34LrAqFRw==","shasum":"224ccadccd11a94608a5e13d86b6879e49456166","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.14-beta.10.tgz","fileCount":191,"unpackedSize":421411,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZ2Qija33ojPMdksTng3WV+SWgKISj2RGFf1E5B7i2jAIhAIegKtPv21UFigSCEmjMzG2Bs8I+1xog3ZJmOnRBsw5p"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjNpfyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqIhQ/6Av9C5x+rcmZgv+Jql5KQp+vAzXqh9DFaFcLzGCUfQ922AUig\r\n0w8/ygKIOkNlx+DQxG0qFAUO4qTpC/T9Wblg1gz2H1IKW6NraKay4Y7n8YpW\r\nIvO2rxl/MYhUN3RXuLNMWf/RNF6E783ZmwspViPI57XrCJwDyqx+jvwawkVq\r\nlbcWLGpriHinAt2Tc0R2RIsqCx5yM1VOxnLer9hoMcJNJgURB3MAvPD5zZAk\r\nJRhRup+KychK8yzOzg2wA39pfXoFkRT8hQec9kg6Ef0twcAC7Evz+1TJLrll\r\njgSexvjmmVnPM+9QQLyM9SnkUxpDjkWWQCj/qj/Ok7nLDvDl3aLloXaKBMu7\r\nSD13WNkfnmJI4lQ8w8KGO1BVzG99i8U9mi4pWrebVZF9Vxbh1voCZEb6pcVT\r\n24048UsVY00fHDhxQAb1sXaiEPgGstGpALI3UZ+W8ty2z8U0WwpqT4/JmZWY\r\nZpSXYOAXerCf/3XFDdnayh6t6dl4bcxg8IQBHzoK1+Xxyw3Xf4F6oSK34DFD\r\nMUaz/zGiIgEACmB+B8amc/xNy20/RlAvy5la7SPRCrHOubshf5OKoxVl8Tod\r\npic+P+7iSTcPeoqGg+WF779oPnLjNaHbmXzwpqj6WvAUep2SNpwWo4FT9CCN\r\n/0O1qdfrDV47SevTcDx1feiVkx2zFQw9exA=\r\n=x53M\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.14-beta.10_1664522225971_0.034065444791030686"},"_hasShrinkwrap":false},"1.3.14":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.14","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.14","@midwayjs/serverless-spec-builder":"^1.3.14","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"6c4731be972449984148c098cd3399197ab15126","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.14","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-ojB+gxGB0/x6LDQI7YQw5u3vi0mrkAETWYa6EtEg7UtP1MEnN8jZJOMiJHhUpy5s4d4bwIidf9UXSrDaly7lMA==","shasum":"da51a31ab9338b9629e184d0e18e674248e0e15e","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.14.tgz","fileCount":191,"unpackedSize":421548,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID4juBgz3oAVFSua9LY/YQGFsiBYOnUzXipdIH6N4KQIAiAWl92vHTeGlgMOtJqDtC5JXvxlTJw7tLHy0HsSIqZ5MQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjQ4vUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp1ag//aOWWb+fo3/f2l2PfodVQn0J8DZi+AYvJ1BrVLGZ9SysKP4+D\r\nQeqErjYCiiQnFrb1ilZycUWpG34pm2dWq/rOH7rBflBz5Yr40w+EQFPnxF7t\r\n+dv6buOQf72RRuge8J3UOhPWVNzcKKsK1rFgIgvlttkAC9hVvsEnuay6n7Rw\r\nEILdeiXqWBLi1bHf6ymrrJvdNTEDyBCNQTh7FOdN+3cis+s0y28PL+U9zBgf\r\n476EGl0JNkjIQubF6JQjoNXh0bxVFXIDppP2Pz+QDg4hwX+FxnvXeVgL1mK/\r\nk3ouDxv4d7VcMYI36qnoAWTzHksb7jjJyhfIiZ5Ex90lqYNLeILrDqzgIUDB\r\nDLLK1fjE/qsKR5G8iJbS2nID+l46+ulCyQh6Pza8c7VUq7vHpq374sS63Ok3\r\n9not5EY65qpwHO0c6xoCaARfcv7QZx1v7s1G08GI7I8BDSurUAPX7SaAsqGf\r\nw5SVQ9KiLMqFoMOsySMrCuc5xzsW3FpxQIjzQ6CFTmcq6ggbJBdyO7YtLeu0\r\nCA1CiFxysdKWWybo/TDn795fQe/b6IrAHVIIIw8wB2Kc4DXHrRAxMzVI4WMF\r\nlXGPDFiZWMA0tA77rzF32EDnpzLgd8Rtkr2jd6rqYfpZ25fLUYDYpp1bVmun\r\nw3T2icyEoxgU/6yDICKBUJF5ZqBj6KdnnAM=\r\n=mCrh\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.14_1665371092165_0.2032953691753856"},"_hasShrinkwrap":false},"2.0.0-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.0-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.0-beta.1","@midwayjs/serverless-spec-builder":"^1.3.14","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"9970c6f92afeb789ac645bcbfb2bbb0e771c4bf8","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.0-beta.1","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-CPJKKX6CfQ2OfJzdsA3B2MGUvFHrZ7FpBRZHcA0RAbga6bamFVAKTkGjuetvYAdCVRiwoHEvzoswOFmnpHlhAQ==","shasum":"afe75b54280c2c70f5c6f9c6adca0d76f0f23929","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.0-beta.1.tgz","fileCount":191,"unpackedSize":421732,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGAnuKSCR2YWbAKxxZ8QnqsqpdPVm5YSHNkacv7EKoOvAiAHtT7vSsggE4rvrViOvzV2+S8P7RmFxcX5FTQFQHeOWA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjQ+h1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmomXQ/8C9Hf61rLHd3MCn7NVJinakAWDDU8XTv+d5T3PZ+fIKLOYR4l\r\nrG9adZTUvws2m9hBUO7PnrW0fptUwKZmgsHPpkqYVy/DH59bVl2T1IZef1tF\r\nZPHANtFpsfvPrI5sdp/IwuN+qfOfFKywD0Xaou3MHUpduSdnCl+xXn+qWowX\r\nubLvP24AjIZ+p0DtFpAJDoSl+tMHC1ueI9cYp2mQVld0W90DmZKgGe9dSZrA\r\nvM8A8yVFneyIE1oFhwkhnRQPOp8gEjUMQWGJ8O/pIArdKar+topkxhT1Gh9X\r\nL9BCLRZFXeGxLjiHsUNpF5tUx4s4YRk3UxTSQoP9lqlI0fnbfMxg6MJojGRR\r\nFj3iM86kHwZTG46JgGTYhTKBa3nNeTsLDYi7oDrEssIzgO2sXqrqRLaKc23J\r\nhXFmpJigCjhEL21cWT4VNIom6IqcH6a40S6lYdRWP3qkUKEEyATFZ48FCVu/\r\nn/fZ4MRaQzlC1ZKiS54LLWkYoq50I1zAfbv4fKQLyNQ2AuMa9qJ+MxPRaF92\r\nB0tpIlNJpQ3XFUuBPPrkoQjiagODDehFDPg5eSSGdj/VB/TKk1AbMi88WezI\r\nIgAUiDOaccQoBJTAYMpL09rCqyKeL5FmYufdDN39GhZI0wbbPZQkL4RbwbjA\r\ndrhZLeThaFA+6bNyKx6643myXMn2RPB+Ig8=\r\n=BLoX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.0-beta.1_1665394805297_0.37501533624744976"},"_hasShrinkwrap":false},"2.0.0":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.0","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.0","@midwayjs/serverless-spec-builder":"^2.0.0","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"1e8de48a027335b39f08d80c5cdb74ae79aee83d","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-hOiEFw+y6FQRzc7DeKFH4tiUqkx22lMPJ2TEiVxoUxgofEaBZaoLt4+remZMe9OX2nFbY7G4FTgVslE/tz7fvw==","shasum":"6c81fb9a2e8ae467ee0261436d9e2f626ada643f","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.0.tgz","fileCount":191,"unpackedSize":422137,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHAoNMdNbX7bYFSvkhpLBLb03pZY2ykd3sJKMRZVThtaAiEAqtPTYouTRRdi5dwcugkYiESN7MhF/sCx5Fh5MBZgecM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjR4oAACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqHWxAAo/SbPGNTsO9LsfzCA25cigEX0f4yEPOOk29Qmo0argZnKLf4\r\nMwFnZ0Fdn7qOnoVofWEWd0miYoiLb+L2MTP83td6LufjzggKHq7UTPh+WHlb\r\ny90JMblZmmjucl0ISpdwZtQSjHRdyDXLAEl9B/2FAoBDVqM95DT5A4wEEt5n\r\nSRVGVSSbV3cJ4+1TR5lcIyqWqnexJtLA69bcfMsyd2Fiq1Zih8oFNWg16hlp\r\nHOdsue3MsZvyJE1G/3PDJfTNBDYNxsTc1rTAv+hRXsLOlgfCXZ/qsK0eaMXh\r\naQs1YoGdRI5XyaZpnPCBlO+AYCZleySOxbS/DorKllSX/bV44Xe1dxQNCG/I\r\nmACFqOIhqbUSWc2gB1wKg4nYpbCv9/nDeHuYmTCKysF6+Rj3cc73TUIVsUQG\r\nUNwb+sns7B3VMMfvfd2qEEitRTE4zrP7A0FpxH4Yd8cgZB9CW0I1eCvlre+V\r\nCiWjVPPqUjObsTCQ9A5GK3enVmZGv8/ZmruxNoy8LMKKTZdgaG7k5nnD+8U0\r\nA398AyRC3zOEK6pxPu/UnkZvw8mxXdvIP+ogLfDP4YkrIPRXD3usoXPzwj4k\r\nAbzGktWFvmwlRK4pOLWvNz6RqZ3lEM6h/hFanHsMB7MUA76GG2GlxjxSm3V+\r\nTDDPogGVmKSe6UoQHqiZRxOIaI2Ym/ARxkE=\r\n=ERi3\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.0_1665632767764_0.9305168273403879"},"_hasShrinkwrap":false},"2.0.1":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.1","@midwayjs/serverless-spec-builder":"^2.0.0","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"bb8c768b47b96c13d53f461043d902be5fa09a2c","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.1","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-vWEweZWagShoeRjlrVgJLK/GNAlgo6YBzSo3Uyekp4BfK27YPi5r1qXvxmqI81h6cUOddLpiLejGRgAZguWT1w==","shasum":"b8c06eb52fdccdc833b7764521b1fc2c44b50944","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.1.tgz","fileCount":191,"unpackedSize":422552,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5jQAqySBBEFHzIY+4TdFkU8m1oHhrPMaRWkYzjKv/8QIhAP2MefaFSANU1Y8f/IaMKT5uizQIWTGuPSbJnUH7Hyna"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjW3UIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmphiA//SVPusFWqB49gpqnjXUhKLqvV22y85vqLf8Y/HliU8Zp8w2W4\r\n5ZS4kmOLxxmOaFcrqMK75kXZzz9imxzQglTb2w6nblXnyYGNS4vOv5fsE2aT\r\ngOSHF2bwpF6BcXpq15u5MRLCBl7C0xlcFMeUgxe7Do+tLizvELivEFbok8yY\r\nYh/9LAHKbAoLagVYjE5K1JgTPmw7+wP4Nb9iKgnVdhNDUIiYSHNuIRziecLb\r\nvflNls6UjeXFbth1RzMItWJEgaR4MtSkhtJFWDLm7YOVqq7cOdsyDnd9jktC\r\nnXMs5xlyP/DQ8uqjH4t158uZThKJt463SvKObtlCL+Gl1RUMAXY8ABy3RTiL\r\nhJZLLniqbpUde+ct494i3OokVeFmuGUyXK1JsioWv1m1SjoNVV6Ir46ggPSx\r\nIpveTFV1YkJabx0C9zNjCNDzXiVtHA+XOkcqlCi66+6p0De6LlwbkD0kBx9v\r\nOv7i2hklXx1N4+a8LB6dFoWso/MxlR8By4GAC6aTlTDQlFBQLJ8Rpdfp5eEK\r\nMVv1QIkpNeZlTQYK4hIjO0q/Bs833zsguDXQoTesB7lLXAo04m6WsMqzCSDT\r\nMOn/yUsz2eiFdYcWNyLfx9jGBoj3uQ/Ky5P6AIVWQA/7A+T1Cg3UcGyXkj+a\r\n6uYumwEC8wmKzu9Y09V1gZ0YaaKdEJ2Q/FA=\r\n=ZInZ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.1_1666938120082_0.6749639001463323"},"_hasShrinkwrap":false},"1.3.16":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.16","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.16","@midwayjs/serverless-spec-builder":"^1.3.14","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c3b279b6a53eb25008bb25bdcacb354aa4e7c68a","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.16","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-6zB/UVDp3/1m6uWRwyb0AfgldkqSJq+AGBdACp1WnHuwp95ZQcH3N8wSvKruy8UrhX8HXwWX6o4kw0QXowwZtg==","shasum":"98f0bb2defb5bb0a8bee2cc6a219faf9692f5e9f","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.16.tgz","fileCount":191,"unpackedSize":421709,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwv8uICwSRcg6wxManVfb/6UNVbvoj18DXZr8Za4EDfQIgTcTGU2YZJu4bVq6QIod/TYe/ztjoJRziozvEKFGi+ZY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjW5noACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoouw//UKeaSykDuP8iW+iHZKRATsmUI6vJDh3zSXRytBctaj2adeRE\r\nAXv16T8b2Blae2DyHL1m1nVx7ZzjIIW6VzfID3u+1FBPlMD+tmyhyXHhuj07\r\n+/NahZAHpVguCNzHDY0+6H8tkChb9cPG7AL+HROY8C54c32x3e8WfzJgSv1E\r\nng1spAOpRzPaxcuatr7HuGNrDuXIeaaGbQQXrVN00pvTikEyNjYchyNDSr12\r\ncnR6sCc4WX/pU3fwpMT3DqMoGBCYPhav/43nn2Dn7hCC2ZULWanC11N2dzdK\r\nsgtb448W4WBrD1Ot1Cs3Ot95iOGgClKYSfSzFZFTWOGAQ4J5ljF5wNZ0kfSz\r\noiLPqAAhPyvbY2XWBNrSAp7eavOzlDttslmEkstmbUxJ6QLrCneW6zhiRtnl\r\n2qCGAFhhZdnGCUk8BZUALWNAHVXabwLe55UOuZz9KGxZOfJZaezhkVUui1V1\r\nlFCrB2LDhsrTWVNbGJ0s2HWK/zfle0VXcVv6xrN6yLJaYOQ352LY7HXlvs51\r\nuUJsMLrKdxh9d+wHIpG9hiidRxaV/FvhYAhBlzPfdUwQfmOmNDyEoFBwGhS1\r\nddjzamX+OlNn48TU0VE2NVKXI9+/9VzKjbrZz46ITD+pfxRPPLuwTqCY7cM/\r\nD2vmkq6AWYNDHKZdj4bl3G4NJFwAuamlFDY=\r\n=ov7e\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.16_1666947560184_0.3614996998561417"},"_hasShrinkwrap":false},"2.0.2":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.2","@midwayjs/serverless-spec-builder":"^2.0.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"db2bce6c2f1665698255a20c1d33de261723dc12","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.2","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-qzHv/8ByaIXoF/2GocFxp1lx3naZOMbXWRwz3TNEnn3xkfOCEJ+ZljeqF73zVEm2tfhbcrEMaJe8AFhbQC08Lw==","shasum":"14b0be7a4c0bc6bbebcf7c22c19e3b6a76a6d468","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.2.tgz","fileCount":191,"unpackedSize":422710,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDndkoNImNPF/609+u1Pqb11Qy86GTbLxMXhhn455+USwIhANZfEmr8xV/srfAq+GE2nI4cqKQhXVEZx5RWkR+iLI00"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjddGCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmotXw//aj74ovVDziLLugFolGlscVvHVh46/akXgqmlv3DGAuzaxshQ\r\nu5ciCv8K8/UCJ2X3+jdmlKGX3QqoO7xZmcEYfXtpeyPrpb5gAGa8qnGhJWmX\r\n+fbGOfWSWtUt23qXuWKgBOkxF6UgeT294nLxe6DJT0ANuImXyFFum5JsKDRc\r\nTmiHyoOim0P5gfSGmQ2dwUobIjvtEq8/aouORkW/iyp/3Epxwl865bKwrA1M\r\nvGTtvCSPXqvzRg83Y7oZm35spICeM734huRffwtUFWBxAjyPgc7thEyt4L8J\r\nTA7ububhKypE8YcbOEn46Ac63n2bW/VO3TxYbFv40VuTBEfHnETniQbvbhZG\r\nqP4X26UPVrhCMRUTebOYUtnTC+EekOvU3SLhg02G9D3T+SiobOpnogsRtowi\r\nIYs0FIhDcCXJJui71IDtW1zHCDom9jefIXs8TVaqOQ3JTD7AUwASpuu189NJ\r\n9pJqREl83uDis31+gLCVt3gHFCfifmUThM1qcJDRawv3hjLFLaDSzdY0H15u\r\nAUTVvH0zIZMm5u2lhs5j8L1bx1svrlDc8p+0DdHriaZpvp5bIvM+9drJI93S\r\nr91VG8fI9cjpYJaiml56zTjs7FhXKMVu1yP3Ggqt+s2C20n4q9aLrilOvV9U\r\nzYhHpPEDzBfKgCswiz9woxBuTbdapo0Q0Qo=\r\n=M9tt\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.2_1668665729762_0.49478230416512825"},"_hasShrinkwrap":false},"1.3.17":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.17","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.17","@midwayjs/serverless-spec-builder":"^1.3.17","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"27387193483f399d1bc0ac66beff8556210557d0","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.17","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-l1jMSHw9GdgqFZf7QVqkhzuWA7qKghJctLTt40s/If2IxzWiOyODSuCncgwfSOY24Q7OLbai6qrIIGd8ZXTDyg==","shasum":"cdc6ada962c6e05a84539463c18bc875c1ed7140","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.17.tgz","fileCount":191,"unpackedSize":421870,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEMa0wQpHTTbilLNlgjdgPkPtKeeyOGZ3pagyo6PdwjgAiAgctTD8kErpXEndBlKWhI8tDDb9cDbQqjnti1Jr03eOA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjdv/TACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrLDA//dfNuMy0ultkChY3S0glsAAgsBA72i976KMvTmy+xhtMqc7lJ\r\nxLo8rJHbd5I8va0WcjtI/MfWECMpOPe4shL8UuZB6nXQ6JBYdJgW9Z2tThEG\r\n8U3VUTeLSCF6W4Le5VpA22/jc9CZBkiw/laT1EydqLIxRPT5I3pqaTHUH0+Z\r\nbH5KEVnHu0Aw4JWpjuF6+p51xjXX6VGuIaBTBau3EBK3kvuxriG6I8173ZNN\r\nOiD0BvkZWJw/Xr+HZ7+qubzrrsJ5XYMTNmKT1LcqnOGN//moolaGtKHH3zBz\r\nVS0EZ1JVsBdVL/SW4XlpbT3z7mwvgJmkNeqDkMwLdT9v666W/cE7TzENcZUZ\r\n+aVNK6x/cjFvwRH0AZJQtoBWZ2HdlFzA+bkK4r/f8BQ1BBGcQu5CxfNDyZYq\r\nSzxpmy9+91PJlz8CzJPM2B5ZtKxBtSyWeKj7EmwjdiX8St+bln04dCiyGu1M\r\n9aFWcyuZJbVEDgdkDz4iWDZ4EGY8EMk9TrIc4/ksJhtnqhygfNzW/elRqMpm\r\nbX2AGfersQsalZxtmdPo4vKOV7CBb19KF1anj009BcvB3vsE35kOgDAM5yK6\r\n83/7waGqjOlwpqKLeO0ijqpZaGVvCkl0MhpK9JxnPIxVFwpux8rY+9OMMzzu\r\nzm8jgk7Qjc9fq5GFCeaaaPtWRRbcAosRz4Y=\r\n=H2QS\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.17_1668743123059_0.3700840507578864"},"_hasShrinkwrap":false},"1.3.17-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.17-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.17-beta.1","@midwayjs/serverless-spec-builder":"^1.3.17","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"f29e8c13b6cb6cfced349bb2ad9b6fd14c9ff8bb","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.17-beta.1","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-FyWcQsQ0mr6eA5CFXUR9boHi448QNVmr6TZy2hQsqALDKFJ5jrnV4buG3anrX0qlRKbdSvNng+dMIuAJQhfuMA==","shasum":"a4eb59b040aa7323c6b2f58a2543d912e6129b64","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.17-beta.1.tgz","fileCount":191,"unpackedSize":422059,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEXTBW1max3QqZPoibbdvtS2S3J0647K1yc+45aKd6oxAiEAo2nNe3SSLKNTC3A/kz4ewvKF3R4jUx5F+vlozzeGLiI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjexkmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpXbA/+MaWVLz/u1++n44pdWuvQHxnr5b/s8wx0Mh+ggaF4vv5Q2KFp\r\n4Y1xS8S0DbD9FX7mUpMrVLezaGIQVqZCY9BE81j6CsGhT86icWtDJUfh9jpm\r\naDoFi/QlM7aHg879TuP4x0HHj0znHmC8OZ/iJLKR3yQTONNyFs4X+pTNccN9\r\nM77RRH0BndZyW65eV40G9N6E/kCbRNf9lIt4d1XJy1HQgNeIO1viskcZg2bQ\r\nqA6w22ZlZEsrhznqzB3E/8VuUlpThtKFhLeLXQ56w90l82jtAZLD6CRxT95Z\r\n9ZqUFmnbQUIMQ+Exw7HxI+v1Bg1GPOVuPORcWiCSFvfQK/6EC1yRT/3/NNDF\r\nKTJEHglEw/SRTAoA7FPUh8JSA/oQjtiD6Iu2WMS+dbDBWr5ItoWho3bmPM2u\r\nhSBu+cQxrVJakq78UZPlp4aqc0rf1pS1Rt2QOvlBzicC5tcsqccWi6Mj5qZW\r\nRO1rfVdRX3WMOgj2/NpBi86p59b7oF6TkUt8441QKaZKmKlaQg4uABOXFzDX\r\n59H4CIyw1lYwbLGYlebEX+4I1uYUqH7G4Hl6kWL6HwGWfFMCZpGyPAPNWF6R\r\nsBwsAlBhyuxUdzuTgL4M4qQF2KeCylpB1sGS/ORkuG1cdUvr1V1Spi8urXyi\r\nnLlbNzNPeY07HRo3jRL1hr5HUScja9NqmgM=\r\n=eTmt\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.17-beta.1_1669011750066_0.6012090161081085"},"_hasShrinkwrap":false},"1.3.18":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.18","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.18","@midwayjs/serverless-spec-builder":"^1.3.17","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"56702d53a0ace02869887d2226148d35dc1b67ea","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.18","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-IcmTI5Wg274j+lkr1F/3YKTsgfFUxdZ+EMGmBdAWRmtJmar1RA7lADLYkVwG562bbQg79Hp47tqvO7HwNHpUWw==","shasum":"bb7b3c67a6b7d348731cb007b80f9e475161855a","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.18.tgz","fileCount":191,"unpackedSize":422395,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNm6O5E3kBRxBGN/hLBzvDHtpyM+vbbQgOy/xuQgy9BwIgb3WmECqkBkDHQTsf/XsmC9fg9YGwQW+f4rw1MSyi72g="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJje2DPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqcfRAAguXonGdDu/j8mwWEWZMo7cBRxwB5qUGNoaeuSXLsnGf9QIT1\r\ntOxociEBNONcv/wbJZAV/O+klWI0Z7Rk6H9RKvmxOTq7dkd7z+2TEG4GHsGh\r\n2GEDNk72HRNupqjJyfmnRkmJYEh3hXMHULhbydiiwPfRHCAG/5hEEbS1a24P\r\n3Lwt4w4jxmMdiKGbvxu4uSwVef8M34gPBwgvBlmLDfeiOFmpXrM7bZMp5brW\r\nP2Ukp6yaE2CVgFE5igiX7sH0rbpmAGgNPqlUIBDa9qAx56iiWjtexeumBGXC\r\nog5ezmMeY2/Evf1d3ETDp5PQKR7abi99LSc1EdHZeVbmBxuEaBbJ/UzPrecj\r\nQZS2A0NMJ19kCdhUPhbEk1DqQAkNx0pfCfLCtfbwx8JQOyHGP3nvosuJtR1b\r\nmC82T6v/PkCTNfIgQ5CBPqRiwWTbkvS6SOnBl10wL/ZMdOoFsPiWInz/qDIl\r\nRwvMnU+tb6M2LkIuqTW3KYEllYaVpTcQmuVRfecMzRtu3JFW8YGM42qNB6o3\r\nvA8+j5LvzIzSusBAFyaw3ZFCW6a5tLwbX9CrGH557knSlD7zqyMZao2fo5d/\r\nU/FJYlXSWbzMIkHoCHF1CT+OWDIIjiI5an+oTQquVGHkuwzXrxhnYWzV2sDA\r\n5ikpC2FTk/mWpta6FQ4AvJozgRiSwDNEOno=\r\n=D0jm\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.18_1669030095470_0.7347135708147443"},"_hasShrinkwrap":false},"2.0.3":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.3","@midwayjs/serverless-spec-builder":"^2.0.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"f6c605754f0e118c4d083450a7f1d16567faa89c","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.3","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+x64 (darwin)","dist":{"integrity":"sha512-TEmegZfL4SLTlrpd8sekU5VT6Za7wh8Ua9Bt16inFy1kpO5Y6kGHfOzal9twaonUAL076KnMbNDluD/Lfj2iEw==","shasum":"c1a9682e9bf071226a38462eb4377b4f30dd95a3","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.3.tgz","fileCount":191,"unpackedSize":422868,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE4ijQseQAjnFMivuqbuKEpHuLatUl084mDvGncxVa3lAiAodtR3Z2RW7Um0PYipakT2z3RjJzBLxOYBoht4oYxynA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJje2ZjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqDgg//Z+iVmykbS8/agxbbbRyC62a2BH+Usqa3FDrmh/jg8ReW6708\r\n6NMd0VpKTAmifsPglbsfeOLe+gy086O5SaUaWNoLIRi/ONUIJ+HmbOs5yvI7\r\nvP2g/KTiDDKqLaheVEoNuKE9xqQZ4+P9n6bL1SXw9hM+J+zCVPktUV4Imz66\r\n4j9gKKGFA+Myl71+yolZ13z0YQTwJGb+VrhpGeDzkIy/sTHcqHVHmp/gRTeV\r\nlTAdV3Z80UJYJ0AWmAhkk8a6/6LBRzaim2rx7JFAQGc9wqXt9qV29eo8h9b/\r\nBGPz+B1yHcnTpPKv+xtz0pD3BjGo5BuN5ui0DxNe2bDXouUUiuHnSzTC18ap\r\nC6IU8fBExSmF36DlSjoh+cvFdgiOK4Mfuj5QOyjis9Pnc9PMNLRqD7E5upq7\r\n+AeYs4SAxTThr3zePWdymJABvbtE164rv4i9tZFBIRFITE0ixHhmrIVOTaeK\r\nwpmih0+htukvDkrhorOdQMWQpePdQ8QSBdxRhliZqZx51tAW/3VdtD0jY6vk\r\nxQ9dEPLGinGclrWRC2NxjdyScSXBJixEvljwLzYSWYSiusd1cP4zApUFZ4E6\r\nqUCWLSEtcb3ZaHh2wTUngzDrEK7vOGdpnJUt73+l4zQ4WycyxaB5373v1nYb\r\n384zQDz5lgQFERWoXTVc/RkxNHuyYNnWSO0=\r\n=ZKiL\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.3_1669031523039_0.947421229450869"},"_hasShrinkwrap":false},"1.3.19-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.19-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.19-beta.1","@midwayjs/serverless-spec-builder":"^1.3.17","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"478abff79e4d3abbf2e65de67626681ea009a5a7","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.19-beta.1","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-sbNL4fvFwG+GWmYzujyQiqm2bXc81TKGced8lZr1yEzTC6ZPkIa/9CAcH12G6XLi5z/wQ0GVZ8nuyVZCIV3jvQ==","shasum":"9d8b116c63827ee99c57e90dfb4c1327676d4d18","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.19-beta.1.tgz","fileCount":191,"unpackedSize":422584,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCM8Thbs+R0/y6wc3U3MlqtpCADiQkEBk+3+0Hvh87jpwIgNDNH1NS60WX8X48mkgF/KZ7S3sXmmKKIEZM/OKOdyw4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjfYsgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpgPg//eATlp4t/5v+joD2KZ0ETUQsGxtXGdsoyZTjhZRnLMlt2XsCT\r\n2cta/Upkq8uXielCCHcxfnsWmMMYbUjtf3KXg93fyqN1kE3wMRwmWvVlo3Su\r\nhVXFRh9qCSyi3mpTAdveAHXiBQfEnGiR48oHAQNi/iAHetRo0iQX3WdfkzuH\r\nQquCloydpfB0fsNRGfmeax5D/cvi4Lj81bdH7e7Q5odH0gVHa1j8y2UbjPa7\r\n9T9K734cZiE+84ZZuOT2gkeWf0O7vO3FLu2FWHWMr0BbShx2AZ+GZRQVPxt5\r\ntQ2U0hhE+aeX9wyJwrvxipDL5KLtRTZIvc5DyaaoON2pHqoi28CcrFkNtjKq\r\nzgc8DJ6aLW6QC2knIp5On3rT04lfNz/YK3CYq3MqBuYO6/DkBgkAoiF0qZOh\r\nCiApe6CgOR38rVHosUUzjoJ92GLff09hs6TylJUxuGztJ4QEfa4MBHncS8DZ\r\nO6g+alIjsFopa1nI/kO5ENvq7NJ7uX/gvTTLo6FFo6KdLEjbiB0dl8yrbFYg\r\nffErdj1oBk/SN3Fn/coUlzep/nBUpqaba7KBHRgtln/0cCO3tQpfEbLbdUR2\r\nofn6CIj7luXmfiisbmfPvxyYnsKzklPx4E9XTarVcA+1RKSqPb690vpGIkrZ\r\nVIBuaikwvgII5Bw9g9uVupofbBIOmgB1iG0=\r\n=uI6q\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.19-beta.1_1669172000335_0.8192797498752684"},"_hasShrinkwrap":false},"1.3.19-beta.2":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.19-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.19-beta.2","@midwayjs/serverless-spec-builder":"^1.3.19-beta.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"a5513cd4cf9d644841cda45b07a58e02bcc7341a","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.19-beta.2","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-JfWrCWGxDMTyay7wf6kpQGRJR5Bsu1p/Ft80fGFFnRO+1OWcnHiiZmQoXuudZtSacZjUlWF/QxyQoO9K8eqaBg==","shasum":"3912880041039d745f1d882b5b873f410f3531c9","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.19-beta.2.tgz","fileCount":191,"unpackedSize":422773,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDJIAHL6boHM/Jm15n+blWwQdOgVd2pf+J0elpWdpRfFAiEAmiZ/XO5J25w2bgRO+8/tWQ7n4Y1+SjpEOYW9atlW9Pk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjfY6DACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpkZQ//XCffD2K7V+RDhrjMy7/WexNL4MxD63cH9w8CHbNj/NHeGnpf\r\niBZbBR2NicKLVty85rnpmMT/NahzDAksYiRnDYrWEo/TO0XLhhcvRLPZu2md\r\nQPUYCSgkO4AzY4gG6U5TbwtzD+0CLoy3oFogbGFBJn6JtXF4/69zPZzXnYvU\r\ntdmlgTlGAoFIdT/ta9bg/U4QxqozHaZrsRolScb/6Qup3DIGwZEYiqLNNNMF\r\nnxjKWzW5eauuhDws/UHTJqhgdTjHRnXc/pH8ZSdSo3JlMbAH4SDVntC3a5HL\r\nAN4Q+K8bqM2p1ABF7KPIbywhBSmPQiEJs2DOIMOTbby/6GzvF/zx4ITA+UGj\r\n2jYr+Lny1BAEoKz8vf7raFuz0jGVXjouAwDwKrZ/F2bnauOjUmKJmdwty0kM\r\nPv5bbYq7KNApnIATCJhLahGF3jPukrvj4ataSzfer5V+Va/yONdrZXWTrCma\r\nBjd5xGahrnw6GCV3+bC9tc7q1ulhDAF2l5thW5jcO301kaTAp5w1KG9FGXMG\r\nkmAMbGojx9C560mLD+bECylSs+/cI3QOlym+h2w3AG27SUwMpDJl7qntDI6j\r\nUasTUzRXvxqAFQDju2GHmztrux/+4ROUV+ZhLMbZUsPX6jblSQSQhcyl65yh\r\no3+EEEuu3XfXO3924HxmMWkBFH0vrgmO0AE=\r\n=BonW\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.19-beta.2_1669172866882_0.9899614484673767"},"_hasShrinkwrap":false},"1.3.19":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.19","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.19","@midwayjs/serverless-spec-builder":"^1.3.19","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"c39955741c5c95735587db4aafcce6c79b99e6ee","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.19","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-lUXbvGpwACn4FnWPWZM1JWEM2VSwmWcx8DSufCbNGHsRsMK1C4es9hh5r0wQgM8WhCvLM3+/apmxXZ2uymLzjg==","shasum":"2453ecac0b10b37eec8f9fda60d33e3fe2de25d4","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.19.tgz","fileCount":191,"unpackedSize":423019,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAlcTSWmYl598jfLfRMMQUP0gff2Q+BJ3ag2+7skS3ueAiEAwvqw+Q88YaQfoVpvZN1MVYbAs7Hm9/3Z3iJuzo+ap7M="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjfZHLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpbPRAApSdidKNtg+qI9JbZNV781G9EhOFPj1pB1F+Eej4QPWbccprw\r\nuzPTkAoDa2gIuKDjpPYvvxQ+XcFDB53T0fwgPumUntSWPGBqfbUz1o9y++d0\r\nH+FIkfNJw9L7lDKsFZPZiWwM3+VIa5vYmMb2Gz0DXohcgdIkT8ujL9qE2jcV\r\nRM1Ms8WNpVrPo8TAHClEuhGYx9eBlQ4fGUnKlcSyDmZotUnIMqUFgJSuFFlb\r\nuY4YIdic2QypxnRlx09CyPehL8JpLkZdqeBUgzfasp6rVyIVmLfahQQlEYBN\r\nBtF9Tk6kCFZ7/6S/Q2mW1tsySY/NxuT/acVJxU00pEsIlUlf/ikca20qS0jD\r\nqbGx8ehNIRpbyM3Oq9hyIGCFlEphkUkdbbtEin2TrRs4MP2UdBtW4ZE7ub44\r\nFpKMYUXq2PAXpCoNoq/pzgokKqwz6HgVyOmZT8+AB+/Ue42+oEMOHDemhnkZ\r\nJhn4INddXZTNY3NZjvwTTcfZNQ2q61F3zCvTTpI/v8O1z0yRC/apaRm/HUkZ\r\nFsaa4fUlNEFYcM4qbki8iwHXKHOMpHj4YzRKtr72wB/ekqDc+INSjNmrKLOM\r\n3wgmPDNQJKXoUCkjnyHirDGaBOctsV23vK2DecdnLy/zoD5qF+Wzz/HdUwLe\r\nStLJcC19iae4/OK7ZPaFYy+8tAQMDuEFik4=\r\n=HwNn\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.19_1669173707160_0.8680778399140621"},"_hasShrinkwrap":false},"2.0.4":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.4","@midwayjs/serverless-spec-builder":"^2.0.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"6103f52b3642acf0bf12b59de40a6a693c36c2de","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.4","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-+SoFDB6NDV1+ZqHJ8GFghyFJBzmFfr/EhNIX/OYkZVdPLglKCBjq2ROROGjav0h5HMlUm3GDQu0PT9tKugBKhw==","shasum":"bf21c4bb08bf9b78773bbaa644b98152efc9ebed","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.4.tgz","fileCount":191,"unpackedSize":423026,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvN7OAQFPmc6ylV5MQvTWyV+j7jRCZh1oMIiuyQujVZwIhAJ94k9MGnRgSm0RjLgeS9pAphVU0jvLVaSQrk64lCqC9"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjfZKEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoG6BAAlCtExG2gDxa5Zmx2Qa6yTqALe5lc3Ho615Ba17sbGaNas9Vm\r\n4o8NI3+OlKNIy4MzXx5E0u/VBTvJmR5jxPas6smRN1YkyAyKm+xQvmyGq2Dt\r\nQfyDi3HA5sJUySPwCdPBjozYYj3EN/qe5USlA3OON52oiK6771o1W7WNTAq+\r\nW3GAT6i1++LmvrOxf1r3F4fwgS673zH6fLkcxK/GevgfZqIxl/xh+bhqGks6\r\nLce8GPz7iQPSN60+xT7yy3gK9cV3uOwrs2W83sAaZdX3qqHgMcrlvOJOnzMC\r\nCgJH0YUgGgSTvEa2by1/wVxeF+igxdA63+SANA3bNPCTynlussZox/J9MftC\r\ntXAf+aooG74OeMRqSod2qfghrWyzeV0KNhI98q8fqhq3hOag8KXuN0Frunwd\r\na9Z3rLzMt1AWJawSVocHesVl9ggOyrMYDqBJsNSNdKAkLOW8OceM2E1f9yB/\r\nMT8ijJqCVx4KAxFQH+I6N66W1cZFyYgGBmcqj1yuSO+PBbaKh/nZ2nyks6OH\r\nkwlyioKhs0+4iryjJtXH9JvsHWj4NTTyeBqpB99QYoWeLzlq+DEVwGEyTByo\r\nmYQfc67C1GzJOk/xhK64SRfY0bMYh+vR6WWqCLtnVXPrKu1D6cn9s0hVuIdv\r\nzRei9NnyFsgZ8qKxkvE47PtnK7Ympe65+sg=\r\n=6wNn\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.4_1669173892070_0.7061364858580967"},"_hasShrinkwrap":false},"2.0.5":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.5","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.5","@midwayjs/serverless-spec-builder":"^2.0.5","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"a8d3b91a63a57b6b2cca3ecc7689bfabff16a656","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.5","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-/qVM76Zwr3hd6fOvF6sd5kXh0rXP/gOk0YlZxNT9s+d8g0BneXBk5RS44egSh0dflooBwSO6Rz5Pe0lk5UkLlw==","shasum":"d15c640796872cfe67dfe48b1755b6148c9181f8","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.5.tgz","fileCount":191,"unpackedSize":423434,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDzEGKVFi7cKgFAkQQuykxl9zhex+LjJ2xD8wM5qtbYwIgThnOTEm2zE6ai5/6kInX+1WqeGcLKBQhhnFG57zFp8Y="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjiHxgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq2uA//auUTm+KS5Bjp90v22+Yr3AqZ/VRKrDEW9ClAVI3GtcW8mCT1\r\nKTbnO7LCMvBEsZJ2E+6UaqDxVXLioeYMwNGfBURqvAHDTC7sUizycCgzM1wW\r\nHpM+Zu6+dMYcFxzeGp9r+XHZfneel4LzCL7Dn72yVyasMyrOXBkGnoPBahGl\r\nxYDUKtXvJawpxhU6T5cm6HvzaSaNbeNXKCeaq05eOWgHVPPooQ/CS6SCdh9c\r\ntT7LtyKx11BlsCVmshGrzSJksDAjfmaPua0K7QRSCMLBLA56nTqBiCfc2lSN\r\nB3+6bwRiNecgx+sMLnENrnktuy9sOq4pd00ONykCTCdzt4gdFVJN0KL5DRRe\r\nXPkheLTeoM2hhjvRGKfg4K3w4zlMjw25vovwMQ1ZGu7uG2+2Jma4EVIxaIxH\r\nDCw6opf9W7IP+oQBlvUOM+sQS/xyi+TCYZ/9O+LeL6h1OH0AphkKBs0jh1Y/\r\nSVloL2fwk+9cyNfPxbguYqKkVH/l9H1CUUue3k67X6RuRYSa04RkNLLNLC9N\r\nfb82YOOlh9Cq5fhj9Et0vJuIXlQFh3O7ILb5UAHVnaqFMynnqd15iwEx1gTb\r\nPvU5mbSkW1ycYH2bC8JkQWNeSstGWn+3s+KdNfbidfj610ahmO08T5aqy/wX\r\n3upmDeB6o+btX3n3+e0dVN7a6jPJL5OAu74=\r\n=Rt54\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.5_1669889119929_0.048044059429042996"},"_hasShrinkwrap":false},"2.0.6":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.6","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.6","@midwayjs/serverless-spec-builder":"^2.0.6","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"7c4481b8ed7e8aa5b651f0abe64c702a815a5e36","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.6","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-u1km+4IGXsGJLPSN2pHfv3TqohjHbha2vXm3OgoYVhafLxDhNRi3HvVi/KQ7hfaMe5ZH4qYumqqVbM/35JPT1w==","shasum":"ced8884393a2ded8425bb12923f1ffad2772bed6","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.6.tgz","fileCount":191,"unpackedSize":423599,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCV6rIpTWG86nvY/70yW9q0JiW6hH38MoZNgOFlj7xJRQIgOxeYWwDWRQC0pulHh9im8GFAZdX9RGzVJQy4t88DruA="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjku+QACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqvlA//R9ESwd7v9R9D694GaQcvRR+HagWkBgZXfTYnjdaSGjnDiUE4\r\nz5u29iStUKAv+Z1zJ/ZQJ88He+c2xBP/TrS7bbm4sEnyzH+YVKdmwWjgdFZf\r\nt7OPe1X1zU78hDW4PF6nFZ8Ib0O48nAJY86tEb3rAOTT16c0AU+/jb+PtrJ0\r\nobBAAzpSscKy0pL4aRrXhGPdrI+nSzNy0Ci0ZhujqqdNnjD1w6dvGcNNcHlC\r\nVJNJ3De5FWdvo3b6kIlb4Gf7luhx/FVU//B9L1hQO3Sh9cl6byfgwJIwfgXv\r\nQJJFDXYK+I08kro+2Ku33ppPhI/gwU9vOHVuraQxfVsj4vcgWGVpeqByVM+m\r\ne02aIBIYh+lnkuHXZ9b65YCqvi4V0oFdvCQsiuOfc0MUVr7uP9DkyH2/TMJD\r\nN4wA/1CwJ6cpHOSEUMutyxHbO+wOcXmIn3AlFK42yIhsDxdAG8R2UQEXzFUW\r\nuaWV3/SU3oBHkzf+ffeJwZj3pSUsp8zPCLU435ZMrOkXQoVsqjJn/NPJWWZd\r\nGYr3OlTjPV/VwdMPHAECJhCUgxFf9C/bPRKUsWa3jJuC3Z0Jcu8pN8LO7GIv\r\nXDk5drvArZxsJq7wplYat9ci3jHv3yfCpGYJ3gV6j8MZyP0ECqhIGYHmIVg8\r\nCWEOWm2NP5I0hyjivpjlv4vWJNzAea5jNkc=\r\n=lLIN\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.6_1670573968486_0.07720912412582259"},"_hasShrinkwrap":false},"2.0.8-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.8-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.6","@midwayjs/serverless-spec-builder":"^2.0.8-beta.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"fc7eaa00f453a9033657624d24546f1c4330458e","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.8-beta.1","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-wXaQr0uuM3r9F27sfoCIkERA97QQtUxnFseg0gzoIj0Tr5+q2N3KA9Dyy9FARIeOyuwcr1VGPJefgFPBr0UgAQ==","shasum":"ed44d3cf7fda3fe3f1733fbc2fece68c71f197b8","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.8-beta.1.tgz","fileCount":191,"unpackedSize":423785,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGLRaVf1oJ6A02GLd760ZcJ6e7LK8hpZcwUx23/ep6S6AiEAwtOMCiLEx8jx74OyRKkx+B2iIM+Hskp8Eh7rTg4Z0ds="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjqV1XACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqezg//YBnvABeHJxWRyYhvPeTXDBqYTlk7xDCykahTUFf/Ymn4BoAX\r\nyeho5FS/dArBIBABQ9UMzBQWKNYl8tHRPnXat7Lj2W4zavKwz54EGOydXDIF\r\niTXHi7eayMu4Js5jrZ0hH6zcGkZS4YfItbYVPzXrhbOce45Ozmfvq9487t4B\r\nXHEfbu7ZPOXCzMPjAtfQVCbns2vKPQs4oJ8ZxI8sudAv9MDshlv5lvcrWxXt\r\nsbcwZw+WjjiMvc3zEPESN0IBUtj5MaVnCecMX7HSjMt2zy/ofNIML8fh9eRh\r\n3tWScAiBZFYyFswXzv5Ui0AN5JLdIU/GIKRtlYKy4TRWqrwlyqExrc/rkAcs\r\ncAQdnOSEhmFALUAyY3dZPMLlR2zgfUSyCQRMkFl64RnkhALuWcF7IVJcyk7I\r\nNNrPfJ+0k0iPrUFO6w9Skt42i+ybUDSrNKDU4oUTXRbin+dytbiWbkewmk00\r\nAyiRdoIt53Uk94Q6C31k7WPQ45hXlOIZ5UdGB5bQsqpGlTSdZ8Xtv6saJkCb\r\nl6r4go7dpXJAqGGvu6Fr33rQSwTXNxF/3ctcLvSKUcySBQ0ePUIvCHg9O/zK\r\nowxU5IExAIH1Ybl9U6i7BSKgQbhXdOmte5gxHkuG4fCFBx0zktOiDn59edlf\r\nhqSJopRwJToR7uygR9bkLDdRUZQ1q8jxX5w=\r\n=/6UN\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.8-beta.1_1672043863016_0.7593260301934677"},"_hasShrinkwrap":false},"2.0.8":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.8","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.6","@midwayjs/serverless-spec-builder":"^2.0.8","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"0277d74b7c32d41b3551aa6535aa66a18439a68f","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.8","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-RePI9+f4kE1F6STwz5hf32TJAM1Qop2f1WpO9d1H/6jnjMOTcHI/p2KKgBmGVwBcgZIXnRzB6552JKAvC0HfDw==","shasum":"03b180f30562b72a57b723d6aee691544e163205","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.8.tgz","fileCount":191,"unpackedSize":424038,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCk/xLZatHmDpnK854XvBewnxJIE1O5aQg2HuRqFwyDKgIhAJCYeWFlj4HvF3YBAiMDO9gv48ACWmrka29sAeQzDfPw"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjqmAsACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqLlQ/9E2AH+Qgl59imgHBGBvd0EFS8jPNWGUWOyBQbLPGjGVwcW/C9\r\nhe0yjrYnXH2UUmZkMqDHDk1HxRIGbjkTMHjNJhTs0y6I8FS3eZAdQDH7vl3+\r\n3+RUmp64xdleqki/ImGPzv58O1myhhOjUVSpzkXDSNtSNpPGR/gL42Mm7Nv9\r\nYfi7Rj6HuTcqi/hxx6gR7sMnb9eb1pjTwhR9k97d0Gi3wWazocL0mZoazFaj\r\nv4BKh8VK2mV1JMfpnUUHt1wXzyn+jpvI36hMnPvL5YjRaXkzR3cEymMPnElB\r\nF0WjdnjeV7TG0EDn6JWBYsfohs9/b/VACSrUP74MdQBGm5Ou1tuIIMK3x+Il\r\nlSmlt2PCAveCq4FiDRB77yQZyYECyntKdQet6FmRGcok0KyqyW84Onk9QE61\r\nPXp3c8ttXrT6mzvZj7/lkcICcrbF8H34gdst8wpW7fM51unbFsXVG9dv+PuT\r\nIfRQYW7lsFF9Z6OHlAhVw6KWJxrMp3oTLO8DdGd0UgvtcyDH0ScGXjHlkiAX\r\nQ59Tf+DGMbvTvkhw87AAWkJwsJ4OfW/T+QyPUY+sPUUa4aH2NPAlES9pFHTq\r\nkvDN5qV78gWuYPeO1LH3g64flsjw99t8TckFqI3dakObyAu/lFkWYHBSPmjB\r\nYB62xGGfRan88fJzjvKNuJcqKUUTRU+d5uo=\r\n=Hcrx\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.8_1672110123852_0.758115570525723"},"_hasShrinkwrap":false},"2.0.9-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.9-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.6","@midwayjs/serverless-spec-builder":"^2.0.9-beta.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"2c53bddfd9a8ffb7e01675c4889a3c1cec87e753","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.9-beta.1","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-Fnr3Nf2tBolgCXv8d1xj21fng+BfYZL3Ro7P54DF5F5TUQgpto3G+h7Kv0eMjXkw+i8+Z2YFLnEk/bso0zZ2aA==","shasum":"dbf3bc2369344c4da7f2460acd609ed6a28bab52","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.9-beta.1.tgz","fileCount":191,"unpackedSize":424224,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC2pHXEML2EZcvcH4SmASgG8Pt0BBOtB9t0tu5yfVASJAiEA+Cqjy5GGN1w9B7OOmU+nlUT7ghjnX3aLJqyMsUPVpKE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjrTAGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp+dQ//YAwGgFfQgfaasxBidF0/zRvM5vuxDcLYCyM6Ysh4XhXor3Mg\r\nCS4DyG0zYT1yWcHA1RLEa0r1WBUboRdv/6Bh+aC6nRkqzwTsMWk1m2boWrfJ\r\n9ftk9knKBRUnIFIcPixnkeMDOXDhkO92V/4kfsJqr+2pbtC1dPiy2VS8bPqF\r\nLv5b9HvdaaPWnEWsjVq2c9MvUg3vMmbBpMDk8sjp6fbkZJXSgWvR3Lr0eaV5\r\n0QZwR9ViNnoZtmfmrSXvyBKuVPSziauOZ4hdH9bfHF59TbWgehIjdGvpYfkC\r\nCPaVxCK4TMb0hYEUy4VtGuHT25PO+9u+gZtIYZenUO/9s84sgzcTq3qCQsRm\r\nRi3CDSFfOL0WJJ52HRJBg35z31zIjnd732FXD7eVF7PnORBvz6Dil76mEc8M\r\nuqe+z4zk3ElX5MhN8HIGSRLT6Dcc/vif/yt81EYLKelvykxk2oS3gpW0Q5d0\r\nS3Te6oSCOIf7tFkyUTzsZP/t0l5Teyc9V1OkZmf99IBwGoJ1g3wf6Ftsl4ok\r\nELo1IPIyk/HDmeE6gNyyVPOPnvusVpENWmh8aqmMQcLC0V9GyQ+UaIBXuWEn\r\nGMWRa0yLMXF3YuZliFnz3yg1FbTaO23h3ruk76vuE2SFlGipn1ed4T2F3XhH\r\n8GCYRdvNXUOCqgMM0FZf1oOpH+ZQR3oINfQ=\r\n=m/Qy\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.9-beta.1_1672294406210_0.41917589588101567"},"_hasShrinkwrap":false},"2.0.9":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.9","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.6","@midwayjs/serverless-spec-builder":"^2.0.9","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"a4e4e55742ce45db03c3103cd3e3e8b37f153f4c","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.9","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-NV/sBkXY6kogFJEZSvs9G0uZphvhCGTBKIdxVRLgbXoOeWjVfAdY809t8mQTKjw2UP8NehP1XecH0OhAzFrztQ==","shasum":"499d4ff79925218be3914d372c4987d02c15a20f","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.9.tgz","fileCount":191,"unpackedSize":424480,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrA3CmYyGiRFg0aAKgC5XeInnLNwRy5M3MGxwbo+aJhwIhANOgjfzAPeOjyOZZ7Y+jEcD8OK1v1F4CPWYpjM1mfO5M"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjrov7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo7bBAAiLGjsYVdShOua7mqQl9wS+aIq6D+RQJh4yvcJEBv2IXv+R0P\r\n1D71zQUqZ4zIThrzpwzchZ5fqaGpFzdpZFzw56mhZ5YaRgMvEc19a9gVklUK\r\nZJlDLtSWdslCbxjWwGY7ZzMKmD90ZfWaoptQixTj83c0EkZA+6C2QoJI1YKu\r\nmoPXmXNPnkB9PhgiQbjhsVN2IhzHyC1zLgLYQcfEeUvnbm3+FW+695EsdGI+\r\nw7FQaqvLT8r+bjkOCqVSsozXWhGtGPALgzEmrC7iOP69fScy+r/y3a1NEhrA\r\nnXCNmxCV3HNfHDiqr+8spmBZNzgWMY57Dv0zpE30O3fGVbvoxkFzsw4XQHIL\r\nqxXbpnPHbgj0XS9Ow/k0zODfSkKDyB9n3nt3VLJEZEzl86JUPgQSEwlK+V03\r\n+C11D+DRILHS2JUNwWRqNhxWmjN1oPmWrFaKpj+kY26PJ0xFGDqLblqG2kkB\r\nGb0AvWZFzLVC6brZ6xNUq178Ihy7/Jm8SjnCL1+dPvJ1dS2BORmz52pXA2VW\r\nYK9dH4NZXEInrFEaYdxkwY5rNOUjU0E/8L/tD1Rg1E18AbM/8QgOKpnat3LW\r\n2dzgNylBM9P+3caGmdWl5w7Ryb8mrgXh2kKGwFKW/WXqRC03zekRQZIZe4cj\r\ns6X32zCmOHgGzORlGPFdrpyqSxHyHf3iE0A=\r\n=qvsi\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.9_1672383482818_0.06037832837416879"},"_hasShrinkwrap":false},"2.0.10-beta.2":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.10-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.6","@midwayjs/serverless-spec-builder":"^2.0.10-beta.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"43c9a741fb766434ecd0bd3f681832e69d7d5780","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.10-beta.2","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-b7G+Kh2Uh4ECYSvuFFpklIzkumBPz1pxFQl2tBGLFGMo4z55LR5GNpr83OP4iP7sHTrFKYIb2ZZNtzCyQAMJuQ==","shasum":"d9940220b3ea24d57f12a58a9f6c0a28db980f5d","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.10-beta.2.tgz","fileCount":191,"unpackedSize":424678,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzMcgRq477Npqfgc3YD1ynKTura9wue30Ebcb7jL9OXQIgRsrOncnkKnOUvBASyKsKZusVR0otMOmulnulU43RUlY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjt+3fACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp2pQ//XgCRS83t+yvPw2yTyjgEFB+6nBAWYLzD+tAr+Dk8pktFZXTC\r\nOQBAauRyaHxXPo0wW2vI8fwNfj5p+fZuDdVeX0EQdctYvdPn5QWtF/usMUHb\r\nbh0Ak5JM3tRAD34KO32D697panH2vHxm4B8gJHUsOkHp0KuStSOBzboX4Ys/\r\nwxT41JjQp2Jv0wRA1Zp1LRsLG1+BjOMKvzrUzSYfUkcT4EA2sOUYequhKpBv\r\nje4ewuUuqOtrHVbCyws0Tsx3Jswp87ADHTtbYwYy6rkTVqD8/HUzMZP6R7P5\r\nmixkIsOUYr5UpllznBus+mLjocLKFiT2n5W0hfZXoPY58HNBsFRydwjPYJql\r\n2ugR1UEu917CTy09kmFOUjbULSjpV+dWWz5AEiFUacUVXc5XVcy6GtL7gQ0m\r\n4oQYXdrrdf0UaxwG/yJ8iQTQLHZyekETN8GAvPtWkFqEWMtjj06jBPoBtl5C\r\n1RO8WVABL4aEvHFqzQMWbk10ru3ZejZErfyxODKfa+vZDBvNMmAmHFC+x+bL\r\nnS136oS/bZ5lR5Vs6pbPQefEGu4+OjZ4uzMUH1HgJzYBEJJIeliU6UJAMbcf\r\ni7mYGra1ZhfLAiA57YhMzJLOiXuWMaZyywsmMlZLd189QpL3XO9fRmPeTv/8\r\n2aPYe51i8HwLORndMlugP9GqtqBFFQEoJ/M=\r\n=js2J\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.10-beta.2_1672998367196_0.4592636768658229"},"_hasShrinkwrap":false},"2.0.10":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.10","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.6","@midwayjs/serverless-spec-builder":"^2.0.10","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"d9d42ed25de44cb4b10698419e2ea431879bb10a","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.10","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-tJwpxm2qlz7I3+/a8My2F83Ms+aO016xENjyGVXUZOve942XOXh/f/A+0e9WGfxYwxhxiDG4Z/4KTdJQyeZ/PQ==","shasum":"5f7647d6be014c25d1b5ab0ad3ca018d5ac46dae","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.10.tgz","fileCount":191,"unpackedSize":424824,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFMnJrd3FA8FB7XDORYTqpbcPmBjcFvMqe/fQ2YsJKJRAiEAiAPvLPJe2kCLETWpkF2UziZxV9G5Rnos2C+DI2la0b4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJju7HmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqsYA/+N0o5WS14gXWa46i0NnRr9UVwoTrhiUwiVi4Zoue5jhEGbAsq\r\nkN3fWNhUpqHqUFwn+hQ8XrN2+ctXSl9ZQXwez0URFq79m4Q+88oWN8QBZ0Oq\r\nasyK2qNyPLsjPX8iyv4cvp/fM6XIjYz2cL90mrtU12KLeaZ776FR5kTV0neb\r\nRi0O9HWc4YoUGwd+TCWxSBDzchH8IAfTGelpg6nsZPI9QCRPxQEQrgjTSSLG\r\nqTCRehaQLJV5e+zK/FeFAm9uSE13SVgWBniA0v80cSP9d12BsnE9/ylGAcN/\r\nJbBLmIbHlJX+YUFaPKYmYksXAFN07MNdMZad8SubMaDOHrFj3Zd/ZY1wtZkM\r\nrpHwx9tvqFotjynLSXXcHDXiXhSIDYpPM8W/0OyyBClp/kA/tAgRUyF7HWcf\r\nUGOLFKWnfSGwNLkUHWl1R7FYDtG4+bRfV9yXEsbH4s8cPuhhT8/mMErkhOvL\r\np2WYQgyW2zIOyWok1d3kg8K5RHH7jSEPD/LndSlnwXa6X5nIIfOCOsvWa0Qo\r\nUXTxHT8NceFL5r9rIDgDmEzahDAx1shT9py0w/yQTEi0QPPTc+oow66xdcwS\r\ny3hIZCbzmC+8IW7jYH3blQVIIHnQ9J9AFsSCcfnTjVDlHZPgpcm8ahus5Te7\r\nLekJJpAUU/depBbz3t6MJxOTTEZXCWAr62k=\r\n=ZvZm\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.10_1673245158338_0.3230078794135982"},"_hasShrinkwrap":false},"1.3.22":{"name":"@midwayjs/cli-plugin-generator","version":"1.3.22","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^1.3.19","@midwayjs/serverless-spec-builder":"^1.3.22","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"349a07af6d4926c4fbf93f81f0b7dde0a62f47ec","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@1.3.22","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-77ER8Xqwgm6SHfNQsXDvG+d9udMbUZEtpy9SV1eVTqswE6jf3JTuc9Nn/lmZc/B1zZubSYNbUcFkHNSixvu+YQ==","shasum":"820c402dff2590c488cbdb0a27b5c07040344405","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-1.3.22.tgz","fileCount":191,"unpackedSize":423180,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKwgLT3J+pnK9FwW94kZm9a1tTNP5Umcyq+tj17V/s3AIhAK9D6ol1t2a+Y4CKFx1//8hGOgiv0aiOoahm0ZD6zMrz"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj2IphACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmra7hAAjUqw2oBrSB7nPNTTKPNOhjXTt4VXxYhFdit/lc7YY2pLGN8q\r\nmqOcSuU9GRGUx1kL1l0QM6pLpKNYBMaGNvCpX4nFjiGntc5DOIa6N0bV4nEv\r\nDqgiSbaM6QfjuEKwVHu6jPrJCRpJAj8SuTOP48D76wIA1JskCCUd9dOXdwKO\r\nNNVbAAeBW3Iq2Dqij9c7CjVYNq27So1hEP6ilwWXhIrVw0OmnbWNy2+P1UP/\r\nkEsWioJg2PaGTQMrrq+e4wzQ/PP8xBNm/kJIt2D/QqOWO93oJ0QJgei3+UYS\r\nJs9bvjhx2l9YD9/4uZedO6Xho9gGTGoIAuoyMGmzYFDRnTqDsBqCXto36pVN\r\n84e9CowV+KZtCOvUXdcWdnEzi69YTaLmGlYjJwxd71jAvKxkCqk3R9aSuvyB\r\nAmcd+wDgzXKC8mNxOnyq3MKL7JbCT9hxDnFEvW9KyqkyS5AZk3hlifc9cSmo\r\ni3kIvMHHl/6g5uDHZp14gzm2Ug1P004RM115Tqr3LMoKDu77mFqDNcGSr6Qe\r\ntUNhIghNG9yohz57Oh3o7SVLmOeJ/JKF+VPnthrasRDDIvurppbA5TPIHk+G\r\nGoQSXNFT4K5PvvZZZKkZz+nERogXWJn9YoQOBEL0wfIcVvjXiOVvGn45kEKc\r\nG+3Vypg98VogKM9PkiPgEyxXnq4hG3FbnKg=\r\n=6QEW\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_1.3.22_1675135584934_0.11408697916888677"},"_hasShrinkwrap":false},"2.0.14-beta.1":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.14-beta.1","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.6","@midwayjs/serverless-spec-builder":"^2.0.14-beta.1","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"1c8413b340095670576a8c41f9b7bffc6a2cf325","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.14-beta.1","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-ougVeNANuv8uOD084tf4FRPFIu1AwYYrJSxA1a7HJosdw+2vmcbyni6TESbSDzQ0NuqqnV9b/PacJ5X/rmfmMQ==","shasum":"10e21590a257da6a34bfbc7cec1ed2c0d9e56107","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.14-beta.1.tgz","fileCount":191,"unpackedSize":425013,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFBGi500W9c9UwvjLzP1BnTyLx5C6WpUB4hjM4rJIdyEAiEAg8qyAdOjem4w3TdSAA5vMLswQdCk5IUqh+2M/+ZG0EU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj4f5LACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqHDw//V6T/UyEgPqTzEnQ/LMVZNxZLHWQIf621b9bAnzJ4TJ7z8674\r\n3I7Z3CUlCnetdKGgBCrmBPmyU1r46Gwxab9ELdvhlNniB06dqi7sXP3nPrCo\r\nn7bY41cHZR5HBevt+PN6Zg16G0lijj6ugkRGJ6GKjcbUB9uhuGIfVWy0h+jK\r\nsG29pkLtQIsbA7f97dxXPXHJuKqqB0/i3wbY2pjxomkJjAzPUd2loja8cvC4\r\nANps57B9NpElSRaYpMzijicYKqfXJpfX9lLdOCc11BibnH1xmt+5Wga5pbyD\r\n1wB44EnJs6WSDmFJeAOu0Qq4MXbujGrfEZQVIYx/eRjkTcuaAjTff4pVKjn3\r\n5zcyJhQW2FXLLMoCy91kOXHU7EVchXZL4BPIEAk3Dvi+cyyKlm43VNzGt/tV\r\nJKpTyZFlJx5P7GVLG8RSJLeXa1yZUgEQSDVH5IY/vbks4S9OcvwLR4S4Gii7\r\npk8h1Leej6eJt6sqykE7M33EIvaGn+ZERTzGGqOh128zPN5HaSwT2LCqgGNC\r\nQm/XlwQZu9cy/KrVH5iupO+KWw08cPPlT409YivOi1GB1pYoxldD18zwJQbe\r\nMnIfm+b1xX7Ty0fRCUO3ugpKkIHJR79CaU3bpWe0j+lz2ZX0sO1RKYJYiEwI\r\nsgXxP8hA9NePdU+nTxScT1k+vQQEMPCaEiE=\r\n=murP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.14-beta.1_1675755083003_0.32393699582902613"},"_hasShrinkwrap":false},"2.0.14-beta.2":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.14-beta.2","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.14-beta.2","@midwayjs/serverless-spec-builder":"^2.0.14-beta.2","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"36dec453856ed3c3d3c79e8cf92c53a7c9dcf3b0","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.14-beta.2","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-2/XQPYmUxWtTBj9RMZdc0YY8ykQKYgNbP5hn0xM8KP1gO6dK7ZjRqoVp/U2FVRQhNDMWLqFF0+weF78+MGmGaA==","shasum":"b2edd677155ec434ede8e9b3b4ecee4f1533827f","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.14-beta.2.tgz","fileCount":191,"unpackedSize":425301,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC8Ac0FDtM+frHi1X2+ouls6k7dsrPpK2Yh75OBF5woVAiEAwnmlJ8SCe6H1tmJrjNbDf3fbxGejS9O2d2H8klUo9tU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj6ztWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq4Gg//dqII774Elraa+JD5ajUDtc7Ib1h+L5Lex52oO/S9F4TBuMAX\r\nI4OZ0b+GyELfckwgCRxN3v4Xxdx25DnOK+xDMVXo0eSAR6bNM8BbLEinIQYP\r\n9BxuTq83j5Sg79y74CSuPRmWaJ5eUFiS7shrzGIaO78Wuj9OTFphSSxpKdDR\r\nt+Rwgp9YAYFzu2JGllIVimVNwMfSn8QiViFQhIoHzD8b7gua4XQgB+u8g4xL\r\n9+TaFdjuqufdLPAxk8CAPluWW5yjshzWcqRgAdlGsiJeISSnkLc+5b3+ifRJ\r\n1gT3HSTaC60CBv3uloLgwf/52TXGJp8NGrLFjrZbIBLh1xlKaQ/adkFHRhci\r\nqa8XsZDr8GeiZ61TepCXBwyfUT8CTceaIUNo62yywleuQ2210Xb2TL9LV35V\r\nxJMy+yLrsfv5eHsn682MTkVMO68deO1wtkdeZb6vCgyPK6t2Hs7hFhf3M+l6\r\nsUBA2fgfwZPOIb2tJNE0YWZp+P7W41Putm2cudzCEDukAZ4oD4AGhTHw3kaA\r\n0A8umkGMO8VLlY49W45P35vfIsY66bRbEDR86NYPEaWGTKunlHdWjx/hLikd\r\nOawtrMjAB9EAcSMB2TtiIjqHNLGpbpy+RvP8UeTs1GvJiOQl3SamuKKCs23C\r\n+03d17bcFRyn8IglVvGCjO5eVKwcvi10erA=\r\n=971q\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.14-beta.2_1676360533914_0.6956506609079087"},"_hasShrinkwrap":false},"2.0.14-beta.3":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.14-beta.3","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.14-beta.3","@midwayjs/serverless-spec-builder":"^2.0.14-beta.3","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"840436309a3937876ebbff9c3e2bf41b05cd1fe4","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.14-beta.3","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-gv+5cqQ+dYaSoPp3Y+9fLLTunmg6rTP7Vi5Dp2MJQEUR7SgGav94j9TYoekP00Og7S7XYSkSxyfst6p4raa9UQ==","shasum":"1888b8e5fd461a77ad3975614975cd69e789e6cb","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.14-beta.3.tgz","fileCount":191,"unpackedSize":425483,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyNjP4iw0pHedYehfbSRVvkYWaIbDA08V7BsseKnajnAIhAPit66EDG8/1KXZJXFUspjmF6obXul8tAYDNHGE+uHdo"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj7JuOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq8Gg/+O4ysVzFUrw3tFzONvC2P0CazhYe9MvYWCk0dyovl7wGfBVaY\r\nmVS7bdI1f4B4fE0bNaGnVqSqKFaxEiAL2nTbtCEV+6uiHwds2rd3Oud1vasW\r\n+vKZJ8e7ghphFvVL1wtr8Qa2W+CYVn02NOBEshSX3CWvEKkoeP6YuDbsJwz7\r\n2hM1kUOBue4MJbWM6h7EWJK7mIYYY9KUeGbxeqahaGs1kKC8rFVOCPw0sKsE\r\nxt4iO3o4Y2RutSYmw8NsT2LEZfjavMpGWe8n8GaWQvDXSreKshAQz1yD9xkl\r\nxlwbk0G/xnMweyo139fJr82fkZBKaU/KDH/x1z3HI1qmAItRlCfQAVB4H0sd\r\ndfuGCZIPmDQdWgT7gJ4pwfDg9klSIkjN73PVFlWIEkjKlyoPxzVRnANG2lbi\r\nvkCnOfiDOTC9I9yyfuOE6buG+wcoQPxrVBhKgwBt93IjQ+kgIaWYBmLJKdkp\r\nmLkZeLf9sdj6CCLi+7AWKs7auT1Nd/H8NSl8soQxC9gd73tAb9YgbqooK8lD\r\nemPZRJ1NH0X0RqyaM1Bf0LkVTprjwl6F18FSttp08V3OqGvgL2FXpgM+qAE1\r\nDw9ou5lfsY4yxyBDT929alboOnOHZmN5ripLbfjWY5iq5Nw/YBWBUvubeDcG\r\nvBulqhp40uS8EI1m1f2iM46+l38fHaNWsBI=\r\n=cE+R\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.14-beta.3_1676450702017_0.22292900830426432"},"_hasShrinkwrap":false},"2.0.14-beta.4":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.14-beta.4","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.14-beta.4","@midwayjs/serverless-spec-builder":"^2.0.14-beta.4","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"d969458e79b509ddc56d6b9af9460b80ed7274ea","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.14-beta.4","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-D4tALh13Kf+V3DOWicBj8MqeAh+5RJEPLQdUJ6I8vdgEWfk7Hd5Gc5jPmoGK7QmAoDPXHuJBnkmcMFnSfrXwHQ==","shasum":"741c4a41dd68e4e69ddb351edf8f0df39b172dbd","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.14-beta.4.tgz","fileCount":191,"unpackedSize":425940,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICyGLmwL7fKXKpRapXtTWbDzYsGbydTZ8YJEOSTytF7cAiAicgstW6amZBaJIhwFcIjDINg3eE6KZM78Yfh2r0rsZg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkAZciACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrLOBAAgmEfHfyHZ2DNE2EiFcjEZ8R0Jvv3H+zPhhhoCjULjcpSP8Du\r\nDa4hDktBmJgfKrHw1ji0XszlDav2pNrxNn8DkrdJ2Ey5nxDHaQgpzZnKsNu1\r\nsL+Eb+zfvx0g9szr3+8+C5g/5H/9Osh1T/yyXgz3i8UAASL/CVafTXNgSFOl\r\njP5ylaGqnvm6JmV0B778CmZd8W4sV3DAmc0i3GQsNjSxtwkXqY4XB8rTy3Of\r\nbO/0GT+PqAP2cpnW1WoCrVRWeMKJAIjI4u1G/GGnovg/r+X0EbgNkR8v7Acn\r\ngVaC0pKv71R1vlK9VTdEGHv5oCJx2uAQxLfrKdsm3kjZ4h7lZEg8alKFmj9X\r\nZw/CsjvmTSn7/pFwLu1t0Pog760aLi0SybyZLke53OXQTYfYS1MscuxzHov2\r\n4Ty0IbaGMiL0I4xq42DBksoIVVB2FgP2cL7zyBu9nDUi14YSpX1OzulTFg1F\r\nO7h6031ZTmpfe8q28jNuK870Db3j0mO521G4bQxrP+ExKYqzX64OmSez+PY7\r\nHZ3nWK8mmyi80cuyVJxKIgUcBOa9JcluBtVDj+uMteHOOwR4Wl7IgObGpByD\r\nY4d7UFE64IBImX/iVUTlkBrR0JLgDcPX856MNbaRhkteJmv0CmQVtlfMTKi3\r\nOMI/GaOJoaO8VJnAfcq9/5U4RWDM1sjLYpI=\r\n=Ab0L\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.14-beta.4_1677825826752_0.21239119649994898"},"_hasShrinkwrap":false},"2.0.14":{"name":"@midwayjs/cli-plugin-generator","version":"2.0.14","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.0.14","@midwayjs/serverless-spec-builder":"^2.0.14","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"dc8399de824a031228c8d4bc72634feab0e4f5dd","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.0.14","_nodeVersion":"16.13.0","_npmVersion":"lerna/3.22.1/node@v16.13.0+x64 (darwin)","dist":{"integrity":"sha512-IUO6E3U346TdZLUNLtT7BsVmhBJcp5Fjeqz9Kn7D0QO9FhMdvQxm54C9IAmtxRv7XBxhIMXBmZ7CyOHfjYizKw==","shasum":"070e048adfc8d22cd10583ccb70fe9cae303c48a","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.0.14.tgz","fileCount":191,"unpackedSize":426523,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFl9nMKz7Qx7hH4CDe3XRK7jLfc0XwyU3Z1BX3M34l8wIhAJpbDhjXdmJfjpWoDpY16C6VZu40wPz0Vl93LuLE4HpF"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkAaoYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpbWQ//ZoozSrlSQyrbte/E2gyuTGEeYBQFOeeIHD8RiuvE2JHW66lM\r\nXXN2psisC7DveaTkhIHGo0t2FH0RAeezRsNqk5AGvGA+aWBCSbIbuwcHP/qg\r\nB7iZYG3x7cFwtKuWg69lLDlxi5a+hL1D5pnj9+x67cglfXzBG3TmnhwuZIe5\r\n5aloE3xOmQ7CypUwPJAJqS8pNqx9HTSdRZv2+r/UtQpohozHtN5GdC7T11Ql\r\nOIqw9scEsYJSTt9paMqhzp6Sr2zZq1LbSYwlOwegaKFYjAdFOg5SadK5fR8K\r\nJEMzrA5s2NXzoexGNmGuv/XjkV/kgXssDzD5wf4p8pcEWQ2Zb/IPCrxOFD55\r\nhk3ehsToeqkOA42zQkXodCxgLo7i7RLtoebf332G2iWN5q08t4y6ADRNw/1V\r\nWcX+wcKImC7+XT4j+FOclM/BIGHNByheNf/RClPMYnvhVlQ/vHIiltO8N56U\r\nAKDLWI2MU7t8JuE7kql36UL/ilWqwp+HXbz8/j5dEHRcO+3z/phLcupmKeTM\r\nhQ6AHys26NynxQD5vQnu3FNi7sbXPxnnBFzYd5er+UMkyvS9IQKomD2mCida\r\nkxd2HmhFANJfv1kCJl1+xkV9gdVE9yNbJC4MRN4bsELfiy8XGKVKbrol4ERe\r\nwhtY8rls6Z778F0FltqBRTJ0Xpy7565UFIQ=\r\n=KfzB\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"echosoar","email":"82163514@qq.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.0.14_1677830680174_0.05196899870756311"},"_hasShrinkwrap":false},"2.1.0":{"name":"@midwayjs/cli-plugin-generator","version":"2.1.0","main":"dist/index","typings":"dist/index.d.ts","dependencies":{"@midwayjs/command-core":"^2.1.0","@midwayjs/serverless-spec-builder":"^2.1.0","camel-case":"^4.1.2","capital-case":"^1.0.4","chalk":"^4.1.2","consola":"^2.15.3","constant-case":"^3.0.4","cpy":"^8.1.2","dot-case":"^3.0.4","ejs":"^3.1.6","execa":"^5.1.1","find-up":"^5.0.0","fs-extra":"^8.1.0","inquirer":"^8.1.2","js-yaml":"^4.1.0","jsonfile":"^6.1.0","lodash":"^4.17.21","lower-case":"^2.0.2","min-indent":"^1.0.1","normalize-package-data":"^3.0.2","parse-json":"^5.2.0","prettier":"^2.3.2","read-pkg":"^6.0.0","sqlite":"^4.0.23","strip-comments":"^2.0.1","strip-indent":"^4.0.0","ts-morph":"^11.0.3","ts-transformer-keys":"^0.4.3"},"devDependencies":{"@types/ejs":"^3.0.7","@types/fs-extra":"^8.1.0","@types/inquirer":"^7.3.3","@types/jest":"^26.0.24","@types/js-yaml":"^4.0.2","@types/jsonfile":"^6.0.1","@types/lodash":"^4.14.171","@types/node":"^16.4.10","@types/parse-json":"^4.0.0","@types/prettier":"^2.3.2","@types/strip-comments":"^2.0.1","typescript":"^4.1.0"},"engines":{"node":">= 10"},"scripts":{"build":"tsc --build && npm run copy","lint":"../../node_modules/.bin/eslint .","ci-test-only":"TESTS=test/lib/cmd/cov.test.js npm run test-local","ci":"npm run lint && npm run pkgfiles -- --check && npm run ci-test-only && npm run cov","copy":"cp -r ./src/templates ./dist","test":"jest -i","posttest":"node ./tests/copy.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"publishConfig":{"access":"public"},"license":"MIT","gitHead":"8b6ce5b6bebd4d31140af0e9a51871ab12692b14","description":"## 快速开始","bugs":{"url":"https://github.com/midwayjs/cli/issues"},"homepage":"https://github.com/midwayjs/cli#readme","_id":"@midwayjs/cli-plugin-generator@2.1.0","_nodeVersion":"18.12.1","_npmVersion":"lerna/3.22.1/node@v18.12.1+arm64 (darwin)","dist":{"integrity":"sha512-xF3gG5LZ13DdBx/X4jVyjovYcwi+ni7A+7aNt635u2S7WUFR2NjSQxStNCk0Ad3prE0irO/fG3Ui/lIVRpeQRA==","shasum":"7e196e53afc711ca4428c7efe205a05187ce369d","tarball":"https://registry.npmjs.org/@midwayjs/cli-plugin-generator/-/cli-plugin-generator-2.1.0.tgz","fileCount":191,"unpackedSize":430583,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBkWizIjkd8xg2D3srve9SsXGGvvXNxI8DHUen4t9o44AiEA4KU5gYX1psYK2KvW0utm0h/Kz5v4L/RM0QyE1hocaQo="}]},"_npmUser":{"name":"czy88840616","email":"czy88840616@gmail.com"},"directories":{},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-plugin-generator_2.1.0_1685439093957_0.7631191146854854"},"_hasShrinkwrap":false}},"time":{"created":"2021-08-10T16:36:14.063Z","1.2.79-beta.4":"2021-08-10T16:36:14.295Z","modified":"2023-05-30T09:31:34.317Z","1.2.79-beta.5":"2021-08-10T17:08:34.306Z","1.2.79":"2021-08-11T06:06:13.832Z","1.2.80":"2021-08-16T09:16:14.610Z","1.2.82-beta.1":"2021-08-31T07:01:50.692Z","1.2.82-beta.2":"2021-08-31T08:42:27.944Z","1.2.82":"2021-08-31T09:23:27.116Z","1.2.83":"2021-09-13T03:21:29.702Z","1.2.84":"2021-09-27T08:27:25.580Z","1.2.85":"2021-10-21T10:10:12.591Z","1.2.86-beta.1":"2021-11-01T07:13:06.452Z","1.2.86-beta.2":"2021-11-03T13:58:08.697Z","1.2.86-beta.3":"2021-11-03T14:43:48.579Z","1.2.86":"2021-11-04T03:00:01.514Z","1.2.91-beta.2":"2021-11-26T07:41:38.585Z","1.2.91-beta.3":"2021-11-26T08:08:42.530Z","1.2.91":"2021-11-26T08:41:26.276Z","1.2.92":"2021-12-03T08:01:34.169Z","1.2.93":"2021-12-29T03:35:41.718Z","1.2.94-beta.2":"2022-01-10T07:21:26.522Z","1.2.94":"2022-01-11T07:58:35.050Z","1.2.95-beta.2":"2022-01-20T03:11:10.751Z","1.2.95-beta.3":"2022-01-20T06:23:37.027Z","1.2.95-beta.9":"2022-01-20T09:00:50.502Z","1.2.95-beta.10":"2022-01-20T09:46:15.291Z","1.2.95-beta.11":"2022-01-20T11:34:37.352Z","1.2.95-beta.12":"2022-01-20T12:01:15.846Z","1.2.95-beta.13":"2022-01-20T15:08:54.949Z","1.2.95":"2022-01-20T15:31:06.064Z","1.2.96-beta.3":"2022-01-24T07:00:32.347Z","1.2.96-beta.5":"2022-01-24T08:49:50.945Z","1.2.96-beta.16":"2022-01-24T10:27:11.206Z","1.2.96-beta.17":"2022-01-24T11:03:36.934Z","1.2.97":"2022-01-24T14:54:00.249Z","1.2.99-beta.2":"2022-02-16T03:29:50.976Z","1.2.99":"2022-02-16T05:56:24.179Z","1.3.0-beta.1":"2022-02-21T02:55:47.917Z","1.3.0":"2022-02-23T09:01:46.534Z","1.3.1-beta.1":"2022-03-10T07:46:31.550Z","1.3.1":"2022-03-10T08:03:44.400Z","1.3.2-beta.1":"2022-04-02T06:14:04.164Z","1.3.2":"2022-04-14T02:50:34.891Z","1.3.3":"2022-04-20T02:10:07.505Z","1.3.4-beta.1":"2022-04-21T06:06:06.820Z","1.3.4-beta.2":"2022-05-11T06:32:01.963Z","1.3.4":"2022-05-11T06:57:30.553Z","1.3.5-beta.1":"2022-05-24T07:16:10.753Z","1.3.5-beta.2":"2022-05-24T07:30:18.503Z","1.3.5-beta.3":"2022-05-25T07:22:33.890Z","1.3.5":"2022-05-25T07:33:45.270Z","1.3.6-beta.1":"2022-06-01T08:26:50.584Z","1.3.6":"2022-06-02T07:19:14.589Z","1.3.8-beta.1":"2022-07-12T08:26:08.932Z","1.3.8-beta.2":"2022-07-12T09:45:33.689Z","1.3.8-beta.3":"2022-07-16T15:16:54.157Z","1.3.8-beta.4":"2022-07-16T15:39:56.997Z","1.3.8":"2022-07-21T06:57:19.275Z","1.3.9-beta.1":"2022-07-26T09:26:54.631Z","1.3.9-beta.2":"2022-07-26T10:49:53.462Z","1.3.9":"2022-07-27T05:21:23.843Z","1.3.10-beta.1":"2022-08-03T09:11:09.683Z","1.3.10":"2022-08-04T03:09:41.086Z","1.3.11-beta.1":"2022-08-04T09:46:08.355Z","1.3.11":"2022-08-04T10:40:03.183Z","1.3.12":"2022-08-25T08:46:59.536Z","1.3.13-beta.1":"2022-08-29T04:03:24.675Z","1.3.13-beta.2":"2022-09-06T08:34:50.116Z","1.3.13-beta.3":"2022-09-07T03:47:28.106Z","1.3.13-beta.4":"2022-09-07T04:04:17.897Z","1.3.13":"2022-09-07T06:14:55.228Z","1.3.14-beta.1":"2022-09-07T10:11:12.824Z","1.3.14-beta.2":"2022-09-07T14:21:31.688Z","1.3.14-beta.3":"2022-09-20T06:16:09.566Z","1.3.14-beta.4":"2022-09-22T07:04:03.497Z","1.3.14-beta.5":"2022-09-26T06:46:13.750Z","1.3.14-beta.6":"2022-09-26T07:36:34.243Z","1.3.14-beta.7":"2022-09-27T02:10:51.838Z","1.3.14-beta.8":"2022-09-27T03:45:44.073Z","1.3.14-beta.9":"2022-09-27T06:34:02.445Z","1.3.14-beta.10":"2022-09-30T07:17:06.487Z","1.3.14":"2022-10-10T03:04:52.336Z","2.0.0-beta.1":"2022-10-10T09:40:05.523Z","2.0.0":"2022-10-13T03:46:08.000Z","2.0.1":"2022-10-28T06:22:00.254Z","1.3.16":"2022-10-28T08:59:20.423Z","2.0.2":"2022-11-17T06:15:29.973Z","1.3.17":"2022-11-18T03:45:23.237Z","1.3.17-beta.1":"2022-11-21T06:22:30.221Z","1.3.18":"2022-11-21T11:28:15.710Z","2.0.3":"2022-11-21T11:52:03.287Z","1.3.19-beta.1":"2022-11-23T02:53:20.499Z","1.3.19-beta.2":"2022-11-23T03:07:47.040Z","1.3.19":"2022-11-23T03:21:47.382Z","2.0.4":"2022-11-23T03:24:52.236Z","2.0.5":"2022-12-01T10:05:20.138Z","2.0.6":"2022-12-09T08:19:28.773Z","2.0.8-beta.1":"2022-12-26T08:37:43.208Z","2.0.8":"2022-12-27T03:02:04.072Z","2.0.9-beta.1":"2022-12-29T06:13:26.455Z","2.0.9":"2022-12-30T06:58:02.992Z","2.0.10-beta.2":"2023-01-06T09:46:07.360Z","2.0.10":"2023-01-09T06:19:18.489Z","1.3.22":"2023-01-31T03:26:25.256Z","2.0.14-beta.1":"2023-02-07T07:31:23.126Z","2.0.14-beta.2":"2023-02-14T07:42:14.106Z","2.0.14-beta.3":"2023-02-15T08:45:02.283Z","2.0.14-beta.4":"2023-03-03T06:43:46.913Z","2.0.14":"2023-03-03T08:04:40.311Z","2.1.0":"2023-05-30T09:31:34.144Z"},"maintainers":[{"name":"mariodu","email":"dujiakun@gmail.com"},{"name":"czy88840616","email":"czy88840616@gmail.com"},{"name":"legendecas","email":"legendecas@gmail.com"},{"name":"echosoar","email":"82163514@qq.com"},{"name":"lellansin","email":"lellansin@gmail.com"},{"name":"lxxyx","email":"Lxxyxzj@gmail.com"},{"name":"stone-jin","email":"1520006273@qq.com"}],"description":"## 快速开始","homepage":"https://github.com/midwayjs/cli#readme","repository":{"type":"git","url":"git+ssh://git@github.com/midwayjs/cli.git"},"bugs":{"url":"https://github.com/midwayjs/cli/issues"},"license":"MIT","readme":"# Midway CLI Generator Docs\n\n## 快速开始\n\n```bash\n# 安装 CLI Generator 插件\nnpm install @midwayjs/cli-plugin-generator -D\nyarn add @midwayjs/cli-plugin-generator -D\npnpm install @midwayjs/cli-plugin-generator -D\n\n# 执行 Generator\nmidway-bin gen controller --class user\nmidway-bin gen middleware --class user --framework egg --external\nmidway-bin gen orm entity --class user --activeRecord\nmidway-bin gen prisma\n```\n\n## 基本使用\n\n```bash\nmidway-bin gen <generator> <sub-generator> --options\n```\n\n- `<generator>`：需要调用的 generator，如 controller / orm / service / sls(serverless) 等。\n- `<sub-generator>`：部分 generator 下存在子命令，如 orm 中，你可以执行 `midway-bin gen orm setup` 来完成 `TypeORM` 相关的依赖安装与导入初始化，或者执行 `midway-bin gen orm entity --class user` 来创建 `entity/user.entity.ts` 文件，其中包含 TypeORM 的 Entity 定义。\n- `--options`，不同的 generator 或者是同一 generator 下的不同 sub-generator 消费的选项可能是不同的，详见下方的 **Generator 及 API 一览**。\n\n## 当前可用 Generator 及 API 一览\n\n### 全局-通用选项\n\n- dry：以 `dry run` 模式执行 generator，会提示将要发生的变更而不是真的应用到项目中。推荐在项目结构复杂时，添加 `--dry` 选项来查看是否会有问题产生。与实际运行存在以下区别：\n  - 跳过依赖检查（后续 dry run 模式也将进行依赖检查，但不会进行安装）。\n  - 不会具体提示将要发生的源码转换。\n  - 在结束后，显示本次 generator 运行时传入的参数。\n  - 【未实现】在虚拟文件系统中应用变更来真正的查看 generator 能否正确执行。\n- 【未实现】cn：将全局的 log 信息替换为中文\n- 【未实现】npm：显式指定将要使用的包管理器，默认情况下，在安装依赖的场景将会通过检查项目中的 `yarn.lock` / `package-lock.json` / `pnpm-lock.yaml` 来决定使用的包管理器。\n- 【未实现】verbose：打印每一步执行的详细信息。\n\n### 创建-通用选项\n\n> 这里的选项在大部分存在创建文件行为的 generator 中都适用。\n\n- class：生成文件的 Class Identifier。由于 Midway 中大部分组件以 Class 的形式存在，因此这里统一使用 `--class CUSTOM_NAME` 的形式。如使用 `midway-bin gen controller --class user` 会生成名为 `User` 的 Class。\n\n- dir：指定文件的生成目录，处于 `PROJECT/src` 下。如果不指定则会使用默认的文件夹命名，如 `midway-bin gen controller` 默认会生成文件到 `src/controller` 下，`midway-bin gen orm entity` 默认会生成文件到 `src/entity` 下。\n\n- file：指定文件命名。在不指定的情况下，会默认使用 `--class` 的值作为文件命名。如使用 `midway-bin gen controller --class user` 会生成 `user.controller.ts` ，而 `midway-bin gen controller --class user --file not-user` 会生成 `not-user.controller.ts` 。\n\n- dotFile：使用 `x.type.ts` 的文件命名方式，如 `user.controller.ts` / `user.service.ts` / `user.entity.ts` 等。存在此默认行为的 generator 包括：\n\n  - controller\n  - service\n  - orm:entity\n  - orm:subscriber\n  - ws:controller\n\n- 【未实装】override：在目标位置已存在同名文件时，是否强制覆盖。\n\n  > 这一选项还未应用到所有的 generator。\n\n### 初始化（setup）-通用选项\n\n- namespace：在执行 setup 命令（如 `midway-bin gen orm setup` ）或仅具有 setup 功能（如 `midway-bin gen axios` ）的 generator 时，将会把相关的组件导入语句添加到 `src/configuration.ts` 中，默认情况下其**命名空间导入**的值与组件同名，如`import * as orm from \"@midwayjs/orm\"`。使用 namespace 选项来修改命名空间的值。如 `--namespace typeorm` 将会生成 `import * as typeorm from \"@midwayjs/orm` 语句。\n\n  - 注意，由于注册组件的过程还包括在 `@Configuration` 装饰器中的参数中注册，如：\n\n    ```typescript\n    @Configuration({\n      imports: [orm],\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    ```\n\n    因此 namespace 选项也会影响实际被添加到 `imports` 中的值。\n\n### 内置组件\n\n> 如果没有特别指出，则此 generator 支持所有**写入-通用选项**。\n\n- [x] Controller\n\n  - [x] light：默认为 `false`，生成的 controller 中将只包含简单的代码。\n\n- [x] Service\n\n- [x] Debug (`.vscode/launch.json`)\n\n  - [x] port：指定 launch.json 中使用的端口\n  - [x] name：指定 launch.json 中 configuration 的配置名\n\n  如果已存在相同 name，则会在 configuration 数组中新增一项。\n\n- [x] Middleware\n  - [x] external 在生成的 middleware 中，使用外部导入的 npm 包作为中间件逻辑。\n  - [x] framework 指定目标框架，egg / koa / express。\n  - [x] functional 使用函数式中间件，仅在 `--framework egg` 下有效。\n- [ ] Serverless\n\n  > 见 [Midway-Serverless](https://www.yuque.com/midwayjs/midway_v2/serverless_introduction)。\n\n  > 不支持 dotFile 选项\n\n  - [x] type：faas（普通单个函数） / aggr（聚合部署）\n  - [x] http / gateway / event / timer / oss ：仅在 `--type faas`时生效，配置生成的函数中要使用的触发器。分别代表 Http 触发器、API 网关触发器、事件触发器、定时触发器以及 OSS 触发器。默认只会应用 http 触发器。\n\n- [ ] Interceptor\n\n- [ ] 一体化项目支持\n\n### 外部组件（midway-components）\n\n- [x] TypeORM\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/orm` 与 `sqlite`，并完成相关导入与注册。\n  - [x] （sub-generator）entity：生成新的 TypeORM Entity。\n    - [x] activeRecord：生成的 Entity Class 将使用 Active Record 模式，即 Class 将实现 `BaseEntity` 。默认为 true。\n    - [x] relation：生成的 Entity Class 将带有 TypeORM 级联相关的装饰器示例。默认为 true。\n  - [x] （sub-generator）subscriber：生成新的 TypeORM Entity Subscriber。\n    - [x] transaction：生成的 Subscriber 将监听事务操作。默认为 true。\n\n- [x] Axios 仅 setup，将安装 `@midwayjs/axios`，并完成相关导入与注册。直接使用 `midway-bin gen axios 即可`。\n\n- [x] Cache 同 Axios。将安装 `@midwayjs/cache-manager` `cache-manager` 以及 `@types/cache-manager`。\n\n- [x] OSS 同 Axios。将安装 `@midwayjs/oss` 以及 `@types/ali-oss`。\n\n- [x] 【实验性功能】Prisma：安装 `@prisma/client` `prisma` ，并完成 Prisma Client 生成、实例化、注册等功能，添加 NPM Scripts。\n\n  - [x] initSchema：在初始化完毕后，添加初始 Prisma Model 定义到 `src/prisma/schema.prisma` 中。\n\n  - [x] initClient：需要同时启用 initSchema 。直接执行初始化的 `prisma db push` ，生成 SQLite 文件 与 Prisma Client。同时会在 `src/configuration.ts` 中，完成实例化与注册相关操作，如：\n\n    ```typescript\n    import { PrismaClient } from '@prisma/client';\n\n    const client = new PrismaClient();\n\n    @Configuration({\n      importConfigs: [join(__dirname, './config')],\n      conflictCheck: true,\n    })\n    export class ContainerLifeCycle implements ILifeCycle {\n      @App()\n      app: Application;\n\n      async onReady() {\n        client.$connect();\n        this.app.getApplicationContext().registerObject('prisma', client);\n      }\n    }\n    ```\n\n- [x] Swagger 同 Axios。将安装 `@midwayjs/swagger` 与 `swagger-ui-dist`。\n\n  - [x] ui：是否要在服务端输出 Swagger UI。如果开启，将会把 `swagger-ui-dist` 安装为 `dependencies`，否则安装到 `devDependencies`。\n\n- [x] WebSocket\n\n  - [x] （sub-generator）setup：将安装 `@midwayjs/ws` ，并完成相关导入与注册。同时会生成 `ws-bootstrap.js` 文件，以及相关的使用此初始化文件启动的 NPM Script，用于 WebSocket 应用启动。\n  - [x] （sub-generator）controller：将生成 WebSocket Controller。\n\n- [ ] GraphQL：基于 TypeGraphQL 与 Apollo-Server。\n\n  - [ ] （sub-generator）setup：安装相关依赖、生成 GraphQL 中间件并注册。\n  - [ ] （sub-generator）object：生成 ObjectType 文件。\n  - [ ] （sub-generator）input：生成 InputType 文件。\n  - [ ] （sub-generator）resolver：生成 （Field）Resolver 文件。\n  - [ ] （sub-generator）utils：生成 Scalar / Extension / Union 等。\n\n- [ ] Task\n\n- [ ] gRPC\n\n- [ ] RabbitMQ\n\n- [ ] MongoDB\n\n## 基于 Midway CodeMod 定制 Generator\n\n> 这一能力仍在开发中，敬请期待。\n\nGenerator 使用的大部分 AST 操作 将被提取为一个独立项目：Midway CodeMod。它提供了类似 `@babel/helper` 那样细粒度的 AST 操作，你可以通过多个函数的组合调用，来完成源码的一系列检查、更新操作。\n\n举例来说，在 Prisma Generator （即 `midway-bin gen prisma`）中执行的一系列 AST 操作是这样完成的：\n\n```typescript\n// CodeMod 基于 ts-morph 封装，你可以理解为这里是添加需要被修改的文件\nconst configurationSource = project.addSourceFileAtPath(configurationPath);\n\n// 新增 来自 @prisma/client 的具名导入\n// import { PrismaClient } from \"@prisma/client\";\naddImportDeclaration(\n  configurationSource,\n  ['PrismaClient'],\n  '@prisma/client',\n  ImportType.NAMED_IMPORTS,\n  false\n);\n\n// 在文件中导入语句后另起一行插入语句\n// const client = new PrismaClient();\nappendStatementAfterImports(\n  configurationSource,\n  'const client = new PrismaClient()',\n  false\n);\n\n// 确保配置类 ContainerLifeCycle 中具有被 @App 装饰的属性 app\nensureLifeCycleClassPropertyWithMidwayDecorator(\n  configurationSource,\n  'app',\n  'App',\n  false\n);\n\n// 在配置类 ContainerLifeCycle 的 onReady 方法中头部新增语句\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  `this.app.getApplicationContext().registerObject('prisma', client);`,\n  false\n);\n\n// 这里的插入会在更上面\nunshiftStatementInsideClassMethod(\n  configurationSource,\n  LIFE_CYCLE_CLASS_IDENTIFIER,\n  'onReady',\n  'client.$connect();',\n  true\n);\n\n// 格式化文件\nformatTSFile(configurationPath);\n```\n\n类似的，在 Midway CodeMod 相关能力完成支持后，你可以很容易的通过这些细粒度的工具函数，组装成符合自己特定需求的 Generator。同时，Midway CLI Generator 后续也将支持快速生成 Generator 模板。\n","readmeFilename":"README.md"}