diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index c3774cdab..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - env: { - es6: true, - node: true - }, - extends: ['eslint:recommended', 'prettier'], - plugins: ['prettier'], - rules: { - 'prettier/prettier': 'error', - 'no-console': 'error', - curly: ['error', 'all'], - 'prefer-arrow-callback': 'error', - 'one-var': ['error', 'never'], - 'no-var': 'error', - 'prefer-const': 'error' - }, - parserOptions: { - ecmaVersion: 6 - } -}; diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 000000000..fc68cdf55 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,21 @@ +{ + "env": { + "es2020": true, + "node": true, + "mocha": true + }, + "extends": ["eslint:recommended", "prettier"], + "plugins": ["prettier"], + "rules": { + "prettier/prettier": "error", + "no-console": "error", + "curly": ["error", "all"], + "prefer-arrow-callback": "error", + "one-var": ["error", "never"], + "no-var": "error", + "prefer-const": "error" + }, + "parserOptions": { + "sourceType": "module" + } +} diff --git a/bench/.eslintrc.js b/bench/.eslintrc.js deleted file mode 100644 index 401a667b5..000000000 --- a/bench/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - extends: ['../.eslintrc.js'], - rules: { - 'no-console': 'off' - }, - parserOptions: { - ecmaVersion: 8 - } -}; diff --git a/bench/.eslintrc.json b/bench/.eslintrc.json new file mode 100644 index 000000000..1cb404c3c --- /dev/null +++ b/bench/.eslintrc.json @@ -0,0 +1,6 @@ +{ + "extends": ["../.eslintrc.json"], + "rules": { + "no-console": "off" + } +} diff --git a/bench/memory/named-entity-data.js b/bench/memory/named-entity-data.js index bca60f005..408821a86 100644 --- a/bench/memory/named-entity-data.js +++ b/bench/memory/named-entity-data.js @@ -1,13 +1,11 @@ -'use strict'; - -const format = require('human-format'); +import format from 'human-format'; main(); -function main() { +async function main() { const before = process.memoryUsage().rss; - require('../../packages/parse5/lib/tokenizer/named-entity-data'); + await import('../../packages/parse5/lib/tokenizer/named-entity-data.js'); const after = process.memoryUsage().rss; diff --git a/bench/memory/sax-parser.js b/bench/memory/sax-parser.js index d1e893cf4..06828c0f1 100644 --- a/bench/memory/sax-parser.js +++ b/bench/memory/sax-parser.js @@ -1,10 +1,8 @@ -'use strict'; - -const fs = require('fs'); -const format = require('human-format'); -const promisifyEvent = require('promisify-event'); -const memwatch = require('node-memwatch'); -const SAXParser = require('../../packages/parse5-sax-parser/lib'); +import * as fs from 'fs'; +import format from 'human-format'; +import promisifyEvent from 'promisify-event'; +import memwatch from '@airbnb/node-memwatch'; +import SAXParser from '../../packages/parse5-sax-parser/lib/index.js'; main(); @@ -16,13 +14,13 @@ async function main() { const heapDiffMeasurement = new memwatch.HeapDiff(); let heapDiff = null; - memwatch.on('stats', stats => { + memwatch.on('stats', (stats) => { maxMemUsage = Math.max(maxMemUsage, stats['current_base']); }); startDate = new Date(); - const parserPromise = parse().then(dataSize => { + const parserPromise = parse().then((dataSize) => { parsedDataSize = dataSize; endDate = new Date(); heapDiff = heapDiffMeasurement.end(); @@ -30,7 +28,7 @@ async function main() { await Promise.all([ parserPromise, - promisifyEvent(memwatch, 'stats') // NOTE: we need at least one `stats` result + promisifyEvent(memwatch, 'stats'), // NOTE: we need at least one `stats` result ]); printResults(parsedDataSize, startDate, endDate, heapDiff, maxMemUsage); @@ -57,7 +55,7 @@ function getDuration(startDate, endDate) { const scale = new format.Scale({ seconds: 1, minutes: 60, - hours: 3600 + hours: 3600, }); return format((endDate - startDate) / 1000, { scale: scale }); diff --git a/bench/package.json b/bench/package.json index dbb9794b2..8a8e45512 100644 --- a/bench/package.json +++ b/bench/package.json @@ -1,5 +1,6 @@ { "name": "parse5-benchmarks", + "type": "module", "version": "1.0.0", "description": "parse5 regression benchmarks", "author": "Ivan Nikulin ", @@ -7,7 +8,7 @@ "dependencies": { "benchmark": "^2.1.4", "human-format": "^0.7.0", - "node-memwatch": "^1.0.1", + "@airbnb/node-memwatch": "^2.0.0", "parse5": "*", "promisify-event": "^1.0.0" } diff --git a/bench/perf/index.js b/bench/perf/index.js index ae87e0496..591fd0f01 100644 --- a/bench/perf/index.js +++ b/bench/perf/index.js @@ -1,37 +1,38 @@ -'use strict'; - -const { join } = require('path'); -const { readFileSync, createReadStream, readdirSync } = require('fs'); -const Benchmark = require('benchmark'); -const { loadTreeConstructionTestData } = require('../../test/utils/generate-parsing-tests'); -const loadSAXParserTestData = require('../../test/utils/load-sax-parser-test-data'); -const { treeAdapters, WritableStreamStub } = require('../../test/utils/common'); +import { readFileSync, createReadStream, readdirSync } from 'fs'; +import Benchmark from 'benchmark'; +import { loadTreeConstructionTestData } from '../../test/utils/generate-parsing-tests.js'; +import { loadSAXParserTestData } from '../../test/utils/load-sax-parser-test-data.js'; +import { treeAdapters, WritableStreamStub } from '../../test/utils/common.js'; +import * as parse5 from '../../packages/parse5/lib/index.js'; +import { ParserStream as parse5Stream } from '../../packages/parse5-parser-stream/lib/index.js'; +import * as parse5Upstream from 'parse5'; + +const hugePagePath = new URL('../../test/data/huge-page/huge-page.html', import.meta.url); +const treeConstructionPath = new URL('../../test/data/html5lib-tests/tree-construction', import.meta.url); +const saxPath = new URL('../../test/data/sax/', import.meta.url); //HACK: https://github.com/bestiejs/benchmark.js/issues/51 /* global workingCopy, WorkingCopyParserStream, upstreamParser, hugePage, microTests, runMicro, runPages, files */ -global.workingCopy = require('../../packages/parse5/lib'); -global.WorkingCopyParserStream = require('../../packages/parse5-parser-stream/lib'); -global.upstreamParser = require('parse5'); +global.workingCopy = parse5; +global.WorkingCopyParserStream = parse5Stream; +global.upstreamParser = parse5Upstream; // Huge page data -global.hugePage = readFileSync(join(__dirname, '../../test/data/huge-page/huge-page.html')).toString(); +global.hugePage = readFileSync(hugePagePath).toString(); // Micro data -global.microTests = loadTreeConstructionTestData( - [join(__dirname, '../../test/data/html5lib-tests/tree-construction')], - treeAdapters.default -) +global.microTests = loadTreeConstructionTestData([treeConstructionPath], treeAdapters.default) .filter( - test => + (test) => //NOTE: this test caused stack overflow in parse5 v1.x test.input !== '