Skip to content

Commit

Permalink
Release v0.6.0
Browse files Browse the repository at this point in the history
  • Loading branch information
dpilafian committed Jun 13, 2021
1 parent eeadf9b commit 482936c
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 102 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ $ node examples.js
| `filename` | **string** | `null` | HTML file to validate. |
| `website` | **string** | `null` | URL of website to validate. |
| `checkUrl` | **string** | `https://validator.w3.org/nu/` | W3C validation API endpoint. |
| `output` | **string** | `'json'` | Get results as an array (`'json'`) or as a web page (`'html'`) |
| `output` | **string** | `'json'` | Get results as an array (`'json'`) or as a web page (`'html'`). |

## 4) TypeScript declarations
The **TypeScript Declaration File** file is [w3c-html-validator.d.ts](dist/w3c-html-validator.d.ts)
Expand Down Expand Up @@ -70,7 +70,7 @@ import { w3cHtmlValidator } from 'w3c-html-validator';
describe('Home page', () => {
it('validates', (done) => {
const handleResults = (results) => {
assert.deepStrictEqual(results.validates, 'Home page validates');
assert(results.validates, 'Home page validates');
done();
};
w3cHtmlValidator.validate({ filename: 'docs/index.js' }).then(handleResults);
Expand Down
35 changes: 28 additions & 7 deletions dist/w3c-html-validator.d.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,36 @@
//! W3C HTML Validator v0.5.1 ~ github.com/center-key/w3c-html-validator ~ MIT License
//! W3C HTML Validator v0.6.0 ~ github.com/center-key/w3c-html-validator ~ MIT License

export declare type ValidatorOptions = {
file?: string;
input?: string;
html?: string;
filename?: string;
website?: string;
checkUrl?: string;
output?: 'json' | 'html';
proxy?: string;
callback?: (response: unknown, info?: unknown) => void;
output?: ValidatorResults['output'];
};
export declare type ValidatorResultsMessage = {
type: 'info' | 'error';
lastLine: number;
lastColumn: number;
firstColumn: number;
subType?: 'warning';
message: string;
extract: string;
hiliteStart: number;
hiliteLength: number;
};
export declare type ValidatorResults = {
validates: boolean;
mode: 'html' | 'filename' | 'website';
html: string | null;
filename: string | null;
website: string | null;
output: 'json' | 'html';
status: number;
messages: ValidatorResultsMessage[] | null;
display: string | null;
};
declare const w3cHtmlValidator: {
version: string;
validate(options: ValidatorOptions): void;
validate(options: ValidatorOptions): Promise<ValidatorResults>;
};
export { w3cHtmlValidator };
67 changes: 31 additions & 36 deletions dist/w3c-html-validator.js
Original file line number Diff line number Diff line change
@@ -1,48 +1,43 @@
//! W3C HTML Validator v0.5.1 ~ github.com/center-key/w3c-html-validator ~ MIT License
//! W3C HTML Validator v0.6.0 ~ github.com/center-key/w3c-html-validator ~ MIT License

import { readFileSync } from 'fs';
import * as request from 'superagent';
import withProxy from 'superagent-proxy';
withProxy(request);
import request from 'superagent';
const w3cHtmlValidator = {
version: '0.5.1',
version: '0.6.0',
validate(options) {
const defaults = {
checkUrl: 'https://validator.w3.org/nu/',
output: 'json',
proxy: null,
callback: (response) => console.log(response),
};
const settings = { ...defaults, ...options };
if (!settings.input && !settings.file)
throw Error('No "input" or "file" specified.');
const getRequest = (isLocal) => {
const req = isLocal ? request.default.post(settings.checkUrl) :
request.default.get(settings.checkUrl);
if (settings.proxy)
req.proxy(settings.proxy);
req.set('User-Agent', 'w3c-html-validator');
req.set('Content-Type', 'text/html; encoding=utf-8');
return req;
};
const remoteMode = settings.file && /^http[s]?:/.test(settings.file);
const type = settings.input ? 'string' : remoteMode ? 'remote' : 'local';
const context = settings.input || settings.file;
const req = getRequest(type !== 'remote');
req.query({ out: settings.output });
if (type === 'remote')
req.query({ doc: settings.file });
else
req.send(type === 'local' ? readFileSync(String(settings.file), 'utf8') : settings.input + '');
const handleResponse = (error, res) => {
const getBody = () => {
res.body.context = context;
return res.body;
};
const getContext = () => settings.output === 'json' ? getBody() : res.text;
return error ? settings.callback(error) : settings.callback(null, getContext());
};
req.end(handleResponse);
if (!settings.html && !settings.filename && !settings.website)
throw Error('Must specify the "html", "filename", or "website" option.');
if (settings.output !== 'json' && settings.output !== 'html')
throw Error('Option "output" must be "json" or "html".');
const mode = settings.html ? 'html' : settings.filename ? 'filename' : 'website';
const readFile = () => settings.filename ? readFileSync(settings.filename, 'utf8') : null;
const inputHtml = settings.html || readFile();
const makePostRequest = () => request.post(settings.checkUrl)
.set('Content-Type', 'text/html; encoding=utf-8')
.send(inputHtml);
const makeGetRequest = () => request.get(settings.checkUrl)
.query({ doc: settings.website });
const w3cRequest = inputHtml ? makePostRequest() : makeGetRequest();
w3cRequest.set('User-Agent', 'W3C HTML Validator ~ github.com/center-key/w3c-html-validator');
w3cRequest.query({ out: settings.output });
const json = settings.output === 'json';
const success = '<p class="success">';
return w3cRequest.then(response => ({
validates: json ? !response.body.messages.length : response.text.includes(success),
mode: mode,
html: inputHtml,
filename: settings.filename || null,
website: settings.website || null,
output: settings.output,
status: response.statusCode,
messages: json ? response.body.messages : null,
display: json ? null : response.text,
}));
},
};
export { w3cHtmlValidator };
88 changes: 32 additions & 56 deletions dist/w3c-html-validator.umd.cjs
Original file line number Diff line number Diff line change
@@ -1,24 +1,5 @@
//! W3C HTML Validator v0.5.1 ~ github.com/center-key/w3c-html-validator ~ MIT License
//! W3C HTML Validator v0.6.0 ~ github.com/center-key/w3c-html-validator ~ MIT License

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Expand All @@ -28,55 +9,50 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "fs", "superagent", "superagent-proxy"], factory);
define(["require", "exports", "fs", "superagent"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.w3cHtmlValidator = void 0;
const fs_1 = require("fs");
const request = __importStar(require("superagent"));
const superagent_proxy_1 = __importDefault(require("superagent-proxy"));
superagent_proxy_1.default(request);
const superagent_1 = __importDefault(require("superagent"));
const w3cHtmlValidator = {
version: '0.5.1',
version: '0.6.0',
validate(options) {
const defaults = {
checkUrl: 'https://validator.w3.org/nu/',
output: 'json',
proxy: null,
callback: (response) => console.log(response),
};
const settings = { ...defaults, ...options };
if (!settings.input && !settings.file)
throw Error('No "input" or "file" specified.');
const getRequest = (isLocal) => {
const req = isLocal ? request.default.post(settings.checkUrl) :
request.default.get(settings.checkUrl);
if (settings.proxy)
req.proxy(settings.proxy);
req.set('User-Agent', 'w3c-html-validator');
req.set('Content-Type', 'text/html; encoding=utf-8');
return req;
};
const remoteMode = settings.file && /^http[s]?:/.test(settings.file);
const type = settings.input ? 'string' : remoteMode ? 'remote' : 'local';
const context = settings.input || settings.file;
const req = getRequest(type !== 'remote');
req.query({ out: settings.output });
if (type === 'remote')
req.query({ doc: settings.file });
else
req.send(type === 'local' ? fs_1.readFileSync(String(settings.file), 'utf8') : settings.input + '');
const handleResponse = (error, res) => {
const getBody = () => {
res.body.context = context;
return res.body;
};
const getContext = () => settings.output === 'json' ? getBody() : res.text;
return error ? settings.callback(error) : settings.callback(null, getContext());
};
req.end(handleResponse);
if (!settings.html && !settings.filename && !settings.website)
throw Error('Must specify the "html", "filename", or "website" option.');
if (settings.output !== 'json' && settings.output !== 'html')
throw Error('Option "output" must be "json" or "html".');
const mode = settings.html ? 'html' : settings.filename ? 'filename' : 'website';
const readFile = () => settings.filename ? fs_1.readFileSync(settings.filename, 'utf8') : null;
const inputHtml = settings.html || readFile();
const makePostRequest = () => superagent_1.default.post(settings.checkUrl)
.set('Content-Type', 'text/html; encoding=utf-8')
.send(inputHtml);
const makeGetRequest = () => superagent_1.default.get(settings.checkUrl)
.query({ doc: settings.website });
const w3cRequest = inputHtml ? makePostRequest() : makeGetRequest();
w3cRequest.set('User-Agent', 'W3C HTML Validator ~ github.com/center-key/w3c-html-validator');
w3cRequest.query({ out: settings.output });
const json = settings.output === 'json';
const success = '<p class="success">';
return w3cRequest.then(response => ({
validates: json ? !response.body.messages.length : response.text.includes(success),
mode: mode,
html: inputHtml,
filename: settings.filename || null,
website: settings.website || null,
output: settings.output,
status: response.statusCode,
messages: json ? response.body.messages : null,
display: json ? null : response.text,
}));
},
};
exports.w3cHtmlValidator = w3cHtmlValidator;
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "w3c-html-validator",
"version": "0.5.1",
"version": "0.6.0",
"description": "A package for testing HTML files or URLs against the W3C validator (written in TypeScript)",
"license": "MIT",
"type": "module",
Expand Down

0 comments on commit 482936c

Please sign in to comment.