diff --git a/.github/workflows/test-vale-styles.yml b/.github/workflows/test-vale-styles.yml index 568e5ad..bea8a73 100644 --- a/.github/workflows/test-vale-styles.yml +++ b/.github/workflows/test-vale-styles.yml @@ -9,6 +9,14 @@ jobs: npm-test: runs-on: ubuntu-latest steps: + - name: install asciidoctor + run: | + sudo apt-get install -y asciidoctor + + - name: install vale + run: | + sudo snap install vale + - name: checkout repo uses: actions/checkout@v4 @@ -16,8 +24,23 @@ jobs: with: node-version: 22 + - name: diagnose Vale + working-directory: ./ValeStyles + run: | + vale -v + vale ls-dirs + vale ls-config + vale ls-vars + - name: npm test working-directory: ./ValeStyles run: | npm ci npm test + + - name: Upload Vale HTML test + uses: actions/upload-artifact@v4 + with: + name: Vale HTML test results + path: ValeStyles/test/adoc/styles.html + if-no-files-found: error diff --git a/ValeStyles/.gitignore b/ValeStyles/.gitignore new file mode 100644 index 0000000..890051f --- /dev/null +++ b/ValeStyles/.gitignore @@ -0,0 +1 @@ +**/*.actual diff --git a/ValeStyles/.vale.ini b/ValeStyles/.vale.ini new file mode 100644 index 0000000..80279fb --- /dev/null +++ b/ValeStyles/.vale.ini @@ -0,0 +1,32 @@ +StylesPath = "." +MinAlertLevel = suggestion + +Vocab = Couchbase + +[asciidoctor] +description = YES +docname = YES +doctitle = YES +doctype = YES +docfile = YES +example-caption = YES +figure-caption = YES +important-caption = YES +listing-caption = YES +note-caption = YES +outfile = YES +part-signifier = YES +preface-title = YES +table-caption = YES +tip-caption = YES +toc-title = YES +warning-caption = YES + +experimental = YES + +attribute-missing = drop + +[*.{adoc,md,txt}] +BasedOnStyles = Vale, write-good, proselint, Couchbase, Google + +Vale.Spelling = NO diff --git a/ValeStyles/Couchbase/Button.yml b/ValeStyles/Couchbase/Button.yml index b7a3f58..dc1ea51 100644 --- a/ValeStyles/Couchbase/Button.yml +++ b/ValeStyles/Couchbase/Button.yml @@ -2,6 +2,7 @@ extends: existence message: "Do not refer to a UI element with the word 'button', as in 'Click the Edit button'. Make sure to use the button macro (btn:[])." level: error link: https://docs.couchbase.com/styleguide/button-macro.html +scope: raw tokens: - - '(?i)\bclick the(?: \*?[\w-]+\*?)* button\b' \ No newline at end of file + - '(?i)\bclick the \*?[\w -]+\*? button\b' diff --git a/ValeStyles/Couchbase/ButtonMacro.yml b/ValeStyles/Couchbase/ButtonMacro.yml index f1a1756..5a82450 100644 --- a/ValeStyles/Couchbase/ButtonMacro.yml +++ b/ValeStyles/Couchbase/ButtonMacro.yml @@ -3,6 +3,7 @@ message: Did you follow the guidelines for the button macro? link: https://docs.couchbase.com/styleguide/button-macro.html nonword: true level: suggestion +scope: raw tokens: - btn\:\[.+\] \ No newline at end of file diff --git a/ValeStyles/Couchbase/Contractions.yml b/ValeStyles/Couchbase/Contractions.yml index 234b303..1a9693b 100644 --- a/ValeStyles/Couchbase/Contractions.yml +++ b/ValeStyles/Couchbase/Contractions.yml @@ -10,7 +10,6 @@ swap: how is: how's that is: that's they are: they're - we are: we're what is: what's where is: where's who is: who's diff --git a/ValeStyles/Couchbase/Dialogs.yml b/ValeStyles/Couchbase/Dialogs.yml index d7725bc..889b1cf 100644 --- a/ValeStyles/Couchbase/Dialogs.yml +++ b/ValeStyles/Couchbase/Dialogs.yml @@ -2,9 +2,9 @@ extends: existence message: Don't bold or capitalize the word "dialog". link: https://docs.couchbase.com/styleguide/dialogs.html level: error -nonword: true scope: raw +nonword: true tokens: - - '\*.+[Dd]ialog\*' - - '\*.+\*\sDialog' \ No newline at end of file + - '\*[^*]*[Dd]ialog[^*]*\*' + - '\bDialog\b' \ No newline at end of file diff --git a/ValeStyles/Couchbase/DirectionalLanguage.yml b/ValeStyles/Couchbase/DirectionalLanguage.yml index 100d2c9..650c136 100644 --- a/ValeStyles/Couchbase/DirectionalLanguage.yml +++ b/ValeStyles/Couchbase/DirectionalLanguage.yml @@ -2,6 +2,7 @@ extends: existence message: Avoid directional language like '%s'. level: warning link: https://docs.couchbase.com/styleguide/directional-language.html +ignorecase: true tokens: - left diff --git a/ValeStyles/Couchbase/Dropdown.yml b/ValeStyles/Couchbase/Dropdown.yml index f09b2a6..da43106 100644 --- a/ValeStyles/Couchbase/Dropdown.yml +++ b/ValeStyles/Couchbase/Dropdown.yml @@ -5,5 +5,6 @@ level: error tokens: - dropdown - drop down + - drop-down - dropdowns - - drop downs \ No newline at end of file + - drop downs diff --git a/ValeStyles/Couchbase/Italics.yml b/ValeStyles/Couchbase/Italics.yml index d2b806b..9f264f1 100644 --- a/ValeStyles/Couchbase/Italics.yml +++ b/ValeStyles/Couchbase/Italics.yml @@ -1,9 +1,10 @@ extends: existence message: Don't use italics. Find another way to add emphasis. -level: error link: https://docs.couchbase.com/styleguide/italic.html -scope: - - raw +scope: raw +nonword: true +level: error + tokens: - '(?=16", + "npm": ">=8.0.0" + }, + "peerDependencies": { + "@asciidoctor/core": ">=2 <4" + } + }, + "node_modules/@asciidoctor/cli/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@asciidoctor/cli/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/@asciidoctor/cli/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==", + "license": "MIT" + }, + "node_modules/@asciidoctor/cli/node_modules/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==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@asciidoctor/cli/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@asciidoctor/cli/node_modules/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==", + "license": "MIT", + "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/@asciidoctor/cli/node_modules/yargs": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", + "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@asciidoctor/core": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@asciidoctor/core/-/core-3.0.4.tgz", + "integrity": "sha512-41SDMi7iRRBViPe0L6VWFTe55bv6HEOJeRqMj5+E5wB1YPdUPuTucL4UAESPZM6OWmn4t/5qM5LusXomFUVwVQ==", + "license": "MIT", + "dependencies": { + "@asciidoctor/opal-runtime": "3.0.1", + "unxhr": "1.2.0" + }, + "engines": { + "node": ">=16", + "npm": ">=8" + } + }, + "node_modules/@asciidoctor/opal-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@asciidoctor/opal-runtime/-/opal-runtime-3.0.1.tgz", + "integrity": "sha512-iW7ACahOG0zZft4A/4CqDcc7JX+fWRNjV5tFAVkNCzwZD+EnFolPaUOPYt8jzadc0+Bgd80cQTtRMQnaaV1kkg==", + "license": "MIT", + "dependencies": { + "glob": "8.1.0", + "unxhr": "1.2.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@asciidoctor/opal-runtime/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@asciidoctor/opal-runtime/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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, + "license": "ISC", + "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/@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, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", + "license": "MIT" + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/asciidoctor": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/asciidoctor/-/asciidoctor-3.0.4.tgz", + "integrity": "sha512-hIc0Bx73wePxtic+vWBHOIgMfKSNiCmRz7BBfkyykXATrw20YGd5a3CozCHvqEPH+Wxp5qKD4aBsgtokez8nEA==", + "license": "MIT", + "dependencies": { + "@asciidoctor/cli": "4.0.0", + "@asciidoctor/core": "3.0.4", + "ejs": "^3.1.2", + "handlebars": "^4.7.6", + "nunjucks": "^3.2.1", + "pug": "^3.0.0" + }, + "bin": { + "asciidoctor": "bin/asciidoctor", + "asciidoctorjs": "bin/asciidoctor" + }, + "engines": { + "node": ">=16", + "npm": ">=8" + } + }, + "node_modules/asciidoctor/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/asciidoctor/node_modules/nunjucks": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", + "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", + "license": "BSD-2-Clause", + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "bin": { + "nunjucks-precompile": "bin/precompile" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "chokidar": "^3.3.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/asciidoctor/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/assert-never": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", + "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", + "license": "MIT" + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "license": "MIT", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/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, + "license": "MIT" + }, + "node_modules/cliui/node_modules/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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/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, + "license": "MIT", + "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/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.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, + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "license": "MIT", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mocha": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.6.0.tgz", + "integrity": "sha512-i0JVb+OUBqw63X/1pC3jCyJsqYisgxySBbsQa8TKvefpA1oEnw7JXxXnftfMHRsw7bEEVGRtVlHcDYXBa7FzVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^9.2.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "license": "MIT", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/pug": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", + "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==", + "license": "MIT", + "dependencies": { + "pug-code-gen": "^3.0.3", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz", + "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==", + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", + "license": "MIT" + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "license": "MIT", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "license": "MIT" + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "license": "MIT", + "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/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, + "license": "MIT", + "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/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", + "license": "MIT" + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unxhr": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unxhr/-/unxhr-1.2.0.tgz", + "integrity": "sha512-6cGpm8NFXPD9QbSNx0cD2giy7teZ6xOkCUH3U89WKVkL9N9rBrWjlCwhR94Re18ZlAop4MOc3WU1M3Hv/bgpIw==", + "license": "MIT", + "engines": { + "node": ">=8.11" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT" + }, + "node_modules/workerpool": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.2.tgz", + "integrity": "sha512-Xz4Nm9c+LiBHhDR5bDLnNzmj6+5F+cyEAWPMkbs2awq/dYazR/efelZzUAjB/y3kNHL+uzkHvxVVpaOfGCPV7A==", + "dev": true, + "license": "Apache-2.0" + }, + "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, + "license": "MIT", + "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/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, + "license": "MIT", + "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/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-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, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/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, + "license": "MIT" + }, + "node_modules/yargs/node_modules/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, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/ValeStyles/package.json b/ValeStyles/package.json new file mode 100644 index 0000000..a7c40b1 --- /dev/null +++ b/ValeStyles/package.json @@ -0,0 +1,29 @@ +{ + "name": "valestyles", + "version": "1.0.0", + "description": "Vale styles for Couchbase", + "directories": { + "test": "test" + }, + "scripts": { + "test": "mocha", + "accept": "test/accept" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/couchbaselabs/docs-style-guide.git" + }, + "author": "Couchbase", + "license": "ISC", + "bugs": { + "url": "https://github.com/couchbaselabs/docs-style-guide/issues" + }, + "homepage": "https://github.com/couchbaselabs/docs-style-guide#readme", + "devDependencies": { + "mocha": "^11.6.0" + }, + "dependencies": { + "asciidoctor": "^3.0.4", + "lodash": "^4.17.21" + } +} diff --git a/ValeStyles/test/accept b/ValeStyles/test/accept new file mode 100755 index 0000000..47312b6 --- /dev/null +++ b/ValeStyles/test/accept @@ -0,0 +1,8 @@ +#!/bin/bash + +set -exu -o pipefail + +for actual in test/fixtures/*.actual +do + cp $actual ${actual%.actual}.expected +done diff --git a/ValeStyles/test/adoc/Test-Couchbase.An.yml b/ValeStyles/test/adoc/Test-Couchbase.An.yml new file mode 100644 index 0000000..e13ddb1 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.An.yml @@ -0,0 +1,12 @@ +flag: + - This is a example of incorrect usage. + - She wrote a email to the team. + - He found a unusual error in the logs. + - The system needs a update before release. + - Submit a application. +compliant: + - This is an example of correct usage. + - She wrote an email to the team. + - He found an unusual error in the logs. + - The system needs an update before release. + - Submit an application. diff --git a/ValeStyles/test/adoc/Test-Couchbase.App.yml b/ValeStyles/test/adoc/Test-Couchbase.App.yml new file mode 100644 index 0000000..66866b4 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.App.yml @@ -0,0 +1,12 @@ +flag: + - Open the app to continue. + - The app crashed unexpectedly. + - She downloaded the app from the webpage. + - He deleted the app by mistake. + - You can update the app manually or automatically. +compliant: + - Open the application to continue. + - The application crashed unexpectedly. + - She downloaded the application from the webpage. + - He deleted the application by mistake. + - You can update the application manually or automatically. diff --git a/ValeStyles/test/adoc/Test-Couchbase.Bold.yml b/ValeStyles/test/adoc/Test-Couchbase.Bold.yml new file mode 100644 index 0000000..e073580 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Bold.yml @@ -0,0 +1,8 @@ +flag: + - This is *bold* text using asterisks. + - Click the *Save* button. + - Use *important* for emphasis. +compliant: + - This is normal text. + - Click btn:[Save]. + - Use `important` for emphasis. diff --git a/ValeStyles/test/adoc/Test-Couchbase.Button.yml b/ValeStyles/test/adoc/Test-Couchbase.Button.yml new file mode 100644 index 0000000..e2755a7 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Button.yml @@ -0,0 +1,7 @@ +flag: + - click the cancel button + - click the *cancel* button + - click the Stay Alert button + - click the *Stay Alert* button +compliant: + - click btn:[Cancel] diff --git a/ValeStyles/test/adoc/Test-Couchbase.ButtonMacro.yml b/ValeStyles/test/adoc/Test-Couchbase.ButtonMacro.yml new file mode 100644 index 0000000..d0ca9b2 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.ButtonMacro.yml @@ -0,0 +1,4 @@ +flag: + - Click the btn:[Save] button to continue. + - Press the btn:[Cancel] button to exit. + - Select the btn:[Submit] button to proceed. \ No newline at end of file diff --git a/ValeStyles/test/adoc/Test-Couchbase.Checkbox.yml b/ValeStyles/test/adoc/Test-Couchbase.Checkbox.yml new file mode 100644 index 0000000..0ea818c --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Checkbox.yml @@ -0,0 +1,7 @@ +flag: + - Select the checkbox to agree. + - Tick the OK check box if you accept. + - Click the checkboxes to select your options. +compliant: + - To accept the terms, click *OK*. + - To continue, select *I agree*. diff --git a/ValeStyles/test/adoc/Test-Couchbase.CodeCallouts.yml b/ValeStyles/test/adoc/Test-Couchbase.CodeCallouts.yml new file mode 100644 index 0000000..5df2308 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.CodeCallouts.yml @@ -0,0 +1,20 @@ +flag: + - adoc: | + [source,java + -- + public class Example { // <1> + ... + } + -- + <1> This is a code callout. + +compliant: + - adoc: | + First, declare the `Example` class: + + [source,java] + -- + public class Example { + ... + } + -- diff --git a/ValeStyles/test/adoc/Test-Couchbase.ComplexContractions.yml b/ValeStyles/test/adoc/Test-Couchbase.ComplexContractions.yml new file mode 100644 index 0000000..8bfce0e --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.ComplexContractions.yml @@ -0,0 +1,8 @@ +flag: + - What'll become of the database? + - You must've missed the deadline. + - They would've liked to help you. +compliant: + - You shouldn't click btn:[Cancel]. + - The service displays a warning if it can't failover. + - Couchbase won't develop this anymore. diff --git a/ValeStyles/test/adoc/Test-Couchbase.Contractions.yml b/ValeStyles/test/adoc/Test-Couchbase.Contractions.yml new file mode 100644 index 0000000..456d9e9 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Contractions.yml @@ -0,0 +1,22 @@ +flag: + - It is important to follow the guidelines. + - How is this feature used? + - That is not supported. + - They are working on the fix. + - What is the status? + - Where is the documentation? + - Who is responsible for this? + - You are required to sign in. + - You had better check the logs. + - You will need to update your client. +compliant: + - It's important to follow the guidelines. + - How's this feature used? + - That's not supported. + - They're working on the fix. + - What's the status? + - Where's the documentation? + - Who's responsible for this? + - You're required to sign in. + - You'd better check the logs. + - You'll need to update your client. diff --git a/ValeStyles/test/adoc/Test-Couchbase.CouchbaseAutoOp.yml b/ValeStyles/test/adoc/Test-Couchbase.CouchbaseAutoOp.yml new file mode 100644 index 0000000..7c1e85d --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.CouchbaseAutoOp.yml @@ -0,0 +1,7 @@ +todo: We don't understand how the Vale conditional test works. +flag: + - The Operator manages the cluster. + - Upgrade the Operator to the latest version. + - The Operator supports rolling upgrades. We call it the Couchbase Autonomous Operator. +compliant: + - Couchbase Autonomous Operator does everything. For example, the Operator manages the cluster. diff --git a/ValeStyles/test/adoc/Test-Couchbase.CouchbaseServerComm.yml b/ValeStyles/test/adoc/Test-Couchbase.CouchbaseServerComm.yml new file mode 100644 index 0000000..d9376e4 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.CouchbaseServerComm.yml @@ -0,0 +1,7 @@ +todo: We don't understand how the Vale conditional test works. +flag: + - You can download Community Edition from our website. + - The Community Edition is free to use. +compliant: + - You can download Couchbase Server Community Edition from our website. + - The Couchbase Server Community Edition is free to use. diff --git a/ValeStyles/test/adoc/Test-Couchbase.DatePicker.yml b/ValeStyles/test/adoc/Test-Couchbase.DatePicker.yml new file mode 100644 index 0000000..db36318 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.DatePicker.yml @@ -0,0 +1,6 @@ +flag: + - Select the Date Picker. + - Click the *date picker* field. +compliant: + - Select the date picker. + - To choose a date range, click the date picker. diff --git a/ValeStyles/test/adoc/Test-Couchbase.DialogOpens.yml b/ValeStyles/test/adoc/Test-Couchbase.DialogOpens.yml new file mode 100644 index 0000000..3da6043 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.DialogOpens.yml @@ -0,0 +1,6 @@ +flag: + - The *Add Page* dialog opens. + - Suddenly the Shopkeeper appears. + - Click *Add Page*. The *Add Page* dialog appears. +compliant: + - Click *Add Page*. Then, in the *Page Name* field, enter a page name. diff --git a/ValeStyles/test/adoc/Test-Couchbase.Dialogs.yml b/ValeStyles/test/adoc/Test-Couchbase.Dialogs.yml new file mode 100644 index 0000000..476c6e3 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Dialogs.yml @@ -0,0 +1,7 @@ +flag: + - Use the Dialog. + - Click *OK* in the *dialog* to continue. + - Capella displays the *dialog box*. +compliant: + - In the confirmation dialog, click *OK* to continue. + - Capella displays a confirmation dialog. diff --git a/ValeStyles/test/adoc/Test-Couchbase.DirectionalLanguage.yml b/ValeStyles/test/adoc/Test-Couchbase.DirectionalLanguage.yml new file mode 100644 index 0000000..6adc121 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.DirectionalLanguage.yml @@ -0,0 +1,12 @@ +flag: + - Click the button on the left. + - Scroll down to see more options. + - The settings are below the menu. + - Move up to the previous section. + - The icon is above the text. +compliant: + - Click btn:[Next]. + - Scroll to see more options. + - To view more options, open the menu. + - Return to the previous section. + - Locate the *X* icon. diff --git a/ValeStyles/test/adoc/Test-Couchbase.Dropdown.yml b/ValeStyles/test/adoc/Test-Couchbase.Dropdown.yml new file mode 100644 index 0000000..30b0a84 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Dropdown.yml @@ -0,0 +1,6 @@ +flag: + - Select the drop-down to choose an option. + - Click the dropdown menu. + - Open the dropdowns list. +compliant: + - In the *Tools* list, select your tools. diff --git a/ValeStyles/test/adoc/Test-Couchbase.FancyQuotes.yml b/ValeStyles/test/adoc/Test-Couchbase.FancyQuotes.yml new file mode 100644 index 0000000..63ca671 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.FancyQuotes.yml @@ -0,0 +1,10 @@ +flag: + - He said, “This is a test.” + - She replied, ‘Indeed it is.’ + - The document uses “smart quotes” throughout. +compliant: + - adoc: | + [source,json] + -- + "key": "value" + -- diff --git a/ValeStyles/test/adoc/Test-Couchbase.HeadingFormatting.yml b/ValeStyles/test/adoc/Test-Couchbase.HeadingFormatting.yml new file mode 100644 index 0000000..d5d101b --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.HeadingFormatting.yml @@ -0,0 +1,5 @@ +flag: + - = *Bolded* Heading + - == *Italicized* Heading +compliant: + - = Non-Formatted Heading diff --git a/ValeStyles/test/adoc/Test-Couchbase.Headings.yml b/ValeStyles/test/adoc/Test-Couchbase.Headings.yml new file mode 100644 index 0000000..a89288b --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Headings.yml @@ -0,0 +1,6 @@ +flag: + - adoc: = introduction + - adoc: == This does not use title case +compliant: + - adoc: = Introduction + - adoc: == Heading in Title Case diff --git a/ValeStyles/test/adoc/Test-Couchbase.Italics.yml b/ValeStyles/test/adoc/Test-Couchbase.Italics.yml new file mode 100644 index 0000000..c73f542 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Italics.yml @@ -0,0 +1,7 @@ +flag: + - This is _italic_ text using underscores. + - Please click the _Save_ button. + - Use _important_ for emphasis. +compliant: + - This is normal text. + - Click btn:[Save]. diff --git a/ValeStyles/test/adoc/Test-Couchbase.LessFewer.yml b/ValeStyles/test/adoc/Test-Couchbase.LessFewer.yml new file mode 100644 index 0000000..d1f6573 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.LessFewer.yml @@ -0,0 +1,10 @@ +flag: + - There are less errors in this version. + - You need less people on the project. + - She has less tasks to complete. + - The server has less connections now. +compliant: + - There are fewer errors in this version. + - You need fewer people on the project. + - She has fewer tasks to complete. + - The server has fewer connections now. diff --git a/ValeStyles/test/adoc/Test-Couchbase.Link.yml b/ValeStyles/test/adoc/Test-Couchbase.Link.yml new file mode 100644 index 0000000..ed2d42e --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Link.yml @@ -0,0 +1,4 @@ +flag: + - Click the *Learn More* link. +compliant: + - Click *Learn More*. diff --git a/ValeStyles/test/adoc/Test-Couchbase.Monospace.yml b/ValeStyles/test/adoc/Test-Couchbase.Monospace.yml new file mode 100644 index 0000000..b9906e0 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Monospace.yml @@ -0,0 +1,4 @@ +flag: + - This is `monospace` text. +compliant: + - No monospace here. diff --git a/ValeStyles/test/adoc/Test-Couchbase.NegativeContractions.yml b/ValeStyles/test/adoc/Test-Couchbase.NegativeContractions.yml new file mode 100644 index 0000000..27d0784 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.NegativeContractions.yml @@ -0,0 +1,12 @@ +flag: + - You can't access this feature. + - They don't have permission. + - Couchbase won't support this version. + - She isn't available right now. + - He hasn't finished the task. +compliant: + - You cannot access this feature. + - They do not have permission. + - Couchbase will not support this version. + - She is not available right now. + - He has not finished the task. diff --git a/ValeStyles/test/adoc/Test-Couchbase.NoteThat.yml b/ValeStyles/test/adoc/Test-Couchbase.NoteThat.yml new file mode 100644 index 0000000..8dbcef5 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.NoteThat.yml @@ -0,0 +1,8 @@ +flag: + - Note that you must restart the server. + - Note that this feature is experimental. + - Note that backups are not automatic. +compliant: + - You must restart the server. + - This feature is experimental. + - adoc: "NOTE: Backups are not automatic." diff --git a/ValeStyles/test/adoc/Test-Couchbase.Numbers.yml b/ValeStyles/test/adoc/Test-Couchbase.Numbers.yml new file mode 100644 index 0000000..c873475 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Numbers.yml @@ -0,0 +1,8 @@ +flag: + - one fish + - two fish +compliant: + - red fish + - blue fish + - 1 fish + - 2 fish diff --git a/ValeStyles/test/adoc/Test-Couchbase.Please.yml b/ValeStyles/test/adoc/Test-Couchbase.Please.yml new file mode 100644 index 0000000..0c623a1 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Please.yml @@ -0,0 +1,8 @@ +flag: + - Please refer to the documentation for more information. + - Please ensure you have saved your work. + - Please contact support if you need help. +compliant: + - For more information, see the documentation. + - Make sure you have saved your work. + - Contact support if you need help. diff --git a/ValeStyles/test/adoc/Test-Couchbase.Quotations.yml b/ValeStyles/test/adoc/Test-Couchbase.Quotations.yml new file mode 100644 index 0000000..a6dc733 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Quotations.yml @@ -0,0 +1,8 @@ +flag: + - The term "bucket" refers to a data container. + - He clicked the "Save" button. + - Select the "Settings" option from the menu. +compliant: + - The term `bucket` refers to a data container. + - He clicked btn:[Save]. + - Click *Settings* from the menu. diff --git a/ValeStyles/test/adoc/Test-Couchbase.ReadingLevel.yml b/ValeStyles/test/adoc/Test-Couchbase.ReadingLevel.yml new file mode 100644 index 0000000..4d4e772 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.ReadingLevel.yml @@ -0,0 +1,9 @@ +todo: This needs some work. +flag: + - | + Utilizing multifaceted methodologies, the system orchestrates a plethora of + functionalities to facilitate seamless interoperability among disparate + modules. +compliant: + - The system uses many methods to help different modules work together. + - This change means you need to review how things work. diff --git a/ValeStyles/test/adoc/Test-Couchbase.ReferTo.yml b/ValeStyles/test/adoc/Test-Couchbase.ReferTo.yml new file mode 100644 index 0000000..ed19d2e --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.ReferTo.yml @@ -0,0 +1,5 @@ +flag: + - For more details, see <> + - Refer to <> +compliant: + - For more information, see <> diff --git a/ValeStyles/test/adoc/Test-Couchbase.RepeatedSpace.yml b/ValeStyles/test/adoc/Test-Couchbase.RepeatedSpace.yml new file mode 100644 index 0000000..a3ad1fa --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.RepeatedSpace.yml @@ -0,0 +1,6 @@ +flag: + - There are multiple spaces here. + - Check for a single repeated space. +compliant: + - This sentence has one space between words. + - Sentences with {attributes} should not be flagged. diff --git a/ValeStyles/test/adoc/Test-Couchbase.RunOn.yml b/ValeStyles/test/adoc/Test-Couchbase.RunOn.yml new file mode 100644 index 0000000..f70efbd --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.RunOn.yml @@ -0,0 +1,4 @@ +flag: + - This could be a run on sentence, because it has many commas, so confuses people, don't you think? +compliant: + - Sentences with up to two commas are fine, but no more than that, or you'll get in trouble. diff --git a/ValeStyles/test/adoc/Test-Couchbase.SQL.yml b/ValeStyles/test/adoc/Test-Couchbase.SQL.yml new file mode 100644 index 0000000..f48a01b --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.SQL.yml @@ -0,0 +1,4 @@ +flag: + - This is an SQL++ query. +compliant: + - This is a SQL++ query. diff --git a/ValeStyles/test/adoc/Test-Couchbase.See.yml b/ValeStyles/test/adoc/Test-Couchbase.See.yml new file mode 100644 index 0000000..1048f93 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.See.yml @@ -0,0 +1,6 @@ +flag: + - Refer to http://foo.bar for more details. + - Refer to https://foo.bar for more details. +compliant: + - See http://foo.bar for more details. + - See https://foo.bar for more details. diff --git a/ValeStyles/test/adoc/Test-Couchbase.Semi-Colons.yml b/ValeStyles/test/adoc/Test-Couchbase.Semi-Colons.yml new file mode 100644 index 0000000..aea3078 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Semi-Colons.yml @@ -0,0 +1,4 @@ +flag: + - This is a sentence; and here is another clause. +compliant: + - This is a sentence, and here is another clause. diff --git a/ValeStyles/test/adoc/Test-Couchbase.SentenceLength.yml b/ValeStyles/test/adoc/Test-Couchbase.SentenceLength.yml new file mode 100644 index 0000000..bcd8ac3 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.SentenceLength.yml @@ -0,0 +1,5 @@ +flag: + - This sentence is far too long because it contains many clauses, making it difficult for readers to follow the main point, and therefore it should be rewritten to improve clarity and readability. +compliant: + - This sentence is clear and concise. + - Rewrite long sentences to improve clarity. diff --git a/ValeStyles/test/adoc/Test-Couchbase.Sidebars.yml b/ValeStyles/test/adoc/Test-Couchbase.Sidebars.yml new file mode 100644 index 0000000..20ccef3 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Sidebars.yml @@ -0,0 +1,9 @@ +flag: + - adoc: | + **** + This is a sidebar. + **** + - adoc: '[sidebar]' +compliant: + - This is a regular paragraph, not a sidebar. + - Do not use the sidebar formatting. Use admonitions, instead. diff --git a/ValeStyles/test/adoc/Test-Couchbase.StackedHeadings.yml b/ValeStyles/test/adoc/Test-Couchbase.StackedHeadings.yml new file mode 100644 index 0000000..9d06295 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.StackedHeadings.yml @@ -0,0 +1,15 @@ +flag: + - adoc: | + + = Heading 1 + + == Heading 2 + +compliant: + - adoc: | + + = Heading 1 + + Some content before the second heading + + == Heading 2 diff --git a/ValeStyles/test/adoc/Test-Couchbase.Terminology.yml b/ValeStyles/test/adoc/Test-Couchbase.Terminology.yml new file mode 100644 index 0000000..40e3d2a --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Terminology.yml @@ -0,0 +1,18 @@ +flag: + - This project uses dotnet for development. + - Add the adaptor to your system. + - Couchbase uses the whitelist to control access. + - The code base is large. + - See the data center documentation. + - She used the plugin for integration. + - The master node is down. + - He prefers to utilize this feature. +compliant: + - This project uses .NET for development. + - Add the adapter to your system. + - Couchbase uses the Allowlist to control access. + - The codebase is large. + - See the datacenter documentation. + - She used the plug-in for integration. + - The primary node is down. + - He prefers to use this feature. diff --git a/ValeStyles/test/adoc/Test-Couchbase.Textbox.yml b/ValeStyles/test/adoc/Test-Couchbase.Textbox.yml new file mode 100644 index 0000000..ddf4d85 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Textbox.yml @@ -0,0 +1,6 @@ +flag: + - Enter your name in the textbox. + - Click the text box to start typing. +compliant: + - Enter your name in the field. + - Click the field to start typing. diff --git a/ValeStyles/test/adoc/Test-Couchbase.ThereIs.yml b/ValeStyles/test/adoc/Test-Couchbase.ThereIs.yml new file mode 100644 index 0000000..ca246d9 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.ThereIs.yml @@ -0,0 +1,10 @@ +flag: + - There is a problem with the configuration. + - There is an error in the logs. + - There is a need for more testing. + - There is a button you can click. +compliant: + - A problem exists with the configuration. + - An error appears in the logs. + - More testing is needed. + - You can click the button. diff --git a/ValeStyles/test/adoc/Test-Couchbase.UnexplainedAcronym.yml b/ValeStyles/test/adoc/Test-Couchbase.UnexplainedAcronym.yml new file mode 100644 index 0000000..887a361 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.UnexplainedAcronym.yml @@ -0,0 +1,7 @@ +flag: + - The HFE is not responding. +compliant: + - The Hyperspace Frobnication Engine (HFE) is not responding. + - | + Let us look at the Hyperspace Frobnication Engine (HFE). + The HFE is responsible for frobnicating the unobtanium in the engine. diff --git a/ValeStyles/test/adoc/Test-Couchbase.Values.yml b/ValeStyles/test/adoc/Test-Couchbase.Values.yml new file mode 100644 index 0000000..d3e749c --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Values.yml @@ -0,0 +1,6 @@ +flag: + - above 1000 + - lower than the limit +compliant: + - greater than 1000 + - less than the limit diff --git a/ValeStyles/test/adoc/Test-Couchbase.VentilatedProse.yml b/ValeStyles/test/adoc/Test-Couchbase.VentilatedProse.yml new file mode 100644 index 0000000..61f366a --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.VentilatedProse.yml @@ -0,0 +1,7 @@ +flag: + - This paragraph contains multiple sentences without any line breaks. It makes the text harder to read and maintain, especially in documentation where each sentence should start on a new line. +compliant: + - | + This sentence is on its own line. + So is this one. + Each sentence starts on a new line for clarity. diff --git a/ValeStyles/test/adoc/Test-Couchbase.Versions.yml b/ValeStyles/test/adoc/Test-Couchbase.Versions.yml new file mode 100644 index 0000000..ff13215 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Versions.yml @@ -0,0 +1,8 @@ +flag: + - Use version 6.0 or higher. + - Use version 6.0 or newer. + - Not available in version 5.0 or lower. + - Not available in version 5.0 or older. +compliant: + - Use version 6.0 or later. + - Not available in version 5.0 or earlier. diff --git a/ValeStyles/test/adoc/Test-Couchbase.Wordy.yml b/ValeStyles/test/adoc/Test-Couchbase.Wordy.yml new file mode 100644 index 0000000..c71d861 --- /dev/null +++ b/ValeStyles/test/adoc/Test-Couchbase.Wordy.yml @@ -0,0 +1,8 @@ +flag: + - Combating the issue requires a comprehensive understanding of the underlying architecture. + - Couchbase will streamline the process to enhance efficiency. + - It is ever thus. +compliant: + - We need to understand the architecture to fix the issue. + - Couchbase will simplify the process to improve efficiency. + - It's always like this. diff --git a/ValeStyles/test/adoc/styles.hbs b/ValeStyles/test/adoc/styles.hbs new file mode 100644 index 0000000..032cbcc --- /dev/null +++ b/ValeStyles/test/adoc/styles.hbs @@ -0,0 +1,64 @@ + + + + + Vale Style Test Results + + + +

Vale Style Test Results

+
+
OS: {{os}}
+
Node.js version: {{version}}
+
+ {{#each results}} +
+

{{check}}

+ + {{#with config.todo}} +
+
TODO: {{.}}
+ {{/with}} + {{#each checkresults}} +
+
+ {{#if compliant}}Compliant{{else}}Flagged{{/if}} + {{#if error}}❌ Error{{/if}} +
+
+
{{{html}}}
+
+ + {{#with matching.[0]}}
+ ({{#with Link}}{{/with}}{{Severity}}{{#if Link}}{{/if}}) + {{Message}} + {{Description}} +
{{/with}} + +
+ {{/each}} + {{#if config.todo}}
{{/if}} +
+ {{/each}} + + \ No newline at end of file diff --git a/ValeStyles/test/adoc/styles.html b/ValeStyles/test/adoc/styles.html new file mode 100644 index 0000000..fad666b --- /dev/null +++ b/ValeStyles/test/adoc/styles.html @@ -0,0 +1,3746 @@ + + + + + Vale Style Test Results + + + +

Vale Style Test Results

+
+
OS: darwin
+
Node.js version: 22.16.0
+
+
+

Couchbase.An

+ +
+
+ Flagged + +
+
+
This is a example of incorrect usage.
+
+ +
+ (error) + Use "an," not "a." + +
+ +
+
+
+ Flagged + +
+
+
She wrote a email to the team.
+
+ +
+ (error) + Use "an," not "a." + +
+ +
+
+
+ Flagged + +
+
+
He found a unusual error in the logs.
+
+ +
+ (error) + Use "an," not "a." + +
+ +
+
+
+ Flagged + +
+
+
We need a update before release.
+
+ +
+ (error) + Use "an," not "a." + +
+ +
+
+
+ Flagged + +
+
+
Please submit a application.
+
+ +
+ (error) + Use "an," not "a." + +
+ +
+
+
+ Compliant + +
+
+
This is an example of correct usage.
+
+ + + +
+
+
+ Compliant + +
+
+
She wrote an email to the team.
+
+ + + +
+
+
+ Compliant + +
+
+
He found an unusual error in the logs.
+
+ + + +
+
+
+ Compliant + +
+
+
We need an update before release.
+
+ + + +
+
+
+ Compliant + +
+
+
Please submit an application.
+
+ + + +
+ +
+
+

Couchbase.App

+ +
+
+ Flagged + +
+
+
Please open the app to continue.
+
+ +
+ (warning) + Use application, not app, unless you're working on Mobile documentation. + +
+ +
+
+
+ Flagged + +
+
+
The app crashed unexpectedly.
+
+ +
+ (warning) + Use application, not app, unless you're working on Mobile documentation. + +
+ +
+
+
+ Flagged + +
+
+
She downloaded the app from the store.
+
+ +
+ (warning) + Use application, not app, unless you're working on Mobile documentation. + +
+ +
+
+
+ Flagged + +
+
+
He deleted the app by mistake.
+
+ +
+ (warning) + Use application, not app, unless you're working on Mobile documentation. + +
+ +
+
+
+ Flagged + +
+
+
We updated the app yesterday.
+
+ +
+ (warning) + Use application, not app, unless you're working on Mobile documentation. + +
+ +
+
+
+ Compliant + +
+
+
Please open the application to continue.
+
+ + + +
+
+
+ Compliant + +
+
+
The application crashed unexpectedly.
+
+ + + +
+
+
+ Compliant + +
+
+
She downloaded the application from the store.
+
+ + + +
+
+
+ Compliant + +
+
+
He deleted the application by mistake.
+
+ + + +
+
+
+ Compliant + +
+
+
We updated the application yesterday.
+
+ + + +
+ +
+
+

Couchbase.Bold

+ +
+
+ Flagged + +
+
+
This is *bold* text using asterisks.
+
+ +
+ (suggestion) + Did you follow the guidelines for bold font? + +
+ +
+
+
+ Flagged + +
+
+
Please click the *Save* button.
+
+ +
+ (suggestion) + Did you follow the guidelines for bold font? + +
+ +
+
+
+ Flagged + +
+
+
Use *important* for emphasis.
+
+ +
+ (suggestion) + Did you follow the guidelines for bold font? + +
+ +
+
+
+ Compliant + +
+
+
This is normal text.
+
+ + + +
+
+
+ Compliant + +
+
+
Please click the btn:[Save] button.
+
+ + + +
+
+
+ Compliant + +
+
+
Use _important_ for emphasis.
+
+ + + +
+ +
+
+

Couchbase.Button

+ +
+
+ Flagged + +
+
+
click the cancel button
+
+ +
+ (error) + Do not refer to a UI element with the word 'button', as in 'Click the Edit button'. Make sure to use the button macro (btn:[]). + +
+ +
+
+
+ Flagged + +
+
+
click the *cancel* button
+
+ +
+ (error) + Do not refer to a UI element with the word 'button', as in 'Click the Edit button'. Make sure to use the button macro (btn:[]). + +
+ +
+
+
+ Flagged + +
+
+
click the Stay Alert button
+
+ +
+ (error) + Do not refer to a UI element with the word 'button', as in 'Click the Edit button'. Make sure to use the button macro (btn:[]). + +
+ +
+
+
+ Flagged + +
+
+
click the *Stay Alert* button
+
+ +
+ (error) + Do not refer to a UI element with the word 'button', as in 'Click the Edit button'. Make sure to use the button macro (btn:[]). + +
+ +
+
+
+ Compliant + +
+
+
click btn:[Cancel]
+
+ + + +
+ +
+
+

Couchbase.ButtonMacro

+ +
+
+ Flagged + +
+
+
Click the btn:[Save] button to continue.
+
+ +
+ (suggestion) + Did you follow the guidelines for the button macro? + +
+ +
+
+
+ Flagged + +
+
+
Press the btn:[Cancel] button to exit.
+
+ +
+ (suggestion) + Did you follow the guidelines for the button macro? + +
+ +
+
+
+ Flagged + +
+
+
Select the btn:[Submit] button to proceed.
+
+ +
+ (suggestion) + Did you follow the guidelines for the button macro? + +
+ +
+ +
+
+

Couchbase.Checkbox

+ +
+
+ Flagged + +
+
+
Select the checkbox to agree.
+
+ +
+ (error) + Don't use 'checkbox'. Just use the label from the UI. Add 'click' or 'clear' as needed. + +
+ +
+
+
+ Flagged + +
+
+
Tick the OK check box if you accept.
+
+ +
+ (error) + Don't use 'check box'. Just use the label from the UI. Add 'click' or 'clear' as needed. + +
+ +
+
+
+ Compliant + +
+
+
Select "OK" to accept.
+
+ + + +
+
+
+ Compliant + +
+
+
Check "I agree" to continue.
+
+ + + +
+ +
+
+

Couchbase.CodeCallouts

+ +
+
+ Flagged + +
+
+
[source,java
+--
+public class Example { // <1>
+  ...
+}
+--
+<1> This is a code callout.
+
+
+ +
+ (error) + Don't use code callouts. Break up your code samples or use code comments, instead. + +
+ +
+
+
+ Compliant + +
+
+
[source,java]
+--
+public class Example {
+--
+First we declare the class `Example`.
+
+
+ + + +
+ +
+
+

Couchbase.ComplexContractions

+ +
+
+ Flagged + +
+
+
What'll become of the database?
+
+ +
+ (error) + Do not use complex contractions like 'What'll'. + +
+ +
+
+
+ Flagged + +
+
+
We must've missed the deadline.
+
+ +
+ (error) + Do not use complex contractions like 'must've'. + +
+ +
+
+
+ Flagged + +
+
+
We would've liked to help you.
+
+ +
+ (error) + Do not use complex contractions like 'would've'. + +
+ +
+
+
+ Compliant + +
+
+
You shouldn't use contractions in formal documentation... but we do.
+
+ + + +
+
+
+ Compliant + +
+
+
They can't access the database.
+
+ + + +
+
+
+ Compliant + +
+
+
We won't support this feature.
+
+ + + +
+ +
+
+

Couchbase.Contractions

+ +
+
+ Flagged + +
+
+
It is important to follow the guidelines.
+
+ +
+ (error) + Use 'it's' instead of 'It is'. + +
+ +
+
+
+ Flagged + +
+
+
How is this feature used?
+
+ +
+ (error) + Use 'how's' instead of 'How is'. + +
+ +
+
+
+ Flagged + +
+
+
That is not supported.
+
+ +
+ (error) + Use 'that's' instead of 'That is'. + +
+ +
+
+
+ Flagged + +
+
+
They are working on the fix.
+
+ +
+ (error) + Use 'they're' instead of 'They are'. + +
+ +
+
+
+ Flagged + +
+
+
We are planning a release.
+
+ +
+ (error) + Use 'we're' instead of 'We are'. + +
+ +
+
+
+ Flagged + +
+
+
What is the status?
+
+ +
+ (error) + Use 'what's' instead of 'What is'. + +
+ +
+
+
+ Flagged + +
+
+
Where is the documentation?
+
+ +
+ (error) + Use 'where's' instead of 'Where is'. + +
+ +
+
+
+ Flagged + +
+
+
Who is responsible for this?
+
+ +
+ (error) + Use 'who's' instead of 'Who is'. + +
+ +
+
+
+ Flagged + +
+
+
You are required to sign in.
+
+ +
+ (error) + Use 'you're' instead of 'You are'. + +
+ +
+
+
+ Flagged + +
+
+
You had better check the logs.
+
+ +
+ (error) + Use 'you'd' instead of 'You had'. + +
+ +
+
+
+ Flagged + +
+
+
You will need to update your client.
+
+ +
+ (error) + Use 'you'll' instead of 'You will'. + +
+ +
+
+
+ Compliant + +
+
+
It's important to follow the guidelines.
+
+ + + +
+
+
+ Compliant + +
+
+
How's this feature used?
+
+ + + +
+
+
+ Compliant + +
+
+
That's not supported.
+
+ + + +
+
+
+ Compliant + +
+
+
They're working on the fix.
+
+ + + +
+
+
+ Compliant + +
+
+
We're planning a release.
+
+ + + +
+
+
+ Compliant + +
+
+
What's the status?
+
+ + + +
+
+
+ Compliant + +
+
+
Where's the documentation?
+
+ + + +
+
+
+ Compliant + +
+
+
Who's responsible for this?
+
+ + + +
+
+
+ Compliant + +
+
+
You're required to sign in.
+
+ + + +
+
+
+ Compliant + +
+
+
You'd better check the logs.
+
+ + + +
+
+
+ Compliant + +
+
+
You'll need to update your client.
+
+ + + +
+ +
+
+

Couchbase.CouchbaseAutoOp

+ +
+
TODO: We don't understand how the Vale conditional test works.
+
+
+ Flagged + +
+
+
The Operator manages the cluster.
+
+ +
+ (error) + Use the full product name (Couchbase Autonomous Operator) first. + +
+ +
+
+
+ Flagged + +
+
+
Upgrade the Operator to the latest version.
+
+ +
+ (error) + Use the full product name (Couchbase Autonomous Operator) first. + +
+ +
+
+
+ Flagged + ❌ Error +
+
+
The Operator supports rolling upgrades. We call it the Couchbase Autonomous Operator.
+
+ + + +
+
+
+ Compliant + +
+
+
Couchbase Autonomous Operator does everything. For example, the Operator manages the cluster.
+
+ + + +
+
+
+
+

Couchbase.CouchbaseServerComm

+ +
+
+ Flagged + +
+
+
You can download Community Edition from our website.
+
+ +
+ (error) + Use the full product name (Couchbase Server Community Edition) first. + +
+ +
+
+
+ Flagged + +
+
+
The Community Edition is free to use.
+
+ +
+ (error) + Use the full product name (Couchbase Server Community Edition) first. + +
+ +
+
+
+ Compliant + +
+
+
You can download Couchbase Server Community Edition from our website.
+
+ + + +
+
+
+ Compliant + +
+
+
The Couchbase Server Community Edition is free to use.
+
+ + + +
+ +
+
+

Couchbase.DatePicker

+ +
+
+ Flagged + +
+
+
Select the Date Picker to choose a date.
+
+ +
+ (error) + Don't bold or capitalize "date picker." + +
+ +
+
+
+ Flagged + +
+
+
Click the *date picker* field.
+
+ +
+ (error) + Don't bold or capitalize "date picker." + +
+ +
+
+
+ Compliant + +
+
+
Select the date picker to choose a date.
+
+ + + +
+
+
+ Compliant + +
+
+
Click the date picker field.
+
+ + + +
+ +
+
+

Couchbase.DialogOpens

+ +
+
+ Flagged + +
+
+
The *Add Page* dialog opens.
+
+ +
+ (error) + Do not add empty phrases like "The *Add Page* dialog opens". Delete this sentence from your docs. + +
+ +
+
+
+ Flagged + +
+
+
Suddenly the Shopkeeper appears.
+
+ +
+ (error) + Do not add empty phrases like "The *Add Page* dialog opens". Delete this sentence from your docs. + +
+ +
+
+
+ Compliant + +
+
+
Open the *Add Page* dialog.
+
+ + + +
+ +
+
+

Couchbase.Dialogs

+ +
+
+ Flagged + +
+
+
A Dialog will appear.
+
+ +
+ (error) + Don't bold or capitalize the word "dialog". + +
+ +
+
+
+ Flagged + +
+
+
Click the *dialog* to continue.
+
+ +
+ (error) + Don't bold or capitalize the word "dialog". + +
+ +
+
+
+ Flagged + +
+
+
The *dialog box* is displayed.
+
+ +
+ (error) + Don't bold or capitalize the word "dialog". + +
+ +
+
+
+ Compliant + +
+
+
A dialog will appear.
+
+ + + +
+
+
+ Compliant + +
+
+
Click the dialog to continue.
+
+ + + +
+
+
+ Compliant + +
+
+
The dialog box is displayed.
+
+ + + +
+ +
+
+

Couchbase.DirectionalLanguage

+ +
+
+ Flagged + +
+
+
Click the button on the left.
+
+ +
+ (warning) + Avoid directional language like 'left'. + +
+ +
+
+
+ Flagged + +
+
+
Scroll down to see more options.
+
+ +
+ (warning) + Avoid directional language like 'down'. + +
+ +
+
+
+ Flagged + +
+
+
The settings are below the menu.
+
+ +
+ (warning) + Avoid directional language like 'below the'. + +
+ +
+
+
+ Flagged + +
+
+
Move up to the previous section.
+
+ +
+ (warning) + Avoid directional language like 'up'. + +
+ +
+
+
+ Flagged + +
+
+
The icon is above the text.
+
+ +
+ (warning) + Avoid directional language like 'is above'. + +
+ +
+
+
+ Compliant + +
+
+
Click the first button.
+
+ + + +
+
+
+ Compliant + +
+
+
Scroll to see more options.
+
+ + + +
+
+
+ Compliant + +
+
+
The settings are under the menu.
+
+ + + +
+
+
+ Compliant + +
+
+
Return to the previous section.
+
+ + + +
+
+
+ Compliant + +
+
+
The icon is near the text.
+
+ + + +
+ +
+
+

Couchbase.Dropdown

+ +
+
+ Flagged + +
+
+
Select the drop-down to choose an option.
+
+ +
+ (error) + Don't use "dropdown", use "list". + +
+ +
+
+
+ Flagged + +
+
+
Click the dropdown menu.
+
+ +
+ (error) + Don't use "dropdown", use "list". + +
+ +
+
+
+ Flagged + +
+
+
Open the dropdowns list.
+
+ +
+ (error) + Don't use "dropdown", use "list". + +
+ +
+
+
+ Compliant + +
+
+
Choose the value from the list.
+
+ + + +
+ +
+
+

Couchbase.FancyQuotes

+ +
+
+ Flagged + +
+
+
He said, This is a test.
+
+ +
+ (error) + Do not use '“'. Replace with regular quotes/apostrophes. + +
+ +
+
+
+ Flagged + +
+
+
She replied, Indeed it is.
+
+ +
+ (error) + Do not use '‘'. Replace with regular quotes/apostrophes. + +
+ +
+
+
+ Flagged + +
+
+
The document uses smart quotes throughout.
+
+ +
+ (error) + Do not use '“'. Replace with regular quotes/apostrophes. + +
+ +
+
+
+ Compliant + +
+
+
He said, "This is a test."
+
+ + + +
+
+
+ Compliant + +
+
+
She replied, 'Indeed it is.'
+
+ + + +
+
+
+ Compliant + +
+
+
The document uses "straight quotes" throughout.
+
+ + + +
+ +
+
+

Couchbase.HeadingFormatting

+ +
+
+ Flagged + +
+
+
= This is a *bold* heading.
+
+ +
+ (error) + Don't add formatting to headings. + +
+ +
+
+
+ Flagged + +
+
+
== This is an _italic_ heading.
+
+ +
+ (error) + Don't add formatting to headings. + +
+ +
+
+
+ Compliant + +
+
+
= This heading has no formatting.
+
+ + + +
+ +
+
+

Couchbase.Headings

+ +
+
+ Flagged + +
+
+
= introduction
+
+ +
+ (warning) + 'introduction' should use title-style capitalization. + +
+ +
+
+
+ Flagged + +
+
+
== This does not use title case
+
+ +
+ (warning) + 'This does not use title case' should use title-style capitalization. + +
+ +
+
+
+ Compliant + +
+
+
= Introduction
+
+ + + +
+
+
+ Compliant + +
+
+
== Heading in Title Case
+
+ + + +
+ +
+
+

Couchbase.Italics

+ +
+
+ Flagged + +
+
+
This is _italic_ text using underscores.
+
+ +
+ (error) + Don't use italics. Find another way to add emphasis. + +
+ +
+
+
+ Flagged + +
+
+
Please click the _Save_ button.
+
+ +
+ (error) + Don't use italics. Find another way to add emphasis. + +
+ +
+
+
+ Flagged + +
+
+
Use _important_ for emphasis.
+
+ +
+ (error) + Don't use italics. Find another way to add emphasis. + +
+ +
+
+
+ Compliant + +
+
+
This is normal text.
+
+ + + +
+
+
+ Compliant + +
+
+
Please click the btn:[Save] button.
+
+ + + +
+ +
+
+

Couchbase.LessFewer

+ +
+
+ Flagged + +
+
+
There are less errors in this version.
+
+ +
+ (warning) + Did you mean less or should this be fewer? + +
+ +
+
+
+ Flagged + +
+
+
We need less people on the project.
+
+ +
+ (warning) + Did you mean less or should this be fewer? + +
+ +
+
+
+ Flagged + +
+
+
She has less tasks to complete.
+
+ +
+ (warning) + Did you mean less or should this be fewer? + +
+ +
+
+
+ Flagged + +
+
+
The server has less connections now.
+
+ +
+ (warning) + Did you mean less or should this be fewer? + +
+ +
+
+
+ Compliant + +
+
+
There are fewer errors in this version.
+
+ + + +
+
+
+ Compliant + +
+
+
We need fewer people on the project.
+
+ + + +
+
+
+ Compliant + +
+
+
She has fewer tasks to complete.
+
+ + + +
+
+
+ Compliant + +
+
+
The server has fewer connections now.
+
+ + + +
+ +
+
+

Couchbase.Link

+ +
+
+ Flagged + +
+
+
Click the link to continue.
+
+ +
+ (error) + Don't describe a UI element as a "link." + +
+ +
+
+
+ Compliant + +
+
+
Click "continue".
+
+ + + +
+ +
+
+

Couchbase.Monospace

+ +
+
+ Flagged + +
+
+
This is `monospace` text.
+
+ +
+ (suggestion) + Did you follow the guidelines for monospace font? + +
+ +
+
+
+ Compliant + +
+
+
No monospace here.
+
+ + + +
+ +
+
+

Couchbase.NegativeContractions

+ +
+
+ Flagged + +
+
+
You can't access this feature.
+
+ +
+ (error) + Use 'cannot' instead of 'can't'. + +
+ +
+
+
+ Flagged + +
+
+
They don't have permission.
+
+ +
+ (error) + Use 'do not' instead of 'don't'. + +
+ +
+
+
+ Flagged + +
+
+
We won't support this version.
+
+ +
+ (error) + Use 'will not' instead of 'won't'. + +
+ +
+
+
+ Flagged + +
+
+
She isn't available right now.
+
+ +
+ (error) + Use 'is not' instead of 'isn't'. + +
+ +
+
+
+ Flagged + +
+
+
He hasn't finished the task.
+
+ +
+ (error) + Use 'has not' instead of 'hasn't'. + +
+ +
+
+
+ Compliant + +
+
+
You cannot access this feature.
+
+ + + +
+
+
+ Compliant + +
+
+
They do not have permission.
+
+ + + +
+
+
+ Compliant + +
+
+
We will not support this version.
+
+ + + +
+
+
+ Compliant + +
+
+
She is not available right now.
+
+ + + +
+
+
+ Compliant + +
+
+
He has not finished the task.
+
+ + + +
+ +
+
+

Couchbase.NoteThat

+ +
+
+ Flagged + +
+
+
Note that you must restart the server.
+
+ +
+ (error) + Don't use 'note that.' Convert to an actual NOTE, or don't use it at all. + +
+ +
+
+
+ Flagged + +
+
+
Note that this feature is experimental.
+
+ +
+ (error) + Don't use 'note that.' Convert to an actual NOTE, or don't use it at all. + +
+ +
+
+
+ Flagged + +
+
+
Note that backups are not automatic.
+
+ +
+ (error) + Don't use 'note that.' Convert to an actual NOTE, or don't use it at all. + +
+ +
+
+
+ Compliant + +
+
+
You must restart the server.
+
+ + + +
+
+
+ Compliant + +
+
+
This feature is experimental.
+
+ + + +
+
+
+ Compliant + +
+
+
NOTE: Backups are not automatic.
+
+ + + +
+ +
+
+

Couchbase.Numbers

+ +
+
+ Flagged + +
+
+
one fish
+
+ +
+ (error) + Write all numbers as numerals. + +
+ +
+
+
+ Flagged + +
+
+
two fish
+
+ +
+ (error) + Write all numbers as numerals. + +
+ +
+
+
+ Compliant + +
+
+
red fish
+
+ + + +
+
+
+ Compliant + +
+
+
blue fish
+
+ + + +
+
+
+ Compliant + +
+
+
1 fish
+
+ + + +
+
+
+ Compliant + +
+
+
2 fish
+
+ + + +
+ +
+
+

Couchbase.Please

+ +
+
+ Flagged + +
+
+
Please refer to the documentation for more information.
+
+ +
+ (error) + Avoid using "Please" as much as possible. Only use it when asking for something that inconveniences the user. + +
+ +
+
+
+ Flagged + +
+
+
Please ensure you have saved your work.
+
+ +
+ (error) + Avoid using "Please" as much as possible. Only use it when asking for something that inconveniences the user. + +
+ +
+
+
+ Flagged + +
+
+
Please contact support if you need help.
+
+ +
+ (error) + Avoid using "Please" as much as possible. Only use it when asking for something that inconveniences the user. + +
+ +
+
+
+ Compliant + +
+
+
Refer to the documentation for more information.
+
+ + + +
+
+
+ Compliant + +
+
+
Ensure you have saved your work.
+
+ + + +
+
+
+ Compliant + +
+
+
Contact support if you need help.
+
+ + + +
+ +
+
+

Couchbase.Quotations

+ +
+
+ Flagged + +
+
+
The term "bucket" refers to a data container.
+
+ +
+ (error) + Don't use quotation marks to add emphasis. + +
+ +
+
+
+ Flagged + +
+
+
He clicked the "Save" button.
+
+ +
+ (error) + Don't use quotation marks to add emphasis. + +
+ +
+
+
+ Flagged + +
+
+
Select the "Settings" option from the menu.
+
+ +
+ (error) + Don't use quotation marks to add emphasis. + +
+ +
+
+
+ Compliant + +
+
+
The term ‘bucket’ refers to a data container.
+
+ + + +
+
+
+ Compliant + +
+
+
He clicked the btn:[Save] button.
+
+ + + +
+
+
+ Compliant + +
+
+
Select the _Settings_ option from the menu.
+
+ + + +
+ +
+
+

Couchbase.ReadingLevel

+ +
+
TODO: This needs some work.
+
+
+ Flagged + ❌ Error +
+
+
Utilizing multifaceted methodologies, the system orchestrates a plethora of
+functionalities to facilitate seamless interoperability among disparate
+modules.
+
+
+ + + +
+
+
+ Compliant + +
+
+
The system uses many methods to help different modules work together.
+
+ + + +
+
+
+ Compliant + +
+
+
This change means we need to review how things work.
+
+ + + +
+
+
+
+

Couchbase.ReferTo

+ +
+
+ Flagged + +
+
+
For more details, see <<xref>>
+
+ +
+ (error) + Introduce links with 'For more information, see {link}'. + +
+ +
+
+
+ Flagged + +
+
+
Refer to <<xref>>
+
+ +
+ (error) + Introduce links with 'For more information, see {link}'. + +
+ +
+
+
+ Compliant + +
+
+
For more information, see <<xref>>
+
+ + + +
+ +
+
+

Couchbase.RepeatedSpace

+ +
+
+ Flagged + +
+
+
There   are   multiple   spaces   here.
+
+ +
+ (error) + Did you mean to add extra spaces? + +
+ +
+
+
+ Flagged + +
+
+
Check  for a single repeated space.
+
+ +
+ (error) + Did you mean to add extra spaces? + +
+ +
+
+
+ Compliant + +
+
+
This sentence has one space between words.
+
+ + + +
+
+
+ Compliant + +
+
+
Sentences with {attributes} should not be flagged.
+
+ + + +
+ +
+
+

Couchbase.RunOn

+ +
+
+ Flagged + +
+
+
This could be a run on sentence, because it has many commas, so confuses people, don't you think?
+
+ +
+ (warning) + This might be a run-on sentence (more than 2 commas). Would a bulleted list work better? + +
+ +
+
+
+ Compliant + +
+
+
Sentences with up to two commas are fine, but no more than that, I beg you.
+
+ + + +
+ +
+
+

Couchbase.SQL

+ +
+
+ Flagged + +
+
+
This is an SQL++ query.
+
+ +
+ (error) + Use "a SQL++," not "an SQL++" + +
+ +
+
+
+ Compliant + +
+
+
This is a SQL++ query.
+
+ + + +
+ +
+
+

Couchbase.See

+ +
+
+ Flagged + +
+
+
Refer to http://foo.bar for more details.
+
+ +
+ (warning) + Use "see" for links. + +
+ +
+
+
+ Flagged + +
+
+
Refer to https://foo.bar for more details.
+
+ +
+ (warning) + Use "see" for links. + +
+ +
+
+
+ Compliant + +
+
+
See http://foo.bar for more details.
+
+ + + +
+
+
+ Compliant + +
+
+
See https://foo.bar for more details.
+
+ + + +
+ +
+
+

Couchbase.Semi-Colons

+ +
+
+ Flagged + +
+
+
This is a sentence; and here is another clause.
+
+ +
+ (warning) + Try to avoid using a semi-colon. Follow the style guide guidance. + +
+ +
+
+
+ Compliant + +
+
+
This is a sentence, and here is another clause.
+
+ + + +
+ +
+
+

Couchbase.SentenceLength

+ +
+
+ Flagged + +
+
+
This sentence is far too long because it contains many clauses, making it difficult for readers to follow the main point, and therefore it should be rewritten to improve clarity and readability.
+
+ +
+ (suggestion) + Try to keep sentences under 25 words. + +
+ +
+
+
+ Compliant + +
+
+
This sentence is clear and concise.
+
+ + + +
+
+
+ Compliant + +
+
+
Rewrite long sentences to improve clarity.
+
+ + + +
+ +
+
+

Couchbase.Sidebars

+ +
+
+ Flagged + +
+
+
****
+This is a sidebar.
+****
+
+
+ +
+ (error) + Don't use sidebars. + +
+ +
+
+
+ Flagged + +
+
+
[sidebar]
+
+ +
+ (error) + Don't use sidebars. + +
+ +
+
+
+ Compliant + +
+
+
This is a regular paragraph, not a sidebar.
+
+ + + +
+
+
+ Compliant + +
+
+
Use sidebars only when necessary and keep them concise.
+
+ + + +
+ +
+
+

Couchbase.StackedHeadings

+ +
+
+ Flagged + +
+
+
+= Heading 1
+
+== Heading 2
+
+
+ +
+ (error) + You can't have two headings with no content in between. + +
+ +
+
+
+ Compliant + +
+
+
+= Heading 1
+
+Some content before the second heading
+
+== Heading 2
+
+
+ + + +
+ +
+
+

Couchbase.Terminology

+ +
+
+ Flagged + +
+
+
This project uses dotnet for development.
+
+ +
+ (warning) + Use '.NET', not 'dotnet' + +
+ +
+
+
+ Flagged + +
+
+
Please add the adaptor to your system.
+
+ +
+ (warning) + Use 'adapter', not 'adaptor' + +
+ +
+
+
+ Flagged + +
+
+
We use the whitelist to control access.
+
+ +
+ (warning) + Use 'Allowlist', not 'whitelist' + +
+ +
+
+
+ Flagged + +
+
+
The code base is large.
+
+ +
+ (warning) + Use 'codebase', not 'code base' + +
+ +
+
+
+ Flagged + +
+
+
Refer to the data center documentation.
+
+ +
+ (warning) + Use 'datacenter', not 'data center' + +
+ +
+
+
+ Flagged + +
+
+
She used the plugin for integration.
+
+ +
+ (warning) + Use 'plug-in', not 'plugin' + +
+ +
+
+
+ Flagged + +
+
+
The master node is down.
+
+ +
+ (warning) + Use 'primary', not 'master' + +
+ +
+
+
+ Flagged + +
+
+
He prefers to utilize this feature.
+
+ +
+ (warning) + Use 'use|using', not 'utilize' + +
+ +
+
+
+ Compliant + +
+
+
This project uses .NET for development.
+
+ + + +
+
+
+ Compliant + +
+
+
Please add the adapter to your system.
+
+ + + +
+
+
+ Compliant + +
+
+
We use the Allowlist to control access.
+
+ + + +
+
+
+ Compliant + +
+
+
The codebase is large.
+
+ + + +
+
+
+ Compliant + +
+
+
Refer to the datacenter documentation.
+
+ + + +
+
+
+ Compliant + +
+
+
She used the plug-in for integration.
+
+ + + +
+
+
+ Compliant + +
+
+
The primary node is down.
+
+ + + +
+
+
+ Compliant + +
+
+
He prefers to use this feature.
+
+ + + +
+ +
+
+

Couchbase.Textbox

+ +
+
+ Flagged + +
+
+
Enter your name in the textbox.
+
+ +
+ (error) + Don't use "textbox", use "field". If the user can make a selection in the field, use "box". + +
+ +
+
+
+ Flagged + +
+
+
Click the text box to start typing.
+
+ +
+ (error) + Don't use "textbox", use "field". If the user can make a selection in the field, use "box". + +
+ +
+
+
+ Compliant + +
+
+
Enter your name in the field.
+
+ + + +
+
+
+ Compliant + +
+
+
Click the box to start typing.
+
+ + + +
+ +
+
+

Couchbase.ThereIs

+ +
+
+ Flagged + +
+
+
There is a problem with the configuration.
+
+ +
+ (error) + Don't start a sentence with "there" + a form of "to be." + +
+ +
+
+
+ Flagged + +
+
+
There is an error in the logs.
+
+ +
+ (error) + Don't start a sentence with "there" + a form of "to be." + +
+ +
+
+
+ Flagged + +
+
+
There is a need for more testing.
+
+ +
+ (error) + Don't start a sentence with "there" + a form of "to be." + +
+ +
+
+
+ Flagged + +
+
+
There is a button you can click.
+
+ +
+ (error) + Don't start a sentence with "there" + a form of "to be." + +
+ +
+
+
+ Compliant + +
+
+
A problem exists with the configuration.
+
+ + + +
+
+
+ Compliant + +
+
+
An error appears in the logs.
+
+ + + +
+
+
+ Compliant + +
+
+
More testing is needed.
+
+ + + +
+
+
+ Compliant + +
+
+
You can click the button.
+
+ + + +
+ +
+
+

Couchbase.UnexplainedAcronym

+ +
+
+ Flagged + +
+
+
The HFE is not responding.
+
+ +
+ (error) + 'HFE' hasn't been defined. Spell it out if it's unfamiliar to the audience. + +
+ +
+
+
+ Compliant + +
+
+
The Hyperspace Frobnication Engine (HFE) is not responding.
+
+ + + +
+
+
+ Compliant + +
+
+
Let us look at the Hyperspace Frobnication Engine (HFE).
+The HFE is responsible for frobnicating the unobtanium in the engine.
+
+
+ + + +
+ +
+
+

Couchbase.Values

+ +
+
+ Flagged + +
+
+
above 1000
+
+ +
+ (warning) + When comparing or describing a value, use 'greater' or 'less'. + +
+ +
+
+
+ Flagged + +
+
+
higher than the blood sugar limit
+
+ +
+ (warning) + When comparing or describing a value, use 'greater' or 'less'. + +
+ +
+
+
+ Compliant + +
+
+
greater than 1000
+
+ + + +
+
+
+ Compliant + +
+
+
less than the limit
+
+ + + +
+ +
+
+

Couchbase.VentilatedProse

+ +
+
+ Flagged + +
+
+
This paragraph contains multiple sentences without any line breaks. It makes the text harder to read and maintain, especially in documentation where each sentence should start on a new line.
+
+ +
+ (warning) + Use ventilated prose. Start every sentence on a new line. + +
+ +
+
+
+ Compliant + +
+
+
This sentence is on its own line.
+So is this one.
+Each sentence starts on a new line for clarity.
+
+
+ + + +
+ +
+
+

Couchbase.Versions

+ +
+
+ Flagged + +
+
+
Use version 6.0 or higher.
+
+ +
+ (warning) + Use 'later' or 'earlier', when talking about versions. + +
+ +
+
+
+ Flagged + +
+
+
Use version 6.0 or newer.
+
+ +
+ (warning) + Use 'later' or 'earlier', when talking about versions. + +
+ +
+
+
+ Flagged + +
+
+
Not available in version 5.0 or lower.
+
+ +
+ (warning) + Use 'later' or 'earlier', when talking about versions. + +
+ +
+
+
+ Flagged + +
+
+
Not available in version 5.0 or older.
+
+ +
+ (warning) + Use 'later' or 'earlier', when talking about versions. + +
+ +
+
+
+ Compliant + +
+
+
Use version 6.0 or later.
+
+ + + +
+
+
+ Compliant + +
+
+
Not available in version 5.0 or earlier.
+
+ + + +
+ +
+
+

Couchbase.Wordy

+ +
+
+ Flagged + +
+
+
Combating the issue requires a comprehensive understanding of the underlying architecture.
+
+ +
+ (error) + Use plain language. 'Combating' is too wordy. + +
+ +
+
+
+ Flagged + +
+
+
We will streamline the process to enhance efficiency.
+
+ +
+ (error) + Use plain language. 'streamline' is too wordy. + +
+ +
+
+
+ Flagged + +
+
+
It is ever thus.
+
+ +
+ (error) + Use plain language. 'thus' is too wordy. + +
+ +
+
+
+ Compliant + +
+
+
We need to understand the architecture to fix the issue.
+
+ + + +
+
+
+ Compliant + +
+
+
We will simplify the process to improve efficiency.
+
+ + + +
+
+
+ Compliant + +
+
+
It's always like this.
+
+ + + +
+ +
+ + \ No newline at end of file diff --git a/ValeStyles/test/expected.js b/ValeStyles/test/expected.js new file mode 100644 index 0000000..eeebb76 --- /dev/null +++ b/ValeStyles/test/expected.js @@ -0,0 +1,53 @@ +// this test file is designed to be run with Mocha +const assert = require('assert') +const fs = require('fs') +const ok = specify +const { spawnSync } = require('node:child_process') + +console.log(process.cwd()) + +describe('run vale against test files', function () { + + let vale + try { + vale = spawnSync( + 'vale', + [ + '--output', 'JSON', + 'test/fixtures/' + ] + ) + } + catch (err) { + console.log("Failed to run vale", err) + } + + const output = JSON.parse(vale.stdout) + + for (const [file, actual] of Object.entries(output)) { + ok(`testing ${file}`, function () { + + for (const item of actual) { + delete item.Line + delete item.Span + delete item.Action + } + + fs.writeFileSync(`${file}.actual`, JSON.stringify(actual, null, 2), 'utf8') + + try { + const expected = JSON.parse(fs.readFileSync(`${file}.expected`, 'utf8')) + assert.deepEqual(actual, expected) + } + catch (err) { + if (err.code === 'ENOENT') { + assert.fail(`No expected file found for ${file}, skipping comparison.`) + } else { + throw err + } + } + }) + } +}) + + diff --git a/ValeStyles/test/fixtures/basic.adoc b/ValeStyles/test/fixtures/basic.adoc new file mode 100644 index 0000000..c779962 --- /dev/null +++ b/ValeStyles/test/fixtures/basic.adoc @@ -0,0 +1,4 @@ += This is a basic test + +This is a aardvark. He likes couchbase. +You are going to love this! diff --git a/ValeStyles/test/fixtures/basic.adoc.expected b/ValeStyles/test/fixtures/basic.adoc.expected new file mode 100644 index 0000000..7771dd7 --- /dev/null +++ b/ValeStyles/test/fixtures/basic.adoc.expected @@ -0,0 +1,50 @@ +[ + { + "Check": "Couchbase.Headings", + "Description": "", + "Link": "", + "Message": "'This is a basic test' should use title-style capitalization.", + "Severity": "warning", + "Match": "This is a basic test" + }, + { + "Check": "Couchbase.An", + "Description": "", + "Link": "https://docs.couchbase.com/styleguide/articles.html", + "Message": "Use \"an,\" not \"a.\"", + "Severity": "error", + "Match": "a aardvark" + }, + { + "Check": "Couchbase.VentilatedProse", + "Description": "", + "Link": "", + "Message": "Use ventilated prose. Start every sentence on a new line.", + "Severity": "warning", + "Match": "k. H" + }, + { + "Check": "Vale.Terms", + "Description": "", + "Link": "", + "Message": "Use 'Couchbase' instead of 'couchbase'.", + "Severity": "error", + "Match": "couchbase" + }, + { + "Check": "Couchbase.Contractions", + "Description": "", + "Link": "https://docs.couchbase.com/styleguide/contractions.html", + "Message": "Use 'you're' instead of 'You are'.", + "Severity": "error", + "Match": "You are" + }, + { + "Check": "Google.Exclamation", + "Description": "", + "Link": "https://developers.google.com/style/exclamation-points", + "Message": "Don't use exclamation points in text.", + "Severity": "error", + "Match": "s!" + } +] \ No newline at end of file diff --git a/ValeStyles/test/highlight.js b/ValeStyles/test/highlight.js new file mode 100644 index 0000000..91e5e3f --- /dev/null +++ b/ValeStyles/test/highlight.js @@ -0,0 +1,34 @@ +const {highlight} = require('./lib/highlight.js') +const assert = require('assert') + +text = +`This is a test for highlighting. +With some words that should be highlighted. +And some that aren't.` + +const checks = [ + { + Line: 1, + Span: [11,14] + }, + { + Line: 2, + Span: [11,15] + }, + { + Line: 2, + Span: [22,27] + }, + { + Line: 3, + Span: [5,8] + } +] +it(`should highlight words correctly`, function () { + assert.deepEqual( + highlight(text, checks), + 'This is a test for highlighting.\n' + + 'With some words that should be highlighted.\n' + + 'And some that aren't.' + ); +}) \ No newline at end of file diff --git a/ValeStyles/test/lib/highlight.js b/ValeStyles/test/lib/highlight.js new file mode 100644 index 0000000..b818353 --- /dev/null +++ b/ValeStyles/test/lib/highlight.js @@ -0,0 +1,86 @@ +const {range, zip, escape} = require('lodash'); + +module.exports = { highlight } + +function highlight(text, checks) { + + // convert the text into an array of indexed lines, in the form: + // [ + // [[1,1], 'This is a test for highlighting.'], + // [[2,1], 'With some words that should be highlighted.'], + // [[3,1], 'And some that aren\'t.'] + // ] + // (With 1-based line and column numbers as per Vale's output) + + const lines = text.match(/^.*?(\n|$)/gm) + const len = lines.length + const lineNumbers = range(1, len + 1) + const colNumbers = Array(len).fill(1) + const zipped = + zip(zip(lineNumbers, colNumbers), + lines) + + // Now we have the lines indexed, we can highlight the checks + const highlights = _highlight(zipped, checks, []) + return highlights.map(({text, highlighted}) => { + const html = escape(text) + return highlighted ? `${html}` : html + }).join('') +} + +function _highlight(lines, checks, highlights) { + + // Terminating case: if there are no checks or lines left, + // return the highlights + if (checks.length === 0) { + // in this case also return the remaining lines as unhighlighted text + return [...highlights, ...lines.map(([_, text]) => ({ text }))]; + } + + if (lines.length === 0) { return highlights } + + const [check, ...restChecks] = checks + const [[[line, col], text], ...rest] = lines + + if (line == check.Line) { + let {Span: [start, end]} = check + + // Adjust start and end to be relative to the line's text + start -= col + end -= col + + if (start < 0 || end > text.length) { + // If the adjusted span is out of bounds, skip this check + // (e.g. in case Vale allows overlapping spans?) + // If that isn't an edge case, we could simply + // throw an error here instead. + return _highlight(rest, checks, highlights) + } + + if (end > 1) { + highlights.push({ + text: text.slice(0, start) + }) + } + + highlights.push({ + text: text.slice(start, end + 1), + highlighted: true + }) + if (end < text.length) { + // If there is text after the highlighted span, + // return it to the `rest` array for further processing + rest.unshift([ + [line, col + end + 1], + text.slice(end + 1) + ]) + } + + return _highlight(rest, restChecks, highlights) + } + else { + highlights.push({ text }) + return _highlight(rest, checks, highlights) + + } +} \ No newline at end of file diff --git a/ValeStyles/test/styles.js b/ValeStyles/test/styles.js new file mode 100644 index 0000000..f0aba42 --- /dev/null +++ b/ValeStyles/test/styles.js @@ -0,0 +1,166 @@ +// this test file is designed to be run with Mocha +const assert = require('assert') +const fs = require('fs') +const os = require('os') +const ok = specify +const { spawnSync } = require('node:child_process') +const { escape } = require('lodash') +const { before, describe } = require('node:test') +const yaml = require('js-yaml') +const handlebars = require('handlebars') +const { highlight } = require('./lib/highlight.js') + +describe(`Report Vale tests against specific styles - output to file://${process.cwd()}/test/adoc/styles.html`, function () { + + before(function () { + + // On a Github hosted runner, we can't use the OS created temp + // directory, because we installed Vale as a Snap package. + // Snap packages are not allowed to read the OS temp directory. + // + // Handily, Github Actions provides a temp directory + // by default, so we can use that. + const tmp = process.env['RUNNER_TEMP'] || + fs.mkdtempSync(`${os.tmpdir()}/vale-test-`) + + const files = fs.readdirSync('test/adoc') + + const tests = files.flatMap(file => { + const check = file.match(/Test-(.*)\.yml$/)?.[1] + if (!check) { return [] } + + let test = yaml.load( + fs.readFileSync(`test/adoc/${file}`, 'utf8')) + + let {flag, compliant, ...config} = test + return [[ + check, + config, + [ + ...writeFixtures(check, flag, false, tmp), + ...writeFixtures(check, compliant, true, tmp) + ] + ]] + }) + + vv = spawnSync( + 'vale', [ '-v' ]) + console.log(`Vale version: ${vv.stdout.toString()}`) + + try { + vale = spawnSync( + 'vale', + [ + tmp, + '--output', 'JSON', + '--minAlertLevel', 'suggestion', + ], + ) + } + catch (err) { + console.log("Failed to run vale", err) + } + + let valeout = JSON.parse(vale.stdout) + + const results = tests.map( + function([check, config, fixtures]) { + const checkresults = fixtures.map((fixture) => { + const matching = + valeout[fixture.path]?.filter( + item => item.Check === check) || [] + + const compliant = matching.length == 0 + + const html = highlight(fixture.content, matching) + + // xor the compliant flag with the matching results + // to determine if there is an error + const error = compliant != fixture.compliant + + return {...config, ...fixture, matching, error, html} + }) + return { + check, + config, + checkresults, + } + } + ) + + const template = handlebars.compile( + fs.readFileSync('test/adoc/styles.hbs', 'utf8')) + const html = template({ + results, + cwd: process.cwd(), + os: os.platform(), + version: process.versions.node, + }) + fs.writeFileSync( + 'test/adoc/styles.html', html, 'utf8') + + + for (const result of results) { + const {check, config, checkresults} = result + + describe(`Check ${check}`, function () { + + if (config.todo) { + this.skip(`TODO: ${todo}`) + } + + for (const fixture of checkresults) { + const {compliant, matching, path, content, error} = fixture + + if (compliant) { + ok(`${check} (compliant)`, + function () { + !error || + assert.fail( + `Expected compliant for ${check}:\n ${content}\n but found: ${JSON.stringify(matching, null, 2)}\n in file: ${path}`) + } + ) + } + else { + ok(`${check}`, + function () { + !error || + assert.fail(`Expected to flag ${check}:\n ${content}\n in file: ${path}`) + } + ) + } + } + }) + } + }) +}) + + + +function writeFixtures(check, tests, compliant, tmp) { + return (tests || []).entries().map( + function ([idx, fixture]) { + let ext = 'txt' + let content = fixture + if (typeof fixture === 'object') { + [ext, content] = Object.entries(fixture)[0] + } + + const type = compliant ? 'compliant' : 'flag' + + const path = `${tmp}/${check}-${type}-${idx}.${ext}` + + fs.writeFileSync(path, content, 'utf8') + + const ret = { + check, + compliant, + idx, + path, + content, + } + return ret + } + ).toArray() +} +