{"_id":"@egs-cm/aurelia-template-lint","_rev":"17-a3270b8cba5180b687ca0f5c5c3d05ce","time":{"created":"2023-06-27T12:42:00.687Z","0.10.1":"2023-06-27T09:53:50.280Z","modified":"2023-12-11T14:58:38.703Z","0.10.2":"2023-06-27T12:42:00.954Z","0.10.3":"2023-06-28T06:26:28.107Z","0.10.4":"2023-06-28T11:26:41.229Z","0.11.0":"2023-07-04T14:37:04.068Z","0.12.0":"2023-07-05T07:45:59.486Z","0.12.1":"2023-08-25T12:22:31.383Z","0.12.2":"2023-08-28T12:38:31.489Z","0.12.3":"2023-08-28T15:16:27.954Z","0.12.4":"2023-08-30T09:08:54.363Z","0.12.5":"2023-09-01T12:08:00.008Z","0.12.6":"2023-09-04T15:30:45.550Z","0.12.7":"2023-09-06T06:34:10.521Z","0.12.8":"2023-12-11T14:58:38.513Z"},"name":"@egs-cm/aurelia-template-lint","dist-tags":{"latest":"0.12.8"},"versions":{"0.10.3":{"name":"@egs-cm/aurelia-template-lint","description":"sanity check of Aurelia-flavor templates","author":{"name":"Meirion Hughes","email":"crakinshot@yahoo.com"},"repository":{"type":"git","url":"git+ssh://git@github.com/egs-cm/template-lint.git"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"contributors":[{"name":"atsu85","url":"https://github.com/atsu85"}],"license":"(Apache-2.0)","version":"0.10.3","keywords":["template","html","lint","sanity","aurelia","angular2","web-component"],"main":"./dist/index.js","typings":"./dist/index.d.ts","devDependencies":{"@types/glob":"^5.0.29","@types/jasmine":"2.2.32","@types/minimatch":"^2.0.28","gulp":"^4.0.2","gulp-jasmine":"^2.3.0","gulp-plumber":"^1.1.0","gulp-replace":"^0.5.4","gulp-rimraf":"^0.2.0","gulp-shell":"^0.5.2","gulp-sourcemaps":"^1.6.0","gulp-tsfmt":"^1.0.2","gulp-tslint":"^6.0.2","gulp-typescript":"^2.13.6","gulp-typescript-formatter":"^0.1.3","gulp4-run-sequence":"^1.0.2","merge2":"^1.0.2","through2":"^2.0.3","tslint":"^3.14.0","typescript-formatter":"^3.1.0"},"scripts":{"build":"gulp compile:typescript","test":"gulp test"},"dependencies":{"@types/node":"^6.0.37","@types/parse5":"0.0.30","aurelia-binding":"^1.0.0","aurelia-dependency-injection":"^1.0.0","aurelia-pal-nodejs":"^1.0.0-alpha.4","aurelia-polyfills":"^1.0.0","aurelia-templating":"^1.0.0","aurelia-templating-binding":"^1.0.0","glob":"7.0.x","parse5":"2.2.x","template-lint":"0.8.x","typescript":"^2.0.0"},"gitHead":"90a642b3eaadb77f1ff1a2fb286d5c2fffbe149f","bugs":{"url":"https://github.com/egs-cm/template-lint/issues"},"homepage":"https://github.com/egs-cm/template-lint#readme","_id":"@egs-cm/aurelia-template-lint@0.10.3","_nodeVersion":"16.20.0","_npmVersion":"8.19.4","dist":{"integrity":"sha512-MriBQNZLufa1VOw70ZUREaS06LJUfIqM8PVjRccXwrOFdkh0N6aCaa0MnGVJiPSMvn70iS0Z/CpnMjJtrEmncw==","shasum":"6f0b5ead89bd95f508d493c283fecb4fe67c222c","tarball":"https://registry.npmjs.org/@egs-cm/aurelia-template-lint/-/aurelia-template-lint-0.10.3.tgz","fileCount":33,"unpackedSize":103144,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpTAFKAtxFNPHfd2z8LHu55fMThvtuZMKfszhiPFZ2bgIhAJqby8PipC5qn8EEX75JNvHsBHNk47L7gGhIbOswPG+1"}]},"_npmUser":{"name":"egs-cm","email":"christianm@emsysgrid.de"},"directories":{},"maintainers":[{"name":"egs-cm","email":"christianm@emsysgrid.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aurelia-template-lint_0.10.3_1687933587903_0.46006687995686457"},"_hasShrinkwrap":false},"0.10.4":{"name":"@egs-cm/aurelia-template-lint","description":"sanity check of Aurelia-flavor templates","author":{"name":"Meirion Hughes","email":"crakinshot@yahoo.com"},"repository":{"type":"git","url":"git+ssh://git@github.com/egs-cm/template-lint.git"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"contributors":[{"name":"atsu85","url":"https://github.com/atsu85"}],"license":"(Apache-2.0)","version":"0.10.4","keywords":["template","html","lint","sanity","aurelia","angular2","web-component"],"main":"./dist/index.js","typings":"./dist/index.d.ts","devDependencies":{"@types/glob":"^5.0.29","@types/jasmine":"2.2.32","@types/minimatch":"^2.0.28","gulp":"^4.0.2","gulp-jasmine":"^2.3.0","gulp-plumber":"^1.1.0","gulp-replace":"^0.5.4","gulp-rimraf":"^0.2.0","gulp-shell":"^0.5.2","gulp-sourcemaps":"^1.6.0","gulp-tsfmt":"^1.0.2","gulp-tslint":"^6.0.2","gulp-typescript":"^2.13.6","gulp-typescript-formatter":"^0.1.3","gulp4-run-sequence":"^1.0.2","merge2":"^1.0.2","through2":"^2.0.3","tslint":"^3.14.0","typescript-formatter":"^3.1.0"},"scripts":{"build":"gulp compile:typescript","test":"gulp test"},"dependencies":{"@types/node":"^6.0.37","@types/parse5":"0.0.30","aurelia-binding":"^1.0.0","aurelia-dependency-injection":"^1.0.0","aurelia-pal-nodejs":"^1.0.0-alpha.4","aurelia-polyfills":"^1.0.0","aurelia-templating":"^1.0.0","aurelia-templating-binding":"^1.0.0","glob":"7.0.x","parse5":"2.2.x","template-lint":"0.8.x","typescript":"^2.0.0"},"gitHead":"27a0a6141960bf02bc33eabd81466b963312b8de","bugs":{"url":"https://github.com/egs-cm/template-lint/issues"},"homepage":"https://github.com/egs-cm/template-lint#readme","_id":"@egs-cm/aurelia-template-lint@0.10.4","_nodeVersion":"16.20.0","_npmVersion":"8.19.4","dist":{"integrity":"sha512-LxZZTLri92bPjYX11k8jalhTlBD4ZVwn2Q/HQOHKtPp7NMm/79lYmFKFLpXJ1ZrlKQdtyoS4Qewqur/8TPEnlQ==","shasum":"c3d5c67d1152bd4d8042b5a54d7c0907caa673f8","tarball":"https://registry.npmjs.org/@egs-cm/aurelia-template-lint/-/aurelia-template-lint-0.10.4.tgz","fileCount":33,"unpackedSize":103276,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBOCuLy0Qp6qvFGcxHC6bRJ241t/p1cIRgSxopE3+31wIhAJRz30ghtQauGSrAjJDHImc1sYzzDiagiWhkiAVeD3fU"}]},"_npmUser":{"name":"egs-cm","email":"christianm@emsysgrid.de"},"directories":{},"maintainers":[{"name":"egs-cm","email":"christianm@emsysgrid.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aurelia-template-lint_0.10.4_1687951601079_0.9040864646117657"},"_hasShrinkwrap":false},"0.11.0":{"name":"@egs-cm/aurelia-template-lint","description":"sanity check of Aurelia-flavor templates","author":{"name":"Meirion Hughes","email":"crakinshot@yahoo.com"},"repository":{"type":"git","url":"git+ssh://git@github.com/egs-cm/template-lint.git"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"contributors":[{"name":"atsu85","url":"https://github.com/atsu85"}],"license":"(Apache-2.0)","version":"0.11.0","keywords":["template","html","lint","sanity","aurelia","angular2","web-component"],"main":"./dist/index.js","typings":"./dist/index.d.ts","devDependencies":{"@types/glob":"^5.0.29","@types/jasmine":"2.2.32","@types/minimatch":"^2.0.28","gulp":"^4.0.2","gulp-jasmine":"^2.3.0","gulp-plumber":"^1.1.0","gulp-replace":"^0.5.4","gulp-rimraf":"^0.2.0","gulp-shell":"^0.5.2","gulp-sourcemaps":"^1.6.0","gulp-tsfmt":"^1.0.2","gulp-tslint":"^6.0.2","gulp-typescript":"^2.13.6","gulp-typescript-formatter":"^0.1.3","gulp4-run-sequence":"^1.0.2","merge2":"^1.0.2","through2":"^2.0.3","tslint":"^3.14.0","typescript-formatter":"^3.1.0"},"scripts":{"build":"gulp compile:typescript","test":"gulp test"},"dependencies":{"@types/node":"^6.0.37","@types/parse5":"0.0.30","aurelia-binding":"^1.0.0","aurelia-dependency-injection":"^1.0.0","aurelia-pal-nodejs":"^1.0.0-alpha.4","aurelia-polyfills":"^1.0.0","aurelia-templating":"^1.0.0","aurelia-templating-binding":"^1.0.0","glob":"7.0.x","parse5":"2.2.x","template-lint":"0.8.x","typescript":"^2.0.0"},"gitHead":"37044aba3dac40ff17e68009a3cea4af851055ef","bugs":{"url":"https://github.com/egs-cm/template-lint/issues"},"homepage":"https://github.com/egs-cm/template-lint#readme","_id":"@egs-cm/aurelia-template-lint@0.11.0","_nodeVersion":"16.20.1","_npmVersion":"8.19.4","dist":{"integrity":"sha512-4qyP8D5l5AsLoyRRtA+DGursQBUAEBGpzr91hDQaZu5MWliZjCakQg93k45nshOqlvPRy5Nvw3uNFou1X0wmAw==","shasum":"86a5b10050601fa407876da5d876e97d4151eac7","tarball":"https://registry.npmjs.org/@egs-cm/aurelia-template-lint/-/aurelia-template-lint-0.11.0.tgz","fileCount":33,"unpackedSize":104140,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICP1ZilztfHBmJy4olV7nQXCXCQ70oI9UJTVqdajQ0fHAiBaNHtKHdPoY/0BEvLaAAtkG37NAlVnpe3z2C+nWm4W1g=="}]},"_npmUser":{"name":"egs-cm","email":"christianm@emsysgrid.de"},"directories":{},"maintainers":[{"name":"egs-cm","email":"christianm@emsysgrid.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aurelia-template-lint_0.11.0_1688481423792_0.4346658637867218"},"_hasShrinkwrap":false},"0.12.0":{"name":"@egs-cm/aurelia-template-lint","description":"sanity check of Aurelia-flavor templates","author":{"name":"Meirion Hughes","email":"crakinshot@yahoo.com"},"repository":{"type":"git","url":"git+ssh://git@github.com/egs-cm/template-lint.git"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"contributors":[{"name":"atsu85","url":"https://github.com/atsu85"}],"license":"(Apache-2.0)","version":"0.12.0","keywords":["template","html","lint","sanity","aurelia","angular2","web-component"],"main":"./dist/index.js","typings":"./dist/index.d.ts","devDependencies":{"@types/glob":"^5.0.29","@types/jasmine":"2.2.32","@types/minimatch":"^2.0.28","gulp":"^4.0.2","gulp-jasmine":"^2.3.0","gulp-plumber":"^1.1.0","gulp-replace":"^0.5.4","gulp-rimraf":"^0.2.0","gulp-shell":"^0.5.2","gulp-sourcemaps":"^1.6.0","gulp-tsfmt":"^1.0.2","gulp-tslint":"^6.0.2","gulp-typescript":"^2.13.6","gulp-typescript-formatter":"^0.1.3","gulp4-run-sequence":"^1.0.2","merge2":"^1.0.2","through2":"^2.0.3","tslint":"^3.14.0","typescript-formatter":"^3.1.0"},"scripts":{"build":"gulp compile:typescript","test":"gulp test"},"dependencies":{"@types/node":"^6.0.37","@types/parse5":"0.0.30","aurelia-binding":"^1.0.0","aurelia-dependency-injection":"^1.0.0","aurelia-pal-nodejs":"^1.0.0-alpha.4","aurelia-polyfills":"^1.0.0","aurelia-templating":"^1.0.0","aurelia-templating-binding":"^1.0.0","glob":"7.0.x","parse5":"2.2.x","template-lint":"0.8.x","typescript":"^2.0.0"},"gitHead":"8df7bc0950b620f5645c351b35597d663d66c832","bugs":{"url":"https://github.com/egs-cm/template-lint/issues"},"homepage":"https://github.com/egs-cm/template-lint#readme","_id":"@egs-cm/aurelia-template-lint@0.12.0","_nodeVersion":"16.20.1","_npmVersion":"8.19.4","dist":{"integrity":"sha512-mPR142i6qV+ebFVmDQ1Y2d9l3RqFOEuuKqoA5ddj3ioWbEb8rTkzrpa0lsCw/ilH7cyJKUZE+eAhUlzQTqeqtw==","shasum":"d8dca396f25a1739e3f4ed4964f95cc5f1d60d6f","tarball":"https://registry.npmjs.org/@egs-cm/aurelia-template-lint/-/aurelia-template-lint-0.12.0.tgz","fileCount":33,"unpackedSize":104072,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFpVg2ArXSMjQzsaNbMsWjqbH7gkzzt7Nf0CRiJMLGd+AiAxFsGPfg1x3Pv0v939UWxgLI9+Si4weuZwOEHBFPDaMg=="}]},"_npmUser":{"name":"egs-cm","email":"christianm@emsysgrid.de"},"directories":{},"maintainers":[{"name":"egs-cm","email":"christianm@emsysgrid.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aurelia-template-lint_0.12.0_1688543159300_0.8063141417417423"},"_hasShrinkwrap":false},"0.12.1":{"name":"@egs-cm/aurelia-template-lint","description":"sanity check of Aurelia-flavor templates","author":{"name":"Meirion Hughes","email":"crakinshot@yahoo.com"},"repository":{"type":"git","url":"git+ssh://git@github.com/egs-cm/template-lint.git"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"contributors":[{"name":"atsu85","url":"https://github.com/atsu85"}],"license":"(Apache-2.0)","version":"0.12.1","keywords":["template","html","lint","sanity","aurelia","angular2","web-component"],"main":"./dist/index.js","typings":"./dist/index.d.ts","devDependencies":{"@types/jest":"^29.5.4","@types/parse5":"^7.0.0","jest":"^29.6.4","rimraf":"^5.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tslint":"^5.20.1"},"scripts":{"prebuild":"rimraf dist","build":"tsc --project tsconfig.build.json","lint":"tslint source/**/*.ts spec/**/*.ts","test":"jest"},"dependencies":{"@types/node":"^20.5.6","aurelia-binding":"^2.5.4","aurelia-dependency-injection":"^1.5.2","aurelia-pal-nodejs":"^3.0.0-rc.1","aurelia-polyfills":"^1.3.4","aurelia-templating":"^1.11.1","aurelia-templating-binding":"^1.6.0","glob":"^10.3.3","parse5":"^7.1.2","template-lint":"^0.8.12","typescript":"^5.2.2"},"gitHead":"649f0b89735f83f619b77a57c4c96d90977f7fef","bugs":{"url":"https://github.com/egs-cm/template-lint/issues"},"homepage":"https://github.com/egs-cm/template-lint#readme","_id":"@egs-cm/aurelia-template-lint@0.12.1","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-u+fwoxsb9F1O26h52HYMnFp/sm/Iu8LsgE3E/0SYOLKo+kAijCSL/neg2EfPExCCopdyXTGJ8pqrPcRO3eodUQ==","shasum":"6dd888938c5cf3019032bbedb3d147e5478cc825","tarball":"https://registry.npmjs.org/@egs-cm/aurelia-template-lint/-/aurelia-template-lint-0.12.1.tgz","fileCount":36,"unpackedSize":104317,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYnf9mDSJ1uPHc7Qw/XEaBLjMoVgrwEvk2Y0VoSAogKgIgepC3PXAJ+ywRhQHbONP63qibeMwUQkXrqAAmx7p1f4I="}]},"_npmUser":{"name":"egs-cm","email":"christianm@emsysgrid.de"},"directories":{},"maintainers":[{"name":"egs-cm","email":"christianm@emsysgrid.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aurelia-template-lint_0.12.1_1692966151176_0.21596246228559557"},"_hasShrinkwrap":false},"0.12.2":{"name":"@egs-cm/aurelia-template-lint","description":"sanity check of Aurelia-flavor templates","author":{"name":"Meirion Hughes","email":"crakinshot@yahoo.com"},"repository":{"type":"git","url":"git+ssh://git@github.com/egs-cm/template-lint.git"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"contributors":[{"name":"atsu85","url":"https://github.com/atsu85"}],"license":"(Apache-2.0)","version":"0.12.2","keywords":["template","html","lint","sanity","aurelia","angular2","web-component"],"main":"./dist/index.js","typings":"./dist/index.d.ts","devDependencies":{"@types/jest":"^29.5.4","@types/node":"^16.18.46","@types/parse5":"^7.0.0","jest":"^29.6.4","rimraf":"^5.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tslint":"^5.20.1"},"scripts":{"prebuild":"rimraf dist","build":"tsc --project tsconfig.build.json","lint":"tslint source/**/*.ts spec/**/*.ts","test":"jest"},"dependencies":{"aurelia-binding":"^2.5.4","aurelia-dependency-injection":"^1.5.2","aurelia-pal-nodejs":"^3.0.0-rc.1","aurelia-polyfills":"^1.3.4","aurelia-templating":"^1.11.1","aurelia-templating-binding":"^1.6.0","glob":"^10.3.3","parse5":"^7.1.2","template-lint":"^0.8.12","typescript":"^5.2.2"},"gitHead":"b4de15afa81a46ebad6faa0826c6970547a68d35","bugs":{"url":"https://github.com/egs-cm/template-lint/issues"},"homepage":"https://github.com/egs-cm/template-lint#readme","_id":"@egs-cm/aurelia-template-lint@0.12.2","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-DPIdw/pJjDviPqCE1waKGOFXGfXW1JTOexPfre+FT5VjHg2tAzc+CSOIv4cmUEmUYvtQPH4iwEYtNLS/tFqjKw==","shasum":"ccc73684416b22e3b143d51cd4ec7ca1d84199c4","tarball":"https://registry.npmjs.org/@egs-cm/aurelia-template-lint/-/aurelia-template-lint-0.12.2.tgz","fileCount":36,"unpackedSize":104548,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCp3foNEbVl6YVSix5PCusJCHZmaMnDC9F7/4rzDAk9iQIhAIP+ERJ5AHFhAPgCj970cJm2LAz5Ub8HQ2fQXMuumbJG"}]},"_npmUser":{"name":"egs-cm","email":"christianm@emsysgrid.de"},"directories":{},"maintainers":[{"name":"egs-cm","email":"christianm@emsysgrid.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aurelia-template-lint_0.12.2_1693226311319_0.3442236625558195"},"_hasShrinkwrap":false},"0.12.3":{"name":"@egs-cm/aurelia-template-lint","description":"sanity check of Aurelia-flavor templates","author":{"name":"Meirion Hughes","email":"crakinshot@yahoo.com"},"repository":{"type":"git","url":"git+ssh://git@github.com/egs-cm/template-lint.git"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"contributors":[{"name":"atsu85","url":"https://github.com/atsu85"}],"license":"(Apache-2.0)","version":"0.12.3","keywords":["template","html","lint","sanity","aurelia","angular2","web-component"],"main":"./dist/index.js","typings":"./dist/index.d.ts","devDependencies":{"@types/jest":"^29.5.4","@types/node":"^16.18.46","@types/parse5":"^7.0.0","jest":"^29.6.4","rimraf":"^5.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tslint":"^5.20.1"},"scripts":{"prebuild":"rimraf dist","build":"tsc --project tsconfig.build.json","lint":"tslint source/**/*.ts spec/**/*.ts","test":"jest"},"dependencies":{"aurelia-binding":"^2.5.4","aurelia-dependency-injection":"^1.5.2","aurelia-pal-nodejs":"^3.0.0-rc.1","aurelia-polyfills":"^1.3.4","aurelia-templating":"^1.11.1","aurelia-templating-binding":"^1.6.0","glob":"^10.3.3","parse5":"^7.1.2","template-lint":"^0.8.12","typescript":"^5.2.2"},"gitHead":"ba4c21ad2f68b77a0ceee0c543ea64369c944143","bugs":{"url":"https://github.com/egs-cm/template-lint/issues"},"homepage":"https://github.com/egs-cm/template-lint#readme","_id":"@egs-cm/aurelia-template-lint@0.12.3","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-GSZOV9JqRCJdUSqW9uaLOvMwm4XgyiWIOwgrDRW+ZMFX+uXQr3f1PrzhB5MQuw/xi+Oztt2H3kfmYJh2sr54cg==","shasum":"f4ae0a1760ad934095660eee7f716e3bde064412","tarball":"https://registry.npmjs.org/@egs-cm/aurelia-template-lint/-/aurelia-template-lint-0.12.3.tgz","fileCount":36,"unpackedSize":104527,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyQcOYo2qFifjWUnjCulxEIQKjO7ApF1j6ARzaHedlxwIgMSRA66xpMkeuETtDoQGwDF/bvMyX2Mp6HoN9ZNFlkSk="}]},"_npmUser":{"name":"egs-cm","email":"christianm@emsysgrid.de"},"directories":{},"maintainers":[{"name":"egs-cm","email":"christianm@emsysgrid.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aurelia-template-lint_0.12.3_1693235787714_0.382910942042054"},"_hasShrinkwrap":false},"0.12.4":{"name":"@egs-cm/aurelia-template-lint","description":"sanity check of Aurelia-flavor templates","author":{"name":"Meirion Hughes","email":"crakinshot@yahoo.com"},"repository":{"type":"git","url":"git+ssh://git@github.com/egs-cm/template-lint.git"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"contributors":[{"name":"atsu85","url":"https://github.com/atsu85"}],"license":"(Apache-2.0)","version":"0.12.4","keywords":["template","html","lint","sanity","aurelia","angular2","web-component"],"main":"./dist/index.js","typings":"./dist/index.d.ts","devDependencies":{"@types/jest":"^29.5.4","@types/node":"^16.18.46","@types/parse5":"^7.0.0","jest":"^29.6.4","rimraf":"^5.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tslint":"^5.20.1"},"scripts":{"prebuild":"rimraf dist","build":"tsc --project tsconfig.build.json","lint":"tslint source/**/*.ts spec/**/*.ts","test":"jest"},"dependencies":{"aurelia-binding":"^2.5.4","aurelia-dependency-injection":"^1.5.2","aurelia-pal-nodejs":"^3.0.0-rc.1","aurelia-polyfills":"^1.3.4","aurelia-templating":"^1.11.1","aurelia-templating-binding":"^1.6.0","glob":"^10.3.3","parse5":"^7.1.2","template-lint":"^0.8.12","typescript":"^5.2.2"},"gitHead":"adc685078eded0fa192c81cdaade2e14cae7d09f","bugs":{"url":"https://github.com/egs-cm/template-lint/issues"},"homepage":"https://github.com/egs-cm/template-lint#readme","_id":"@egs-cm/aurelia-template-lint@0.12.4","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-SyVd0zYMOZds7ted5DIwSFzM8jDFsmv1JjMmC5/WaEYd+M+kq6AANiQda3RE+t77S+dZcFxJLj/GgJQy/KuvMg==","shasum":"90145ff5435bd095debe74f4859ef027c4131c76","tarball":"https://registry.npmjs.org/@egs-cm/aurelia-template-lint/-/aurelia-template-lint-0.12.4.tgz","fileCount":36,"unpackedSize":105066,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD50k0nO3+WU8tnqktrUqvB7IoLuMg1I/Pl6GNoIULnXAIgILugs71PZUxQgGkOT9rKzpPY+cN/z6G70bDLl8gGYHM="}]},"_npmUser":{"name":"egs-cm","email":"christianm@emsysgrid.de"},"directories":{},"maintainers":[{"name":"egs-cm","email":"christianm@emsysgrid.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aurelia-template-lint_0.12.4_1693386534133_0.8451474606431217"},"_hasShrinkwrap":false},"0.12.5":{"name":"@egs-cm/aurelia-template-lint","description":"sanity check of Aurelia-flavor templates","author":{"name":"Meirion Hughes","email":"crakinshot@yahoo.com"},"repository":{"type":"git","url":"git+ssh://git@github.com/egs-cm/template-lint.git"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"contributors":[{"name":"atsu85","url":"https://github.com/atsu85"}],"license":"(Apache-2.0)","version":"0.12.5","keywords":["template","html","lint","sanity","aurelia","angular2","web-component"],"main":"./dist/index.js","typings":"./dist/index.d.ts","devDependencies":{"@types/jest":"^29.5.4","@types/node":"^16.18.46","@types/parse5":"^7.0.0","jest":"^29.6.4","resolve-tspaths":"^0.8.15","rimraf":"^5.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tslint":"^5.20.1"},"scripts":{"prebuild":"rimraf dist","build":"tsc --project tsconfig.build.json && resolve-tspaths --src ./source","lint":"tslint source/**/*.ts spec/**/*.ts","test":"jest"},"dependencies":{"aurelia-binding":"^2.5.4","aurelia-dependency-injection":"^1.5.2","aurelia-pal-nodejs":"^3.0.0-rc.1","aurelia-polyfills":"^1.3.4","aurelia-templating":"^1.11.1","aurelia-templating-binding":"^1.6.0","glob":"^10.3.3","parse5":"^7.1.2","template-lint":"^0.8.12","typescript":"^5.2.2"},"gitHead":"7d2941a163e922be06df102f24d09dcf93145f91","bugs":{"url":"https://github.com/egs-cm/template-lint/issues"},"homepage":"https://github.com/egs-cm/template-lint#readme","_id":"@egs-cm/aurelia-template-lint@0.12.5","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-gYEldI20c/pe39bfcNIqGy6LOC06TjIRqL/uiThC0xeg0C/fDw0ARxNEQWCSzo+fQlGjv5VshusidNY9rzdV0Q==","shasum":"59e9203ccc03159d3190af30d74ed7e55f446dff","tarball":"https://registry.npmjs.org/@egs-cm/aurelia-template-lint/-/aurelia-template-lint-0.12.5.tgz","fileCount":36,"unpackedSize":103921,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBI4D4AiQrG9p4w9Xo0d9XlL7WeUcyXG0ZWHsmvvGRL0AiEA83hUB8JYVKkPntHqgALntW7iY6oUB6Ad/Hd+sXj8QJM="}]},"_npmUser":{"name":"egs-cm","email":"christianm@emsysgrid.de"},"directories":{},"maintainers":[{"name":"egs-cm","email":"christianm@emsysgrid.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aurelia-template-lint_0.12.5_1693570079812_0.5860793584206467"},"_hasShrinkwrap":false},"0.12.6":{"name":"@egs-cm/aurelia-template-lint","description":"sanity check of Aurelia-flavor templates","author":{"name":"Meirion Hughes","email":"crakinshot@yahoo.com"},"repository":{"type":"git","url":"git+ssh://git@github.com/egs-cm/template-lint.git"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"contributors":[{"name":"atsu85","url":"https://github.com/atsu85"}],"license":"(Apache-2.0)","version":"0.12.6","keywords":["template","html","lint","sanity","aurelia","angular2","web-component"],"main":"./dist/index.js","typings":"./dist/index.d.ts","devDependencies":{"@types/jest":"^29.5.4","@types/node":"^16.18.46","@types/parse5":"^7.0.0","jest":"^29.6.4","resolve-tspaths":"^0.8.15","rimraf":"^5.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tslint":"^5.20.1"},"scripts":{"prebuild":"rimraf dist","build":"tsc --project tsconfig.build.json && resolve-tspaths --src ./source","lint":"tslint source/**/*.ts spec/**/*.ts","test":"jest"},"dependencies":{"aurelia-binding":"^2.5.4","aurelia-dependency-injection":"^1.5.2","aurelia-pal-nodejs":"^3.0.0-rc.1","aurelia-polyfills":"^1.3.4","aurelia-templating":"^1.11.1","aurelia-templating-binding":"^1.6.0","glob":"^10.3.3","parse5":"^7.1.2","template-lint":"^0.8.12","typescript":"^5.2.2"},"gitHead":"ddf07be71e7a1a0b32dfe08c4997dccba7113f49","bugs":{"url":"https://github.com/egs-cm/template-lint/issues"},"homepage":"https://github.com/egs-cm/template-lint#readme","_id":"@egs-cm/aurelia-template-lint@0.12.6","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-DaXT5ZcKh+bCM96447FomyhjaFnOQIDI3uSl0i1kPcslTWYFf+KncIS+J5iRgjtKmk/Y/9dx/57x0Mmlvk5bQg==","shasum":"178cb2a4326cce9317098becf18b95d96e89a4b7","tarball":"https://registry.npmjs.org/@egs-cm/aurelia-template-lint/-/aurelia-template-lint-0.12.6.tgz","fileCount":36,"unpackedSize":104098,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFuljHexIeZCuZ7X/MbxVye7c4+5jgGP2gczQpyIVG/KAiA0FFhA/rFmcGAxIPil1A4jfz1Uxt1Wn8iw8Qj1MCG25w=="}]},"_npmUser":{"name":"egs-cm","email":"christianm@emsysgrid.de"},"directories":{},"maintainers":[{"name":"egs-cm","email":"christianm@emsysgrid.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aurelia-template-lint_0.12.6_1693841445400_0.5093028399207102"},"_hasShrinkwrap":false},"0.12.7":{"name":"@egs-cm/aurelia-template-lint","description":"sanity check of Aurelia-flavor templates","author":{"name":"Meirion Hughes","email":"crakinshot@yahoo.com"},"repository":{"type":"git","url":"git+ssh://git@github.com/egs-cm/template-lint.git"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"contributors":[{"name":"atsu85","url":"https://github.com/atsu85"}],"license":"(Apache-2.0)","version":"0.12.7","keywords":["template","html","lint","sanity","aurelia","angular2","web-component"],"main":"./dist/index.js","typings":"./dist/index.d.ts","devDependencies":{"@types/jest":"^29.5.4","@types/node":"^16.18.46","@types/parse5":"^7.0.0","jest":"^29.6.4","resolve-tspaths":"^0.8.15","rimraf":"^5.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tslint":"^5.20.1"},"scripts":{"prebuild":"rimraf dist","build":"tsc --project tsconfig.build.json && resolve-tspaths --src ./source","lint":"tslint source/**/*.ts spec/**/*.ts","test":"jest"},"dependencies":{"aurelia-binding":"^2.5.4","aurelia-dependency-injection":"^1.5.2","aurelia-pal-nodejs":"^3.0.0-rc.1","aurelia-polyfills":"^1.3.4","aurelia-templating":"^1.11.1","aurelia-templating-binding":"^1.6.0","glob":"^10.3.3","parse5":"^7.1.2","template-lint":"^0.8.12","typescript":"^5.2.2"},"gitHead":"84633fd84857e5cdf3512997f5b9002a181cf2d5","bugs":{"url":"https://github.com/egs-cm/template-lint/issues"},"homepage":"https://github.com/egs-cm/template-lint#readme","_id":"@egs-cm/aurelia-template-lint@0.12.7","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-dwPKPXYsFgqQZvRLArP3mhaA+LxR7TcGm8+7T58deGv/a8bPBgL9A4TckkRw5XCMEKq6xFYwS1wIqUbcV4NSng==","shasum":"7a370b8d612c6ffec2e91a092ffa6352694d0b16","tarball":"https://registry.npmjs.org/@egs-cm/aurelia-template-lint/-/aurelia-template-lint-0.12.7.tgz","fileCount":36,"unpackedSize":104002,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHvavWtWjVQEot7Rrd8O//fzxJvtM+cS0K//81gKXHGgIhAJq4I3Xc6hs7fuBqRIilULHluyD7Tf6lMGblzXUnbRX0"}]},"_npmUser":{"name":"egs-cm","email":"christianm@emsysgrid.de"},"directories":{},"maintainers":[{"name":"egs-cm","email":"christianm@emsysgrid.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aurelia-template-lint_0.12.7_1693982050330_0.6289559347361908"},"_hasShrinkwrap":false},"0.12.8":{"name":"@egs-cm/aurelia-template-lint","description":"sanity check of Aurelia-flavor templates","author":{"name":"Meirion Hughes","email":"crakinshot@yahoo.com"},"repository":{"type":"git","url":"git+ssh://git@github.com/egs-cm/template-lint.git"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"contributors":[{"name":"atsu85","url":"https://github.com/atsu85"}],"license":"(Apache-2.0)","version":"0.12.8","keywords":["template","html","lint","sanity","aurelia","angular2","web-component"],"main":"./dist/index.js","typings":"./dist/index.d.ts","devDependencies":{"@types/jest":"^29.5.4","@types/node":"^16.18.46","@types/parse5":"^7.0.0","jest":"^29.6.4","resolve-tspaths":"^0.8.15","rimraf":"^5.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tslint":"^5.20.1"},"scripts":{"prebuild":"rimraf dist","build":"tsc --project tsconfig.build.json && resolve-tspaths --src ./source","lint":"tslint source/**/*.ts spec/**/*.ts","test":"jest","test:watch":"jest --watch"},"dependencies":{"aurelia-binding":"^2.5.4","aurelia-dependency-injection":"^1.5.2","aurelia-pal-nodejs":"^3.0.0-rc.1","aurelia-polyfills":"^1.3.4","aurelia-templating":"^1.11.1","aurelia-templating-binding":"^1.6.0","glob":"^10.3.3","parse5":"^7.1.2","template-lint":"^0.8.12","typescript":"^5.2.2"},"gitHead":"0b4e6655bea99b8fd6983ae0e80fd70a01dd412d","bugs":{"url":"https://github.com/egs-cm/template-lint/issues"},"homepage":"https://github.com/egs-cm/template-lint#readme","_id":"@egs-cm/aurelia-template-lint@0.12.8","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-NmX4mSKBK1557RTzr9DSY8Ff8zSG4+wZviDKpZrR6yHspog0jjHvtiMLyjOUdStGsg2XCGuqaw96UgneCBbvIA==","shasum":"c1295429c83887ba79386a01c7b81c04f3687095","tarball":"https://registry.npmjs.org/@egs-cm/aurelia-template-lint/-/aurelia-template-lint-0.12.8.tgz","fileCount":36,"unpackedSize":104269,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF7akGn3RVsjDx/F5l61gk4jbuopZww2cfepMrWjA0fTAiBPxb5XHmKZwryGIColt7Yzph5CE5+F2XQvBLaGNIrlaQ=="}]},"_npmUser":{"name":"egs-cm","email":"christianm@emsysgrid.de"},"directories":{},"maintainers":[{"name":"egs-cm","email":"christianm@emsysgrid.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aurelia-template-lint_0.12.8_1702306718326_0.39685907795030473"},"_hasShrinkwrap":false}},"maintainers":[{"name":"egs-cm","email":"christianm@emsysgrid.de"}],"description":"sanity check of Aurelia-flavor templates","homepage":"https://github.com/egs-cm/template-lint#readme","keywords":["template","html","lint","sanity","aurelia","angular2","web-component"],"repository":{"type":"git","url":"git+ssh://git@github.com/egs-cm/template-lint.git"},"contributors":[{"name":"atsu85","url":"https://github.com/atsu85"}],"author":{"name":"Meirion Hughes","email":"crakinshot@yahoo.com"},"bugs":{"url":"https://github.com/egs-cm/template-lint/issues"},"license":"(Apache-2.0)","readme":"# aurelia-template-lint\n\nSanity check of Aurelia Templates\n\n![logo](https://d30y9cdsu7xlg0.cloudfront.net/png/30843-200.png)\n\n\n[![NPM version][npm-image]][npm-url]\n[![NPM downloads][npm-downloads]][npm-url]\n[![Travis Status][travis-image]][travis-url]\n[![Breaks-on][breaks-image]][npm-url]\n[![Stability][stability-image]][npm-url]\n[![Gitter][gitter-image]][gitter-url]\n\n## Info\n\nAurelia is a front-end platform built upon existing (or upcoming) industry standards.\nOne such standard is to ensure that all view-markup is parsable by regular browsers; while this allows Aurelia to forgo the need for a custom parser, it does mean poorly formatted html will be ignored without warning. \n\nThe goal of `aurelia-template-lint` is to detect problems with your template html and source before they become a problem in the browser, or are ignored by the browser entirely. \n\n## Install\n\n*Note: node.js 6 is required.*\n\n*Note: it is recommended you use this via the [gulp plugin](https://github.com/MeirionHughes/gulp-aurelia-template-lint). There is also a [webpack loader](https://www.npmjs.com/package/aurelia-template-lint-loader) available* \n\n*Note: If you use this library directly, in a production environment (ci), then ensure you lock to a minor version as this library is under development and subject to breaking changes on minor versions*\n\n\n```\nnpm install aurelia-template-lint --save-dev\n```\n\n## Usage\n\n```js\nconst AureliaLinter = require('aurelia-template-lint').AureliaLinter\n\nvar linter = new AureliaLinter();\n\nvar html = \"<template></template>\"\n\nlinter.lint(html)\n  .then((errors) => {           \n      errors.forEach(error => {         \n         console.log(`${error.message} [ln: ${error.line} col: ${error.column}]`);\n             if(error.detail) console.log(`  * ${error.detail}`);\n      });\n  });\n```\n\ncan be configured by passing a config object\n\n```js\nconst Config = require('aurelia-template-lint').Config\n\nvar config = new Config();\n\nconfig.obsoleteTagOpts.push({tag:'my-old-tag', msg:'is really old'});\n\nvar linter = new AureliaLinter(config);\n```\n\n## Config\n\nConfig is an object type of the form and default:\n\n```ts\nexport class Config {\n\n    useRuleAttributeValue = true;         // error on bad attribute value\n    useRuleObsoleteAttribute = true;      // error on use of obsolete attributes\n    useRuleObsoleteTag = true;            // error on use of obsolete tags\n    useRuleConflictingAttribute = true    // error on use of conflicting attributes\n    useRuleSelfClose = true;              // error on self-closed tags\n    useRuleStructure = true;              // error on mismatched tags (unclosed)\n    useRuleValidChildren = true;          // error on use of invalid child elements \n    useRuleRequiredAttributes = true;      // error on missing attrs on tags\n \n    useRuleAureliaRequire = true;         // error on bad require tag usage (aurelia-flavor)\n    useRuleAureliaSlot = true;            // error on bad slot usage (aurelia-flavor)\n    useRuleAureliaTemplate = true;        // error on bad template usage (aurelia-flavor)\n    useRuleAureliaBindingAccess = false;  // error on bad view-model binding, when type is known (static type checking)\n    useRuleAureliaBindingSyntax = true;   // error on bad binding syntax (as reported by aurelia) \n\n    /**\n     * Attribute Value Rules\n     * attr: attributes that matches this reg-ex are checked\n     * tag: applies the rule only on a specific element-tag, other-wise applies to all\n     * msg: the error to report if the rule fails\n     * is: the attribute value must match (entirely) the reg-ex.\n     * not: the attribute value must not match (partially) the reg-ex. \n     */\n    attributeValueOpts: Array<{ attr: RegExp, is?: RegExp, not?: RegExp, msg?: string, tag?: string }> = [\n        {\n            attr: /^style$/,\n            not: /\\${(.?)+}/,\n            msg: \"interpolation not allowed in style attribute\"\n        },\n        {\n            attr: /^bindable$/,\n            not: /[a-z][A-Z]/,\n            msg: \"camelCase bindable is converted to camel-case\",\n            tag: \"template\"\n        },\n        {\n            tag: \"button\",\n            attr: /^type$/,\n            is: /^button$|^submit$|^reset$|^menu$/,\n            msg: \"button type invalid\"\n        }\n    ]\n\n   /**\n    * Required Attributes Rules\n    * tag: applies the rule to matching element tags\n    * attr: must have an attribute that matches the reg-ex.\n    * msg: the error to report if the rule fails\n    */\n    requiredAttribute: Array<{ tag: RegExp, attr: RegExp, msg: string }> = [{\n      tag: /^button$/,\n      attr: /^type$/,\n      msg: \"buttons without a type have irregular behavour\"\n    }];\n\n    /**\n     * Obsolete Tag Rules     \n     * tag: the obsolete element\n     * msg: the error to report if the element is found\n     */\n    obsoleteTagOpts: Array<{ tag: string, msg?: string }> = [\n        {\n            tag: 'content',\n            msg: 'use slot instead'\n        }\n    ];\n\n    /**\n    * Obsolete Attribute Rules\n    * attr: the attribute name that is obsolete   \n    * tag: [optional] obsolete only when applied to a specfic element tag\n    * msg: the error to report if the attribute is found\n    */\n    obsoleteAttributeOpts: Array<{ attr: string, tag?: string, msg?: string }> = [\n    ];\n\n    /**\n    * Conflicting Attribute Rules\n    * attrs: the attributes that cannot be used on the same element\n    * msg: the error to report if the rule fails\n    */\n    conflictingAttributeOpts: Array<{ attrs: string[], msg?: string }> = [\n        {\n            attrs: [\"repeat.for\", \"if.bind\", \"with.bind\"],\n            msg: \"template controllers shouldn't be placed on the same element\"\n        }\n    ];\n\n    /**\n    * ID Attribute Rule\n    *\n    */\n    idAttributeOpts = {\n      allowEmptyId: false,\n      allowDuplicateId: false,\n      allowIllegalChars: false,\n      ignoreAny: /\\$\\{[\\s\\S]+\\}/,\n    };\n\n    /**\n    * Valid Child Rule\n    */\n    validChildOpts = [ \n      // { element: \"name\", allow: [], /*OR*/ exclude: []},\n      { element: \"tr\", allow: [\"td\", \"th\"] },\n      { element: \"ul\", allow: [\"li\"] },\n      { element: \"ol\", allow: [\"li\"] },\n      { element: \"dl\", allow: [\"dt\", \"dd\"] },\n      { element: \"select\", allow: [\"option\", \"optgroup\"] },\n    ];\n\n    /**\n    * Parser Options\n    * voids: list of elements that do not have a close tag.   \n    * scopes: list of element that change the language scope.  \n    */\n    parserOpts = {\n        voids: ['area', 'base', 'br', 'col', 'embed', 'hr',\n            'img', 'input', 'keygen', 'link', 'meta',\n            'param', 'source', 'track', 'wbr'],\n\n        scopes: ['html', 'body', 'template', 'svg', 'math']\n    }\n\n    /**\n    * Aurelia Binding Access Options\n    * localProvidors: list of attributes that generate local variables\n    * restrictedAccess: access to type members with these modifiers will report an issue;\n    */\n    aureliaBindingAccessOpts = {\n        localProvidors: [\n            \"repeat.for\", \"if.bind\", \"with.bind\"\n        ],\n        localOverride: new Map([\n            [\"my-tag\", [{ name: \"stubornLocal\", typeValue: {} }]]\n        ]),\n        restrictedAccess: [\"private\", \"protected\"],\n        reportUnresolvedViewModel: false\n    }\n\n    \n    /**\n    * Aurelia Slot Options\n    * controllers: attributes that create template controllers\n    */\n    aureliaSlotOpts = {\n        controllers: [\n            \"repeat.for\", \"if.bind\", \"with.bind\"\n        ]\n    }\n    \n    /**\n    * Aurelia Template Options\n    * containers: html container elements (used to ensure no repeat-for usage)\n    */\n    aureliaTemplateOpt = {\n        containers: ['table', 'select']\n    }\n\n    /**\n    * Reflection Options\n    * sourceFileGlob: glob pattern used to load source files (ts)\n    * typingsFileGlob: glob pattern used to load typescript definition files. \n    * pathMappings: RegExp pattern and replacement for module paths.\n    */\n    reflectionOpts: {\n      sourceFileGlob: string | string[],\n      typingsFileGlob: string | string[],\n      pathMappings: [string, string][],\n    } = {\n      sourceFileGlob: \"source/**/*.ts\",\n      typingsFileGlob: \"typings/**/*.d.ts\",\n      pathMappings: [],\n    };\n\n    /**\n     * report exceptions as issues, where applicable \n     */\n    debug = false;\n    \n    /**\n     * Append the linter rule-set with these rules\n     */\n    customRules: Rule[] = [];\n}\n```\n\n## Example\nusing the default config (plus type checking - *see below*), the example:\n\n\n***foo.html***\n```html\n01:<template>\n02:  <require/>\n03:  <div repeat.for=\"item of\"></div>\n04:  <content></content>\n05:  <slot></slot><slot></slot>\n06:  <table>\n07:    <template></template>\n08:  </table>\n09:  <div style=\"width: ${width}px; height: ${height}px;\"></div>\n10:  <div repeat.for=\"item of items\" with.bind=\"items\"></div>\n11:  <template repeat.for=\"item of items\">\n12:    ${item.ino} \n13:    ${item.role.isAdmn} \n14:    ${item.update().sizeee}\n15:  </template>\n16:  <template with.bind=\"person\">\n17:    ${address.postcdo}\n18:  </template>\n19:  <table>\n20:    <tr repeat.for=\"item of items\">\n21:      <td>${item.nme}</td>\n22:    </tr>\n23:  </table>\n24:  <div value.bind=\"car.modl\"></div>\n25:</etemps>\n```\n***foo.ts***\n```ts\nimport {Person} from './my-types/person';\nimport {Item} from './my-types/item';\nimport {Car} from 'my-lib';\n\nexport class FooViewModel {\n  person: Person;\n  items: Item[];\n  car: Car;\n  width:number;\n  height:number;\n}\n```\n\nwill result in the following errors:\n\n```\nsuspected unclosed element detected [ln: 1 col: 1]\nself-closing element [ln: 2 col: 3]\nrequire tag is missing a 'from' attribute [ln: 2 col: 3]\nIncorrect syntax for \"for\" [ln: 3 col: 8]\n  * The form is: \"$local of $items\" or \"[$key, $value] of $items\",\n<content> is obsolete [ln: 4 col: 3]\n  * use slot instead\nmore than one default slot detected [ln: 5 col: 16]\ntemplate as child of <table> not allowed [ln: 7 col: 5]\ninterpolation not allowed in style attribute [ln: 9 col: 3]\nconflicting attributes: [repeat.for, with.bind] [ln: 10 col: 3]\n  * template controllers shouldn't be placed on the same element\ncannot find 'ino' in type 'Item' [ln: 13 col: 5]\ncannot find 'isAdmn' in type 'Role' [ln: 15 col: 5]\ncannot find 'sizeee' in type 'Data' [ln: 17 col: 5]\ncannot find 'postcdo' in type 'Address' [ln: 18 col: 5]\ncannot find 'nme' in type 'Item' [ln: 21 col: 11]\ncannot find 'modl' in type 'Car' [ln: 24 col: 8]\nmismatched close tag [ln: 25 col: 1]\n```\n\nThe full example is available in the repository; including the custom typings. \n\n## Rules\nRules used by default:\n\n* **SelfClose**\n  * *ensure non-void elements do not self-close*\n* **Parser**\n  * *returns detected unclosed/ill-matched elements errors captured during parsing*\n* **ObsoleteTag**\n  * *identify obsolete tag usage*\n* **ObsoleteAttributes**\n  * *identify obsolete attribute usage*\n* **AttributeValue**\n  * *ensure attributes exactly match an expected pattern*\n  * *ensure attributes don't contain any matches of an pattern*\n  * *ensure attribute is used for a tag*\n* **Slot**\n  * *don't allow two, or more, slots to have the same name;*\n  * *don't allow more than one default slot;*  \n* **Require**\n  * *ensure require elments have a 'from' attribute*\n* **ConflictingAttributes**\n  * *ensure element doesn't have attribute combination marked as conflicting.* \n  * *i.e. template controller attributes (`if.bind` and `repeat.for` on the same element)*\n* **Template**\n  * *ensure root is a template element, unless its <html>*\n  * *no more than one template element present*\n* **Binding Syntax**\n  * *ensure binding syntax is correct*\n* **Binding Access**\n  * *ensure binding correlates with fields of known types (static type checking)*\n\nI'm more than happy to add or improve rules;\nso please feel free to [create an issue](https://github.com/MeirionHughes/aurelia-template-lint/labels/rule),\nor even a pull request.\n\n\n## Static Type Checking\nIn order to use static type checking you must opt-in by setting `useRuleAureliaBindingAccess = true`. \n\nyour template html and source must have a path that defined as being in the same directory, i.e: *\"source/foo.html\"* and *\"source/foo.ts\"*. \nYou pass the path of the html file to the lint function. See Below. \n\nIt is posible to change the glob configuration to include javascript files instead of typescript; but this can only \ncheck first-depth access. \n\n```js\nvar config = new Config();\n\nconfig.useRuleAureliaBindingAccess = true;\nconfig.reflectionOpts.sourceFileGlob = \"example/**/*.ts\"; //or \"example/**/*.js\"\n\nvar linter = new AureliaLinter(config);\n\nvar htmlpath = \"./example/foo.html\";\nvar html = fs.readFileSync(htmlpath, 'utf8');\n\nlinter.lint(html, htmlpath)\n  .then((results) => {\n    results.forEach(error => {\n      console.log(`${error.message} [ln: ${error.line} col: ${error.column}]`);\n      if (error.detail) console.log(`  * ${error.detail}`);\n    });\n  });\n```\n\nplease [report any false-negatives, code exceptions or issues](https://github.com/MeirionHughes/aurelia-template-lint/issues/35) with an example of what (HTML/TS) causes the problem. \n\nalso note it will probably be far easier to use this via [gulp plugin](https://github.com/MeirionHughes/gulp-aurelia-template-lint), where you'll only need to pass the config object\n\n## Background\nThis project was the result of wondering why aurelia applications had missing content when you used self-closing tags.\nIn the end it turns out that if your template html is ill-formed, the browser's parser will not complain and you will simply have missing content\nand/or an ill formed DOM element tree.\n\nSee:\n* [StackOverflow: aurelia-self-closing-require-element-does-not-work](http://stackoverflow.com/questions/37300986/aurelia-self-closing-require-element-does-not-work)\n* [StackOverflow: aurelia-sanity-check-template-html](http://stackoverflow.com/questions/37322985/aurelia-sanity-check-template-html)\n\n\n## Compiling\nClone the repository. \nIn the project root run\n```shell\nnpm install\nnpm test\n```\n\ntest with: \n```shell\ngulp compile:typescript && node example.js\n```\n\n## Visual Studio Code\n\nOnce installed, you can use make use of Visual Studio Code launcher (`ctrl + f5`). Also allows you to place breakpoints on ts spec files (currently only for those files in `outDir` path in `launch.json` see: https://github.com/Microsoft/vscode/issues/6915) \n  \n\n## Contributors\nSpecial thanks to:\n\n* **atsu85** - https://github.com/atsu85\n* **Jan Žák** - https://github.com/zakjan\n\nIf you would like to contribute code or failing tests (for rules you'd like) you are most welcome to do so. \nPlease feel free to PR or raise an issue. :)  \n\n## Icon\n\nIcon courtesy of [The Noun Project](https://thenounproject.com/)\n\n[npm-url]: https://npmjs.org/package/aurelia-template-lint\n[npm-image]: http://img.shields.io/npm/v/aurelia-template-lint.svg\n[npm-downloads]: http://img.shields.io/npm/dm/aurelia-template-lint.svg\n[travis-url]: https://travis-ci.org/MeirionHughes/aurelia-template-lint\n[travis-image]: https://img.shields.io/travis/MeirionHughes/aurelia-template-lint/master.svg\n[breaks-image]: https://img.shields.io/badge/breaks--on-minor-yellow.svg\n[stability-image]: https://img.shields.io/badge/stability-2%20%3A%20unstable-red.svg\n\n[gitter-image]: https://img.shields.io/gitter/room/MeirionHughes/aurelia-template-lint.svg\n[gitter-url]:https://gitter.im/MeirionHughes/aurelia-template-lint\n\n","readmeFilename":"README.md"}