A linter for AMP documents
npm install amp-toolbox-linter
A linter>) for AMP documents:
reports errors and suspicious constructions such as images missing or
incorrectly sized, missing CORS headers, or invalid metadata.
This code is alpha quality.
Command-line (local build):
``sh`
$ npm install
$ npm run build # generates src/cli.js from src/cli.ts
$ node src/cli.js https://amp.dev/
Command-line (from npm):
`sh`
$ npx amp-toolbox-linter https://amp.dev/
Node:
`js
const fs = require("fs");
const linter = require("amp-toolbox-linter");
const cheerio = require("cheerio");
const body = fs.readFileSync("amp-dev.html");
const context = {
$: cheerio.load(body),
headers: {},
url: "https://amp.dev/"
};
linter.MetaCharsetIsFirst(context).then(console.log);
`
One test has a dependency on the dump-signedexchange go binary. If this isapplication/signed-exchange
available (installation
instructions)
at additional check of the response will be
performed.
#### npm install
Installs dependencies. Run this first.
#### npm run build
Builds .js from .ts. Use this instead of tsc to ensure the correct@pika/plugin-ts-standard-pkg
config (via command-line arguments) is in use. (tsconfig.json
needs slightly different config, but it's essentially hardcoded to read from, so we need to use that for pika.)
#### npm test
Runs the tests.
#### npm run lint
Checks the code for lint errors.
#### npm run watch
Automatically rebuild .js whenever .ts changes.
#### npm run package
Generates npm-installable version of the package in pkg/. From anothernpm install amp-toolbox/packages/linter/pkg
directory install via .
Note: this command will emit multiple warnings of the form 'Valid relative
imports must include the ".js" file extension' as well as complaints about
require and module not being valid ESM globals; these can both be ignored.
(The first issue is due to extension-less imports not being valid
ES2018; the second is that the
globals require and module are not valid ESM globals. Not being valid ES2018
is not a problem here, since this code is not designed to run in the browser.)
#### npm run publish
Uses @pika's pack publish to publish to npm.
1. Create stub function in index.ts, that always "fails". e.g. it alwaysqqqqqq
returns . It should extend the Rule class.tests/network.ts
1. Write tests in . (If HTTP requests are required; if nottests/local/MyNewTest-1
then create a directory in that contains asource.html
(AMP HTML source) and expected.json (expected JSON output),tests/local.js
and will automatically execute your "test".)npm test
1. Run the test using . If the fixtures can't be found, they will benpm run publish
generated automatically (via real network requests). Hopefully your test will
fail.
1. Fix the implementation, and re-run the test.
1. Use to publish the new version to npm. (If you havenpm publish
two-factor auto turned on, this might not work, even though no errors are
reported. To actually publish (or at least see the errors), run pkg` directory.)
from the