diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..3962b65c9 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,114 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +.idea + +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions diff --git a/README.md b/README.md index 166d06825..ac1aedc73 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,45 @@ # openapi-code-generator + **Status:** Early, experimental. Not yet published to NPM. However, as shown by the integration tests, a fair job of generating a typed client is achieved for even fairly large/complex definitions like the GitHub api. The koa generation is less refined. + + +- [Goal](#goal) +- [CLI Usage](#cli-usage) +- [Architecture](#architecture) + - [`./packages/openapi-code-generator/src/core`](#packagesopenapi-code-generatorsrccore) + - [`file-loader`](#file-loader) + - [`openapi-validator`](#openapi-validator) + - [`openapi-loader`](#openapi-loader) + - [`input`](#input) + - [./packages/openapi-code-generator/src/typescript](#packagesopenapi-code-generatorsrctypescript) +- [Contributing](#contributing) + - [Setup](#setup) + - [Workflow](#workflow) + + + ## Goal -To make it fun, easy and productive to generate both client and server "glue" + +To make it fun, easy and productive to generate both client and server "glue" code from openapi 3 definitions. Additionally, the code output should be "stable" in the sense that it will not -arbitrarily change between generation without need (for a given version). For +arbitrarily change between generation without need (for a given version). For example outputting entities in alphabetic order where possible. The intent is that the generated code can and should be committed to the consuming project repositories, allowing it to be eyeballed, and audited overtime. The initial focus on typescript, but nothing in the core of the library is assuming this. -## Build -Refer to [package.json](package.json) `scripts` for pointers on building / testing. - ## CLI Usage + Usage like so: + ```shell node ../../packages/openapi-code-generator/dist/index.js \ --input="./my-openapi-file.yaml" \ @@ -30,38 +48,44 @@ node ../../packages/openapi-code-generator/dist/index.js \ ``` Where template is one of: + - typescript-angular - typescript-fetch - typescript-koa ## Architecture -The project is still evolving dramatically, but this should give a good overview + +The project is still evolving dramatically, but this should give a good overview of the current approach ![architecture](./architecture.svg) ### `./packages/openapi-code-generator/src/core` + This contains the generator/target language agnostic parts of the project. The process of generation resembles a pipeline in many ways #### `file-loader` + does what it says on the tin, given a path/uri it reads in the file and parses it from json/yaml **(http support todo)** #### `openapi-validator` + nothing particular interesting here, just takes a loaded document and validates it against the openapi3 specification in json schema format. Useful for detecting emission errors due to bad input rather than bugs in the code generation. #### `openapi-loader` + `openapi-loader` takes an entrypoint path, and loads + validates a collection of files . -It then provides typed access to the raw openapi structures, with methods able to convert +It then provides typed access to the raw openapi structures, with methods able to convert "maybe refs" into the referenced objects. -This is important because one of the more painful (and bug prone) parts of parsing openapi +This is important because one of the more painful (and bug prone) parts of parsing openapi documents is correctly following $ref's, as you need to carry around the context of which document you came from. @@ -69,6 +93,7 @@ The `openapi-loader` makes this much less complicated by loading all files up fr the contained $ref to absolute paths. #### `input` + Ultimately an instance of the `input` class is passed to a generator. The goal of the `input` class is to provide ergonomic, target language agnostic access to @@ -78,12 +103,13 @@ It primarily surfaces api operations, with optional grouping strategies, as a no that has already de-referenced parameters / responses, and set default values on various properties. ### ./packages/openapi-code-generator/src/typescript + This contains the various typescript generator functions. Each generator currently has a simple signature: ```typescript export interface OpenapiGenerator { - (args: { dest: string, input: Input }): Promise + (args: { dest: string; input: Input }): Promise; } ``` @@ -92,3 +118,26 @@ of the `Input` class described above. You can find all registered generators in `templates.ts` - eventually this likely be split into packages that consume the core modules. + +## Contributing + +### Setup + +1. Install a node version manager that respects `.nvmrc` files, such as [fnm](https://github.com/Schniz/fnm) +2. Enable [corepack](https://nodejs.org/api/corepack.html) using `corepack enable` +3. Install `devDependencies` using `yarn` + +### Workflow + +See [package.json](./package.json) for available scripts. +Main ones of interest are `build`, `test`, `lint`. Eg: + +```shell +yarn test +``` + +There's also a `ci-pipeline` script that can be used as a pre-push check, eg: + +```shell +yarn ci-pipeline && git push --force-with-lease +``` diff --git a/package.json b/package.json index 336724e03..0a4e6b807 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "description": "", "scripts": { "postinstall": "husky install", + "docs:generate": "markdown-toc -i --bullets=- ./README.md", "refresh": "./scripts/refresh-data.sh", "start": "nodemon", "lint": "eslint . --cache --report-unused-disable-directives --fix", @@ -33,10 +34,12 @@ "husky": "^8.0.3", "lerna": "^6.6.1", "lint-staged": "^13.2.0", + "markdown-toc": "^1.2.0", "mocha": "^10.2.0", "mocha-teamcity-reporter": "^4.2.0", "nodemon": "^2.0.22", "nyc": "^15.1.0", + "prettier": "^2.8.7", "source-map-support": "^0.5.21", "ts-node": "^10.9.1", "typescript": "~4.9.5" @@ -48,6 +51,10 @@ "lint-staged": { "*.{ts,js,tsx,jsx}": [ "yarn lint" + ], + "*.md": [ + "sh -c 'yarn docs:generate'", + "yarn prettier --write" ] }, "engines": { diff --git a/yarn.lock b/yarn.lock index 76bf9282a..79321737a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3818,6 +3818,15 @@ __metadata: languageName: node linkType: hard +"ansi-red@npm:^0.1.1": + version: 0.1.1 + resolution: "ansi-red@npm:0.1.1" + dependencies: + ansi-wrap: 0.1.0 + checksum: 84442078e6ae34c79ada32d43d40956e0f953204626be4c562431761407b4388a573cfff950c78a6c8fa20e9eed12441ac8d1c89864d6a35df53e9ef7fce2b98 + languageName: node + linkType: hard + "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -3864,6 +3873,13 @@ __metadata: languageName: node linkType: hard +"ansi-wrap@npm:0.1.0": + version: 0.1.0 + resolution: "ansi-wrap@npm:0.1.0" + checksum: f24f652a5e450c0561cbc7d298ffa62dcd33c72f9da34fd3c24538dbf82de8fc21b7f924dc30cd9d01360bd2893d1954f0a60eee0550ca629bb148dcbeef5c5b + languageName: node + linkType: hard + "anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" @@ -3924,7 +3940,7 @@ __metadata: languageName: node linkType: hard -"argparse@npm:^1.0.7": +"argparse@npm:^1.0.10, argparse@npm:^1.0.7": version: 1.0.10 resolution: "argparse@npm:1.0.10" dependencies: @@ -4078,6 +4094,15 @@ __metadata: languageName: node linkType: hard +"autolinker@npm:~0.28.0": + version: 0.28.1 + resolution: "autolinker@npm:0.28.1" + dependencies: + gulp-header: ^1.7.1 + checksum: 2cd1eb34098b62749620fd0f49eb61ff4e0dcc89dda3040c2e67a0d5a2ec688ea52d3747ba9aadf3326063ecdcb7d459ec0f5584ff4850490ca339367ccd7702 + languageName: node + linkType: hard + "autoprefixer@npm:10.4.13": version: 10.4.13 resolution: "autoprefixer@npm:10.4.13" @@ -4809,6 +4834,16 @@ __metadata: languageName: node linkType: hard +"coffee-script@npm:^1.12.4": + version: 1.12.7 + resolution: "coffee-script@npm:1.12.7" + bin: + cake: ./bin/cake + coffee: ./bin/coffee + checksum: cce8dd15eda581c4c990aefcb0c8b1973713bae6b905baa5916de60e11bdc497fca68c119df20dff72b77c48e871f1bff200b61053526035a64b993b76a90d71 + languageName: node + linkType: hard + "color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -4945,6 +4980,18 @@ __metadata: languageName: node linkType: hard +"concat-stream@npm:^1.5.2": + version: 1.6.2 + resolution: "concat-stream@npm:1.6.2" + dependencies: + buffer-from: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^2.2.2 + typedarray: ^0.0.6 + checksum: 1ef77032cb4459dcd5187bd710d6fc962b067b64ec6a505810de3d2b8cc0605638551b42f8ec91edf6fcd26141b32ef19ad749239b58fae3aba99187adc32285 + languageName: node + linkType: hard + "concat-stream@npm:^2.0.0": version: 2.0.0 resolution: "concat-stream@npm:2.0.0" @@ -4957,6 +5004,15 @@ __metadata: languageName: node linkType: hard +"concat-with-sourcemaps@npm:*": + version: 1.1.0 + resolution: "concat-with-sourcemaps@npm:1.1.0" + dependencies: + source-map: ^0.6.1 + checksum: 57faa6f4a6f38a1846a58f96b2745ec8435755e0021f069e89085c651d091b78d9bc20807ea76c38c85021acca80dc2fa4cedda666aade169b602604215d25b9 + languageName: node + linkType: hard + "config-chain@npm:1.1.12": version: 1.1.12 resolution: "config-chain@npm:1.1.12" @@ -5574,6 +5630,13 @@ __metadata: languageName: node linkType: hard +"diacritics-map@npm:^0.1.0": + version: 0.1.0 + resolution: "diacritics-map@npm:0.1.0" + checksum: da7cb0b9730713d7942b7191601fb551aba5c9cbf2e73f8281e9175d9ba72e5879426605c9afeb6555ba1c33969c42f1af0654ab0f730a8ba9b0b477b3c6b236 + languageName: node + linkType: hard + "diff@npm:5.0.0": version: 5.0.0 resolution: "diff@npm:5.0.0" @@ -6378,6 +6441,15 @@ __metadata: languageName: node linkType: hard +"expand-range@npm:^1.8.1": + version: 1.8.2 + resolution: "expand-range@npm:1.8.2" + dependencies: + fill-range: ^2.1.0 + checksum: ca773ec06838d7d53cfd835b7d58c9c662a3773e5d57647ca6f83e50218efd93e29b5ee6cc1ea9c5651794e9005562cad28c4911ea06aac27323a05f3c6b787d + languageName: node + linkType: hard + "express@npm:^4.17.3": version: 4.18.2 resolution: "express@npm:4.18.2" @@ -6417,6 +6489,15 @@ __metadata: languageName: node linkType: hard +"extend-shallow@npm:^2.0.1": + version: 2.0.1 + resolution: "extend-shallow@npm:2.0.1" + dependencies: + is-extendable: ^0.1.0 + checksum: 8fb58d9d7a511f4baf78d383e637bd7d2e80843bd9cd0853649108ea835208fb614da502a553acc30208e1325240bb7cc4a68473021612496bb89725483656d8 + languageName: node + linkType: hard + "extend@npm:^3.0.0": version: 3.0.2 resolution: "extend@npm:3.0.2" @@ -6534,6 +6615,19 @@ __metadata: languageName: node linkType: hard +"fill-range@npm:^2.1.0": + version: 2.2.4 + resolution: "fill-range@npm:2.2.4" + dependencies: + is-number: ^2.1.0 + isobject: ^2.0.0 + randomatic: ^3.0.0 + repeat-element: ^1.1.2 + repeat-string: ^1.5.2 + checksum: ee7cb386c983bf7ff8aa120164c8b857a937c9d2b9c4ddf47af22f9d2bb1bd03dfa821946d7246f1631e86816562dd60059e081948d0804ce2ac0ac83f7edc61 + languageName: node + linkType: hard + "fill-range@npm:^7.0.1": version: 7.0.1 resolution: "fill-range@npm:7.0.1" @@ -6658,6 +6752,13 @@ __metadata: languageName: node linkType: hard +"for-in@npm:^1.0.2": + version: 1.0.2 + resolution: "for-in@npm:1.0.2" + checksum: 09f4ae93ce785d253ac963d94c7f3432d89398bf25ac7a24ed034ca393bf74380bdeccc40e0f2d721a895e54211b07c8fad7132e8157827f6f7f059b70b4043d + languageName: node + linkType: hard + "foreground-child@npm:^2.0.0": version: 2.0.0 resolution: "foreground-child@npm:2.0.0" @@ -7192,6 +7293,30 @@ __metadata: languageName: node linkType: hard +"gray-matter@npm:^2.1.0": + version: 2.1.1 + resolution: "gray-matter@npm:2.1.1" + dependencies: + ansi-red: ^0.1.1 + coffee-script: ^1.12.4 + extend-shallow: ^2.0.1 + js-yaml: ^3.8.1 + toml: ^2.3.2 + checksum: 03e96e237960199c6fffb7d1bbc70605ca620d92afc7cb33193f6b36cd834dbb2b71cdd0374f23f19c568b0e34a834dbd02201edb992bb37af2a6887fdd842b9 + languageName: node + linkType: hard + +"gulp-header@npm:^1.7.1": + version: 1.8.12 + resolution: "gulp-header@npm:1.8.12" + dependencies: + concat-with-sourcemaps: "*" + lodash.template: ^4.4.0 + through2: ^2.0.0 + checksum: 5d11dfae22f720e74ca3b5c107685736de667d7c34f11d364e0515572c02cff715aa765091a090094c4202f186f620f9c2946cc5d33c99a6d14aa0392bb9c162 + languageName: node + linkType: hard + "handle-thing@npm:^2.0.0": version: 2.0.1 resolution: "handle-thing@npm:2.0.1" @@ -7866,6 +7991,13 @@ __metadata: languageName: node linkType: hard +"is-buffer@npm:^1.1.5": + version: 1.1.6 + resolution: "is-buffer@npm:1.1.6" + checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707 + languageName: node + linkType: hard + "is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" @@ -7911,6 +8043,22 @@ __metadata: languageName: node linkType: hard +"is-extendable@npm:^0.1.0": + version: 0.1.1 + resolution: "is-extendable@npm:0.1.1" + checksum: 3875571d20a7563772ecc7a5f36cb03167e9be31ad259041b4a8f73f33f885441f778cee1f1fe0085eb4bc71679b9d8c923690003a36a6a5fdf8023e6e3f0672 + languageName: node + linkType: hard + +"is-extendable@npm:^1.0.1": + version: 1.0.1 + resolution: "is-extendable@npm:1.0.1" + dependencies: + is-plain-object: ^2.0.4 + checksum: db07bc1e9de6170de70eff7001943691f05b9d1547730b11be01c0ebfe67362912ba743cf4be6fd20a5e03b4180c685dad80b7c509fe717037e3eee30ad8e84f + languageName: node + linkType: hard + "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -7980,6 +8128,22 @@ __metadata: languageName: node linkType: hard +"is-number@npm:^2.1.0": + version: 2.1.0 + resolution: "is-number@npm:2.1.0" + dependencies: + kind-of: ^3.0.2 + checksum: d80e041a43a8de31ecc02037d532f1f448ec9c5b6c02fe7ee67bdd45d21cd9a4b3b4cf07e428ae5adafc2f17408c49fcb0a227915916d94a16d576c39e689f60 + languageName: node + linkType: hard + +"is-number@npm:^4.0.0": + version: 4.0.0 + resolution: "is-number@npm:4.0.0" + checksum: e71962a5ae97400211e6be5946eff2b81d3fa85154dad498bfe2704999e63ac6b3f8591fdb7971a121122cc6e25915c2cfe882ff7b77e243d51b92ca6961267e + languageName: node + linkType: hard + "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -8180,7 +8344,7 @@ __metadata: languageName: node linkType: hard -"isarray@npm:~1.0.0": +"isarray@npm:1.0.0, isarray@npm:~1.0.0": version: 1.0.0 resolution: "isarray@npm:1.0.0" checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab @@ -8201,6 +8365,15 @@ __metadata: languageName: node linkType: hard +"isobject@npm:^2.0.0": + version: 2.1.0 + resolution: "isobject@npm:2.1.0" + dependencies: + isarray: 1.0.0 + checksum: 811c6f5a866877d31f0606a88af4a45f282544de886bf29f6a34c46616a1ae2ed17076cc6bf34c0128f33eecf7e1fcaa2c82cf3770560d3e26810894e96ae79f + languageName: node + linkType: hard + "isobject@npm:^3.0.1": version: 3.0.1 resolution: "isobject@npm:3.0.1" @@ -8352,7 +8525,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1": +"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.8.1": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" dependencies: @@ -8608,7 +8781,16 @@ __metadata: languageName: node linkType: hard -"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": +"kind-of@npm:^3.0.2": + version: 3.2.2 + resolution: "kind-of@npm:3.2.2" + dependencies: + is-buffer: ^1.1.5 + checksum: e898df8ca2f31038f27d24f0b8080da7be274f986bc6ed176f37c77c454d76627619e1681f6f9d2e8d2fd7557a18ecc419a6bb54e422abcbb8da8f1a75e4b386 + languageName: node + linkType: hard + +"kind-of@npm:^6.0.0, kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": version: 6.0.3 resolution: "kind-of@npm:6.0.3" checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b @@ -8684,6 +8866,15 @@ __metadata: languageName: node linkType: hard +"lazy-cache@npm:^2.0.2": + version: 2.0.2 + resolution: "lazy-cache@npm:2.0.2" + dependencies: + set-getter: ^0.1.0 + checksum: f4106a28345b4b3b8e2dd544936ea5742bed650250d666f68e07bc7de55d04f75e750a36e2bf38ecb80e7520da95831e29dcdab608e3c32ca3189e6d8fb50e1f + languageName: node + linkType: hard + "lerna@npm:^6.6.1": version: 6.6.1 resolution: "lerna@npm:6.6.1" @@ -8910,6 +9101,18 @@ __metadata: languageName: node linkType: hard +"list-item@npm:^1.1.1": + version: 1.1.1 + resolution: "list-item@npm:1.1.1" + dependencies: + expand-range: ^1.8.1 + extend-shallow: ^2.0.1 + is-number: ^2.1.0 + repeat-string: ^1.5.2 + checksum: 869b21327bde4a83e947bf2edb58b5a9e3e5b39da026841594e3a33381627f37e880e233248f80f963951c3b70397b3c6b89d25db580894c6851d05415917653 + languageName: node + linkType: hard + "listr2@npm:^5.0.7": version: 5.0.8 resolution: "listr2@npm:5.0.8" @@ -9008,6 +9211,13 @@ __metadata: languageName: node linkType: hard +"lodash._reinterpolate@npm:^3.0.0": + version: 3.0.0 + resolution: "lodash._reinterpolate@npm:3.0.0" + checksum: 06d2d5f33169604fa5e9f27b6067ed9fb85d51a84202a656901e5ffb63b426781a601508466f039c720af111b0c685d12f1a5c14ff8df5d5f27e491e562784b2 + languageName: node + linkType: hard + "lodash.clonedeep@npm:^4.5.0": version: 4.5.0 resolution: "lodash.clonedeep@npm:4.5.0" @@ -9043,6 +9253,25 @@ __metadata: languageName: node linkType: hard +"lodash.template@npm:^4.4.0": + version: 4.5.0 + resolution: "lodash.template@npm:4.5.0" + dependencies: + lodash._reinterpolate: ^3.0.0 + lodash.templatesettings: ^4.0.0 + checksum: ca64e5f07b6646c9d3dbc0fe3aaa995cb227c4918abd1cef7a9024cd9c924f2fa389a0ec4296aa6634667e029bc81d4bbdb8efbfde11df76d66085e6c529b450 + languageName: node + linkType: hard + +"lodash.templatesettings@npm:^4.0.0": + version: 4.2.0 + resolution: "lodash.templatesettings@npm:4.2.0" + dependencies: + lodash._reinterpolate: ^3.0.0 + checksum: 863e025478b092997e11a04e9d9e735875eeff1ffcd6c61742aa8272e3c2cddc89ce795eb9726c4e74cef5991f722897ff37df7738a125895f23fc7d12a7bb59 + languageName: node + linkType: hard + "lodash@npm:^4.17.15, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" @@ -9224,6 +9453,42 @@ __metadata: languageName: node linkType: hard +"markdown-link@npm:^0.1.1": + version: 0.1.1 + resolution: "markdown-link@npm:0.1.1" + checksum: b80cdd814b9c93e03c5a243af04da02a433c2a6de31a285bf485412e8de7c979d8b996af7768e48fbe1609c52e3ffac0c3176030bda00fbd194c158beed2b79d + languageName: node + linkType: hard + +"markdown-toc@npm:^1.2.0": + version: 1.2.0 + resolution: "markdown-toc@npm:1.2.0" + dependencies: + concat-stream: ^1.5.2 + diacritics-map: ^0.1.0 + gray-matter: ^2.1.0 + lazy-cache: ^2.0.2 + list-item: ^1.1.1 + markdown-link: ^0.1.1 + minimist: ^1.2.0 + mixin-deep: ^1.1.3 + object.pick: ^1.2.0 + remarkable: ^1.7.1 + repeat-string: ^1.6.1 + strip-color: ^0.1.0 + bin: + markdown-toc: cli.js + checksum: 21c230e4aef4da007e64e3a059dcf64a95b528a2fdce67575e1af2261ac2ee09d3908d20424daed93317499b8be371ba2005406a1367aba473b51062e003dd60 + languageName: node + linkType: hard + +"math-random@npm:^1.0.1": + version: 1.0.4 + resolution: "math-random@npm:1.0.4" + checksum: 9edf31ea337bba21994eb968218fd571d55fce86b51661158d8e241886b73121d9e1a35a5bb8997dba8ce67417a83c8dbd0811917248f886840035b7f1c667b9 + languageName: node + linkType: hard + "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -9544,6 +9809,16 @@ __metadata: languageName: node linkType: hard +"mixin-deep@npm:^1.1.3": + version: 1.3.2 + resolution: "mixin-deep@npm:1.3.2" + dependencies: + for-in: ^1.0.2 + is-extendable: ^1.0.1 + checksum: 820d5a51fcb7479f2926b97f2c3bb223546bc915e6b3a3eb5d906dda871bba569863595424a76682f2b15718252954644f3891437cb7e3f220949bed54b1750d + languageName: node + linkType: hard + "mkdirp-infer-owner@npm:^2.0.0": version: 2.0.0 resolution: "mkdirp-infer-owner@npm:2.0.0" @@ -10346,6 +10621,15 @@ __metadata: languageName: node linkType: hard +"object.pick@npm:^1.2.0": + version: 1.3.0 + resolution: "object.pick@npm:1.3.0" + dependencies: + isobject: ^3.0.1 + checksum: 77fb6eed57c67adf75e9901187e37af39f052ef601cb4480386436561357eb9e459e820762f01fd02c5c1b42ece839ad393717a6d1850d848ee11fbabb3e580a + languageName: node + linkType: hard + "object.values@npm:^1.1.6": version: 1.1.6 resolution: "object.values@npm:1.1.6" @@ -10462,10 +10746,12 @@ __metadata: husky: ^8.0.3 lerna: ^6.6.1 lint-staged: ^13.2.0 + markdown-toc: ^1.2.0 mocha: ^10.2.0 mocha-teamcity-reporter: ^4.2.0 nodemon: ^2.0.22 nyc: ^15.1.0 + prettier: ^2.8.7 source-map-support: ^0.5.21 ts-node: ^10.9.1 typescript: ~4.9.5 @@ -11369,6 +11655,17 @@ __metadata: languageName: node linkType: hard +"randomatic@npm:^3.0.0": + version: 3.1.1 + resolution: "randomatic@npm:3.1.1" + dependencies: + is-number: ^4.0.0 + kind-of: ^6.0.0 + math-random: ^1.0.1 + checksum: 1952baed71801d3698fe84f3ab01e25ea124fc20ce91e133aa1981268c1347647f9ae1fdc62389db2411ebdad61c0f7cea0ce840dee260ad2adadfcf27299018 + languageName: node + linkType: hard + "randombytes@npm:^2.1.0": version: 2.1.0 resolution: "randombytes@npm:2.1.0" @@ -11550,7 +11847,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.1, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.1, readable-stream@npm:^2.2.2, readable-stream@npm:~2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: @@ -11687,6 +11984,32 @@ __metadata: languageName: node linkType: hard +"remarkable@npm:^1.7.1": + version: 1.7.4 + resolution: "remarkable@npm:1.7.4" + dependencies: + argparse: ^1.0.10 + autolinker: ~0.28.0 + bin: + remarkable: ./bin/remarkable.js + checksum: 0335dc2df9f42f25bcd724c8fb17f4dca2a1f56bc96e4a1d643c1d21cea6915b96bc9ac9e0b8788bb48409a5857f6354495d254fb416ef6e25b8d407f682cbb0 + languageName: node + linkType: hard + +"repeat-element@npm:^1.1.2": + version: 1.1.4 + resolution: "repeat-element@npm:1.1.4" + checksum: 1edd0301b7edad71808baad226f0890ba709443f03a698224c9ee4f2494c317892dc5211b2ba8cbea7194a9ddbcac01e283bd66de0467ab24ee1fc1a3711d8a9 + languageName: node + linkType: hard + +"repeat-string@npm:^1.5.2, repeat-string@npm:^1.6.1": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -12109,6 +12432,15 @@ __metadata: languageName: node linkType: hard +"set-getter@npm:^0.1.0": + version: 0.1.1 + resolution: "set-getter@npm:0.1.1" + dependencies: + to-object-path: ^0.3.0 + checksum: 04bc8ffff286d7b36a3adc675d2858db3d6768f0290dce98ca5d481d5361936f4fa1e2570833de3511424adf534fc9e48f4b420163906b0d6ca45f38074f5108 + languageName: node + linkType: hard + "setprototypeof@npm:1.1.0": version: 1.1.0 resolution: "setprototypeof@npm:1.1.0" @@ -12614,6 +12946,13 @@ __metadata: languageName: node linkType: hard +"strip-color@npm:^0.1.0": + version: 0.1.0 + resolution: "strip-color@npm:0.1.0" + checksum: d2cf582348c91f9ea9cceb53a0f712beb879f96094e8d37da12d75a1d016b44ff77cb8c1fb31cd5814936fa5e1b4a509970b23e71a50567e2264dade09a314b2 + languageName: node + linkType: hard + "strip-final-newline@npm:^2.0.0": version: 2.0.0 resolution: "strip-final-newline@npm:2.0.0" @@ -12906,6 +13245,15 @@ __metadata: languageName: node linkType: hard +"to-object-path@npm:^0.3.0": + version: 0.3.0 + resolution: "to-object-path@npm:0.3.0" + dependencies: + kind-of: ^3.0.2 + checksum: 9425effee5b43e61d720940fa2b889623f77473d459c2ce3d4a580a4405df4403eec7be6b857455908070566352f9e2417304641ed158dda6f6a365fe3e66d70 + languageName: node + linkType: hard + "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -12922,6 +13270,13 @@ __metadata: languageName: node linkType: hard +"toml@npm:^2.3.2": + version: 2.3.6 + resolution: "toml@npm:2.3.6" + checksum: e1be1ec9dad3049459d0c81e5b7b40ce8356ca5fc27d23cab101551447e22af7fe6d903d19162389ffd50cb3ff4e986374992d4c293da84166fa6307c7c1b5cf + languageName: node + linkType: hard + "touch@npm:^3.1.0": version: 3.1.0 resolution: "touch@npm:3.1.0"