diff --git a/.gitignore b/.gitignore index 09fc68c..f8db34f 100644 --- a/.gitignore +++ b/.gitignore @@ -105,3 +105,12 @@ dist # reports of jest tests reports + +# dev utils +.tsimp + +# doc utils +docs + +# semanticConventions +src/semanticConventions/**/*.ts diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..e33348c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,12 @@ +{ + "json.schemas": [ + { + "fileMatch": ["src/semanticConventions/**/*.json"], + "url": "./schemas/attribute.schema.json" + } + ], + "files.associations": { + "**/src/semanticAttributes/**/*.json": "jsonc" + }, + "typescript.tsdk": "node_modules/typescript/lib" +} diff --git a/README.md b/README.md index ef50f54..9d2e8fd 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,13 @@ counter.add(1); metrics.stop().then(() => console.log('done')); ``` + +## Semantic Conventions +#### The package's Semantic Conventions submodule defines a common set of (semantic) attributes which provide meaning to data when collecting, producing and consuming it. +Based on the [official OpenTelemetry conventions](https://opentelemetry.io/docs/specs/semconv/) + +[Link to full documentation](src/semanticConventions/README.md) + ## Configuration ### Common configuration | name |allowed value| default value | description @@ -86,3 +93,4 @@ metrics.stop().then(() => console.log('done')); Run the command `npm run release --` to bump the version in all the files and create a changelog. For more detailed documentation and examples check: https://github.com/conventional-changelog/standard-version + diff --git a/commitlint.config.js b/commitlint.config.js index 49106fd..39664e9 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,6 +1,6 @@ module.exports = { extends: ["@commitlint/config-conventional"], rules: { - "scope-enum": [2, "always", ["deps", "configurations", "tracing", "metrics"]], + "scope-enum": [2, "always", ["deps", "configurations", "tracing", "metrics", "conventions","conventions-scripts"]], }, }; diff --git a/package-lock.json b/package-lock.json index 3ed91f9..de0ffca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "prom-client": "^15.1.0" }, "devDependencies": { + "@actions/core": "^1.10.1", "@commitlint/cli": "^11.0.0", "@commitlint/config-conventional": "^11.0.0", "@map-colonies/eslint-config": "^4.0.0", @@ -30,15 +31,21 @@ "@types/express": "^4.17.12", "@types/faker": "^5.5.3", "@types/node": "^14.14.12", + "ajv": "^8.12.0", + "change-case-all": "^2.1.0", + "comment-json": "^4.2.3", "commitlint": "^11.0.0", "cz-conventional-changelog": "^3.3.0", "eslint": "^8.56.0", "husky": "^4.3.5", + "json-schema-to-typescript": "^13.1.2", + "just-safe-set": "^4.2.1", "pino": "^8.14.1", "prettier": "^2.2.1", "pretty-quick": "^3.1.0", "standard-version": "^9.0.0", "ts-node": "^9.1.1", + "tsimp": "2.0.11", "typescript": "^5.3.3" } }, @@ -51,6 +58,26 @@ "node": ">=0.10.0" } }, + "node_modules/@actions/core": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", + "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", + "dev": true, + "dependencies": { + "@actions/http-client": "^2.0.1", + "uuid": "^8.3.2" + } + }, + "node_modules/@actions/http-client": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.1.tgz", + "integrity": "sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw==", + "dev": true, + "dependencies": { + "tunnel": "^0.0.6", + "undici": "^5.25.4" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -2287,6 +2314,24 @@ "node": ">=6.9.0" } }, + "node_modules/@bcherny/json-schema-ref-parser": { + "version": "10.0.5-fork", + "resolved": "https://registry.npmjs.org/@bcherny/json-schema-ref-parser/-/json-schema-ref-parser-10.0.5-fork.tgz", + "integrity": "sha512-E/jKbPoca1tfUPj3iSbitDZTGnq6FUFjkH6L8U2oDwSuwK1WhnnVtCG7oFOTg/DDnyoXbQYUiUiGOibHqaGVnw==", + "dev": true, + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/philsturgeon" + } + }, "node_modules/@commitlint/cli": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-11.0.0.tgz", @@ -2549,6 +2594,22 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -2564,6 +2625,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -2585,6 +2652,15 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@grpc/grpc-js": { "version": "1.9.13", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.13.tgz", @@ -2786,6 +2862,111 @@ "node": ">=6.9.0" } }, + "node_modules/@isaacs/cached": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/cached/-/cached-1.0.1.tgz", + "integrity": "sha512-7kGcJ9Hc1f4qpTApWz3swxbF9Qv1NF/GxuPtXeTptbsgvJIoufSd0h854Nq/2bw80F5C1onsFgEI05l+q0e4vw==", + "dev": true, + "dependencies": { + "@isaacs/catcher": "^1.0.0" + } + }, + "node_modules/@isaacs/catcher": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@isaacs/catcher/-/catcher-1.0.4.tgz", + "integrity": "sha512-g2klMwbnguClWNnCeQ1zYaDJsvPbIbnjdJPDE0z09MqoejJDZSLK5vIKiClq2Bkg5ubuI8vaN6wfIUi5GYzMVA==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -2834,6 +3015,12 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true + }, "node_modules/@map-colonies/eslint-config": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@map-colonies/eslint-config/-/eslint-config-4.0.0.tgz", @@ -4499,6 +4686,16 @@ "@opentelemetry/api": "^1.1.0" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -4659,6 +4856,16 @@ "integrity": "sha512-uCx6mP3UY5SIO14XlspxsGjgaemrxpssJI0Ol+GfhxtcKpv9pgRZYsS4eeKeHVLje6Qtc8lGszuBI461+gVZBA==", "dev": true }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "node_modules/@types/hapi__catbox": { "version": "10.2.6", "resolved": "https://registry.npmjs.org/@types/hapi__catbox/-/hapi__catbox-10.2.6.tgz", @@ -4762,6 +4969,12 @@ "@types/koa": "*" } }, + "node_modules/@types/lodash": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", + "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", + "dev": true + }, "node_modules/@types/memcached": { "version": "2.2.10", "resolved": "https://registry.npmjs.org/@types/memcached/-/memcached-2.2.10.tgz", @@ -4835,6 +5048,12 @@ "@types/pg": "*" } }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", @@ -5307,14 +5526,14 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, "funding": { @@ -5371,6 +5590,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -5439,6 +5664,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "dev": true + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -5859,6 +6090,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -5930,6 +6167,24 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/change-case": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.3.tgz", + "integrity": "sha512-4cdyvorTy/lViZlVzw2O8/hHCLUuHqp4KpSSP3DlauhFCf3LdnfF+p5s0EAhjKsU7bqrMzu7iQArYfoPiHO2nw==", + "dev": true + }, + "node_modules/change-case-all": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-2.1.0.tgz", + "integrity": "sha512-v6b0WWWkZUMHVuYk82l+WROgkUm4qEN2w5hKRNWtEOYwWqUGoi8C6xH0l1RLF1EoWqDFK6MFclmN3od6ws3/uw==", + "dev": true, + "dependencies": { + "change-case": "^5.2.0", + "sponge-case": "^2.0.2", + "swap-case": "^3.0.2", + "title-case": "^3.0.3" + } + }, "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -5947,6 +6202,22 @@ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" }, + "node_modules/cli-color": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.4.tgz", + "integrity": "sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.64", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -6030,6 +6301,22 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/comment-json": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", + "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", + "dev": true, + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/commitizen": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", @@ -6347,9 +6634,9 @@ } }, "node_modules/conventional-changelog-core/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -6449,9 +6736,9 @@ } }, "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -6681,6 +6968,19 @@ "node": ">=4" } }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -6974,6 +7274,12 @@ "node": ">=4" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -7132,6 +7438,58 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dev": true, + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -8031,6 +8389,22 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -8074,6 +8448,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -8086,6 +8466,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -8103,6 +8498,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", @@ -8145,6 +8553,16 @@ "node": ">=0.10.0" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -8213,6 +8631,15 @@ "prom-client": ">=12.0.0" } }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "dependencies": { + "type": "^2.7.2" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -8422,19 +8849,47 @@ "is-callable": "^1.1.3" } }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/fs.realpath": { @@ -8724,9 +9179,9 @@ } }, "node_modules/git-semver-tags/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -8773,6 +9228,25 @@ "node": ">= 6" } }, + "node_modules/glob-promise": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", + "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/ahmadnassri" + }, + "peerDependencies": { + "glob": "^7.1.6" + } + }, "node_modules/global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", @@ -8943,6 +9417,15 @@ "node": ">=8" } }, + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/has-property-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", @@ -9499,6 +9982,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -9690,6 +10179,24 @@ "set-function-name": "^2.0.1" } }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/joi": { "version": "17.11.0", "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", @@ -9752,10 +10259,50 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "node_modules/json-schema-to-typescript": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-13.1.2.tgz", + "integrity": "sha512-17G+mjx4nunvOpkPvcz7fdwUwYCEwyH8vR3Ym3rFiQ8uzAL3go+c1306Kk7iGRk8HuXBXqy+JJJmpYl0cvOllw==", + "dev": true, + "dependencies": { + "@bcherny/json-schema-ref-parser": "10.0.5-fork", + "@types/json-schema": "^7.0.11", + "@types/lodash": "^4.14.182", + "@types/prettier": "^2.6.1", + "cli-color": "^2.0.2", + "get-stdin": "^8.0.0", + "glob": "^7.1.6", + "glob-promise": "^4.2.2", + "is-glob": "^4.0.3", + "lodash": "^4.17.21", + "minimist": "^1.2.6", + "mkdirp": "^1.0.4", + "mz": "^2.7.0", + "prettier": "^2.6.2" + }, + "bin": { + "json2ts": "dist/src/cli.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/json-schema-to-typescript/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { @@ -9834,6 +10381,12 @@ "node": ">=4.0" } }, + "node_modules/just-safe-set": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-safe-set/-/just-safe-set-4.2.1.tgz", + "integrity": "sha512-La5CP41Ycv52+E4g7w1sRV8XXk7Sp8a/TwWQAYQKn6RsQz1FD4Z/rDRRmqV3wJznS1MDF3YxK7BCudX1J8FxLg==", + "dev": true + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -10028,6 +10581,15 @@ "node": ">=10" } }, + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.2" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -10046,6 +10608,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } + }, "node_modules/meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", @@ -10170,6 +10748,30 @@ "node": ">= 6" } }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -10229,6 +10831,17 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -10247,6 +10860,12 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -10641,6 +11260,31 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -10801,6 +11445,15 @@ "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==", "dev": true }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/pkg-dir": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", @@ -11227,9 +11880,9 @@ } }, "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -11388,6 +12041,15 @@ "jsesc": "bin/jsesc" } }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -11396,6 +12058,15 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/require-in-the-middle": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.2.0.tgz", @@ -11737,6 +12408,102 @@ "node": ">=8" } }, + "node_modules/sock-daemon": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/sock-daemon/-/sock-daemon-1.4.2.tgz", + "integrity": "sha512-IzbegWshWWR+UzQ7487mbdYNmfJ1jXUXQBUHooqtpylO+aW0vMVbFN2d2ug3CSPZ0wbG7ZTTGwpUuthIDFIOGg==", + "dev": true, + "dependencies": { + "rimraf": "^5.0.5", + "signal-exit": "^4.1.0", + "socket-post-message": "^1.0.3" + }, + "engines": { + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" + } + }, + "node_modules/sock-daemon/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sock-daemon/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sock-daemon/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sock-daemon/node_modules/rimraf": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "dev": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sock-daemon/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/socket-post-message": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/socket-post-message/-/socket-post-message-1.0.3.tgz", + "integrity": "sha512-UhJaB3xR2oF+HvddFOq2cBZi4zVKOHvdiBo+BaScNxsEUg3TLWSP8BkweKfe07kfH1thjn1hJR0af/w1EtBFjg==", + "dev": true + }, "node_modules/sonic-boom": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz", @@ -11818,6 +12585,12 @@ "readable-stream": "^3.0.0" } }, + "node_modules/sponge-case": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sponge-case/-/sponge-case-2.0.3.tgz", + "integrity": "sha512-i4h9ZGRfxV6Xw3mpZSFOfbXjf0cQcYmssGWutgNIfFZ2VM+YIWfD71N/kjjwK6X/AAHzBr+rciEcn/L34S8TGw==", + "dev": true + }, "node_modules/standard-version": { "version": "9.5.0", "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.5.0.tgz", @@ -11983,6 +12756,27 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -12071,6 +12865,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -12136,6 +12943,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swap-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-3.0.3.tgz", + "integrity": "sha512-6p4op8wE9CQv7uDFzulI6YXUw4lD9n4oQierdbFThEKVWVQcbQcUjdP27W8XE7V4QnWmnq9jueSHceyyQnqQVA==", + "dev": true + }, "node_modules/tdigest": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", @@ -12159,6 +12972,27 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/thread-stream": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.3.0.tgz", @@ -12183,6 +13017,25 @@ "readable-stream": "3" } }, + "node_modules/timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, + "node_modules/title-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", + "integrity": "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -12301,6 +13154,108 @@ "node": ">=4" } }, + "node_modules/tsimp": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/tsimp/-/tsimp-2.0.11.tgz", + "integrity": "sha512-wRhMmvar8tWHN3ZmykD8f4B4sjCn/f8DFM67LRY+stf/LPa2Kq8ATE2PIi570/DiDJA8kjjxzos3EgP0LmnFLA==", + "dev": true, + "dependencies": { + "@isaacs/cached": "^1.0.1", + "@isaacs/catcher": "^1.0.4", + "foreground-child": "^3.1.1", + "mkdirp": "^3.0.1", + "pirates": "^4.0.6", + "rimraf": "^5.0.5", + "signal-exit": "^4.1.0", + "sock-daemon": "^1.4.2", + "walk-up-path": "^3.0.1" + }, + "bin": { + "tsimp": "dist/esm/bin.mjs" + }, + "engines": { + "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" + }, + "peerDependencies": { + "typescript": "^5.1.0" + } + }, + "node_modules/tsimp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/tsimp/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tsimp/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tsimp/node_modules/rimraf": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "dev": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tsimp/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/tslib": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", @@ -12328,6 +13283,21 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -12463,6 +13433,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici": { + "version": "5.28.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz", + "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==", + "dev": true, + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -12565,6 +13547,15 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -12575,6 +13566,12 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/walk-up-path": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", + "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", + "dev": true + }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -12711,9 +13708,9 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -12741,6 +13738,24 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index d96c0ea..705039e 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,16 @@ "version": "5.4.0", "description": "Package for everything opentelemetry related in map colonies", "main": "./dist/index.js", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "./conventions": { + "default": "./dist/semanticConventions/index.js", + "types": "./dist/semanticConventions/index.d.ts" + } + }, "scripts": { "format": "prettier --check .", "format:fix": "prettier --write .", @@ -11,11 +21,14 @@ "lint": "eslint .", "lint:fix": "eslint --fix .", "release": "standard-version", - "prebuild": "npm run clean", + "prebuild": "npm run clean && npm run validate:attributes && npm run generate:attributes", "build": "tsc --project tsconfig.build.json", "start": "npm run build && cd dist && node ./index.js", "clean": "rimraf dist", - "prepublish": "npm run build" + "validate:attributes": "node --import=tsimp/import scripts/validate-semantic-conventions.mts", + "generate:attributes": "node --import=tsimp/import scripts/build-semantic-conventions.mts", + "generate:types": "json2ts schemas/attribute.schema.json > scripts/autogen.mts", + "prepack": "npm run build" }, "repository": { "type": "git", @@ -51,6 +64,7 @@ "prom-client": "^15.1.0" }, "devDependencies": { + "@actions/core": "^1.10.1", "@commitlint/cli": "^11.0.0", "@commitlint/config-conventional": "^11.0.0", "@map-colonies/eslint-config": "^4.0.0", @@ -58,15 +72,21 @@ "@types/express": "^4.17.12", "@types/faker": "^5.5.3", "@types/node": "^14.14.12", + "ajv": "^8.12.0", + "change-case-all": "^2.1.0", + "comment-json": "^4.2.3", "commitlint": "^11.0.0", "cz-conventional-changelog": "^3.3.0", "eslint": "^8.56.0", "husky": "^4.3.5", + "json-schema-to-typescript": "^13.1.2", + "just-safe-set": "^4.2.1", "pino": "^8.14.1", "prettier": "^2.2.1", "pretty-quick": "^3.1.0", "standard-version": "^9.0.0", "ts-node": "^9.1.1", + "tsimp": "2.0.11", "typescript": "^5.3.3" } } diff --git a/schemas/attribute.schema.json b/schemas/attribute.schema.json new file mode 100644 index 0000000..896ec18 --- /dev/null +++ b/schemas/attribute.schema.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "type": "object", + "additionalProperties": false, + "title": "convention schema", + "required": ["domain", "content"], + "properties": { + "domain": { + "type": "string" + }, + "content": { + "$ref": "#/definitions/recursive" + } + }, + "definitions": { + "recursive": { + "type": "object", + "additionalProperties": false, + "title": "attribute description", + "required": ["propertyName", "description"], + "properties": { + "propertyName": { + "type": "string", + "pattern": "^mapcolonies\\.(?:[a-z0-9]+[\\._])*(?:[a-z0-9]+)$" + }, + "kind": { + "type": "string" + }, + "description": { + "type": "string" + }, + "deprecated": { + "type": "boolean" + }, + "subAttributes": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/recursive" + } + } + } + } + } +} diff --git a/scripts/autogen.mts b/scripts/autogen.mts new file mode 100644 index 0000000..ac23a94 --- /dev/null +++ b/scripts/autogen.mts @@ -0,0 +1,20 @@ +/* eslint-disable */ +/** + * This file was automatically generated by json-schema-to-typescript. + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, + * and run json-schema-to-typescript to regenerate this file. + */ + +export interface ConventionSchema { + domain: string; + content: AttributeDescription; +} +export interface AttributeDescription { + propertyName: string; + kind?: string; + description: string; + deprecated?: boolean; + subAttributes?: { + [k: string]: AttributeDescription; + }; +} diff --git a/scripts/build-semantic-conventions.mts b/scripts/build-semantic-conventions.mts new file mode 100644 index 0000000..78e37de --- /dev/null +++ b/scripts/build-semantic-conventions.mts @@ -0,0 +1,119 @@ +import { readdirSync, readFileSync, writeFileSync } from 'node:fs'; +import path from 'node:path'; +import { constantCase } from 'change-case-all'; +import set from 'just-safe-set'; +import { parse as jsoncParse } from 'comment-json'; +import type { ConventionSchema } from './autogen.mjs'; +import { getAllPropertyNames } from './util.mjs'; + +const SEMANTIC_ATTRIBUTES_DIR = path.join('src', 'semanticConventions'); +const FILE_HEADER_MARK = `/* eslint-disable */ +/** + * This file was automatically generated by @mapcolonies/telemetry npm package. + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, + * and release new compiled package to regenerate this file. + */\n\n`; + +const DEPRECATION_JS_DOCSTRING = `* @deprecated Change to new attribute if this one was replaced \n`; +const JS_COMMENT_START = `/**`; +const JS_COMMENT_END = `*/`; +const PACKAGE_INDEX_DIR = path.join('src', 'semanticConventions', 'index.ts'); +const ATTRIBUTE_FILE_SUFIX = 'GENERATED_ATTRIBUTES'; + +// read and filter all relevant static db json files per domain +const dbFiles = readdirSync(SEMANTIC_ATTRIBUTES_DIR).filter((file) => path.extname(file) === '.json'); +console.log(`Detect ${dbFiles.length} domains db files: ${dbFiles.join(',')}`); + +writeFileSync(PACKAGE_INDEX_DIR, '', { flag: 'w' }); // override and create new TS file +// Iterate each domain file in directory +for (const file of dbFiles) { + const data = readFileSync(path.join(SEMANTIC_ATTRIBUTES_DIR, file), { encoding: 'utf-8' }); + const dataJson = jsoncParse(data) as unknown as ConventionSchema; + const attributesArr = getAllPropertyNames(dataJson); + const domainDescription = dataJson.content.description; + const isDomainDeprecated = dataJson.content.deprecated; + generateTsFile(attributesArr, dataJson.domain.toUpperCase(), domainDescription, isDomainDeprecated); +} + +console.log(`Complete generating TS modules and updated index.ts exporting in `); + +/** + * This method parse and write all domain's attributes to TS generated file as flat constants and canonical object + * @param domainAttribute Array of all related names under current domain + * @param domain Array - name of the domain + * @param domainDescription Explain the responsibility of the domain + * @param isDomainDeprecated Flag indicate deprecation about the domain + */ +function generateTsFile( + domainAttribute: ReturnType, + domain: string, + domainDescription: string, + isDomainDeprecated: boolean | undefined +): void { + writeFileSync(path.join(SEMANTIC_ATTRIBUTES_DIR, `${domain}_${ATTRIBUTE_FILE_SUFIX}.ts`), FILE_HEADER_MARK); + const fullDomainObj = {}; + + for (const attribute of domainAttribute) { + const valueStr = attribute.propertyName; + const keyStr = constantCase(attribute.keyName); + + let attributeStr = `export const ${keyStr} = '${valueStr}'\n`; + const isDeprecatedStr = attribute.deprecated !== undefined && attribute.deprecated ? 'true' : 'false'; + set(fullDomainObj, attribute.keyName, [valueStr, attribute.description, isDeprecatedStr].join('@')); + const docStr = buildDocString(attribute.description, attribute.deprecated); + attributeStr = `${docStr}\n${attributeStr}\n`; + writeFileSync(path.join(SEMANTIC_ATTRIBUTES_DIR, `${domain}_${ATTRIBUTE_FILE_SUFIX}.ts`), attributeStr, { flag: 'a+' }); + } + + addToIndexFile(`${domain}_${ATTRIBUTE_FILE_SUFIX}`); + const mainDocStr = buildDocString(domainDescription, isDomainDeprecated); + + const objectWithDocs = generateDomainConventionObject(fullDomainObj); + const domainObjStr = `export const ${domain}_CONVENTIONS = ${objectWithDocs} as const\n`; + const fullDomainObjectSection = `${mainDocStr}\n${domainObjStr}`; + writeFileSync(path.join(SEMANTIC_ATTRIBUTES_DIR, `${domain}_${ATTRIBUTE_FILE_SUFIX}.ts`), fullDomainObjectSection, { flag: 'a+' }); +} + +/** + * This function generate docstring per attribute + * @param description attribute's description to be documented + * @param deprecated boolean flag that indicated if the attribute should be written with deprecation notation + * @returns String - docstring for the attribute + */ +function buildDocString(description: string, deprecated: boolean | undefined): string { + const deprecatedStr = deprecated !== undefined && deprecated ? `${DEPRECATION_JS_DOCSTRING}\n` : ''; + const docStr = `${JS_COMMENT_START}\n* ${description}\n${'* @constant'}\n${deprecatedStr}${JS_COMMENT_END}`; + return docStr; +} + +/** + * Add export declaration to new TS file in index.ts of the subdirectory + * @param fileDir + */ +function addToIndexFile(fileDir: string): void { + const exportStr = `export * from './${fileDir}'\n`; + writeFileSync(PACKAGE_INDEX_DIR, exportStr, { flag: 'a+' }); +} + +/** + * Extend domain object with related docs for each property + * @param objectWithoutDocs properties included extended property name with description & deprecation notation + * @returns original object with docstring on each propertyName + */ +function generateDomainConventionObject(objectWithoutDocs: unknown): string { + const OBJECT_PADDING_FACTOR = 2; + const objectArrayTmp = JSON.stringify(objectWithoutDocs, undefined, OBJECT_PADDING_FACTOR).split('\n'); + + for (const line of objectArrayTmp) { + if (line.includes('@')) { + const [keyValueLine, description, deprecated] = line.split('@'); + const isDeprecated = deprecated.toLowerCase().includes('true'); + const docStr = buildDocString(description, isDeprecated); + const currentIdx = objectArrayTmp.indexOf(line); + objectArrayTmp[currentIdx] = `${keyValueLine}",`; // place the propertyName to current index + objectArrayTmp.splice(currentIdx, 0, docStr); // add docs to related propertyName + } + } + const mergedObj = objectArrayTmp.join('\n'); + return mergedObj; +} diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json new file mode 100644 index 0000000..eabba7a --- /dev/null +++ b/scripts/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "esModuleInterop": true, + "strictNullChecks": true, + "skipLibCheck": true + }, +} diff --git a/scripts/util.mts b/scripts/util.mts new file mode 100644 index 0000000..fbfa7e3 --- /dev/null +++ b/scripts/util.mts @@ -0,0 +1,36 @@ +import { AttributeDescription, ConventionSchema } from './autogen.mjs'; + +type AttributeWithKeyName = AttributeDescription & { keyName: string }; + +/** + * Extract flatten array of attributes (with no subAttributes) + * @param attributeObject domain object containing all related sub attributes with their names + * @returns Array of flatten Attributes with extended key name property + */ +export function getAllPropertyNames(attributeObject: ConventionSchema): AttributeWithKeyName[] { + const attributesNameList: AttributeWithKeyName[] = []; + + const subAttributes = Object.entries(attributeObject.content.subAttributes!).map(([key, value]) => ({ + ...value, + keyName: `${attributeObject.domain}.${key}`, + })); + + // iterate till extract all flatten attributes (without subAttributes) + while (subAttributes.length > 0) { + const includedAttributes = subAttributes.pop(); + + if (!includedAttributes?.subAttributes) { + attributesNameList.push(includedAttributes!); + continue; + } + + // Add the right key value per - key based on object hierarchy. + const currentSubAttributes = Object.entries(includedAttributes.subAttributes).map(([key, value]) => ({ + ...value, + keyName: [includedAttributes.keyName, key].join('.'), + })); + subAttributes.push(...currentSubAttributes); + } + + return attributesNameList; +} diff --git a/scripts/validate-semantic-conventions.mts b/scripts/validate-semantic-conventions.mts new file mode 100644 index 0000000..f6220e4 --- /dev/null +++ b/scripts/validate-semantic-conventions.mts @@ -0,0 +1,64 @@ +import fsPromise from 'node:fs/promises'; +import { readdirSync, existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import Ajv from 'ajv'; +import { parse as jsoncParse } from 'comment-json'; +import type { ConventionSchema } from './autogen.mjs'; + +const SCHEMA_DIR = path.join('schemas', 'attribute.schema.json'); +const SEMANTIC_ATTRIBUTES_DIR = path.join('src', 'semanticConventions'); + +if (!existsSync(SCHEMA_DIR)) { + throw new Error(`Could not find the file ${SCHEMA_DIR} referenced in the error it wasn't TS or JSON`); +} + +// Load and prepare scheme validator +const schema = readFileSync(SCHEMA_DIR, { encoding: 'utf-8' }); +const ajv = new Ajv.default({ allErrors: true }); +const schemaJson = JSON.parse(schema) as object; +const validate = ajv.compile(schemaJson); + +// read and filter all relevant static db json files per domain +const dbFiles = readdirSync(SEMANTIC_ATTRIBUTES_DIR).filter((file) => path.extname(file) === '.json'); + +console.log(`Detect ${dbFiles.length} domains db files: ${dbFiles.join(',')}`); + +// load and validate each json by shred schema +await runValidationOnFiles(dbFiles); +console.log(`Successful validation pass for ${dbFiles.length} domains db files: ${dbFiles.join(',')}`); + +/** + * This method explore all domains json files and run validation against schema + * @param filesName Array of domains json files. + */ +async function runValidationOnFiles(filesName: string[]): Promise { + for (const file of filesName) { + const dbJson = await fsPromise.readFile(path.join(SEMANTIC_ATTRIBUTES_DIR, file), { encoding: 'utf-8' }); + + const data = jsoncParse(dbJson); + const isValidByScheme = validateSchema(data); + if (!isValidByScheme) { + throw new Error(`db file ${file} not supported the scheme ${SCHEMA_DIR}`); + } + } + + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + console.log(`Complete all json validation for domains db files: ${dbFiles}`); +} + +/** + * Run validation on single json domain object with loaded schema + * @param data json object of the loaded domain + * @returns boolean - false if failed validation + */ +function validateSchema(data: unknown): data is ConventionSchema { + const valid = validate(data); + if (validate.errors) { + const reducedValidationErrorObj = validate.errors.map((err) => { + return { instancePath: err.instancePath, schemaPath: err.schemaPath, message: err.message }; + }); + + console.error('Failed Scheme validation with current errors:\n', reducedValidationErrorObj); + } + return valid; +} diff --git a/src/metrics/middleware/metrics.ts b/src/metrics/middleware/metrics.ts index 40bbc19..8a028e2 100644 --- a/src/metrics/middleware/metrics.ts +++ b/src/metrics/middleware/metrics.ts @@ -1,6 +1,6 @@ import { hostname as osHostname } from 'os'; import { Registry, collectDefaultMetrics, Gauge, register } from 'prom-client'; -import * as promBundle from 'express-prom-bundle'; +import promBundle from 'express-prom-bundle'; import * as express from 'express'; import { loadPackageInfo } from '../../common/packageInfoLoader'; import { deconstructSemver } from '../../common/util'; diff --git a/src/semanticConventions/README.md b/src/semanticConventions/README.md new file mode 100644 index 0000000..783930c --- /dev/null +++ b/src/semanticConventions/README.md @@ -0,0 +1,157 @@ +# Telemetry Semantic Conventions +* This submodule's goal is to provide a flexible and easy way to allow semantic conventions to be used for telemetry purposes across all MapColonies services. +* It's based on OpenTelemetry [semantic-conventions](https://opentelemetry.io/docs/specs/semconv/). +* Each Domain defines its JSON file that describes the semantic conventions of the domain. The submodule handles the validation of the file and generates `TS` files for use in code. +* Supports Javascript & Typescript. + +> [!IMPORTANT] +> If OpenTelemetry already defines a value as part of their [semantic conventions](https://opentelemetry.io/docs/specs/semconv/), use that and do not define a new one. + +> [!IMPORTANT] +> Attributes should follow the Open Telemetry [semantic-convention naming concept](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/messaging/messaging-spans.md#message) + +## USAGE + +1. Install the package using the following command: + +```bash +npm i @map-colonies/telemetry + ``` + +2. Import the package and then use the conventions as needed. + ```typescript +import { SCOTTISH_CONVENTIONS, SCOTTISH_FOLD } from '@map-colonies/telemetry/conventions'; + +console.log(SCOTTISH_CONVENTIONS.scottish.straight.David) +console.log(SCOTTISH_FOLD) // This will be marked with strikethrough because it's marked as deprecated +``` + +> [!IMPORTANT] +> If you get any errors of missing type definitions while using the package, or you are unable to import the submodule `conventions`, you should make sure both the `module` and `moduleResolution` options of your `tsconfig` / `jsconfig` are set to `NodeNext`. [For more information](https://www.typescriptlang.org/tsconfig#moduleResolution). + +## Domain creation +Below is a short example creating of a new semantic attribute domain by creating the `domain.json` file and generating its attributes. + + +1. Create a new file in the `semanticConventions` directory (The file must be a `JSON` file). +```json +{ + "domain": "scottish", + "content": { + "propertyName": "mapcolonies.scottish", + "kind": "clan", + "description": "name of the clan 😺", + "deprecated": false, + "subAttributes": { + "straight": { + "propertyName": "mapcolonies.scottish.straight", + "kind": "straightAttributes", + "description": "attributes related to straights 🙀", + "deprecated": false, + "subAttributes": { + "Jimmy": { + "propertyName": "mapcolonies.scottish.straight.jimmy", + "deprecated": false, + "description": "Jimmy the scottish straight cat 😾" + }, + "David": { + "propertyName": "mapcolonies.scottish.straight.david", + "deprecated": false, + "description": "David the scottish straight cat 😻" + } + } + }, + "fold": { + "propertyName": "mapcolonies.scottish.fold", + "kind": "straightAttributes", + "description": "attributes related to fold 😿", + "deprecated": true + } + } + } + } +``` + +2. Run the validations to make sure the created file is valid. + +```bash +npm run validate:attributes +``` + +3. Run attributes generation to create new ts modules for all defined domain.json files. + +```bash +npm run generate:attributes +``` + +4. Check the created TypeScript files to make sure they are as you intended. +They should look like this: +```typescript +/* eslint-disable */ +/** + * This file was automatically generated by @mapcolonies/telemetry npm package. + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, + * and release new compiled package to regenerate this file. + */ + +/** +* attributes related to fold 😿 +* @constant +* @deprecated Change to new attribute if this one was replaced + +*/ +export const SCOTTISH_FOLD = 'mapcolonies.scottish.fold'; + +/** + * David the scottish straight cat 😻 + * @constant + */ +export const SCOTTISH_STRAIGHT_DAVID = 'mapcolonies.scottish.straight.david'; + +/** + * Jimmy the scottish straight cat 😾 + * @constant + */ +export const SCOTTISH_STRAIGHT_JIMMY = 'mapcolonies.scottish.straight.jimmy'; + +/** + * name of the clan 😺 + * @constant + */ +export const SCOTTISH_CONVENTIONS = { + scottish: { + /** + * attributes related to fold 😿 + * @constant + * @deprecated Change to new attribute if this one was replaced + */ + fold: 'mapcolonies.scottish.fold', + straight: { + /** + * David the scottish straight cat 😻 + * @constant + */ + David: 'mapcolonies.scottish.straight.david', + /** + * Jimmy the scottish straight cat 😾 + * @constant + */ + Jimmy: 'mapcolonies.scottish.straight.jimmy', + }, + }, +} as const; +``` + +## Development + +The Schema used to validate the JSON files and to create the TypeScript types for the script usage is defined and managed inside the repo - `schemas/attribute.schema.json`. + +The schema files have autocomplete support in VsCode. To change the schema and file associations check the `.vscode/settings.json`. +> [!IMPORTANT] +> After making any changes to a schema, you MUST re-generate its types using the following command: +> ```bash +> npm run generate:types +> ``` + +All the semantic convention scripts run before the build process of the package, as their only output is TypeScript files that are transpiled as part of the larger build process into javascript. + diff --git a/src/semanticConventions/infra.json b/src/semanticConventions/infra.json new file mode 100644 index 0000000..7ce12db --- /dev/null +++ b/src/semanticConventions/infra.json @@ -0,0 +1,45 @@ +{ + "domain": "infra", + "content": { + // TODO - ADD ALL RELEVANT INFRA-CROSSING SERVICES + "propertyName": "mapcolonies.infra", + "kind": "domain", + "description": "name of the domain in use", + "deprecated": false, + "subAttributes": { + "jobManagement": { + "propertyName": "mapcolonies.infra.job_management", + "kind": "jobManagerAttributes", + "description": "attributes related to job management services", + "deprecated": false, + "subAttributes": { + "jobId": { + "propertyName": "mapcolonies.infra.job_management.job_id", + "deprecated": false, + "description": "Type of task as stored on db (uuid)" + }, + "taskId": { + "propertyName": "mapcolonies.infra.job_management.task_id", + "deprecated": false, + "description": "Type of task as stored on db (uuid)" + }, + "jobType": { + "propertyName": "mapcolonies.infra.job_management.job_type", + "deprecated": false, + "description": "Type of job as stored on db (uuid)" + }, + "taskType": { + "propertyName": "mapcolonies.infra.job_management.task_type", + "deprecated": false, + "description": "Type of task as stored on db (uuid)" + }, + "serviceUrl": { + "propertyName": "mapcolonies.infra.job_management.service_url", + "deprecated": false, + "description": "API url of job management service" + } + } + } + } + } +} diff --git a/src/semanticConventions/raster.json b/src/semanticConventions/raster.json new file mode 100644 index 0000000..34620b3 --- /dev/null +++ b/src/semanticConventions/raster.json @@ -0,0 +1,70 @@ +{ + "domain": "raster", + "content": { + "propertyName": "mapcolonies.raster", + "kind": "domain", + "description": "name of the domain in use", + "deprecated": false, + "subAttributes": { + "catalogManager": { + "propertyName": "mapcolonies.raster.catalog_manager", + "kind": "catalogManagerAttributes", + "description": "attributes related to raster catalog manager API service", + "deprecated": false, + "subAttributes": { + "catalogId": { + "propertyName": "mapcolonies.raster.catalog_manager.catalog_id", + "deprecated": false, + "description": "layer Id as stored on raster catalog db" + } + } + }, + "cacheSeeder": { + "propertyName": "mapcolonies.raster.cache_seeder", + "kind": "cacheSeederAttributes", + "description": "attributes related to raster cacheSeeder worker service", + "deprecated": false, + "subAttributes": { + "seedMode": { + "propertyName": "mapcolonies.raster.cache_seeder.seed_mode", + "deprecated": false, + "description": "Mapproxy seed mode - seed or clean tiles" + }, + "grids": { + "propertyName": "mapcolonies.raster.cache_seeder.grids", + "deprecated": false, + "description": "Grids for seeding process" + }, + "refreshBefore": { + "propertyName": "mapcolonies.raster.cache_seeder.refresh_before", + "deprecated": false, + "description": "Time factor to running mapproxy-seed" + }, + "seedYamlPath": { + "propertyName": "mapcolonies.raster.cache_seeder.seed_yaml_path", + "deprecated": false, + "description": "Path of seed.yaml" + } + } + }, + "mapproxyApi": { + "propertyName": "mapcolonies.raster.mapproxy_api", + "kind": "mapproxyApiAttributes", + "description": "attributes related to mapproxy API service", + "deprecated": false, + "subAttributes": { + "cacheName": { + "propertyName": "mapcolonies.raster.mapproxy_api.cache_name", + "deprecated": false, + "description": "This represent the layer cache name stored in mapproxy config" + }, + "mapproxyYamlPath": { + "propertyName": "mapcolonies.raster.mapproxy_api.mapproxy_yaml_path", + "deprecated": false, + "description": "This represent the location of mapproxy yaml configuration file" + } + } + } + } + } +} diff --git a/tsconfig.json b/tsconfig.json index fe5c06f..29ea67e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,15 +2,20 @@ "compilerOptions": { "target": "ES2022", "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + "lib": ["ESNext"], "strict": true, - "module": "commonjs", + "module": "NodeNext", + "moduleResolution": "NodeNext", "resolveJsonModule": true, "outDir": "dist", "sourceMap": true, "declaration": true, "declarationMap": true, - "noEmit": true + "noEmit": true, + "esModuleInterop": true, + "strictNullChecks": true, }, - "include": ["src"], - "exclude": ["dist", "node_modules"] + "include": ["src", "scripts"], + "exclude": ["dist", "node_modules"], }