amp-toolbox-linter
v0.0.17
Published
A linter for AMP documents
Downloads
2
Readme
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 # generates src/cli.js from src/cli.ts
$ node src/cli.js https://amp.dev/
Command-line (from npm):
$ npx amp-toolbox-linter https://amp.dev/
Node:
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);
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/packages/linter/pkg
.
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.
Suggested Development Workflow
- Create stub function in
index.ts
, that always "fails". e.g. it always returnsqqqqqq
. It should extend theRule
class. - Write tests in
tests/network.ts
. (If HTTP requests are required; if not then create a directory intests/local/MyNewTest-1
that contains asource.html
(AMP HTML source) andexpected.json
(expected JSON output), andtests/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), runnpm publish
from thepkg
directory.)