@nestia/migrate 0.1.9 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/NestiaMigrateApplication.js +217 -153
 - package/lib/NestiaMigrateApplication.js.map +1 -1
 - package/lib/bundles/TEMPLATE.js +8 -3
 - package/lib/bundles/TEMPLATE.js.map +1 -1
 - package/lib/executable/bundle.js +0 -1
 - package/lib/executable/bundle.js.map +1 -1
 - package/lib/programmers/ControllerProgrammer.js +1 -1
 - package/lib/programmers/ControllerProgrammer.js.map +1 -1
 - package/lib/programmers/RouteProgrammer.js +13 -6
 - package/lib/programmers/RouteProgrammer.js.map +1 -1
 - package/lib/structures/ISwagger.d.ts +2 -6
 - package/lib/structures/ISwaggerInfo.d.ts +71 -0
 - package/lib/structures/ISwaggerInfo.js +3 -0
 - package/lib/structures/ISwaggerInfo.js.map +1 -0
 - package/lib/structures/ISwaggerRoute.d.ts +2 -2
 - package/lib/structures/ISwaggerSecurity.d.ts +1 -1
 - package/package.json +3 -3
 - package/src/bundles/TEMPLATE.ts +8 -3
 - package/src/executable/bundle.ts +0 -1
 - package/src/programmers/ControllerProgrammer.ts +1 -1
 - package/src/programmers/RouteProgrammer.ts +24 -9
 - package/src/structures/ISwagger.ts +3 -7
 - package/src/structures/ISwaggerInfo.ts +80 -0
 - package/src/structures/ISwaggerRoute.ts +2 -2
 - package/src/structures/ISwaggerSecurity.ts +3 -3
 
    
        package/src/bundles/TEMPLATE.ts
    CHANGED
    
    | 
         @@ -42,12 +42,12 @@ export const TEMPLATE = [ 
     | 
|
| 
       42 
42 
     | 
    
         
             
                {
         
     | 
| 
       43 
43 
     | 
    
         
             
                    "location": "",
         
     | 
| 
       44 
44 
     | 
    
         
             
                    "file": "nestia.config.ts",
         
     | 
| 
       45 
     | 
    
         
            -
                    "content": "// nestia configuration file\r\nimport type sdk from \"@nestia/sdk\";\r\n\r\nconst NESTIA_CONFIG: sdk.INestiaConfig = {\r\n    input: \"src/controllers\",\r\n    output: \"src/api\",\r\n    swagger: {\r\n        output: \" 
     | 
| 
      
 45 
     | 
    
         
            +
                    "content": "// nestia configuration file\r\nimport type sdk from \"@nestia/sdk\";\r\n\r\nconst NESTIA_CONFIG: sdk.INestiaConfig = {\r\n    input: \"src/controllers\",\r\n    output: \"src/api\",\r\n    swagger: {\r\n        output: \"packages/api/swagger.json\",\r\n        servers: [\r\n            {\r\n                url: \"http://localhost:37001\",\r\n                description: \"Local Server\",\r\n            },\r\n        ],\r\n    },\r\n    primitive: false,\r\n    simulate: true,\r\n    e2e: \"test\",\r\n};\r\nexport default NESTIA_CONFIG;\r\n"
         
     | 
| 
       46 
46 
     | 
    
         
             
                },
         
     | 
| 
       47 
47 
     | 
    
         
             
                {
         
     | 
| 
       48 
48 
     | 
    
         
             
                    "location": "",
         
     | 
| 
       49 
49 
     | 
    
         
             
                    "file": "package.json",
         
     | 
| 
       50 
     | 
    
         
            -
                    "content": "{\r\n  \"private\": true,\r\n  \"name\": \"@ORGANIZATION/PROJECT\",\r\n  \"version\": \"0.1.0\",\r\n  \"description\": \"Starter kit of Nestia\",\r\n  \"main\": \"lib/index.js\",\r\n  \"scripts\": {\r\n    \"----------------------------------------------\": \"\",\r\n    \"build\": \"npm run build:sdk && npm run build:main && npm run build:test\",\r\n    \"build:api\": \"rimraf packages/api/lib && npm run build:sdk && tsc -p packages/api/tsconfig.json\",\r\n    \"build:main\": \"rimraf lib && tsc\",\r\n    \"build:sdk\": \"rimraf src/api/functional && nestia sdk\",\r\n    \"build:swagger\": \"npx nestia swagger\",\r\n    \"build:test\": \"rimraf bin && tsc -p test/tsconfig.json\",\r\n    \"dev\": \"npm run build:test -- --watch\",\r\n    \"eslint\": \"eslint src && eslint test\",\r\n    \"eslint:fix\": \"eslint --fix src && eslint --fix test\",\r\n    \"prepare\": \"ts-patch install\",\r\n    \"prettier\": \"prettier src --write && prettier test --write\",\r\n    \"-----------------------------------------------\": \"\",\r\n    \"start\": \"node lib/executable/server\",\r\n    \"test\": \"node bin/test\",\r\n    \"------------------------------------------------\": \"\"\r\n  },\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"https://github.com/samchon/nestia-template\"\r\n  },\r\n  \"keywords\": [\r\n    \"nestia\",\r\n    \"template\",\r\n    \"boilerplate\"\r\n  ],\r\n  \"author\": \"AUTHOR\",\r\n  \"license\": \"MIT\",\r\n  \"bugs\": {\r\n    \"url\": \"https://github.com/samchon/nestia-template/issues\"\r\n  },\r\n  \"homepage\": \"https://github.com/samchon/nestia-template#readme\",\r\n  \"devDependencies\": {\r\n    \"@nestia/e2e\": \"^0.3.6\",\r\n    \"@nestia/sdk\": \"^1.4. 
     | 
| 
      
 50 
     | 
    
         
            +
                    "content": "{\r\n  \"private\": true,\r\n  \"name\": \"@ORGANIZATION/PROJECT\",\r\n  \"version\": \"0.1.0\",\r\n  \"description\": \"Starter kit of Nestia\",\r\n  \"main\": \"lib/index.js\",\r\n  \"scripts\": {\r\n    \"----------------------------------------------\": \"\",\r\n    \"build\": \"npm run build:sdk && npm run build:main && npm run build:test\",\r\n    \"build:api\": \"rimraf packages/api/lib && npm run build:sdk && tsc -p packages/api/tsconfig.json\",\r\n    \"build:main\": \"rimraf lib && tsc\",\r\n    \"build:sdk\": \"rimraf src/api/functional && nestia sdk\",\r\n    \"build:swagger\": \"npx nestia swagger\",\r\n    \"build:test\": \"rimraf bin && tsc -p test/tsconfig.json\",\r\n    \"dev\": \"npm run build:test -- --watch\",\r\n    \"eslint\": \"eslint src && eslint test\",\r\n    \"eslint:fix\": \"eslint --fix src && eslint --fix test\",\r\n    \"prepare\": \"ts-patch install\",\r\n    \"prettier\": \"prettier src --write && prettier test --write\",\r\n    \"-----------------------------------------------\": \"\",\r\n    \"start\": \"node lib/executable/server\",\r\n    \"test\": \"node bin/test\",\r\n    \"------------------------------------------------\": \"\"\r\n  },\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"https://github.com/samchon/nestia-template\"\r\n  },\r\n  \"keywords\": [\r\n    \"nestia\",\r\n    \"template\",\r\n    \"boilerplate\"\r\n  ],\r\n  \"author\": \"AUTHOR\",\r\n  \"license\": \"MIT\",\r\n  \"bugs\": {\r\n    \"url\": \"https://github.com/samchon/nestia-template/issues\"\r\n  },\r\n  \"homepage\": \"https://github.com/samchon/nestia-template#readme\",\r\n  \"devDependencies\": {\r\n    \"@nestia/e2e\": \"^0.3.6\",\r\n    \"@nestia/sdk\": \"^1.4.15\",\r\n    \"@trivago/prettier-plugin-sort-imports\": \"^3.3.1\",\r\n    \"@types/cli\": \"^0.11.21\",\r\n    \"@types/node\": \"^18.11.0\",\r\n    \"@types/uuid\": \"^8.3.4\",\r\n    \"@typescript-eslint/eslint-plugin\": \"^5.40.0\",\r\n    \"@typescript-eslint/parser\": \"^5.40.0\",\r\n    \"chalk\": \"^4.1.0\",\r\n    \"cli\": \"^1.0.1\",\r\n    \"eslint-plugin-deprecation\": \"^1.4.1\",\r\n    \"nestia\": \"^4.3.2\",\r\n    \"prettier\": \"^2.7.1\",\r\n    \"rimraf\": \"^3.0.2\",\r\n    \"source-map-support\": \"^0.5.21\",\r\n    \"ts-node\": \"^10.9.1\",\r\n    \"ts-patch\": \"^3.0.0\",\r\n    \"typescript\": \"^5.1.3\",\r\n    \"typescript-transform-paths\": \"^3.4.6\"\r\n  },\r\n  \"dependencies\": {\r\n    \"@nestia/core\": \"^1.4.4\",\r\n    \"serialize-error\": \"^4.1.0\",\r\n    \"tstl\": \"^2.5.13\",\r\n    \"typia\": \"^4.1.8\",\r\n    \"uuid\": \"^9.0.0\"\r\n  },\r\n  \"stackblitz\": {\r\n    \"startCommand\": \"npm run prepare && npm run build:test && npm run test\"\r\n  }\r\n}"
         
     | 
| 
       51 
51 
     | 
    
         
             
                },
         
     | 
| 
       52 
52 
     | 
    
         
             
                {
         
     | 
| 
       53 
53 
     | 
    
         
             
                    "location": "/packages/api",
         
     | 
| 
         @@ -57,13 +57,18 @@ export const TEMPLATE = [ 
     | 
|
| 
       57 
57 
     | 
    
         
             
                {
         
     | 
| 
       58 
58 
     | 
    
         
             
                    "location": "/packages/api",
         
     | 
| 
       59 
59 
     | 
    
         
             
                    "file": "package.json",
         
     | 
| 
       60 
     | 
    
         
            -
                    "content": "{\r\n  \"name\": \"@ORGANIZATION/PROJECT-api\",\r\n  \"version\": \"0.0.0\",\r\n  \"description\": \"API for PROJECT\",\r\n  \"main\": \"lib/index.js\",\r\n  \"typings\": \"lib/index.d.ts\",\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"https://github.com/samchon/nestia-template\"\r\n  },\r\n  \"author\": \"AUTHOR\",\r\n  \"license\": \"MIT\",\r\n  \"bugs\": {\r\n    \"url\": \"https://github.com/samchon/nestia-template/issues\"\r\n  },\r\n  \"homepage\": \"https://github.com/samchon/nestia-template#readme\",\r\n  \"dependencies\": {\r\n    \"@nestia/fetcher\": \"^1.4.0\",\r\n    \"typia\": \"^4.1. 
     | 
| 
      
 60 
     | 
    
         
            +
                    "content": "{\r\n  \"name\": \"@ORGANIZATION/PROJECT-api\",\r\n  \"version\": \"0.0.0\",\r\n  \"description\": \"API for PROJECT\",\r\n  \"main\": \"lib/index.js\",\r\n  \"typings\": \"lib/index.d.ts\",\r\n  \"repository\": {\r\n    \"type\": \"git\",\r\n    \"url\": \"https://github.com/samchon/nestia-template\"\r\n  },\r\n  \"author\": \"AUTHOR\",\r\n  \"license\": \"MIT\",\r\n  \"bugs\": {\r\n    \"url\": \"https://github.com/samchon/nestia-template/issues\"\r\n  },\r\n  \"homepage\": \"https://github.com/samchon/nestia-template#readme\",\r\n  \"dependencies\": {\r\n    \"@nestia/fetcher\": \"^1.4.0\",\r\n    \"typia\": \"^4.1.8\"\r\n  }\r\n}\r\n"
         
     | 
| 
       61 
61 
     | 
    
         
             
                },
         
     | 
| 
       62 
62 
     | 
    
         
             
                {
         
     | 
| 
       63 
63 
     | 
    
         
             
                    "location": "/packages/api",
         
     | 
| 
       64 
64 
     | 
    
         
             
                    "file": "README.md",
         
     | 
| 
       65 
65 
     | 
    
         
             
                    "content": "# SDK for Client Developers\r\n## Outline\r\n[`@ORGANIZATION/PROJECT`](https://github.com/samchon/nestia-template) provides SDK (Software Development Kit) for convenience.\r\n\r\nFor the client developers who are connecting to this backend server, [`@ORGANIZATION/PROJECT`](https://github.com/samchon/nestia-template) provides not API documents like the Swagger, but provides the API interaction library, one of the typical SDK (Software Development Kit) for the convenience.\r\n\r\nWith the SDK, client developers never need to re-define the duplicated API interfaces. Just utilize the provided interfaces and asynchronous functions defined in the SDK. It would be much convenient than any other Rest API solutions.\r\n\r\n```bash\r\nnpm install --save @ORGANIZATION/PROJECT-api\r\n```\r\n\r\n\r\n\r\n\r\n## Usage\r\nImport the `@ORGANIZATION/PROJECT-api` and enjoy the auto-completion.\r\n\r\n```typescript\r\nimport api from \"@ORGINIZATION/PROJECT-api\";\r\n\r\nimport { IBbsArticle } from \"@ORGANIZATION/PROJECT-api/lib/structures/bbs/IBbsArticle\";\r\n\r\nasync function main(): Promise<void>\r\n{\r\n    //----\r\n    // PREPARATIONS\r\n    //----\r\n    // CONNECTION INFO\r\n    const connection: api.IConnection = {\r\n        host: \"http://127.0.0.1:37001\",\r\n    };\r\n\r\n    const article: IBbsArticle = await api.functional.bbs.articles.store(\r\n        connection,\r\n        \"general\",\r\n        {\r\n            writer: \"Robot\",\r\n            title: \"Hello, world!\",\r\n            body: \"Hello, I'm test automation robot\",\r\n            format: \"txt\",\r\n            files: [\r\n                {\r\n                    name: \"logo\",\r\n                    extension: \"png\",\r\n                    url: \"https://somewhere.com/logo.png\",\r\n                },\r\n            ],\r\n            password: \"1234\",\r\n        },\r\n    );\r\n    typia.assertEquals(stored);\r\n\r\n    const page: IPage<IBbsArticle> = await api.functional.bbs.articles.index(\r\n        connection,\r\n        \"general\",\r\n        {\r\n            limit: 100,\r\n            search: {\r\n                writer: \"Robot\"\r\n            }\r\n        }\r\n    );\r\n    await typia.assertEquals(page);\r\n}\r\n```"
         
     | 
| 
       66 
66 
     | 
    
         
             
                },
         
     | 
| 
      
 67 
     | 
    
         
            +
                {
         
     | 
| 
      
 68 
     | 
    
         
            +
                    "location": "/packages/api",
         
     | 
| 
      
 69 
     | 
    
         
            +
                    "file": "swagger.json",
         
     | 
| 
      
 70 
     | 
    
         
            +
                    "content": "{\r\n  \"openapi\": \"3.0.1\",\r\n  \"servers\": [\r\n    {\r\n      \"url\": \"http://localhost:37001\",\r\n      \"description\": \"Local Server\"\r\n    }\r\n  ],\r\n  \"info\": {\r\n    \"version\": \"0.1.0\",\r\n    \"title\": \"@ORGANIZATION/PROJECT\",\r\n    \"description\": \"Starter kit of Nestia\"\r\n  },\r\n  \"paths\": {\r\n    \"/bbs/articles/{section}\": {\r\n      \"patch\": {\r\n        \"tags\": [],\r\n        \"parameters\": [\r\n          {\r\n            \"name\": \"section\",\r\n            \"in\": \"path\",\r\n            \"description\": \"Target section\",\r\n            \"schema\": {\r\n              \"type\": \"string\"\r\n            },\r\n            \"required\": true\r\n          }\r\n        ],\r\n        \"requestBody\": {\r\n          \"description\": \"Pagination request info with searching and sorting options\",\r\n          \"content\": {\r\n            \"application/json\": {\r\n              \"schema\": {\r\n                \"$ref\": \"#/components/schemas/IBbsArticle.IRequest\"\r\n              }\r\n            }\r\n          },\r\n          \"required\": true,\r\n          \"x-nestia-encrypted\": false\r\n        },\r\n        \"responses\": {\r\n          \"201\": {\r\n            \"description\": \"Paged articles witb summarization\",\r\n            \"content\": {\r\n              \"application/json\": {\r\n                \"schema\": {\r\n                  \"$ref\": \"#/components/schemas/IPage_lt_IBbsArticle.ISummary_gt_\"\r\n                }\r\n              }\r\n            },\r\n            \"x-nestia-encrypted\": false\r\n          }\r\n        },\r\n        \"summary\": \"List up entire articles, but paginated and summarized\",\r\n        \"description\": \"List up entire articles, but paginated and summarized.\\n\\nThis method is for listing up summarized articles with pagination.\\n\\nIf you want, you can search and sort articles with specific conditions.\\n\\n@param section Target section\\n@param input Pagination request info with searching and sorting options\\n@returns Paged articles witb summarization\",\r\n        \"x-nestia-namespace\": \"bbs.articles.index\",\r\n        \"x-nestia-jsDocTags\": [\r\n          {\r\n            \"name\": \"param\",\r\n            \"text\": [\r\n              {\r\n                \"text\": \"section\",\r\n                \"kind\": \"parameterName\"\r\n              },\r\n              {\r\n                \"text\": \" \",\r\n                \"kind\": \"space\"\r\n              },\r\n              {\r\n                \"text\": \"Target section\",\r\n                \"kind\": \"text\"\r\n              }\r\n            ]\r\n          },\r\n          {\r\n            \"name\": \"param\",\r\n            \"text\": [\r\n              {\r\n                \"text\": \"input\",\r\n                \"kind\": \"parameterName\"\r\n              },\r\n              {\r\n                \"text\": \" \",\r\n                \"kind\": \"space\"\r\n              },\r\n              {\r\n                \"text\": \"Pagination request info with searching and sorting options\",\r\n                \"kind\": \"text\"\r\n              }\r\n            ]\r\n          },\r\n          {\r\n            \"name\": \"returns\",\r\n            \"text\": [\r\n              {\r\n                \"text\": \"Paged articles witb summarization\",\r\n                \"kind\": \"text\"\r\n              }\r\n            ]\r\n          }\r\n        ]\r\n      },\r\n      \"post\": {\r\n        \"tags\": [],\r\n        \"parameters\": [\r\n          {\r\n            \"name\": \"section\",\r\n            \"in\": \"path\",\r\n            \"description\": \"Target section\",\r\n            \"schema\": {\r\n              \"type\": \"string\"\r\n            },\r\n            \"required\": true\r\n          }\r\n        ],\r\n        \"requestBody\": {\r\n          \"description\": \"New article info\",\r\n          \"content\": {\r\n            \"application/json\": {\r\n              \"schema\": {\r\n                \"$ref\": \"#/components/schemas/IBbsArticle.IStore\"\r\n              }\r\n            }\r\n          },\r\n          \"required\": true,\r\n          \"x-nestia-encrypted\": false\r\n        },\r\n        \"responses\": {\r\n          \"201\": {\r\n            \"description\": \"Newly created article info\",\r\n            \"content\": {\r\n              \"application/json\": {\r\n                \"schema\": {\r\n                  \"$ref\": \"#/components/schemas/IBbsArticle\"\r\n                }\r\n              }\r\n            },\r\n            \"x-nestia-encrypted\": false\r\n          }\r\n        },\r\n        \"summary\": \"Store a new article\",\r\n        \"description\": \"Store a new article.\\n\\nStore a new article and returns its detailed record info.\\n\\n@param section Target section\\n@param input New article info\\n@returns Newly created article info\",\r\n        \"x-nestia-namespace\": \"bbs.articles.store\",\r\n        \"x-nestia-jsDocTags\": [\r\n          {\r\n            \"name\": \"param\",\r\n            \"text\": [\r\n              {\r\n                \"text\": \"section\",\r\n                \"kind\": \"parameterName\"\r\n              },\r\n              {\r\n                \"text\": \" \",\r\n                \"kind\": \"space\"\r\n              },\r\n              {\r\n                \"text\": \"Target section\",\r\n                \"kind\": \"text\"\r\n              }\r\n            ]\r\n          },\r\n          {\r\n            \"name\": \"param\",\r\n            \"text\": [\r\n              {\r\n                \"text\": \"input\",\r\n                \"kind\": \"parameterName\"\r\n              },\r\n              {\r\n                \"text\": \" \",\r\n                \"kind\": \"space\"\r\n              },\r\n              {\r\n                \"text\": \"New article info\",\r\n                \"kind\": \"text\"\r\n              }\r\n            ]\r\n          },\r\n          {\r\n            \"name\": \"returns\",\r\n            \"text\": [\r\n              {\r\n                \"text\": \"Newly created article info\",\r\n                \"kind\": \"text\"\r\n              }\r\n            ]\r\n          }\r\n        ]\r\n      }\r\n    },\r\n    \"/bbs/articles/{section}/{id}\": {\r\n      \"get\": {\r\n        \"tags\": [],\r\n        \"parameters\": [\r\n          {\r\n            \"name\": \"section\",\r\n            \"in\": \"path\",\r\n            \"description\": \"Target section\",\r\n            \"schema\": {\r\n              \"type\": \"string\"\r\n            },\r\n            \"required\": true\r\n          },\r\n          {\r\n            \"name\": \"id\",\r\n            \"in\": \"path\",\r\n            \"description\": \"Target articles id\",\r\n            \"schema\": {\r\n              \"type\": \"string\"\r\n            },\r\n            \"required\": true\r\n          }\r\n        ],\r\n        \"responses\": {\r\n          \"200\": {\r\n            \"description\": \"Detailed article info\",\r\n            \"content\": {\r\n              \"application/json\": {\r\n                \"schema\": {\r\n                  \"$ref\": \"#/components/schemas/IBbsArticle\"\r\n                }\r\n              }\r\n            },\r\n            \"x-nestia-encrypted\": false\r\n          }\r\n        },\r\n        \"summary\": \"Get an article with detailed info\",\r\n        \"description\": \"Get an article with detailed info.\\n\\nOpen an article with detailed info, increasing reading count.\\n\\n@param section Target section\\n@param id Target articles id\\n@returns Detailed article info\",\r\n        \"x-nestia-namespace\": \"bbs.articles.at\",\r\n        \"x-nestia-jsDocTags\": [\r\n          {\r\n            \"name\": \"param\",\r\n            \"text\": [\r\n              {\r\n                \"text\": \"section\",\r\n                \"kind\": \"parameterName\"\r\n              },\r\n              {\r\n                \"text\": \" \",\r\n                \"kind\": \"space\"\r\n              },\r\n              {\r\n                \"text\": \"Target section\",\r\n                \"kind\": \"text\"\r\n              }\r\n            ]\r\n          },\r\n          {\r\n            \"name\": \"param\",\r\n            \"text\": [\r\n              {\r\n                \"text\": \"id\",\r\n                \"kind\": \"parameterName\"\r\n              },\r\n              {\r\n                \"text\": \" \",\r\n                \"kind\": \"space\"\r\n              },\r\n              {\r\n                \"text\": \"Target articles id\",\r\n                \"kind\": \"text\"\r\n              }\r\n            ]\r\n          },\r\n          {\r\n            \"name\": \"returns\",\r\n            \"text\": [\r\n              {\r\n                \"text\": \"Detailed article info\",\r\n                \"kind\": \"text\"\r\n              }\r\n            ]\r\n          }\r\n        ]\r\n      },\r\n      \"put\": {\r\n        \"tags\": [],\r\n        \"parameters\": [\r\n          {\r\n            \"name\": \"section\",\r\n            \"in\": \"path\",\r\n            \"description\": \"Target section\",\r\n            \"schema\": {\r\n              \"type\": \"string\"\r\n            },\r\n            \"required\": true\r\n          },\r\n          {\r\n            \"name\": \"id\",\r\n            \"in\": \"path\",\r\n            \"description\": \"Target articles id\",\r\n            \"schema\": {\r\n              \"type\": \"string\"\r\n            },\r\n            \"required\": true\r\n          }\r\n        ],\r\n        \"requestBody\": {\r\n          \"description\": \"Content to update\",\r\n          \"content\": {\r\n            \"application/json\": {\r\n              \"schema\": {\r\n                \"$ref\": \"#/components/schemas/IBbsArticle.IUpdate\"\r\n              }\r\n            }\r\n          },\r\n          \"required\": true,\r\n          \"x-nestia-encrypted\": false\r\n        },\r\n        \"responses\": {\r\n          \"201\": {\r\n            \"description\": \"Newly created content info\",\r\n            \"content\": {\r\n              \"application/json\": {\r\n                \"schema\": {\r\n                  \"$ref\": \"#/components/schemas/IBbsArticle.ISnapshot\"\r\n                }\r\n              }\r\n            },\r\n            \"x-nestia-encrypted\": false\r\n          }\r\n        },\r\n        \"summary\": \"Update article\",\r\n        \"description\": \"Update article.\\n\\nWhen updating, this BBS system does not overwrite the content, but accumulate it.\\nTherefore, whenever an article being updated, length of {@link IBbsArticle.snapshots}\\nwould be increased and accumulated.\\n\\n@param section Target section\\n@param id Target articles id\\n@param input Content to update\\n@returns Newly created content info\",\r\n        \"x-nestia-namespace\": \"bbs.articles.update\",\r\n        \"x-nestia-jsDocTags\": [\r\n          {\r\n            \"name\": \"param\",\r\n            \"text\": [\r\n              {\r\n                \"text\": \"section\",\r\n                \"kind\": \"parameterName\"\r\n              },\r\n              {\r\n                \"text\": \" \",\r\n                \"kind\": \"space\"\r\n              },\r\n              {\r\n                \"text\": \"Target section\",\r\n                \"kind\": \"text\"\r\n              }\r\n            ]\r\n          },\r\n          {\r\n            \"name\": \"param\",\r\n            \"text\": [\r\n              {\r\n                \"text\": \"id\",\r\n                \"kind\": \"parameterName\"\r\n              },\r\n              {\r\n                \"text\": \" \",\r\n                \"kind\": \"space\"\r\n              },\r\n              {\r\n                \"text\": \"Target articles id\",\r\n                \"kind\": \"text\"\r\n              }\r\n            ]\r\n          },\r\n          {\r\n            \"name\": \"param\",\r\n            \"text\": [\r\n              {\r\n                \"text\": \"input\",\r\n                \"kind\": \"parameterName\"\r\n              },\r\n              {\r\n                \"text\": \" \",\r\n                \"kind\": \"space\"\r\n              },\r\n              {\r\n                \"text\": \"Content to update\",\r\n                \"kind\": \"text\"\r\n              }\r\n            ]\r\n          },\r\n          {\r\n            \"name\": \"returns\",\r\n            \"text\": [\r\n              {\r\n                \"text\": \"Newly created content info\",\r\n                \"kind\": \"text\"\r\n              }\r\n            ]\r\n          }\r\n        ]\r\n      }\r\n    }\r\n  },\r\n  \"components\": {\r\n    \"schemas\": {\r\n      \"IBbsArticle.IRequest\": {\r\n        \"type\": \"object\",\r\n        \"properties\": {\r\n          \"search\": {\r\n            \"$ref\": \"#/components/schemas/IBbsArticle.IRequest.ISearch\"\r\n          },\r\n          \"sort\": {\r\n            \"$ref\": \"#/components/schemas/IPage.Sort_lt_IBbsArticle.IRequest.SortableColumns_gt_\"\r\n          },\r\n          \"page\": {\r\n            \"description\": \"Page number.\",\r\n            \"x-typia-required\": false,\r\n            \"x-typia-optional\": true,\r\n            \"type\": \"number\"\r\n          },\r\n          \"limit\": {\r\n            \"description\": \"Limitation of records per a page.\",\r\n            \"x-typia-required\": false,\r\n            \"x-typia-optional\": true,\r\n            \"type\": \"number\"\r\n          }\r\n        },\r\n        \"nullable\": false,\r\n        \"description\": \"Sorting options.\\n\\nThe plus sign means ASC and minus sign means DESC.\",\r\n        \"x-typia-jsDocTags\": []\r\n      },\r\n      \"IBbsArticle.IRequest.ISearch\": {\r\n        \"type\": \"object\",\r\n        \"properties\": {\r\n          \"writer\": {\r\n            \"x-typia-required\": false,\r\n            \"x-typia-optional\": true,\r\n            \"type\": \"string\"\r\n          },\r\n          \"title\": {\r\n            \"x-typia-required\": false,\r\n            \"x-typia-optional\": true,\r\n            \"type\": \"string\"\r\n          },\r\n          \"body\": {\r\n            \"x-typia-required\": false,\r\n            \"x-typia-optional\": true,\r\n            \"type\": \"string\"\r\n          }\r\n        },\r\n        \"nullable\": false,\r\n        \"description\": \"Searching options.\",\r\n        \"x-typia-jsDocTags\": []\r\n      },\r\n      \"IPage.Sort_lt_IBbsArticle.IRequest.SortableColumns_gt_\": {\r\n        \"type\": \"array\",\r\n        \"items\": {\r\n          \"type\": \"string\",\r\n          \"enum\": [\r\n            \"-writer\",\r\n            \"-title\",\r\n            \"-created_at\",\r\n            \"-updated_at\",\r\n            \"+writer\",\r\n            \"+title\",\r\n            \"+created_at\",\r\n            \"+updated_at\"\r\n          ]\r\n        }\r\n      },\r\n      \"IPage_lt_IBbsArticle.ISummary_gt_\": {\r\n        \"type\": \"object\",\r\n        \"properties\": {\r\n          \"pagination\": {\r\n            \"$ref\": \"#/components/schemas/IPage.IPagination\"\r\n          },\r\n          \"data\": {\r\n            \"description\": \"List of records.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"array\",\r\n            \"items\": {\r\n              \"$ref\": \"#/components/schemas/IBbsArticle.ISummary\"\r\n            }\r\n          }\r\n        },\r\n        \"nullable\": false,\r\n        \"required\": [\r\n          \"pagination\",\r\n          \"data\"\r\n        ],\r\n        \"description\": \"List of records.\",\r\n        \"x-typia-jsDocTags\": [\r\n          {\r\n            \"name\": \"author\",\r\n            \"text\": [\r\n              {\r\n                \"text\": \"Samchon\",\r\n                \"kind\": \"text\"\r\n              }\r\n            ]\r\n          }\r\n        ]\r\n      },\r\n      \"IPage.IPagination\": {\r\n        \"type\": \"object\",\r\n        \"properties\": {\r\n          \"current\": {\r\n            \"description\": \"Current page number.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"number\"\r\n          },\r\n          \"limit\": {\r\n            \"description\": \"Limitation of records per a page.\\n\\n@default 100\",\r\n            \"x-typia-jsDocTags\": [\r\n              {\r\n                \"name\": \"default\",\r\n                \"text\": [\r\n                  {\r\n                    \"text\": \"100\",\r\n                    \"kind\": \"text\"\r\n                  }\r\n                ]\r\n              }\r\n            ],\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"number\",\r\n            \"default\": 100\r\n          },\r\n          \"records\": {\r\n            \"description\": \"Count of total records in database.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"number\"\r\n          },\r\n          \"pages\": {\r\n            \"description\": \"Number of total pages.\\n\\nEqual to {@link records} / {@link limit} with ceiling.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"number\"\r\n          }\r\n        },\r\n        \"nullable\": false,\r\n        \"required\": [\r\n          \"current\",\r\n          \"limit\",\r\n          \"records\",\r\n          \"pages\"\r\n        ],\r\n        \"description\": \"Number of total pages.\\n\\nEqual to {@link records} / {@link limit} with ceiling.\",\r\n        \"x-typia-jsDocTags\": []\r\n      },\r\n      \"IBbsArticle.ISummary\": {\r\n        \"type\": \"object\",\r\n        \"properties\": {\r\n          \"id\": {\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          },\r\n          \"writer\": {\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          },\r\n          \"title\": {\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          },\r\n          \"created_at\": {\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          },\r\n          \"updated_at\": {\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          }\r\n        },\r\n        \"nullable\": false,\r\n        \"required\": [\r\n          \"id\",\r\n          \"writer\",\r\n          \"title\",\r\n          \"created_at\",\r\n          \"updated_at\"\r\n        ],\r\n        \"description\": \"Summarized info.\",\r\n        \"x-typia-jsDocTags\": []\r\n      },\r\n      \"IBbsArticle\": {\r\n        \"type\": \"object\",\r\n        \"properties\": {\r\n          \"id\": {\r\n            \"description\": \"Primary Key.\\n\\n@format uuid\",\r\n            \"x-typia-metaTags\": [\r\n              {\r\n                \"kind\": \"format\",\r\n                \"value\": \"uuid\"\r\n              }\r\n            ],\r\n            \"x-typia-jsDocTags\": [\r\n              {\r\n                \"name\": \"format\",\r\n                \"text\": [\r\n                  {\r\n                    \"text\": \"uuid\",\r\n                    \"kind\": \"text\"\r\n                  }\r\n                ]\r\n              }\r\n            ],\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\",\r\n            \"format\": \"uuid\"\r\n          },\r\n          \"section\": {\r\n            \"description\": \"Section code.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          },\r\n          \"writer\": {\r\n            \"description\": \"Name of nickname of writer.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          },\r\n          \"snapshots\": {\r\n            \"description\": \"List of snapshot contents.\\n\\nWhenever updating an article, its contents would be accumulated.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"array\",\r\n            \"items\": {\r\n              \"$ref\": \"#/components/schemas/IBbsArticle.ISnapshot\"\r\n            }\r\n          },\r\n          \"created_at\": {\r\n            \"description\": \"Creation time of the article.\\n\\n@format date-time\",\r\n            \"x-typia-metaTags\": [\r\n              {\r\n                \"kind\": \"format\",\r\n                \"value\": \"datetime\"\r\n              }\r\n            ],\r\n            \"x-typia-jsDocTags\": [\r\n              {\r\n                \"name\": \"format\",\r\n                \"text\": [\r\n                  {\r\n                    \"text\": \"date-time\",\r\n                    \"kind\": \"text\"\r\n                  }\r\n                ]\r\n              }\r\n            ],\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\",\r\n            \"format\": \"date-time\"\r\n          }\r\n        },\r\n        \"nullable\": false,\r\n        \"required\": [\r\n          \"id\",\r\n          \"section\",\r\n          \"writer\",\r\n          \"snapshots\",\r\n          \"created_at\"\r\n        ],\r\n        \"description\": \"Creation time of the article.\\n\\n@format date-time\",\r\n        \"x-typia-jsDocTags\": []\r\n      },\r\n      \"IBbsArticle.ISnapshot\": {\r\n        \"type\": \"object\",\r\n        \"properties\": {\r\n          \"id\": {\r\n            \"description\": \"Primary key of individual content.\\n\\n@format uuid\",\r\n            \"x-typia-metaTags\": [\r\n              {\r\n                \"kind\": \"format\",\r\n                \"value\": \"uuid\"\r\n              }\r\n            ],\r\n            \"x-typia-jsDocTags\": [\r\n              {\r\n                \"name\": \"format\",\r\n                \"text\": [\r\n                  {\r\n                    \"text\": \"uuid\",\r\n                    \"kind\": \"text\"\r\n                  }\r\n                ]\r\n              }\r\n            ],\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\",\r\n            \"format\": \"uuid\"\r\n          },\r\n          \"created_at\": {\r\n            \"description\": \"Creation time of this content.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          },\r\n          \"title\": {\r\n            \"description\": \"Title of the article.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          },\r\n          \"body\": {\r\n            \"description\": \"Content body.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          },\r\n          \"format\": {\r\n            \"description\": \"Format of the content body.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\",\r\n            \"enum\": [\r\n              \"md\",\r\n              \"html\",\r\n              \"txt\"\r\n            ]\r\n          },\r\n          \"files\": {\r\n            \"description\": \"List of files (to be) attached.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"array\",\r\n            \"items\": {\r\n              \"$ref\": \"#/components/schemas/IAttachmentFile\"\r\n            }\r\n          }\r\n        },\r\n        \"nullable\": false,\r\n        \"required\": [\r\n          \"id\",\r\n          \"created_at\",\r\n          \"title\",\r\n          \"body\",\r\n          \"format\",\r\n          \"files\"\r\n        ],\r\n        \"description\": \"Creation time of this content.\",\r\n        \"x-typia-jsDocTags\": []\r\n      },\r\n      \"IAttachmentFile\": {\r\n        \"type\": \"object\",\r\n        \"properties\": {\r\n          \"name\": {\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          },\r\n          \"extension\": {\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\",\r\n            \"nullable\": true\r\n          },\r\n          \"url\": {\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          }\r\n        },\r\n        \"nullable\": false,\r\n        \"required\": [\r\n          \"name\",\r\n          \"extension\",\r\n          \"url\"\r\n        ],\r\n        \"x-typia-jsDocTags\": []\r\n      },\r\n      \"IBbsArticle.IStore\": {\r\n        \"type\": \"object\",\r\n        \"properties\": {\r\n          \"writer\": {\r\n            \"description\": \"Name or nickname of the writer.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          },\r\n          \"title\": {\r\n            \"description\": \"Title of the article.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          },\r\n          \"body\": {\r\n            \"description\": \"Content body.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          },\r\n          \"format\": {\r\n            \"description\": \"Format of the content body.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\",\r\n            \"enum\": [\r\n              \"md\",\r\n              \"html\",\r\n              \"txt\"\r\n            ]\r\n          },\r\n          \"files\": {\r\n            \"description\": \"List of files (to be) attached.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"array\",\r\n            \"items\": {\r\n              \"$ref\": \"#/components/schemas/IAttachmentFile\"\r\n            }\r\n          },\r\n          \"password\": {\r\n            \"description\": \"Password of the article.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          }\r\n        },\r\n        \"nullable\": false,\r\n        \"required\": [\r\n          \"writer\",\r\n          \"title\",\r\n          \"body\",\r\n          \"format\",\r\n          \"files\",\r\n          \"password\"\r\n        ],\r\n        \"description\": \"Name or nickname of the writer.\",\r\n        \"x-typia-jsDocTags\": []\r\n      },\r\n      \"IBbsArticle.IUpdate\": {\r\n        \"type\": \"object\",\r\n        \"properties\": {\r\n          \"title\": {\r\n            \"description\": \"Title of the article.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          },\r\n          \"body\": {\r\n            \"description\": \"Content body.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          },\r\n          \"format\": {\r\n            \"description\": \"Format of the content body.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\",\r\n            \"enum\": [\r\n              \"md\",\r\n              \"html\",\r\n              \"txt\"\r\n            ]\r\n          },\r\n          \"files\": {\r\n            \"description\": \"List of files (to be) attached.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"array\",\r\n            \"items\": {\r\n              \"$ref\": \"#/components/schemas/IAttachmentFile\"\r\n            }\r\n          },\r\n          \"password\": {\r\n            \"description\": \"Password of the article.\",\r\n            \"x-typia-required\": true,\r\n            \"x-typia-optional\": false,\r\n            \"type\": \"string\"\r\n          }\r\n        },\r\n        \"nullable\": false,\r\n        \"required\": [\r\n          \"title\",\r\n          \"body\",\r\n          \"format\",\r\n          \"files\",\r\n          \"password\"\r\n        ],\r\n        \"description\": \"Password of the article.\",\r\n        \"x-typia-jsDocTags\": []\r\n      }\r\n    }\r\n  }\r\n}"
         
     | 
| 
      
 71 
     | 
    
         
            +
                },
         
     | 
| 
       67 
72 
     | 
    
         
             
                {
         
     | 
| 
       68 
73 
     | 
    
         
             
                    "location": "/packages/api",
         
     | 
| 
       69 
74 
     | 
    
         
             
                    "file": "tsconfig.json",
         
     | 
    
        package/src/executable/bundle.ts
    CHANGED
    
    
| 
         @@ -14,7 +14,7 @@ export namespace ControllerProgrammer { 
     | 
|
| 
       14 
14 
     | 
    
         
             
                    for (const [path, collection] of Object.entries(swagger.paths)) {
         
     | 
| 
       15 
15 
     | 
    
         
             
                        // PREPARE DIRECTORIES
         
     | 
| 
       16 
16 
     | 
    
         
             
                        const location: string = StringUtil.split(path)
         
     | 
| 
       17 
     | 
    
         
            -
                            .filter((str) => str[0] !== "{")
         
     | 
| 
      
 17 
     | 
    
         
            +
                            .filter((str) => str[0] !== "{" && str[0] !== ":")
         
     | 
| 
       18 
18 
     | 
    
         
             
                            .join("/");
         
     | 
| 
       19 
19 
     | 
    
         
             
                        for (const s of sequence(location)) MapUtil.take(dict)(s)(() => []);
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
         @@ -103,7 +103,7 @@ export namespace RouteProgrammer { 
     | 
|
| 
       103 
103 
     | 
    
         
             
                                    required: [
         
     | 
| 
       104 
104 
     | 
    
         
             
                                        ...primitives
         
     | 
| 
       105 
105 
     | 
    
         
             
                                            .filter((p) => p.required)
         
     | 
| 
       106 
     | 
    
         
            -
                                            .map((p) => p.name),
         
     | 
| 
      
 106 
     | 
    
         
            +
                                            .map((p) => p.name!),
         
     | 
| 
       107 
107 
     | 
    
         
             
                                        ...(dto ? dto.required ?? [] : []),
         
     | 
| 
       108 
108 
     | 
    
         
             
                                    ],
         
     | 
| 
       109 
109 
     | 
    
         
             
                                },
         
     | 
| 
         @@ -146,11 +146,24 @@ export namespace RouteProgrammer { 
     | 
|
| 
       146 
146 
     | 
    
         
             
                                  });
         
     | 
| 
       147 
147 
     | 
    
         
             
                        });
         
     | 
| 
       148 
148 
     | 
    
         | 
| 
       149 
     | 
    
         
            -
                        const parameterNames:  
     | 
| 
       150 
     | 
    
         
            -
                            ( 
     | 
| 
       151 
     | 
    
         
            -
             
     | 
| 
       152 
     | 
    
         
            -
                                 
     | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
      
 149 
     | 
    
         
            +
                        const parameterNames: string[] = StringUtil.split(props.path)
         
     | 
| 
      
 150 
     | 
    
         
            +
                            .filter((str) => str[0] === "{" || str[0] === ":")
         
     | 
| 
      
 151 
     | 
    
         
            +
                            .map((str) =>
         
     | 
| 
      
 152 
     | 
    
         
            +
                                str[0] === "{"
         
     | 
| 
      
 153 
     | 
    
         
            +
                                    ? str.substring(1, str.length - 1)
         
     | 
| 
      
 154 
     | 
    
         
            +
                                    : str.substring(1),
         
     | 
| 
      
 155 
     | 
    
         
            +
                            );
         
     | 
| 
      
 156 
     | 
    
         
            +
                        if (
         
     | 
| 
      
 157 
     | 
    
         
            +
                            parameterNames.length !==
         
     | 
| 
      
 158 
     | 
    
         
            +
                            (route.parameters ?? []).filter((p) => p.in === "path").length
         
     | 
| 
      
 159 
     | 
    
         
            +
                        ) {
         
     | 
| 
      
 160 
     | 
    
         
            +
                            console.log(
         
     | 
| 
      
 161 
     | 
    
         
            +
                                `Failed to migrate ${props.method.toUpperCase()} ${
         
     | 
| 
      
 162 
     | 
    
         
            +
                                    props.path
         
     | 
| 
      
 163 
     | 
    
         
            +
                                }: number of path parameters are not matched with its full path.`,
         
     | 
| 
      
 164 
     | 
    
         
            +
                            );
         
     | 
| 
      
 165 
     | 
    
         
            +
                            return null;
         
     | 
| 
      
 166 
     | 
    
         
            +
                        }
         
     | 
| 
       154 
167 
     | 
    
         
             
                        return {
         
     | 
| 
       155 
168 
     | 
    
         
             
                            name: "@lazy",
         
     | 
| 
       156 
169 
     | 
    
         
             
                            path: props.path,
         
     | 
| 
         @@ -158,14 +171,16 @@ export namespace RouteProgrammer { 
     | 
|
| 
       158 
171 
     | 
    
         
             
                            headers,
         
     | 
| 
       159 
172 
     | 
    
         
             
                            parameters: (route.parameters ?? [])
         
     | 
| 
       160 
173 
     | 
    
         
             
                                .filter((p) => p.in === "path")
         
     | 
| 
       161 
     | 
    
         
            -
                                .map((p) => ({
         
     | 
| 
      
 174 
     | 
    
         
            +
                                .map((p, i) => ({
         
     | 
| 
       162 
175 
     | 
    
         
             
                                    key: (() => {
         
     | 
| 
       163 
     | 
    
         
            -
                                        let key: string = StringUtil.normalize( 
     | 
| 
      
 176 
     | 
    
         
            +
                                        let key: string = StringUtil.normalize(
         
     | 
| 
      
 177 
     | 
    
         
            +
                                            parameterNames[i],
         
     | 
| 
      
 178 
     | 
    
         
            +
                                        );
         
     | 
| 
       164 
179 
     | 
    
         
             
                                        if (Escaper.variable(key)) return key;
         
     | 
| 
       165 
180 
     | 
    
         | 
| 
       166 
181 
     | 
    
         
             
                                        while (true) {
         
     | 
| 
       167 
182 
     | 
    
         
             
                                            key = "_" + key;
         
     | 
| 
       168 
     | 
    
         
            -
                                            if (parameterNames. 
     | 
| 
      
 183 
     | 
    
         
            +
                                            if (!parameterNames.some((s) => s === key))
         
     | 
| 
       169 
184 
     | 
    
         
             
                                                return key;
         
     | 
| 
       170 
185 
     | 
    
         
             
                                        }
         
     | 
| 
       171 
186 
     | 
    
         
             
                                    })(),
         
     | 
| 
         @@ -1,9 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            import { ISwaggerComponents } from "./ISwaggerComponents";
         
     | 
| 
      
 2 
     | 
    
         
            +
            import { ISwaggerInfo } from "./ISwaggerInfo";
         
     | 
| 
       2 
3 
     | 
    
         
             
            import { ISwaggerRoute } from "./ISwaggerRoute";
         
     | 
| 
       3 
4 
     | 
    
         | 
| 
       4 
5 
     | 
    
         
             
            export interface ISwagger {
         
     | 
| 
       5 
6 
     | 
    
         
             
                openapi: `3.0.${number}`;
         
     | 
| 
       6 
     | 
    
         
            -
                info:  
     | 
| 
      
 7 
     | 
    
         
            +
                info: ISwaggerInfo;
         
     | 
| 
       7 
8 
     | 
    
         
             
                servers: ISwagger.IServer[];
         
     | 
| 
       8 
9 
     | 
    
         | 
| 
       9 
10 
     | 
    
         
             
                components: ISwaggerComponents;
         
     | 
| 
         @@ -15,10 +16,5 @@ export namespace ISwagger { 
     | 
|
| 
       15 
16 
     | 
    
         
             
                    url: string;
         
     | 
| 
       16 
17 
     | 
    
         
             
                    description?: string;
         
     | 
| 
       17 
18 
     | 
    
         
             
                }
         
     | 
| 
       18 
     | 
    
         
            -
                export interface IInfo {
         
     | 
| 
       19 
     | 
    
         
            -
                    version: string;
         
     | 
| 
       20 
     | 
    
         
            -
                    title: string;
         
     | 
| 
       21 
     | 
    
         
            -
                    description?: string;
         
     | 
| 
       22 
     | 
    
         
            -
                }
         
     | 
| 
       23 
19 
     | 
    
         
             
                export type IPath = Record<string, ISwaggerRoute>;
         
     | 
| 
       24 
     | 
    
         
            -
            }
         
     | 
| 
      
 20 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -0,0 +1,80 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /**
         
     | 
| 
      
 2 
     | 
    
         
            +
             * Information about the API.
         
     | 
| 
      
 3 
     | 
    
         
            +
             *
         
     | 
| 
      
 4 
     | 
    
         
            +
             * @author Samchon
         
     | 
| 
      
 5 
     | 
    
         
            +
             */
         
     | 
| 
      
 6 
     | 
    
         
            +
            export interface ISwaggerInfo {
         
     | 
| 
      
 7 
     | 
    
         
            +
                /**
         
     | 
| 
      
 8 
     | 
    
         
            +
                 * The title of the API.
         
     | 
| 
      
 9 
     | 
    
         
            +
                 */
         
     | 
| 
      
 10 
     | 
    
         
            +
                title: string;
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                /**
         
     | 
| 
      
 13 
     | 
    
         
            +
                 * A short description of the API.
         
     | 
| 
      
 14 
     | 
    
         
            +
                 */
         
     | 
| 
      
 15 
     | 
    
         
            +
                description?: string;
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                /**
         
     | 
| 
      
 18 
     | 
    
         
            +
                 * A URL to the Terms of Service for the API.
         
     | 
| 
      
 19 
     | 
    
         
            +
                 *
         
     | 
| 
      
 20 
     | 
    
         
            +
                 * @format url
         
     | 
| 
      
 21 
     | 
    
         
            +
                 */
         
     | 
| 
      
 22 
     | 
    
         
            +
                termsOfService?: string;
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                /**
         
     | 
| 
      
 25 
     | 
    
         
            +
                 * The contact information for the exposed API.
         
     | 
| 
      
 26 
     | 
    
         
            +
                 */
         
     | 
| 
      
 27 
     | 
    
         
            +
                contact?: ISwaggerInfo.IContact;
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                /**
         
     | 
| 
      
 30 
     | 
    
         
            +
                 * The license information for the exposed API.
         
     | 
| 
      
 31 
     | 
    
         
            +
                 */
         
     | 
| 
      
 32 
     | 
    
         
            +
                license?: ISwaggerInfo.ILicense;
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                /**
         
     | 
| 
      
 35 
     | 
    
         
            +
                 * Version of the API.
         
     | 
| 
      
 36 
     | 
    
         
            +
                 */
         
     | 
| 
      
 37 
     | 
    
         
            +
                version: string;
         
     | 
| 
      
 38 
     | 
    
         
            +
            }
         
     | 
| 
      
 39 
     | 
    
         
            +
            export namespace ISwaggerInfo {
         
     | 
| 
      
 40 
     | 
    
         
            +
                /**
         
     | 
| 
      
 41 
     | 
    
         
            +
                 * Contact information for the exposed API.
         
     | 
| 
      
 42 
     | 
    
         
            +
                 */
         
     | 
| 
      
 43 
     | 
    
         
            +
                export interface IContact {
         
     | 
| 
      
 44 
     | 
    
         
            +
                    /**
         
     | 
| 
      
 45 
     | 
    
         
            +
                     * The identifying name of the contact person/organization.
         
     | 
| 
      
 46 
     | 
    
         
            +
                     */
         
     | 
| 
      
 47 
     | 
    
         
            +
                    name?: string;
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                    /**
         
     | 
| 
      
 50 
     | 
    
         
            +
                     * The URL pointing to the contact information.
         
     | 
| 
      
 51 
     | 
    
         
            +
                     *
         
     | 
| 
      
 52 
     | 
    
         
            +
                     * @format url
         
     | 
| 
      
 53 
     | 
    
         
            +
                     */
         
     | 
| 
      
 54 
     | 
    
         
            +
                    url?: string;
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                    /**
         
     | 
| 
      
 57 
     | 
    
         
            +
                     * The email address of the contact person/organization.
         
     | 
| 
      
 58 
     | 
    
         
            +
                     *
         
     | 
| 
      
 59 
     | 
    
         
            +
                     * @format email
         
     | 
| 
      
 60 
     | 
    
         
            +
                     */
         
     | 
| 
      
 61 
     | 
    
         
            +
                    email?: string;
         
     | 
| 
      
 62 
     | 
    
         
            +
                }
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                /**
         
     | 
| 
      
 65 
     | 
    
         
            +
                 * License information for the exposed API.
         
     | 
| 
      
 66 
     | 
    
         
            +
                 */
         
     | 
| 
      
 67 
     | 
    
         
            +
                export interface ILicense {
         
     | 
| 
      
 68 
     | 
    
         
            +
                    /**
         
     | 
| 
      
 69 
     | 
    
         
            +
                     * The license name used for the API.
         
     | 
| 
      
 70 
     | 
    
         
            +
                     */
         
     | 
| 
      
 71 
     | 
    
         
            +
                    name: string;
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                    /**
         
     | 
| 
      
 74 
     | 
    
         
            +
                     * A URL to the license used for the API.
         
     | 
| 
      
 75 
     | 
    
         
            +
                     *
         
     | 
| 
      
 76 
     | 
    
         
            +
                     * @format url
         
     | 
| 
      
 77 
     | 
    
         
            +
                     */
         
     | 
| 
      
 78 
     | 
    
         
            +
                    url?: string;
         
     | 
| 
      
 79 
     | 
    
         
            +
                }
         
     | 
| 
      
 80 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -12,7 +12,7 @@ export interface ISwaggerRoute { 
     | 
|
| 
       12 
12 
     | 
    
         
             
            }
         
     | 
| 
       13 
13 
     | 
    
         
             
            export namespace ISwaggerRoute {
         
     | 
| 
       14 
14 
     | 
    
         
             
                export interface IParameter {
         
     | 
| 
       15 
     | 
    
         
            -
                    name 
     | 
| 
      
 15 
     | 
    
         
            +
                    name?: string;
         
     | 
| 
       16 
16 
     | 
    
         
             
                    in: "path" | "query" | "header" | "cookie";
         
     | 
| 
       17 
17 
     | 
    
         
             
                    schema: ISwaggerSchema;
         
     | 
| 
       18 
18 
     | 
    
         
             
                    required?: boolean;
         
     | 
| 
         @@ -21,7 +21,7 @@ export namespace ISwaggerRoute { 
     | 
|
| 
       21 
21 
     | 
    
         
             
                export interface IRequestBody {
         
     | 
| 
       22 
22 
     | 
    
         
             
                    description?: string;
         
     | 
| 
       23 
23 
     | 
    
         
             
                    content: IContent;
         
     | 
| 
       24 
     | 
    
         
            -
                    required?:  
     | 
| 
      
 24 
     | 
    
         
            +
                    required?: boolean;
         
     | 
| 
       25 
25 
     | 
    
         
             
                    "x-nestia-encrypted"?: boolean;
         
     | 
| 
       26 
26 
     | 
    
         
             
                }
         
     | 
| 
       27 
27 
     | 
    
         
             
                export type IResponseBody = Record<
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            export type ISwaggerSecurity = 
     | 
| 
      
 1 
     | 
    
         
            +
            export type ISwaggerSecurity =
         
     | 
| 
       2 
2 
     | 
    
         
             
                | ISwaggerSecurity.IHttpBasic
         
     | 
| 
       3 
3 
     | 
    
         
             
                | ISwaggerSecurity.IHttpBearer
         
     | 
| 
       4 
4 
     | 
    
         
             
                | ISwaggerSecurity.IApiKey
         
     | 
| 
         @@ -7,7 +7,7 @@ export type ISwaggerSecurity = 
     | 
|
| 
       7 
7 
     | 
    
         
             
            export namespace ISwaggerSecurity {
         
     | 
| 
       8 
8 
     | 
    
         
             
                export interface IHttpBasic {
         
     | 
| 
       9 
9 
     | 
    
         
             
                    type: "http";
         
     | 
| 
       10 
     | 
    
         
            -
                     
     | 
| 
      
 10 
     | 
    
         
            +
                    scheme: "basic";
         
     | 
| 
       11 
11 
     | 
    
         
             
                }
         
     | 
| 
       12 
12 
     | 
    
         
             
                export interface IHttpBearer {
         
     | 
| 
       13 
13 
     | 
    
         
             
                    type: "http";
         
     | 
| 
         @@ -44,4 +44,4 @@ export namespace ISwaggerSecurity { 
     | 
|
| 
       44 
44 
     | 
    
         
             
                        scopes?: Record<string, string>;
         
     | 
| 
       45 
45 
     | 
    
         
             
                    }
         
     | 
| 
       46 
46 
     | 
    
         
             
                }
         
     | 
| 
       47 
     | 
    
         
            -
            }
         
     | 
| 
      
 47 
     | 
    
         
            +
            }
         
     |