AMP Linter
Overview
A linter for AMP documents:
reports errors and suspicious constructions such as images missing or
incorrectly sized, missing CORS headers, or invalid metadata.
Status
This code is alpha quality.
Usage
Command-line (local build):
$ npm install
$ npm run build
$ node src/cli.js https://www.ampproject.org/
Command-line (from npm):
$ npx amp-toolbox-linter https://www.ampproject.org/
Node:
const fs = require("fs");
const linter = require("amp-toolbox-linter");
const cheerio = require("cheerio");
const body = fs.readFileSync("ampproject.html");
const context = {
$: cheerio.load(body),
headers: {},
url: "https://www.ampproject.org/"
};
linter.MetaCharsetIsFirst(context).then(console.log);
dump-signedexchange
One test has a dependency on the dump-signedexchange
go binary. If this is
available (installation
instructions)
at additional check of the application/signed-exchange
response will be
performed.
Development
Commands
npm install
Installs dependencies. Run this first.
npm run build
Builds *.js
from *.ts
. Use this instead of tsc
to ensure the correct
config (via command-line arguments) is in use. (@pika/plugin-ts-standard-pkg
needs slightly different config, but it's essentially hardcoded to read from
tsconfig.json
, 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 another
directory install via npm install amp-toolbox-linter/pkg
.
Note: this command will emit multiple warnings of the form 'Valid relative
imports must include the ".js" file extension'; these can be
ignored.
npm run publish
Uses @pika's pack publish
to publish to npm.
Suggested Test-Creation Workflow
- Create stub function in
index.ts
, that always "fails". e.g. it always
returns qqqqqq
. It should implement either the Test
or TestList
interface. - Write tests in
tests/network.ts
. (If HTTP requests are required; if not
then create a directory in tests/local/MyNewTest-1
that contains a
source.html
(AMP HTML source) and expected.json
(expected JSON output),
and tests/local.js
will automatically execute your "test".) - Run the test using
npm test
. If the fixtures can't be found, they will be
generated automatically (via real network requests). Hopefully your test will
fail. - Fix the implementation, and re-run the test.
- Use
npm run publish
to publish the new version to npm. (If you have
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 npm publish
from the pkg
directory.)