From 3aa47f6c85e72388b7a3f22a2ede7546b0a72f01 Mon Sep 17 00:00:00 2001 From: harttle Date: Tue, 10 Mar 2020 01:10:13 +0800 Subject: [PATCH] chore: add todolist for benchmark case --- benchmark/.eslintrc.json | 4 +- benchmark/{demo.ts => demo.js} | 16 +- benchmark/index.js | 15 ++ benchmark/index.ts | 15 -- benchmark/{layout.ts => layout.js} | 14 +- benchmark/memory.js | 57 +++++ benchmark/memory.ts | 32 --- benchmark/{output.ts => output.js} | 14 +- benchmark/{tag.ts => tag.js} | 14 +- benchmark/templates/todolist.liquid | 49 ++++ package-lock.json | 371 ++++++++++++++++++++++++---- package.json | 6 +- 12 files changed, 486 insertions(+), 121 deletions(-) rename benchmark/{demo.ts => demo.js} (68%) create mode 100644 benchmark/index.js delete mode 100644 benchmark/index.ts rename benchmark/{layout.ts => layout.js} (61%) create mode 100644 benchmark/memory.js delete mode 100644 benchmark/memory.ts rename benchmark/{output.ts => output.js} (64%) rename benchmark/{tag.ts => tag.js} (74%) create mode 100644 benchmark/templates/todolist.liquid diff --git a/benchmark/.eslintrc.json b/benchmark/.eslintrc.json index b93af0c5e..93668d17a 100644 --- a/benchmark/.eslintrc.json +++ b/benchmark/.eslintrc.json @@ -1,5 +1,7 @@ { + "extends": ["standard"], "rules": { - "no-unused-expressions": "off" + "no-unused-expressions": "off", + "@typescript-eslint/no-var-requires": "off" } } diff --git a/benchmark/demo.ts b/benchmark/demo.js similarity index 68% rename from benchmark/demo.ts rename to benchmark/demo.js index faf0fec4a..391d3bd66 100644 --- a/benchmark/demo.ts +++ b/benchmark/demo.js @@ -1,5 +1,5 @@ -import * as Benchmark from 'benchmark' -import { Context, TagToken, Liquid } from '../src/liquid' +const Benchmark = require('benchmark') +const { Liquid } = require('..') const engine = new Liquid({ root: __dirname, @@ -7,11 +7,11 @@ const engine = new Liquid({ }) engine.registerTag('header', { - parse: function (token: TagToken) { + parse: function (token) { const [key, val] = token.args.split(':') this[key] = val }, - render: function (ctx: Context) { + render: function (ctx) { const title = this.liquid.evalValue(this.content, ctx) return `

${title}

` } @@ -32,16 +32,18 @@ const template = ` ` -export function demo () { +function demo () { console.log('--- demo ---') return new Promise(resolve => { new Benchmark.Suite('demo') .add('demo', { defer: true, - fn: (d: any) => engine.parseAndRender(template, ctx).then((x: any) => d.resolve(x)) + fn: d => engine.parseAndRender(template, ctx).then(x => d.resolve(x)) }) - .on('cycle', (event: any) => console.log(String(event.target))) + .on('cycle', event => console.log(String(event.target))) .on('complete', resolve) .run({ 'async': true }) }) } + +module.exports = { demo } diff --git a/benchmark/index.js b/benchmark/index.js new file mode 100644 index 000000000..44c3db87b --- /dev/null +++ b/benchmark/index.js @@ -0,0 +1,15 @@ +const { output } = require('./output') +const { tag } = require('./tag') +const { demo } = require('./demo') +const { layout } = require('./layout') +const { memory } = require('./memory') + +async function main () { + // await output() + // await tag() + // await demo() + // await layout() + await memory() +} + +main() diff --git a/benchmark/index.ts b/benchmark/index.ts deleted file mode 100644 index 8f524d7ce..000000000 --- a/benchmark/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { output } from './output' -import { tag } from './tag' -import { demo } from './demo' -import { layout } from './layout' -import { memory } from './memory' - -async function main () { - await output() - await tag() - await demo() - await layout() - await memory() -} - -main() diff --git a/benchmark/layout.ts b/benchmark/layout.js similarity index 61% rename from benchmark/layout.ts rename to benchmark/layout.js index bd8bf68e6..4fd866047 100644 --- a/benchmark/layout.ts +++ b/benchmark/layout.js @@ -1,5 +1,5 @@ -import * as Benchmark from 'benchmark' -import { Liquid } from '../src/liquid' +const Benchmark = require('benchmark') +const { Liquid } = require('..') const engineOptions = { root: __dirname, @@ -17,20 +17,22 @@ const template = ` {% block body %}a small body{% endblock %} ` -export function layout () { +function layout () { console.log('--- layout ---') return new Promise(resolve => { new Benchmark.Suite('layout') .add('cache=false', { defer: true, - fn: (d: any) => engine.parseAndRender(template, {}).then((x: any) => d.resolve(x)) + fn: d => engine.parseAndRender(template, {}).then(x => d.resolve(x)) }) .add('cache=true', { defer: true, - fn: (d: any) => cachingEngine.parseAndRender(template, {}).then((x: any) => d.resolve(x)) + fn: d => cachingEngine.parseAndRender(template, {}).then(x => d.resolve(x)) }) - .on('cycle', (event: any) => console.log(String(event.target))) + .on('cycle', event => console.log(String(event.target))) .on('complete', resolve) .run({ 'async': true }) }) } + +module.exports = { layout } diff --git a/benchmark/memory.js b/benchmark/memory.js new file mode 100644 index 000000000..244f4ef66 --- /dev/null +++ b/benchmark/memory.js @@ -0,0 +1,57 @@ +const { join } = require('path') +const { readFileSync } = require('fs') +const { getHeapStatistics } = require('v8') +const { Liquid } = require('..') + +const engineOptions = { + root: __dirname, + extname: '.liquid' +} + +const engine = new Liquid(engineOptions) + +const SAMPLE_COUNT = 1024 + +function memory () { + console.log('--- memory ---') + html() + todolist() +} + +function html () { + const str = readFileSync(join(__dirname, 'templates/lorem-html.liquid'), 'utf8') + + global.gc() + const base = getHeapStatistics().used_heap_size + const templates = [] + + for (let i = 0; i < SAMPLE_COUNT; i++) { + templates.push(engine.parse(str)) + } + global.gc() + + const diff = (getHeapStatistics().used_heap_size - base) / SAMPLE_COUNT + console.log(`${h(str.length)} HTML template x ${h(diff)}/instance (${SAMPLE_COUNT} instances sampled)`) +} + +function todolist () { + const str = readFileSync(join(__dirname, 'templates/todolist.liquid'), 'utf8') + + global.gc() + const base = getHeapStatistics().used_heap_size + const templates = [] + + for (let i = 0; i < SAMPLE_COUNT; i++) { + templates.push(engine.parse(str)) + } + global.gc() + + const diff = (getHeapStatistics().used_heap_size - base) / SAMPLE_COUNT + console.log(`${h(str.length)} Todo template x ${h(diff)}/instance (${SAMPLE_COUNT} instances sampled)`) +} + +function h (size) { + return (size / 1024).toFixed(3) + ' kB' +} + +module.exports = { memory } diff --git a/benchmark/memory.ts b/benchmark/memory.ts deleted file mode 100644 index af70e36c5..000000000 --- a/benchmark/memory.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { join } from 'path' -import { readFileSync } from 'fs' -import { getHeapStatistics } from 'v8' -import { Liquid } from '../src/liquid' - -const engineOptions = { - root: __dirname, - extname: '.liquid' -} - -const engine = new Liquid(engineOptions) - -const templateString = readFileSync(join(__dirname, 'templates/lorem-html.liquid'), 'utf8') -const templateSizeKb = templateString.length / 1024 - -const NB_INSTANCES_TO_RETAIN = 250 - -export function memory () { - console.log('--- memory ---') - const initialUsedHeapSize = getHeapStatistics().used_heap_size - const templates = [] - - for (let i = 0; i < NB_INSTANCES_TO_RETAIN; i++) { - templates.push(engine.parse(templateString)) - } - - const finalUsedHeapSize = getHeapStatistics().used_heap_size - const heapDifference = finalUsedHeapSize - initialUsedHeapSize - const avgRetainedPerTemplate = (heapDifference / NB_INSTANCES_TO_RETAIN) / 1024 - - console.log(`retained memory for a ${templateSizeKb}KB template: ${avgRetainedPerTemplate}KB (${NB_INSTANCES_TO_RETAIN} samples)`) -} diff --git a/benchmark/output.ts b/benchmark/output.js similarity index 64% rename from benchmark/output.ts rename to benchmark/output.js index 539eabebe..e083cc80d 100644 --- a/benchmark/output.ts +++ b/benchmark/output.js @@ -1,9 +1,9 @@ -import * as Benchmark from 'benchmark' -import { Liquid } from '../src/liquid' +const Benchmark = require('benchmark') +const { Liquid } = require('..') const liquid = new Liquid() -export function output () { +function output () { console.log('--- output ---') return new Promise(resolve => { new Benchmark.Suite('output') @@ -12,15 +12,17 @@ export function output () { .add('date', test('{{"now" | date: "%d%Y%m"}}')) .add('escape', test('{{"1<2" | escape}}')) .add('default', test('{{"" | default: 3}}')) - .on('cycle', (event: any) => console.log(String(event.target))) + .on('cycle', (event) => console.log(String(event.target))) .on('complete', resolve) .run({ 'async': true }) }) } -function test (str: string) { +function test (str) { return { defer: true, - fn: (d: any) => liquid.parseAndRender(str).then((x: any) => d.resolve(x)) + fn: d => liquid.parseAndRender(str).then(x => d.resolve(x)) } } + +module.exports = { output } diff --git a/benchmark/tag.ts b/benchmark/tag.js similarity index 74% rename from benchmark/tag.ts rename to benchmark/tag.js index 2cc0024ab..4c7521886 100644 --- a/benchmark/tag.ts +++ b/benchmark/tag.js @@ -1,9 +1,9 @@ -import * as Benchmark from 'benchmark' -import { Liquid } from '../src/liquid' +const Benchmark = require('benchmark') +const { Liquid } = require('..') const liquid = new Liquid() -export function tag () { +function tag () { console.log('--- tag ---') return new Promise(resolve => { new Benchmark.Suite('tag') @@ -16,15 +16,17 @@ export function tag () { .add('increment', test('{%increment a%}')) .add('decrement', test('{%decrement a%}')) .add('tablerow', test('{%tablerow i in (1..10) cols:3%}{%endtablerow%}')) - .on('cycle', (event: any) => console.log(String(event.target))) + .on('cycle', (event) => console.log(String(event.target))) .on('complete', resolve) .run({ 'async': true }) }) } -function test (str: string) { +function test (str) { return { defer: true, - fn: (d: any) => liquid.parseAndRender(str).then((x: any) => d.resolve(x)) + fn: d => liquid.parseAndRender(str).then(x => d.resolve(x)) } } + +module.exports = { tag } diff --git a/benchmark/templates/todolist.liquid b/benchmark/templates/todolist.liquid new file mode 100644 index 000000000..010ec93f2 --- /dev/null +++ b/benchmark/templates/todolist.liquid @@ -0,0 +1,49 @@ +
+

+ posuere cubilia Curae; Vestibulum hendrerit malesuada odio. Fusce ut elit + ut augue sollicitudin blandit. Phasellus volutpat lorem. Duis non pede et + neque luctus tincidunt. Duis interdum tempus elit. + Aenean metus. Vestibulum ac lacus. Vivamus porttitor, massa ut. +

+ Add Todo + + {% for todo in todos %} +
+

+ Todo {{ forloop.index }}: + + {{ todo.title | prepend: 'TODO: ' | upcase }} + +

+ + + +

+ Purus eu mi. Proin commodo, massa commodo dapibus elementum, + libero lacus pulvinar eros, ut tincidunt nisl elit ut velit. Cras rutrum + porta purus. Vivamus lorem. Sed turpis enim, faucibus quis, pharetra in, + sagittis sed, magna. Curabitur ultricies felis ut libero. Nullam tincidunt + enim eu nibh. Nunc eget ipsum in sem facilisis convallis. Proin fermentum +

+ +
+ {% if todo.category %} + {{ todo.category.title | capitalize }} + {% endif %} +
+ Edit + Check + Trash +
+ {% endfor %} +
diff --git a/package-lock.json b/package-lock.json index bbbe95e4e..676417e29 100644 --- a/package-lock.json +++ b/package-lock.json @@ -929,6 +929,12 @@ "@types/chai": "*" } }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, "@types/connect": { "version": "3.4.33", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", @@ -1453,9 +1459,9 @@ } }, "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", "dev": true }, "acorn-walk": { @@ -3564,49 +3570,107 @@ } }, "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", + "ajv": "^6.10.0", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.11", + "lodash": "^4.17.14", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", + "optionator": "^0.8.3", "progress": "^2.0.0", "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", "table": "^5.2.3", - "text-table": "^0.2.0" + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -3616,20 +3680,217 @@ "esutils": "^2.0.2" } }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "globals": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", + "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "inquirer": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.6.tgz", + "integrity": "sha512-7SVO4h+QIdMq6XcqIqrNte3gS5MzCCKZdsq9DO4PJziBFNYzP3PGFbDjgadDb//MCahzgjCxvQ/O2wa7kx9o4w==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "run-async": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", + "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true } } }, @@ -4110,14 +4371,28 @@ "dev": true }, "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.0.tgz", + "integrity": "sha512-Xs8airJ7RQolnDIbLtRutmfvSsAe0xqMMAantCN/GMoqf81TFbeI1T7Jpd56qYu1uuh32dOG5W/X9uO+ghPXzA==", "dev": true, "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "acorn": "^7.1.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "acorn": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + } } }, "esprima": { @@ -4127,9 +4402,9 @@ "dev": true }, "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz", + "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==", "dev": true, "requires": { "estraverse": "^4.0.0" @@ -12091,12 +12366,6 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -13932,9 +14201,9 @@ "dev": true }, "table": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.5.tgz", - "integrity": "sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { "ajv": "^6.10.2", @@ -14484,6 +14753,12 @@ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "dev": true + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -14777,6 +15052,12 @@ "execa": "^1.0.0" } }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", diff --git a/package.json b/package.json index a24b246f3..d3a6f1721 100644 --- a/package.json +++ b/package.json @@ -7,13 +7,13 @@ "browser": "dist/liquid.js", "types": "dist/liquid.d.ts", "scripts": { - "lint": "eslint . --ext .ts", + "lint": "eslint .", "docs": "rm docs -rf && typedoc --gitRevision master --out docs src && cp -r website/. docs/", "unit": "mocha \"test/unit/**/*.ts\"", "integration": "mocha \"test/integration/**/*.ts\"", "e2e": "npm run build && mocha \"test/e2e/**/*.ts\"", "test": "cross-env BUNDLES=cjs,umd npm run build && mocha \"test/**/*.ts\"", - "benchmark": "ts-node benchmark", + "benchmark": "node --expose-gc benchmark/index", "coverage": "nyc --reporter=html mocha \"test/{unit,integration}/**/*.ts\"", "coverage-coveralls": "nyc mocha \"test/{unit,integration}/**/*.ts\" && nyc report --reporter=text-lcov | coveralls", "build": "rollup -c rollup.config.ts && ls -lh dist", @@ -80,7 +80,7 @@ "chai-as-promised": "^7.1.1", "coveralls": "^3.0.2", "cross-env": "^5.2.0", - "eslint": "^5.12.1", + "eslint": "^6.8.0", "eslint-config-standard": "^12.0.0", "eslint-plugin-import": "^2.15.0", "eslint-plugin-mocha": "^5.3.0",