{"_id":"@ampproject/toolbox-linter","_rev":"96-f63dd037389a2e503bd919463c84ff46","name":"@ampproject/toolbox-linter","description":"A linter for AMP documents","dist-tags":{"beta":"1.1.0-beta.0","alpha":"2.7.0-alpha.1","canary":"3.0.0-canary.2","latest":"2.10.1"},"versions":{"1.0.0-beta.0":{"name":"@ampproject/toolbox-linter","version":"1.0.0-beta.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.0.0-beta.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"choumx","email":"willchou@google.com"},{"name":"sepandparhami","email":"sparhami@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"bf3d6715e4236f8572671afc02762225036d2b83","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.0.0-beta.0.tgz","fileCount":126,"integrity":"sha512-Dto65+nYjNCl+hYLNB1iNW9T34kxmDo7E4jR3FkfjKxj9a7dkXDzJzHd/iKuJB6OHYLy5EP1vYF0K5ByJF6CSw==","signatures":[{"sig":"MEQCIBk7/dZZlD8eKM6LYaEhp39Rj1nL+JUmSn+e4YkHerKbAiApYJB3dSmYGEFDcqIec0eQrj8w3Q3sEl8A5GBn9GUXtw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1336479,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/p+QCRA9TVsSAnZWagAAYfkQAIiARYLN7x/o6+YFsz6q\n2s9T/U/taw1dE2Khw5nZvLm9vIicbFOTqa16AtWSFguc9C+joqOEPIf6WIls\nMjv7Ndj+OHRMGM20SX+WZvw13SPvGvVfAo/loJ2JItJP7KtR1FATqoVm/H7H\nj3zcjYR/q5UT9tIlBlxvtJfAiDCpo0LkBbnYh2C8Um4p3jXiN9sAXF4avoXS\nhSp8QnDoE783T/muK/KTZTi/DD5sXzbxO32MHe1YF1KrWNkEeuwkRxgULaZ3\nsSv3UCxkELCbTxdfSa2Aex8arJlwPRwBMwtCLxrfkENVBZR8BpoY4ip5CYHA\nnaBLLM1L6Ms9FWnmdlf4XtIHmTHcjkpxxXsH+judmm7Nk2baccfI9h3HWPDW\nIcJDlJhPG9XGCnCRzgm3jrFlqV7mDgPLSBKhFAcjQQmugfmL2UoiSp4CGQYg\nE119giyLsEIuBBgZr2VkwUfJhKxiA1DVTYQ1VHaTtKuz24icZmdhGLS/upND\neS29brzVEx2z140NZHWFFzVyols4NFzBHU/i3Ieq4Q7s0JvnjYPynffMTAxa\n971/zQ4NqGFD7Fhz9fXy+iOBZ5qYp3mNa5yFVgZ/NFk2phrBk4XMRWNi5s6S\nEN4WFdmhe3k+kwpSQ1ducyYrojrBl5xn6vI8vhWB6z+mEFEW8BkToasUUCjx\nwoBd\r\n=ccrK\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":"8.x.x"},"gitHead":"68bce56d4878ace45b6573824a56656667db5c85","scripts":{"//":"See README for more information about these scripts","lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts","cache":"cd src && curl -sS --remote-name-all https://cdn.ampproject.org/v0/validator.js && curl -sS --remote-name-all https://cdn.ampproject.org/caches.json","watch":"tsc --watch --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts","package":"$npm_execpath run lint && pack build","publish":"pack publish --any-branch"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"@pika/pack":{"pipeline":[["@pika/plugin-ts-standard-pkg"],["@pika/plugin-build-node"],["@pika/plugin-simple-bin",{"bin":"amplint"}]]},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"6.9.0","description":"A linter for AMP documents","directories":{},"_nodeVersion":"10.16.0","dependencies":{"debug":"4.1.1","execa":"1.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.2","commander":"2.20.0","node-fetch":"2.6.0","probe-image-size":"4.0.0","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.0.0-beta.0","@ampproject/toolbox-cache-list":"^1.0.0-beta.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.0.0-beta.0_1560190863794_0.7580940521373747","host":"s3://npm-registry-packages"}},"1.0.0-beta.2":{"name":"@ampproject/toolbox-linter","version":"1.0.0-beta.2","license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.0.0-beta.2","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"bin":{"amplint":"dist-node/index.bin.js"},"dist":{"shasum":"ede08d10b8dc0ba8cd05cc0b2a666fee0f57cdf8","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.0.0-beta.2.tgz","fileCount":60,"integrity":"sha512-N60sIbrcLNRBZZbxtZWyoLgudAbOO38TDtUkzHvU4yX58kUJUJAeuNn+kfK3fRdFn2j2PXYq5YTEobeAYS8Zmw==","signatures":[{"sig":"MEYCIQC/17eCbwyRbgXlo/m/FSCBqz53gHBZLStuqdDqZ3nINQIhANBM+JiTTEoL6vXQ073y/1PE7EbDcnTrlCNrkvNeSv/Z","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86760,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdC1ToCRA9TVsSAnZWagAA7AgQAI7uHI9w68pjmgCpNxww\nDwhLvHt898rOtRRarZCALODrdMj/or+RQ5MgFLpBZ4HR9UL3AUyTefp+ZdOJ\n3zYn75O5tGNktjkaOFiM3iD9mXOq6IAwywk7wiiTu8M+8IIFkjCYR6Rn+Svx\nDFvZ+AcBkHW1tFMKhPlI1sGbtxC8s8TNNTrrptWu+YB3ackgzBF8P8O7wuEs\npLOsiBOTGRDTOs7uAd3FaXMZkyVmGVqSZAwtWcgZoVi8bPZbX2dKxfsnkFab\n2odVJILmzoUVKbdc0dGVhW3jCS2Mz/QXKp2ie4P4AMu+nnw4FI6npFYHJV9h\nFp1mp9xMavCy2S05NBURt0XjpELEw3ezMrXMWjSiid/ky6iWkJ1r6owPD9Vr\nqFfIu/kJieQEnQlV57BHnbAAAk2zG9oso3XEDjbW+IGezqusme5pUl4+7HRU\nU89978IHc4dvz+AC98AV/ChDhgRM6NqQSxiEJgKoteeexMNBKVU1NTgqS50w\ntw5VHvHic6ht6cu7Er+0VfomMxgNq0yAo58YFTVOSBTNR3SB+YtK6iblVSSu\nc84GGe9M5BLtHxs9rF175iFCT04OjcZdW1iIvpDEXLKqkSM74BX1eDXiIzZi\nNSlwK/Kv8zVzS4hfZFWcxdxZe2UXc4zQbRzxevlMIfmlNAr9VVZEN3VH4UHr\nU/AF\r\n=9D0Q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist-node/index.js","pika":true,"types":"dist-types/index.d.ts","readme":"# AMP Linter\n\n[![npm\nversion](https://badge.fury.io/js/@ampproject/toolbox-linter.svg)](https://badge.fury.io/js/@ampproject/toolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Status\n\nThis code is alpha quality.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n$ npm install\n$ npm run build # generates src/cli.js from src/cli.ts\n$ node src/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh\n$ npx @ampproject/toolbox-linter@beta https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands\n\n#### `npm install`\n\nInstalls dependencies. Run this first.\n\n#### `npm run build`\n\nBuilds `*.js` from `*.ts`. Use this instead of `tsc` to ensure the correct\nconfig (via command-line arguments) is in use. (`@pika/plugin-ts-standard-pkg`\nneeds slightly different config, but it's essentially hardcoded to read from\n`tsconfig.json`, so we need to use that for pika.)\n\n#### `npm test`\n\nRuns the tests.\n\n#### `npm run lint`\n\nChecks the code for lint errors.\n\n#### `npm run watch`\n\nAutomatically rebuild `*.js` whenever `*.ts` changes.\n\n#### `npm run package`\n\nGenerates npm-installable version of the package in `pkg/`. From another\ndirectory install via `npm install amp-toolbox/packages/linter/pkg`.\n\nNote: this command will emit multiple warnings of the form 'Valid relative\nimports must include the \".js\" file extension' as well as complaints about\n`require` and `module` not being valid ESM globals; these can both be ignored.\n\n(The first issue is due to extension-less imports [not being valid\nES2018](https://github.com/pikapkg/builders/issues/3); the second is that the\nglobals `require` and `module` are not valid ESM globals. Not being valid ES2018\nis not a problem here, since this code is not designed to run in the browser.)\n\n#### `npm run publish`\n\nUses @pika's `pack publish` to publish to npm.\n\n### Suggested Development Workflow\n\n1. Create stub function in `index.ts`, that always \"fails\". e.g. it always\n   returns `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.ts`. (If HTTP requests are required; if not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and `expected.json` (expected JSON output),\n   and `tests/local.js` will automatically execute your \"test\".)\n1. Run the test using `npm test`. If the fixtures can't be found, they will be\n   generated automatically (via real network requests). Hopefully your test will\n   fail.\n1. Fix the implementation, and re-run the test.\n1. Use `npm run publish` to publish the new version to npm. (If you have\n   two-factor auto turned on, this might not work, even though no errors are\n   reported. To actually publish (or at least see the errors), run `npm publish`\n   from the `pkg` directory.)\n","source":"dist-src/index.js","engines":{"node":"8.x.x"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"lerna/3.15.0/node@v10.16.0+x64 (darwin)","description":"A linter for AMP documents","directories":{},"sideEffects":false,"_nodeVersion":"10.16.0","dependencies":{"debug":"4.1.1","execa":"1.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.2","commander":"2.20.0","node-fetch":"2.6.0","probe-image-size":"4.0.0","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.0.0-beta.2","@ampproject/toolbox-cache-list":"^1.0.0-beta.2"},"publishConfig":{"directory":"pkg"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"@pika/pack":"0.4.0","typescript":"^3.5.2","@pika/plugin-build-node":"0.4.0","@pika/plugin-simple-bin":"0.4.0","@pika/plugin-build-types":"0.4.0","@pika/plugin-ts-standard-pkg":"0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.0.0-beta.2_1561023719538_0.7973386470084001","host":"s3://npm-registry-packages"}},"1.0.0-beta.3":{"name":"@ampproject/toolbox-linter","version":"1.0.0-beta.3","license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.0.0-beta.3","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"bin":{"amplint":"dist-node/index.bin.js"},"dist":{"shasum":"1202244f4baa04fddd08c69110296bb3aedc2619","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.0.0-beta.3.tgz","fileCount":61,"integrity":"sha512-gc0KQt7OXFDDqIZWQw7J70DEZ5P5+Vwc2DDpe4V/iPzZM4B2k0tShy4A9qX4FwxXR735zIk1WYO2DHx1RU7lKA==","signatures":[{"sig":"MEYCIQDx7+AxkVeSgDnHOaKws0sizQhx6JpbN7XxIceMLwsbZQIhAIasjbY8ATV872+6JGrsrtAEQCi0nXT0zkyVnZ8GE8K9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98129,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdC1bgCRA9TVsSAnZWagAAdYIP/0pZD6jcgTTow65PKbLY\nUQvSEJFTfX4y72+0AhwT4wt4GnVy3Tn+cErW9umsd/HOpNh/WWfwnY8WHhVE\nZRXyeanshwjcMvqjiVeXoQ7fH+61Ee+PFqc3QtnTogqDUM+H5iC0qjW5cMeg\nTbUWUzDrLJr/vV9bxCpBIBotOlm0ZS2NPemWHjRgkqNpvZ0sQggVdcFOopB7\n2OXbmv3J4AIOQ3mTwyqHzQjCJco7aQ9MPHZdXTml6oqW5G+X348Ya4uHDYCf\nSd1f8QhNIUPBBpu7G/bhVprgD+VYgwPbK0mOElIf926dOzBxX2r01kwRcSp0\nf0+JBKCtmxYiiUpwGxNyfn98aO+Oh/+2Q05gUHdMCEsrgr2rRoQWYkFT99CC\necseA79szrDHCgBfA0RRUn8JWL4htSJC7EFeQIv+Bx2v0eVfDQ2BuTfcuYQX\neBO8JnU33rrPmUy1SHsEzNyizOiuAYL75A+8JjQOUYIbhsOAV/XIwkUmNOcj\nuI0wTEqpOnrqznqVul6bkVxzFwwUOzSrX85526FWUHWsYwZXplgfNwcw6muB\nnDcVx10/rwYHxC9kcbdnIjq7VrScz/ztoa9b92Ywb57so34mv5rqcHPZpYFo\nNpSwITiLCPgA8gtafx5hrCEcZoR8kv/fR4OuNdGje+1DFL9qRxGKvDjjDaym\ngrWh\r\n=UyMi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist-node/index.js","pika":true,"types":"dist-types/index.d.ts","readme":"# AMP Linter\n\n[![npm\nversion](https://badge.fury.io/js/@ampproject/toolbox-linter.svg)](https://badge.fury.io/js/@ampproject/toolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Status\n\nThis code is alpha quality.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n$ npm install\n$ npm run build # generates src/cli.js from src/cli.ts\n$ node src/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh\n$ npx @ampproject/toolbox-linter@beta https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands\n\n#### `npm install`\n\nInstalls dependencies. Run this first.\n\n#### `npm run build`\n\nBuilds `*.js` from `*.ts`. Use this instead of `tsc` to ensure the correct\nconfig (via command-line arguments) is in use. (`@pika/plugin-ts-standard-pkg`\nneeds slightly different config, but it's essentially hardcoded to read from\n`tsconfig.json`, so we need to use that for pika.)\n\n#### `npm test`\n\nRuns the tests.\n\n#### `npm run lint`\n\nChecks the code for lint errors.\n\n#### `npm run watch`\n\nAutomatically rebuild `*.js` whenever `*.ts` changes.\n\n#### `npm run package`\n\nGenerates npm-installable version of the package in `pkg/`. From another\ndirectory install via `npm install amp-toolbox/packages/linter/pkg`.\n\nNote: this command will emit multiple warnings of the form 'Valid relative\nimports must include the \".js\" file extension' as well as complaints about\n`require` and `module` not being valid ESM globals; these can both be ignored.\n\n(The first issue is due to extension-less imports [not being valid\nES2018](https://github.com/pikapkg/builders/issues/3); the second is that the\nglobals `require` and `module` are not valid ESM globals. Not being valid ES2018\nis not a problem here, since this code is not designed to run in the browser.)\n\n#### `npm run publish`\n\nUses @pika's `pack publish` to publish to npm.\n\n### Suggested Development Workflow\n\n1. Create stub function in `index.ts`, that always \"fails\". e.g. it always\n   returns `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.ts`. (If HTTP requests are required; if not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and `expected.json` (expected JSON output),\n   and `tests/local.js` will automatically execute your \"test\".)\n1. Run the test using `npm test`. If the fixtures can't be found, they will be\n   generated automatically (via real network requests). Hopefully your test will\n   fail.\n1. Fix the implementation, and re-run the test.\n1. Use `npm run publish` to publish the new version to npm. (If you have\n   two-factor auto turned on, this might not work, even though no errors are\n   reported. To actually publish (or at least see the errors), run `npm publish`\n   from the `pkg` directory.)\n","source":"dist-src/index.js","engines":{"node":"8.x.x"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"lerna/3.15.0/node@v10.16.0+x64 (darwin)","description":"A linter for AMP documents","directories":{},"sideEffects":false,"_nodeVersion":"10.16.0","dependencies":{"debug":"4.1.1","execa":"1.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.2","commander":"2.20.0","node-fetch":"2.6.0","probe-image-size":"4.0.0","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.0.0-beta.3","@ampproject/toolbox-cache-list":"^1.0.0-beta.3"},"publishConfig":{"directory":"pkg"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"^1.18.2","@pika/pack":"0.4.0","typescript":"3.5.2","@pika/plugin-build-node":"0.4.0","@pika/plugin-simple-bin":"0.4.0","@pika/plugin-build-types":"0.4.0","@pika/plugin-ts-standard-pkg":"0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.0.0-beta.3_1561024223755_0.21090933401044687","host":"s3://npm-registry-packages"}},"1.0.0-beta.4":{"name":"@ampproject/toolbox-linter","version":"1.0.0-beta.4","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.0.0-beta.4","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"e43c39bfcb3c716650be3520bd88922e0137c497","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.0.0-beta.4.tgz","fileCount":189,"integrity":"sha512-35VGzsA8qsyjMoZM3tu+TnNM/6QboBoC87HXyMGWOWYUfK71Z7sawPngjYl+jGN1+1B+OWtwbs7KHvOx7LoN3A==","signatures":[{"sig":"MEUCIDxO4+OI5yk6i4CDZ4qYgekY34hYxaYlSsvkO0anxV5sAiEA2z4naD+vCmvRbFzzHrn8rGxm4ITGUNlA8LAOAMiTK38=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1442844,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJ0nfCRA9TVsSAnZWagAAN78QAICL/ELN1tzBZJZYXOtm\nBJkpPYPGQGL5a1YZINGC1zNQB8dZJUaKKvn9H8b1Vnl7c/aZt2aFUul8heKQ\nHZgNrF//eRR0dXp69I3aTsbaqul+VUBhUgsJETHJlc/HRHm0tRjTUFd6ZvDZ\nGAchSUTv9t+Lv22ogZEUdHIR5O/j3Jsh1xkobeDgCNOStfL+SbqJBAxZI4cq\nTUR+h1bf54gjqHXgUzDCJ1+7hjN/hiQK/5RLIYU0NZfoqJhwXmfsMUyphGJQ\np9+Ay1d3rOxUvL8HrKDUii6HQlwhJxIZFqVvphTPaHqN/KWJd9Kmbo2BtYmQ\nzDFZWd0hn0IJROJJ0/HbgB6X8WMZtK/ADstZx24+JzBdR6g2aFpaF4JDEQ2n\n099ypziH2MRHMAru8Re8YwMgqdH90sDhLJFfNWJJxJmC1Pqg+3t40vIPPyvb\n39H/qs8pnTM32a0PIJIuR75v21gKhpD8SjL6q4jRrD8M4ztrkSNXC4C6AdVC\n1NJAoMxVJ76pwXZPqgPh0ZLjSSci+SZI3/6G6p5gA8VrUHEAp34SRybfkZam\n22MXYos/7SZ7QgqXEwpwsDHJSbhDvn1BpTZg66YO2Z6I7S0ERPcDIUS+M7ZB\nGy1lYr8SZ8Y6/GWxh+NkgjSw1h6Zu8JRb2uVYLqtmByy18lX1CV4Utdh9p4V\n37Og\r\n=h74o\r\n-----END PGP SIGNATURE-----\r\n"},"readme":"# AMP Linter\n\n[![npm\nversion](https://badge.fury.io/js/@ampproject/toolbox-linter.svg)](https://badge.fury.io/js/@ampproject/toolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Status\n\nThis code is alpha quality.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n$ npm install\n$ npm run build # generates src/cli.js from src/cli.ts\n$ node src/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh\n$ npx @ampproject/toolbox-linter@canary https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands\n\n#### `npm install`\n\nInstalls dependencies. Run this first.\n\n#### `npm run build`\n\nBuilds `*.js` from `*.ts`. Use this instead of `tsc` to ensure the correct\nconfig (via command-line arguments) is in use. (`@pika/plugin-ts-standard-pkg`\nneeds slightly different config, but it's essentially hardcoded to read from\n`tsconfig.json`, so we need to use that for pika.)\n\n#### `npm test`\n\nRuns the tests.\n\n#### `npm run lint`\n\nChecks the code for lint errors.\n\n#### `npm run watch`\n\nAutomatically rebuild `*.js` whenever `*.ts` changes.\n\n#### `npm run package`\n\nGenerates npm-installable version of the package in `pkg/`. From another\ndirectory install via `npm install amp-toolbox/packages/linter/pkg`.\n\nNote: this command will emit multiple warnings of the form 'Valid relative\nimports must include the \".js\" file extension' as well as complaints about\n`require` and `module` not being valid ESM globals; these can both be ignored.\n\n(The first issue is due to extension-less imports [not being valid\nES2018](https://github.com/pikapkg/builders/issues/3); the second is that the\nglobals `require` and `module` are not valid ESM globals. Not being valid ES2018\nis not a problem here, since this code is not designed to run in the browser.)\n\n#### `npm run publish`\n\nUses @pika's `pack publish` to publish to npm.\n\n### Suggested Development Workflow\n\n1. Create stub function in `index.ts`, that always \"fails\". e.g. it always\n   returns `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.ts`. (If HTTP requests are required; if not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and `expected.json` (expected JSON output),\n   and `tests/local.js` will automatically execute your \"test\".)\n1. Run the test using `npm test`. If the fixtures can't be found, they will be\n   generated automatically (via real network requests). Hopefully your test will\n   fail.\n1. Fix the implementation, and re-run the test.\n1. Use `npm run publish` to publish the new version to npm. (If you have\n   two-factor auto turned on, this might not work, even though no errors are\n   reported. To actually publish (or at least see the errors), run `npm publish`\n   from the `pkg` directory.)\n","engines":{"node":"8.x.x"},"gitHead":"cb496f081c871a25dc73113ae1e1fccfb59b2732","scripts":{"//":"See README for more information about these scripts","lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts","cache":"cd src && curl -sS --remote-name-all https://cdn.ampproject.org/v0/validator.js && curl -sS --remote-name-all https://cdn.ampproject.org/caches.json","watch":"tsc --watch --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts","package":"$npm_execpath run lint && pack build","publish":"pack publish --any-branch","prepublish":"npm run package"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"@pika/pack":{"pipeline":[["@pika/plugin-ts-standard-pkg"],["@pika/plugin-build-node"],["@pika/plugin-simple-bin",{"bin":"amplint"}]]},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"6.9.0","description":"A linter for AMP documents","directories":{},"_nodeVersion":"10.16.0","dependencies":{"debug":"4.1.1","execa":"1.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.2","commander":"2.20.0","node-fetch":"2.6.0","probe-image-size":"4.0.0","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.0.0-beta.4","@ampproject/toolbox-cache-list":"^1.0.0-beta.4"},"publishConfig":{"directory":"pkg"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"1.18.2","@pika/pack":"0.4.0","typescript":"3.5.2","@pika/plugin-build-node":"0.4.0","@pika/plugin-simple-bin":"0.4.0","@pika/plugin-build-types":"0.4.0","@pika/plugin-ts-standard-pkg":"0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.0.0-beta.4_1562855902771_0.37137659841347626","host":"s3://npm-registry-packages"}},"1.0.0-beta.5":{"name":"@ampproject/toolbox-linter","version":"1.0.0-beta.5","license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.0.0-beta.5","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"bin":{"amplint":"dist-node/index.bin.js"},"dist":{"shasum":"106c3036ea545f4be4f66b91533735b0a461b28e","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.0.0-beta.5.tgz","fileCount":61,"integrity":"sha512-7xIe0z/EN8RgpmYH2kmmOt0cNPF7kvBE03jlZQyIqMhJteeM2a0yFj8HbsT/rtxANvacBit/43BBLo1FRKgc+A==","signatures":[{"sig":"MEUCIQDPusw1CIRgiYXa2gnDzns03MLJohs1QhviyETfmpK0FgIgaMYPRn3DfsHfGhlarrRRL7DiR3T28JNZNcImGrJbVXg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98136,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLJ1lCRA9TVsSAnZWagAApVwP/iIQ6jodeUNfmvLAsbAe\n/zOyvO5SvVi/7HnUdFGsaLFdT1pZOUaLMkjAy1JenVG7qMNhEi7tEwanz4rp\nTjftQNRCoSt23bla/m52YuUQyLuXmdjEEVMIcHtNII+f8fOxCAfacQctr5lA\ntbmMtSFPHhfbKCEbjCBDEuen9GoK0Wlu53msFErRLe2AueGEIImHfMnKn6hr\nyIvz5NFpPaxpo5J2CHA1UR7zayKdvUq9owjxvi69+lSC0PvpwFmiNwaelsnn\nChxcj3b75LCvJ9zkZgclncUGdFjx+hS/GGpagLs2CmFgJYhrmpgrwzTZOmVk\nfSZJ4JuUoc/UAn/1pNVfMDR12l/fdO9szfepPJlmAL09u+3oxIWN3yLCcyqU\n132orxG1WEAivfZaVjws3YDl9wp63ZbGT2aIGxFGUizgTeukqxr5C5EjtIOc\nK6D2OFvVqRB41uqFOmZjGTMkkusKR/mrNHPOtcFeQuJpHloiZDOIGcd5xqOA\nzIJjBJfqzoUEPPT/3iNWejUnK+4S6B5WZH3F30CcH1Kbuj4wcGSE6/PvMqg+\n7WXro1n99Q2HvoOOXbLDJRTAvTXKxI7qW0VUlB4B1g8kPWWEHE4Xv88qQJg1\naTG+2Fc1kAHOfCXBQSwOtEpmDpU9u4Un/WcAgNu65wAgQkuw77sauXo5vpy3\npRU4\r\n=MOkP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist-node/index.js","pika":true,"types":"dist-types/index.d.ts","readme":"# AMP Linter\n\n[![npm\nversion](https://badge.fury.io/js/@ampproject/toolbox-linter.svg)](https://badge.fury.io/js/@ampproject/toolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Status\n\nThis code is alpha quality.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n$ npm install\n$ npm run build # generates src/cli.js from src/cli.ts\n$ node src/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh\n$ npx @ampproject/toolbox-linter@canary https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands\n\n#### `npm install`\n\nInstalls dependencies. Run this first.\n\n#### `npm run build`\n\nBuilds `*.js` from `*.ts`. Use this instead of `tsc` to ensure the correct\nconfig (via command-line arguments) is in use. (`@pika/plugin-ts-standard-pkg`\nneeds slightly different config, but it's essentially hardcoded to read from\n`tsconfig.json`, so we need to use that for pika.)\n\n#### `npm test`\n\nRuns the tests.\n\n#### `npm run lint`\n\nChecks the code for lint errors.\n\n#### `npm run watch`\n\nAutomatically rebuild `*.js` whenever `*.ts` changes.\n\n#### `npm run package`\n\nGenerates npm-installable version of the package in `pkg/`. From another\ndirectory install via `npm install amp-toolbox/packages/linter/pkg`.\n\nNote: this command will emit multiple warnings of the form 'Valid relative\nimports must include the \".js\" file extension' as well as complaints about\n`require` and `module` not being valid ESM globals; these can both be ignored.\n\n(The first issue is due to extension-less imports [not being valid\nES2018](https://github.com/pikapkg/builders/issues/3); the second is that the\nglobals `require` and `module` are not valid ESM globals. Not being valid ES2018\nis not a problem here, since this code is not designed to run in the browser.)\n\n#### `npm run publish`\n\nUses @pika's `pack publish` to publish to npm.\n\n### Suggested Development Workflow\n\n1. Create stub function in `index.ts`, that always \"fails\". e.g. it always\n   returns `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.ts`. (If HTTP requests are required; if not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and `expected.json` (expected JSON output),\n   and `tests/local.js` will automatically execute your \"test\".)\n1. Run the test using `npm test`. If the fixtures can't be found, they will be\n   generated automatically (via real network requests). Hopefully your test will\n   fail.\n1. Fix the implementation, and re-run the test.\n1. Use `npm run publish` to publish the new version to npm. (If you have\n   two-factor auto turned on, this might not work, even though no errors are\n   reported. To actually publish (or at least see the errors), run `npm publish`\n   from the `pkg` directory.)\n","source":"dist-src/index.js","engines":{"node":"8.x.x"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"lerna/3.15.0/node@v10.16.0+x64 (darwin)","description":"A linter for AMP documents","directories":{},"sideEffects":false,"_nodeVersion":"10.16.0","dependencies":{"debug":"4.1.1","execa":"2.0.3","throat":"5.0.0","cheerio":"1.0.0-rc.2","commander":"2.20.0","node-fetch":"2.6.0","probe-image-size":"4.1.1","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.0.0-beta.5","@ampproject/toolbox-cache-list":"^1.0.0-beta.5"},"publishConfig":{"directory":"pkg"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"1.18.2","@pika/pack":"0.4.0","typescript":"3.5.3","@pika/plugin-build-node":"0.4.0","@pika/plugin-simple-bin":"0.4.0","@pika/plugin-build-types":"0.4.0","@pika/plugin-ts-standard-pkg":"0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.0.0-beta.5_1563204964676_0.3899898067554397","host":"s3://npm-registry-packages"}},"1.0.0-beta.6":{"name":"@ampproject/toolbox-linter","version":"1.0.0-beta.6","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.0.0-beta.6","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"57e997b5804f82a23b9cbcddf4fa5aa364ff9620","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.0.0-beta.6.tgz","fileCount":189,"integrity":"sha512-PvlpFRI1fLHfDDqa8Ii8sJuO7iaQGdB/+iuszW06ktduiSlbYUKRNXxyWylWjqJWqa5vR23gGE8HcBLx74gWsg==","signatures":[{"sig":"MEUCIQCdJiiYzg6TyNjawJJbe4IBAaFVGokKpZh/UJWDsDDPLAIgV+nmGZK9u8/6E+utDJKHc5Pyv7rsSbTir9Y+KftMxLk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1464848,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdNwVqCRA9TVsSAnZWagAAugcP/0r0sZLaaz4+VCfkzt6d\nDkamulwPoVvkxOUXrQaDL+wIlt2T/4N2xLBKs2X+FBFxjseUg9j6kwgnLJIO\nNvoX1M4XcMQhayT/LDZxfXUklx8hmBxPhS3FOYh1VkAzT6xY17Y7vqiJaxth\nAjjAtAKDKtLci4b3uQJMcfrT++UTZ+jR/NcZAHv/vwZ3ED9JupbLkSMRc4pY\nW480HN0ITaY8e0+Dl69l6H2zaAVzfJropX/SpK7r/Mza8poEn72gXw/0vqWp\ncIUygU2AK4XKmncn2dNMp0hc4sMeJJeR+31ab2Uojcam/y0ZJzo69QS36+Zm\nn5BEC6Af8KjArcxyVFf+kkWPk4aSbTYeQbSNtfmd+b9TwALJ3qjudm4Fco9W\nL2INz18w+jD+XZclHWJj+LTRJQuzrAhA5hOZq/1vcKFtFlwy4O2xJbyBYwoS\nQ0S7jkYUpLxTzU+xtRiNEo6QsOjrw02aquMrCp4lGxcGpXV5MsBlfZRNeHbD\nEMs7ZZwXGHssZnEPLxVfPqNHifL5PIC1gukaf/ElZQ1y70H1khfxKWzvpy+u\n3WsK9Z89CcRS1Q2IcCSX8PjtRK3XBy+FAVhLFaAITzL89V8njr+yyWwQyvjE\n6Cj1ekzrabB8IH/jg5bydjPPYK/hT0b2+9nJHwvOiqVSnaCwBFfTHVJeOWtr\nP97g\r\n=pn9w\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","readme":"# AMP Linter\n\n[![npm\nversion](https://badge.fury.io/js/@ampproject/toolbox-linter.svg)](https://badge.fury.io/js/@ampproject/toolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Status\n\nThis code is alpha quality.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n$ npm install\n$ npm run build # generates src/cli.js from src/cli.ts\n$ node src/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh\n$ npx @ampproject/toolbox-linter@canary https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands\n\n#### `npm install`\n\nInstalls dependencies. Run this first.\n\n#### `npm run build`\n\nBuilds `*.js` from `*.ts`. Use this instead of `tsc` to ensure the correct\nconfig (via command-line arguments) is in use. (`@pika/plugin-ts-standard-pkg`\nneeds slightly different config, but it's essentially hardcoded to read from\n`tsconfig.json`, so we need to use that for pika.)\n\n#### `npm test`\n\nRuns the tests.\n\n#### `npm run lint`\n\nChecks the code for lint errors.\n\n#### `npm run watch`\n\nAutomatically rebuild `*.js` whenever `*.ts` changes.\n\n#### `npm run package`\n\nGenerates npm-installable version of the package in `pkg/`. From another\ndirectory install via `npm install amp-toolbox/packages/linter/pkg`.\n\nNote: this command will emit multiple warnings of the form 'Valid relative\nimports must include the \".js\" file extension' as well as complaints about\n`require` and `module` not being valid ESM globals; these can both be ignored.\n\n(The first issue is due to extension-less imports [not being valid\nES2018](https://github.com/pikapkg/builders/issues/3); the second is that the\nglobals `require` and `module` are not valid ESM globals. Not being valid ES2018\nis not a problem here, since this code is not designed to run in the browser.)\n\n#### `npm run publish`\n\nUses @pika's `pack publish` to publish to npm.\n\n### Suggested Development Workflow\n\n1. Create stub function in `index.ts`, that always \"fails\". e.g. it always\n   returns `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.ts`. (If HTTP requests are required; if not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and `expected.json` (expected JSON output),\n   and `tests/local.js` will automatically execute your \"test\".)\n1. Run the test using `npm test`. If the fixtures can't be found, they will be\n   generated automatically (via real network requests). Hopefully your test will\n   fail.\n1. Fix the implementation, and re-run the test.\n1. Use `npm run publish` to publish the new version to npm. (If you have\n   two-factor auto turned on, this might not work, even though no errors are\n   reported. To actually publish (or at least see the errors), run `npm publish`\n   from the `pkg` directory.)\n","engines":{"node":"8.x.x"},"gitHead":"4c1963ce6f32ce607ce3925653ab38db250e79c3","scripts":{"//":"See README for more information about these scripts","lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts","cache":"cd src && curl -sS --remote-name-all https://cdn.ampproject.org/v0/validator.js && curl -sS --remote-name-all https://cdn.ampproject.org/caches.json","watch":"tsc --watch --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts","package":"$npm_execpath run lint && pack build","publish":"pack publish --any-branch","version":"npm run build","prepublish":"npm run package"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"@pika/pack":{"pipeline":[["@pika/plugin-ts-standard-pkg"],["@pika/plugin-build-node"],["@pika/plugin-simple-bin",{"bin":"amplint"}]]},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"6.9.0","description":"A linter for AMP documents","directories":{},"_nodeVersion":"10.16.0","dependencies":{"chalk":"2.4.2","debug":"4.1.1","execa":"2.0.3","throat":"5.0.0","cheerio":"1.0.0-rc.2","commander":"2.20.0","node-fetch":"2.6.0","probe-image-size":"4.1.1","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.0.0-beta.6","@ampproject/toolbox-cache-list":"^1.0.0-beta.6"},"publishConfig":{"directory":"pkg"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"1.18.2","@pika/pack":"0.4.0","typescript":"3.5.3","@pika/plugin-build-node":"0.4.0","@pika/plugin-simple-bin":"0.4.0","@pika/plugin-build-types":"0.4.0","@pika/plugin-ts-standard-pkg":"0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.0.0-beta.6_1563886953882_0.4122547128667864","host":"s3://npm-registry-packages"}},"1.0.0-beta.7":{"name":"@ampproject/toolbox-linter","version":"1.0.0-beta.7","license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.0.0-beta.7","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"bin":{"amplint":"dist-node/index.bin.js"},"dist":{"shasum":"112dee2d2e8231906f781ec87617cf5ac0be7f7a","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.0.0-beta.7.tgz","fileCount":60,"integrity":"sha512-wzTF+JwRZvyE2nuwqad9IhibwYGn+1cgW4PUGSTamwZRncpUZXmRv4cS1BKHhLq91v6W7OUWc/tAfurC/5jfBg==","signatures":[{"sig":"MEUCIGGfc2Hvuzyq9fVcSORxN2Y+b6AS7UUByc0SjVFq7NhLAiEAv1oWj6j/defNkY0cwyqVJwQCjNSS+9hUhMTPU9QhUeY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98071,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOGJnCRA9TVsSAnZWagAAsNEQAIaiV9BM/KevymdrhpoI\nBXbdbELcz0uG7wJIVP6edmz8jxvo94yzaeJk3AkMmsuSt2OOnUhcCY2oI6m9\nUhjhNhjEbzG18EyjwqKLkQNpI6aFX54j3XP+k8GvyteBQGlrVTnu4dmH53Ak\nMR3xrXVPiYOH24LS5EwsodfBEIfFvuccqg+Ifgkt8050jjBEPhG4VYHh8kR0\nGmhyJq/ACod2ZHofQ6X1Pi1MgvTXolj36hqANUb1vI26wyZ0wMFtO0MaB6w/\nfdzvz1gM5bAqzDyHVOE81mMDJPJIFEJdAFApYY8TcNh9pzYkaToyBxAKIuQG\ngzSvcSmKRN7nH/P+bwNPAH0qe9gtVIe+lICjDKlXa/bojJTMzUdQfGEdJBIf\nqB8j7f5vyJ0frjLVoNwyW7zZhcLottkqLqP9luRBjMnDuRXZhX/svpPxHAR3\n/mzqwOYCx4xAmUZgWxvbGWcKxwqLTTMgfLhseUIKKoRizo5co6EXWywYiprw\nkpEFoz03qPKUHtluptbg+rDp/a6vHd0HnWd8VjRVkU1fHABPnI/WoMnLjrR9\nQyWv8FFdpVH/bRD8xygmIZ3CxQAK91DBHNrs6h/bKQt73Ng5ZS6nWvpiJMu4\nA7HRJNitmd0lgV4xRxzAs7KHQMXsajeYRRkLHQ+ZhH5ByAKwBTdYaqBO5XqW\nJ1Ju\r\n=jfWJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist-node/index.js","pika":true,"types":"dist-types/index.d.ts","readme":"# AMP Linter\n\n[![npm\nversion](https://badge.fury.io/js/@ampproject/toolbox-linter.svg)](https://badge.fury.io/js/@ampproject/toolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Status\n\nThis code is alpha quality.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n$ npm install\n$ npm run build # generates src/cli.js from src/cli.ts\n$ node src/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh\n$ npx @ampproject/toolbox-linter@canary https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands\n\n#### `npm install`\n\nInstalls dependencies. Run this first.\n\n#### `npm run build`\n\nBuilds `*.js` from `*.ts`. Use this instead of `tsc` to ensure the correct\nconfig (via command-line arguments) is in use. (`@pika/plugin-ts-standard-pkg`\nneeds slightly different config, but it's essentially hardcoded to read from\n`tsconfig.json`, so we need to use that for pika.)\n\n#### `npm test`\n\nRuns the tests.\n\n#### `npm run lint`\n\nChecks the code for lint errors.\n\n#### `npm run watch`\n\nAutomatically rebuild `*.js` whenever `*.ts` changes.\n\n#### `npm run package`\n\nGenerates npm-installable version of the package in `pkg/`. From another\ndirectory install via `npm install amp-toolbox/packages/linter/pkg`.\n\nNote: this command will emit multiple warnings of the form 'Valid relative\nimports must include the \".js\" file extension' as well as complaints about\n`require` and `module` not being valid ESM globals; these can both be ignored.\n\n(The first issue is due to extension-less imports [not being valid\nES2018](https://github.com/pikapkg/builders/issues/3); the second is that the\nglobals `require` and `module` are not valid ESM globals. Not being valid ES2018\nis not a problem here, since this code is not designed to run in the browser.)\n\n#### `npm run publish`\n\nUses @pika's `pack publish` to publish to npm.\n\n### Suggested Development Workflow\n\n1. Create stub function in `index.ts`, that always \"fails\". e.g. it always\n   returns `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.ts`. (If HTTP requests are required; if not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and `expected.json` (expected JSON output),\n   and `tests/local.js` will automatically execute your \"test\".)\n1. Run the test using `npm test`. If the fixtures can't be found, they will be\n   generated automatically (via real network requests). Hopefully your test will\n   fail.\n1. Fix the implementation, and re-run the test.\n1. Use `npm run publish` to publish the new version to npm. (If you have\n   two-factor auto turned on, this might not work, even though no errors are\n   reported. To actually publish (or at least see the errors), run `npm publish`\n   from the `pkg` directory.)\n","source":"dist-src/index.js","engines":{"node":"8.x.x"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"lerna/3.16.0/node@v10.16.0+x64 (darwin)","description":"A linter for AMP documents","directories":{},"sideEffects":false,"_nodeVersion":"10.16.0","dependencies":{"chalk":"2.4.2","debug":"4.1.1","execa":"2.0.3","throat":"5.0.0","cheerio":"1.0.0-rc.2","commander":"2.20.0","node-fetch":"2.6.0","probe-image-size":"4.1.1","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.0.0-beta.7","@ampproject/toolbox-cache-list":"^1.0.0-beta.7"},"publishConfig":{"directory":"pkg"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"1.18.2","@pika/pack":"0.4.0","typescript":"3.5.3","@pika/plugin-build-node":"0.4.0","@pika/plugin-simple-bin":"0.4.0","@pika/plugin-build-types":"0.4.0","@pika/plugin-ts-standard-pkg":"0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.0.0-beta.7_1563976294518_0.7166198087288242","host":"s3://npm-registry-packages"}},"1.0.0-beta.8":{"name":"@ampproject/toolbox-linter","version":"1.0.0-beta.8","license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.0.0-beta.8","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"bin":{"amplint":"dist-node/index.bin.js"},"dist":{"shasum":"37dee1bd3dae5b5c96fa417969f73218987ce2a1","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.0.0-beta.8.tgz","fileCount":60,"integrity":"sha512-4UMRzGwRh0fuH+DxCNyCikrwzcOz7PgsM/BVVepxuykhwEgmNbMoV5X25IspMFC1hKu8Evk4vQlRFfpRqZOrDw==","signatures":[{"sig":"MEQCIBsHt9G8gI6AM42WI2rVWil5aAj1E4BXKBRK6wNTay4kAiACtTaAaTSdn1gxOvuwfP/VGMvxlyzWAIxJydLuW1JnmQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98725,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQqwyCRA9TVsSAnZWagAARxUP+wb+KvA2hEAjfndnRFdx\nrTMYp9W+1OJTaaPlsEJ2nFRs6pVsuEJ2kZ/lLSaP05CiX2jGyEzNkOXAMh8E\nwy8kmtRDyeg8WDofOSCX0cnsXeG613nkk2vpUKG5n7CiHhRdH8Okrcbrs1JF\nrPErr9fgDeJCHEPmOQ1Nl6FDOdS2qxZFUnFv8B9Ikr4NMyw17bD9TlxeFPzI\ntMxOem8Z6alpTXEnAHiVgX8ObMRd8CP83wPionb2bfWLtuMPofn3rrSGywXa\nVZlHFXFqe2ijwONAXZ8RrQSYmz4jLPPeL9SYoCNx99cAjtEQ1ybpHFE2noAR\n4a2RLhZIpVdHnATT0RVeVNwe+uWM2h4QCU1CbLxKM0OIdJy3w3rASmHzyRt8\ncB8rtjJthtKS3xqcW3nv/JNVbZ0RttkIt6BjFG7DHy5YYs5Xap/nIrheEu6B\nljZR8flJ0WyMSk7X2XSYV3uheR5LsJEJkl06Bru6WHbEITejgtg6F7aoQNpK\nBjWWzbFtuJyUS1zo11+BL7atB53Hln0iYfLPSnVure7NETfFBMciXFSFiG6I\nNcXOAcnOezhKDyzsn/RFQypyqqwk8N9J8lLDYtAvNXcpk2F0E2YGDdRFxCcW\nzO+MRn5y7UBnhj4xIlBzhAI0N3pnhdchrsMBDt5ENBxTRSUEcE8bN06hr9rh\neXoS\r\n=RiR+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist-node/index.js","pika":true,"types":"dist-types/index.d.ts","readme":"# AMP Linter\n\n[![npm\nversion](https://badge.fury.io/js/@ampproject/toolbox-linter.svg)](https://badge.fury.io/js/@ampproject/toolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/src/cli.js\n$ cd packages/linter\n$ node src/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh\n$ npx @ampproject/toolbox-linter@canary https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n**Important note!** Many of the scripts below rely on binaries that are\ninstalled in the `../../node_modules/.bin` directory, and *will fail* if invoked\nin the default configuration. To fix this, either:\n\n1. Add `../../node_modules/.bin` to your path. A tool like\n   [direnv](https://direnv.net/) may make this easier.\n2. Invoke via \"wrapper\" scripts in `../../package.json`. \"test:node:linter\" is\n   an example of such a script.\n\n### Commands\n\n#### `npm run build`\n\nBuilds `*.js` from `*.ts`. Use this instead of `tsc` to ensure the correct\nconfig (via command-line arguments) is in use. (`@pika/plugin-ts-standard-pkg`\nneeds slightly different config, but it's essentially hardcoded to read from\n`tsconfig.json`, so we need to use that for pika.)\n\n#### `npm test`\n\nRuns the tests. (If this doesn't work, try running `npm run test:node:linter`\nfrom the root directory.\n\n#### `npm run lint`\n\nChecks the code for lint errors.\n\n#### `npm run watch`\n\nAutomatically rebuild `*.js` whenever `*.ts` changes.\n\n#### `npm run package`\n\nGenerates npm-installable version of the package in `pkg/`. From another\ndirectory install via `npm install amp-toolbox/packages/linter/pkg`.\n\nNote: this command will emit multiple warnings of the form 'Valid relative\nimports must include the \".js\" file extension' as well as complaints about\n`require` and `module` not being valid ESM globals; these can both be ignored.\n\n(The first issue is due to extension-less imports [not being valid\nES2018](https://github.com/pikapkg/builders/issues/3); the second is that the\nglobals `require` and `module` are not valid ESM globals. Not being valid ES2018\nis not a problem here, since this code is not designed to run in the browser.)\n\n#### `npm run publish`\n\nUses @pika's `pack publish` to publish to npm.\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.ts`. (If HTTP requests are required; if not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and `expected.json` (expected JSON output),\n   and `tests/local.js` will automatically execute your \"test\".)\n1. Run the test using `npm test`. If the fixtures can't be found, they will be\n   generated automatically (via real network requests). Hopefully your test will\n   fail.\n1. Fix the implementation, and re-run the test.\n1. Use `npm run publish` to publish the new version to npm. (If you have\n   two-factor auto turned on, this might not work, even though no errors are\n   reported. To actually publish (or at least see the errors), run `npm publish`\n   from the `pkg` directory.)\n","source":"dist-src/index.js","engines":{"node":"8.x.x"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.0+x64 (darwin)","description":"A linter for AMP documents","directories":{},"sideEffects":false,"_nodeVersion":"10.16.0","dependencies":{"debug":"4.1.1","execa":"2.0.3","throat":"5.0.0","cheerio":"1.0.0-rc.2","commander":"2.20.0","node-fetch":"2.6.0","probe-image-size":"4.1.1","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.0.0-beta.8","@ampproject/toolbox-cache-list":"^1.0.0-beta.8"},"publishConfig":{"directory":"pkg"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^3.5.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.0.0-beta.8_1564650546188_0.1255899127743949","host":"s3://npm-registry-packages"}},"1.0.0-beta.9":{"name":"@ampproject/toolbox-linter","version":"1.0.0-beta.9","license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.0.0-beta.9","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"bin":{"amplint":"dist-node/index.bin.js"},"dist":{"shasum":"7361ea6a19267358a12a99ad86f9b0a2a102c538","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.0.0-beta.9.tgz","fileCount":60,"integrity":"sha512-flzPpMbvLeetNGNk0t/nadesaMpBTTtAXqAxFiHbBfzwEKOkDDSyx68ahM7CIQsmj/+ZejunBS8LiOlizhzhpA==","signatures":[{"sig":"MEUCIC8Ni+FVNSDc9Iv+OWcgpIEd7t7pfYdDq/qkmROdUqNpAiEArtzvbUwJu2JDKhXJwqEQqt7DoaUmI0aRPF7XytQUc2I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98747,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQq3QCRA9TVsSAnZWagAAOE0P/j4KBw93ufk4PsC84ntX\ncF7vTMzCRLMOAnczeI+ZgcJVh9hQ8gYPeNp1l0FAtMHs8pXBJjIa0HGq8DWw\nM/+MNNmbKnSd63e+ebmj47JG2mcaH/DjCCHhbD3C8YDgCaa99eFGJMQoa33s\nHH+udJ2QBDwQX/7O1Oq+mLKROGavQlEvC66MPIeSsTqsr2bWoYFErGPadS0D\nPo5CG88z/3aJI1Q9V+o8xc643f8LswkX9loao+d856yuquo2TCE4aD7OmVfY\nsJK69jNtlZwvNTBnwSo0ij8XQjhCqr2TtMEy5qkVOGsn9u5wiorxTDUT5+ui\n3UoHGF7x5I5M2I4/a8pTEvVApcVGC2a4flTgBB2PswcTTrEjQac7K2QAFDVf\nVbcRmzYwa5KQoqPf+hEpGw4iq1Dh2V9LeWrC7BALtKGlsO371pExR22D28zQ\nFy/Y4xXYLe7VQaHFb/x39RNyyxQ/xS10R82ul2aseJOquCTToqCuFMhSM2xJ\nEToPppADPBnjIhMCx1N2rBrUTsH/GnT3wVDfm+RZrqQTQvmUp88pI58JsjtU\nrKw17IPXkB2cudG9HaaZGJTOa58/dEYif/4Pw4ZI9YjynVlMUBk/a1GyojDJ\nqVrzx+y8P15AXf9uA5SVdWamK3TiGPhtOF4XVGjaRSjUbv6k1GAvncPPPGHj\nIAnY\r\n=FoQT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist-node/index.js","pika":true,"types":"dist-types/index.d.ts","readme":"# AMP Linter\n\n[![npm\nversion](https://badge.fury.io/js/@ampproject/toolbox-linter.svg)](https://badge.fury.io/js/@ampproject/toolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/src/cli.js\n$ cd packages/linter\n$ node src/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh\n$ npx @ampproject/toolbox-linter@canary https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n**Important note!** Many of the scripts below rely on binaries that are\ninstalled in the `../../node_modules/.bin` directory, and *will fail* if invoked\nin the default configuration. To fix this, either:\n\n1. Add `../../node_modules/.bin` to your path. A tool like\n   [direnv](https://direnv.net/) may make this easier.\n2. Invoke via \"wrapper\" scripts in `../../package.json`. \"test:node:linter\" is\n   an example of such a script.\n\n### Commands\n\n#### `npm run build`\n\nBuilds `*.js` from `*.ts`. Use this instead of `tsc` to ensure the correct\nconfig (via command-line arguments) is in use. (`@pika/plugin-ts-standard-pkg`\nneeds slightly different config, but it's essentially hardcoded to read from\n`tsconfig.json`, so we need to use that for pika.)\n\n#### `npm test`\n\nRuns the tests. (If this doesn't work, try running `npm run test:node:linter`\nfrom the root directory.\n\n#### `npm run lint`\n\nChecks the code for lint errors.\n\n#### `npm run watch`\n\nAutomatically rebuild `*.js` whenever `*.ts` changes.\n\n#### `npm run package`\n\nGenerates npm-installable version of the package in `pkg/`. From another\ndirectory install via `npm install amp-toolbox/packages/linter/pkg`.\n\nNote: this command will emit multiple warnings of the form 'Valid relative\nimports must include the \".js\" file extension' as well as complaints about\n`require` and `module` not being valid ESM globals; these can both be ignored.\n\n(The first issue is due to extension-less imports [not being valid\nES2018](https://github.com/pikapkg/builders/issues/3); the second is that the\nglobals `require` and `module` are not valid ESM globals. Not being valid ES2018\nis not a problem here, since this code is not designed to run in the browser.)\n\n#### `npm run publish`\n\nUses @pika's `pack publish` to publish to npm.\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.ts`. (If HTTP requests are required; if not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and `expected.json` (expected JSON output),\n   and `tests/local.js` will automatically execute your \"test\".)\n1. Run the test using `npm test`. If the fixtures can't be found, they will be\n   generated automatically (via real network requests). Hopefully your test will\n   fail.\n1. Fix the implementation, and re-run the test.\n1. Use `npm run publish` to publish the new version to npm. (If you have\n   two-factor auto turned on, this might not work, even though no errors are\n   reported. To actually publish (or at least see the errors), run `npm publish`\n   from the `pkg` directory.)\n","source":"dist-src/index.js","engines":{"node":"8.x.x"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.0+x64 (darwin)","description":"A linter for AMP documents","directories":{},"sideEffects":false,"_nodeVersion":"10.16.0","dependencies":{"chalk":"2.4.2","debug":"4.1.1","execa":"2.0.3","throat":"5.0.0","cheerio":"1.0.0-rc.2","commander":"2.20.0","node-fetch":"2.6.0","probe-image-size":"4.1.1","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.0.0-beta.9","@ampproject/toolbox-cache-list":"^1.0.0-beta.9"},"publishConfig":{"directory":"pkg"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^3.5.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.0.0-beta.9_1564650960396_0.022635364375458655","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"@ampproject/toolbox-linter","version":"1.0.0","license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.0.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"bin":{"amplint":"dist-node/index.bin.js"},"dist":{"shasum":"3a2a3e9f9ddef170c8d201a22f7403f1512c1d8c","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.0.0.tgz","fileCount":61,"integrity":"sha512-QArm4LihzRwQNeF8L4EMj2630BLjPenIvlydil6kzYrP1MplD59CeYun2FK1X/tMfn6CFczOpmTzDzw+AOg5Sg==","signatures":[{"sig":"MEQCICuBRXgULmx3W3jTeiXylVuYKVbaY/LEX0M+wb/+rGiyAiBc1Ti41p0IwkoYjKqjei1vXp2kVIk1dcMGMs/sS/0s1w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":185414,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSdwyCRA9TVsSAnZWagAANbkQAJ9cw/VssLBe85ZoO9eT\nHCG2vy36WbFbOzogzbsjNft63JlvrPvFrHKTB17RB2SmgMM5qqkJTklstN2Z\ntYPoAwNaaDWF6GtxFVQP3RZ1O2j994TygN7bxepvCBNK0nk6+uEPvlZzW/qH\nUaXc6JzPZXqdAotU7tKTL2+lat+9VbmTvtDsPd4Q9W3mX1y5d4JQksnas/7N\nJrQJXYIL8lBMVh5LZS4X/Vqt52ZSWggQgVE/oJxYR0p6H8I5RqydRJ5c2rwd\nC3CviqBThvg0UNtXfisFIKKbdm+IUsZX8DrHVna36jS9M+1+aOVtdU1RuBpJ\nvAXXSQrBN3Eomp53N2XUDNo6/oPDNIuGYFkgjDipdUbE8R/KqtALOZOAP1YY\nHZ0FS12n5lWQEXC/fs08FOuBbNZJn+uXlOJHGZqyWPeVkBsWzP4Qv3hAARch\nqfAq66VpVDIQwSFBMURUQnOyQfxZQvJ0N4G3DgCFyLc/PIHDmSD7NYAyxXtB\n6mr0LsLtuMIyKaTCFn8ptlLUGP3hMZz7XHcBU2F+lzfDU+TdmpqOYUKlXzEb\nYNq7QnH8JaQrzVGrbkBaeyaOfLwOgbGDKdnDyeyDdWL9JoKJDnjDJRk8ZLf2\n9A9Btr33uh3pxs8oNpFpEzQZLZM/Yz0KVtuoir6is4eFCYcVKnFeH/XoEuwq\nb+A3\r\n=glz5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist-node/index.js","pika":true,"types":"dist-types/index.d.ts","source":"dist-src/index.js","engines":{"node":"8.x.x"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.0+x64 (darwin)","description":"A linter for AMP documents","directories":{},"sideEffects":false,"_nodeVersion":"10.16.0","dependencies":{"chalk":"2.4.2","debug":"4.1.1","execa":"2.0.3","throat":"5.0.0","cheerio":"1.0.0-rc.2","commander":"2.20.0","node-fetch":"2.6.0","probe-image-size":"4.1.1","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.0.0","@ampproject/toolbox-cache-list":"^1.0.0"},"publishConfig":{"directory":"pkg"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^3.5.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.0.0_1565121585383_0.3318057231522926","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@ampproject/toolbox-linter","version":"1.0.1","license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.0.1","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"bin":{"amplint":"dist-node/index.bin.js"},"dist":{"shasum":"8c1517f444882759b58d847bc303412f3e772539","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.0.1.tgz","fileCount":61,"integrity":"sha512-SRjF1TiFE0F3cYs94xxxXjbtNRMj1bhVf02rNIQ3mLqhbCbPOXUgsDxVqOlLMhg7InXquqMH+hbbzwWkJ+ZxpQ==","signatures":[{"sig":"MEYCIQCXpvRxt56L8gXk3mQxzUSySaYPkHv+dJxDjIzSpva9bQIhAJaEbgdtx9S4HGn6FE0yU0FMD+XmJ6E0xdlqwOR7n0ld","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":185414,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSd7jCRA9TVsSAnZWagAA3IUP/2Y6sweNr3EHT/vmjrfN\nhudzBf568hlU00QoCX7iNAo7uA3KilRTAZ2AEbCSUzY3FlJZrPI/WkloflhF\nnV2xxPm7YPXeVt/Xb9zuNWtm9Irnukvzvhn4GwT2Nyhwl0U/+TZMCZuzvD0l\n+w8i7PeGl6QJTdXB99+HuFF+uWll/qVcbKewQBPNHeVz2DD5MUhmmdCxZBYR\nEqImOvzN4QNWV3VkY1bm35gD3h/H40fRxExGmqT74i4H+pui+l3xeAuWwr2k\n5rEwuCcwVgAaHGp9AFIymkSH7p94OoAj/CfsKf0qMGWTIf2R9nqpUDw/cab3\nQ6dnEnRjf10UN5Sv5GIPM408h347TYjTeqhNolmgaUbRr8ZSYcQZKAIiiqAu\nt2TnlYYl3BTHi5xzx7q8tWd3MUrXgupEw3fq6hbaOQiBxpsCSpDmMlDLdSOr\n9rg+9p93uns7VyEUt3UxV4aSuK9TE8Ow0/x5OB0TRXY51dULM5p++CtA3nae\nqEJ471/3cynkmeDhM412lp6LcTDzaeK22QHUDeAPmCa9VfhKcy7X/NZTGEQX\nK+ySBGmMRZL8aRgAeCbNbtlhJy+ydMjQjYf9lLTwmzGUG8gjDw415baT35aU\no3XKvqFZjoPtt+6cuRBD4ONAP3gts6EeT8+EniTSRoIFKXNXOYkL/s3NfmwQ\nIdVC\r\n=v2AV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist-node/index.js","pika":true,"types":"dist-types/index.d.ts","source":"dist-src/index.js","engines":{"node":"8.x.x"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.0+x64 (darwin)","description":"A linter for AMP documents","directories":{},"sideEffects":false,"_nodeVersion":"10.16.0","dependencies":{"chalk":"2.4.2","debug":"4.1.1","execa":"2.0.3","throat":"5.0.0","cheerio":"1.0.0-rc.2","commander":"2.20.0","node-fetch":"2.6.0","probe-image-size":"4.1.1","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.0.1","@ampproject/toolbox-cache-list":"^1.0.1"},"publishConfig":{"directory":"pkg"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^3.5.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.0.1_1565122274450_0.12739990693178482","host":"s3://npm-registry-packages"}},"1.1.0-beta.0":{"name":"@ampproject/toolbox-linter","version":"1.1.0-beta.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.1.0-beta.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"62f52df23e486aac6cd2defe30a43ad9260253b9","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.1.0-beta.0.tgz","fileCount":190,"integrity":"sha512-EaphtkP+2bhNC5nKBgeOH8JZLM8rW21fWJBecUKEfhhnRzEDO3kk1fpMtdeDnStjPnaGlW5WRudFqjXvZLWVtA==","signatures":[{"sig":"MEUCICFe8D90pblugs7ALHUU53h7AlvVbEbnORXeL4mxSgffAiEAronSIGJs5onXTm5yfaEqii4O8o1OIhS/ZMACNEkzUnE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1472559,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdaDVLCRA9TVsSAnZWagAAo48P/2Gtfg5Mk5+uqd3hKUOT\nVR1cI92WhOTEAliWmNW3kJgf9CsNWi9xZeks93LeB7oFCqbuiXgc4lQwWOwM\nyiR+xlEkX0VionA3gk3xn08duohZ3Oj5vjIqvkHmGYFpOFTIwYNFNiiJMwqC\nR3T9VVLHdbDv6EBsVcR4Ms4QU4Rs0LGjYliPir0FCIVdMRIqRGdGWdL8e5hB\nYle9c2qlwSDbU15UnG9PN5sXsXWHaKRKkAPiXUhT/eygrqANSBM8u0Zx0GOU\nOGNufVfYb69JSD32tL+LqwDFGhsZAgaNacaGM3EUoiPHu8H3WWrSGk3pBwjL\nz94R4QmhL/w1BRXNHhNCC2ZeN01Au7tg2Fc1J9glmQ0EqAJBvcnAzHQ6RuUq\nB8RyL28vqq5mgYHgm1lzV+c5hPxMIDj1tZIdA5cQKwMMhqYRWzVi/Ex/j20j\nWP47H5d0xErqS9TlBfcuZkrqcq6P/RcUeRy3ooUAIMIM48fMbAuI17kQFlQZ\nDfD7tFoyQMZ+TcafTmWnvvsZcCv8M8miEHaBalgVuFO9dO3RuEUJCITkeRbW\nToVHAsBr7/1awOPt3cAWRdjOLhAOzdvXBokt3BlLoArgt6MYQLEfe2Pf1Rcn\nMkkDAkoGinUAGHyU7+dNXxvAFypsBY+LazqNbyHY96LBY8RWquZWOLb/gKCz\nRDWx\r\n=CpAv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/src/cli.js\n$ cd packages/linter\n$ node src/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh\n$ npx @ampproject/toolbox-linter https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n**Important note!** Many of the scripts below rely on binaries that are\ninstalled in the `../../node_modules/.bin` directory, and *will fail* if invoked\nin the default configuration. To fix this, either:\n\n1. Add `../../node_modules/.bin` to your path. A tool like\n   [direnv](https://direnv.net/) may make this easier.\n2. Invoke via \"wrapper\" scripts in `../../package.json`. \"test:node:linter\" is\n   an example of such a script.\n\n### Commands\n\n#### `npm run build`\n\nBuilds `*.js` from `*.ts`. Use this instead of `tsc` to ensure the correct\nconfig (via command-line arguments) is in use. (`@pika/plugin-ts-standard-pkg`\nneeds slightly different config, but it's essentially hardcoded to read from\n`tsconfig.json`, so we need to use that for pika.)\n\n#### `npm test`\n\nRuns the tests. (If this doesn't work, try running `npm run test:node:linter`\nfrom the root directory.\n\n#### `npm run lint`\n\nChecks the code for lint errors.\n\n#### `npm run watch`\n\nAutomatically rebuild `*.js` whenever `*.ts` changes.\n\n#### `npm run package`\n\nGenerates npm-installable version of the package in `pkg/`. From another\ndirectory install via `npm install amp-toolbox/packages/linter/pkg`.\n\nNote: this command will emit multiple warnings of the form 'Valid relative\nimports must include the \".js\" file extension' as well as complaints about\n`require` and `module` not being valid ESM globals; these can both be ignored.\n\n(The first issue is due to extension-less imports [not being valid\nES2018](https://github.com/pikapkg/builders/issues/3); the second is that the\nglobals `require` and `module` are not valid ESM globals. Not being valid ES2018\nis not a problem here, since this code is not designed to run in the browser.)\n\n#### `npm run publish`\n\nUses @pika's `pack publish` to publish to npm.\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.ts`. (If HTTP requests are required; if not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and `expected.json` (expected JSON output),\n   and `tests/local.js` will automatically execute your \"test\".)\n1. Run the test using `npm test`. If the fixtures can't be found, they will be\n   generated automatically (via real network requests). Hopefully your test will\n   fail.\n1. Fix the implementation, and re-run the test.\n1. Use `npm run publish` to publish the new version to npm. (If you have\n   two-factor auto turned on, this might not work, even though no errors are\n   reported. To actually publish (or at least see the errors), run `npm publish`\n   from the `pkg` directory.)\n","engines":{"node":"8.x.x"},"gitHead":"cc04a8267a51e57290ca81610ac6854de1aea986","scripts":{"//":"See README for more information about these scripts","lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts","cache":"cd src && curl -sS --remote-name-all https://cdn.ampproject.org/v0/validator.js && curl -sS --remote-name-all https://cdn.ampproject.org/caches.json","watch":"tsc --watch --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts","package":"$npm_execpath run lint && pack build","publish":"pack publish --any-branch","version":"npm run build","prepublish":"npm run package"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"@pika/pack":{"pipeline":[["@pika/plugin-ts-standard-pkg"],["@pika/plugin-build-node"],["@pika/plugin-simple-bin",{"bin":"amplint"}]]},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"6.11.2","description":"A linter for AMP documents","directories":{},"_nodeVersion":"10.16.3","dependencies":{"chalk":"2.4.2","debug":"4.1.1","execa":"2.0.4","cheerio":"1.0.0-rc.2","commander":"3.0.0","node-fetch":"2.6.0","probe-image-size":"4.1.1","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.1.0-beta.0","@ampproject/toolbox-cache-list":"^1.1.0-beta.0"},"publishConfig":{"directory":"pkg"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"throat":"5.0.0","typescript":"3.5.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.1.0-beta.0_1567110474723_0.8634356234921992","host":"s3://npm-registry-packages"}},"1.1.0-beta.1":{"name":"@ampproject/toolbox-linter","version":"1.1.0-beta.1","license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.1.0-beta.1","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"bin":{"amplint":"dist-node/index.bin.js"},"dist":{"shasum":"20667f882c187f724368c058dbae9c16ddeb5b57","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.1.0-beta.1.tgz","fileCount":60,"integrity":"sha512-nq0nUCDHGvquE2j11Ff4DinQzBIiFUdpzK4UnFWZiNyyL9X+gLMUkdlE1gYu9qdm1x6dBONnopVfbgASuO0AYQ==","signatures":[{"sig":"MEYCIQDF1ENHDAh1QFEwO8g8tPjde2Dd9p7b46knTGJCGDjcLwIhAIDp5nMYKBEr9vw+8ooLVOKBdtHWEZ0K5+MQWAh9v8Hx","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":102385,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg9ULCRA9TVsSAnZWagAANCEQAKDHtw0hdI6wwAeK+ug5\nVTfa4jXJRvl43LCc0fctNEXimA3fjEO2blveou0TfgJA7ZTg7Mw5MqpRT6G9\nEJhY1khmuTptDm2N3HKxyExzDXmbtEPHh/VbtnoeClF4sHSv9eo5hbGWImN8\nGRBFcAn9UKKj0ahBoPZDGn3IkE3npABXX543qZcB6nSoKfS4kGDUYDVLwFwq\n93sfp571pmE1Vz57+7Te4CMr1fU0I0rLhv1J9tzDt6Dzo+3Bezn6/oYvX3ES\n0bigpuoEE4jrX4xP2PvYNBmOnfDg2+ZwQIU9nPnUUXd2/f609Uzi3wBR/zXs\nJC3uYdm+LIF91M1fvicwr5HIwmGdDCvOnS5Mx02t7uvnMgatatyJ3BmJz4Yr\nvfgsgNatuMgQBJ9b7JLTjDDR1HPd1Sa2+NLtjy8XRjK2DTeEG6Lw27Cl72h0\ndLkfhog/xRSxSBAXcJ+yzb5nhJrdhZBQWN1l8OJXNZM8SWEDzjNvcdRD11nj\ns7UZmsKJpauJwYScqNTGvEWLXWzigab8xMnUNQq2p5VVaWNtnY0pyotr6VqZ\nqX8OBDr/blZiSdeMK9hr2LUIQzhR0qOVRRW2s9r76YCtUDtRbmzTnUYob8A9\nekzdl+zofBYGM3smnCcCfmruqn6ezwieFf6uOwATqpZd+iRuRIh4ZD7KpciI\nEG+8\r\n=TvR7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist-node/index.js","pika":true,"types":"dist-types/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/src/cli.js\n$ cd packages/linter\n$ node src/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh\n$ npx @ampproject/toolbox-linter https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n**Important note!** Many of the scripts below rely on binaries that are\ninstalled in the `../../node_modules/.bin` directory, and *will fail* if invoked\nin the default configuration. To fix this, either:\n\n1. Add `../../node_modules/.bin` to your path. A tool like\n   [direnv](https://direnv.net/) may make this easier.\n2. Invoke via \"wrapper\" scripts in `../../package.json`. \"test:node:linter\" is\n   an example of such a script.\n\n### Commands\n\n#### `npm run build`\n\nBuilds `*.js` from `*.ts`. Use this instead of `tsc` to ensure the correct\nconfig (via command-line arguments) is in use. (`@pika/plugin-ts-standard-pkg`\nneeds slightly different config, but it's essentially hardcoded to read from\n`tsconfig.json`, so we need to use that for pika.)\n\n#### `npm test`\n\nRuns the tests. (If this doesn't work, try running `npm run test:node:linter`\nfrom the root directory.\n\n#### `npm run lint`\n\nChecks the code for lint errors.\n\n#### `npm run watch`\n\nAutomatically rebuild `*.js` whenever `*.ts` changes.\n\n#### `npm run package`\n\nGenerates npm-installable version of the package in `pkg/`. From another\ndirectory install via `npm install amp-toolbox/packages/linter/pkg`.\n\nNote: this command will emit multiple warnings of the form 'Valid relative\nimports must include the \".js\" file extension' as well as complaints about\n`require` and `module` not being valid ESM globals; these can both be ignored.\n\n(The first issue is due to extension-less imports [not being valid\nES2018](https://github.com/pikapkg/builders/issues/3); the second is that the\nglobals `require` and `module` are not valid ESM globals. Not being valid ES2018\nis not a problem here, since this code is not designed to run in the browser.)\n\n#### `npm run publish`\n\nUses @pika's `pack publish` to publish to npm.\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.ts`. (If HTTP requests are required; if not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and `expected.json` (expected JSON output),\n   and `tests/local.js` will automatically execute your \"test\".)\n1. Run the test using `npm test`. If the fixtures can't be found, they will be\n   generated automatically (via real network requests). Hopefully your test will\n   fail.\n1. Fix the implementation, and re-run the test.\n1. Use `npm run publish` to publish the new version to npm. (If you have\n   two-factor auto turned on, this might not work, even though no errors are\n   reported. To actually publish (or at least see the errors), run `npm publish`\n   from the `pkg` directory.)\n","source":"dist-src/index.js","engines":{"node":"8.x.x"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"chalk":"2.4.2","debug":"4.1.1","execa":"2.0.4","cheerio":"1.0.0-rc.2","commander":"3.0.1","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.1.0-beta.1","@ampproject/toolbox-cache-list":"^1.1.0-beta.1"},"publishConfig":{"directory":"pkg"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"throat":"5.0.0","typescript":"3.5.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.1.0-beta.1_1568920842747_0.4575643394842621","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@ampproject/toolbox-linter","version":"1.1.0","license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.1.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"bin":{"amplint":"dist-node/index.bin.js"},"dist":{"shasum":"13077791134d213e78af5f9e6d0267c914e78e69","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.1.0.tgz","fileCount":61,"integrity":"sha512-3lpq7XbrsgQkYOCkfKdtCpzp6Z4WeNLMxpSOmvDLlRQCpr14ijIGbe1UVTXzWl5BwEHdLqPdH1WdSCCJH0dvYw==","signatures":[{"sig":"MEUCIQCT7UkwAcEOHiP21M6B90GyuEjaMj12n61I+rEa5PfXJQIgSSI54jamKcvShm2OqO8P5s0z0eLhBJpq32ufT2dqhTk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":185711,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnJm7CRA9TVsSAnZWagAAAZkP/RIrzoP07efe8KdwlAq8\nHL5Xgyrn5cAVK44bGzN4MeuJ2aVrIrRVisc9BAyPS6F2JLnQk2h72gn2EG0a\neELUCJmiCMNfSoJzQx0AyPHqotXq1RYcBiYijxyjZJdDu5hsE6KBaMAl9Dub\npwMDM/y6+Zn/Hha+8VJmZ+QZN6wB4cawperHKusBJWb4H42KoTu4D00y6D/9\nUBtpcCiXZZCQ3URPslKR5ZrWwquX8zdqKA31uKwD7DSyblrZPyFmoHU0UWdp\nMjoCxILNsR8EvCo2iQ5dJphkekW+XEHbQsQW8wp06JPtWdilEB7/OU1aLgxQ\nGLwtZUuHRRpt3zshzP/jkTyIXFn2fapVCFXLT48R+r5RiGtLMUgrBkWFdj+C\nRhD7pWKd1kdr+0ggafpPj4l3ny6qky3S9xOoCO9XsEtIrTYtz3yBw3eEtbGC\ne81q8HeBlKaFMaL7QUEqmsbQV0LzRF3wjq73Zpwnbj8cQafsVe1VX/Maxeeh\nscHnGsDoSWSEyWcZVJjENRJBs8snR9ygWNBMYJ/+e8i+1EJ4CgRBD911rQCQ\nUSOdApLkiU5qUXAWmoR/ELwJG7cZnf2VvrCQjNNZgJ+OLOsW/kmPw/LxvneN\ni9QAHwlnrlW8aYKgTHEX6Hj0U00/yBcAzqUo2Kff7nyAPwS1qZzl1yhkqAiO\n9RhT\r\n=kmwS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist-node/index.js","pika":true,"types":"dist-types/index.d.ts","source":"dist-src/index.js","engines":{"node":"8.x.x"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"lerna/3.16.5/node@v10.16.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"chalk":"2.4.2","debug":"4.1.1","execa":"2.0.5","cheerio":"1.0.0-rc.2","commander":"3.0.2","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.1.0","@ampproject/toolbox-cache-list":"^1.1.0"},"publishConfig":{"directory":"pkg"},"_hasShrinkwrap":false,"devDependencies":{"throat":"5.0.0","typescript":"3.6.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.1.0_1570544059142_0.07860461536545071","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"@ampproject/toolbox-linter","version":"1.1.1","license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.1.1","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"bin":{"amplint":"dist-node/index.bin.js"},"dist":{"shasum":"64a361143dcf499096a426c511d47d883bdeaaf6","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.1.1.tgz","fileCount":61,"integrity":"sha512-h8s6W35QbTSRQlKObddwhuGxx9ZhktqtwZZZZ4FQ4QYNE1XhA96UVwPySQgd7chG8pJfB8RYOZ7GLnOjEKOw9g==","signatures":[{"sig":"MEYCIQC4ka3DVqrvvAZ6sPHTNJNXTX7w8LcbIbfkwLXlNl22QgIhAMQaUZUQrKcwt2KVAImL5f1QJi/1Ca8209S0KniilHOm","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":185711,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnKCNCRA9TVsSAnZWagAAVpIP/jbUFMwZFdRYSufgwtDB\nQzxvM4xkbIQYl1ovTvXgkXYuTa2gixM4x2ZkHA/D6jA82wyfH3G5ZN12gnaI\nWQSfxpTbVuB3BqrSIGcXckhlQdlLD10VWjnh7yx/OmjYfPzmm+PvZy6WGZFF\nJJeZWpk7jeHVwfvH9AC0e9StLbexmXg06Bwli0LxQkPZSAWyzjPmyu9risHW\nHNZAr5R5UAM8L/h1u7OmTS3v/PcA2oP3zG8MBTOe3oKNZgxoXxW9JJSo0gBI\nddAIVMYob5VAs5CrYoybjkLAycUns/MrpY7yJIpldgKWPZUOVsY3wKhluV8I\n/G7Jz5ZT9OzZG7x1LHnflHBIELcxxPR/OFEHKKTaWEqAxTsq1oIknplxxiot\nLeYePqU4D0bHuwG2fcBrClM+yd/5Jw0MQl11mMOhsh6ukIb9QBf5T/XIUzRa\nGw8sx4UZ5FI1TkwjjFU5YnynRHcIiENLrsTan/aOYtS1HBCw/tHv2QYSeI6T\neR/LX7GX+tq4Dcl0uSkkphUmOA5g1AI6PDJSXAdC9TzfysbZF9uDOXt8QOIt\n4MKHnjY588h6Rn722BZhCh4wzneiewnF09PoNoCwMpZR4wJGCaqb/7PDs/9p\nItvtEFsMxe+JLZnIDu9ZdUytUX3zx9xT+O//dKaa6a1LTRoLki658Tw4/c8H\ndxk5\r\n=GIOG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist-node/index.js","pika":true,"types":"dist-types/index.d.ts","source":"dist-src/index.js","engines":{"node":"8.x.x"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"lerna/3.16.5/node@v10.16.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"chalk":"2.4.2","debug":"4.1.1","execa":"2.0.5","throat":"5.0.0","cheerio":"1.0.0-rc.2","commander":"3.0.2","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.1.1","@ampproject/toolbox-cache-list":"^1.1.1"},"publishConfig":{"directory":"pkg"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"3.6.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.1.1_1570545804908_0.857169286079134","host":"s3://npm-registry-packages"}},"1.1.2-alpha.0":{"name":"@ampproject/toolbox-linter","version":"1.1.2-alpha.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.1.2-alpha.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"f0244f02cff617e68bca73e30119b15ce2ec967c","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.1.2-alpha.0.tgz","fileCount":55,"integrity":"sha512-kQY6u//QjwGXUMGBbLDBd6iz6L2JXyTBGsRGdDYwbyoVuAELclUjVbuF9AZ93wIwD0J0DQ7L3HBH/JX394VlYQ==","signatures":[{"sig":"MEUCIQCQADfe1GkF3WGD+srzKprVPGPYu/CqcKBdKC1tEQ9OrgIgf6InFlElM/UqW2sRwLrNz67jcygdxMuNO65i42TsNgQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79450,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnjs5CRA9TVsSAnZWagAAxCsQAJ++aroBjRKZERUnqsQr\nfD5LhlIazwdjVYo4jk1ycNOwU+Z7F1x0dHrlZC42ZBy7+B+xVdvDWWUU987Z\ngcejoKWGtU5MaS3Dz70UHReL6YMGrlblh3qKSr64qUIoxJmIdsclziuqmHMF\nqYv0hhZGFVD8/Kk1auf6EehvLoZg+SFXHLpb/4a6PWOymPMWJkFASuOST4G5\nr3g8nNNyyGij/AAbk59hJDEic3B8DD5Le6yiI+VKI31BWXQ0eb3EDRszcRs6\nJVb4Dj6vLMxMae67HZxZ7Zs0QYUMmIEhGmSuqSKjyoPRnM6xkNS5DhW7Hc1u\nh8wGI71IhEXJS4RVnFDSzQTUtSiD36edZlELAAuDjWoi0M0cfbery5QveFRL\nhvnC+oFrmZqCmpsY80EO6OIZSquzukfVASV5E0N60XiNlptq5fOznyQsyT9A\ndj2DswhB1hd8a/W7ECv1kZiGsFpshBOTWrmX8fkRcNY6nyirfjChJTkxJkG+\nosf5ZliHaf7ypjPt8ZoO957lE2kWhCLFujum5Oe1apYRqRtZMW7jQnhbhGZD\nDcasPZUhtErXQutUSqpXvzjPqKuwYi/ZvsilMPg5X+ec3MB5wUU4G5oNpKRd\nVZ/mTp+EuIzGeedNs5a75aA+1I9pzHDD+Dtgp645Barmj12XfpAFPTqZczrL\ndBU6\r\n=R/pB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":"8.x.x"},"gitHead":"9fe174b241a47ace8a888dedfa748d59e7648de2","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --fix 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"lerna/3.16.5/node@v10.16.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"10.16.3","dependencies":{"chalk":"2.4.2","debug":"4.1.1","execa":"2.0.5","throat":"5.0.0","cheerio":"1.0.0-rc.2","commander":"3.0.2","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.1.1","@ampproject/toolbox-cache-list":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"1.18.2","tap-parser":"10.0.0","typescript":"3.6.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.1.2-alpha.0_1570650937181_0.599228749321459","host":"s3://npm-registry-packages"}},"1.1.2":{"name":"@ampproject/toolbox-linter","version":"1.1.2","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@1.1.2","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"prateekbh","email":"prateek89born@gmail.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"e7fada3c97f99b97f8630f8d6fb6b0c20952a9fe","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-1.1.2.tgz","fileCount":55,"integrity":"sha512-//gr7BW6fH4RCq1W81Vgzjp25PDF16izPmId5VWugtOxVXSrLxPwOFvBN/l7bw43QYXuZcSku1Kty4SXDqnj/w==","signatures":[{"sig":"MEQCIDAzaOvype59hxvWD2qOmpSCp82ds1w4Sp/VYJ4z0V/YAiAQY7L0sPaE6aCXhRA8tUpkDWf2PSJMXuRZwJt/GvIPHg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79442,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdpclvCRA9TVsSAnZWagAAaBEP/jCDMn4Oyavcp0kS/GGU\nbPGBVaRpmdXJT6ND11YhXMTKnG91AFNKXZshmYENKccyBjmbCt4mCMjlNw3U\nVoiWKjHpz7iYtZBOJhEpm/8SzXooeFsbVhgFCuPGQTURgFz4N1UMjmYQiE/C\nicVZ+7pj4BYvkYW+u3cgmMk5eYMKqNa0mrPnzGjBE3bw2ObRhzLn1DH8PIrb\noovviOCqpDM4TUIDIQHAKQyQ7yXHf9idLIZReSqYAWdRDCn+E2lfwQAGaG+D\n/PilWy1okSBxYd0nYcilLTo5FktQmRhoXGq2EuZZ8A1MvBt8HeEUgfqM+S8F\nXQUfhQ+TuSGI5kve6ohc5ovWbBygw3ihna9lqNmuo9bYXlJ8sIkptTnTWAO7\n2ec+ZGlP0+G+rAuEqT+ACpNf15I4nlbrzaJUdARGCX86AXStpVRmKx3idde2\nYDtyeQXnFsd+QIxigLXgA3Eur/wUmsPFGdbAfiF3SuN3BvXNAesmiNOc8M7R\nJX6YUJgY/pVLw8qFaUq3BsVfsfSYMVSF2PQX4N9NTv39jfF7lZD+wsUkr7pr\nWkJqiIRUWVIvFewS0Btgo5vWSCxiVRPL04XXVmCcWamT6o4iZ1fw+gM1DdtO\nYME9mFo3qcAly8+GG3ZsvQ+MsILTRmQCzlNRP67hhyjKSCnEIR50pfmscDLW\n4OLL\r\n=tju5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":"8.x.x"},"gitHead":"e914411b6dca30b203875a6be32f2b07fcf385ed","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --fix 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"https://github.com/ampproject/amp-toolbox/tree/@ampproject/toolbox-linter","type":"git"},"_npmVersion":"lerna/3.17.0/node@v10.16.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"10.16.3","dependencies":{"chalk":"2.4.2","debug":"4.1.1","execa":"3.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.2","commander":"3.0.2","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.23","@ampproject/toolbox-cache-url":"^1.1.1","@ampproject/toolbox-cache-list":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"1.18.2","tap-parser":"10.0.0","typescript":"3.6.4"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_1.1.2_1571146094674_0.8653723863701592","host":"s3://npm-registry-packages"}},"2.0.0-alpha.0":{"name":"@ampproject/toolbox-linter","version":"2.0.0-alpha.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.0.0-alpha.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"sepandparhami","email":"sparhami@google.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"cfa2e6d8d867e08596bf7b50a6a1359b263c6b38","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.0.0-alpha.0.tgz","fileCount":55,"integrity":"sha512-eAVK7PqmX3AOJb7qvnnM+g80IxbbEWNz+9BMP29+KEx+NKDw89KDF+/fbvQCLa5g4rPft2XAdqZPZgZTEwmTyw==","signatures":[{"sig":"MEUCIQCEZAwY2uVycQxk7zUfVg2EpgmjEu4ktwjwVTqc+r9OhgIgTi7wqWLidOojfXkOjG5gUe6bsjpzcfKbgYzcl3TJ5DM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79846,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeKFyGCRA9TVsSAnZWagAA8GsP+wYL/naDy4QSl8s8akkh\nPaUIi4ikIHAku7/901kg859HOSs4ySRC6qfuiKoFAlc1jD9bAETlEFp1jiQA\nMKuLo2UeU+3rC2HAkhnkYYhdOB47d9epWUnZN0DqsCjYTNFaRqxG7rnAK5sv\n/y6rW3+vp24G/zFlAIPo6wM1leS7hdMNahVu6UeK/TSM3xCES+1fIE5Eue33\nziNfVVJTd+gzAoBRMducIBVX1mSdAGNBp5SX5Buozl9S2e4eZDnvnoBQ65Rr\nmOY0bdfaltDiy9qGVYwDUkb1gsxU1eg5S1uCYM44BTXVOTqu95Slr8ff+jGx\n3Af5CYi67L57SpQED7vZmUNB95tVr24fy72zqq3zmgt4p9HIxz70yHon98T0\neYtdf5Q1dJcdYCAohve3FFqrvphQShuk+hDDohLqt5m38RBzu0fTaojjabXs\nmrCqgxHkwVeNRU2VmgFLZoC2XOYf91emzJfC7tVHI6JaeigBYzP/0L9eqFx6\nnKWoTH95Gdv66QSTEjk+HX38uXBZkrswoPv98HsB3wXZCwsMxIdAbga5hmo0\n4pDJdUUeLVht5tapO6rAzN3zpMoa+FKhzUYyDjrKDHYOkpYGpr9Iq5leoTC1\n2+J7aiPopU+wCL3bkPu7m2IH5UiHMCzW6FnF/2vH5sxQxbNbYUJihJR1uttr\nWAfG\r\n=2zPY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":"8.x.x"},"gitHead":"6140009b75eaa18afeaccf0a5f1996f490dcebfb","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --fix 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.14.1","dependencies":{"chalk":"3.0.0","debug":"4.1.1","execa":"4.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.2","commander":"4.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.29","@ampproject/toolbox-cache-url":"^2.0.0-alpha.0","@ampproject/toolbox-cache-list":"^2.0.0-alpha.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"1.19.1","tap-parser":"10.0.1","typescript":"3.7.5"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.0.0-alpha.0_1579703429650_0.02888546172706241","host":"s3://npm-registry-packages"}},"2.0.0-alpha.4":{"name":"@ampproject/toolbox-linter","version":"2.0.0-alpha.4","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.0.0-alpha.4","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"5702f3faeb4c3794e69bfd0af7e3482c2bfcb85c","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.0.0-alpha.4.tgz","fileCount":55,"integrity":"sha512-OnFjz1u703XOPCKvVwV4vN28WqCJCdokquNdfTUOMTu0JfTop18Keg/N4/C639eudL+vV9v/MONDiag/DnhYlw==","signatures":[{"sig":"MEUCIHjISR7NHmo9RFHNNi89v8XF0EqzRCSqN7/dC4ogxh6+AiEAlu0EFzm9j3Ut1RtOI52KDKU2HG8Uwir8gENQaMdoYAo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79846,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeMFKPCRA9TVsSAnZWagAAoiAP+QFRY5VbJU4PLKuQn7UO\nTjkokCShRhECncYcpHeOKjYROz/IPPPMyEuwW/5mqpner8EsLXNXZqd2U5OG\n06ARbZpVw0cJdreXDld5XB+dqwcWD0IcIZUm4/U3H4x1aiEiU2DxuM1i2Xji\n065kjv14kO3fNoqEk5PVrFjHtcb+X3ZUyjJykazdGRkMxQGTCQgjGV6Fp5tE\nwoRw1nzglfDVNPJEF6a8lwEC+zSaRN/T/FJpTYMxaRqClP/gTR2QPk8d4753\npRMD8Wjv9Y54Jbn4xrIlM8CbPQyvFOPvWAuN0dgofi0YPWKqwr/GNDd7eDYi\nkmhiKt0ArhC5kYfTPO4AAvNqm8ppEqsDUix5PElpp2RNQeU0aNUPTcnEpLkf\ngpILLyZXKMeAXRwDf8lM6A1Qmie5ky1smXUMEr2bzBarze8Xe4E8Q2LXetJm\n822Xq/BVtTZJEAP9N0l4nDVmM+daFKTTnFaoRXOIld8Mgylas86CaBePvcz3\npRJ8Jf97BETMOdsqHua/FRFDMRaK377YCFXXFI9SRt2faST0VSsY3Y8/Qm2j\namFbbJ8BNfbpRe1OazPJ2VxAf8fUALLI1ewiR8J79O5f3Y6EVEzpvWsMLJV3\nESOGuMIDlg6KzopoSOtdT+7m2Od78rLZfD50EcW1rPnO6Tv36xgGolz8EtZc\nMcCQ\r\n=pKJX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":"8.x.x"},"gitHead":"fe0d72e23b0d537c91fa78c465ca1ea99d3487ab","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --fix 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.14.1","dependencies":{"chalk":"3.0.0","debug":"4.1.1","execa":"4.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"4.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.29","@ampproject/toolbox-cache-url":"^2.0.0-alpha.0","@ampproject/toolbox-cache-list":"^2.0.0-alpha.4"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"1.19.1","tap-parser":"10.0.1","typescript":"3.7.5"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.0.0-alpha.4_1580225166677_0.549217152444305","host":"s3://npm-registry-packages"}},"2.0.0-alpha.7":{"name":"@ampproject/toolbox-linter","version":"2.0.0-alpha.7","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.0.0-alpha.7","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"b048a377d8aca5a8d949928b599f19bce019d5e2","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.0.0-alpha.7.tgz","fileCount":55,"integrity":"sha512-pZkAFVM/6IsPCp8p1a6aITqqK4KupangHGWg63TnWjsyNYDwQW4qWnfp9kfFd6NPRxFRx8Mn1MkeCvW2dvb5sg==","signatures":[{"sig":"MEUCIQDctwDuaQ6AyywcULX+i9FVpJ5sRf5lHX1y2LPv/I1kMwIgVjcH0ANtPTfCxX/3CGCVQQIjC/8GNPdNELK3Jkteux4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79806,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeRbwCCRA9TVsSAnZWagAA1zUP/RLe2MuRdYYrMc1slRrJ\n2G87OE/3/SpcNoHZOZotlNFxMAFeFqYlKnkwpKod/ExJdiQWfCUON8lKJljg\noyN4XlcMXBYV1OAZsw9i1psQyyAFATblX5gMV1t4zufGksIR98Gsu4LRg5CM\n7S4yc776ZnxGRi9CIXTkw9QXzMb8M4g2MnYTIT0FHYQU9T8FN6EpudMhC8gV\npbSoPHA/gE90qGIOxPkEjpum4RvUAsCHxZGezz1r4EnCLG8EZwVnvbsi6Jw3\nww5tej7KbxAG2sDT4fLVBodf4yjTEG6TA8jTBaUO9TToRcovzUnPBjT046Qr\nyI1mMi33zmMClyzYlWhTAwBdcE4ZUrULPFIHdDhLakJNCiRWgK1ab/JdV0CT\nMlbN/6WuykFFY9qzFPO4IHrWsAOw5f+nhXRTM0xEC2V5y3ciqf4wLKABBYKa\nZcoBwdcRY4++KhfGbGjaJbEdi+lyTEFhm7s0BcrvNeaTwyr20x4wVLI52+Du\nkuxuIbpux6aro2JYjaWUAxxlGYGNV8Pw5wqJRM0f5nR2/bN9P98FZ4lsxUoV\nMhZaoKXl3qeybPs0zKbsAeZnUrFVyjBf2RluajLXq2kFz7pvp/jA15rfZQ6V\nWIg4E+If0IeEjkiKrL69GAosQC4UqIJlm7TNYHHk81Z8Jkf5pTXWhTIdj12G\nFYOv\r\n=qLcz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"2e6b60d382d205f884cd78ce4d41fd702121145d","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --fix 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.14.1","dependencies":{"chalk":"3.0.0","debug":"4.1.1","execa":"4.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"4.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.29","@ampproject/toolbox-cache-url":"^2.0.0-alpha.0","@ampproject/toolbox-cache-list":"^2.0.0-alpha.4"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"1.19.1","tap-parser":"10.0.1","typescript":"3.7.5"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.0.0-alpha.7_1581628418437_0.5782364732910279","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@ampproject/toolbox-linter","version":"2.0.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.0.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"5d11768033127a7db823525be0bffb4c54c24a46","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.0.0.tgz","fileCount":55,"integrity":"sha512-EQJ7fws5KSi0SXS5DoMtN5nArY6x7Fc0tnBZZUPGZaxAr2r9I0d34c+9m0ZE6V3pdIdsDcuQOzfMUj2kWFPqIg==","signatures":[{"sig":"MEUCIAzH10bwNPLIxgvVTPp49VAnawLfg6b61kVcwCeQt9LsAiEAnQWC9zGaQIHG1IzasxJGHAT7Vgm35lPIDhpiYZNnUMg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79782,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeRb6fCRA9TVsSAnZWagAA1ZAP/0RVoMBHqHbimG8Z34fy\nL6uqFuN5aAFxO5a1UXW6b9rtoempsGynyLRvvzULxxM/eCmv7q8MhDw2lBu2\n0LDfoX2Xwi0E26gfVzPe3CYUQ+siyMeULo3XU/kkoCswDB5z42bf07PC2AID\nmAOXlWH47qyJqZ3IeoiulbfNWg8juSOTN+xQfAKpxiOgwSDNYkih2fNYczji\nSyTNqriH1BlwrYqPp49zVZ6eCMEzTGI8Y+RHTk0YzkIT2BcWJ2vfJN870FEp\nNjmof6gh5GkT3yaI6Mr9xiKHU5ft1m23LQ1tQFFza/BiNzi3kxy6z5Z/mhMv\nJiPEb6vvnOml7cUkhOUjGfIkphzzQEzxagGTR9MiBbQXWj62jVU395uRkLa/\nbMU1jp+eA+8SSVLjE/H3y2+cmbWxuodoe1udjOx2loW/8yP0iIy5/EXw5MM/\nXBr2jAxwLqan0+tVzEwp0YUJUsIyFWAyB/VODHxKwaCSfe5ikTVMAZTpnnb/\nFtmON7Q8pfn/VI6/A+53OZfew9BB5S7eceOQsABgKk7Iypj0O8rZ+NXOgEH+\n2oXWqvjSq4rsjH0A2pGcvuaA5j7X32+eDS1paKMt/HPVg37HPZpscuOlCd69\nzWAVzKXWgA2KVTVaT7lWE1bR5BBOkNOZh6OSGGuzYfyKjIteNcxbT2T8IBY3\nsWe4\r\n=hJtt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"908b78b9d007d18d97c50b5a79421d5936150233","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --fix 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.14.1","dependencies":{"chalk":"3.0.0","debug":"4.1.1","execa":"4.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"4.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.29","@ampproject/toolbox-cache-url":"^2.0.0","@ampproject/toolbox-cache-list":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"1.19.1","tap-parser":"10.0.1","typescript":"3.7.5"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.0.0_1581629087248_0.025282750010331867","host":"s3://npm-registry-packages"}},"2.0.1":{"name":"@ampproject/toolbox-linter","version":"2.0.1","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.0.1","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"e9ebb84b8122113ed84717aed4b9f2c464f28b3c","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.0.1.tgz","fileCount":55,"integrity":"sha512-k5ormAxaBDG/LqITIHO7EoiBGujSMxgDuDZKxDFToSPO1io4RIIGiZZKDYQq04jviCvB89zfZSEIQjGW7x/LVA==","signatures":[{"sig":"MEQCIE3cw2J0GrH8qAH41xo7HODPEc5HLrBi4utlce2jeiOiAiBuPEhuI1N/dYi2hr8aS1LyrbGL2k5ShrjYVmb4eR/21A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79804,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJecgrDCRA9TVsSAnZWagAAmzMP/RMzVZ5w6VMk3d2RwY4D\n+u47E/G1lXdrPfAmDPE7gyMvet7wLGWfk5WZzJsyIFYR6CiFszYYCgB/mQpa\nKdxASreb0nD0ZCd4X0yLcG1aUScYcARD4ZT3F0uJAySjyfXCbSq0Ptr4dWKS\n/hKQtVKF1gBR9NEkFlj87Q6VgBqfrYcG9fylV34Xv5xipKkcCjais4Yo4j1F\nbDuOYLHwiNxxEWhOuIkJIVs9KFIFkFw/voRA3FkdkTd6f++FJZ5OOqWV/T73\n/tK2bsmmdlSGFnY1viAeQo3olZJ6vtgdQLrxB4xdO0aYjnbm+ImGLGA2pgah\nVNhoBqYFMlbFct7St+b22l05nWUJxmAnwkstBR5GXTs5IthRHaQE4w+0yT1h\nxyRgLecMpQC3kV+2736HqopMhA5QMLfoLrtdBY+CngqN7hNr9SM+PjdqBQSE\nxN0ijuc+OIwm92dF8uFLpVRJYQE1ASTN6706+C1i7Jg7VhE+QPZ7YvIbkdaC\nQRIdfmOx+DB4pzOfqtPjE0lTVNl/pEVUsqKnbKxhA8Rt6A5Jy91jFe9y2SGu\nSw+CRC/C7+ibef8CWsZYOoK9Ooj72IAkYxQFMdKaVaroEpWDrGGFdd6fFAXN\n+xlsrx5zMDXBX/sqVeoVF7xgX6svZeEnnvs3hU2Tig8j4Uz5/EvA1p3LX6DC\nduDy\r\n=rAes\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"2785e09433bb22977b61f153ed7694b68ca5151d","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --fix 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.14.1","dependencies":{"chalk":"3.0.0","debug":"4.1.1","execa":"4.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.0.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.30","@ampproject/toolbox-cache-url":"^2.0.0","@ampproject/toolbox-cache-list":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"1.19.1","tap-parser":"10.0.1","typescript":"3.8.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.0.1_1584532162642_0.2395204154917654","host":"s3://npm-registry-packages"}},"2.1.0":{"name":"@ampproject/toolbox-linter","version":"2.1.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.1.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"5787d733ecfa7a2a160145bbc7b54c072e3c8d5b","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.1.0.tgz","fileCount":123,"integrity":"sha512-oYG0GFLRFUsQVGqUv+Eq7cX+0W4GMcUtJFB8tt9EDQ2JGb7kB4H7X3XMF/3F3lCsQ797aWBGujOWLah0vWkE8Q==","signatures":[{"sig":"MEYCIQDegjCS9mEVEIY4tYMSPLSWEJbgNIoYoPsBYb/OfpsT/AIhAIvUNa6ObxJG9ZqZy9SN0NYr+BF4GC45MbwgKBtwpKmn","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":308661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehFgKCRA9TVsSAnZWagAAs9EP/jmR08NvZtyVJ3XJNkXW\noQavf/VFweuNXNRWmUi8x3jBL4OQQjpbGh3a12lTJOQaa8y15KlDG0TcEEA0\npxgP92/WTmUrEghQcCE73/D4vFESXLRk2FRXQvF6W2YiFzY366fXjyq7MIvM\nFPPp0mLGzW6RMWRa9ZLYy0QIDErKq66TZ5WoR3vFrEPVty/tHLCPbkJY9YVL\nfoCZUNh1hP/m2ivZO0Ql8DKxz13xXPFfWYL8vIustx9NkjTwStYPTbvc2MoQ\nvgeYGnb8sDmzchHlWUp9Pjy2CqzRYbhNKQ2iG76GJoP8KvzrecNJAvdZ45Ah\n6/7s/qESYTwBo3dEXSAuo2NMgIze4wExDWyFLUtrUZ2nNUA6iBPvC/16xxK6\nlo8jzsxRVVPS10LWeoKsnRqNTed6mYOoS+NuYDkt+LIL8sj/xltqPyWACzXx\nPYdWCbsrH7R/UTWnBPWV99076KouWRq5me+NDBO317IgNf9O7eYSpdtvCunK\nc2yT4w3E3ddCM/n3yEfZNrAERrZZW2BblwOsTtBDe369x9/U7dhZh1O/sbTV\nOyDFIXEO664ErsVskgu/huerlNjB8Gd6UCt2/DPGJVb6IB73jguWvUooNTXY\nsI6oBvqqDS/acepD5VIk2wkuiFZqn9dlTao8CIPCgFuC040NbSv/Wb4rcZwi\n+ocG\r\n=ni1G\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"a6bc962a0af397c2fc21de1e8a730257947d8fb6","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.14.1","dependencies":{"chalk":"3.0.0","debug":"4.1.1","execa":"4.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.0.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.30","@ampproject/toolbox-cache-url":"^2.1.0","@ampproject/toolbox-cache-list":"^2.1.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.0.2","tap-parser":"10.0.1","typescript":"3.8.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.1.0_1585731594522_0.5539493555732202","host":"s3://npm-registry-packages"}},"2.2.0":{"name":"@ampproject/toolbox-linter","version":"2.2.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.2.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"630d8efe9825ba24e1c14add2d7f31b2bdccf90a","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.2.0.tgz","fileCount":123,"integrity":"sha512-ub3UjHAI+ixrb4n0tQNYGPoM6nzx19pwa4eqwAtKNrAVSsdV6x1fr4aOTPEE8QwOVhSTfi3fyreqUZioAb5nkw==","signatures":[{"sig":"MEQCIB+vJQdISEvA+HE3oamnns+sY0UgICsdE9k6H6x03mrKAiBBWgghCL/JhQvgYFEFxTIW8QuM67ig+4ZF6f6bwzVHrA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":308661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehvKPCRA9TVsSAnZWagAAn/0P/3TCuzMtTT8H42S+kHad\nfuj/SUc535ddBmoasNw7L9nrWpo4lh7282oy+6//EVbyFKLV1pUd2iixW4hM\n8NXPpkonj/jvW9ELJktXnA8Zh2sk5HICoHJ1B9DXAfz2qefqzkwSw0WU7jcK\nxgM8ULY0Av1+Z6MeXz251s2F2aPEcmsLNw1/F1uOL0PBmsSi6GbevLKb7Yzd\nv+rjg9frEBUNrOoeT3kh+fHijgrD4xSdMu3yqadHU4KECg3Yz+i/1V0TZ6KB\n2AujQOCksQvf/GlX9RnuqZXVBz3r6HhOG0kDFCVmZg70t5+1ROHq45n8PiFd\n/0+Yc9jVk0fncbs+dgDnwN6z5G9vKOd2QrIPh8G+TJF5vdhyx61VNRsIufw0\nXc8tGmeLgN+UcDE70JLEFQHAqm5h0i3cXyyrZGoG1CFN1MKeF5Pds1tFq/vX\ndqiMtY1r3Ru8cLWzWpOPQnEYsy0KCRQUW6aW7xYHNZoDF6tX0e9ypohRsHgf\notsejp5F6DW4FKekSrgsyuTx7BkwPmA7xLa/61ooEWkkISPDy+wQszvOdiU5\n4wqrYZ3gAdKWfGrDtYPyb/cSDQ6M9iYjfkC0VKVji5XCXIr9CYkP3EWjVS62\nqIUoyP/u1J2S/NWnPqrSgih47rWERFZw39DatvzpmLsfzFXl8ptjEfqX2T4b\nm4uf\r\n=RjHy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"e2bea7ac7d4cb6a57d196e124ee8a5f818123a02","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.20.2/node@v12.14.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.14.1","dependencies":{"chalk":"4.0.0","debug":"4.1.1","execa":"4.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.0.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.30","@ampproject/toolbox-cache-url":"^2.2.0","@ampproject/toolbox-cache-list":"^2.2.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.0.2","tap-parser":"10.0.1","typescript":"3.8.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.2.0_1585902223309_0.010437584663717026","host":"s3://npm-registry-packages"}},"2.3.0":{"name":"@ampproject/toolbox-linter","version":"2.3.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.3.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"d04fd03661b946dee7a68d3e0480b9fcceb0db69","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.3.0.tgz","fileCount":123,"integrity":"sha512-WpcEbqUuXCkGFZ+B3wZBZDvk7NeQ6C5BCkHKHXGJtft4GGOh8QiemcJxWXQScO2pUQha6XXySc0Jl0V8slgIRw==","signatures":[{"sig":"MEYCIQD4bKbHVuJT734v+jXIxXLmgimzaqHCPru+oJnOtabiYwIhAL1iGOudQ8+p1xy/V5fyjdlnQLnIvhwiJivOHHekG40M","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":308661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeltSBCRA9TVsSAnZWagAAvHoP/1YmNof/XSYOBsGkacH6\nnQc6v2k2mWgbJkAdX8sAjw/Fy45HO7QVqQps22DLl/1BfsJ2zjAm+Gfy6C4w\n9s2c5EmqKMsEQk8uwwYhcbPhCE4HkATkL6YKOOORfI2Sr0xi41L2OwfFpPLT\nwIZZ0JJwEEPxbFKa7uW2I+A/HDW01XgENBPMxeoI0Sa4Tt7TFQBPaJVaI6k1\noKXmwehfjUI82RY0erEpFDeseP3W2EKAw1I0vGLhP5KWd/b+8fHka2pB76xe\n7n/wHlgMKujwUSoOnVuimR1a7Qp6PQGNqZNs8j6JWJeQ17Lj/IfMIWiobVJV\nXu2ZK8obqPaUpfeT6OiMLHreoC/YpaF2NXfTeDV7w3QIdVhvzi09qCh9p2QS\npzhsKkKN/FzmuMxW0GVO+7hDk3q9ivh8kd4X7NVondc44g/d7wF17R40tLYc\nRW6juz6qfrrvyAAseMJQuVnFI8qAjNKzrGDOTNqpuDa4bTkwB1GaJ/oBGyb/\nWr21pYJnrzgPhuMn1i7TGm7imGR6T0ZQ0wIbhbD2+Wf6lM7W03IvkcqaTiBP\nUz0UofXDngqh8MB9b0qLzu4rAUILW84SQ0jP2v1qxJ6Rwo4kFIK6ao/5axdx\n1NMa+DB/UNrzlCqC3dJVDxDAXFzaOpk1TJwqTzkZy1nOFzbwsPsAYXddqsVg\npy5y\r\n=kriy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"bb7eaa6c720044e84f01c6406f5f0805dc637923","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.20.2/node@v13.12.0+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"13.12.0","dependencies":{"chalk":"4.0.0","debug":"4.1.1","execa":"4.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.0.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.30","@ampproject/toolbox-cache-url":"^2.3.0","@ampproject/toolbox-cache-list":"^2.3.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.0.4","tap-parser":"10.0.1","typescript":"3.8.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.3.0_1586943104853_0.27129574096604236","host":"s3://npm-registry-packages"}},"2.3.1":{"name":"@ampproject/toolbox-linter","version":"2.3.1","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.3.1","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"70a64e2d4804cfd51b7325e62eea7b21d2ad3257","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.3.1.tgz","fileCount":123,"integrity":"sha512-9y7TYm9jaOSHcRx7T92zzccGvRI/lwYPA2II9U728qc2auQZwYB3Z9squyMNn02InjUVgCAR9p79db0pDIiRHQ==","signatures":[{"sig":"MEUCIQCIDBoUuLp5XsVShISLH5z7PePgiv7Ro97Z/iTczEphXAIgW/CJa4YNkrKaGqsGbykhtKTv6zSD4JETsUudYJL6ZAs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":308675,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJescTRCRA9TVsSAnZWagAAT28QAIRcefn4g6vwakOZVPwz\n97xippkMzYmjY3zyKoAqbEef2In9WDDsMtSTGD+dVylGmT7yzNuqMTqprb7q\nIcS2YTacH56fzppxUBJhgRGQo/4NhKfhiMPsRk4LRynRhMH8m5WbZIUBAIMT\nveLRNRcd0UixjpznL/s1sAxFhHvY6x2ko/i9yW8/I877RiqvInShB5k9Y1eA\nf9t1psaWB8zAw6oOt4nOZ967L4IeF03H6JPIpouQTe2Ree3FFERTd73AkUNl\nhj6taxtOsE/MMjvhrz+hf/MBwj/FaEkk6BuNqF/IB5Lw0NBAz7dipiRrJW2Q\n0zpOososoK3wsIvxdt+HxRcW4ouUFESzyA+6kVjYLilKVw03vrULLzc3Odbr\nDTEcm1ivrE4RFGsKy3Zo2R1XHvsfvast6nm9zBVW9eDe0vFoxBqrvB/U5pAV\nkRCjD0wk9r9PcbaLiUBA29y4qhqN24ONpW1R91IyV0Ys/WmBCN+h2cDX9mt9\nfVKDIUylIbQOspv4x0m3UgrrHtCzzQSQGzgSWQspqMH+KnjHow7GYTps25Rp\nVYDnHStNMqCTwAaIRmelFv0wjfna/6kxMs97CVDS4Cy0RriwgrqKs2yyj+g9\nOYsTMmqOsgmaZdP2ch/8JRSECad7yp1guPkpkrvra5D15YSABsopgXHrdI59\nckxQ\r\n=RXrO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"2396773adfc982c044cf932dfef73b6955cb005b","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.16.1","dependencies":{"chalk":"4.0.0","debug":"4.1.1","execa":"4.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.30","@ampproject/toolbox-cache-url":"^2.3.0","@ampproject/toolbox-cache-list":"^2.3.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.0.5","tap-parser":"10.0.1","typescript":"3.8.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.3.1_1588708561296_0.99074808256763","host":"s3://npm-registry-packages"}},"2.4.0-alpha.0":{"name":"@ampproject/toolbox-linter","version":"2.4.0-alpha.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.4.0-alpha.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"195a375d89f9e6e6c2e1781c2456b485362fa630","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.4.0-alpha.0.tgz","fileCount":123,"integrity":"sha512-1ryNwNQ05cUdbfL8McMWMOnjTtYC/mZSSTaRsQCqTHPAYd7RIBAGPv0rT2dfwNieJv9Ta1LJzy5B6wNJHHLIog==","signatures":[{"sig":"MEUCIQCSHBxbDXAVsCzaDh+Oq42hsLblNlZr/NWsc2Y6s5aIJgIgNP1k+bFCrCATaj13DD8W6p2c6oZYm9J9PnuFwfgqzR4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":308691,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesxThCRA9TVsSAnZWagAAcygP/0Ae7q4mh9eNN0i9EgkZ\nR1BNv6wVSw1UJFH9VeecGHb6Mjz4GrxLEV+/Oo3cNfseCfbtwIZbyBj0zMI7\n76Yj9+162YBDV1+1JwApbtxA768lMxfx5sLJeQQ6aXs4beaV/zEjfvTvusBw\nbfKAUxx5B/m4vTztff8hcp8AJ+4FbYv8ZTDFIBGjVgLQP1qxe5SzSPN0TLWR\nKi9oSsAKt/wVvWYlJRktOBlaPsB7l+3fCMxYztPNypYf19QWBOxjOG4iHaz0\nUx6k9IB83gzIfP52a3Ugre7Tz5I70DMfUq9Eyt77C2S94f0CZt3I/Fx5IIyJ\nOV2Xt4jVDgs1H2xrLvE9US2M0CRp4+dhYf5FoW5/fN1FsrknqLwoA3qyEMQZ\nYbElqMRq/Fxp0Ab1Al9caeZb2C+SB+xhzNdAH+ZGp/zbvO//AWbCYlVYpcg8\nsMypvFwShAqOb/9iJwC2ZDIRiY9A1aIe+F5WcwHQtifTIM6hvKpgF17/VURb\ntCw3fZdvgfSNpTMQLwTVaV7vizujuVWuTOEAGdz0c1hJtJ9nf3x+amN1mhHj\n/S+WondZjZ7azyM/CleyUN7LCqG8ReV9Y7ImKEzGVVHHOtmqOe41YfrS4P3z\niINNiTUY1MbCJ5N0KiEQJAo+RbjzAohwValrdvCR7k3Ta0/Kv0kr3Z2u8vgq\nOy1P\r\n=BpBP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-linter https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `transpile`\n\nTranspiles `*.ts` into `*.js`. Unlike `build`, tests are included, and the\n`*.js` files are output into the same directory as the corresponding `*.ts`.\nThis script is intended to be used during development.\n\n#### `test`\n\nRuns the tests. Automatically runs `transpile` first.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.ts`. (If HTTP requests are required; if not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and `expected.json` (expected JSON output),\n   and `tests/local.js` will automatically execute your \"test\".)\n1. Run the test using `npm test`. If the fixtures can't be found, they will be\n   generated automatically (via real network requests). Hopefully your test will\n   fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"aeceb5cb83cc111c08297415ab469696f2f7994e","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.16.1","dependencies":{"chalk":"4.0.0","debug":"4.1.1","execa":"4.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.31","@ampproject/toolbox-cache-url":"^2.3.0","@ampproject/toolbox-cache-list":"^2.4.0-alpha.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.0.5","tap-parser":"10.0.1","typescript":"3.8.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.4.0-alpha.0_1588794592618_0.22439606391942024","host":"s3://npm-registry-packages"}},"2.4.0-alpha.1":{"name":"@ampproject/toolbox-linter","version":"2.4.0-alpha.1","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.4.0-alpha.1","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"a1fdab49d3bf2b1a77fb8e4a000c3e42d4897123","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.4.0-alpha.1.tgz","fileCount":123,"integrity":"sha512-LxkqcecDcGCfTqxugyXDQb1TJjJ609mpQdswZHnBxaez/VW/yAADTTazxesDQjnllRQVIW2/K7H3TEpLR4zz8A==","signatures":[{"sig":"MEUCIH7Vt61crm3YkeYNAvwtvRAuwTThHCQ2d6g4+eyn2Sc6AiEAkERh9+TGowRmafUlW68JGy0GqkdIdWU3s05l7sjtXGc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":308691,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJes+wXCRA9TVsSAnZWagAAP3cP+gJ8jyPJOc7ABQTRDEkY\n4lj5ZNocjVgh+V5ggv3isl+koe0rPhH0hFu3czI4/X9xVhlAec9hX5oy6dOS\nPx7zD2HwiOCCFYL3TVy1IBKSbuJMkoLQ6vbaXpzPnv0z5xW93zVWYA6NbQ1a\nbZIg6gQkL2ni+LlmRpzII+P7Ff9qWB2fmsVEaMX+V7l5WmQt0BF8LbNWA5AZ\nQ0j6DaQsHnAQhW+/At10zolyiNBmXqe6UMpWaD7Ciyct3eouMOdGv1ObIJBr\nEEm9tOntno5MnOVkRVQ0XIWSnoWMepvMXxOvjjLCYp0VNzAzLdKI4WezJYI/\nXSOAcfbLJavmkAQHYK2IuF3jIhm9XtlKvVt8heOWJrNVbTFzMcWSUqH2vm56\nfQyHIm5XQT8VC+PM84gsG1gKHpZJcKc2WtOzLBLj3+AymsKJZBO0+zIuof6/\nLguOU/eBTOYio1gXmPRiAw9NFBzkyWICCv0CxzbyopccP/weSPi5uPqEoPgR\nE5EU8/3tf8c23UjnOpX34L0ubh6lsiUIa9ZgLRvZ2nLGQhD1+k3A65cR8Yus\n+oVi9kOJ83yHNLd9xQBLZY0Yj/Z0TaFEAlzhBb/1YfBP6imB0Bu/BUO//yQa\nfn4mYGz+1KfrMXvNSVo+OCCw831XZMFzcFdqqRia9b/6JQWsPV5hy9/D5sk7\nu4jw\r\n=OVpN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-linter https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `transpile`\n\nTranspiles `*.ts` into `*.js`. Unlike `build`, tests are included, and the\n`*.js` files are output into the same directory as the corresponding `*.ts`.\nThis script is intended to be used during development.\n\n#### `test`\n\nRuns the tests. Automatically runs `transpile` first.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.ts`. (If HTTP requests are required; if not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and `expected.json` (expected JSON output),\n   and `tests/local.js` will automatically execute your \"test\".)\n1. Run the test using `npm test`. If the fixtures can't be found, they will be\n   generated automatically (via real network requests). Hopefully your test will\n   fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"64a25a757ff6d2acc9a7d59ec718a025c713b63e","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.20.2/node@v12.16.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.16.1","dependencies":{"chalk":"4.0.0","debug":"4.1.1","execa":"4.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.31","@ampproject/toolbox-cache-url":"^2.3.0","@ampproject/toolbox-cache-list":"^2.4.0-alpha.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.0.5","tap-parser":"10.0.1","typescript":"3.8.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.4.0-alpha.1_1588849686829_0.18673544830508737","host":"s3://npm-registry-packages"}},"2.4.0":{"name":"@ampproject/toolbox-linter","version":"2.4.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.4.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"1273333b5764dda9bb9f33ebfd3e744a403f2777","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.4.0.tgz","fileCount":127,"integrity":"sha512-FnBiKDNCYGE5z0exnreTzvSArcTU5UAAmqxaG7CeLkuQ/3r7qYu3yQuvF0vrP3vKmQJbh4AtWRGioWNlnIUXuQ==","signatures":[{"sig":"MEUCICd8OmLLP6pWy+KpvNMu1H4QhSjbUoErxo2S3b02YGl2AiEArhAzedB0H9DL+UNxS1cXLROsZBrITw6RBWe/BuMoNcU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":312946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevFjvCRA9TVsSAnZWagAAgVUP/3+9SBB4Vci0mYelpDst\nPp0X8qYp3ARjzWtniO8ioCmfS9DS7K0t02Ri+TIQhX2mdTpkpUyRTNLDVrND\nqm+TpVBJDelC/W9REpqyIBcIczS1RghGS3BgHFoHQjfXl72xqXbIJgvidFup\ns+QGxxwHscy2Qd/7hPR2YqrX0ntuzmrcfp+kIH1qTcYCOr2ewfcMQTasmSEz\nOgbOZXaXAz3HkK//BrCdPip3+tjiGdWDffsdKrYzcUNZ5p59t0pwn22ettvj\nqwANBBoZSsXsL6x1QWpTQ44cf0O3mbTQ2jx5XZatglZdMdKv/zDIpIU++UFK\nKxJRUvUhVlaYRLhkYHJq819+dnCaKv6u2T1/qAMMZB2aWPshiRjCX3IlM/Wq\nQcVW1iTBO5ZPxKlZAdGEbdTYNTTrek16dg+CYYiFXZeCE1Qoo7Tkx+CrzshS\nUKALZFCsoi28/S9useUd/Uz+jwOdfAYno19Upw/qscsovO6mXlRBKD/7IBp/\nuCyEtA64aUxNnXFr/BPlge+dDgLq0PxElUISul9qRTX4ohMCVaTUswmbXlQp\nWre2zhRgZurZ9Bvh7Xa006Xxjfcf3rM4cJG2zZCF8AOgWMxmYWpnREvs58Pi\nEBLGi6d76MvnqnQYNVWCtr6MnmnfzEN7io+CJUKXxy2mmoNKijUvr+A6rnCI\ncLgm\r\n=YCi1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"80f09fcf0cf43cbc6d3f1ae9cbcbfb0552eea220","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.21.0/node@v12.16.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.16.1","dependencies":{"chalk":"4.0.0","debug":"4.1.1","execa":"4.0.1","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.31","@ampproject/toolbox-cache-url":"^2.3.0","@ampproject/toolbox-cache-list":"^2.4.0-alpha.1"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.0.5","tap-parser":"10.0.1","typescript":"3.9.2"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.4.0_1589401839295_0.003189623873721681","host":"s3://npm-registry-packages"}},"2.5.0-alpha.0":{"name":"@ampproject/toolbox-linter","version":"2.5.0-alpha.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.5.0-alpha.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"045689fad6b16639a9c6e5a61284713386550f7b","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.5.0-alpha.0.tgz","fileCount":127,"integrity":"sha512-eMzJyzQv9wJDoLRF7ZKLPtu9WF0LrEGNhLD+6e6ZJudHT4v9UBNYy7hlIKyZv+/ky4fGw6bG1vbubiReSonD9w==","signatures":[{"sig":"MEUCIQCetAaTPLbj61KN1hrHPW0atxy+CVnet++GovzuC9u84wIgMzVXyvJRNOxiCdjWg3nxkPPbkSH4mRZilPY9rTjZoXQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":312954,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew352CRA9TVsSAnZWagAAa10P/jv1nz4BEf9U2WUx1jLG\nQNoKyZcOP09sLrN3ZT+DRgirDwaKO2YHqH+JXqLtwNnPbPlrBdfWdKssvW2J\nSU6fFSaFAYCW7TuxWOVkgGL+ECobAsEqFTRmA7XSltZjgpQywX8cOGRk9/iq\n4fO+hKx4mJupePtzjctO7SdV1ASLjdQoqGd9htOgWlW7fkcGJyreYwYmE4UL\n6YVUfrWMWHm8HY8XKMchGlxx8nAcDbx4tKlHCaaEM1XVKHeD9J97JoIa0lVG\nHiHePke70tJJ6bs5+BCZvcG4PtVl7HfqtFEMnDilS52A4OX9P49F9CACVzO5\nuQK9PEayWn2Tgy0zg7v7PU2HGNdVbE3YwWiR8X0ZTt8WX4fNwh6mwfEmJ0fk\nlrBJl2EpYjvjqqzzIFx66OIcb9U7xwP0Kg4j/xYoon05ZKj9kfzHlQez8WuZ\n5KSwcJ9zRyB8hGnUetPyitoLkyigdRiRO+MKuaTK4QUATUs4Z7hmfwXB5HUC\nBl5jZ0KwctHNfsBGH/TL3VxhX8NpgydT228Yh6GGxYT9M/lgEXrgGWJcNOuC\nduxHXy7vJxAiwsV+wwGyS9GLh1n0yWqKUCE3q2aK1CksKrxmweEbo6YmfZxD\nU+gDnJEY6B0uyfi1cQiLFOx4F71/Q+W8o9l8q+vxBxPNjUPC/HHSozzR0Y4k\nNpol\r\n=PdaR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-linter https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `transpile`\n\nTranspiles `*.ts` into `*.js`. Unlike `build`, tests are included, and the\n`*.js` files are output into the same directory as the corresponding `*.ts`.\nThis script is intended to be used during development.\n\n#### `test`\n\nRuns the tests. Automatically runs `transpile` first.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.ts`. (If HTTP requests are required; if not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and `expected.json` (expected JSON output),\n   and `tests/local.js` will automatically execute your \"test\".)\n1. Run the test using `npm test`. If the fixtures can't be found, they will be\n   generated automatically (via real network requests). Hopefully your test will\n   fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"48d9b99ee4744e54eac1f73a7cbf05f3da2c0018","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.21.0/node@v12.16.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.16.1","dependencies":{"chalk":"4.0.0","debug":"4.1.1","execa":"4.0.1","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.31","@ampproject/toolbox-cache-url":"^2.3.0","@ampproject/toolbox-cache-list":"^2.4.0-alpha.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.0.5","tap-parser":"10.0.1","typescript":"3.8.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.5.0-alpha.0_1589870198368_0.6977059362818672","host":"s3://npm-registry-packages"}},"2.5.0":{"name":"@ampproject/toolbox-linter","version":"2.5.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.5.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"0659e12c6974f07a0f838d1315b1bd78c3ab8dde","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.5.0.tgz","fileCount":133,"integrity":"sha512-Sk+1AzmchsFxJ233gy5rH7eBWKsabHU120pnovGJUXDWkWlya5CXeb26PXGy3mpVK0NmuK8PFUCqSTK91XWCuA==","signatures":[{"sig":"MEQCIDrR6guxG5QIdfeU1dsmEZdd801pbUGqDBCAT0KFjFHyAiAC2zD80QXqwKUisfN4LcMz94dqYo4bsD1yCXkHgFv1Zw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":317417,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe0PaOCRA9TVsSAnZWagAAo1YP+QALDYYH/3AjbcGITd9l\neltkvC6rDMG3ZYF6lP/u8qFYLrWIQsev/bnbbRVVKQbeLaWh8MElcBgzX7yT\nvQWoHuyvg6eiNFRJyboMWtHG7dwBQ4XeargoV0Lb33q3sGG7jcUvwl/PupA7\nsPzXjVW8JSAjScw5IWx5iZD76DYh7O3iRiq+yz8gNjq07ZURkQ97hrKIUN3q\nnCEUUHeOOZ6V7sa3PLO8sFXv17Y+HLGwrZ9jOTWooGPcm4MW/ZHEDXZ2KylR\nvCOmYq0oJpBNzmgHnfr3EGmUfX1495UhZqYrkZGAg3/Zd6cH4QzG62YsFbX6\n8yGf5zQB0RCXJRCSgVrpWhXW3zZ4X1PE7LII30Uri3wcplUgIImaSXIsY9C0\nnCS/vY8Sj3834EsHVbiw/XFYKpe4vy9DIcFfNd5rH4E3+zRsOsqYz8IBYIET\n5nnoQK79qxLWyTypK0ufJ4wQ2pm9B9PoJa0LZYnXqLrEcIUw7Q9UL4DcuRoO\n+9f/5B+HH9UKGMsw0YkCDIyil9XWepu/4hok+Qp/j4LRolqotDptkcNi20XC\n6RiEaFJqKc4S3nXTNTXX7IZ0rS+9KoX5mcDucYCLB+ejUTfwRdqxiI5t7ZH+\nxuAScBFy6vNlMWiK2C30mOxbGuGcsuEQMhHSrn4R0988YAWWp2FVKy6ZDQlp\nSSdu\r\n=TBfC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"c26612cc3d7408fdc1451bcc8e0fecd67ac9661d","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.0/node@v12.16.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.16.1","dependencies":{"chalk":"4.0.0","debug":"4.1.1","execa":"4.0.2","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.31","@ampproject/toolbox-cache-url":"^2.3.0","@ampproject/toolbox-cache-list":"^2.5.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.0.5","tap-parser":"10.0.1","typescript":"3.9.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.5.0_1590752910211_0.5243987203682818","host":"s3://npm-registry-packages"}},"2.5.1":{"name":"@ampproject/toolbox-linter","version":"2.5.1","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.5.1","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"1a7ee0944b898d8087a439d8ddf5ec33315f4c15","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.5.1.tgz","fileCount":133,"integrity":"sha512-v43RolNYEpZ+rHRuWeWhKB8W/agEyeZY0b+xWQ8gaiV39Idgh1mhifk2cOMlbd2onWAlJT7bkFM7xLOQvlZ9Ww==","signatures":[{"sig":"MEUCIADF8s8K+7U3y3+W10jyQ+zm7ZkfGp0T09Gek/3zYQKLAiEAzZaRG4qd2/PBbCOVdo8jVJqvFE3gwfDQJl6Od39OR4g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":318659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3zquCRA9TVsSAnZWagAARXcP/RMXOeYpJvvLPs09auvG\nuv4gqQOEmyv5uU+kKpg7ryLJ9kW58GEF3BsAjrphDGAygODSI5msEo1hoRDQ\nudcEOgThKFb44HGVvp0c4B+YVyfVxc2rSPc+IV3G4yxbUz17OQDkjL3JjdGW\nBq3hJw/HMeozt3WctBhuq5H/agS8u0rLSDZfhVWCkhWmoMZq2Ldq3BjQu7/i\nt6UQEiLllSIvWDmmTyv+AzOUzZ3t5b0XqkBp0JXFHOa9xpUu/IuY7VnhgKpV\n0kjju9g8BSTJU/9N628LhoJ3A+NzvZCYbtp4k8Qhng4cq02hL0hp+U9C+oKc\npYi1oOxo9PWTeY3KH5aBKFhNTnazwVQq/X8bDOFVbQuDehYS/vR6Mdu432xR\ngdyoGENYn/pv8vilgvaYiRLRFYP5jJD0GmB/olz9uW+AWeeif+eh0Vw7tAYN\nG0NTWRQmefB3lxSLiIh/9YhNXI/hfyw1lYs2MPzE6sK61gOMHKukq55nxOMb\nuoYQ3tjbMR462nxBb2CtIxySsnkMApRh0hVPGzd7n0wJKywY4pvYM/7T8nOC\nZnndr8AaJfoooAQITc+ZZp8JeGzUnYWWsBHHi0zReGFtKl8u5/otKjUSy9oP\nGqQVvGOhQJUaALHLzurKbQOQhJuM6309nQOZUSuXRehhQ4azYoZpEymeDUwN\nPVh8\r\n=6Gx9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"f92ba13281ecf3e624ee8285f2deebee18d580bd","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.0/node@v12.16.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.16.1","dependencies":{"chalk":"4.0.0","debug":"4.1.1","execa":"4.0.2","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.31","@ampproject/toolbox-cache-url":"^2.3.0","@ampproject/toolbox-cache-list":"^2.5.1"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.0.5","tap-parser":"10.0.1","typescript":"3.9.5"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.5.1_1591687854338_0.8209771126991798","host":"s3://npm-registry-packages"}},"2.5.2":{"name":"@ampproject/toolbox-linter","version":"2.5.2","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.5.2","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/master/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"bf03f9079bffb1789264d3a124c945017fc43bb5","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.5.2.tgz","fileCount":135,"integrity":"sha512-s2jyMcw39e0S/h921vjvJ8jbxXNqw/PgIYNBCvYCArBCkb1iXRpI1OIHqJLKhLDPOAA2NdHnd6Gq30Csk8/Bgg==","signatures":[{"sig":"MEUCIBN1Ydg5xIgWjpY1p697kmUW+YuGYNzjSeP3P+hL4LouAiEAhIR78FXQGbPynf4GhQP9wYzWrv9inRGK+O5lrpsYrd4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":320184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4nusCRA9TVsSAnZWagAAG+gP/jc0/xtj6NdQC/snb+Rq\n2Oog1/hPz3XR6TKp7Sjk5WWkpOhqWC+5jw7hkV9MOFTu87NqH4KidK5rqYGP\n/HsmWT0iWtwqPmRAS6ho0ll07GEEDcPUvgB2OTG/IY9t2cUB4teSTXxk6cM2\nuISzV5fKn4yQkdFOZzIjmQpRPBZUiPmiaX8bDsunVZPc28TIcGgnqJt8AtaP\nQR++DZM/6d7RoxaN05iM4JL1RZ9js8dNBUF6Yu/5uycJp6G2IXsY0fXy0X8O\ng4J5pbW/qyh6edz4HcJ6G/b3b21lMNpY/7Ho3Pq9hZyY4yKtXGbxB1ZyN1dw\nZMNbRs/hP6H9nNwAXLBsRgQiyyzUalywvk0gyTCkz/ajYa0TZ8WR11FgDrLl\nPLsxm4jA1ncGWtSCy5aYHRg2LgAMepecBfkWFMf09Tf5JvQaprzC+QCcwIFj\nI8g3qZGGU1olwAZlHlvtivCiAeIWpZ0kXLA0+t7KQhlts5uQwEBFj/i7/GWt\n3Fm3QMphrLtFeBp1MW9YmaPYXbn9hZpbX7NyLROL19gA1RxsEKd+PhVR8BeY\n5K/ymLGye2o8dFup/JaH4CEWDgKYYvqk1cLR4tvVDv6ErzuHWAllyEz6EBv4\nPU4f6Sep+VlrMF3TUEoSVO4LnE7vUmmjifGum8mKC/6qlbgIZkd4TSKYK5FA\nClJv\r\n=aYnh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"0e67c978f403a0f68d5b876010d5eb1a5ae205d9","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.16.1","dependencies":{"chalk":"4.1.0","debug":"4.1.1","execa":"4.0.2","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.31","@ampproject/toolbox-cache-url":"^2.3.0","@ampproject/toolbox-cache-list":"^2.5.1"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.0.5","tap-parser":"10.0.1","typescript":"3.9.5"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.5.2_1591901099510_0.5368609655812642","host":"s3://npm-registry-packages"}},"2.5.4":{"name":"@ampproject/toolbox-linter","version":"2.5.4","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.5.4","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"3a7dbc6bc73d042eb624fef15985972eb68c0312","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.5.4.tgz","fileCount":135,"integrity":"sha512-mZbgoKmrpp+A/+5vbXgpXywi8ukKhHi8zDk0SPoYxzBJT8lfmB+OJVzFg2Hqbjq60RqjmW68OCXSwv/ClNsxmA==","signatures":[{"sig":"MEUCIFBCWXLEfQJ7TsrqCUGLf0TWI5MmEpNV515hRCg9ipclAiEAva/Qkr64Uj1GxOBL2kTiYJzA7U4aKXZDPU9wsgzZjiI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":320182,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe8QvrCRA9TVsSAnZWagAAN60P/1tYCWiAFNttz+WDpXmi\nbaON59ftpERbGxPsFc4u4z5RyyJ0F7Qb82vYIYDTaQmLppUhAhh7r8MYL9xY\n/qoQFy7QpoT2vTKIa7xzCDVXAXxfXqTHRLAOkNQKbo2TFE6ASLNfZJJtq51R\nZFVeD5YvRggEmFv1Wa1p7k2e4wo2WEUsS1MEpfchfaRwYJOmDMMp6PNJ09zk\nzPp5qo+5258bcw3Cb4T5u+VN8U2pCAEGy6V4oZR8YWYRvEPzIdCvkZJwApoF\naHR0+6WSYu3T4JA135z2JI7mcVj0zMspGImKSMxuboacDmvlofE8D+bCEMtk\nicWnAdSZdAYdeGzosldia0sU/07d6Umxrxn1sLvlFPW9uIgU+21BZLs48Udw\nts62t53jbxVTrLrzxwl1bevqOx7tx5oBx58DlM0QVkKpGPQKSjnEYUHT+b2N\nu3zmDo84sq96m1DNYCK/To/l/u7+OyTdNoWQroe8ybHV0krH2QdMWR+77kQT\nkulx+u4M4ZnNtVJMUOluaPTXebeROySP7Mq5CloW1tq+HMMSQA+o7pNN8dGp\n0tI8os49VhpU2edWnt8Dk3newZlrLk8ooCqp6v2zRCYagF7NJqcb0EJBaDfS\naUS260veYJgRFnqzYSv0ELAjgv0YjlB4S9zOVLKGcuDyuy4M9vuhtA9JGT0r\nxLmB\r\n=X7hw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"c194eb829c2d0d4cda21c961107d73bd7528f53f","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.16.1","dependencies":{"chalk":"4.1.0","debug":"4.1.1","execa":"4.0.2","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.31","@ampproject/toolbox-cache-url":"^2.5.4","@ampproject/toolbox-cache-list":"^2.5.4"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.0.5","tap-parser":"10.0.1","typescript":"3.9.5"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.5.4_1592855531287_0.3775370604214534","host":"s3://npm-registry-packages"}},"2.5.6":{"name":"@ampproject/toolbox-linter","version":"2.5.6","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.5.6","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"c4ad85ae17952f909ade4b06706afb1084e165e3","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.5.6.tgz","fileCount":135,"integrity":"sha512-EqcUxUioV/LW4XrYTDvA/zYQJqAW1Qo39myxqTfu6ZG9MBSlC1A5jdjvYc5DZE8G3DdfoZurk7HGdgpVsE+QHw==","signatures":[{"sig":"MEYCIQDnoN+/mrW4/EVVQ2Lx20DaPyhq0z6Ly+k+VwN6H9S7gQIhANuV13hxNr21ZI6TI9kSkW4a+9ht4xL+YFxNAlbqc+pz","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":320182,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBKl0CRA9TVsSAnZWagAAkPUP/An3VzLeuYjjO7irz6va\nY8IDlhh8E16Cl6dS5lBcBx6axVaDbDoE7YOh4xYfHfPuZFglg5CShaVZKy4u\nAqDSO7jKJEUSTvHoXEv7AdgnEnzKxLK/1oLsfhOGp3/9sFS9Wun8P21qNq8I\neD/9/7eXggANYVL59qwL63P47ye3giJomX2QE8IPmbeQb7iAL/HuavPSAHua\nH8My7WO6A0fFGxVLJjbAL+DvnWYrDZWMadwrb6bpVOsyPaoWUW9TC+4cydZR\nZbPmkOUKxAMUE9kxptr6nOOODKylcV4RdV84XPH5owyegz+7YOWDUT1w3qUa\n5g7TfQwdw3Fe5XQ8GESjA0LfiYZNPjo8cngXejFcpPuARfNFJ5Dme3LQ+tSI\nvcWg3ZOZO+HHsTrv2EuuR/Sp4UZFVWHhaVwRXhHCpb69mUUggWiQAk8WJSKl\n662C+m56qHAa6XX7dsW/t0SQsOc770cuTTpMkZ4gl7MnDw603Y6NVNLrrABh\nmfr95GS/fIPgeJG/dGoiE07csDmAlHnsy154f5uRsFVuFONibH84x17UWTCD\n3ufrF8WBVtM2R1yTon5ObNS6kaSAd4foIO+FgzyxEPWlx5XEyewrQTFGRmDz\nFWj7paSSPLKfDQnGhx+RpdhD6Shf3T1gGCR11O68Jt/herpwGBF0K2MZLKAY\n6jVe\r\n=wm7k\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"f756b54ffe76e288ae7f62755a4338183bfd91bf","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.16.1","dependencies":{"chalk":"4.1.0","debug":"4.1.1","execa":"4.0.2","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.31","@ampproject/toolbox-cache-url":"^2.5.4","@ampproject/toolbox-cache-list":"^2.5.4"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.0.5","tap-parser":"10.0.1","typescript":"3.9.6"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.5.6_1594141043959_0.4673268014760932","host":"s3://npm-registry-packages"}},"2.5.12":{"name":"@ampproject/toolbox-linter","version":"2.5.12","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.5.12","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"cade78f866be427711560d4ac5ae590339f3d51c","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.5.12.tgz","fileCount":135,"integrity":"sha512-IaD+Q//1a4GMxWokhiUcg5MfuJvE2TFJiExtIRxzFEzYXcC3XgZb1a5qCuYUhzM+02aeuthUQecnkWjw9Y54ig==","signatures":[{"sig":"MEUCIEIDqiVbTJDi1EA4wvI426I2JwWsXHEbMlbuihQWbPXEAiEA9FuyA5eBU9MDmWeFz6sYxO5uhvDM+Wmx7P68aOP0wwA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":320183,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfD01NCRA9TVsSAnZWagAAoUYP/i0bk5TdkXan5SgYApEo\nt42sTHPHxkh8Qp4FEob5XKRQgJwoy+oEiLu57npCCgDsnxUXnweGx4gHdlKo\n4mZOAuLh6FhJg6beyjIsVt5GJVateV2SyRpMl65X8mDEC9SfNF4Sm3dySF3X\nrkUTfOPWQ89BZD64SI5NKUSPEGCgwANGrJBlOE4wFY808sLHvO8eaFJBrGW/\narZm9PGVE3qCxGgjTt/l5965KQ2YHu+IUa4eXrr8vXMQX+yEleNWldqTBSL6\n+qnSNsN3SgHp0yoVVoNIxEXEDQft0MyYZ8ggGIcnPmdvbh3YKRCRTWuazzUx\nxxWKOXJlCXPKAygG62VcAIgr7TArlxz4P48PrUPEg1tHl+51jXMJg1tsqevg\ngrEtT6KUxAgmLfNK4KYR7CFY57c6EVLJ2U8inlPvZRRTroK8IfEzDZx4h3OT\n3QZE7yQryz1QEmP42d1yh7vmfMYAl/u/SsTlkcpmRWNp6YzE9a9lqnSfA/QO\nMvLhE/W5WiXQbXDzyDLaTzVCT86zVNLCDaWBEmP1CkeRnJJhoHKmiH3eiFfD\np5Oj7tK4BkA3KxqVs4b7MFGK9aVeGGedBZlubPvW7nUaiTXYX/WMkte5mgvr\nSECebf/d9M2LIh6UfkRIUDyFDi1ue1AX6FeqAVGxlAxS180VaZS+c2mPWYHE\n4P6i\r\n=4Omi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"19ef3dffbecac926ab5f60bb4c041f258e350237","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.16.1","dependencies":{"chalk":"4.1.0","debug":"4.1.1","execa":"4.0.2","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.31","@ampproject/toolbox-cache-url":"^2.5.4","@ampproject/toolbox-cache-list":"^2.5.4"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.0.5","tap-parser":"10.0.1","typescript":"3.9.6"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.5.12_1594838349104_0.4963989554815669","host":"s3://npm-registry-packages"}},"2.5.14":{"name":"@ampproject/toolbox-linter","version":"2.5.14","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.5.14","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"2c2d7b1deef6774097964bd4f78ac7de7844a5b1","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.5.14.tgz","fileCount":135,"integrity":"sha512-tHzG7/+Hef5tgZPnxsCESw/Mr8ejNZoM4O97vnuCrhkt3iBJbOuswo6P/dI2aWzA/zGUBFszcle3YJ0aZu3fBw==","signatures":[{"sig":"MEYCIQC+E2MX0rDFYc5if6qYCb834FIyDcTnXoC5Kar/pzUkLwIhALDRu1+FLWRMgP+xmQQtiBjYd/4SRCFmNC1H357QxpbF","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":320106,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGoS7CRA9TVsSAnZWagAA5nkP+QGbIaw4yGRXmITbdsU/\nisq6S2Iu12UENHnNtgW4GtCeXwoFmf9pEhocLHmgzY4TSxOYrbAC96KBozCR\nykaGZmqqlsOD0fxHf/dCa2thXP87OhMI4aTIHIR7LEmQbdBaZTaL0dmlMw3V\n07kUpumoFtlnUJpPfLXfnPER9ssY9orNNg8UUsjIgKpqKJ3qi1PUBD4QZ97K\nl7p0Md++ywuFnwnpgTKAe75I/965APhDzQEEaUHVDXPNF/i4lFPPCR2DoxiF\ntSAwfpABGwdLzXRdYONYzqPwDMxExXqYnOE+pa6pVU66HfnBZS7Iwfrawb4Z\ncVyJrrGvZKSECFV1z2B3bLpPnZenNgPI+BDnNn7T+caTLIkBbVwK7it90sAG\nDrA/U/MNEY5JPP6iGlV1N8cTVGnHkgv/CFb6giW0laxUBxUkbggOJN/dA6+7\nncquqvoeChuiNy6fLuulKVRB4FUSbtVvr4QacbCTkRw7ZTPv3L4B0hwxioUY\nAczxgKNGuiUJJAUwP+LPGCIrolXGCJJEU16ZwP0N15DCPyr9hb9PmHRQ/VVe\nEb/oLtpMhLfK7dki90iDM7NrkPugtRPL6YbdF5q6hxq+vC64BHRMJxkos6Wg\nTpbASf3vT/Lsjxh3fC2kzpdSEEio3slAAuXTsNY38qpB5XRboD0S8I34xCFa\n4gIE\r\n=RITo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"bf92d77fd1f53c54519bf8bed2be05b0bca26004","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v12.16.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.16.1","dependencies":{"chalk":"4.1.0","debug":"4.1.1","execa":"4.0.2","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"5.1.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.31","@ampproject/toolbox-cache-url":"^2.5.4","@ampproject/toolbox-cache-list":"^2.5.4"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.0.5","tap-parser":"10.0.1","typescript":"3.9.6"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.5.14_1595573434594_0.27244107543787166","host":"s3://npm-registry-packages"}},"2.6.0":{"name":"@ampproject/toolbox-linter","version":"2.6.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.6.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"b0932107865be9f3bb8f41288ef24c3e33365d65","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.6.0.tgz","fileCount":135,"integrity":"sha512-R61WiElfh/LtLoAB2gVYbMJxOn4fjl/djl64TXGGh0xLpdx9ppmBj1VpVSQkiyD0s97LM0G25M1xKTVeCK17ng==","signatures":[{"sig":"MEUCIQCC1lMm8WMNLhElav+3qlPh9zUJXGi88cfmGHy50yiWlgIgTtEJVYvaqQ7xhVYdUSWtrwoDHat2yqKPM4akn07QMys=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":320863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMUETCRA9TVsSAnZWagAA2+MQAIPVPIMK4VoPiTWmM+gt\nyDmBYaiClmsmCHuN7uyxwax5WuhWXPXBT7ekEJc8o00tZynwKYmVuncUL3tM\n6wEKkm/lk6QzjVT7tX5oOZcZxvhf6b5s5ULD6jwVFQBApjMvHMPdXt6BMXIs\nKvGXBF/xUBv590nSK05PchXR/THPXgMg/VdcsgfAx72/rkjiK4UouTAxkQOG\nosR6Bt4ZnWS1lXdw51W9QY5WXNz35W43seTrSkrvJIt6428zJY1GNPln5/PB\n4Fg9YugnNGCNPgPNMn1FZ+fFJ7RItDxXl5xlWsTiaPZgCo/rx0pEOvCAC/sc\nc0GwF7PDxw3TRlroAvtsmcHI668kzmdH6DqeIIdU7KM49bbSUnVwpEveW+1w\nFmEVdJdu9D4mEv24kiGxVfKUfRkW4UgRC/sn8h/Glr2eP9f3s6UHo+dbkcqR\nRVT9/svy1UOD/iajgXj2oxx6FU3dZMJCFgPtvFRm73PISllO/AM5uDm2HXv/\ng3mZTaj6GxPgly3gnQkcSt+gt4TYvA2bsfeR5xmQWRr4+Ea2ix0m9X6MkXcb\nQ/sWnrNq5nLh8oZnbNTI+0Cm/YEBZ947rvyeS2AaltYqh3CB7GR7H8KOpkuu\n7XAbDemGAigqc9TGWVL95MzSjT4bBRxN7ZxUqUBCU9EfQQOVOkGM/8BUXVCI\nzFIR\r\n=IJwf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"1e47f01b6630a01581b7df014b76d9ba0f68542c","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.18.3","dependencies":{"chalk":"4.1.0","debug":"4.1.1","execa":"4.0.3","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"6.0.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.31","@ampproject/toolbox-cache-url":"^2.5.4","@ampproject/toolbox-cache-list":"^2.6.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.0.5","tap-parser":"10.1.0","typescript":"3.9.7"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.6.0_1597063443517_0.7779205348284635","host":"s3://npm-registry-packages"}},"2.7.0-alpha.0":{"name":"@ampproject/toolbox-linter","version":"2.7.0-alpha.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.7.0-alpha.0","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"6a5845a7fb7ecdc63efc89374cb343555e60b27f","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.7.0-alpha.0.tgz","fileCount":3,"integrity":"sha512-SID9XYVP9BM5OjbfvrJff8yiSV9HzMfOYwrYalBd8j67BOZQa4a3BkZBQh03MIpWwfH/T8yMOVzr7O3noHTOyQ==","signatures":[{"sig":"MEQCIGLoXwCvGNoBEqmjiLAFLJD4eatdotoKoy0uhQLyuY6rAiAyLkzEEHn/WgijSGorjkOP2s5kXBw32esy/0YT9ORVtQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16044,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNuOYCRA9TVsSAnZWagAAjFsP/08BHG1DgPZw2dkWr/Dt\nUTr+oLuObj2u0XksBbuZ/rdDJPWrIO14D8p4CsZFDapoCwpNnBgui6REitd2\nI2cOp5OczcRdqQXcttSXeoym+JH8bQEk1unL6ON1BIoiHrdcpPl0N60x99a1\nfGbRRckS2KfzTcJDX6809XMQzw82oDgu0v3Q/l9L/dWy97mCY6DocrbBoYZD\n73ZDT61R7z0L5TTkpnqjhZAFavjIdsdU6ITxJDTAO7oSVAzgLzQ0yZDCMgXA\n53kU745LdfRPmM1qLslF3kxAEMI1dQYeg4GIjUoiC5v9g0VcF9irU/GpqZar\nlNMWNPEJ3qF7HCkBmmRy5GxA3cPRhBBh2z8R7c7p5fjWzhxmPlY2UkmlbF0H\nOroYagyQ34Y8ZSl+V++YUIZlhtUwBVpZGt2RWOlaqDdWVr/OOr3p76ROJwh0\noCWQpL61ZQBJixc+JconwQhPJB17GMu2WUvoA9J8qcECrNvyvReBLquGpDlv\nSUDHOwXb6UI85uD+i5hHBtFYx+9agn9zYkvKGTnrqE/FzeDKuI2rLcNFJ9lv\nDh904177opYqLEH9a6Qzq1KPP+wcpgWeAJU89HUupELFEq9kVNIW3QIWpFgD\nA3w1QFGwwDhTeuycACMQfLPcE6YYP+/BZu8CkOgT/fy4QxcNLNKT46vA3fBc\n1O8M\r\n=F11A\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `transpile`\n\nTranspiles `*.ts` into `*.js`. Unlike `build`, tests are included, and the\n`*.js` files are output into the same directory as the corresponding `*.ts`.\nThis script is intended to be used during development.\n\n#### `test`\n\nRuns the tests. Automatically runs `transpile` first.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.ts`. (If HTTP requests are required; if not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and `expected.json` (expected JSON output),\n   and `tests/local.js` will automatically execute your \"test\".)\n1. Run the test using `npm test`. If the fixtures can't be found, they will be\n   generated automatically (via real network requests). Hopefully your test will\n   fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"e4141565bb5666ab03f26ae2b702f1a89715563a","scripts":{"lint":"prettier --check 'src/**/*.ts' 'tests/**/*.ts'","test":"$npm_execpath run transpile && cd tests && for t in helper.js local.js network.js ; do ( test -e $t || $npm_execpath run build ) && ( node $t | tap-parser -t ) || exit 1 ; done ; exit 0","build":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --strictNullChecks --declaration --outDir dist src/*.ts","lint:fix":"prettier --write 'src/**/*.ts' 'tests/**/*.ts'","transpile":"tsc --resolveJsonModule --module commonjs --target es2018 --esModuleInterop --noImplicitAny --strictNullChecks src/*.ts tests/*.ts"},"_npmUser":{"name":"caroqliu","email":"carolineliu@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.18.3","dependencies":{"chalk":"4.1.0","debug":"4.1.1","execa":"4.0.3","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"6.0.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.31","@ampproject/toolbox-cache-url":"^2.5.4","@ampproject/toolbox-cache-list":"^2.6.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.0.5","tap-parser":"10.1.0","typescript":"3.9.7"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.7.0-alpha.0_1597432728014_0.38222285929129796","host":"s3://npm-registry-packages"}},"2.7.0-alpha.1":{"name":"@ampproject/toolbox-linter","version":"2.7.0-alpha.1","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.7.0-alpha.1","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"samouri","email":"jzfisgreat@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"84d8c7e36c4057e00feccd1e5d00e132b7fae428","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.7.0-alpha.1.tgz","fileCount":70,"integrity":"sha512-sDQS1xSEYZ021KjCUsVlfbIMPBpxcrRNlw+GsZKmMOS+HxNYYLAfY2ZO7F4ZQGCYufbdI7YR/arD9xCQp7uAuw==","signatures":[{"sig":"MEUCIBY8BP3X4SGEEfFGi/fKuC4OCkfKJcxUmA/GMqpJaJktAiEA3h5mR7OW9Shf27TaC9/yKIuq+0tfKJSr8OG2AgM022M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95056,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPWbdCRA9TVsSAnZWagAANqcP/2f9DR6PE9T/r8cbgCTl\n/S4I9lYEaKKGyfWCYED57bJRMuuQZcn0LIURqOHd5cBTxg44jbw5S9LstEZg\nvLraNTtjbVjFqIZFPbmr1z5B9BV3mn5eQ/zSjbveU/Wdy0Ef5hwXBCkiInDI\nDNHQPeVds4H/XWVLY80qHSxn7H/Bf37sZ+E/Zc3qH2rz93noljqqoLhY2spe\nbsGNcoImsmUgbhzPtP1nq/3SqA/MurzunEp9eCe01BJeyGo8x3vfpTTlkZFP\nJnHhvUt4C5cTShG8bONSoS8h9zRMRAfoOPgpoM99v5zcxQ+tlWV1oQFiviX6\nfXqSYvyzgtcVDAghQx2oipOEPRkZAg5RQyhzWL00242cDWLoBqd9j4uFeBwm\nJiq9M4NxIiquGvcy40LyuwktS4qfhZ4Qc+W5KgYspgdaCQizCr1TbJ4/VDkp\nfSS3coGbzxdWlmcO+Z6NwC12dBnTT/w5gfspl3szC3KgSBGpNkDo4o33s9kW\nMCNTJsZB4gzPkuG4Nnu+qwiaSewLt9WFu8AyQGPRUmCAcabObvX2Wb6MCAPH\nkeeJPfnb6OpqbEBHH8IlgvX/c+sRzj0HQZo8EGfBXYr7d5ZJM++OCvt73KxA\nsEBMgUt7Tirr5p5epUoY7V5f/hyVOsD8gqC8GBDUxw91nbReR/QYiA5TSWBw\naa6H\r\n=BVgp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"cdab35d31a9d431c66cda62174fb28aff93287eb","scripts":{"build":"tsc"},"_npmUser":{"name":"caroqliu","email":"carolineliu@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.18.3","dependencies":{"chalk":"4.1.0","debug":"4.1.1","execa":"4.0.3","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"6.0.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.32","@ampproject/toolbox-cache-url":"^2.7.0-alpha.1","@ampproject/toolbox-cache-list":"^2.6.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.0.5","tap-parser":"10.1.0","typescript":"3.9.7"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.7.0-alpha.1_1597859548955_0.571186070634303","host":"s3://npm-registry-packages"}},"2.7.0-alpha.2":{"name":"@ampproject/toolbox-linter","version":"2.7.0-alpha.2","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.7.0-alpha.2","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"samouri","email":"jzfisgreat@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"f9097859bacaf6b9c95668e04b614f2361f411bf","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.7.0-alpha.2.tgz","fileCount":74,"integrity":"sha512-hsC/2tbqtYKVOykAIc2OX/Auti3HeVFSTufTZVj2DwnLvFaGFwuvMQJHWyVy31EFu2ClOGRexH2cMpXD7eiWNw==","signatures":[{"sig":"MEQCIHftINZ5gpvELlVaCdnD+aNL4jYWRcMCELBwRmZzSMePAiARP/kOvLU6Omos/+cyYge9soUoqHEJJ654wlt7gIFssA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":101027,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfP/ZXCRA9TVsSAnZWagAAzbMP/1ZsiqtF5zUdlEyHlfBM\nNBMRsG8QkxZXkX/xBptlDDTzgq6toCVWHKuNUvxYMVi+abbIjx+wDoiT3Id8\nkcSuoejdMuF54+k+EEY3rPYv43CSnFZWR3Nw/Rjxm2sJugqm/uYfev+oq1OS\n6yTjFkB8v2a8ZVP+ugwBHj6beDYLxDOj01bSdtfQ1sjQXAWSZuGBV1i2Wi07\nfywVWKmbYlSkfmk0gjDUayshSu4GJPNWy89iluG4nxI9zEpkda3KLt0Y01ts\nZxzgm1e4gtYfdr5FzhxwmsAFl5hI9tmOSWnW0UJHotDgFPMckOmwfH1ZDfYf\ngOGtTTKO3E7kkwhqVvjLt5uEbMUmrLsfmpICTe1m3ixrnKQXRl83EuflDroH\ngvgRzouhGruUsBjbjJ3A7ucz9/Ow1PeK3L+BsSLMUrH3KP0UUk9BYToAwXxD\nf/t1hwA2Yw6ygwObBhGMnPZVOOt8KsZ2ID3YezJRdM+pkVxY1wpnSPIrgvvF\nfKmwXLgQwxP1uu6LNZGywPkN2Kx95WndMYkrqegttoO2812kCsvuqsuThksP\nuKbX4qwoHw+EqhWDmjFXXklWEtoQDUUWlVbPBJTTnSOolUZHk5pnH3PtuQDk\nRfj7NS9K2bA4e/wrcMB7B9ZBIGOIKHJ7YuP9uNis1Zc4fjfXGME6bISa5B6U\nd7u6\r\n=IFZL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"b5474c9924c3dc30157716a5c7f6a194a4a0ee08","scripts":{"build":"tsc"},"_npmUser":{"name":"caroqliu","email":"carolineliu@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.18.3","dependencies":{"chalk":"4.1.0","debug":"4.1.1","execa":"4.0.3","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"6.0.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.32","@ampproject/toolbox-cache-url":"^2.7.0-alpha.1","@ampproject/toolbox-optimizer":"^2.7.0-alpha.1","@ampproject/toolbox-cache-list":"^2.6.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.0.5","tap-parser":"10.1.0","typescript":"3.9.7"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.7.0-alpha.2_1598027351389_0.3834007818361238","host":"s3://npm-registry-packages"}},"2.7.0-alpha.3":{"name":"@ampproject/toolbox-linter","version":"2.7.0-alpha.3","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.7.0-alpha.3","maintainers":[{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"choumx","email":"willchou@google.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"samouri","email":"jzfisgreat@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"79f8d190137e253a76aa8e29b32d4b389f573232","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.7.0-alpha.3.tgz","fileCount":76,"integrity":"sha512-JDxuLArEWJ482q5CXADLeqqxeY7rGAGym8+L0BEaaL81IeliHX94Ky9pPKTkUONu/FEcHQ9IgZZLlcW2/1i7Og==","signatures":[{"sig":"MEUCIQDvh8yAq+OLhgKl2iU1q4LzvIUzqBpeil9cXC7OEey4XgIgB+e//eUHHYFK9yEKhCvl/qGkCvQyUNM4zMjFOvxQEaA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":104174,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRVDfCRA9TVsSAnZWagAAlkEP/A7REucHC4D1hsmgxq/2\njjVoUAfrFe13lXgXX0GKWzxClYLEe0nWQ/3L4XQuRNJhUmQ7ywKrly0iibxl\nc3QvyRECS1DY5PnlYkIHWFOS7lyOdA4kzgTV/Q5YMV1hyHGnhbKjaGObm+NS\nEzATXY9R2gm8N/LdDPtbnzHHbEMvdmZhaFlCKYWM5fI8yjMEUACGLKvvXaSD\n8j9Cs/6QeX0xIcG8Z1jvjKv96UQik5y6uJ58T9nMtRQC4kBX858wmWF+866q\n8DJ++h1GNj1V/EB1As3oq1hkSOB6Q4rZ182d8YIOeOQZMjRLXx/vTpYgSaVQ\njYMDeydw81wvIdhzav+yIG6/FDqLtX6IPskPFziPR86mgWmFdfy59jlnsJpi\n/shl+z6Za3zBvqN9doGCUbUPNk6RDaAZlAxcFxduD6fkemBwDoF0SQo00aCG\n65goQiOKdXjuuxvtsrl2ZjJms6mMSxAV0ODWIO6jdPDjnOPdLljWCR75Yfuj\nzL5Iq5zkKw3401xj1vjTD8IPWx8y38qoACc8WLffzgge8xSdjL3CNSF+S1cz\nJ5LLQVVKTbdVbuBmSt2qZM0ixII2XlA4p9zYEK0CNWmDsbjDmwiH1Jj4KLgz\nhsiNqzm5rGytqpjXDP+Tp4NGnXqNPOKfQQeTxgPXvbx+sJ5T9s+6pxWAYc9u\ntG98\r\n=SToZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"de7df1bfe610ce929479d54ab15a7bb11673a883","scripts":{"build":"tsc"},"_npmUser":{"name":"caroqliu","email":"carolineliu@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.18.3","dependencies":{"chalk":"4.1.0","debug":"4.1.1","execa":"4.0.3","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"6.0.0","node-fetch":"2.6.0","probe-image-size":"5.0.0","amphtml-validator":"1.0.32","@ampproject/toolbox-cache-url":"^2.7.0-alpha.1","@ampproject/toolbox-optimizer":"^2.7.0-alpha.1","@ampproject/toolbox-cache-list":"^2.6.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.0.5","tap-parser":"10.1.0","typescript":"3.9.7"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.7.0-alpha.3_1598378207087_0.4452420650474056","host":"s3://npm-registry-packages"}},"2.7.0-alpha.4":{"name":"@ampproject/toolbox-linter","version":"2.7.0-alpha.4","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.7.0-alpha.4","maintainers":[{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"choumx","email":"willchou@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"409dbe85f3d61d55486b366f0437d89686af5369","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.7.0-alpha.4.tgz","fileCount":76,"integrity":"sha512-T1NG1AazikYJaN+3u7+Xfw8A8ou1vATRlHi4bP9nv5KrEiaF7tdlqaKyJOmFIrCpfEHPbN60FgSj7oopr5W6Zg==","signatures":[{"sig":"MEYCIQCzrtHHzaW+UCUGInAh0qhdQGmAF/oCjSiKt1D0j6ctHAIhAOkf93O9TY7I/6bLQtKnPFBjUKKv6Dx8L655InzX5GSx","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":94627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflpz5CRA9TVsSAnZWagAAl5YQAJC4VrWp4GbKyqGBK8BB\n3FRstDmUYp7iUjjiaXdXliRIcShbI//jtGHdPp6+wlpNzCE3vtMD+xarMXuM\nJ3hgPHO8WNzxIFj86IRH6zZKZUDtGpNLp6hrHRvrk7XPo7nSP0ZAG32gwceJ\n/zmzsE0BINkn8Fbuis+qrQ0cVLP4PJBfEeYxJ0kOT9CrwPn0w9UmeZg1csE1\ng1dcfb+z1lFogjElfNgKv8kxl/Q+vUFxhxkrWSh0AzpPLkhnPL7dgY4RR3tY\n47VK9cs1KlHCA7sZkODO+4QRVj49oHcYre9KT6Tm9w+niE9Uc5EJYBZ0NTAe\nuWrqFCL5B2qNoNld7wwKMbDTdAToAqUQ4NLrevGKF3xzVnJKN3qPPM9IDhMV\nC/uClsLjKGWO+6VnwuAi7U8abF9trmrmufgKD8Oms34XRvf78h7ayfbHlmUJ\nPYjP5+WYaJ8xoEp97OsXa8IiE64qK0xa96PuIpkx7E8rfmELko9FosuG02Bn\nXCWwF+D+8ODYMfoY2nwv6oRzc6LkVsKqJs94Ol/uM7RWwDpY5bv+hRWejtKm\npmrP3a29BJu21w7l4REe/4W6W5kdxC1enTKUvwCT9cFxamh1ochVKVooamUQ\nG6RpcwWJHpC3We5zFcvZLXvLku1BJxeXRQfytSHqgs5ohoBIU7VI8WlBJe0j\njTPD\r\n=6Vlu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"c26612cc3d7408fdc1451bcc8e0fecd67ac9661d","scripts":{"build":"tsc"},"_npmUser":{"name":"patrickkettner","email":"patrickkettner@gmail.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"6.14.6","description":"A linter for AMP documents","directories":{},"_nodeVersion":"10.22.1","dependencies":{"chalk":"4.1.0","debug":"4.1.1","execa":"4.0.3","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"6.0.0","node-fetch":"^2.6.1","probe-image-size":"5.0.0","amphtml-validator":"1.0.33","@ampproject/toolbox-cache-url":"^2.7.0-alpha.1","@ampproject/toolbox-optimizer":"^2.7.0-alpha.1","@ampproject/toolbox-cache-list":"^2.6.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.1.1","tap-parser":"10.1.0","typescript":"4.0.2"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.7.0-alpha.4_1603706104918_0.11404028880882588","host":"s3://npm-registry-packages"}},"2.7.1-alpha.0":{"name":"@ampproject/toolbox-linter","version":"2.7.1-alpha.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.7.1-alpha.0","maintainers":[{"name":"alanorozco","email":"orozcoalan@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"choumx","email":"willchou@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"3759a3e5bc4c803509e400464537b305fa7aa1b8","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.7.1-alpha.0.tgz","fileCount":44,"integrity":"sha512-XAFlA4n4TRs7+rp5/SK8MFmBozv36Bv9ksyA8bWc0WZges1OXfICedZIWLYhhYhiVK5VDeFCl1uZG1cKXt3DUw==","signatures":[{"sig":"MEUCIQDSeCdrnfkRgnLoOK9OhoYpgZCu8clZQrTsnSsxrmSMBwIgf6KwR3jCrGfCA0pa5UyyyiHfAmc/0wHHDC/tbjBaETM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxpYGCRA9TVsSAnZWagAAEfkP/0pc0urSdwx0X4cuNG0m\nv5qoM7hwhfaO9qcJJIpHoK9attPutJrF0ztYZNQAWzNqqA6CZP9OtKBSMUk5\nV/AAOEfkf/YgSYJqD6Se3+j+bq1GblmQcPQfOauBHX8gPM13cu0MsfwiD/xv\ng0dQn1jMfd9p4C5rlE1io5b5sPDq3/VcQBc7MKiGdgNARRN38qm5aXYmv8R4\nKYQHXeJ2rWlNNZPhr7TloxTGuCAvpvj1F836UcCfYALDhuJGyHXAa1OFWzLz\nFMdNHippk2jcUXxWq85RbVRWuKDUExDZpUfasc7inJCwkCHrw90oeZXLC07j\nsB4ZSUs7YeI0KOxhLGtgWGrsAdlmpeXA+j82H2h39S3IhFa9YyROr/N7ecFu\nnsWdzkq4ljURVhu7KDP7U3IVQHU2uE7zhRVf0WyqchlY/MQcuv41x1SsJSOM\n7v+gyMvcom9JITWYVut19NzKFO/1TkikljGq4II20ROibqVKn808aDo43dCL\nZDSv0aFFGSObYqCs7wz1+vh5vueaNm4CRLwjR2i3GtEVMaA+zwZFaCcYhlp+\nBvMCTr3xy48jzMAyoDE1QFkoU4wnZMMuAL7eeY5Lvbw/im4l83sX7/5Tag8g\nRLFont7Kc3/V+Eg8Al/04afhLAAuQ0cotjq9td4z/JMCdYHHAjl6sMLI/WeS\n2ESQ\r\n=DbgN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"c26612cc3d7408fdc1451bcc8e0fecd67ac9661d","scripts":{"build":"tsc"},"_npmUser":{"name":"patrickkettner","email":"patrickkettner@gmail.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"6.14.8","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.1","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"4.1.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"6.2.0","node-fetch":"2.6.1","probe-image-size":"6.0.0","amphtml-validator":"1.0.33","@ampproject/toolbox-cache-url":"^2.7.1-alpha.0","@ampproject/toolbox-optimizer":"^2.7.1-alpha.0","@ampproject/toolbox-cache-list":"^2.7.1-alpha.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.1.2"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.7.1-alpha.0_1606850053904_0.2586675234947371","host":"s3://npm-registry-packages"}},"2.7.1":{"name":"@ampproject/toolbox-linter","version":"2.7.1","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.7.1","maintainers":[{"name":"alanorozco","email":"orozcoalan@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"choumx","email":"willchou@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"926a1e09a61c54d7ed0a3247a727639f98486d4e","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.7.1.tgz","fileCount":45,"integrity":"sha512-Ex3vtUrw5aHqzXrZgdwTUlIPR3pCOMvUzuZCu1uXs75/Jt6TSsnNv5wxGbX3xRBqLffjPiLx0YS22QfWXGKp0A==","signatures":[{"sig":"MEUCIQDTxEBdMOpdgWTWVXfpvIMvRBcJK9a4ZGHROlamoh8drAIgKFSkG5H7ryYJ/3ON96bvFhkpluuyS0nSNfDWg6OB9IA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":91419,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfx6rKCRA9TVsSAnZWagAADJ4P/36lfSszexTtn7qrSl6y\nTTp8rr6Jtxlg+NKnj/wCjjayi92sJycG1P8SkXTL1EqeC8dHAX6GDZU08MSI\nc/kyCAQT7H0kVk09AtQILUxdzF9BPAC0jsGlsYwVAOWQ2PMchDJ+qs/OYYGf\n8QeQFf2AD+9lZcxSl/DCzOWbWEyzEjWGvwymioXEK/JO3P7aPJvUeB6VUrGA\nPohcje3Ruva/plIf0nQ40wBJRHh1aXBWXC/Wgic0YDzYLinj2ERuiwRRY9wv\nB8XbLNzISY/V5ok4qyzT4VtyPmK+IyfWUScMlHDKjsvvo0rzlUg3mQLX7GFS\n0+LgRwOXlwpEOdc7P9sAR/VMxgakqk/zpuM0PO2Fe/mFfFiY0UFA+fzEne0j\nE0SOw1bSp3aXcyU2iOo2bsYeLIkbiKl4dnr0UWbtv+ha54MEigwW3/y53BRS\nYoD3UiI8mP8WCekEUMQH8Ao+3ktVMf+9hnbm4/lOlfzGvqldsjLRDFmNhbDF\nkGvL7xLud5MAQBdp1hUg3c0XFLBzhrMkBXMSpeHMq0SlFs6IRyBDoqI+xLiE\nC0r9GntEDkS4wXLwNlvTTxl2blBUVU9Ewxcn01UiiLpiUEJKHzaE5SybA6Vi\nYrHIt1ujUKzBDsVDrST93usRXoA8C9GMkr45dtFZrW6UL/cw22ndMt4efCxX\n5WtB\r\n=jn/f\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"9b159391d776396512b01ec250fa76941713c763","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.18.3","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"4.1.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"6.2.0","node-fetch":"2.6.1","probe-image-size":"6.0.0","amphtml-validator":"1.0.33","@ampproject/toolbox-cache-url":"^2.7.1","@ampproject/toolbox-optimizer":"^2.7.1","@ampproject/toolbox-cache-list":"^2.7.1"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.1.2"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.7.1_1606920905779_0.08977748414140851","host":"s3://npm-registry-packages"}},"2.7.2":{"name":"@ampproject/toolbox-linter","version":"2.7.2","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.7.2","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"12c6dcfc1a1363b00386f14fc77716b76ddbba53","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.7.2.tgz","fileCount":47,"integrity":"sha512-6S3hvhRy64YSBNUrME513KI0s3z9U3fGwL0+8v2wQkV3dDReEZ1VELdvgi/IKF5UtXv+t8LwpDrl6Av34tMi4g==","signatures":[{"sig":"MEUCIQCDQweikGF53queGJDgT5CNBrBJEpDJuw4yVcJH0z9O2QIgde/++Td6Hn9CocY88TV1V7cMIjYcbR4kGm+rB2uQoMo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":93730,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2ROoCRA9TVsSAnZWagAAFeUP/AgZZIMXlFH0Aucfx1ZE\nl5GzRiTUmrDFihTFXtdzxTuUxiiO27gmp3SPaJhNp7d0f5lu+CrZI6F6vp/0\np7WKApP5ieNrAY0w/gjDN5CV3t2ChAkYey2Lrnu77njzwhSbv5CfSZsW/1aO\ngKgF5eb5pnj6BbPN7F77B6maZMYrTZA599QKAixZraC6jEEz8l+0JWME3liy\nzlN8EQbUYWrtqKP79rsGnmEnu28p7HxFcF/CeRZORtOT6MJB7LuS4UfSF8dS\nzw1DmJFjFAXhpJJx6h7FnVdyVgDZgTqCyRfQ2sv0GzutpmnY+T+5HZLrv1kt\nbcPjDQRJanQte6r3ZSxFmH7bgWG3XFNJvvN0y0dF4AQowSBZ3q99uobdiVCs\nJJ+ORDsbE3TMfKU8YLlay7N/PFB1W12WpVLa07y61azRzOAmyFMk/txZjQLT\nrPzVQuSBBERQVZtk3N3M3kOFNZFKwXODkpGZj+PaiyE4ZRivvBQldsr0bXDR\nsZJOQb08FaFfGJtQ1+p7diWDhMAYvkjVkEpsOyZcEO44mrxNQQWYgcc4OFix\nwQt8mQcjZsGvNPfpAzL4CqFBzkQfhbiG3ZygfkDV6sJlcz+wLIk9YH1dG2ut\nV0pgCCYxhYkAlXKAzyxp++lSykFeKy3ywSOJtGnSnM97oaqDWEgFWeFFKgLL\nLO5W\r\n=/v/i\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"83d1d4290d9da2683596506cff266c68e618fa81","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.18.3","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"4.1.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"6.2.0","node-fetch":"2.6.1","probe-image-size":"6.0.0","amphtml-validator":"1.0.33","@ampproject/toolbox-cache-url":"^2.7.2","@ampproject/toolbox-optimizer":"^2.7.2","@ampproject/toolbox-cache-list":"^2.7.2"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.1.2"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.7.2_1608061864487_0.03196064214038752","host":"s3://npm-registry-packages"}},"2.7.3":{"name":"@ampproject/toolbox-linter","version":"2.7.3","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.7.3","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"2668a39167e30d2937f7253e7e285535628eb2b7","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.7.3.tgz","fileCount":47,"integrity":"sha512-+LS+SqlVPZICt4KGnK6/qe3TaYLyqRmu7sLnaXR63bRh5+EbXuF6MaS35vy3qjixOOZfIIfyuoJ9ACDyqKa5yQ==","signatures":[{"sig":"MEUCIBNWZPqskPwkzaEhum6cmY+VzSUZu1++9QeNzSLaoE2SAiEAmJDQbj7BAR/TAWqMHjr40A+C/FqEhiQ/ayVQr3lXnQo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":93904,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf23VcCRA9TVsSAnZWagAA4YsP+QDfHx99J4CwV4xxIlf0\nnuQ/I1RYR7LN9qXe+iHonozJyP0ae1IRuQQw1n34F2v6oMQ9abZ1+UqIfCV3\nkm/SCK7jELy9o+KO7h67LCyiNJ3mzuBTEUyTUVodSSqpwuqx7vynmwbQvdZp\nmj7GzBDQ8kaMhen9yypSxjcCHIxNrhccKf69yOch6T6O7gJGe3a9riJcyWro\nvgDVJoxCK6rEegBEPYbcNmaHylhwvKze3TKV0M3Ai6HxH2ObB+IXb4zeJ2yJ\n1Di9qkbsP3Sa7AynmTCEBgvbYONvmBHfr8Jyi+BQyFXC2k/DfGHYM3OUSH33\ndHilpkq9gOKcbObAidUJD875ipWLH6UVUrM7b++tYI9dFODDaixYrhVfjT3f\nM0yM+K7b0hVO4kAh+xvyqS0/wNdPCz8UCoqKyL00i0KAWc99M7y4vN/j7rF6\n7KGi+DGcySr3eT7On8vW7ymfXgr/IHUTWrYQyMp0PgZe8YCDpC2xdTr03HR4\nDyV+nvCghGcDugXiXjKXvDrzEg8FhpKmOabZk0+lwlF11iEX7VXLROWJhWZb\nB/eP9KXl52A/nQvvAYipcSEkmPrcL795JnMYjvKLeso3EbYvEKx1UGlYaMNL\nSTEF/QeOteOcNIrOEmO07r1+REcHFegrJBzVLJlY3pA4hh8H1gQ2yLcWFzAu\nHrD1\r\n=Ot/h\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"b0efede4ff9a6baa8173016f7c630d406e26d5e3","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.18.3","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"4.1.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"6.2.0","node-fetch":"2.6.1","probe-image-size":"6.0.0","amphtml-validator":"1.0.33","@ampproject/toolbox-cache-url":"^2.7.2","@ampproject/toolbox-optimizer":"^2.7.3","@ampproject/toolbox-cache-list":"^2.7.2"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.1.2"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.7.3_1608217947566_0.751122682886751","host":"s3://npm-registry-packages"}},"2.7.4":{"name":"@ampproject/toolbox-linter","version":"2.7.4","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.7.4","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"a79429a9eee2f00e7775f6d62e4ed88537d45223","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.7.4.tgz","fileCount":47,"integrity":"sha512-5HhBc01Zx8R1JXpbSnlp7ZnTlQSbMmApksyBC9DVx3I31+UVW/GOJg7RBaUXZPI3XAeNNR5xFIxfbYpnwnz4yw==","signatures":[{"sig":"MEUCIQDhBx9qGzBQUYlh2wxv5B2DQ7+eSKqFeCvuuAd9pDOoUwIgMCsORunUtsaaKqOWBJd/l4L1YPVPZVaR+rY4yEpezCc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":93903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4y8cCRA9TVsSAnZWagAAJlsP/Aok3vy9nb+UJ0VIfOYM\nwx/GxIh7LWtpGLEhso311tq+wUVJ+ai95gmxFqBPv/IP98kdz7VjzjF/QGMi\n5LdRBjvtIpNhgwIOS1gg/s5a1SXCCarJEnS5bsygsvF3VCpr3De6Zn7ktl9t\n+MbBxpEAOzr2MktN2xcZjA+W/cFIYu5YeBHRrSusO9oFOBqe8eMhFTcZJfWZ\nNuhPjQ/Kk7mqnc1NlG67GlpM+jlSaKrTVXYd3NcyRgvrhJSJg/twCKfp1Ai4\nMcahyz27pYOSeCW3MUvYoJ+QirgE1HMcxebsfz7K3gEev9DaYByeASfdbj9u\nnl+t+7nxcd6LrgNCqvfhoR89MxzU8DqGLapkEX1sVe2ElNrUvnqVFkBfEaRg\nzyBnAiJ35VfjcWhpuDrEimKk7AW5kO2WZ2+IdOBCH+TXadaz+WY77iryU4JO\nvsVMnyjQK8Td/lg8I0T7YGQqJD3jQ/R4wC2mWv17g1MKIEQqrf6JR7EP8vac\na8OUOVai5v9ZXArORKjeoVb4MBrLBluVxesjQn9lBEcXIw7yZ9rjnp3aoPpA\nRjptthZKeomgfKrmqrPnlrH+vttd928nBej8di9veJI9PIoWn5OJ3T58z9g+\nGiq+c9E0prtxQQliGr3hzDCkHDanhWzXhUYM4wapjxNG2NuZs8KSPFoY0IeZ\nZ4eI\r\n=cOgj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"881ffbde5be5e78e039b132f0daae3a3598ae248","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.18.3","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"4.1.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"6.2.0","cross-fetch":"3.0.6","probe-image-size":"6.0.0","amphtml-validator":"1.0.33","@ampproject/toolbox-cache-url":"^2.7.2","@ampproject/toolbox-optimizer":"2.7.4","@ampproject/toolbox-cache-list":"2.7.4"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.1.2"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.7.4_1608724251626_0.14875052664359556","host":"s3://npm-registry-packages"}},"2.7.5":{"name":"@ampproject/toolbox-linter","version":"2.7.5","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.7.5","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"ee0f701b02dc1bff60a5f3f475fee9d5037f0132","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.7.5.tgz","fileCount":47,"integrity":"sha512-CBhA3MksftlVcwOgyCZzj+cc1UnOMpl9hs+t7b2Hcfnhzw0f1Z0rTSBS3vTwypXPeYvBh/Z3Bn053YDaExF0wQ==","signatures":[{"sig":"MEUCIQCE0sZyoNTJwshKeFhBTOnGzEBe3XngGTfVMzTOxyEYHgIgfnEzGicocbVNcxexhiUGdxoJCZA1HFWm/KmIMBLxETE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":94010,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBXrwCRA9TVsSAnZWagAA6mwP/1I6tVE9hhXOI5FKqvqQ\nu8qRQfRfTnZR2sqSuXxOLhhkG+7jv7nTsCurf2CPb2Jx7PrZx12qng0EbY/D\nkzxWQk+d+zglFpbsxWUWKPLYlwUOvtupWvrRt1jECixPMEfdXTtJzfmOKVr3\nOkJtE06MAVC8eMoxItWcBdwE/r+55IcEdERtmVt7XzH04c9x9dAaATWkaqCI\nrUeYEGo8D1rwIj2z7s4kbEzVaNIMjc7T2+F4CWcbWM1yLKUpvB+/gKP+Jdkq\n3A6fRXmCI3ACELMJWfbBdT9nLGmcIYQI3ulgS9+DEmP80m+yhqO///i49VgE\nJqEO9dSitPEhwOTKpeMZTkscqy68meTiwtHdLoRWe1HweXqLofzwGcWiB13G\np3nMdoIZeeY5Ir+PJzzwKuCgeTDlodI0ua11mcA/B37ast0sx3Qd3zh0onLM\nR7V2TsQwVGq/N1qhd8tSkv+y/b6/EXibewM2YpK+v/CjCwayRVZI23UFLp2z\nKxKsZ3IWLi2J0XUhz7rtAOcNZabgFYdQkkGW9BzIeur3YPKHE0SFnbSlmXPD\nhP9mevpXbGO8jBF5PTel+aZiiTDDoM7kwCGwdiGj2QwQ3Z0TOyIFJpi6CEf2\nOF3YUdeXRqtwt3AW5OPQgiBW/UyBZfcssmpmSGKBeENZoCSJFQLbRm+51+ad\nV7Dr\r\n=NgwR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"b86ff10f2a20a9e5f810f31a694c7f020eb291ae","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"12.18.3","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"5.0.0","cheerio":"1.0.0-rc.3","commander":"7.0.0","cross-fetch":"3.0.6","probe-image-size":"6.0.0","amphtml-validator":"1.0.34","@ampproject/toolbox-cache-url":"2.7.2","@ampproject/toolbox-optimizer":"^2.7.5","@ampproject/toolbox-cache-list":"2.7.4"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.1.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.7.5_1610971887718_0.18127241144536033","host":"s3://npm-registry-packages"}},"2.7.6":{"name":"@ampproject/toolbox-linter","version":"2.7.6","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.7.6","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"d0da57a4c25411b2b6b3e9a38b28de3d266690bd","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.7.6.tgz","fileCount":47,"integrity":"sha512-sDpNbKMTrsdpyAm6+kgq+Ti4sDGlmQ0NCNjs3rx+cNB8XVn/1jxzlTHw/H9lZvDIY7O32UpIK5+8XJZLCLzkUw==","signatures":[{"sig":"MEUCIQDo48woyMdJWNfXy9EzVvZ+wsnYyMZoG4RSKlx3xenCNQIgYIcK7pqNquya3LwP7rQn8Gq3AaENVKTG5gdeypHw47w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":94010,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgF/tTCRA9TVsSAnZWagAAI1YP/AtBR1RNKfpgtSpVlU34\nfX3KUULa0Cv3XwN5Z26U8Cpob1HNONclb5feeVoUp6GHeYo7HVjfREy/c1Km\naUDp+PS6w72FLk+hnytU+mKMk13SWLNZoFWj9coLgEf6bDj7jFwwAYf1sTIz\nCM1LnWl3nDhSzRooDRXc7uY9btTrNK5C/f6W7p2FtPPuTGuYodBbaFWgfH1G\nqgaOwgCZFWnFRfbXfRea4kRcLVnnB19f9SX+x6/BiPAt9UbRhNjoxPfzFyuE\n9GBWRUgYE9ITfmM7wQnsSc5maHvALAk/R7OvfvEFa6cqHWxAlWQN3i+MBKOo\n8G4BLZEKZFErjSwl/01q4XCIR1+xeU/nq99xp12W498uURGQ+yogww9gJtEQ\nDNtj1emRxu+Snzc9/fNvumUIcfIHQ08bfH/9P9z8pf6dZIR5eCo4pGedbPNX\nSRy46TtzT2XIaNB6xz0+Ersx2c/VfGHm+twGrOM0t1MMG8wBoR4fCDaeduQt\n7SlEfV6EKsWoDXEA7SyqFnrneLbLYr8fhUSZle3jtzhKDmFlbtRr/3LhljYM\nf/flGe/1WoO18ib3B20ynzM1TCd1JZB5mrBvZYDRbgVNMfbLWpm5ZtFMaqNp\nIn/sbiMEw6hbL/OD90QnccOgTMAt546tBvesYeOYTOk/FbFbUnBVpDcscEmH\n1jSq\r\n=FL6J\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"bc8367e395b11f7b9ceb03562bd15982415a771d","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","commander":"7.0.0","cross-fetch":"3.0.6","probe-image-size":"6.0.0","amphtml-validator":"1.0.34","@ampproject/toolbox-cache-url":"2.7.2","@ampproject/toolbox-optimizer":"^2.7.6","@ampproject/toolbox-cache-list":"2.7.4"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.1.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.7.6_1612184403230_0.1037898856206052","host":"s3://npm-registry-packages"}},"2.8.0-canary.0":{"name":"@ampproject/toolbox-linter","version":"2.8.0-canary.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.0-canary.0","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"88ae368aa023bcea0549593ea84b395c79370c4e","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.0-canary.0.tgz","fileCount":47,"integrity":"sha512-NPHo+qRgE8ZDqcPoyOOh6BbOVTD1Q0cQgkz+odxVVOz1VIfe8xD9+LNkn8KTZhCFEpcyYxdJYyrOqjqsMs6o2A==","signatures":[{"sig":"MEQCIF4/xGXCfG2nK4pcgaBElLbTit5FwyRsSNkoCpL47WTpAiAPLIvlZrYA89KxdCUdDCl8MGs/8pimrvm6fCBCZIdQJw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":94048,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJrnrCRA9TVsSAnZWagAA8WoP/jz0Nazrk1gZiWwU7urE\nkn3ljpGUETImeqjcyq/BrapxgXHDoapsAZCWHrD+uaOJy5rC/GmVXos5RStZ\nIic5lxjqgPwWyw3I7k1GvRm7XfWypsfBzFtqNrX0wCoRwYqqpPMYq9JB/CTZ\nJKK1fKGchaYG+TNpSNwRkbPYmT1sAeRa5mDVVFFl3GHKyzMh55kvVWVK8F6+\nq5Y7h5rmvTMR4lAFh7ylqLH7Gm8D/xGghRHZW+kBqxYpVFN3HhIHYO2GdEiD\n5Nk5ISgn6Ma1J/Sj8KGgIxXHI23oPwmZIM5KfLD9lYg0modjUtpWYF9JE9Yr\nXh/MgHK7734H4cNiGIGSKO7drus8Myk48n48DOio6defE87jveJqMQaxBN7n\njtco7fh0lEr/s85X0zAXU5m4BM5+bXUwvbV3P4vItozf/TWp02LNA2240fTK\nX+THkgliz2BZ1WaUA9NWB9qOKksNMLWHML3qrjcc71vMmAhwNZdL3jgEbIvx\nwehuEiAumALRJXyimEMMxJls7G+dS5p4gwS+eAQJbi/UbNRC6XFNRvgCHhNK\nUjN5/6GMAoiMU9CuMPdU6oabOkcAFZq83sAYCHyBcgIia0bu8nEpg6P30Y/5\nMt6lnHYe+8KD+bVuNYiCU5kJncwogWwKY/tbN5xDEFxmm/RH2T9oKD7iibn8\nINW4\r\n=PTGm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"0ec5cb5ca31022687841bc344b29fa8e775310d8","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","commander":"7.0.0","cross-fetch":"3.0.6","probe-image-size":"6.0.0","amphtml-validator":"1.0.34","@ampproject/toolbox-cache-url":"^2.8.0-canary.0","@ampproject/toolbox-optimizer":"^2.8.0-canary.0","@ampproject/toolbox-cache-list":"^2.8.0-canary.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.1.5"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.0-canary.0_1613150698671_0.3934036239105616","host":"s3://npm-registry-packages"}},"2.8.0-canary.1":{"name":"@ampproject/toolbox-linter","version":"2.8.0-canary.1","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.0-canary.1","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"013643312f54cc1e127ff9dc2cdeb9ac5cd15bda","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.0-canary.1.tgz","fileCount":47,"integrity":"sha512-CUaqaAbdsmO74paojJ9P40Naz7Il4HL8wcIGYLhItJuT+RGLbQGZci+WkVNuv09R0spRbVdk4knAOQhfjP031w==","signatures":[{"sig":"MEYCIQCWWKzbl7shDRUQVobdmcGruThMmRCkbfPR8Ynk7hOcLAIhAIIvkB/EEwTyYKa+rGmNDT7O1D02+PRLNvvyu/BZ89zP","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":94048,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJrxOCRA9TVsSAnZWagAALJcP/izZW/bvMrxnIkPiBMaD\nb/K1ET8JVNf2wO8NqV9P1Uj06T1IoTC14TnTq/ZnIHe6SiZUYEaPTHFyl0Dv\n88uiMyXf89YE00+RnA9nLIqesVQeHL62akd/m4KCA3nHvPBqu+IC7OUvD7U7\nddzzbVH7avYCyAcOL5w74Irch2vwUKxBVYjG8vwmNuyfrw0ZEHqfdbya3ouF\nOJDV3qVShLiZgo9TX0bPTLiJL50oNTb1CubUfXbX9dY0E61xS5TkMxDtTiHK\nta99T1Pn7Gp5knDusC2nDZrz3MNZocG2KbtbWeCLuIFghFrNippysAWF3UPz\nWKpkL3W3vh80MaQ9ZssOUeD7RcUuAYlnJ35K99ZgTGoxzIfPuS3Q6I/T+bJc\nOH4E8kOjw5fOk14xfDDI2leRgf6Kh0DU9tRRjv2L5BOqxjWhsMmAco01fuCY\nS2zFCxlRJD3/wieo7rhpVoEP5MyzH/aHMGSXB1+cSqI9qoFtn+A4gkFaVJOW\n+i1iEyMhDb39VsdekOVrzmuOf7XhkQNEWKCgRtIkQ+KdGEJHhpGcvOdRFySg\nlsN06XFqszRiiaHhczBzUN5TKoLGCQzR0xivPbaFKB9M/uySiLkSLJS3Z/8f\njPOYFJtevBbbImgc9KtWnUiTurTP9FhkkGOAnPURfIIfAv3Rf1pxqbCUCi3Q\n2uVE\r\n=acGD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"972aa9a6264f5baf0dfb698a236e130b92480867","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","commander":"7.0.0","cross-fetch":"3.0.6","probe-image-size":"6.0.0","amphtml-validator":"1.0.34","@ampproject/toolbox-cache-url":"^2.8.0-canary.0","@ampproject/toolbox-optimizer":"^2.8.0-canary.1","@ampproject/toolbox-cache-list":"^2.8.0-canary.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.1.5"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.0-canary.1_1613151310179_0.8720478450198976","host":"s3://npm-registry-packages"}},"2.8.0-canary.2":{"name":"@ampproject/toolbox-linter","version":"2.8.0-canary.2","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.0-canary.2","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"713ed407acf62d35ac61184c833b8fc8b8dc3ab0","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.0-canary.2.tgz","fileCount":47,"integrity":"sha512-OrBcTpm7BYk+fMoVs+3phRkBPpxZattkTcnyi4Jo9LaZkl/2opADsDk3iduuxd/XfoobMIn3T72d6TM6NH33tA==","signatures":[{"sig":"MEUCIAZNo4kYAcqgRKM0tFdX8cThLKf6wRojoyYM7bg4YvABAiEA5HBRX5c+cT7Ey7p2qweQ0JpTmBtHXFE5pw0NnHj9RBw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":94048,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKlsUCRA9TVsSAnZWagAAqCsQAJvmPMshdLbMdog2kdee\njhyDj1pRia6DDY0fxcaU1qa9HTOHvxVBb7/tAyyxwPqM+YmH4NjT8drWAcBG\n5kPJz1zHRA6wj9EhdZTR8piGdXeRfqc8/Woareq//ChwCND/it09rU3FEQ4T\n7F3Lhp+HRLTGkU2yFQ63Scw7/fcbw28Un9RqZZC9XU42l3U7WaZsbgsJ7wNS\ncbuNAR5cFL/o4wNmmFmnH7cgy/fcMmN/eFWglw7QdbV7dWIuiNNqxPZce62s\nhTszMDkSM7ZWZRO4Hn4baTCavhn4udJSWmdqJqq+To7KgGoJgdMhryNvn9g+\nxTjZXeVv/aHwSiJja8Nc3XThgwf9U0Xid0Tm4s25o/59CGJY6IJtSIWFpohw\ndYYB6m0VGNNFJnezZ1yFAO8ogBaCsawnu9a/a/mNfguU91ZkWUo9tfisTcd4\nwXUogc4xmDVnzw0NG7gIL6NsAF1N97JQAMdsr/qZ+kYVMJ9+rX+FCqECqVfD\n3bxd8PrAJA5kdFl7PKB/A7yLV1kQ7jsP8DZMFt9Ck7ououc0JeryXmNOgKwJ\nxClhtY83td5gHq9qmNPtZMCfEDYbY23/Y40LVgmHfRCbn9YnGX6pP398F/c0\nl0UBqap2yoTM39w1xu3aAQyDf40OH8+3/2IsxV4GbFNbZR34uH6AEoTfJuuA\n7FmX\r\n=xrBE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"fe10db3e56dda4ed952ac629319a6a4ac0e66f54","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","commander":"7.1.0","cross-fetch":"3.0.6","probe-image-size":"6.0.0","amphtml-validator":"1.0.34","@ampproject/toolbox-cache-url":"^2.8.0-canary.0","@ampproject/toolbox-optimizer":"^2.8.0-canary.2","@ampproject/toolbox-cache-list":"^2.8.0-canary.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.1.5"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.0-canary.2_1613388563641_0.8251849179251765","host":"s3://npm-registry-packages"}},"2.8.0-canary.3":{"name":"@ampproject/toolbox-linter","version":"2.8.0-canary.3","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.0-canary.3","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"2c181fbadb546c3aef1dc82e0c64c4a8cc28e652","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.0-canary.3.tgz","fileCount":47,"integrity":"sha512-qNASV9RxAt4niTSvOLTf5SFIsWkG/9MrpIKrEXyaR0qiun6sxZWGDpTZZ7l+phRIgq9So/BzEJs5zO2jqIwYjQ==","signatures":[{"sig":"MEQCIH8BLr5NCxVsYa1jQuNqs1Wilio9zMcDUHYFUygVc6ijAiB5NKfRKd5F9PK0rj4AUJd/5rySrRC0NWBFbYbs8h6cNw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":94048,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKseYCRA9TVsSAnZWagAAaM4P/i/RFmxS8+5PxQ+O7nO2\nVndhUhOVu85tWDqJMssK84MIH+ztNcDDQRL07LI4b02Jm+dEtmcM/eRSCn7B\n8214LYzDzMsEpWHLQAbNjqSVCeuH3RKhi14PzOd5NIUx2BxItSp5rc+fmEwH\npweVQW8iDpoVPw+dwvg1VVKYePuZ9bO2vNCXJ6T4QTJrt6mwYzfebCgmwvNc\nyBEhGOnLhsAjXxPuE2r8Z8uP9HbIusQKFRIsgwp+SQYWqA7W+qhat3eRI9YL\nUZ74Stbydr98IREFf3/MxWaiSd5IMbr/rQq8m9WV1aLe9kfnSXhC1+dOTl41\n9HvHpODUKnUVNWsjFqwcD4dMxgkg7f3BIcwmYLSIKy3w0JStXFUd2AH5X6t2\nOCg1xqifR8yvrNCdqho7EPTGnJl03YyuM7ylS/dCPL1BAOYs/kVmEQC0aTLt\nt3OktvBK+RlQJPaxDRmts0ERva1Pt6q6Ae+WcZWRvkW2gZkHke7H0IBs2KEp\nxAOlk5CZnYA2PEUjAz/XdG6eQWMV1hAScsKfNRvsSbzMgAdiS7nLS33CYziC\nJ+9PLQluXsPYyS+l++wbCzCeaclyjTJM7PldtLgD3ziOmHrvNkqpuHeTRIio\nVD6IY0JV4xqj13gatlDTa9c3tQ6QWYcs2IZlvof6WbDZRZCCwpBwi/VCbrWQ\nKjHf\r\n=h9wv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"fec25a83d058b3afbe2f8bd5a6c2a6ca8efd430e","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","commander":"7.1.0","cross-fetch":"3.0.6","probe-image-size":"6.0.0","amphtml-validator":"1.0.34","@ampproject/toolbox-cache-url":"^2.8.0-canary.0","@ampproject/toolbox-optimizer":"^2.8.0-canary.3","@ampproject/toolbox-cache-list":"^2.8.0-canary.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.1.5"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.0-canary.3_1613416344397_0.15304518322620675","host":"s3://npm-registry-packages"}},"2.8.0-canary.4":{"name":"@ampproject/toolbox-linter","version":"2.8.0-canary.4","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.0-canary.4","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"76029f2e3fc9f6d978f5dda87bc26fbd04f486d9","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.0-canary.4.tgz","fileCount":48,"integrity":"sha512-UI8b8dcoB75k+Q3vgubPFhWtF3hHpqzwZ0YBraUFubvfM1OyQuNXs/x6HU2D+y7q/OtatsHUsDmpJ/de34EpEQ==","signatures":[{"sig":"MEUCIFCab7mSsOmdXpEXq53bcoE0EE7ShWBIBOFoAkOQxyQHAiEAolsX4iR25BOkitgGetAll0kCmWp81B1MVvuAAx9rzjw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":97819,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPjWXCRA9TVsSAnZWagAA3e8P/2CsAwDVo9NAxHEps0u9\nkIp7OVwYByT++8u++WKaU7oyCeAK1X6bXRwcFXD61dnEnGvOidkUicIS3Oys\nv7BSPIoMYUk61HPMVSagWIuybyBAR/q/fUnRlmtOngcTH2q7HLnOl3ImRBOd\nAqMU1wTMqiMRJgAUR1C2tdhEH3GOqTVikHlZWDMTGQopD5ZEaC9Hi7vCIRwy\nZMeOZyKlwelFtPJcS6w3QjZuGp2cXgl7u5maIVWPjxpomu3iVEWAX4Ose42y\nBJtn10zDCWqLsmfryrwVQBqx72d4dR9r5kgjjfMB6y5pBX8pqv4StdC9q6Zq\nXS5zivkMfeFTWfelNJ17m+VNao32Bn2WG8CBZkNG2K5CYGB2SLgi/4HD1u7A\novjmpfwvlKeymCFtSeFhKxg+hdLlglnH2ReWZAp9IIwVSzrGHAffiaN13vrR\nyvhOl+ZB97cE+BPCmxrTMWm6sc4vp+SpKsQFTvvRNkYRnXU5DrkkquCROUnw\nqxzqFtnwB8//9RkClhNZh1Q6ZVBrcKkqRDKjEWwebbNyvaam55rf/HrF/S4l\nvUgEBTmjDjUHOzBOrbOB6EAoIM+xU3gXptFRZ1y3Yc2UfBHQ9Mst3NhoV55P\nnT0K5mG2Py0Gvq+axMzyYCZeLrmWVGjXNrAAmlfsLWxBAj0iSvthQSn7fOOL\nOFp7\r\n=DS2M\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"0c3af53a631fffeffbe3da1f2d626172fc996f1b","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.6","commander":"7.1.0","cross-fetch":"3.0.6","probe-image-size":"6.0.0","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0-canary.4","@ampproject/toolbox-optimizer":"^2.8.0-canary.4","@ampproject/toolbox-cache-list":"^2.8.0-canary.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.0-canary.4_1614689686690_0.645108519588006","host":"s3://npm-registry-packages"}},"2.8.0-canary.6":{"name":"@ampproject/toolbox-linter","version":"2.8.0-canary.6","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.0-canary.6","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"d3536e650c687eed0ba3c089b3f7f1b7a49e0d02","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.0-canary.6.tgz","fileCount":49,"integrity":"sha512-sqiJ/iGyoiDycA5YHm9G8P7ky0xFt85Pl3cVtiCfcgFrVPadOyiqGV4ef5PdxMHIFAMAHXYZBxGv17NaQaUakQ==","signatures":[{"sig":"MEUCIAuZ9oBqOE+LvlVqUcejeEjb6VTSvJFlTtl3iAXPG8EwAiEA67fL2fsLzCf7tg0wnjOrawiDuFA3e0dABthJeqX1xDk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99401,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgU40MCRA9TVsSAnZWagAAi0kP/RKAfbQH3kUsn/S4JYC2\nAdAjEA/639/aSI8ZezQaC5tLsDoKviUlxqW04QtdDUyxf7I4w2rNmH0eJ3V3\n6+lGFh0+FiS9hdymgjmDQfXHlpZ5CMnY2IM1VkuWwk2ym8NIr/g5xO1z74uR\niTVZm+KnxsZudzgOR+nMYzb44FiKZAU6rCJGNUFq+7yRJus1SD8dqCdPsLMv\nj2uL21Es6dvf2jUEWjO3rjw3H5bjq6Jy80mPR8kZYrq30eIqUU0Mmg1AyCoB\nPKZ/iYrhqvMwvkYnsQHZLoBLaK4wgm1iM4BEYmGUSAXZHvLVQRoKcdGXvEBO\nzlqmks77Rn6z+C8aw1t2jebrFqwf2gALtlsbnDzjryg52ndOAvADuH2itzCG\n1F58XEpUZDLOmBqKegITM/6Onrt9026wYL0N4YslVSK8eMgWSjDPdD3dn3Zh\nECJ28sMIZDZe7s4PCElqVBsmvBuAy00FQBmJ3SiSvhaozlVBL6PlisEMiW+e\n/wgHtJ3NgPskXyUZZIsMM+i5Iw5e56DQ9PlKW6ckTrFUyFJSl2WrOOBcOsQ0\nc3WAaUa9ayVGeNo9MdmhTGhiA8KObUpY7RoxKn7SMYE7odaasan4CdUHSufl\n8K4+GYmBxLaP3WCc2ICYOjZrW2XkQ79mzQdpJXBX0WpehKz5qjU9BSqkAE/7\nTOc8\r\n=GveC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"69468eb65804e741db4bfbd129c7c4dbfb4b7561","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.1.0","cross-fetch":"3.0.6","probe-image-size":"7.0.0","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0-canary.6","@ampproject/toolbox-optimizer":"^2.8.0-canary.6","@ampproject/toolbox-cache-list":"^2.8.0-canary.0","@ampproject/toolbox-validator-rules":"^2.8.0-canary.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.0-canary.6_1616088332465_0.09183837365253056","host":"s3://npm-registry-packages"}},"2.8.0-canary.9":{"name":"@ampproject/toolbox-linter","version":"2.8.0-canary.9","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.0-canary.9","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"2ef06d22591385bc6dcb86f49ee5b97d8bd19d45","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.0-canary.9.tgz","fileCount":49,"integrity":"sha512-qrQB7q4yWgq50HsYQqi+2sFntmkGvp1k0Q4Hl2Wf/hFDY4Q8FBOwMOKh6PY/vCum1vuzbfFWGDg2K4DJh+o57g==","signatures":[{"sig":"MEUCIQDDqCQfT1PcjANgCMbgS8TihVneXD7cz63OQFf+X8cyHAIgQquE5XRvrvxz9RhGDS0KehGjUmy0FEs+ztk4kNDVa9Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99401,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWLFhCRA9TVsSAnZWagAAeBsP/3F6faRGRZJ3QVlSK1Xt\nKJegCBkqwg7Fs5DnmJdJeiYRSO9wy0u/puHliroxusu4PXHYu/829WAY0Afn\ntCfC7G1fyPRHDCe2om6unh6AIx1QtoAgRj7n0IDuSOFpCfskxgojPUF9SyBR\ngGXJ+EvqSMXYZ8ZXyDoDoVGIXMihOFZAYgXR3mVk7iQQmsnkQfpsCZgKTTd3\nvIenS3Qi3mfzcvrRp4detW1iBAbWs6ufgFnkQSKcaSc6QXpFdrbbeuV91Gfs\nN8wwqcoXiTHF34/KoIF3jDSDwHoT5NT1W+qrmUDgChbHB06p+38GF2KihW5i\nkdbtJhuPzyIYeyCf50ZA6e7BTTGM4DXV57uRfDOzFVVDoo0xKf6Q6zj8Nq0a\n2F2rU2ci7cLaAIZnUEg5/yT5AkeB6vET9vjdkeqNW6e2AIQgT75DZ9fStaU7\ngy5VPjqa9gYU04kONITX0rZR690Bty+WeHuUoaHpzlSYTSPjJAbG50n1K85t\n55nP5sKWvro6jINZs2cXQ08A9J8f69fWS4XxGH5TTFmtoNnSYSpEyIWCDeWo\nNAKT7Kx+KSuauw9qlJg3uxJYNHcBhv4ghuHx8y6vKVrT9QB6LgaUNfGiC4bV\n5C3cq67FG/W66qWVHuUncEiJxTcQYMevBJboQdEqKzIDySRlJ/qRLFTp25aZ\nmGd3\r\n=XC+j\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"0974deb66a4bf37062208de3f6dbeea1ba08fa36","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0-canary.6","@ampproject/toolbox-optimizer":"^2.8.0-canary.9","@ampproject/toolbox-cache-list":"^2.8.0-canary.9","@ampproject/toolbox-validator-rules":"^2.8.0-canary.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.0-canary.9_1616425313369_0.9765447673278609","host":"s3://npm-registry-packages"}},"2.8.0-canary.15":{"name":"@ampproject/toolbox-linter","version":"2.8.0-canary.15","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.0-canary.15","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"c27b4f1e5b261f769b2f656b48c0f4a88c8dc8ba","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.0-canary.15.tgz","fileCount":49,"integrity":"sha512-B4Qv/tJlBjH3n2uX166HK82j4HHKb9/Y81xvwSIl8hIcmsRLocJ5qcPxMqQmkQ2/hVswgO5w6x4XRy8FSNjh7Q==","signatures":[{"sig":"MEYCIQC/5Rdzn1nZGRo239VxpNC3NYvVKOiKzkUfgTpjucmRrQIhALksfh/C+RWzGK/Vw3zjdUkzH4Ib6qjF/xs6US1HUYfJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99404,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgY4uLCRA9TVsSAnZWagAAvsYP/3pVOBq5054yNLyRQxkA\nTTVgozjYZQLRNkELXn2viSNqiPFtya9GL3UciT4++rzdJJP6dCYqDHE1olu8\nvrtjfUrTSukyc46puvm7LYlC5mw8HhmfjZBgooH2K47sU4+7IoylpkkEtBZN\nqo/hRB++bj8p6PamTip6oC5HhMbEwjABK0xOFWr37e0mrYtf2IKTYbQdyTaI\nZSu81R12KMoOwl8YHt0C7QdkdFAZ2esC6/aFX9UjR1FPruslM5fSudKtNoGc\nyK1UX6+OmtluGrRDbbxXkecLfNx+Fv03RqXMzWvhpQCNNEoEN44hlrcYguVs\nIxM12q2f+V77R1ifxW+hvX1k9wu7jevHFDtjHwCazKknAVKwXde3/aswt/76\nod5OpOmIX3DCoWfC5Ohr4lQYFZcuoNfG14dO1kjRiG7qztPW5MJcMEbQY672\n6KOgb6ZcQy96fqhR9DgndH1kO8anMqa0UQOK5ptLkCybGaUsKn+vmVs9PXFy\neiM19WI8y5mH4+rkSr9TqmwNsV3XTJlFd3DHl4q7li0TEWlux5HykSNZwT1d\nJLeehDfCP618pZtX9baKl4Bx7jbifDvuea3vO/5NZr83vGkxh/V4upGjIdS7\nhW5SCwYdjNxVpXdvJW93ANWbyv3fbGPs8W6G9zwyUmCKLvERl1F++HG/VQpP\nsFN3\r\n=pVO2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"082fd3256f3664fb016b47d2d1b965d47ebb3f53","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0-canary.6","@ampproject/toolbox-optimizer":"^2.8.0-canary.15","@ampproject/toolbox-cache-list":"^2.8.0-canary.15","@ampproject/toolbox-validator-rules":"^2.8.0-canary.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.0-canary.15_1617136522534_0.5387771522985432","host":"s3://npm-registry-packages"}},"2.8.0-canary.16":{"name":"@ampproject/toolbox-linter","version":"2.8.0-canary.16","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.0-canary.16","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"d69caa3e87c1bbecd47ebebeded9b17059b06588","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.0-canary.16.tgz","fileCount":49,"integrity":"sha512-fPjUJShkCHDxdChhnD0hFzUOS81K/HDcTnKw1VO2Gc9iBExlEn2Z7Rw1phItRISXp38r8/3UGd4mbv7F8ROOGA==","signatures":[{"sig":"MEYCIQDVGE3vlwg2j/s6CNeBtw12NY3Lv2crYxcC32pqdfDjJwIhAJST5nvJI1Ve8+s20NdPkSFSuES5+gdtGAGB44bA/0/U","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99404,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgb0IsCRA9TVsSAnZWagAA08UQAJxfnWwYtBySBtcb6JiI\n6bODa6qrKPLdzCazg3BlouHQrkNY4NGN3lhmncgn5rwTfP5e6BW1hZG+4+Uo\nIUPH9Sj81cnrM9mjoZ4lGrRmIXpPzPyRz0TPblJteUZeSno9sjBZqQw1EDJA\nj1prSvG9/WmGOkHsUfPwMXJnccNxGGDS8xtv+royplDIOofQ1+G95+Ld0WJ4\nV6HE9qVe73tZjWNqQ2tb4IsGIfQfvYlryGOA85evb+ZxyuKv7MHfCGcQC5Pr\n1QSvrf0RtdHXZPkEdcVlYTyixWj5c9fiPS1vq/NOahlmB0Bciug+kbYFr6jd\nCNpXzA2GcYKP2QJiI0Yzw1B8GZuC+pb1ZKsrp/CkWdxyj3uTYFfyfDhpLWUN\nO8RY3uXugrgsd+YpGJKGcAUXaY9oYHvTfQxgWS/uDjqZaQPBlHMGUNW6ECy3\n4FphD/LRbSVhoeyNS65cK8GfVfGcWe1NFD8uioMUBJUOzBG2/b4HuSPDngKt\nWY5PThYxXzxoBQsD7BpSKCB3eAHu7+oKXIQXeRWFzBuAejzQL8fcCwHHc0Qw\n079XaJq5WN2j9PKxeo+SZHxsgMZPvMZUQtvZU5Ot4Ljuu3eVrc+9ipUiDDOn\nZTCrSZ8MkllaKmDG4I0Ht4xcmm6Euz4k4n5oaHY5me8PEPxC+ifpy/86p8SC\n1nrw\r\n=PFx8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"882c791c8c27d0dfdb947a90932913bbc8f9c129","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0-canary.6","@ampproject/toolbox-optimizer":"^2.8.0-canary.16","@ampproject/toolbox-cache-list":"^2.8.0-canary.15","@ampproject/toolbox-validator-rules":"^2.8.0-canary.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.0-canary.16_1617904172328_0.7920363910231747","host":"s3://npm-registry-packages"}},"2.8.0-canary.18":{"name":"@ampproject/toolbox-linter","version":"2.8.0-canary.18","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.0-canary.18","maintainers":[{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"ca2ee2b44bc30aae038044082335628710347ac3","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.0-canary.18.tgz","fileCount":49,"integrity":"sha512-kd7E0Vuj1Joaim0cyJuljxAWzDP8HIjfMYaYURzW8hhk8j9vGEgeS3YEFdK2WSK7eDMRrIUMC4f6lq61YEHOow==","signatures":[{"sig":"MEYCIQDJcC3fuvh+2s9l1X4chb1vba/knnBZkOVuRyAHMlz0OQIhAPhbb50KhAm1DGwfckJWet9BosqL0Wjxy7z02xF0u7GY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98818,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglaKYCRA9TVsSAnZWagAA0tUP/0Fg4aDw4cD02x9syeb8\n4iwZ0Uv3O9H9j/GQKR1XsICtESXo0BwlWhAxJwYaA6uqVNjUPh8dOnDgvF4F\n3wHfByquGoc0HTLFKPUFF0yx8aOgtrr9cdcJfQ6YblAy4PPXgm074ugSgIwb\nxV9WsXUE0oLJCc/WXChxaooQoWx+0TvQos3AqYFeNZEv4E0bNFtkTOAOjvf0\nh2+Wq6j2v/a+Dzz35FvhbbHKTWwqkaZzX/qMApILe7hvTaUIocQHVew5p/3U\nFCu2vsK7trR1xNy0mPdREpdtTii9mNt2BFAI+lIsCym45UkgZ35eYKYu0w/m\nqWOZEh7SBC4pLPPrVuC8rwamIQVPSahwNgeo5oRKgmhq93qpnUHLvO7FaXsr\n3YB14r+Ty6DnsXhTtgtblCzDaxIaLVXpTANDkbjH66PvVCmeuS+SdH8IcUKx\n3EI+Fqh1KVKV5MsDVj22xzei1fQL5+TkUkVZ0+WVr7y1RFc0+bTai0uU3wYf\nBKTlEtz053zHtxyeZB69flgiSqBvoCmOIEsxoxi/JgwyyUfFwWzPAED05pnQ\n2zZLRe1YR+/yLPRyschERR3b1nGDUgrtQgrYh8OgVPsEWAelUiuO1BQOEQOA\nPnT0lZDDX/KiPQ6PKPigN37ajTXQAlxAlPuxtGcoiA5oSLW3HiY06Yo0Yz4K\nq1fv\r\n=a4gX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"5b7f8de1e96cc2eba0c9fd1073d4ce1fe3ab5243","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0-canary.6","@ampproject/toolbox-optimizer":"^2.8.0-canary.18","@ampproject/toolbox-cache-list":"^2.8.0-canary.15","@ampproject/toolbox-validator-rules":"^2.8.0-canary.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.0-canary.18_1620419223681_0.0006121223813244647","host":"s3://npm-registry-packages"}},"2.8.0-canary.19":{"name":"@ampproject/toolbox-linter","version":"2.8.0-canary.19","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.0-canary.19","maintainers":[{"name":"esth","email":"esther@amp.dev"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"50ca8ad0cd14ed6ce141e0c6a8c63681c6dbbef6","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.0-canary.19.tgz","fileCount":49,"integrity":"sha512-cvmBRzMoQTZ+mssQK9a4YuFOAf9L6OaymYMC1cwUvJVstZ3X/VTgN4jKdJumnMwrMInPxugeLHEto63laJ9RYA==","signatures":[{"sig":"MEYCIQDE/CguZd+S0YkKwNyi6ZsGTJrDqAgtN4DdtzuMSvkxYQIhAOeDVGP+BiCS3/HUgTes4zqcj1hVzyOM+0wZppid2V6o","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98818,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgpW8TCRA9TVsSAnZWagAAEusP/jfPPAxw0upLphbqlMXQ\neioM3EbT740X0qt7hBc0ajbEadrA8uo6P3V/F7Ez3w+KukUZSNQok5SGx1ou\nUWECMXZ+qYp63jjKf15hhmAspgbx/SC3Zrvv3flk8v6k0Tnkah9jF50yCfb+\nYiqIPtJuXP/yGh9x/sgKvP2/kXKVSFEM13PSvGT9brTDBy06I+1kgSx+xdVx\n7l4e8Y2ur4uDmaC5xTdUCSKqaokXWHzAxu3cPNxgJrqDD34FsbCMQmEfYuhX\nUQfRU+ZLdI5jT2Gawb6gT29VLr8htGJQMsOtrzjlbxC78JG++k1ksLICZkAL\n1AffMfcxTSVbK5E9726i4GmaOUPgKgP5iJ+blkKGPhS1u9+Dlr58nueSFkcr\ntnTJQT86EhvXPwSaz6Gf+gQQO3iOYgbYLGgCFeFCX1EArdmdCJ6utXLm2Zx4\nT4lAHVyF5oka7rsIC2xGE+Wl9GrVsNbsVnxG8xjmgazVdusukYEk0ZZdkGpv\npnXrnhL0mqRCzfhbA9kkx8MD+N96gu9Ni18uIlaj5sYRNpxS/kp8b1BiHrm1\nlMsop7D/SBcRoRCGdsQNSGMlwfqyjnzEtY46X0Qa1C+Zv0dQxLcSQAz9DaS3\ncXHcGqed9M+kfIKoT2JXN04wywPTPUG2r4ZE0SX758ugXyNgpFJN5KLh0JfA\nNIFn\r\n=eWGU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"2c0197ab2ec605ec5046dbfe6f9840d41e38a604","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0-canary.6","@ampproject/toolbox-optimizer":"^2.8.0-canary.19","@ampproject/toolbox-cache-list":"^2.8.0-canary.15","@ampproject/toolbox-validator-rules":"^2.8.0-canary.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.0-canary.19_1621454610819_0.21877126930686197","host":"s3://npm-registry-packages"}},"2.8.0-canary.20":{"name":"@ampproject/toolbox-linter","version":"2.8.0-canary.20","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.0-canary.20","maintainers":[{"name":"esth","email":"esther@amp.dev"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"6fedd819aa5f88c2899fe5f8ff92b117cf194bad","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.0-canary.20.tgz","fileCount":49,"integrity":"sha512-URmqnzLIh3P4fvyyPQobYsU+KY3UDoIW8FQOJVi6qE8xlPkA+0ZNdIrIPzuxUGwg6+57+kkFMG46nl04vioyDw==","signatures":[{"sig":"MEUCIBeFjDJcPK2+30Se1A/aOMWY8+EMVH3n58maxDhmXG5ZAiEA0JW+303Xlzif2UGi5gshryX96m3i9MLFOS6bzw8XBDA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98818,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgpmgtCRA9TVsSAnZWagAAF3gP/A4Mmhr/wpnuD7xVxuVd\n8FXkKJ4gPkHm7v+wAyEXYa9lvKchhUNH61Q9yAZU4d7WSqvnq/mz06zwf+HR\nPTLERjm2vXRnxKjqGAUrCcuX+EOfyt1F6D9eObMDLSmlrYybgmmOFtSNf4Ul\nTuiIraqCRL/JrgKFeJiAwiwBiwneIA6bw3KvEUxOnaCdsuNQq6r7Jwbh5ZUO\nKpgm6j0p6yoPOmjzuI4NxV/F1cf+kopYikN7P60HfXVrgvTxLzmNUWlDPWuq\n536Wsx5qmH0270Tu/Xj2NykKkJl3NOhRyBlywHVKbrVFyxxLe8E6by1wSGct\ncbQQ5lmCLq68sh28GEnxayWTnIxBwYyqn+h2fp5A3wKemgT5ifnI5J4uMekY\nn8sYAIRc9nQAtem0sxLZ3GHLfRy8+bIrM8WN2bGexUw34V5snVq2Bqb7ebNp\nsI4+6xvq6qCvTEQH2t11xSlolSJKUZSVxKig2tN3LzwA11ChIi7FiDsZc6x1\nvV7GylEY1CUm61rfo00raSrwwWXAAavR2smycqH+EWs1UMZawS5gZTRewkli\n6rs90/TeivJb11ewcR66tU9YoelpgyRigJKh6DRoBjvt2sbNNSUqbrlxujsw\ngLOOxSmLDgLAMRXmEuairXTyYYYzGAnijSZ9FjxXef3fVohN86jD9IOv+pRY\ncFKl\r\n=CYGH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"d83473087587b0ea71588bf89ab767b45ad09d09","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0-canary.6","@ampproject/toolbox-optimizer":"^2.8.0-canary.20","@ampproject/toolbox-cache-list":"^2.8.0-canary.15","@ampproject/toolbox-validator-rules":"^2.8.0-canary.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.0-canary.20_1621518381395_0.4682516044664524","host":"s3://npm-registry-packages"}},"2.8.0-canary.21":{"name":"@ampproject/toolbox-linter","version":"2.8.0-canary.21","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.0-canary.21","maintainers":[{"name":"esth","email":"esther@amp.dev"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"38e2905d473fce9cea22e587e1689d04600dcbf9","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.0-canary.21.tgz","fileCount":49,"integrity":"sha512-8hiLAKyyoao2U5s1pNo5TAB6yEZUibGS8G7b8rUn9PqfkaDT7iR1YP982v5EuBzymojn/rsAGt0Ic53bTogDyw==","signatures":[{"sig":"MEQCIGfNP5btNB4p+UcDIx2isaStTDKy2NLB8g+vc6AxVWlxAiBEr4JhYzgBTfOybtMX81KBz8BaGh4DAHHWlFhL3Kd6+g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98818,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtM6zCRA9TVsSAnZWagAAsqUP/3fX4ebWG3RXx7AwTVUc\n4EVicTIacBej8S7QcbXkPVz0R+L9KNnGdufDZ4J24FDWVyGUM7PyHHMI85CX\nHIXK03xQbhJi6p+naKrcHUShsqqZ+PO9ZGJW/L0+8GdYeuqcRAM6vattQuZd\nn3e4gWjvYPQeNBgbOcqOF2BkMvZ0RTkCRtQVYF8KwcCwp6sxpgti6oHgCJCW\nFdLPChWIfY7KXln3d+7KIpuStENCzYDMLZ6jQ+BaLtE0N5dBQGPzeQXhk7dB\ne73SdzpMm5MD/tpE/CyuG7eEv0mqD/KFcDd/BMcDotT5uYDOZd6pELppuUWJ\nFZytsptWQ0kQBK4BP3rmOqJMKC+Plepoud1vRV0cNrwMcRrW6mDTadiT2qM2\nD4MXdQ5OhAI4BMstlU+32o6C04ed6yKwDW1Y7kmI6j+5LKf5TZ6W9WQzMOpx\npAZEoPr3tGUtwtBZZtAy2CR4Yj5vhjQQRirxVB6ZNuNn8VhDWFaK9kBBbsEg\nKEHqzZPsHz9ih5M8/jtuNj7xF8NPI11dK/inDSo4RoFvLIvfMp2IGFb/QtFW\nF23TUWWTLGZXtmiXigRhn45cKk+eZLzYe4EM1bUMOoyrzIiyEje8CJrDz45b\nzB6QAZc83wQEWAgm8hBj86MkmsURPVWio24wxkegn7sO2n17O0oeQshUN4lr\nYRNU\r\n=P9ny\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"c85dd8829798b64e39aea67c98bbc8470dacb18f","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0-canary.6","@ampproject/toolbox-optimizer":"^2.8.0-canary.21","@ampproject/toolbox-cache-list":"^2.8.0-canary.15","@ampproject/toolbox-validator-rules":"^2.8.0-canary.9"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.0-canary.21_1622462131025_0.6531421803253266","host":"s3://npm-registry-packages"}},"2.8.0":{"name":"@ampproject/toolbox-linter","version":"2.8.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.0","maintainers":[{"name":"esth","email":"esther@amp.dev"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"4ed3792cfb714b7821e78ae657e2c30e4143ac5c","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.0.tgz","fileCount":49,"integrity":"sha512-jrUgJmWjoocFlf4J44GtYbMY8V2E9/dyj+PJK4bUix5V6vS2aw0jA9fQ8LAf5K32g1t5h1CwRj00q3tTKYGueg==","signatures":[{"sig":"MEUCIQDAqYCddlw7ZDaq7tFsPkKkaEpf0fuoIoy4u0eWwvgRPwIgSIMf7vljWMoi+zBUyLisAiRhw7TksFRqxwxTK+tMrSo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtPRNCRA9TVsSAnZWagAAWFwP/3xWlHoWYeFNkKgvnKDb\nL8PipMtvRaYnrPhq2/kKmno83jdEdzUzI4LwZahmL7WHVdFdte/YxkNsVNu/\nedsirLIlhROrdcWF0Uw1l63EUBOjf0Pycu3tTdqWLEjWOCZniaZeMnzhUC0v\nslByHF698YqjRdCNn56/XHxN2ByRQUSMrC+kSvIgO7UK58uTBYhYpaLh5R3J\nx5YjmM8CtclNXcB9OTRuuSdfEQvU9miNVLT60LiaUz7lULbMe/Zgyh1p+nX3\n3axWK7PyjmeLNg9WsTZ7zHKCJkDD0I/OC5PysxCvwRViTV0XVS4p3ifj1VBA\nuKep8tB3GihhuMt3RqZX7DwUqvg2Cv1C2P/v13x8FGr2YF4KjdsTeTYZt5nX\n9MkrO4rzYim0qT2ZgyvFbOfN+lczem9WxodbCsoGifsSOklumFQk8iQezVpF\nBOO3Y30vvivYGjP8+weiNf8q0KFKUTOVgy+2smR7huhaYFKc5YNO34HdHjxE\nShwp4IloytMT535olWL+UhD+QLeEyV5uswB5eZMyO9eTXzDIsc3d1BgfVDUD\n+UXJszoB8mkJxfe1j69gBdMrk0CoTrrxfMrELP9O5e2EMUh/EWbWdlR+DVkJ\npUZZi6xooZXu0X/6EwSSWJwYrL0c5cPjlAR94xpUwbpleTaaRPYd7NJcVbMG\nBwiy\r\n=qm3B\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"6103eb57765445355421826791361ac9ed9cf4d8","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0","@ampproject/toolbox-optimizer":"^2.8.0","@ampproject/toolbox-cache-list":"^2.8.0","@ampproject/toolbox-validator-rules":"^2.8.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.0_1622471756648_0.8149962347034372","host":"s3://npm-registry-packages"}},"2.8.1-canary.0":{"name":"@ampproject/toolbox-linter","version":"2.8.1-canary.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.1-canary.0","maintainers":[{"name":"esth","email":"esther@amp.dev"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"9351c300018438e47e0eb2dc6ae2df7b41b236ea","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.1-canary.0.tgz","fileCount":49,"integrity":"sha512-EfYAtvrGTFytn8tmslIDbgC2LfdOnJTnXrB9v+zV+9j/1JPq8d2MlxzqD+skWw8lhqNGTY15rIxVR5PycbYf6Q==","signatures":[{"sig":"MEUCIQCQDR0UJSjnlbQ1EezQGdOcTGhKzjEzP10ZSwNG8Uxa5AIgIlOLtX9lY2XI2aW2aPFEPzoxy5fN6iRgtmOam1cp8bc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgte2RCRA9TVsSAnZWagAAyPMP/124kVALvLVLAP8Mfmyf\n4h23smZDBMKmzvtz/7WFW5605+RMEAZFvtOc2/mhFU+wJwsqH08Fl9VuQuKm\nMW0qz6qiijj6ijB3RBe7qILfZHLchHZ8BIV88EyM0qxhAupsO3sNg/k+7Oki\n/QRE+sCxtWjkzhLdoHTlAiI274UZJuM76GIMeAi3OJqZLtl7bf51IXnzM8cw\nWR78s4sDj4m6v9J8Soa5OezonCqoqjmj24KOYsKc5WRKbadtUeNj4n2XlUVZ\nRdj3kCY5f1zmzM+I1SUGaqdZ5wZEouFWb6RADOPCB27fR2qmIfNYbMai18Bj\n1yV3ejxy4G1TcB57gsJ9CDaLzy7ZxN32D/yjZh+8nEtB5zItnwnVieUERviK\nCPgIJbAOOSATaqxujNOTwceH6vFFSWku2e5Kk4T0bl+yHCyBmbSRtms1WWQc\nXiwqcuj6cLWghR3+O7PB6R5DseCM3OfDZCv9snZBatGTbkGFfZzLRgeyL5S9\nSEziKCAaLooNGLT7/xy7JCncUNtdUDcQdUZWkChstEqCTy6FLKtpt56Y3YWE\nb3I+RKs+FmGCVrcdE5BmStPnmUyHmGBVTInau2azZU3KGOv0VmhdnoGUQpIJ\npSoSnZtj9n704EsaIb/P6Tj2Y97iIFdGPNCZdPbNo/XgHK11uGgjQIr+HD/L\nQIeq\r\n=kW16\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"5d38b310f5c3c467220b03e3217ee8dc6f5e37d9","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0","@ampproject/toolbox-optimizer":"2.8.1-canary.0","@ampproject/toolbox-cache-list":"^2.8.0","@ampproject/toolbox-validator-rules":"^2.8.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.1-canary.0_1622535568701_0.38114980915163765","host":"s3://npm-registry-packages"}},"2.8.1-canary.1":{"name":"@ampproject/toolbox-linter","version":"2.8.1-canary.1","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.1-canary.1","maintainers":[{"name":"esth","email":"esther@amp.dev"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"c513c086d1203268e2a84576a845cf66cb917d08","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.1-canary.1.tgz","fileCount":49,"integrity":"sha512-Zuc9gjW/7rHEqK1iy54iI45EQDXpVnin5HIwYwfjYOSwwubxQ/xIqFYfZHNmbWdnIV1bCjgxQpZjO8qXpqDYDQ==","signatures":[{"sig":"MEYCIQC7BMUUoqML9lqcq2jtOCmsgyPxu76APQg5bjD0/EylSQIhAKaTYHDCPCtQxpqJy+eIL/EEA0PFVBCKwdedUYv9n7Zo","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgv2bzCRA9TVsSAnZWagAArlIP+gOlwjsYkhlAdP5YCZmm\nDMQTnSqdpMOGuNQDqzxb4TGRkZK2DW5drI0Keb3kSIDO/+KQkDIcgpsVNpzI\n7zZQ2Eb+aFD2ivKvGMNqj9ojpisUn4rVTJgyraD3X4URkcxY51y4YTJbUXxU\nP3RRkDM2BTEnC2l9Puqa1EftqQjNGDX2m1XKFVfndQU4m7HV0y7UFurj5jMT\ngcGKcrqxwdip537yzskqhDkLWAu8r62zRWKnLLF61X8fNhpenpwNSFxrVSnf\n/feERnRYlgNvrS/MCm4uGi0/MpqF6SrmMssNh5CpcoI+GUpGJCSGneZspEq1\n+/ntfj8/soQ0cQofaaMDLnYgPiWSoghj2DtvujXpe4xVW/h6ZMU6zL17g5nQ\naS7fJCI1QrO7dPAIz8qMyrcmSIuujjh0AA6Jm3U60BgfdIJg+Io+R+X6Q5V9\nMdFNbDOuz7Jqyc9pNqqUcnM3I9gJuTsHBk7/z7RojIXxQ9chFqtLlofN+tgB\nV+Njas/WL+3GZXoy9fpR6ZkwzZmzb3fSyIAl9RVHuc980MsM13dlYmobCBMd\n4upqovt/GQVX1mPU69YiC2+f1Oje5IH7tj0EFOjm1eBgmaUR+on/RZH/6amm\ng2ZXb3psSq/puvz6LQrYcW0dbMl7AtUiYr8Ju/+vayC7M1SaxChvLQReoW45\nD1Bm\r\n=wonf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"6031314b0367d685f9b8c0769937bfb9b978b12c","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0","@ampproject/toolbox-optimizer":"2.8.1-canary.1","@ampproject/toolbox-cache-list":"^2.8.0","@ampproject/toolbox-validator-rules":"^2.8.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.1-canary.1_1623156467009_0.6486641381215337","host":"s3://npm-registry-packages"}},"2.8.1":{"name":"@ampproject/toolbox-linter","version":"2.8.1","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.1","maintainers":[{"name":"esth","email":"esther@amp.dev"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"1455b2e66b2535ddfbff55ef9d5ed30ce1323a50","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.1.tgz","fileCount":49,"integrity":"sha512-uLPX8LAB81vUiWMx1ZEF7XB1wkK6ipcKMvSsilFZP/6AD+zy8HmIakRyws5QuMxqp/trDQnHCI/xLTwROWD92Q==","signatures":[{"sig":"MEUCIQClkxG9HOf5RMvbNirmyjWSW+wu7VCOQfCxRyW/4bID6AIgIRimGF0F4n7FVRw+YjlRbartWkZbgKVRAIpPDZChdwA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwhFeCRA9TVsSAnZWagAASgIP/2J+fcUkajJN38cCKKam\n9uF4Y84lf28WwnOr1nFXHPoziHm35NjhjV8beMw9U03YBp3ukIDdiEzlbZUR\n8TDjq/+2gNDGLZkC6drCZ9kmVra6tYcYDVXjouSnZVRzEeqE53W7X35a82d8\nPRmLkn7slneXc8nJcKdXvg4PrZ9h9YIfAJXcOPBRW3v/90Ao1MjHc9aQkaod\nzcr7zkGCMEsIxR6YVpKjMQqQW9i7AP66Kx+eJZALLt9gYTbwnV4b+eRxB1R7\nRsazJyoiz7pZMBkRnUvWF0vVpN0tQrQVQVt6gvNRb1wsdEAcpduJKk/pUTjV\nvafdN8ODwzaTDrGuFXQb3tl1HIkXJeN7pLaJRKD+Yrx4HlOmydqX1czfBjy5\nHZ9Nq0m+at3IY2zLaY0QDTqWoBUUdwiQ9MArIscqM5WrN60Z9rJ8VK41XcRd\n3IjTMph6/xeGWoahdt0KEOB6LHbFV6cUWgfp1OjTb2j2UVqYL2lIRVIdMwm+\nFZvQ0WkSsemNb74TszfSUGoaQWn9qeae2Ba1ajdRhFGiUc8nV3cKI3tS9Em9\nKdVpIAimyulg4BWC8XsY5lyVYCJecLEoCmnLi+6kU8TSg8K/dvvx73E+xiwW\nwvdJSwMGof0omQOQ2W6hLzTBe5T5Hgwoq6ClYTwnNdn8WMbp44eQZwykaIKF\n5uNY\r\n=q3JI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"f2c2de8e3699ef107aed1d7a5320ee340495d66e","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0","@ampproject/toolbox-optimizer":"2.8.1","@ampproject/toolbox-cache-list":"^2.8.0","@ampproject/toolbox-validator-rules":"^2.8.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.1_1623331166091_0.6378241547495043","host":"s3://npm-registry-packages"}},"2.8.2":{"name":"@ampproject/toolbox-linter","version":"2.8.2","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.2","maintainers":[{"name":"esth","email":"esther@amp.dev"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"7f6a7a6211354731c473752ca40fabc58a8499c1","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.2.tgz","fileCount":49,"integrity":"sha512-t/arhWAV05MrchnGZsKiV2s5HibN6pp9VorBWRDZW36RJ7yQIyanRpssbO7t6yovw0fKO70lcBzKKiOYIFDjqQ==","signatures":[{"sig":"MEUCIQCYHxAuu2cj8srDTcdGQxAfQtsv3akLkv/1WfWAY3H4fwIgMRrND3cUmcvcg48B+YZO3MblYcvOdeup1ZvbTOMmE58=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3zL2CRA9TVsSAnZWagAA244P/0zhkUAkBXMNJ0W2KtzM\nlpNBV1BK+ludtlYcUPHw7DI9+uC72P8IFkDEA2wO0cTU0VUF2xp+EV7vS4Ts\n4S0sqivitb2Q3H0Cegj8S67tv4j8F3q1u4aBjNWz+tcpAnFwlO8NCwNOZe13\nmxGcwXTL+m+fLs3Z4CpjN50bm7AWTOue+xin6YPu7nzHSTBTV0IMNyu7XcLK\nCwAu/42jZVgp27/AEtPqoLGuZyEuXhbsG+XjG2UQDzxwkjQNqh+wHcztUksJ\n1X2Rql1WDknBZOEbBrL0taOZAfHKHLbUJtms2WjJ1lRXTmSWWqA5ssFU/vet\nEJ7Mr1sw0gqdEJ7rfdkrdIYEEL0dDwy/6AvXQ451Ofg91LbEV8wI+dQCwtnO\nHY2fI+vunOKSOYHz2JuK5LLfkBnu4BOhuHj0MA7pfAhKJELF3Y7BM6m4BdeX\nSkRmnRruWZaeVyWbXrDHjNspjkIMM9Uh9DJG0nxAqNSpyZ7t7oQejvbG8wF/\nC6yCFvwBRliFDPbl7bNBgMtJbJUvfMzsHFuSgKSzRkGHjgDku/bceD99r10e\nQJNoLND3ia1Ax52iFt5RT1qRe3O4B6QjF3YhEQwC1LQHr0xOFWOfDAyN1kpS\nca/U2bxdv+q6+2cgt3sfgU5rmc7mQjeYVw3opjG3GhqmvstD0uKSVLvDLL+5\nm1Ux\r\n=BbcY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"c71c9ad1180b982c1eb00c759b689a58ae5e7bc6","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v14.15.4+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.15.4","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0","@ampproject/toolbox-optimizer":"2.8.2","@ampproject/toolbox-cache-list":"^2.8.0","@ampproject/toolbox-validator-rules":"^2.8.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.2_1625240310267_0.19151963496004476","host":"s3://npm-registry-packages"}},"2.8.3":{"name":"@ampproject/toolbox-linter","version":"2.8.3","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.3","maintainers":[{"name":"esth","email":"esther@amp.dev"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"ddc587ed0fcc684d0155021ad6af63b089672432","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.3.tgz","fileCount":49,"integrity":"sha512-sZakofseja+3XG7+7EBk+lOSo2JUPNMk5jPej8yF9S3dj3x5lJ4uMZMW5zvmqN1coNZzrzQ6QhGviRw19XJV7A==","signatures":[{"sig":"MEUCIQC2+GlWGFwui4XuNFjbllpwcmNkcHiFZ1MdjT/EFrUaGAIgYjPR4yklwoldWniCEUK5vnyFjwpM+QrngGaeaEB8NmQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg7Ah7CRA9TVsSAnZWagAAGtYQAIydgy9/yAeMkccc/Kaw\niK5jutNTXC8ufg2x0r3SmhQWeyTXM0joN0V6aJtAdCz7PchhzG1Mt+WXzgM1\nSx9bUYXyieZyUKwAvlN5nzY56KCFa9rf2CiiXaVt7q6CU2AvnNmxbMjL+Udq\nvYdsCZKPjNYuFbJxoFq548S4xa4KQGCnzjuRe4w/FUiporOYpg/CnSScKuRz\nLbwty4FsifY2rGgwrbmsW7XVnu8I06EqlhCWofxff5fJUeQGrW4q1YBXAlL2\nsEtrW4YXlMMVyk19cCkwHf4EtmvBfk7RnpKfVEWXnfR/O3Pl53RoomS40DNb\nkq+5LLWiC2jNWIEVBJVpMeiRB6tQPURivXYC02T9w5DkWJNEbR2umgYaFD1C\nN2mJtBVwJa5MDkdsFBsaeh3/4jywYKroAXvhsit2L5osF7E8vCqiUzdACaYN\nbOnpKikwrTsOod6sgD7/xPWD9oVlGulcX7txdSYQ5biIXKykk9JsbgSmO44t\nRCYCcianSsM4TyBYKdVSQ6Gr+IlG62jcDjRHeax+db9fuq9Gx8rwEbGHgTi1\n441Jqgj2brhW7edNIMevI5cRPx9rNzer+tkT6IHhrFq4d1JBsU9D1jJhnZES\nsiz/NyGhUY/Z3WmQ3+h0rqhFvFtLAgA5NVIu9i1RnmNEFOAmGcGydfJSAlmy\n900l\r\n=1P9m\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"bad2f34fdab3e00d3310f2a86fd5a1ca86caf465","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v14.17.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.17.3","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0","@ampproject/toolbox-optimizer":"2.8.3","@ampproject/toolbox-cache-list":"^2.8.0","@ampproject/toolbox-validator-rules":"^2.8.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.3_1626081402852_0.6206119157769805","host":"s3://npm-registry-packages"}},"2.8.4":{"name":"@ampproject/toolbox-linter","version":"2.8.4","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.4","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"esth","email":"esther@amp.dev"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"078cc70c9d3fdcf0591a3f523e2ebe95dd1ce316","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.4.tgz","fileCount":49,"integrity":"sha512-9jbg5WjmtKnbzKjHf2HigBLqs5890ZkxNMcDx4sNzVAqa7TUFioSzmEaTPEA8rhXxUZlpuQDEr+sL//kt7opZw==","signatures":[{"sig":"MEUCIQCB1GBE69m1/an5aBT/xdkOXN9juxzanThzdSB2VV8vNAIgLfD/Q45qmmrSoHpIOol+DHx19wxM5m31+ToYvxCc+Ts=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhlR9BCRA9TVsSAnZWagAAaE0P/RzAH5kMAkxXk8wF1o2l\nQaTDUujvh1fN9sXe1w7OfK32nV4A3jTv90q+WkT0/lXdoS+YyhH5Qt385MWa\nPrqG4uv6423OSKosPJOwKQ92L4Oa5HR6z4FPtjBotPG8gWzO9APSFa6MVzgr\nJK6czQBKpqHCzSomSo4WioXcL26GY9ymLyobhVZ6yNg6AZ4f2jJMCSCTOHq1\nwlXERAlZaloWJNMqpihOm5H4wUUFlyYixfqP0ef88C2+kI6lwCp7f+aTSl/D\naGddXdVOIlQDRAAh9YnM5ZyKj6PBhxQfPV3Pfco5qL8ygwFXB1+wTJsfY9Z/\n0pQAs8bEN0XMa7Nz3Y/ABbSbDBxO9almiILKdkz/7KW9i4qHen68d5YwKkGt\nGHkcFCPG7g3O7iZDQaqyRQVc6DnsA5QgDxnobFOcpHWkAFWH798Q2pn6VarN\nPF9k18iY1r97snIMgY0VRz1aGYT5FPJ0Xx0zMyE0VMmFhZZQ0Y9Cgha3HKwr\nc9N2bSeZK5oXq7AJ+TO2+ZRp6tt4JHTIY4o47ldtkSuqoC0wfFl7IyzJ0VTK\nuPNRDkRlZd4KdOJuVd+AaT1pXm22Rq4ut6vd8W36vQAf5oEvoyxOQjNr+tU0\nBx7kKoiTbcUhX2WLUq7DQ1JCwqua2sxqRqq1wEpqNpSvqHoMN5d/gzET6krp\nNLuH\r\n=4abE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"5dfab2df0c550698f03d7f45634cf4079f02c66e","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v14.17.3+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"14.17.3","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0","@ampproject/toolbox-optimizer":"2.8.4","@ampproject/toolbox-cache-list":"^2.8.0","@ampproject/toolbox-validator-rules":"^2.8.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.4_1637162817012_0.9758324756952224","host":"s3://npm-registry-packages"}},"3.0.0-canary.2":{"name":"@ampproject/toolbox-linter","version":"3.0.0-canary.2","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@3.0.0-canary.2","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"esth","email":"esther@amp.dev"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"e4211627eeee94de957192c5784eb813224bff66","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-3.0.0-canary.2.tgz","fileCount":49,"integrity":"sha512-8hnScBs5HmVD65cKLqwdVuz4mesRSCrVKKYDIDhr7vo4vmznPBF/e7AJmqN1cyKvZURDxmkyq4hfQ4E7NUErjg==","signatures":[{"sig":"MEQCIHy4fvRvolkveJ0ywc0x2v2yloOJ4kcybLldgUuF3mCwAiBdEV8pzok4KrymvMaQuTguyi0ROUjh10qfQJVx2MJkVQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3eqgCRA9TVsSAnZWagAA4ukQAKPSAk5PKwpJ1gLQ0RQf\nnWQNHWgJPHguPZDEhh/uSiYPg10UeEkJJ5PLOnB96jR+RTwKD+ZOTemX0qW0\n1IpvamV3FF8ca8CtVoZ6dVYqmaISA7SGcPmirgZhHMG39aqw1dAoAPed78FR\nVHXWoVerVHqoCqvDg5+GsqnA/GWeJuoKYRTSHGhOwkyFlJIRtjjgV/+CFrHE\nipdwAVTDzgy1s6rArGdaa43mC6x/d7qIXlnccE4QaYypNG7lPxrmsT18m228\nYiZZ7AZiw7Oje1zm9+78YKrAdJzASxuO2tEqhasPvTESBz2mSrjnjIrpPp0+\nK1Dpb6u8E5W4FQqmJqCLL0fDQBr3SonpIfeDJtQ1NtB+mABj5K14tsXyRmr5\ndJgkICszCtwJSO3oWam0yG6lY0XpNY3b5xxSdGnXv+bcEjvr9mt8bUsScJGu\njm9FRTBPZYwTchO4VJAdsApUb6GPGNDupqKjXeVmpIHstAGtqW5Gep4Whlva\nBUymZexClaeGV1npKcY8ZEFGSApCHj9MJtqZVUH/nOjPl2TF5qfIrjQQiqUQ\nDL+VKUZNVprcJutEka9Fmy9gtTqzbYasFdN9BeXIvp+BLNZem17f5F/58BD0\nUQG3THrP94J1n01Xbgzd6b0Snd/Z0tuy6Dwhp38Dz0FVi8/zPO2VX2ky+HKq\nYg6Y\r\n=Hef/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","gitHead":"0f63a77e8081f0fb7d6b63280e2fd8701836c4f9","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"16.13.1","dependencies":{"chalk":"4.1.1","debug":"4.3.2","execa":"5.1.1","throat":"6.0.1","cheerio":"1.0.0-rc.10","postcss":"8.3.5","commander":"8.0.0","node-fetch":"2.6.1","domelementtype":"2.2.0","probe-image-size":"7.0.1","amphtml-validator":"1.0.35","postcss-safe-parser":"6.0.0","@ampproject/toolbox-cache-url":"2.8.0","@ampproject/toolbox-optimizer":"3.0.0-canary.2","@ampproject/toolbox-cache-list":"3.0.0-canary.2","@ampproject/toolbox-validator-rules":"3.0.0-canary.2"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"prettier":"2.3.2","tap-parser":"10.1.0","typescript":"4.3.5"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_3.0.0-canary.2_1641933472556_0.0797452950935098","host":"s3://npm-registry-packages"}},"2.8.5":{"name":"@ampproject/toolbox-linter","version":"2.8.5","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.5","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"esth","email":"esther@amp.dev"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"4e6c567cdeb5f006f162e9e24fb1df48cea6cd64","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.5.tgz","fileCount":49,"integrity":"sha512-bq9wGD8Fh5xouAMsF74hoQ6viO8mkDyF4YmYBppafj+k8SD7uVD+F3LKDuBn6z6k3WbuK9GDvorkNQ6Ud5d2HQ==","signatures":[{"sig":"MEUCIQC+nEHFpKJM7JsNuRawWIDyd8NzDfRVzVvKkriszTeBugIgHVmOVBecsTb1RiWfJF2RHRO3lfEyBqz7KrhRSKM22Ns=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh30WECRA9TVsSAnZWagAAkicQAIDXi1LSVeruhsKfeAeR\n0kFAv028i4TMOetuanoOginaB4YQgKsOOvAOLl4CHyAAGfVzZizJSBfpIc+T\nF/3tCiP6Gs4vW0AXYsheQx9cg6X9EPW73nJ0JxSR2JYE+9BjlbZjqpDqxct0\nfYeRGbAaA9Vl2QjToVCquOnQ/JyD+WSaUq0iqfle+Jm9pae2pAsB3s95EMCj\nsAsSwfGTd+8ZVK/6PG3KEVekaVeTlgkVYGk41IQtw0w2LLheth8OWJP2Oe0F\nKuHT4rwGKUnkBHXOX5+VBpHRzmDkcfNCMFjF5buGrD4pHVJtwP0/O4Ll+Lu2\nBI9wSVHOg3BYHIbVkuxTJ7VaW5Talfgw0jpOXZUA61a8yApW49/V2HYiy/aO\noU/x/IUIJsiLxId4n6My9c8fEglkqAhuPfmPehOpicntNaerU9qZwqW8ISr4\n5WB+RvlG2n2n6IvVxrPHEbsTbSXUHGXJO2iSANcDDTdcxYlZbJBy8RgjeJDF\nNMyUM5GrBOfn3iaWUkCN4Sf60dz7zBXXhaDLib6pFPzCBVh/BYZNmCQhIWMo\n5EFtRhfYIWTOcrecF6koNHbBOrqPXMiY9WK0bjLAFEwK5Bgj5kYsxt1h2SXl\nPiF/TnmH9/hPyvf+aRrqylRpWbHCbob1ptKZm/gczlAX+naIvKDsoeARmFqA\nz8QI\r\n=gKtZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"5be59bc968c6b5cc3cb1e6e5e6a1b19d36787170","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"16.13.1","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0","@ampproject/toolbox-optimizer":"2.8.5","@ampproject/toolbox-cache-list":"^2.8.0","@ampproject/toolbox-validator-rules":"^2.8.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.5_1642022276049_0.4711516611557536","host":"s3://npm-registry-packages"}},"2.8.6":{"name":"@ampproject/toolbox-linter","version":"2.8.6","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.6","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"esth","email":"esther@amp.dev"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"16e927e230d5ba4ea838e06155482c6d813cd127","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.6.tgz","fileCount":49,"integrity":"sha512-6/Fm9HpLFcwa7ujP7IvaUWWzRczCP7rQ5nmJh2oWzAAa307AIYd7FS2twQnHbAJF3T1WRxY0kdWmB6/Oiwo0Qw==","signatures":[{"sig":"MEYCIQCAxBRN1dvkEm64gEQExeAcEbt22wBdV4mPm2IfNmFueQIhAMizegQU1UYFWecB/PWIc2JsB/uII8dqBd28fUglJprO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3055CRA9TVsSAnZWagAAf10P/0n+wSsT7XhzueOESSmc\nKEhcJwDudgRfs/DbYEFG6bIwMnY03FTVQX75+RUDb0t2YlZd7MKOGBmQLHMl\ngBNPQqgA7uFEBSBG6dedOweGoS7rM3pDbn9l3KqhzDJt1o6V2X+7NCm2DKMS\nX4uyk9xNtwRqpnsU1pMDndqyCOFG8+zylFOWDek4ZjYsH0qbc5yr6leR7G4G\nACLlD+lbOEaXfUF2eWplHR+PeYDAB1lz2jMr5+deDK3Ij8IT0zIsNewDYMOX\nyIhk0jJ/6RX0RwNjrVTE68FOueNfZ+qs7BCBYeHjI/mccuHzfWV2qOdNA0y2\n2P6mjk4dqx3mzjSsO1FC/LAIy96jXOjdPbqetv4kuT7sWdV6SY3Xy4xrtdMN\nqLV5KGORr+GPqxVZUqJM1XTRhR5gK83OTtKyO/yLr3sJw/iFYAD3TUaT3npC\nSmTpi/yUmWitI20t2JJV28Pb4DZlfm1eebaCzQuDE5pdJH3CtU7Xv47C2hdX\nnfVbdP+JzsC1/flioQDt4SFirOej00Pa3UTcJyDbd2wYHYMRSFQk0wVjIwXO\nS6bwu7e+zU3CtbdsPYvVtWccTXBIPcNmRqT5ceMPkb6+fBSU835fnvvq0/2d\nEuOZeaKcjd+omQD5Oo/qMVtrdcMvu7QjKRuI5ogK03w+QkgmZs9HdaggFu+s\n9qrq\r\n=CVEc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"9e537758baa2424a96d920308df75eb24b6e3dec","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"16.13.1","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0","@ampproject/toolbox-optimizer":"^2.8.6","@ampproject/toolbox-cache-list":"^2.8.0","@ampproject/toolbox-validator-rules":"^2.8.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.6_1642024569515_0.35027326114177404","host":"s3://npm-registry-packages"}},"2.8.7":{"name":"@ampproject/toolbox-linter","version":"2.8.7","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.7","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"esth","email":"esther@amp.dev"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"be2668b8e276ad031ea8fbc5d4b470e586c94a0e","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.7.tgz","fileCount":49,"integrity":"sha512-paT4ydOVCpaPmHkGlDvAxCFjpCiq3EZFCCNATVxDBPKWaH8dkPyPHRe4Toa60nkoxt6knKrcxTJK7L8VewlEaA==","signatures":[{"sig":"MEUCIA1lwpil/aQSmDa7eEpgY8eSHL0f8PQdh71nKACPgOucAiEAuh67Dk0WQbP8k3mlZ5sdUHgG0Mt7ChYvN+w0cXtqkHk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98769,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh4aBICRA9TVsSAnZWagAAddsP/3Zt1OBcSH90QtFI3qiR\nVaT7Xp3Cqi947JKWkZPwluwKC4pWrQ1WKk9vsdUPbCv/+gnCv5ndMhFo1rjy\nuC31spZrZFC0CPpN6PhXMSe1C3Bp3mRNY9ar9Icb0B0bbOHoyp6+DnEADBnb\nXaWsVl7xgmNLX6Y3VznwYJ/yFR6crULK71I9MbzwMgLSgQ6EFKeZslmpAFKv\npU5QUswFYVvLqMDuu1j4Qy9IWBkIQ9LXQCupxkvOmBMyvvPB9p03VBPdYwI4\nMDX8F3zPrsVzm7qbqn+pUdFWP3bNF0YYWiiBqPQXIUw61OAkoXDpAZCHotJn\nvPi0LZXR4nFs4jTO26Tf0MS+zMkjxaziVi4GH93NFVKTARhMQ7iQ1Jh8vTqX\nXbtCHfd7fADXal6uB/7BfQVeamKvTS6Nfw1E+1pWg6yJQac+bk68yYXhKBLi\nIdx2w4vUvwhw0hY4hs4y3hP5hEsHRL762yFGpVcmgEbcd+oW+luuk7p2S88q\nHAVD6u1u/wfWwO/4h1byYyXF/YnOEUBcY1tfzKad6aeHq6jQMzNjF7CCvpv6\nYauqGoQ0LQdQo5pj5EaKaln9NlTTAFXPzRz62rWso39PLrOXSgIBpwwLC1KL\nocA7e3zPeMG0JclCfTH9SaGFPKM3RrKOWMVWgeE1Sqe/mHI45QCZ+bnx9Gs4\nqbvc\r\n=XHJC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"7c5297fe6a977432eac8b2f606e43abf6550aec3","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"16.13.1","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.34","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0","@ampproject/toolbox-optimizer":"2.8.7","@ampproject/toolbox-cache-list":"^2.8.0","@ampproject/toolbox-validator-rules":"^2.8.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.7_1642176584396_0.34561949848651663","host":"s3://npm-registry-packages"}},"2.8.8":{"name":"@ampproject/toolbox-linter","version":"2.8.8","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.8","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"esth","email":"esther@amp.dev"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"c635f8e220336f628eb4f086f3a0d73dcee9dbd9","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.8.tgz","fileCount":49,"integrity":"sha512-iWsG3hWyewa+zg0bzs94kCVOL95sBAbhmgKY84dK/9kEKVFha4T2nHhq1UuUswH5uO/0ue/XdwT3a3dJxg5O9g==","signatures":[{"sig":"MEUCIQC50FjjPiy53c5jMSEpSDw0V5YWtc7xVT94PR3bOdmj0QIgFoNAtVyyf9OEqZBnbamrteCrZGDk3mmfwzZ1WVMTQAg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98768,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiBpRHCRA9TVsSAnZWagAAuYAP/0IRv0v8DkwcXABxkBn8\nXqwA1ER3RPIYRZcIkbcmM0tTW1f5Mde6qJjOQmfb31ltXoWlVWCrdby45Txg\nNDyCKP1o1wo9pri5ISpe1+JueEE8xjS834b4sjyMsrnNYPuZX/Nfd8OX3aos\nILKGrxZSFqVtvbLTNNL7lD0gIg1SWUroUpXcbZtVH0pTj1MA/0kVAQe0rPjB\nD55IWeAAG4vswC5wLhQ7xp0WWLi4BItDTE0zRFpA4NC2w9sWqKb7PuxBSCkm\nRIZfwDzcFB5Je/vEYBVFTcRI4f8gxZEWRuGpVon/bkepw2ErpiOgnpYBdocl\nWtnvtVaoQ0CV4Iv9jd3EgZJbl3XcbZoOXgRXYUtmHPTkMU4ikh0Z9ajtib39\nf+FRWMlnBK9EQplruoAG2O/FVloytS48cxbbYW01vcAoKRaCBtsuolUajalR\nwA9f6y1ltXGc1eOEQVC8WqcW0jKZYm3kH+qfQITRWhH28Cif9y6ryI3G7trN\nTy7aVMnjIuHjggMEmJi8Y0edmgO1J2BjZ9hpHNfRFTLkD9Y2xBvi6xPVkayr\ne8xj6lRsIZdH1PD7UcE5CSbBcJAGeYcBeOPBQ8wOMl7dmc2TFzN9pgPhlEAi\nvZFMQqofEQdYSW3nbB5qVvXli9Vrbhb/WC3MK4v8JFFUNwCwdywsOE2oJoM0\nFZJo\r\n=U2cb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"a2f119379a740b54d19240a36197de3dc22b333d","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"16.13.1","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.35","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0","@ampproject/toolbox-optimizer":"2.8.8","@ampproject/toolbox-cache-list":"^2.8.0","@ampproject/toolbox-validator-rules":"2.8.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.8_1644598342942_0.22630765530742147","host":"s3://npm-registry-packages"}},"2.8.10":{"name":"@ampproject/toolbox-linter","version":"2.8.10","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.8.10","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"esth","email":"esther@amp.dev"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"f2c86fbb9f69d23e1e302433ad25a13fd9b984aa","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.8.10.tgz","fileCount":49,"integrity":"sha512-mVEqW+0YQHX4+NfghsFDLis6Vb3RBYcaxyxGa4tZfiGaxSMv2nXjb3MrU0ysuX0d+Fe2tLlVHZRDKm/RNoLfQQ==","signatures":[{"sig":"MEUCIQDUKI5iEtUw+CeWTUIo6Y8a8TI02hcjHXrxAs4XgWTBCAIgXhaEnghhucS5IYrkX8uSdpGZXTz6qs3AUVw6sk4JrN0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98770,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiMj4RACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmohzRAApBq87wPST2DCO4St9kjkNqaaWDQ+2qzPVzMxI9NFUunuGlDv\r\nBpLeBPGh41ulieRLyWn9eRsBPanvWnA4BsVaeA3lQm9TWbSjZdl/w2KhOkJz\r\nN/NZ7zI/7s3Fdqmfttxgt0PgUJBt2LvIduJmAXFz650U51QkeVmR5pJ8FTBd\r\nrzzyhYgKR7EWmFHW2kaLcAJvM+277ooaMrHGn900Hgk/ZiY9mPXLL0+jrXvD\r\nt3P/jnPgC8FO5Gw1L2DJYUQG/sNF2cnML9M4jo/8jLThIHP5lxKxFAU/O/Wd\r\nKXHDHWviEMp/kAQXyjbLv4RSzhIvgEVTaFxz4uD+W6K6lU0567xxBvaEQhFB\r\nD4RCZ9cc7VUOZPOqtcVisUNFmVOHKYRAHDKKQ16zJBGEWYbsDinZWb3xLiDl\r\nVb2cCatlaTik8RCLop1i/weHjRqLlB9hPyrNMaC32GGw0sJBBXOVEBFyDxFt\r\ntzmMu8ReOsgAiaG5rICp+SuATZ1YJGiiY/r8Vuq6HXQvpUaDPzIH3/jGj9wo\r\nJwScyxcBSBDqSX0mKZqcGSlSH6Ux80fLe3jlSrndBD3sXeyizdgyX1Ei9dAI\r\nAVNu+U5qJgRfKNyg44PEVI5rpB6T+9aZKf7Xgv1D4xMSWiVnKsKWZ36DLnwH\r\nAYF+jd6479zagd2pAVEPDsIO9h/qfnY3TPM=\r\n=9mdQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"0505268585abe293b688bd4de3a0101675189a3b","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/4.0.0/node@v17.5.0+arm64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"17.5.0","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"7.2.0","cross-fetch":"3.1.2","probe-image-size":"7.0.1","amphtml-validator":"1.0.35","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"^2.8.0","@ampproject/toolbox-optimizer":"2.8.10","@ampproject/toolbox-cache-list":"^2.8.0","@ampproject/toolbox-validator-rules":"2.8.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.8.10_1647459857016_0.718584010444649","host":"s3://npm-registry-packages"}},"2.9.0":{"name":"@ampproject/toolbox-linter","version":"2.9.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.9.0","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"esth","email":"esther@amp.dev"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"66203e9243ccb085c13a2b36b38b5a13b37fa05a","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.9.0.tgz","fileCount":49,"integrity":"sha512-+oUuLGHtrrOn5tazVx/54qTxFEcyZGPU9p4Haig2NBr1SEf7UHdUIhIgJYy7CNitt+ZcqhBpLrqvqYtZUAf7Ig==","signatures":[{"sig":"MEQCIF3cIEhZ5Dj2HDwzqhrRnhm/HZ4LXWo0+BTLTq2hG58JAiAZpb07m4vXGRYtI/8MLsJGveWSPoqfQpQ6IDEo3XDGnQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98905,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitNGmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmonEA//S43I+HHiLOxKc9yzgn+8aRWwzvyjacuPnL9HNw+T/cu04nDN\r\neN7grrfMItymXhVGBoTvWY+CApf2jtsutaAlMLqMCcd49J8f72ehdtpTuMz9\r\nOYUA3+4gn9m/+j4Sd1KGdophewhjMxIdzARY1D/6FdXXxqTQ6DsvHuoSZ98l\r\nfjDfdHezhDoB98ylkFxpvUS95SyHQw5ipYsVJwZ4DAcf8EYjBROTrE1+78Qq\r\nWygCMbh9xe5BAu/FHI+5G1Q11imwAxKWkHgkblhLVd67Ukp+hjGOpxGgBVlX\r\nSntPVhgPV6AlW8V0KN2GNScXr12i9F7iPLnGNcthPMHSI78XvpDF2ljueLLH\r\nRRHTwRKqShPALwwR8kvC5T4thW/I/po8CZZe4fzEekI6TLXR9WfnCmeHSgLV\r\n333yAVfl67+YykrHkWD1A1ilDJr/8Crzy29VXiaPzx28rnMz+Zfkk8e+GAyJ\r\nnaANA82QcXd1j6M8ospF47My3raxYwrD3/e6tfk8FysBUEZr/TWpOOh456CI\r\nyzUN89P34zEtSeEryUEC2+kYeokW8Ex2iwQsqoc+jO5cnVZkOEiJ2/9PB78H\r\nsMB1/NOQA53JPkuTeTaAXoP6FiZccnqFGazY+xRaa+JCDDuQCeDBxhiw4YFc\r\nTGrkm5h0OIs9Na8s1n1v3zm82ocvpoMMuzk=\r\n=rUi7\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"testTimeout":60000},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"0826825fd8c5f3abac821ebe87a318e70f33c9dd","scripts":{"build":"tsc"},"_npmUser":{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"lerna/5.1.4/node@v18.2.0+arm64 (darwin)","description":"A linter for AMP documents","directories":{},"_nodeVersion":"18.2.0","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.5","postcss":"8.2.8","commander":"9.3.0","cross-fetch":"3.1.5","probe-image-size":"7.0.1","amphtml-validator":"1.0.35","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"2.9.0","@ampproject/toolbox-optimizer":"2.9.0","@ampproject/toolbox-cache-list":"2.9.0","@ampproject/toolbox-validator-rules":"2.9.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"4.2.3"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.9.0_1656017317943_0.9057357989061905","host":"s3://npm-registry-packages"}},"2.10.0":{"name":"@ampproject/toolbox-linter","version":"2.10.0","author":{"name":"AMPHTML Team"},"license":"Apache-2.0","_id":"@ampproject/toolbox-linter@2.10.0","maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"esth","email":"esther@amp.dev"}],"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"dist":{"shasum":"5ebdc91fd53f45ed6bb312fce24c47e27908c1d1","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.10.0.tgz","fileCount":48,"integrity":"sha512-+hmZD4i+j4pByXFpfjxdxafLlRHusdTy+4qb9eadcTt7bXpq5XX3ZghUBGmGvJyLNznvKL+w+ZOrtud/4VHQgQ==","signatures":[{"sig":"MEQCIEKKHqkflONQHMe7ZIrLsvcsMOklN5Ivnl/+UzlQbiW0AiBJMfq/ixAHiKuub0lgKYhMpoSxDcjbMqXgRdUNN3go4w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":87990},"jest":{"testTimeout":60000},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"6103eb57765445355421826791361ac9ed9cf4d8","scripts":{"build":"tsc"},"_npmUser":{"name":"ampproject-admin","email":"admin@ampproject.org"},"prettier":{"quoteProps":"consistent"},"repository":{"url":"git+https://github.com/ampproject/amp-toolbox.git","type":"git","directory":"packages/linter"},"_npmVersion":"10.8.1","description":"A linter for AMP documents","directories":{},"_nodeVersion":"20.12.2","dependencies":{"chalk":"4.1.0","debug":"4.3.1","execa":"5.0.0","throat":"6.0.1","cheerio":"1.0.0-rc.12","postcss":"8.2.8","commander":"9.3.0","cross-fetch":"3.1.5","probe-image-size":"7.0.1","amphtml-validator":"1.0.35","postcss-safe-parser":"5.0.2","@ampproject/toolbox-cache-url":"2.10.0","@ampproject/toolbox-optimizer":"2.10.0","@ampproject/toolbox-cache-list":"2.10.0","@ampproject/toolbox-validator-rules":"2.10.0"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"5.4.5"},"_npmOperationalInternal":{"tmp":"tmp/toolbox-linter_2.10.0_1718320479030_0.2593403484956742","host":"s3://npm-registry-packages"}},"2.10.1":{"name":"@ampproject/toolbox-linter","version":"2.10.1","description":"A linter for AMP documents","repository":{"type":"git","url":"git+https://github.com/ampproject/amp-toolbox.git","directory":"packages/linter"},"homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","license":"Apache-2.0","author":{"name":"AMPHTML Team"},"dependencies":{"@ampproject/toolbox-cache-list":"2.10.1","@ampproject/toolbox-cache-url":"2.10.1","@ampproject/toolbox-optimizer":"2.10.1","@ampproject/toolbox-validator-rules":"2.10.1","amphtml-validator":"1.0.35","chalk":"4.1.0","cheerio":"1.0.0-rc.12","commander":"9.3.0","cross-fetch":"3.1.5","debug":"4.3.1","execa":"5.0.0","postcss":"8.2.8","postcss-safe-parser":"5.0.2","probe-image-size":"7.0.1","throat":"6.0.1"},"bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"build":"tsc"},"prettier":{"quoteProps":"consistent"},"gitHead":"6103eb57765445355421826791361ac9ed9cf4d8","devDependencies":{"prettier":"2.2.1","tap-parser":"10.1.0","typescript":"5.4.5"},"jest":{"testTimeout":60000},"_id":"@ampproject/toolbox-linter@2.10.1","_nodeVersion":"20.12.2","_npmVersion":"10.8.1","dist":{"integrity":"sha512-9etXPYlcaP3/7WCMkyd3KyPdj3XMx1S/WJ/hocXDa6WyoMyA8btfqaCVxzuTEhjtav0xjN2fXDIWtIQYT0K53w==","shasum":"0887066d88113197d8e263cd2f058cb822746eb2","tarball":"https://registry.npmjs.org/@ampproject/toolbox-linter/-/toolbox-linter-2.10.1.tgz","fileCount":48,"unpackedSize":87990,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBi7M4g+M6NBKFRO9vDCPBxLem6JI9PAKYF8w5Azht3ZAiA7zdHnJpaCmjzddOkhOaueYf8o0CO5qqPWXm4NGTWSVw=="}]},"_npmUser":{"name":"ampproject-admin","email":"admin@ampproject.org"},"directories":{},"maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"esth","email":"esther@amp.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/toolbox-linter_2.10.1_1718325440587_0.8823461418318219"},"_hasShrinkwrap":false}},"time":{"created":"2019-06-10T18:21:03.592Z","modified":"2024-06-14T00:37:21.157Z","1.0.0-beta.0":"2019-06-10T18:21:03.975Z","1.0.0-beta.1":"2019-06-20T08:56:10.367Z","1.0.0-beta.2":"2019-06-20T09:41:59.725Z","1.0.0-beta.3":"2019-06-20T09:50:23.983Z","1.0.0-beta.4":"2019-07-11T14:38:23.005Z","1.0.0-beta.5":"2019-07-15T15:36:04.855Z","1.0.0-beta.6":"2019-07-23T13:02:34.048Z","1.0.0-beta.7":"2019-07-24T13:51:34.658Z","1.0.0-beta.8":"2019-08-01T09:09:06.326Z","1.0.0-beta.9":"2019-08-01T09:16:00.548Z","1.0.0":"2019-08-06T19:59:45.534Z","1.0.1":"2019-08-06T20:11:14.630Z","1.1.0-beta.0":"2019-08-29T20:27:54.987Z","1.1.0-beta.1":"2019-09-19T19:20:42.908Z","1.1.0":"2019-10-08T14:14:19.260Z","1.1.1":"2019-10-08T14:43:25.033Z","1.1.2-alpha.0":"2019-10-09T19:55:37.349Z","1.1.2":"2019-10-15T13:28:14.870Z","2.0.0-alpha.0":"2020-01-22T14:30:29.815Z","2.0.0-alpha.4":"2020-01-28T15:26:06.773Z","2.0.0-alpha.7":"2020-02-13T21:13:38.541Z","2.0.0":"2020-02-13T21:24:47.363Z","2.0.1":"2020-03-18T11:49:22.823Z","2.1.0":"2020-04-01T08:59:54.645Z","2.2.0":"2020-04-03T08:23:43.407Z","2.3.0":"2020-04-15T09:31:45.023Z","2.3.1":"2020-05-05T19:56:01.467Z","2.4.0-alpha.0":"2020-05-06T19:49:52.774Z","2.4.0-alpha.1":"2020-05-07T11:08:06.976Z","2.4.0":"2020-05-13T20:30:39.401Z","2.5.0-alpha.0":"2020-05-19T06:36:38.597Z","2.5.0":"2020-05-29T11:48:30.480Z","2.5.1":"2020-06-09T07:30:54.560Z","2.5.2":"2020-06-11T18:44:59.608Z","2.5.4":"2020-06-22T19:52:11.446Z","2.5.6":"2020-07-07T16:57:24.121Z","2.5.12":"2020-07-15T18:39:09.253Z","2.5.14":"2020-07-24T06:50:34.736Z","2.6.0":"2020-08-10T12:44:03.626Z","2.7.0-alpha.0":"2020-08-14T19:18:48.187Z","2.7.0-alpha.1":"2020-08-19T17:52:29.109Z","2.7.0-alpha.2":"2020-08-21T16:29:11.534Z","2.7.0-alpha.3":"2020-08-25T17:56:47.212Z","2.7.0-alpha.4":"2020-10-26T09:55:05.201Z","2.7.1-alpha.0":"2020-12-01T19:14:14.054Z","2.7.1":"2020-12-02T14:55:05.921Z","2.7.2":"2020-12-15T19:51:04.721Z","2.7.3":"2020-12-17T15:12:27.727Z","2.7.4":"2020-12-23T11:50:51.788Z","2.7.5":"2021-01-18T12:11:27.841Z","2.7.6":"2021-02-01T13:00:03.654Z","2.8.0-canary.0":"2021-02-12T17:24:58.855Z","2.8.0-canary.1":"2021-02-12T17:35:10.337Z","2.8.0-canary.2":"2021-02-15T11:29:24.073Z","2.8.0-canary.3":"2021-02-15T19:12:24.509Z","2.8.0-canary.4":"2021-03-02T12:54:46.786Z","2.8.0-canary.6":"2021-03-18T17:25:32.617Z","2.8.0-canary.9":"2021-03-22T15:01:53.559Z","2.8.0-canary.15":"2021-03-30T20:35:22.756Z","2.8.0-canary.16":"2021-04-08T17:49:32.478Z","2.8.0-canary.18":"2021-05-07T20:27:03.801Z","2.8.0-canary.19":"2021-05-19T20:03:30.964Z","2.8.0-canary.20":"2021-05-20T13:46:21.506Z","2.8.0-canary.21":"2021-05-31T11:55:31.159Z","2.8.0":"2021-05-31T14:35:56.856Z","2.8.1-canary.0":"2021-06-01T08:19:28.819Z","2.8.1-canary.1":"2021-06-08T12:47:47.229Z","2.8.1":"2021-06-10T13:19:26.264Z","2.8.2":"2021-07-02T15:38:30.425Z","2.8.3":"2021-07-12T09:16:43.023Z","2.8.4":"2021-11-17T15:26:57.195Z","3.0.0-canary.2":"2022-01-11T20:37:52.770Z","2.8.5":"2022-01-12T21:17:56.197Z","2.8.6":"2022-01-12T21:56:09.658Z","2.8.7":"2022-01-14T16:09:44.598Z","2.8.8":"2022-02-11T16:52:23.101Z","2.8.10":"2022-03-16T19:44:17.225Z","2.9.0":"2022-06-23T20:48:38.091Z","2.10.0":"2024-06-13T23:14:39.203Z","2.10.1":"2024-06-14T00:37:20.742Z"},"maintainers":[{"name":"ampproject-admin","email":"admin@ampproject.org"},{"name":"kristoferbaxter","email":"kbax@me.com"},{"name":"jridgewell","email":"justin+npm@ridgewell.name"},{"name":"choumx","email":"willchou@google.com"},{"name":"amp-toolbox","email":"amp-toolbox-eng@google.com"},{"name":"fstanis","email":"filip@stanis.me"},{"name":"erwinmombay","email":"erwin.mombay@gmail.com"},{"name":"samouri","email":"jzfisgreat@gmail.com"},{"name":"caroqliu","email":"carolineliu@google.com"},{"name":"rsimha","email":"rsimha@amp.dev"},{"name":"dvoytenko","email":"dvoytenko@gmail.com"},{"name":"patrickkettner","email":"patrickkettner@gmail.com"},{"name":"alanorozco","email":"orozcoalan@gmail.com"},{"name":"kdwan","email":"kdwan@google.com"},{"name":"ampprojectbot","email":"bot@amp.dev"},{"name":"esth","email":"esther@amp.dev"}],"author":{"name":"AMPHTML Team"},"repository":{"type":"git","url":"git+https://github.com/ampproject/amp-toolbox.git","directory":"packages/linter"},"license":"Apache-2.0","homepage":"https://github.com/ampproject/amp-toolbox/tree/main/packages/linter","bugs":{"url":"https://github.com/ampproject/amp-toolbox/issues"},"readme":"# AMP Linter\n\n[![npm version](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter.svg)](https://badge.fury.io/js/%40ampproject%2Ftoolbox-linter)\n\n## Overview\n\nA [linter](<https://en.wikipedia.org/wiki/Lint_(software)>) for AMP documents:\nreports errors and suspicious constructions such as images missing or\nincorrectly sized, missing CORS headers, or invalid metadata.\n\n## Usage\n\nCommand-line (local build):\n\n```sh\n# from the amp-toolbox root\n$ npm install\n$ npm run build # generates packages/linter/dist/cli.js\n$ cd packages/linter\n$ node dist/cli.js https://amp.dev/\n```\n\nCommand-line (from npm):\n\n```sh <!-- markdownlint-disable MD014 -->\n$ npx @ampproject/toolbox-cli lint https://amp.dev/\n```\n\nNode:\n\n```js\nconst fs = require(\"fs\");\nconst linter = require(\"@ampproject/toolbox-linter\");\nconst cheerio = require(\"cheerio\");\n\nconst body = fs.readFileSync(\"amp-dev.html\");\nconst context = {\n  $: cheerio.load(body),\n  headers: {},\n  url: \"https://amp.dev/\"\n};\n\nlinter.MetaCharsetIsFirst(context).then(console.log);\n```\n\n## `dump-signedexchange`\n\nOne test has a dependency on the `dump-signedexchange` go binary. If this is\navailable ([installation\ninstructions](https://github.com/WICG/webpackage/tree/master/go/signedexchange#installation))\nat additional check of the `application/signed-exchange` response will be\nperformed.\n\n## Development\n\n### Commands/Scripts\n\nThese scripts can be invoked in the usual way by `npm run XXX` if `npm install`\nis run in this directory. They can also be invoked from the `amp-toolbox` root\ndirectory without installing locally by `lerna run --scope '*/toolbox-linter' XXX`. (lerna sets the `PATH` so that the required binaries are available.)\n\n#### `build`\n\nPopulates the `dist` directory with the appropriate `*.js` and `*.d.ts` files.\nNote that tests are _not_ included. This script is intended to be used when\nbuilding the npm package.\n\n#### `lint`\n\nChecks the code for lint errors using prettier.\n\n### Running tests\n\nThe unit tests run in the context of toolbox project.\n```\n# Run all linter tests\nnpm run test:node -- packages/linter\n\n# Run linter network tests\nnpm run test:node -- packages/linter/tests/network.test.ts\n```\n\n### Suggested Development Workflow\n\n1. Create stub rule in `rules/`, that always \"fails\". e.g. it always returns\n   `qqqqqq`. It should extend the `Rule` class.\n1. Write tests in `tests/network.test.ts` (If HTTP requests are required). If not\n   then create a directory in `tests/local/MyNewTest-1` that contains a\n   `source.html` (AMP HTML source) and add your test in `tests/local.test.ts`. \n1. Run the test using `npm run test:node -- packages/linter` in the toolbox root.\n   If the fixtures can't be found, they will be generated automatically\n   (via real network requests). Hopefully your test will fail.\n1. Fix the implementation, and re-run the test.\n","readmeFilename":"README.md"}