{"_id":"eslint-plugin-canonical","_rev":"2197265","name":"eslint-plugin-canonical","description":"Canonical linting rules for ESLint.","dist-tags":{"latest":"2.4.3"},"maintainers":[{"name":"gajus","email":"gk@anuary.com"}],"time":{"modified":"2022-01-06T11:06:18.000Z","created":"2021-10-21T01:07:27.645Z","2.4.3":"2022-01-06T11:03:57.133Z","2.4.2":"2021-12-19T21:26:36.528Z","2.4.1":"2021-12-19T18:26:02.497Z","2.4.0":"2021-12-19T18:08:13.516Z","2.3.0":"2021-12-19T17:15:14.891Z","2.2.0":"2021-12-19T16:14:31.742Z","2.1.0":"2021-10-26T06:38:45.040Z","2.0.0":"2021-10-25T22:39:45.720Z","1.3.0":"2021-10-25T20:20:11.646Z","1.2.0":"2021-10-21T04:08:15.412Z","1.1.0":"2021-10-21T03:20:20.812Z","1.0.2":"2021-10-21T01:54:19.435Z","1.0.1":"2021-10-21T01:34:17.533Z","1.0.0":"2021-10-21T01:07:27.645Z"},"users":{},"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"repository":{"type":"git","url":"git+https://github.com/gajus/eslint-plugin-canonical.git"},"versions":{"2.4.3":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"dependencies":{"is-get-set-prop":"^1.0.0","is-js-type":"^2.0.0","is-obj-prop":"^1.0.0","is-proto-prop":"^2.0.0","lodash":"^4.17.21","natural-compare":"^1.4.0"},"description":"Canonical linting rules for ESLint.","devDependencies":{"@babel/cli":"^7.16.0","@babel/core":"^7.16.5","@babel/eslint-parser":"^7.16.5","@babel/node":"^7.16.5","@babel/plugin-transform-react-jsx":"^7.16.5","@babel/preset-env":"^7.16.5","ajv":"^8.8.2","babel-plugin-add-module-exports":"^1.0.4","eclint":"^2.8.1","eslint":"^8.5.0","eslint-config-canonical":"^32.46.1","eslint-plugin-eslint-plugin":"^4.1.0","gitdown":"^3.1.4","glob":"^7.2.0","husky":"^7.0.4","jsonlint":"^1.6.3","mocha":"^9.1.3","rimraf":"^3.0.2","semantic-release":"^18.0.1"},"engines":{"node":">=12.0.0"},"keywords":["eslint","plugin","canonical"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-canonical","peerDependencies":{"eslint":"^8.5.0"},"repository":{"type":"git","url":"git+https://github.com/gajus/eslint-plugin-canonical.git"},"scripts":{"build":"rimraf ./dist && babel ./src --out-dir ./dist --copy-files","check-docs":"babel-node ./src/bin/checkDocs","check-tests":"babel-node ./src/bin/checkTests","create-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run documentation-add-assertions","documentation-add-assertions":"babel-node ./src/bin/addAssertions","format-json":"jsonlint --sort-keys --in-place --indent \"  \" ./src/configs/recommended.json","lint":"eslint ./src ./tests","test":"mocha --require @babel/register ./tests/rules/index.js"},"version":"2.4.3","gitHead":"3b1b4f97754ecd9ad91cd724cc3b8eeec18058ba","bugs":{"url":"https://github.com/gajus/eslint-plugin-canonical/issues"},"homepage":"https://github.com/gajus/eslint-plugin-canonical#readme","_id":"eslint-plugin-canonical@2.4.3","_nodeVersion":"16.13.1","_npmVersion":"7.24.2","dist":{"shasum":"e5c185c411213d4020fd45fb3a33560a6c65177a","size":17728,"noattachment":false,"key":"/eslint-plugin-canonical/-/eslint-plugin-canonical-2.4.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/eslint-plugin-canonical/download/eslint-plugin-canonical-2.4.3.tgz"},"_npmUser":{"name":"gajus","email":"gajus@gajus.com"},"directories":{},"maintainers":[{"name":"gajus","email":"gk@anuary.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/eslint-plugin-canonical_2.4.3_1641467036958_0.1020824354675538"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-01-06T11:04:45.641Z","publish_time":1641467037133,"_cnpm_publish_time":1641467037133},"2.4.2":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"dependencies":{"is-get-set-prop":"^1.0.0","is-js-type":"^2.0.0","is-obj-prop":"^1.0.0","is-proto-prop":"^2.0.0","natural-compare":"^1.4.0"},"description":"Canonical linting rules for ESLint.","devDependencies":{"@babel/cli":"^7.16.0","@babel/core":"^7.16.5","@babel/eslint-parser":"^7.16.5","@babel/node":"^7.16.5","@babel/plugin-transform-react-jsx":"^7.16.5","@babel/preset-env":"^7.16.5","ajv":"^8.8.2","babel-plugin-add-module-exports":"^1.0.4","eclint":"^2.8.1","eslint":"^8.5.0","eslint-config-canonical":"^32.46.1","eslint-plugin-eslint-plugin":"^4.1.0","gitdown":"^3.1.4","glob":"^7.2.0","husky":"^7.0.4","jsonlint":"^1.6.3","lodash":"^4.17.21","mocha":"^9.1.3","rimraf":"^3.0.2","semantic-release":"^18.0.1"},"engines":{"node":">=12.0.0"},"keywords":["eslint","plugin","canonical"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-canonical","peerDependencies":{"eslint":"^8.5.0"},"repository":{"type":"git","url":"git+https://github.com/gajus/eslint-plugin-canonical.git"},"scripts":{"build":"rimraf ./dist && babel ./src --out-dir ./dist --copy-files","check-docs":"babel-node ./src/bin/checkDocs","check-tests":"babel-node ./src/bin/checkTests","create-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run documentation-add-assertions","documentation-add-assertions":"babel-node ./src/bin/addAssertions","format-json":"jsonlint --sort-keys --in-place --indent \"  \" ./src/configs/recommended.json","lint":"eslint ./src ./tests","test":"mocha --require @babel/register ./tests/rules/index.js"},"version":"2.4.2","gitHead":"e9b0eb3d5449689bfdea58c5534bf47ec0d9e1e8","bugs":{"url":"https://github.com/gajus/eslint-plugin-canonical/issues"},"homepage":"https://github.com/gajus/eslint-plugin-canonical#readme","_id":"eslint-plugin-canonical@2.4.2","_nodeVersion":"16.13.1","_npmVersion":"7.24.2","dist":{"shasum":"02a8af91c403f05eac260ebb0ca96897c504d3d7","size":17726,"noattachment":false,"key":"/eslint-plugin-canonical/-/eslint-plugin-canonical-2.4.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/eslint-plugin-canonical/download/eslint-plugin-canonical-2.4.2.tgz"},"_npmUser":{"name":"gajus","email":"gajus@gajus.com"},"directories":{},"maintainers":[{"name":"gajus","email":"gk@anuary.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/eslint-plugin-canonical_2.4.2_1639949196407_0.0920610668230819"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-19T21:26:51.552Z","publish_time":1639949196528,"_cnpm_publish_time":1639949196528},"2.4.1":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"dependencies":{"is-get-set-prop":"^1.0.0","is-js-type":"^2.0.0","is-obj-prop":"^1.0.0","is-proto-prop":"^2.0.0","natural-compare":"^1.4.0"},"description":"Canonical linting rules for ESLint.","devDependencies":{"@babel/cli":"^7.16.0","@babel/core":"^7.16.5","@babel/eslint-parser":"^7.16.5","@babel/node":"^7.16.5","@babel/plugin-transform-react-jsx":"^7.16.5","@babel/preset-env":"^7.16.5","ajv":"^8.8.2","babel-plugin-add-module-exports":"^1.0.4","eclint":"^2.8.1","eslint":"^8.5.0","eslint-config-canonical":"^32.46.1","eslint-plugin-eslint-plugin":"^4.1.0","gitdown":"^3.1.4","glob":"^7.2.0","husky":"^7.0.4","jsonlint":"^1.6.3","lodash":"^4.17.21","mocha":"^9.1.3","rimraf":"^3.0.2","semantic-release":"^18.0.1"},"engines":{"node":">=12.0.0"},"keywords":["eslint","plugin","canonical"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-canonical","peerDependencies":{"eslint":"^8.5.0"},"repository":{"type":"git","url":"git+https://github.com/gajus/eslint-plugin-canonical.git"},"scripts":{"build":"rimraf ./dist && babel ./src --out-dir ./dist --copy-files","check-docs":"babel-node ./src/bin/checkDocs","check-tests":"babel-node ./src/bin/checkTests","create-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run documentation-add-assertions","documentation-add-assertions":"babel-node ./src/bin/addAssertions","format-json":"jsonlint --sort-keys --in-place --indent \"  \" ./src/configs/recommended.json","lint":"eslint ./src ./tests","test":"mocha --require @babel/register ./tests/rules/index.js"},"version":"2.4.1","gitHead":"2a804fcb9c96dc60efc895e04b2ea8afb4d5ea78","bugs":{"url":"https://github.com/gajus/eslint-plugin-canonical/issues"},"homepage":"https://github.com/gajus/eslint-plugin-canonical#readme","_id":"eslint-plugin-canonical@2.4.1","_nodeVersion":"16.13.1","_npmVersion":"7.24.2","dist":{"shasum":"14a7c4d43552c3fdb73afec12f3a65e3b111716c","size":17655,"noattachment":false,"key":"/eslint-plugin-canonical/-/eslint-plugin-canonical-2.4.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/eslint-plugin-canonical/download/eslint-plugin-canonical-2.4.1.tgz"},"_npmUser":{"name":"gajus","email":"gajus@gajus.com"},"directories":{},"maintainers":[{"name":"gajus","email":"gk@anuary.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/eslint-plugin-canonical_2.4.1_1639938362308_0.692508590457745"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-19T18:26:14.424Z","publish_time":1639938362497,"_cnpm_publish_time":1639938362497},"2.4.0":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"dependencies":{"is-get-set-prop":"^1.0.0","is-js-type":"^2.0.0","is-obj-prop":"^1.0.0","is-proto-prop":"^2.0.0","natural-compare":"^1.4.0"},"description":"Canonical linting rules for ESLint.","devDependencies":{"@babel/cli":"^7.16.0","@babel/core":"^7.16.5","@babel/eslint-parser":"^7.16.5","@babel/node":"^7.16.5","@babel/plugin-transform-react-jsx":"^7.16.5","@babel/preset-env":"^7.16.5","ajv":"^8.8.2","babel-plugin-add-module-exports":"^1.0.4","eclint":"^2.8.1","eslint":"^8.5.0","eslint-config-canonical":"^32.46.1","eslint-plugin-eslint-plugin":"^4.1.0","gitdown":"^3.1.4","glob":"^7.2.0","husky":"^7.0.4","jsonlint":"^1.6.3","lodash":"^4.17.21","mocha":"^9.1.3","rimraf":"^3.0.2","semantic-release":"^18.0.1"},"engines":{"node":">=12.0.0"},"keywords":["eslint","plugin","canonical"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-canonical","peerDependencies":{"eslint":"^8.5.0"},"repository":{"type":"git","url":"git+https://github.com/gajus/eslint-plugin-canonical.git"},"scripts":{"build":"rimraf ./dist && babel ./src --out-dir ./dist --copy-files","check-docs":"babel-node ./src/bin/checkDocs","check-tests":"babel-node ./src/bin/checkTests","create-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run documentation-add-assertions","documentation-add-assertions":"babel-node ./src/bin/addAssertions","format-json":"jsonlint --sort-keys --in-place --indent \"  \" ./src/configs/recommended.json","lint":"eslint ./src ./tests","test":"mocha --require @babel/register ./tests/rules/index.js"},"version":"2.4.0","gitHead":"ab3a17bd2f4447821a88079428408b8fc44c7c06","bugs":{"url":"https://github.com/gajus/eslint-plugin-canonical/issues"},"homepage":"https://github.com/gajus/eslint-plugin-canonical#readme","_id":"eslint-plugin-canonical@2.4.0","_nodeVersion":"16.13.1","_npmVersion":"7.24.2","dist":{"shasum":"18221273671efeb5911c8faade8dd1df48a204b5","size":17620,"noattachment":false,"key":"/eslint-plugin-canonical/-/eslint-plugin-canonical-2.4.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/eslint-plugin-canonical/download/eslint-plugin-canonical-2.4.0.tgz"},"_npmUser":{"name":"gajus","email":"gajus@gajus.com"},"directories":{},"maintainers":[{"name":"gajus","email":"gk@anuary.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/eslint-plugin-canonical_2.4.0_1639937293362_0.44479176162404865"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-19T18:10:19.021Z","publish_time":1639937293516,"_cnpm_publish_time":1639937293516},"2.3.0":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"dependencies":{"is-get-set-prop":"^1.0.0","is-js-type":"^2.0.0","is-obj-prop":"^1.0.0","is-proto-prop":"^2.0.0","natural-compare":"^1.4.0"},"description":"Canonical linting rules for ESLint.","devDependencies":{"@babel/cli":"^7.16.0","@babel/core":"^7.16.5","@babel/eslint-parser":"^7.16.5","@babel/node":"^7.16.5","@babel/plugin-transform-react-jsx":"^7.16.5","@babel/preset-env":"^7.16.5","ajv":"^8.8.2","babel-plugin-add-module-exports":"^1.0.4","eclint":"^2.8.1","eslint":"^8.5.0","eslint-config-canonical":"^32.46.1","eslint-plugin-eslint-plugin":"^4.1.0","gitdown":"^3.1.4","glob":"^7.2.0","husky":"^7.0.4","jsonlint":"^1.6.3","lodash":"^4.17.21","mocha":"^9.1.3","rimraf":"^3.0.2","semantic-release":"^18.0.1"},"engines":{"node":">=12.0.0"},"keywords":["eslint","plugin","canonical"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-canonical","peerDependencies":{"eslint":"^8.5.0"},"repository":{"type":"git","url":"git+https://github.com/gajus/eslint-plugin-canonical.git"},"scripts":{"build":"rimraf ./dist && babel ./src --out-dir ./dist --copy-files","check-docs":"babel-node ./src/bin/checkDocs","check-tests":"babel-node ./src/bin/checkTests","create-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run documentation-add-assertions","documentation-add-assertions":"babel-node ./src/bin/addAssertions","format-json":"jsonlint --sort-keys --in-place --indent \"  \" ./src/configs/recommended.json","lint":"eslint ./src ./tests","test":"mocha --require @babel/register ./tests/rules/index.js"},"version":"2.3.0","gitHead":"5bb7c228208874e4d73cd4935815bce63e9e338a","bugs":{"url":"https://github.com/gajus/eslint-plugin-canonical/issues"},"homepage":"https://github.com/gajus/eslint-plugin-canonical#readme","_id":"eslint-plugin-canonical@2.3.0","_nodeVersion":"16.13.1","_npmVersion":"7.24.2","dist":{"shasum":"b392d92b45071689342b1ed9eb5e18e353426fc4","size":17563,"noattachment":false,"key":"/eslint-plugin-canonical/-/eslint-plugin-canonical-2.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/eslint-plugin-canonical/download/eslint-plugin-canonical-2.3.0.tgz"},"_npmUser":{"name":"gajus","email":"gajus@gajus.com"},"directories":{},"maintainers":[{"name":"gajus","email":"gk@anuary.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/eslint-plugin-canonical_2.3.0_1639934114629_0.0504978264912026"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-19T17:17:04.030Z","publish_time":1639934114891,"_cnpm_publish_time":1639934114891},"2.2.0":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"dependencies":{"is-get-set-prop":"^1.0.0","is-js-type":"^2.0.0","is-obj-prop":"^1.0.0","is-proto-prop":"^2.0.0","natural-compare":"^1.4.0"},"description":"Canonical linting rules for ESLint.","devDependencies":{"@babel/cli":"^7.16.0","@babel/core":"^7.16.5","@babel/eslint-parser":"^7.16.5","@babel/node":"^7.16.5","@babel/plugin-transform-react-jsx":"^7.16.5","@babel/preset-env":"^7.16.5","ajv":"^8.8.2","babel-plugin-add-module-exports":"^1.0.4","eclint":"^2.8.1","eslint":"^8.5.0","eslint-config-canonical":"^32.46.1","eslint-plugin-eslint-plugin":"^4.1.0","gitdown":"^3.1.4","glob":"^7.2.0","husky":"^7.0.4","jsonlint":"^1.6.3","lodash":"^4.17.21","mocha":"^9.1.3","rimraf":"^3.0.2","semantic-release":"^18.0.1"},"engines":{"node":">=12.0.0"},"keywords":["eslint","plugin","canonical"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-canonical","peerDependencies":{"eslint":"^8.5.0"},"repository":{"type":"git","url":"git+https://github.com/gajus/eslint-plugin-canonical.git"},"scripts":{"build":"rimraf ./dist && babel ./src --out-dir ./dist --copy-files","check-docs":"babel-node ./src/bin/checkDocs","check-tests":"babel-node ./src/bin/checkTests","create-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run documentation-add-assertions","documentation-add-assertions":"babel-node ./src/bin/addAssertions","format-json":"jsonlint --sort-keys --in-place --indent \"  \" ./src/configs/recommended.json","lint":"eslint ./src ./tests","test":"mocha --require @babel/register ./tests/rules/index.js"},"version":"2.2.0","gitHead":"e4a5e0ace23300ad7ebfe190a9c9552ef1777138","bugs":{"url":"https://github.com/gajus/eslint-plugin-canonical/issues"},"homepage":"https://github.com/gajus/eslint-plugin-canonical#readme","_id":"eslint-plugin-canonical@2.2.0","_nodeVersion":"16.13.1","_npmVersion":"7.24.2","dist":{"shasum":"3006f210e87368f92f26fa97f78b5251802f287e","size":17034,"noattachment":false,"key":"/eslint-plugin-canonical/-/eslint-plugin-canonical-2.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/eslint-plugin-canonical/download/eslint-plugin-canonical-2.2.0.tgz"},"_npmUser":{"name":"gajus","email":"gajus@gajus.com"},"directories":{},"maintainers":[{"name":"gajus","email":"gk@anuary.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/eslint-plugin-canonical_2.2.0_1639930471586_0.08179426032389259"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2021-12-19T16:14:38.429Z","publish_time":1639930471742,"_cnpm_publish_time":1639930471742},"2.1.0":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"description":"Canonical linting rules for ESLint.","devDependencies":{"@babel/cli":"^7.15.7","@babel/core":"^7.15.8","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.15.8","@babel/plugin-transform-react-jsx":"^7.14.9","@babel/preset-env":"^7.15.8","ajv":"^8.6.3","babel-plugin-add-module-exports":"^1.0.4","eclint":"^2.8.1","eslint":"^8.1.0","eslint-config-canonical":"^32.10.1","eslint-plugin-eslint-plugin":"^4.0.2","gitdown":"^3.1.4","glob":"^7.2.0","husky":"^7.0.4","jsonlint":"^1.6.3","lodash":"^4.17.21","mocha":"^9.1.3","rimraf":"^3.0.2","semantic-release":"^18.0.0"},"engines":{"node":">=12.0.0"},"keywords":["eslint","plugin","canonical"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-canonical","peerDependencies":{"eslint":"^8.1.0"},"repository":{"type":"git","url":"git+https://github.com/gajus/eslint-plugin-canonical.git"},"scripts":{"build":"rimraf ./dist && babel ./src --out-dir ./dist --copy-files","check-docs":"babel-node ./src/bin/checkDocs","check-tests":"babel-node ./src/bin/checkTests","create-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run documentation-add-assertions","documentation-add-assertions":"babel-node ./src/bin/addAssertions","format-json":"jsonlint --sort-keys --in-place --indent \"  \" ./src/configs/recommended.json","lint":"eslint ./src ./tests","test":"mocha --require @babel/register ./tests/rules/index.js"},"version":"2.1.0","dependencies":{"is-get-set-prop":"^1.0.0","is-js-type":"^2.0.0","is-obj-prop":"^1.0.0","is-proto-prop":"^2.0.0","natural-compare":"^1.4.0"},"gitHead":"ffd0355cba5f3a253e7773453eb1f9324d1b4440","bugs":{"url":"https://github.com/gajus/eslint-plugin-canonical/issues"},"homepage":"https://github.com/gajus/eslint-plugin-canonical#readme","_id":"eslint-plugin-canonical@2.1.0","_nodeVersion":"16.12.0","_npmVersion":"7.24.2","dist":{"shasum":"367b77a07af2929e2851f91f3896140c2e708e52","size":16381,"noattachment":false,"key":"/eslint-plugin-canonical/-/eslint-plugin-canonical-2.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/eslint-plugin-canonical/download/eslint-plugin-canonical-2.1.0.tgz"},"_npmUser":{"name":"gajus","email":"gajus@gajus.com"},"directories":{},"maintainers":[{"name":"gajus","email":"gk@anuary.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/eslint-plugin-canonical_2.1.0_1635230324868_0.1331993816470154"},"_hasShrinkwrap":false,"publish_time":1635230325040,"_cnpm_publish_time":1635230325040},"2.0.0":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"description":"Canonical linting rules for ESLint.","devDependencies":{"@babel/cli":"^7.15.7","@babel/core":"^7.15.8","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.15.8","@babel/plugin-transform-react-jsx":"^7.14.9","@babel/preset-env":"^7.15.8","ajv":"^8.6.3","babel-plugin-add-module-exports":"^1.0.4","eclint":"^2.8.1","eslint":"^8.1.0","eslint-config-canonical":"^32.0.0","eslint-plugin-eslint-plugin":"^4.0.1","gitdown":"^3.1.4","glob":"^7.2.0","husky":"^7.0.4","jsonlint":"^1.6.3","lodash":"^4.17.21","mocha":"^9.1.3","rimraf":"^3.0.2","semantic-release":"^18.0.0"},"engines":{"node":">=12.0.0"},"keywords":["eslint","plugin","canonical"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-canonical","peerDependencies":{"eslint":"^8.1.0"},"repository":{"type":"git","url":"git+https://github.com/gajus/eslint-plugin-canonical.git"},"scripts":{"build":"rimraf ./dist && babel ./src --out-dir ./dist --copy-files","check-docs":"babel-node ./src/bin/checkDocs","check-tests":"babel-node ./src/bin/checkTests","create-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run documentation-add-assertions","documentation-add-assertions":"babel-node ./src/bin/addAssertions","format-json":"jsonlint --sort-keys --in-place --indent \"  \" ./src/configs/recommended.json","lint":"eslint ./src ./tests","test":"mocha --require @babel/register ./tests/rules/index.js"},"version":"2.0.0","dependencies":{"is-get-set-prop":"^1.0.0","is-js-type":"^2.0.0","is-obj-prop":"^1.0.0","is-proto-prop":"^2.0.0","natural-compare":"^1.4.0"},"gitHead":"4e40240fe9efeb8e51d5540c8250122c7c067003","bugs":{"url":"https://github.com/gajus/eslint-plugin-canonical/issues"},"homepage":"https://github.com/gajus/eslint-plugin-canonical#readme","_id":"eslint-plugin-canonical@2.0.0","_nodeVersion":"16.12.0","_npmVersion":"7.24.2","dist":{"shasum":"4b485840d0e42cef11b9b075ea3c3eb62e66a469","size":15595,"noattachment":false,"key":"/eslint-plugin-canonical/-/eslint-plugin-canonical-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/eslint-plugin-canonical/download/eslint-plugin-canonical-2.0.0.tgz"},"_npmUser":{"name":"gajus","email":"gajus@gajus.com"},"directories":{},"maintainers":[{"name":"gajus","email":"gk@anuary.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/eslint-plugin-canonical_2.0.0_1635201585486_0.8572182816542395"},"_hasShrinkwrap":false,"publish_time":1635201585720,"_cnpm_publish_time":1635201585720},"1.3.0":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"description":"Canonical linting rules for ESLint.","devDependencies":{"@babel/cli":"^7.15.4","@babel/core":"^7.15.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.15.4","@babel/plugin-transform-react-jsx":"^7.14.9","@babel/preset-env":"^7.15.6","ajv":"^8.6.3","babel-plugin-add-module-exports":"^1.0.4","eclint":"^2.8.1","eslint":"^7.32.0","eslint-config-canonical":"^27.0.1","eslint-plugin-eslint-plugin":"^4.0.1","gitdown":"^3.1.4","glob":"^7.1.7","husky":"^7.0.2","jsonlint":"^1.6.3","lodash":"^4.17.21","mocha":"^9.1.1","rimraf":"^3.0.2","semantic-release":"^17.4.7"},"engines":{"node":">=12.0.0"},"keywords":["eslint","plugin","canonical"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-canonical","peerDependencies":{"eslint":"^7.32.0"},"repository":{"type":"git","url":"git+https://github.com/gajus/eslint-plugin-canonical.git"},"scripts":{"build":"rimraf ./dist && babel ./src --out-dir ./dist --copy-files","check-docs":"babel-node ./src/bin/checkDocs","check-tests":"babel-node ./src/bin/checkTests","create-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run documentation-add-assertions","documentation-add-assertions":"babel-node ./src/bin/addAssertions","format-json":"jsonlint --sort-keys --in-place --indent \"  \" ./src/configs/recommended.json","lint":"eslint ./src ./tests","test":"mocha --require @babel/register ./tests/rules/index.js"},"version":"1.3.0","dependencies":{"natural-compare":"^1.4.0"},"gitHead":"c3d637e4ea55358e9f7ea2b3d9a56f5cd2447177","bugs":{"url":"https://github.com/gajus/eslint-plugin-canonical/issues"},"homepage":"https://github.com/gajus/eslint-plugin-canonical#readme","_id":"eslint-plugin-canonical@1.3.0","_nodeVersion":"16.12.0","_npmVersion":"7.24.2","dist":{"shasum":"a0fc286de21f6ef7c2d28bb59622f82ada469caf","size":14364,"noattachment":false,"key":"/eslint-plugin-canonical/-/eslint-plugin-canonical-1.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/eslint-plugin-canonical/download/eslint-plugin-canonical-1.3.0.tgz"},"_npmUser":{"name":"gajus","email":"gajus@gajus.com"},"directories":{},"maintainers":[{"name":"gajus","email":"gk@anuary.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/eslint-plugin-canonical_1.3.0_1635193211504_0.4364345794847382"},"_hasShrinkwrap":false,"publish_time":1635193211646,"_cnpm_publish_time":1635193211646},"1.2.0":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"description":"Canonical linting rules for ESLint.","devDependencies":{"@babel/cli":"^7.15.4","@babel/core":"^7.15.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.15.4","@babel/plugin-transform-react-jsx":"^7.14.9","@babel/preset-env":"^7.15.6","ajv":"^8.6.3","babel-plugin-add-module-exports":"^1.0.4","eclint":"^2.8.1","eslint":"^7.32.0","eslint-config-canonical":"^27.0.1","gitdown":"^3.1.4","glob":"^7.1.7","husky":"^7.0.2","jsonlint":"^1.6.3","lodash":"^4.17.21","mocha":"^9.1.1","rimraf":"^3.0.2","semantic-release":"^17.4.7"},"engines":{"node":">=12.0.0"},"keywords":["eslint","plugin","canonical"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-canonical","peerDependencies":{"eslint":"^7.32.0"},"repository":{"type":"git","url":"git+https://github.com/gajus/eslint-plugin-canonical.git"},"scripts":{"build":"rimraf ./dist && babel ./src --out-dir ./dist --copy-files","check-docs":"babel-node ./src/bin/checkDocs","check-tests":"babel-node ./src/bin/checkTests","create-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run documentation-add-assertions","documentation-add-assertions":"babel-node ./src/bin/addAssertions","format-json":"jsonlint --sort-keys --in-place --indent \"  \" ./src/configs/recommended.json","lint":"eslint ./src ./tests","test":"mocha --require @babel/register ./tests/rules/index.js"},"version":"1.2.0","dependencies":{"natural-compare":"^1.4.0"},"gitHead":"715c3aa81518c4c76396ff64bc15c93326ec75f5","bugs":{"url":"https://github.com/gajus/eslint-plugin-canonical/issues"},"homepage":"https://github.com/gajus/eslint-plugin-canonical#readme","_id":"eslint-plugin-canonical@1.2.0","_nodeVersion":"16.12.0","_npmVersion":"7.24.2","dist":{"shasum":"7fec4a1f888ed60759dd4af75a04a211e5291928","size":10625,"noattachment":false,"key":"/eslint-plugin-canonical/-/eslint-plugin-canonical-1.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/eslint-plugin-canonical/download/eslint-plugin-canonical-1.2.0.tgz"},"_npmUser":{"name":"gajus","email":"gajus@gajus.com"},"directories":{},"maintainers":[{"name":"gajus","email":"gk@anuary.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/eslint-plugin-canonical_1.2.0_1634789295024_0.39627707802955814"},"_hasShrinkwrap":false,"publish_time":1634789295412,"_cnpm_publish_time":1634789295412},"1.1.0":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"description":"Canonical linting rules for ESLint.","devDependencies":{"@babel/cli":"^7.15.4","@babel/core":"^7.15.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.15.4","@babel/preset-env":"^7.15.6","ajv":"^8.6.3","babel-plugin-add-module-exports":"^1.0.4","eclint":"^2.8.1","eslint":"^7.32.0","eslint-config-canonical":"^27.0.1","gitdown":"^3.1.4","glob":"^7.1.7","husky":"^7.0.2","jsonlint":"^1.6.3","lodash":"^4.17.21","mocha":"^9.1.1","rimraf":"^3.0.2","semantic-release":"^17.4.7"},"engines":{"node":">=12.0.0"},"keywords":["eslint","plugin","canonical"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-canonical","peerDependencies":{"eslint":"^7.32.0"},"repository":{"type":"git","url":"git+https://github.com/gajus/eslint-plugin-canonical.git"},"scripts":{"build":"rimraf ./dist && babel ./src --out-dir ./dist --copy-files","check-docs":"babel-node ./src/bin/checkDocs","check-tests":"babel-node ./src/bin/checkTests","create-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run documentation-add-assertions","documentation-add-assertions":"babel-node ./src/bin/addAssertions","format-json":"jsonlint --sort-keys --in-place --indent \"  \" ./src/configs/recommended.json","lint":"eslint ./src ./tests","test":"mocha --require @babel/register ./tests/rules/index.js"},"version":"1.1.0","dependencies":{"natural-compare":"^1.4.0"},"gitHead":"aa5d6dcad10a8494ec853e7c74ae4775d0d6f8ef","bugs":{"url":"https://github.com/gajus/eslint-plugin-canonical/issues"},"homepage":"https://github.com/gajus/eslint-plugin-canonical#readme","_id":"eslint-plugin-canonical@1.1.0","_nodeVersion":"16.12.0","_npmVersion":"7.24.2","dist":{"shasum":"1ef778b0530fe9f9be6472310ca9ced849060ae0","size":10236,"noattachment":false,"key":"/eslint-plugin-canonical/-/eslint-plugin-canonical-1.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/eslint-plugin-canonical/download/eslint-plugin-canonical-1.1.0.tgz"},"_npmUser":{"name":"gajus","email":"gajus@gajus.com"},"directories":{},"maintainers":[{"name":"gajus","email":"gk@anuary.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/eslint-plugin-canonical_1.1.0_1634786420680_0.9448264651567959"},"_hasShrinkwrap":false,"publish_time":1634786420812,"_cnpm_publish_time":1634786420812},"1.0.2":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"description":"Canonical linting rules for ESLint.","devDependencies":{"@babel/cli":"^7.15.4","@babel/core":"^7.15.5","@babel/eslint-parser":"^7.15.8","@babel/node":"^7.15.4","@babel/preset-env":"^7.15.6","ajv":"^8.6.3","babel-plugin-add-module-exports":"^1.0.4","eclint":"^2.8.1","eslint":"^7.32.0","eslint-config-canonical":"^27.0.1","gitdown":"^3.1.4","glob":"^7.1.7","husky":"^7.0.2","jsonlint":"^1.6.3","lodash":"^4.17.21","mocha":"^9.1.1","rimraf":"^3.0.2","semantic-release":"^17.4.7"},"engines":{"node":">=12.0.0"},"keywords":["eslint","plugin","canonical"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-canonical","peerDependencies":{"eslint":"^7.32.0"},"repository":{"type":"git","url":"git+https://github.com/gajus/eslint-plugin-canonical.git"},"scripts":{"build":"rimraf ./dist && babel ./src --out-dir ./dist --copy-files","check-docs":"babel-node ./src/bin/checkDocs","check-tests":"babel-node ./src/bin/checkTests","create-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run documentation-add-assertions","documentation-add-assertions":"babel-node ./src/bin/addAssertions","format-json":"jsonlint --sort-keys --in-place --indent \"  \" ./src/configs/recommended.json","lint":"eslint ./src ./tests","test":"mocha --require @babel/register ./tests/rules/index.js"},"version":"1.0.2","gitHead":"27552c3f700c2af9e6310a8173814dadf1687b6a","bugs":{"url":"https://github.com/gajus/eslint-plugin-canonical/issues"},"homepage":"https://github.com/gajus/eslint-plugin-canonical#readme","_id":"eslint-plugin-canonical@1.0.2","_nodeVersion":"16.12.0","_npmVersion":"7.24.2","dist":{"shasum":"9e20b85ef2e781603fada20fad3fbc8209d64a51","size":6926,"noattachment":false,"key":"/eslint-plugin-canonical/-/eslint-plugin-canonical-1.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/eslint-plugin-canonical/download/eslint-plugin-canonical-1.0.2.tgz"},"_npmUser":{"name":"gajus","email":"gajus@gajus.com"},"directories":{},"maintainers":[{"name":"gajus","email":"gk@anuary.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/eslint-plugin-canonical_1.0.2_1634781259263_0.9854133346426843"},"_hasShrinkwrap":false,"publish_time":1634781259435,"_cnpm_publish_time":1634781259435},"1.0.1":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"description":"Canonical linting rules for ESLint.","devDependencies":{"@babel/cli":"^7.15.4","@babel/core":"^7.15.5","@babel/eslint-parser":"^7.15.8","lodash":"^4.17.21","@babel/node":"^7.15.4","@babel/preset-env":"^7.15.6","ajv":"^8.6.3","eslint":"^7.32.0","eslint-config-canonical":"^27.0.1","gitdown":"^3.1.4","glob":"^7.1.7","husky":"^7.0.2","jsonlint":"^1.6.3","mocha":"^9.1.1","rimraf":"^3.0.2","semantic-release":"^17.4.7"},"engines":{"node":">=12.0.0"},"keywords":["eslint","plugin","canonical"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-canonical","peerDependencies":{"eslint":"^7.32.0"},"repository":{"type":"git","url":"git+https://github.com/gajus/eslint-plugin-canonical.git"},"scripts":{"build":"rimraf ./dist && babel ./src --out-dir ./dist --copy-files","check-docs":"babel-node ./src/bin/checkDocs","check-tests":"babel-node ./src/bin/checkTests","create-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run documentation-add-assertions","documentation-add-assertions":"babel-node ./src/bin/addAssertions","format-json":"jsonlint --sort-keys --in-place --indent \"  \" ./src/configs/recommended.json","lint":"eslint ./src ./tests","test":"mocha --require @babel/register ./tests/rules/index.js"},"version":"1.0.1","gitHead":"a5b11074f6c40effc28452681707132c6f70a670","bugs":{"url":"https://github.com/gajus/eslint-plugin-canonical/issues"},"homepage":"https://github.com/gajus/eslint-plugin-canonical#readme","_id":"eslint-plugin-canonical@1.0.1","_nodeVersion":"16.12.0","_npmVersion":"7.24.2","dist":{"shasum":"6f7de45e2f417e3971cb991703aa5ff8c2c06061","size":6883,"noattachment":false,"key":"/eslint-plugin-canonical/-/eslint-plugin-canonical-1.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/eslint-plugin-canonical/download/eslint-plugin-canonical-1.0.1.tgz"},"_npmUser":{"name":"gajus","email":"gajus@gajus.com"},"directories":{},"maintainers":[{"name":"gajus","email":"gk@anuary.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/eslint-plugin-canonical_1.0.1_1634780057363_0.06334440517459594"},"_hasShrinkwrap":false,"publish_time":1634780057533,"_cnpm_publish_time":1634780057533},"1.0.0":{"author":{"name":"Gajus Kuizinas","email":"gajus@gajus.com","url":"http://gajus.com"},"dependencies":{"@babel/eslint-parser":"^7.15.8","lodash":"^4.17.21"},"description":"Canonical linting rules for ESLint.","devDependencies":{"@babel/cli":"^7.15.4","@babel/core":"^7.15.5","@babel/node":"^7.15.4","@babel/plugin-proposal-object-rest-spread":"^7.15.6","@babel/preset-env":"^7.15.6","@babel/register":"^7.15.3","ajv":"^8.6.3","babel-eslint":"^10.1.0","babel-plugin-add-module-exports":"^1.0.4","chai":"^4.3.4","eslint":"^7.32.0","eslint-config-canonical":"^27.0.1","gitdown":"^3.1.4","glob":"^7.1.7","husky":"^7.0.2","jsonlint":"^1.6.3","mocha":"^9.1.1","rimraf":"^3.0.2","semantic-release":"^17.4.7"},"engines":{"node":">=12.0.0"},"keywords":["eslint","plugin","canonical"],"license":"BSD-3-Clause","main":"./dist/index.js","name":"eslint-plugin-canonical","peerDependencies":{"eslint":"^7.32.0"},"repository":{"type":"git","url":"git+https://github.com/gajus/eslint-plugin-canonical.git"},"scripts":{"build":"rimraf ./dist && babel ./src --out-dir ./dist --copy-files","check-docs":"babel-node ./src/bin/checkDocs","check-tests":"babel-node ./src/bin/checkTests","create-readme":"gitdown ./.README/README.md --output-file ./README.md && npm run documentation-add-assertions","documentation-add-assertions":"babel-node ./src/bin/addAssertions","format-json":"jsonlint --sort-keys --in-place --indent \"  \" ./src/configs/recommended.json","lint":"eslint ./src ./tests","test":"mocha --require @babel/register ./tests/rules/index.js"},"version":"1.0.0","gitHead":"43d2452bf066c474b6b5a2a733a077c568d7f809","bugs":{"url":"https://github.com/gajus/eslint-plugin-canonical/issues"},"homepage":"https://github.com/gajus/eslint-plugin-canonical#readme","_id":"eslint-plugin-canonical@1.0.0","_nodeVersion":"16.12.0","_npmVersion":"7.24.2","dist":{"shasum":"09b8022b247b6c3b827d8ec75d9f0e3a74e1c815","size":8837,"noattachment":false,"key":"/eslint-plugin-canonical/-/eslint-plugin-canonical-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/eslint-plugin-canonical/download/eslint-plugin-canonical-1.0.0.tgz"},"_npmUser":{"name":"gajus","email":"gajus@gajus.com"},"directories":{},"maintainers":[{"name":"gajus","email":"gk@anuary.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/eslint-plugin-canonical_1.0.0_1634778447462_0.5244042404987697"},"_hasShrinkwrap":false,"publish_time":1634778447645,"_cnpm_publish_time":1634778447645}},"readme":"<a name=\"eslint-plugin-canonical\"></a>\n# eslint-plugin-canonical\n\n[![NPM version](http://img.shields.io/npm/v/eslint-plugin-canonical.svg?style=flat-square)](https://www.npmjs.org/package/eslint-plugin-canonical)\n[![Travis build status](http://img.shields.io/travis/gajus/eslint-plugin-canonical/master.svg?style=flat-square)](https://travis-ci.com/github/gajus/eslint-plugin-canonical)\n[![js-canonical-style](https://img.shields.io/badge/code%20style-canonical-blue.svg?style=flat-square)](https://github.com/gajus/canonical)\n\nESLint rules for [Canonical ruleset](https://github.com/gajus/eslint-config-canonical).\n\n* [eslint-plugin-canonical](#eslint-plugin-canonical)\n    * [Installation](#eslint-plugin-canonical-installation)\n    * [Configuration](#eslint-plugin-canonical-configuration)\n        * [Shareable configurations](#eslint-plugin-canonical-configuration-shareable-configurations)\n    * [Rules](#eslint-plugin-canonical-rules)\n        * [`destructuring-property-newline`](#eslint-plugin-canonical-rules-destructuring-property-newline)\n        * [`export-specifier-newline`](#eslint-plugin-canonical-rules-export-specifier-newline)\n        * [`filename-match-exported`](#eslint-plugin-canonical-rules-filename-match-exported)\n        * [`filename-match-regex`](#eslint-plugin-canonical-rules-filename-match-regex)\n        * [`filename-no-index`](#eslint-plugin-canonical-rules-filename-no-index)\n        * [`id-match`](#eslint-plugin-canonical-rules-id-match)\n        * [`import-specifier-newline`](#eslint-plugin-canonical-rules-import-specifier-newline)\n        * [`no-restricted-strings`](#eslint-plugin-canonical-rules-no-restricted-strings)\n        * [`no-use-extend-native`](#eslint-plugin-canonical-rules-no-use-extend-native)\n        * [`sort-keys`](#eslint-plugin-canonical-rules-sort-keys)\n\n\n<a name=\"eslint-plugin-canonical-installation\"></a>\n## Installation\n\n<!-- -->\n\n```bash\nnpm install eslint --save-dev\nnpm install @babel/eslint-parser --save-dev\nnpm install eslint-plugin-canonical --save-dev\n```\n\n<a name=\"eslint-plugin-canonical-configuration\"></a>\n## Configuration\n\n1. Set `parser` property to `babel-eslint`.\n1. Add `plugins` section and specify `eslint-plugin-canonical` as a plugin.\n1. Enable rules.\n\n<!-- -->\n\n```json\n{\n  \"parser\": \"@babel/eslint-parser\",\n  \"plugins\": [\n    \"canonical\"\n  ],\n  \"rules\": {\n    \"canonical/filename-match-exported\": 0,\n    \"canonical/filename-match-regex\": 0,\n    \"canonical/filename-no-index\": 0,\n    \"canonical/id-match\": [\n      2,\n      \"(^[A-Za-z]+(?:[A-Z][a-z]*)*\\\\d*$)|(^[A-Z]+(_[A-Z]+)*(_\\\\d$)*$)|(^(_|\\\\$)$)\",\n      {\n        \"ignoreDestructuring\": true,\n        \"ignoreNamedImports\": true,\n        \"onlyDeclarations\": true,\n        \"properties\": true\n      }\n    ],\n    \"canonical/no-restricted-strings\": 0,\n    \"canonical/no-use-extend-native\": 2,\n    \"canonical/sort-keys\": [\n      2,\n      \"asc\",\n      {\n        \"caseSensitive\": false,\n        \"natural\": true\n      }\n    ]\n  }\n}\n```\n\n<a name=\"eslint-plugin-canonical-configuration-shareable-configurations\"></a>\n### Shareable configurations\n\n<a name=\"eslint-plugin-canonical-configuration-shareable-configurations-recommended\"></a>\n#### Recommended\n\nThis plugin exports a [recommended configuration](./src/configs/recommended.json) that enforces Canonical type good practices.\n\nTo enable this configuration use the extends property in your `.eslintrc` config file:\n\n```json\n{\n  \"extends\": [\n    \"plugin:canonical/recommended\"\n  ],\n  \"plugins\": [\n    \"canonical\"\n  ]\n}\n```\n\nSee [ESLint documentation](https://eslint.org/docs/user-guide/configuring/configuration-files#extending-configuration-files) for more information about extending configuration files.\n\n<a name=\"eslint-plugin-canonical-rules\"></a>\n## Rules\n\n<!-- Rules are sorted alphabetically. -->\n\n<a name=\"eslint-plugin-canonical-rules-destructuring-property-newline\"></a>\n### <code>destructuring-property-newline</code>\n\nLike [`object-property-newline`](https://eslint.org/docs/rules/object-property-newline), but for destructuring.\n\nThe following patterns are considered problems:\n\n```js\nconst {a,b} = obj;\n// Message: undefined\n\nconst [a,b] = obj;\n// Message: undefined\n\nconst {a,b,c} = obj;\n// Message: undefined\n// Message: undefined\n\nconst {\na,b} = obj;\n// Message: undefined\n\n({a,b}) => {};\n// Message: undefined\n```\n\nThe following patterns are not considered problems:\n\n```js\nconst {a,\nb} = obj;\n\nconst {a} = obj;\n\nconst {\na\n} = obj;\n\n({a,\nb}) => {};\n\nconst [a,,b] = obj;\n```\n\n\n\n<a name=\"eslint-plugin-canonical-rules-export-specifier-newline\"></a>\n### <code>export-specifier-newline</code>\n\nForces every export specifier to be on a new line.\n\nTip: Combine this rule with `object-curly-newline` to have every specifier on its own line.\n\n```json\n\"object-curly-newline\": [\n  2,\n  {\n    \"ExportDeclaration\": \"always\"\n  }\n],\n```\n\nWorking together, both rules will produces exports such as:\n\n```ts\nexport { \n  a,\n  b,\n  c\n};\n```\n\nThe following patterns are considered problems:\n\n```js\nconst a = 1; const b = 2; const c = 3; export { a, b, c };\n// Message: undefined\n// Message: undefined\n\nconst a = 1; const b = 2; const c = 3; export { a, b, c, };\n// Message: undefined\n// Message: undefined\n\nconst a = 1; const b = 2; export { a as default, b }\n// Message: undefined\n```\n\nThe following patterns are not considered problems:\n\n```js\nexport { \n a,\nb,\nc\n } from 'foo'\n\nconst a = 1; const b = 2; const c = 3; export { \n a,\nb,\nc\n };\n\nexport * from 'foo'\n```\n\n\n\n<a name=\"eslint-plugin-canonical-rules-filename-match-exported\"></a>\n### <code>filename-match-exported</code>\n\nMatch the file name against the default exported value in the module. Files that don't have a default export will be ignored. The exports of `index.js` are matched against their parent directory.\n\n```js\n// Considered problem only if the file isn't named foo.js or foo/index.js\nexport default function foo() {}\n\n// Considered problem only if the file isn't named Foo.js or Foo/index.js\nmodule.exports = class Foo() {}\n\n// Considered problem only if the file isn't named someVariable.js or someVariable/index.js\nmodule.exports = someVariable;\n\n// Never considered a problem\nexport default { foo: \"bar\" };\n```\n\nIf your filename policy doesn't quite match with your variable naming policy, you can add one or multiple transforms:\n\n```json\n\"canonical/filename-match-exported\": [ 2, \"kebab\" ]\n```\n\nNow, in your code:\n\n```js\n// Considered problem only if file isn't named variable-name.js or variable-name/index.js\nexport default function variableName;\n```\n\nAvailable transforms:\n\n* snake\n* kebab\n* camel\n* pascal\n\nFor multiple transforms simply specify an array like this (null in this case stands for no transform):\n\n```json\n\"canonical/filename-match-exported\": [2, [ null, \"kebab\", \"snake\" ] ]\n```\n\nIf you prefer to use suffixes for your files (e.g. `Foo.react.js` for a React component file), you can use a second configuration parameter. It allows you to remove parts of a filename matching a regex pattern before transforming and matching against the export.\n\n```json\n\"canonical/filename-match-exported\": [ 2, null, \"\\\\.react$\" ]\n```\n\nNow, in your code:\n\n```js\n// Considered problem only if file isn't named variableName.react.js, variableName.js or variableName/index.js\nexport default function variableName;\n```\n\nIf you also want to match exported function calls you can use the third option (a boolean flag).\n\n```json\n\"canonical/filename-match-exported\": [ 2, null, null, true ]\n```\n\nNow, in your code:\n\n```js\n// Considered problem only if file isn't named functionName.js or functionName/index.js\nexport default functionName();\n```\n\nThe following patterns are considered problems:\n\n```js\nmodule.exports = exported;\n// Message: Filename 'fooBar' must match the exported name 'exported'.\n\nmodule.exports = class Foo {};\n// Message: Filename 'foo' must match the exported name 'Foo'.\n\nmodule.exports = class Foo { render() { return <span>Test Class</span>; } };\n// Message: Filename 'foo' must match the exported name 'Foo'.\n\nmodule.exports = function foo() {};\n// Message: Filename 'bar' must match the exported name 'foo'.\n\nmodule.exports = function foo() { return <span>Test Fn</span> };\n// Message: Filename 'bar' must match the exported name 'foo'.\n\nexport default exported;\n// Message: Filename 'fooBar' must match the exported name 'exported'.\n\nexport default class Foo {};\n// Message: Filename 'bar' must match the exported name 'Foo'.\n\nexport default class Foo { render() { return <span>Test Class</span>; } };\n// Message: Filename 'bar' must match the exported name 'Foo'.\n\nexport default function foo() {};\n// Message: The directory 'fooBar' must be named 'foo', after the exported value of its index file.\n\nexport default function foo() { return <span>Test Fn</span> };\n// Message: The directory 'fooBar' must be named 'foo', after the exported value of its index file.\n\nmodule.exports = exported;\n// Message: The directory 'eslint-plugin-canonical' must be named 'exported', after the exported value of its index file.\n\nmodule.exports = class Foo { render() { return <span>Test Class</span>; } };\n// Message: Filename 'Foo.react' must match the exported name 'Foo'.\n\n// Options: [\"snake\"]\nmodule.exports = variableName;\n// Message: Filename 'variableName' must match the exported and transformed name 'variable_name'.\n\n// Options: [\"kebab\"]\nexport default variableName;\n// Message: Filename 'variableName' must match the exported and transformed name 'variable-name'.\n\n// Options: [\"pascal\"]\nexport default variableName;\n// Message: Filename 'variableName' must match the exported and transformed name 'VariableName'.\n\n// Options: [[\"pascal\",\"snake\"]]\nexport default variableName;\n// Message: Filename 'variableName' must match any of the exported and transformed names 'VariableName', 'variable_name'.\n\n// Options: [null,\"\\\\.react$\"]\nexport default class Foo { render() { return <span>Test Class</span>; } };\n// Message: Filename 'Foo.bar' must match the exported name 'Foo'.\n\n// Options: [null,\"\\\\.react$\"]\nexport default class Foo { render() { return <span>Test Class</span>; } };\n// Message: The directory 'Foo.react' must be named 'Foo', after the exported value of its index file.\n\n// Options: [null,null,true]\nmodule.exports = foo();\n// Message: Filename 'bar' must match the exported name 'foo'.\n```\n\nThe following patterns are not considered problems:\n\n```js\nmodule.exports = function() {};\n\nvar foo = 'bar';\n\nexport default foo();\n\nmodule.exports = exported;\n\nmodule.exports = class Foo {};\n\nmodule.exports = class Foo { render() { return <span>Test Class</span>; } };\n\nmodule.exports = function foo() {};\n\nmodule.exports = foo();\n\nmodule.exports = function foo() { return <span>Test Fn</span> };\n\nexport default exported;\n\nexport default class Foo {};\n\nexport default class Foo { render() { return <span>Test Class</span>; } };\n\nexport default function foo() {};\n\nexport default function foo() { return <span>Test Fn</span> };\n\nexport default function foo() {};\n\nexport default function foo() { return <span>Test Fn</span> };\n\nexport default function index() {};\n\n// Options: [\"snake\"]\nmodule.exports = variableName;\n\n// Options: [\"snake\"]\nmodule.exports = variableName;\n\n// Options: [\"kebab\"]\nmodule.exports = variableName;\n\n// Options: [\"camel\"]\nmodule.exports = variable_name;\n\n// Options: [\"snake\"]\nexport default variableName;\n\n// Options: [\"kebab\"]\nexport default variableName;\n\n// Options: [\"camel\"]\nexport default variable_name;\n\n// Options: [\"pascal\"]\nexport default variable_name;\n\n// Options: [[\"pascal\",\"camel\"]]\nexport default variable_name;\n\n// Options: [[\"pascal\",\"camel\"]]\nexport default variable_name;\n\n// Options: [null,\"\\\\.react$\"]\nmodule.exports = class Foo { render() { return <span>Test Class</span>; } };\n\n// Options: [null,\"\\\\.react$\"]\nexport default class Foo { render() { return <span>Test Class</span>; } };\n\n// Options: [null,null,true]\nmodule.exports = foo();\n```\n\n\n\n<a name=\"eslint-plugin-canonical-rules-filename-match-regex\"></a>\n### <code>filename-match-regex</code>\n\nA rule to enforce a certain file naming convention using a regular expression.\n\nThe convention can be configured using a regular expression (the default is `camelCase.js`). Additionally\nexporting files can be ignored with a second configuration parameter.\n\n```json\n\"canonical/filename-match-regex\": [2, \"^[a-z_]+$\", true]\n```\n\nWith these configuration options, `camelCase.js` will be reported as an error while `snake_case.js` will pass.\nAdditionally the files that have a named default export (according to the logic in the `match-exported` rule) will be\nignored.  They could be linted with the `match-exported` rule. Please note that exported function calls are not\nrespected in this case.\n\nThe following patterns are considered problems:\n\n```js\nvar foo = 'bar';\n// Message: Filename 'foo_bar.js' does not match the naming convention.\n\nvar foo = 'bar';\n// Message: Filename 'fooBAR.js' does not match the naming convention.\n\nvar foo = 'bar';\n// Message: Filename 'fooBar$.js' does not match the naming convention.\n\n// Options: [\"^[a-z_]$\"]\nvar foo = 'bar';\n// Message: Filename 'fooBar.js' does not match the naming convention.\n```\n\nThe following patterns are not considered problems:\n\n```js\nvar foo = 'bar';\n\nvar foo = 'bar';\n\nvar foo = 'bar';\n\n// Options: [\"^[a-z_]+$\"]\nvar foo = 'bar';\n\n// Options: [\"^[a-z_]+$\"]\nvar foo = 'bar';\n\nvar foo = 'bar';\n\n// Options: [null,true]\nmodule.exports = foo\n\n// Options: [\"^[a-z_]$\",true]\nmodule.exports = foo\n\n// Options: [\"^[a-z_]+$\",true]\nmodule.exports = foo()\n```\n\n\n\n<a name=\"eslint-plugin-canonical-rules-filename-no-index\"></a>\n### <code>filename-no-index</code>\n\nHaving a bunch of `index.js` files can have negative influence on developer experience, e.g. when\nopening files by name. When enabling this rule. `index.js` files will always be considered a problem.\n\nThe following patterns are considered problems:\n\n```js\nvar foo = 'bar';\n// Message: 'index.js' files are not allowed.\n\nvar foo = 'bar';\n// Message: 'index.js' files are not allowed.\n```\n\nThe following patterns are not considered problems:\n\n```js\nvar foo = 'bar';\n\nvar foo = 'bar';\n\nvar foo = 'bar';\n\nvar foo = 'bar';\n```\n\n\n\n<a name=\"eslint-plugin-canonical-rules-id-match\"></a>\n### <code>id-match</code>\n\n_The `--fix` option on the command line automatically fixes problems reported by this rule._\n\nNote: This rule is equivalent to [`id-match`](https://eslint.org/docs/rules/id-match), except for addition of `ignoreNamedImports`.\n\nThis rule requires identifiers in assignments and `function` definitions to match a specified regular expression.\n\n<a name=\"eslint-plugin-canonical-rules-id-match-options\"></a>\n#### Options\n\n* `\"properties\": false` (default) does not check object properties\n* `\"properties\": true` requires object literal properties and member expression assignment properties to match the specified regular expression\n* `\"classFields\": false` (default) does not class field names\n* `\"classFields\": true` requires class field names to match the specified regular expression\n* `\"onlyDeclarations\": false` (default) requires all variable names to match the specified regular expression\n* `\"onlyDeclarations\": true` requires only `var`, `function`, and `class` declarations to match the specified regular expression\n* `\"ignoreDestructuring\": false` (default) enforces `id-match` for destructured identifiers\n* `\"ignoreDestructuring\": true` does not check destructured identifiers\n* `\"ignoreNamedImports\": false` (default) enforces `id-match` for named imports\n* `\"ignoreNamedImports\": true` does not check named imports\n\nThe following patterns are considered problems:\n\n```js\n// Options: [\"^[a-z]+$\",{\"onlyDeclarations\":true}]\nvar __foo = \"Matthieu\"\n// Message: undefined\n\n// Options: [\"^[a-z]+$\"]\nfirst_name = \"Matthieu\"\n// Message: undefined\n\n// Options: [\"^z\"]\nfirst_name = \"Matthieu\"\n// Message: undefined\n\n// Options: [\"^[a-z]+(_[A-Z][a-z])*$\"]\nLast_Name = \"Larcher\"\n// Message: undefined\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nvar obj = {key: no_under}\n// Message: Identifier 'no_under' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\"]\nfunction no_under21(){}\n// Message: undefined\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nobj.no_under22 = function(){};\n// Message: undefined\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nno_under23.foo = function(){};\n// Message: undefined\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\n[no_under24.baz]\n// Message: undefined\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nif (foo.bar_baz === boom.bam_pow) { [no_under25.baz] }\n// Message: undefined\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nfoo.no_under26 = boom.bam_pow\n// Message: undefined\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nvar foo = { no_under27: boom.bam_pow }\n// Message: undefined\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nfoo.qux.no_under28 = { bar: boom.bam_pow }\n// Message: undefined\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nvar o = {no_under29: 1}\n// Message: undefined\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nobj.no_under30 = 2;\n// Message: undefined\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nvar { category_id: category_alias } = query;\n// Message: Identifier 'category_alias' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"ignoreDestructuring\":true,\"properties\":true}]\nvar { category_id: category_alias } = query;\n// Message: Identifier 'category_alias' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"ignoreDestructuring\":true,\"properties\":true}]\nvar { category_id: categoryId, ...other_props } = query;\n// Message: Identifier 'other_props' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nvar { category_id } = query;\n// Message: Identifier 'category_id' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nvar { category_id = 1 } = query;\n// Message: Identifier 'category_id' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nimport no_camelcased from \"external-module\";\n// Message: Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nimport * as no_camelcased from \"external-module\";\n// Message: Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\"]\nexport * as no_camelcased from \"external-module\";\n// Message: Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nimport { no_camelcased as no_camel_cased } from \"external module\";\n// Message: Identifier 'no_camel_cased' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nimport { camelCased as no_camel_cased } from \"external module\";\n// Message: Identifier 'no_camel_cased' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nimport { camelCased, no_camelcased } from \"external-module\";\n// Message: Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nimport { no_camelcased as camelCased, another_no_camelcased } from \"external-module\";\n// Message: Identifier 'another_no_camelcased' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nimport camelCased, { no_camelcased } from \"external-module\";\n// Message: Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nimport no_camelcased, { another_no_camelcased as camelCased } from \"external-module\";\n// Message: Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nfunction foo({ no_camelcased }) {};\n// Message: Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nfunction foo({ no_camelcased = 'default value' }) {};\n// Message: Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nconst no_camelcased = 0; function foo({ camelcased_value = no_camelcased }) {}\n// Message: Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.\n// Message: Identifier 'camelcased_value' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nconst { bar: no_camelcased } = foo;\n// Message: Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nfunction foo({ value_1: my_default }) {}\n// Message: Identifier 'my_default' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nfunction foo({ isCamelcased: no_camelcased }) {};\n// Message: Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nvar { foo: bar_baz = 1 } = quz;\n// Message: Identifier 'bar_baz' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nconst { no_camelcased = false } = bar;\n// Message: Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\"]\nclass x { _foo() {} }\n// Message: Identifier '_foo' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"classFields\":true}]\nclass x { _foo = 1; }\n// Message: Identifier '_foo' does not match the pattern '^[^_]+$'.\n\n// Options: [\"^[^_]+$\",{\"ignoreNamedImports\":false}]\nimport { no_camelcased } from \"external-module\";\n// Message: Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.\n```\n\nThe following patterns are not considered problems:\n\n```js\n// Options: [\"^[a-z]+$\",{\"onlyDeclarations\":true}]\n__foo = \"Matthieu\"\n\n// Options: [\"^[a-z]+$\"]\nfirstname = \"Matthieu\"\n\n// Options: [\"[a-z]+\"]\nfirst_name = \"Matthieu\"\n\n// Options: [\"^f\"]\nfirstname = \"Matthieu\"\n\n// Options: [\"^[a-z]+(_[A-Z][a-z]+)*$\"]\nlast_Name = \"Larcher\"\n\n// Options: [\"^[a-z]+(_[A-Z][a-z])*$\"]\nparam = \"none\"\n\n// Options: [\"^[^_]+$\"]\nfunction noUnder(){}\n\n// Options: [\"^[^_]+$\"]\nno_under()\n\n// Options: [\"^[^_]+$\"]\nfoo.no_under2()\n\n// Options: [\"^[^_]+$\"]\nvar foo = bar.no_under3;\n\n// Options: [\"^[^_]+$\"]\nvar foo = bar.no_under4.something;\n\n// Options: [\"^[^_]+$\"]\nfoo.no_under5.qux = bar.no_under6.something;\n\n// Options: [\"^[^_]+$\"]\nif (bar.no_under7) {}\n\n// Options: [\"^[^_]+$\"]\nvar obj = { key: foo.no_under8 };\n\n// Options: [\"^[^_]+$\"]\nvar arr = [foo.no_under9];\n\n// Options: [\"^[^_]+$\"]\n[foo.no_under10]\n\n// Options: [\"^[^_]+$\"]\nvar arr = [foo.no_under11.qux];\n\n// Options: [\"^[^_]+$\"]\n[foo.no_under12.nesting]\n\n// Options: [\"^[^_]+$\"]\nif (foo.no_under13 === boom.no_under14) { [foo.no_under15] }\n\n// Options: [\"^[a-z$]+([A-Z][a-z]+)*$\"]\nvar myArray = new Array(); var myDate = new Date();\n\n// Options: [\"^[^_]+$\"]\nvar x = obj._foo;\n\n// Options: [\"^[^_]+$\",{\"onlyDeclarations\":true,\"properties\":true}]\nvar obj = {key: no_under}\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nvar {key_no_under: key} = {}\n\n// Options: [\"^[^_]+$\",{\"ignoreDestructuring\":true,\"properties\":true}]\nvar { category_id } = query;\n\n// Options: [\"^[^_]+$\",{\"ignoreDestructuring\":true,\"properties\":true}]\nvar { category_id: category_id } = query;\n\n// Options: [\"^[^_]+$\",{\"ignoreDestructuring\":true,\"properties\":true}]\nvar { category_id = 1 } = query;\n\n// Options: [\"^[^_]+$\",{\"properties\":true}]\nvar o = {key: 1}\n\n// Options: [\"^[^_]+$\",{\"properties\":false}]\nvar o = {no_under16: 1}\n\n// Options: [\"^[^_]+$\",{\"properties\":false}]\nobj.no_under17 = 2;\n\n// Options: [\"^[^_]+$\",{\"properties\":false}]\nvar obj = {\n no_under18: 1 \n};\n obj.no_under19 = 2;\n\n// Options: [\"^[^_]+$\",{\"properties\":false}]\nobj.no_under20 = function(){};\n\n// Options: [\"^[^_]+$\",{\"properties\":false}]\nvar x = obj._foo2;\n\n// Options: [\"^[^_]+$\"]\nclass x { foo() {} }\n\n// Options: [\"^[^_]+$\"]\nclass x { #foo() {} }\n\n// Options: [\"^[^_]+$\",{\"ignoreNamedImports\":true}]\nimport { no_camelcased } from \"external-module\";\n// Message: Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.\n```\n\n\n\n<a name=\"eslint-plugin-canonical-rules-import-specifier-newline\"></a>\n### <code>import-specifier-newline</code>\n\nForces every import specifier to be on a new line.\n\nTip: Combine this rule with `object-curly-newline` to have every specifier on its own line.\n\n```json\n\"object-curly-newline\": [\n  2,\n  {\n    \"ImportDeclaration\": \"always\"\n  }\n],\n```\n\nWorking together, both rules will produces imports such as:\n\n```ts\nimport { \n  a,\n  b,\n  c\n} from 'foo';\n```\n\nThe following patterns are considered problems:\n\n```js\nimport {a, b} from 'foo';\n// Message: undefined\n\nimport a, {b, c} from 'foo';\n// Message: undefined\n```\n\nThe following patterns are not considered problems:\n\n```js\nimport {a,\nb} from 'foo'\n\nimport a, {b,\nc} from 'foo'\n```\n\n\n\n<a name=\"eslint-plugin-canonical-rules-no-restricted-strings\"></a>\n### <code>no-restricted-strings</code>\n\nDisallow specified strings.\n\nThe following patterns are considered problems:\n\n```js\n// Options: [[\"bar\"]]\nvar foo = \"bar\"\n// Message: Disallowed string: 'bar'.\n\n// Options: [[\"bar\"]]\nconst foo = `bar ${baz}`;\n// Message: Disallowed string in template: 'bar'.\n```\n\nThe following patterns are not considered problems:\n\n```js\nconst foo = \"bar\";\n```\n\n\n<a name=\"eslint-plugin-canonical-rules-no-restricted-strings-options-1\"></a>\n#### Options\n\nThe 1st option is an array of strings that cannot be contained in the codebase.\n\n<a name=\"eslint-plugin-canonical-rules-no-use-extend-native\"></a>\n### <code>no-use-extend-native</code>\n\nThe following patterns are considered problems:\n\n```js\nArray.prototype.custom\n// Message: Avoid using extended native objects\n\nArray.to\n// Message: Avoid using extended native objects\n\nArray.to()\n// Message: Avoid using extended native objects\n\n[].length()\n// Message: Avoid using extended native objects\n\n'unicorn'.green\n// Message: Avoid using extended native objects\n\n[].custom()\n// Message: Avoid using extended native objects\n\n({}).custom()\n// Message: Avoid using extended native objects\n\n/match_this/.custom()\n// Message: Avoid using extended native objects\n\n'string'.custom()\n// Message: Avoid using extended native objects\n\nconsole.log('foo'.custom)\n// Message: Avoid using extended native objects\n\nconsole.log('foo'.custom())\n// Message: Avoid using extended native objects\n\n('str' + 'ing').custom()\n// Message: Avoid using extended native objects\n\n('str' + 'i' + 'ng').custom()\n// Message: Avoid using extended native objects\n\n(1 + 'ing').custom()\n// Message: Avoid using extended native objects\n\n(/regex/ + 'ing').custom()\n// Message: Avoid using extended native objects\n\n(1 + 1).toLowerCase()\n// Message: Avoid using extended native objects\n\n(1 + 1 + 1).toLowerCase()\n// Message: Avoid using extended native objects\n\n(function testFunction() {}).custom()\n// Message: Avoid using extended native objects\n\nnew Array().custom()\n// Message: Avoid using extended native objects\n\nnew ArrayBuffer().custom()\n// Message: Avoid using extended native objects\n\nnew Boolean().custom()\n// Message: Avoid using extended native objects\n\nnew DataView().custom()\n// Message: Avoid using extended native objects\n\nnew Date().custom()\n// Message: Avoid using extended native objects\n\nnew Error().custom()\n// Message: Avoid using extended native objects\n\nnew Float32Array().custom()\n// Message: Avoid using extended native objects\n\nnew Float64Array().custom()\n// Message: Avoid using extended native objects\n\nnew Function().custom()\n// Message: Avoid using extended native objects\n\nnew Int16Array().custom()\n// Message: Avoid using extended native objects\n\nnew Int32Array().custom()\n// Message: Avoid using extended native objects\n\nnew Int8Array().custom()\n// Message: Avoid using extended native objects\n\nnew Map().custom()\n// Message: Avoid using extended native objects\n\nnew Number().custom()\n// Message: Avoid using extended native objects\n\nnew Object().custom()\n// Message: Avoid using extended native objects\n\nnew Promise().custom()\n// Message: Avoid using extended native objects\n\nnew RegExp().custom()\n// Message: Avoid using extended native objects\n\nnew Set().custom()\n// Message: Avoid using extended native objects\n\nnew String().custom()\n// Message: Avoid using extended native objects\n\nnew Symbol().custom()\n// Message: Avoid using extended native objects\n\nnew Uint16Array().custom()\n// Message: Avoid using extended native objects\n\nnew Uint32Array().custom()\n// Message: Avoid using extended native objects\n\nnew Uint8Array().custom()\n// Message: Avoid using extended native objects\n\nnew Uint8ClampedArray().custom()\n// Message: Avoid using extended native objects\n\nnew WeakMap().custom()\n// Message: Avoid using extended native objects\n\nnew WeakSet().custom()\n// Message: Avoid using extended native objects\n\nnew Array()['custom']\n// Message: Avoid using extended native objects\n\nnew Array()['custom']()\n// Message: Avoid using extended native objects\n```\n\nThe following patterns are not considered problems:\n\n```js\nerror.plugin\n\nerror.plugn()\n\narray.custom\n\nObject.assign()\n\nObject.keys\n\nObject.keys()\n\ngulp.task()\n\nCustom.prototype.custom\n\nArray.prototype.map\n\nArray.prototype.map.call([1,2,3], function (x) { console.log(x) })\n\nArray.apply\n\nArray.call(null, 1, 2, 3)\n\n[].push(1)\n\n[][0]\n\n{}[i]\n\n{}[3]\n\n{}[j][k]\n\n({foo: {bar: 1, baz: 2}}[i][j])\n\n({}).toString()\n\n/match_this/.test()\n\n'foo'.length\n\n'hi'.padEnd\n\n'hi'.padEnd()\n\nconsole.log('foo'.length)\n\nconsole.log('foo'.toString)\n\nconsole.log('foo'.toString())\n\nconsole.log(gulp.task)\n\nconsole.log(gulp.task())\n\n'string'.toString()\n\n(1).toFixed()\n\n1..toFixed()\n\n1.0.toFixed()\n\n('str' + 'ing').toString()\n\n('str' + 'i' + 'ng').toString()\n\n(1 + 1).valueOf()\n\n(1 + 1 + (1 + 1)).valueOf()\n\n(1 + 1 + 1).valueOf()\n\n(1 + 'string').toString()\n\n(/regex/ + /regex/).toString()\n\n(/regex/ + 1).toString()\n\n([1] + [2]).toString()\n\n(function testFunction() {}).toString()\n\nTest.prototype\n\nnew Array().toString()\n\nnew ArrayBuffer().constructor()\n\nnew Boolean().toString()\n\nnew DataView().buffer()\n\nnew Date().getDate()\n\nnew Error().message()\n\nnew Error().stack\n\nnew Error().stack.slice(1)\n\nnew Float32Array().values()\n\nnew Float64Array().values()\n\nnew Function().toString()\n\nnew Int16Array().values()\n\nnew Int32Array().values()\n\nnew Int8Array().values()\n\nnew Map().clear()\n\nnew Number().toString()\n\nnew Object().toString()\n\nnew Object().toString\n\nnew Promise().then()\n\nnew RegExp().test()\n\nnew Set().values()\n\nnew String().toString()\n\nnew Symbol().toString()\n\nnew Uint16Array().values()\n\nnew Uint32Array().values()\n\nnew Uint8ClampedArray().values()\n\nnew WeakMap().get()\n\nnew WeakSet().has()\n\nnew Array()['length']\n\nnew Array()['toString']()\n```\n\n\n\n<a name=\"eslint-plugin-canonical-rules-sort-keys\"></a>\n### <code>sort-keys</code>\n\n_The `--fix` option on the command line automatically fixes problems reported by this rule._\n\nNote: This rule is equivalent to [`sort-keys`](https://eslint.org/docs/rules/sort-keys), except that it is fixable.\n\nThis rule requires identifiers in assignments and `function` definitions to match a specified regular expression.\n\n<a name=\"eslint-plugin-canonical-rules-sort-keys-options-2\"></a>\n#### Options\n\nThe 1st option is \"asc\" or \"desc\".\n\n* \"asc\" (default) - enforce properties to be in ascending order.\n* \"desc\" - enforce properties to be in descending order.\n\nThe 2nd option is an object which has 3 properties.\n\n* `caseSensitive` - if true, enforce properties to be in case-sensitive order. Default is true.\n* `minKeys` - Specifies the minimum number of keys that an object should have in order for the object's unsorted keys to produce an error. Default is 2, which means by default all objects with unsorted keys will result in lint errors.\n* `natural` - if true, enforce properties to be in natural order. Default is false. Natural Order compares strings containing combination of letters and numbers in the way a human being would sort. It basically sorts numerically, instead of sorting alphabetically. So the number 10 comes after the number 3 in Natural Sorting.\n\nThe following patterns are considered problems:\n\n```js\nvar obj = {\n// comment\n// comment 2\na:1,\n_:2,\nb:3\n}\n// Message: undefined\n\nvar obj = {\n/* comment\n comment 2 */\na:1,\n_:2,\nb:3\n}\n// Message: undefined\n\nvar obj = {a:1, _:2, b:3} // default\n// Message: undefined\n\nvar obj = {a:1, c:2, b:3}\n// Message: undefined\n\nvar obj = {b_:1, a:2, b:3}\n// Message: undefined\n\nvar obj = {b_:1, c:2, C:3}\n// Message: undefined\n\nvar obj = {$:1, _:2, A:3, a:4}\n// Message: undefined\n\nvar obj = {1:1, 2:4, A:3, '11':2}\n// Message: undefined\n\nvar obj = {'#':1, À:3, 'Z':2, è:4}\n// Message: undefined\n\nvar obj = {...z, c:1, b:1}\n// Message: undefined\n\nvar obj = {...z, ...c, d:4, b:1, ...y, ...f, e:2, a:1}\n// Message: undefined\n// Message: undefined\n\nvar obj = {c:1, b:1, ...a}\n// Message: undefined\n\nvar obj = {...z, ...a, c:1, b:1}\n// Message: undefined\n\nvar obj = {...z, b:1, a:1, ...d, ...c}\n// Message: undefined\n\n// Options: [\"desc\"]\nvar obj = {...z, a:2, b:0, ...x, ...c}\n// Message: undefined\n\n// Options: [\"desc\"]\nvar obj = {...z, a:2, b:0, ...x}\n// Message: undefined\n\n// Options: [\"desc\"]\nvar obj = {...z, '':1, a:2}\n// Message: undefined\n\nvar obj = {a:1, [b+c]:2, '':3}\n// Message: undefined\n\n// Options: [\"desc\"]\nvar obj = {'':1, [b+c]:2, a:3}\n// Message: undefined\n\n// Options: [\"desc\"]\nvar obj = {b:1, [f()]:2, '':3, a:4}\n// Message: undefined\n\nvar obj = {a:1, b:3, [a]: -1, c:2}\n// Message: undefined\n\nvar obj = {a:1, c:{y:1, x:1}, b:1}\n// Message: undefined\n// Message: undefined\n\n// Options: [\"asc\"]\nvar obj = {a:1, _:2, b:3} // asc\n// Message: undefined\n\n// Options: [\"asc\"]\nvar obj = {a:1, c:2, b:3}\n// Message: undefined\n\n// Options: [\"asc\"]\nvar obj = {b_:1, a:2, b:3}\n// Message: undefined\n\n// Options: [\"asc\"]\nvar obj = {b_:1, c:2, C:3}\n// Message: undefined\n\n// Options: [\"asc\"]\nvar obj = {$:1, _:2, A:3, a:4}\n// Message: undefined\n\n// Options: [\"asc\"]\nvar obj = {1:1, 2:4, A:3, '11':2}\n// Message: undefined\n\n// Options: [\"asc\"]\nvar obj = {'#':1, À:3, 'Z':2, è:4}\n// Message: undefined\n\n// Options: [\"asc\",{\"caseSensitive\":false}]\nvar obj = {a:1, _:2, b:3} // asc, insensitive\n// Message: undefined\n\n// Options: [\"asc\",{\"caseSensitive\":false}]\nvar obj = {a:1, c:2, b:3}\n// Message: undefined\n\n// Options: [\"asc\",{\"caseSensitive\":false}]\nvar obj = {b_:1, a:2, b:3}\n// Message: undefined\n\n// Options: [\"asc\",{\"caseSensitive\":false}]\nvar obj = {$:1, A:3, _:2, a:4}\n// Message: undefined\n\n// Options: [\"asc\",{\"caseSensitive\":false}]\nvar obj = {1:1, 2:4, A:3, '11':2}\n// Message: undefined\n\n// Options: [\"asc\",{\"caseSensitive\":false}]\nvar obj = {'#':1, À:3, 'Z':2, è:4}\n// Message: undefined\n\n// Options: [\"asc\",{\"natural\":true}]\nvar obj = {a:1, _:2, b:3} // asc, natural\n// Message: undefined\n\n// Options: [\"asc\",{\"natural\":true}]\nvar obj = {a:1, c:2, b:3}\n// Message: undefined\n\n// Options: [\"asc\",{\"natural\":true}]\nvar obj = {b_:1, a:2, b:3}\n// Message: undefined\n\n// Options: [\"asc\",{\"natural\":true}]\nvar obj = {b_:1, c:2, C:3}\n// Message: undefined\n\n// Options: [\"asc\",{\"natural\":true}]\nvar obj = {$:1, A:3, _:2, a:4}\n// Message: undefined\n\n// Options: [\"asc\",{\"natural\":true}]\nvar obj = {1:1, 2:4, A:3, '11':2}\n// Message: undefined\n\n// Options: [\"asc\",{\"natural\":true}]\nvar obj = {'#':1, À:3, 'Z':2, è:4}\n// Message: undefined\n\n// Options: [\"asc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {a:1, _:2, b:3} // asc, natural, insensitive\n// Message: undefined\n\n// Options: [\"asc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {a:1, c:2, b:3}\n// Message: undefined\n\n// Options: [\"asc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {b_:1, a:2, b:3}\n// Message: undefined\n\n// Options: [\"asc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {$:1, A:3, _:2, a:4}\n// Message: undefined\n\n// Options: [\"asc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {1:1, '11':2, 2:4, A:3}\n// Message: undefined\n\n// Options: [\"asc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {'#':1, À:3, 'Z':2, è:4}\n// Message: undefined\n\n// Options: [\"desc\"]\nvar obj = {a:1, _:2, b:3} // desc\n// Message: undefined\n\n// Options: [\"desc\"]\nvar obj = {a:1, c:2, b:3}\n// Message: undefined\n\n// Options: [\"desc\"]\nvar obj = {b_:1, a:2, b:3}\n// Message: undefined\n\n// Options: [\"desc\"]\nvar obj = {b_:1, c:2, C:3}\n// Message: undefined\n\n// Options: [\"desc\"]\nvar obj = {$:1, _:2, A:3, a:4}\n// Message: undefined\n// Message: undefined\n\n// Options: [\"desc\"]\nvar obj = {1:1, 2:4, A:3, '11':2}\n// Message: undefined\n// Message: undefined\n\n// Options: [\"desc\"]\nvar obj = {'#':1, À:3, 'Z':2, è:4}\n// Message: undefined\n// Message: undefined\n\n// Options: [\"desc\",{\"caseSensitive\":false}]\nvar obj = {a:1, _:2, b:3} // desc, insensitive\n// Message: undefined\n\n// Options: [\"desc\",{\"caseSensitive\":false}]\nvar obj = {a:1, c:2, b:3}\n// Message: undefined\n\n// Options: [\"desc\",{\"caseSensitive\":false}]\nvar obj = {b_:1, a:2, b:3}\n// Message: undefined\n\n// Options: [\"desc\",{\"caseSensitive\":false}]\nvar obj = {b_:1, c:2, C:3}\n// Message: undefined\n\n// Options: [\"desc\",{\"caseSensitive\":false}]\nvar obj = {$:1, _:2, A:3, a:4}\n// Message: undefined\n// Message: undefined\n\n// Options: [\"desc\",{\"caseSensitive\":false}]\nvar obj = {1:1, 2:4, A:3, '11':2}\n// Message: undefined\n// Message: undefined\n\n// Options: [\"desc\",{\"caseSensitive\":false}]\nvar obj = {'#':1, À:3, 'Z':2, è:4}\n// Message: undefined\n// Message: undefined\n\n// Options: [\"desc\",{\"natural\":true}]\nvar obj = {a:1, _:2, b:3} // desc, natural\n// Message: undefined\n\n// Options: [\"desc\",{\"natural\":true}]\nvar obj = {a:1, c:2, b:3}\n// Message: undefined\n\n// Options: [\"desc\",{\"natural\":true}]\nvar obj = {b_:1, a:2, b:3}\n// Message: undefined\n\n// Options: [\"desc\",{\"natural\":true}]\nvar obj = {b_:1, c:2, C:3}\n// Message: undefined\n\n// Options: [\"desc\",{\"natural\":true}]\nvar obj = {$:1, _:2, A:3, a:4}\n// Message: undefined\n// Message: undefined\n// Message: undefined\n\n// Options: [\"desc\",{\"natural\":true}]\nvar obj = {1:1, 2:4, A:3, '11':2}\n// Message: undefined\n// Message: undefined\n\n// Options: [\"desc\",{\"natural\":true}]\nvar obj = {'#':1, À:3, 'Z':2, è:4}\n// Message: undefined\n// Message: undefined\n\n// Options: [\"desc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {a:1, _:2, b:3} // desc, natural, insensitive\n// Message: undefined\n\n// Options: [\"desc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {a:1, c:2, b:3}\n// Message: undefined\n\n// Options: [\"desc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {b_:1, a:2, b:3}\n// Message: undefined\n\n// Options: [\"desc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {b_:1, c:2, C:3}\n// Message: undefined\n\n// Options: [\"desc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {$:1, _:2, A:3, a:4}\n// Message: undefined\n// Message: undefined\n\n// Options: [\"desc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {1:1, 2:4, '11':2, A:3}\n// Message: undefined\n// Message: undefined\n// Message: undefined\n\n// Options: [\"desc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {'#':1, À:3, 'Z':2, è:4}\n// Message: undefined\n// Message: undefined\n```\n\nThe following patterns are not considered problems:\n\n```js\n// Options: []\nvar obj = {_:2, a:1, b:3} // default\n\n// Options: []\nvar obj = {a:1, b:3, c:2}\n\n// Options: []\nvar obj = {a:2, b:3, b_:1}\n\n// Options: []\nvar obj = {C:3, b_:1, c:2}\n\n// Options: []\nvar obj = {$:1, A:3, _:2, a:4}\n\n// Options: []\nvar obj = {1:1, '11':2, 2:4, A:3}\n\n// Options: []\nvar obj = {'#':1, 'Z':2, À:3, è:4}\n\n// Options: []\nvar obj = {a:1, b:3, [a + b]: -1, c:2}\n\n// Options: []\nvar obj = {'':1, [f()]:2, a:3}\n\n// Options: [\"desc\"]\nvar obj = {a:1, [b++]:2, '':3}\n\n// Options: []\nvar obj = {a:1, ...z, b:1}\n\n// Options: []\nvar obj = {b:1, ...z, a:1}\n\n// Options: []\nvar obj = {...a, b:1, ...c, d:1}\n\n// Options: []\nvar obj = {...a, b:1, ...d, ...c, e:2, z:5}\n\n// Options: []\nvar obj = {b:1, ...c, ...d, e:2}\n\n// Options: []\nvar obj = {a:1, ...z, '':2}\n\n// Options: [\"desc\"]\nvar obj = {'':1, ...z, 'a':2}\n\n// Options: []\nvar obj = {...z, a:1, b:1}\n\n// Options: []\nvar obj = {...z, ...c, a:1, b:1}\n\n// Options: []\nvar obj = {a:1, b:1, ...z}\n\n// Options: [\"desc\"]\nvar obj = {...z, ...x, a:1, ...c, ...d, f:5, e:4}\n\n// Options: []\nfunction fn(...args) { return [...args].length; }\n\n// Options: []\nfunction g() {}; function f(...args) { return g(...args); }\n\n// Options: []\nlet {a, b} = {}\n\n// Options: []\nvar obj = {a:1, b:{x:1, y:1}, c:1}\n\n// Options: [\"asc\"]\nvar obj = {_:2, a:1, b:3} // asc\n\n// Options: [\"asc\"]\nvar obj = {a:1, b:3, c:2}\n\n// Options: [\"asc\"]\nvar obj = {a:2, b:3, b_:1}\n\n// Options: [\"asc\"]\nvar obj = {C:3, b_:1, c:2}\n\n// Options: [\"asc\"]\nvar obj = {$:1, A:3, _:2, a:4}\n\n// Options: [\"asc\"]\nvar obj = {1:1, '11':2, 2:4, A:3}\n\n// Options: [\"asc\"]\nvar obj = {'#':1, 'Z':2, À:3, è:4}\n\n// Options: [\"asc\",{\"caseSensitive\":false}]\nvar obj = {_:2, a:1, b:3} // asc, insensitive\n\n// Options: [\"asc\",{\"caseSensitive\":false}]\nvar obj = {a:1, b:3, c:2}\n\n// Options: [\"asc\",{\"caseSensitive\":false}]\nvar obj = {a:2, b:3, b_:1}\n\n// Options: [\"asc\",{\"caseSensitive\":false}]\nvar obj = {b_:1, C:3, c:2}\n\n// Options: [\"asc\",{\"caseSensitive\":false}]\nvar obj = {b_:1, c:3, C:2}\n\n// Options: [\"asc\",{\"caseSensitive\":false}]\nvar obj = {$:1, _:2, A:3, a:4}\n\n// Options: [\"asc\",{\"caseSensitive\":false}]\nvar obj = {1:1, '11':2, 2:4, A:3}\n\n// Options: [\"asc\",{\"caseSensitive\":false}]\nvar obj = {'#':1, 'Z':2, À:3, è:4}\n\n// Options: [\"asc\",{\"natural\":true}]\nvar obj = {_:2, a:1, b:3} // asc, natural\n\n// Options: [\"asc\",{\"natural\":true}]\nvar obj = {a:1, b:3, c:2}\n\n// Options: [\"asc\",{\"natural\":true}]\nvar obj = {a:2, b:3, b_:1}\n\n// Options: [\"asc\",{\"natural\":true}]\nvar obj = {C:3, b_:1, c:2}\n\n// Options: [\"asc\",{\"natural\":true}]\nvar obj = {$:1, _:2, A:3, a:4}\n\n// Options: [\"asc\",{\"natural\":true}]\nvar obj = {1:1, 2:4, '11':2, A:3}\n\n// Options: [\"asc\",{\"natural\":true}]\nvar obj = {'#':1, 'Z':2, À:3, è:4}\n\n// Options: [\"asc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {_:2, a:1, b:3} // asc, natural, insensitive\n\n// Options: [\"asc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {a:1, b:3, c:2}\n\n// Options: [\"asc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {a:2, b:3, b_:1}\n\n// Options: [\"asc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {b_:1, C:3, c:2}\n\n// Options: [\"asc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {b_:1, c:3, C:2}\n\n// Options: [\"asc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {$:1, _:2, A:3, a:4}\n\n// Options: [\"asc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {1:1, 2:4, '11':2, A:3}\n\n// Options: [\"asc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {'#':1, 'Z':2, À:3, è:4}\n\n// Options: [\"desc\"]\nvar obj = {b:3, a:1, _:2} // desc\n\n// Options: [\"desc\"]\nvar obj = {c:2, b:3, a:1}\n\n// Options: [\"desc\"]\nvar obj = {b_:1, b:3, a:2}\n\n// Options: [\"desc\"]\nvar obj = {c:2, b_:1, C:3}\n\n// Options: [\"desc\"]\nvar obj = {a:4, _:2, A:3, $:1}\n\n// Options: [\"desc\"]\nvar obj = {A:3, 2:4, '11':2, 1:1}\n\n// Options: [\"desc\"]\nvar obj = {è:4, À:3, 'Z':2, '#':1}\n\n// Options: [\"desc\",{\"caseSensitive\":false}]\nvar obj = {b:3, a:1, _:2} // desc, insensitive\n\n// Options: [\"desc\",{\"caseSensitive\":false}]\nvar obj = {c:2, b:3, a:1}\n\n// Options: [\"desc\",{\"caseSensitive\":false}]\nvar obj = {b_:1, b:3, a:2}\n\n// Options: [\"desc\",{\"caseSensitive\":false}]\nvar obj = {c:2, C:3, b_:1}\n\n// Options: [\"desc\",{\"caseSensitive\":false}]\nvar obj = {C:2, c:3, b_:1}\n\n// Options: [\"desc\",{\"caseSensitive\":false}]\nvar obj = {a:4, A:3, _:2, $:1}\n\n// Options: [\"desc\",{\"caseSensitive\":false}]\nvar obj = {A:3, 2:4, '11':2, 1:1}\n\n// Options: [\"desc\",{\"caseSensitive\":false}]\nvar obj = {è:4, À:3, 'Z':2, '#':1}\n\n// Options: [\"desc\",{\"natural\":true}]\nvar obj = {b:3, a:1, _:2} // desc, natural\n\n// Options: [\"desc\",{\"natural\":true}]\nvar obj = {c:2, b:3, a:1}\n\n// Options: [\"desc\",{\"natural\":true}]\nvar obj = {b_:1, b:3, a:2}\n\n// Options: [\"desc\",{\"natural\":true}]\nvar obj = {c:2, b_:1, C:3}\n\n// Options: [\"desc\",{\"natural\":true}]\nvar obj = {a:4, A:3, _:2, $:1}\n\n// Options: [\"desc\",{\"natural\":true}]\nvar obj = {A:3, '11':2, 2:4, 1:1}\n\n// Options: [\"desc\",{\"natural\":true}]\nvar obj = {è:4, À:3, 'Z':2, '#':1}\n\n// Options: [\"desc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {b:3, a:1, _:2} // desc, natural, insensitive\n\n// Options: [\"desc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {c:2, b:3, a:1}\n\n// Options: [\"desc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {b_:1, b:3, a:2}\n\n// Options: [\"desc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {c:2, C:3, b_:1}\n\n// Options: [\"desc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {C:2, c:3, b_:1}\n\n// Options: [\"desc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {a:4, A:3, _:2, $:1}\n\n// Options: [\"desc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {A:3, '11':2, 2:4, 1:1}\n\n// Options: [\"desc\",{\"caseSensitive\":false,\"natural\":true}]\nvar obj = {è:4, À:3, 'Z':2, '#':1}\n```\n\n\n\n","_attachments":{},"homepage":"https://github.com/gajus/eslint-plugin-canonical#readme","bugs":{"url":"https://github.com/gajus/eslint-plugin-canonical/issues"},"license":"BSD-3-Clause"}