diff --git a/.gitignore b/.gitignore index 2cee248b2..eee1c658b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,8 @@ *.log npm-debug.log* -# tests +# cache +.rpt2_cache coverage/ .nyc_output/ diff --git a/package-lock.json b/package-lock.json index 8854cd7d0..9a439cae5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -525,9 +525,9 @@ "dev": true }, "@types/node": { - "version": "10.12.18", - "resolved": "http://registry.npm.taobao.org/@types/node/download/@types/node-10.12.18.tgz", - "integrity": "sha1-HTynZHGJFVhPzZ9jRGIbdnJmXGc=", + "version": "11.9.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.9.3.tgz", + "integrity": "sha512-DMiqG51GwES/c4ScBY0u5bDlH44+oY8AeYHjY1SGCWidD7h08o1dfHue/TGK7REmif2KiJzaUskO+Q0eaeZ2fQ==", "dev": true }, "JSONStream": { @@ -627,18 +627,18 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, "ansicolors": { "version": "0.3.2", "resolved": "http://registry.npm.taobao.org/ansicolors/download/ansicolors-0.3.2.tgz", "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", "dev": true }, + "arg": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", + "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "http://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz", @@ -759,12 +759,6 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, - "async": { - "version": "1.5.2", - "resolved": "http://registry.npm.taobao.org/async/download/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", @@ -795,667 +789,6 @@ "integrity": "sha1-1NDpudv8p3vwjusKikcVUP454ok=", "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "http://registry.npm.taobao.org/babel-core/download/babel-core-6.26.3.tgz", - "integrity": "sha1-suLwnjQtDwyI4vAuBneUEl51wgc=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.1", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.10", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "http://registry.npm.taobao.org/babel-generator/download/babel-generator-6.26.1.tgz", - "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.10", - "source-map": "0.5.7", - "trim-right": "1.0.1" - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-builder-binary-assignment-operator-visitor/download/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, - "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-call-delegate/download/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-helper-define-map/download/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-explode-assignable-expression/download/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-function-name/download/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-get-function-arity/download/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-hoist-variables/download/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-optimise-call-expression/download/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-helper-regex/download/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-remap-async-to-generator/download/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helper-replace-supers/download/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-helpers/download/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "http://registry.npm.taobao.org/babel-messages/download/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-check-es2015-constants/download/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-external-helpers": { - "version": "6.22.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-external-helpers/download/babel-plugin-external-helpers-6.22.0.tgz", - "integrity": "sha1-IoX0iwK9Xe3oUXXK+MYuhq3M76E=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-istanbul": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.0.tgz", - "integrity": "sha512-CLoXPRSUWiR8yao8bShqZUIC6qLfZVVY3X1wj+QPNXu0wfmrRRfarh1LYy+dYMVI+bDj0ghy3tuqFFRFZmL1Nw==", - "dev": true, - "requires": { - "find-up": "3.0.0", - "istanbul-lib-instrument": "3.0.0", - "test-exclude": "5.0.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-async-functions/download/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-exponentiation-operator/download/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-trailing-function-commas/download/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-async-to-generator/download/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-arrow-functions/download/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-block-scoped-functions/download/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-block-scoping/download/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-classes/download/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-computed-properties/download/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-destructuring/download/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-duplicate-keys/download/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-for-of/download/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-function-name/download/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-literals/download/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-amd/download/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-systemjs/download/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-umd/download/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-object-super/download/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-parameters/download/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-shorthand-properties/download/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-spread/download/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-sticky-regex/download/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-template-literals/download/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-typeof-symbol/download/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-es2015-unicode-regex/download/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-exponentiation-operator/download/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-regenerator/download/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "0.10.1" - } - }, - "babel-plugin-transform-runtime": { - "version": "6.23.0", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-runtime/download/babel-plugin-transform-runtime-6.23.0.tgz", - "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-strict-mode/download/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-preset-env": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", - "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "3.2.8", - "invariant": "2.2.4", - "semver": "5.5.0" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-register/download/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "6.26.3", - "babel-runtime": "6.26.0", - "core-js": "2.5.7", - "home-or-tmp": "2.0.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" - }, - "dependencies": { - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.5.7", - "regenerator-runtime": "0.11.1" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-template/download/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.10" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-traverse/download/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.4", - "lodash": "4.17.10" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "http://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.10", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "http://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz", - "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", - "dev": true - }, "balanced-match": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", @@ -1619,22 +952,18 @@ "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=", "dev": true }, - "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000878", - "electron-to-chromium": "1.3.61" - } - }, "btoa-lite": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/btoa-lite/download/btoa-lite-1.0.0.tgz", "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", "dev": true }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, "builtin-modules": { "version": "1.1.1", "resolved": "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz", @@ -1710,12 +1039,6 @@ "quick-lru": "1.1.0" } }, - "caniuse-lite": { - "version": "1.0.30000878", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000878.tgz", - "integrity": "sha512-/dCGTdLCnjVJno1mFRn7Y6eit3AYaeFzSrMQHCoK0LEQaWl5snuLex1Ky4b8/Qu2ig5NgTX4cJx65hH9546puA==", - "dev": true - }, "cardinal": { "version": "2.1.1", "resolved": "http://registry.npm.taobao.org/cardinal/download/cardinal-2.1.1.tgz", @@ -1755,19 +1078,6 @@ "check-error": "1.0.2" } }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -2018,12 +1328,6 @@ "trim-off-newlines": "1.0.1" } }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "http://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true - }, "cookie": { "version": "0.3.1", "resolved": "http://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz", @@ -2048,24 +1352,12 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, - "core-js": { - "version": "2.5.7", - "resolved": "http://registry.npm.taobao.org/core-js/download/core-js-2.5.7.tgz", - "integrity": "sha1-+XJgj/DOrWi4QaFqky0LGDeRgU4=", - "dev": true - }, "core-util-is": { "version": "1.0.2", "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "corser": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/corser/download/corser-2.0.1.tgz", - "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", - "dev": true - }, "cosmiconfig": { "version": "5.0.7", "resolved": "http://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.0.7.tgz", @@ -2310,15 +1602,6 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, - "detect-indent": { - "version": "4.0.0", - "resolved": "http://registry.npm.taobao.org/detect-indent/download/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, "diff": { "version": "3.5.0", "resolved": "http://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz", @@ -2397,44 +1680,12 @@ "jsbn": "0.1.1" } }, - "ecstatic": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.2.1.tgz", - "integrity": "sha512-BAdHx9LOCG1fwxY8MIydUBskl8UUQrYeC3WE14FA1DPlBzqoG1aOgEkypcSpmiiel8RAj8gW1s40RrclfrpGUg==", - "dev": true, - "requires": { - "he": "1.1.1", - "mime": "1.6.0", - "minimist": "1.2.0", - "url-join": "2.0.5" - }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, "ee-first": { "version": "1.1.1", "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, - "electron-to-chromium": { - "version": "1.3.61", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.61.tgz", - "integrity": "sha512-XjTdsm6x71Y48lF9EEvGciwXD70b20g0t+3YbrE+0fPFutqV08DSNrZXkoXAp3QuzX7TpL/OW+/VsNoR9GkuNg==", - "dev": true - }, "encodeurl": { "version": "1.0.2", "resolved": "http://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", @@ -2920,12 +2171,6 @@ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true }, - "estree-walker": { - "version": "0.2.1", - "resolved": "http://registry.npm.taobao.org/estree-walker/download/estree-walker-0.2.1.tgz", - "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=", - "dev": true - }, "esutils": { "version": "2.0.2", "resolved": "http://registry.npm.taobao.org/esutils/download/esutils-2.0.2.tgz", @@ -2938,12 +2183,6 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, - "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", - "dev": true - }, "execa": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz", @@ -2994,6 +2233,57 @@ } } }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.4" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.1.1", + "repeat-element": "1.1.3", + "repeat-string": "1.6.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, "express": { "version": "4.16.4", "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", @@ -3192,6 +2482,12 @@ "object-assign": "4.1.1" } }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, "fill-range": { "version": "4.0.0", "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", @@ -3230,51 +2526,6 @@ "unpipe": "1.0.0" } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "3.0.0" - }, - "dependencies": { - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" - } - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "2.1.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - } - } - }, "find-versions": { "version": "3.0.0", "resolved": "http://registry.npm.taobao.org/find-versions/download/find-versions-3.0.0.tgz", @@ -3305,32 +2556,21 @@ "write": "0.2.1" } }, - "follow-redirects": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.7.tgz", - "integrity": "sha512-NONJVIFiX7Z8k2WxfqBjtwqMifx7X42ORLFrOZ2LTKGj71G3C0kfdyTqGqr8fx5zSX6Foo/D95dgGWbPUiwnew==", - "dev": true, - "requires": { - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, "for-in": { "version": "1.0.2", "resolved": "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, "forever-agent": { "version": "0.6.1", "resolved": "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", @@ -3489,6 +2729,42 @@ "path-is-absolute": "1.0.1" } }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, "glob-parent": { "version": "3.1.0", "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", @@ -3516,12 +2792,6 @@ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", "dev": true }, - "globals": { - "version": "9.18.0", - "resolved": "http://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz", - "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", - "dev": true - }, "globby": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/globby/-/globby-9.0.0.tgz", @@ -3631,15 +2901,6 @@ "function-bind": "1.1.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, "has-flag": { "version": "3.0.0", "resolved": "http://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz", @@ -3684,16 +2945,6 @@ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", "dev": true }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, "hook-std": { "version": "1.2.0", "resolved": "http://registry.npm.taobao.org/hook-std/download/hook-std-1.2.0.tgz", @@ -3727,17 +2978,6 @@ "statuses": "1.4.0" } }, - "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", - "dev": true, - "requires": { - "eventemitter3": "3.1.0", - "follow-redirects": "1.5.7", - "requires-port": "1.0.0" - } - }, "http-proxy-agent": { "version": "2.1.0", "resolved": "http://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-2.1.0.tgz", @@ -3759,22 +2999,6 @@ } } }, - "http-server": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.11.1.tgz", - "integrity": "sha512-6JeGDGoujJLmhjiRGlt8yK8Z9Kl0vnl/dQoQZlc4oeqaUoAKQg94NILLfrY3oWzSyFaQCVNTcKE5PZ3cH8VP9w==", - "dev": true, - "requires": { - "colors": "1.0.3", - "corser": "2.0.1", - "ecstatic": "3.2.1", - "http-proxy": "1.17.0", - "opener": "1.4.3", - "optimist": "0.6.1", - "portfinder": "1.0.17", - "union": "0.4.6" - } - }, "http-signature": { "version": "1.2.0", "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz", @@ -3983,15 +3207,6 @@ "p-is-promise": "2.0.0" } }, - "invariant": { - "version": "2.2.4", - "resolved": "http://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz", - "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", - "dev": true, - "requires": { - "loose-envify": "1.3.1" - } - }, "invert-kv": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/invert-kv/download/invert-kv-2.0.0.tgz", @@ -4090,6 +3305,21 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, "is-extendable": { "version": "0.1.1", "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", @@ -4102,15 +3332,6 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "is-finite": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/is-finite/download/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", @@ -4126,12 +3347,6 @@ "is-extglob": "2.1.1" } }, - "is-module": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/is-module/download/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, "is-number": { "version": "3.0.0", "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", @@ -4173,6 +3388,18 @@ "isobject": "3.0.1" } }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, "is-promise": { "version": "2.1.0", "resolved": "http://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz", @@ -4297,12 +3524,6 @@ } } }, - "js-tokens": { - "version": "3.0.2", - "resolved": "http://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, "js-yaml": { "version": "3.12.0", "resolved": "http://registry.npm.taobao.org/js-yaml/download/js-yaml-3.12.0.tgz", @@ -4481,12 +3702,6 @@ } } }, - "jsesc": { - "version": "1.3.0", - "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "http://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz", @@ -4517,12 +3732,6 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "json5": { - "version": "0.5.1", - "resolved": "http://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, "jsonfile": { "version": "4.0.0", "resolved": "http://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", @@ -4695,15 +3904,6 @@ "integrity": "sha512-hcnW80h3j2lbUfFdMArd5UPA/vxZJ+G8vobd+wg3nVEQA0EigStbYcrG030FJxL6xiDDPEkoMatV9xIh5OecQQ==", "dev": true }, - "loose-envify": { - "version": "1.3.1", - "resolved": "http://registry.npm.taobao.org/loose-envify/download/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "requires": { - "js-tokens": "3.0.2" - } - }, "loud-rejection": { "version": "1.6.0", "resolved": "http://registry.npm.taobao.org/loud-rejection/download/loud-rejection-1.6.0.tgz", @@ -4720,6 +3920,12 @@ "integrity": "sha1-fd30yveQAahR60+6f7YDTyUSdqs=", "dev": true }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, "map-age-cleaner": { "version": "0.1.3", "resolved": "http://registry.npm.taobao.org/map-age-cleaner/download/map-age-cleaner-0.1.3.tgz", @@ -4801,6 +4007,12 @@ } } }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, "media-typer": { "version": "0.3.0", "resolved": "http://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", @@ -5169,6 +4381,15 @@ "validate-npm-package-license": "3.0.3" } }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, "normalize-url": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.1.0.tgz", @@ -9487,6 +8708,16 @@ "isobject": "3.0.1" } }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, "object.pick": { "version": "1.3.0", "resolved": "http://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz", @@ -9529,12 +8760,6 @@ "mimic-fn": "1.2.0" } }, - "opener": { - "version": "1.4.3", - "resolved": "http://registry.npm.taobao.org/opener/download/opener-1.4.3.tgz", - "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", - "dev": true - }, "optimist": { "version": "0.6.1", "resolved": "http://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz", @@ -9567,12 +8792,6 @@ "wordwrap": "1.0.0" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, "os-locale": { "version": "3.1.0", "resolved": "http://registry.npm.taobao.org/os-locale/download/os-locale-3.1.0.tgz", @@ -9687,6 +8906,35 @@ "integrity": "sha1-JC07ZcvN2hS7UEOeMkKs9pcds5U=", "dev": true }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -9721,12 +8969,6 @@ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "dev": true }, - "path-exists": { - "version": "3.0.0", - "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, "path-is-absolute": { "version": "1.0.1", "resolved": "http://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", @@ -9865,17 +9107,6 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", "dev": true }, - "portfinder": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.17.tgz", - "integrity": "sha512-syFcRIRzVI1BoEFOCaAiizwDolh1S1YXSodsVhncbhjzjZQulhczNRbqnUl9N31Q4dKGOXsNDqxC2BWBgSMqeQ==", - "dev": true, - "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" - } - }, "posix-character-classes": { "version": "0.1.1", "resolved": "http://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz", @@ -9888,10 +9119,10 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "private": { - "version": "0.1.8", - "resolved": "http://registry.npm.taobao.org/private/download/private-0.1.8.tgz", - "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=", + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, "process-nextick-args": { @@ -9962,6 +9193,25 @@ "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", "dev": true }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.4" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, "range-parser": { "version": "1.2.0", "resolved": "http://registry.npm.taobao.org/range-parser/download/range-parser-1.2.0.tgz", @@ -10022,16 +9272,6 @@ "path-type": "3.0.0" } }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "3.0.0", - "read-pkg": "3.0.0" - } - }, "readable-stream": { "version": "2.3.6", "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz", @@ -10077,27 +9317,19 @@ "esprima": "4.0.0" } }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, "regenerator-runtime": { "version": "0.12.1", "resolved": "http://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.12.1.tgz", "integrity": "sha1-+hpxVEdkwDb4xJsToIsllMn4oN4=", "dev": true }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" + "is-equal-shallow": "0.1.3" } }, "regex-not": { @@ -10116,17 +9348,6 @@ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/regexpu-core/download/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - }, "registry-auth-token": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", @@ -10137,29 +9358,12 @@ "safe-buffer": "5.1.2" } }, - "regjsgen": { - "version": "0.2.0", - "resolved": "http://registry.npm.taobao.org/regjsgen/download/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, - "regjsparser": { - "version": "0.1.5", - "resolved": "http://registry.npm.taobao.org/regjsparser/download/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "http://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", @@ -10172,15 +9376,6 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "repeating": { - "version": "2.0.1", - "resolved": "http://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, "request": { "version": "2.87.0", "resolved": "http://registry.npm.taobao.org/request/download/request-2.87.0.tgz", @@ -10241,12 +9436,6 @@ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, - "requires-port": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, "resolve": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", @@ -10322,7 +9511,7 @@ "dev": true, "requires": { "@types/estree": "0.0.39", - "@types/node": "10.12.18", + "@types/node": "11.9.3", "acorn": "6.0.5" } }, @@ -10343,40 +9532,140 @@ } } }, - "rollup-plugin-babel": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-3.0.7.tgz", - "integrity": "sha512-bVe2y0z/V5Ax1qU8NX/0idmzIwJPdUGu8Xx3vXH73h0yGjxfv2gkFI82MBVg49SlsFlLTBadBHb67zy4TWM3hA==", - "dev": true, - "requires": { - "rollup-pluginutils": "1.5.2" - } - }, - "rollup-plugin-node-resolve": { - "version": "3.3.0", - "resolved": "http://registry.npm.taobao.org/rollup-plugin-node-resolve/download/rollup-plugin-node-resolve-3.3.0.tgz", - "integrity": "sha1-wm0RCjaBLL76fOEXytzTQ5qhxxM=", - "dev": true, - "requires": { - "builtin-modules": "2.0.0", - "is-module": "1.0.0", - "resolve": "1.10.0" - }, - "dependencies": { - "builtin-modules": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-2.0.0.tgz", - "integrity": "sha1-YLfvWuZUa9fe76dLCLYqQ6IyZI4=", - "dev": true - } - } - }, "rollup-plugin-shim": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/rollup-plugin-shim/-/rollup-plugin-shim-1.0.0.tgz", "integrity": "sha512-rZqFD43y4U9nSqVq3iyWBiDwmBQJY8Txi04yI9jTKD3xcl7CbFjh1qRpQshUB3sONLubDzm7vJiwB+1MEGv67w==", "dev": true }, + "rollup-plugin-typescript2": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.19.2.tgz", + "integrity": "sha512-DRG7SaYX0QzBIz6rII5nm1UkiceS95r8mJjujugybyIueNF3auvzGTHMK62O7As/0q5RHjXsOguWOUv+KJKLFA==", + "dev": true, + "requires": { + "fs-extra": "7.0.1", + "resolve": "1.8.1", + "rollup-pluginutils": "2.3.3", + "tslib": "1.9.3" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.3" + } + }, + "estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "1.0.6" + } + }, + "rollup-pluginutils": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz", + "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==", + "dev": true, + "requires": { + "estree-walker": "0.5.2", + "micromatch": "2.3.11" + } + } + } + }, "rollup-plugin-uglify": { "version": "6.0.2", "resolved": "http://registry.npm.taobao.org/rollup-plugin-uglify/download/rollup-plugin-uglify-6.0.2.tgz", @@ -10389,16 +9678,6 @@ "uglify-js": "3.4.9" } }, - "rollup-pluginutils": { - "version": "1.5.2", - "resolved": "http://registry.npm.taobao.org/rollup-pluginutils/download/rollup-pluginutils-1.5.2.tgz", - "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=", - "dev": true, - "requires": { - "estree-walker": "0.2.1", - "minimatch": "3.0.4" - } - }, "run-async": { "version": "2.3.0", "resolved": "http://registry.npm.taobao.org/run-async/download/run-async-2.3.0.tgz", @@ -10798,12 +10077,6 @@ "integrity": "sha512-r2JhDY7gbbmh5z3Q62pNbrjxZdOAjpsqW/8yxAZRSqLZqowmfGZPGUZPFf3UX36NLis0cv8VEM5IJh9HgkSOAA==", "dev": true }, - "slash": { - "version": "1.0.0", - "resolved": "http://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, "slice-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", @@ -10952,6 +10225,24 @@ "urix": "0.1.0" } }, + "source-map-support": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", + "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "dev": true, + "requires": { + "buffer-from": "1.1.1", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "source-map-url": { "version": "0.4.0", "resolved": "http://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz", @@ -11194,12 +10485,6 @@ "superagent": "3.8.3" } }, - "supports-color": { - "version": "2.0.0", - "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, "supports-hyperlinks": { "version": "1.0.1", "resolved": "http://registry.npm.taobao.org/supports-hyperlinks/download/supports-hyperlinks-1.0.1.tgz", @@ -11285,18 +10570,6 @@ } } }, - "test-exclude": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.0.0.tgz", - "integrity": "sha512-bO3Lj5+qFa9YLfYW2ZcXMOV1pmQvw+KS/DpjqhyX6Y6UZ8zstpZJ+mA2ERkXfpOqhxsJlQiLeVXD3Smsrs6oLw==", - "dev": true, - "requires": { - "arrify": "1.0.1", - "minimatch": "3.0.4", - "read-pkg-up": "4.0.0", - "require-main-filename": "1.0.1" - } - }, "text-encoding": { "version": "0.6.4", "resolved": "http://registry.npm.taobao.org/text-encoding/download/text-encoding-0.6.4.tgz", @@ -11340,12 +10613,6 @@ "os-tmpdir": "1.0.2" } }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "http://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, "to-object-path": { "version": "0.3.0", "resolved": "http://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz", @@ -11438,6 +10705,19 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "ts-node": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.0.2.tgz", + "integrity": "sha512-MosTrinKmaAcWgO8tqMjMJB22h+sp3Rd1i4fdoWY4mhBDekOwIAKI/bzmRi7IcbCmjquccYg2gcF6NBkLgr0Tw==", + "dev": true, + "requires": { + "arg": "4.1.0", + "diff": "3.5.0", + "make-error": "1.3.5", + "source-map-support": "0.5.10", + "yn": "3.0.0" + } + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", @@ -11485,6 +10765,12 @@ "mime-types": "2.1.18" } }, + "typescript": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3.tgz", + "integrity": "sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A==", + "dev": true + }, "uglify-js": { "version": "3.4.9", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", @@ -11509,23 +10795,6 @@ } } }, - "union": { - "version": "0.4.6", - "resolved": "http://registry.npm.taobao.org/union/download/union-0.4.6.tgz", - "integrity": "sha1-GY+9rrolTniLDvy2MLwR8kopWeA=", - "dev": true, - "requires": { - "qs": "2.3.3" - }, - "dependencies": { - "qs": { - "version": "2.3.3", - "resolved": "http://registry.npm.taobao.org/qs/download/qs-2.3.3.tgz", - "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=", - "dev": true - } - } - }, "union-value": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/union-value/download/union-value-1.0.0.tgz", @@ -11645,12 +10914,6 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, - "url-join": { - "version": "2.0.5", - "resolved": "http://registry.npm.taobao.org/url-join/download/url-join-2.0.5.tgz", - "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", - "dev": true - }, "url-template": { "version": "2.0.8", "resolved": "http://registry.npm.taobao.org/url-template/download/url-template-2.0.8.tgz", @@ -11981,6 +11244,12 @@ "dev": true } } + }, + "yn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz", + "integrity": "sha512-+Wo/p5VRfxUgBUGy2j/6KX2mj9AYJWOHuhMjMcbBFc3y54o9/4buK1ksBvuiK01C3kby8DH9lSmJdSxw+4G/2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 1a32ed1a4..baabf6a21 100644 --- a/package.json +++ b/package.json @@ -11,13 +11,10 @@ "unit": "mocha test/unit", "e2e": "mocha test/e2e", "test": "npm run unit && npm run e2e", - "coverage": "cross-env NODE_ENV=test nyc --reporter=html npm run unit", + "coverage": "nyc --reporter=html npm run unit", "coveralls": "nyc report --reporter=text-lcov | coveralls", "build": "rollup -c && ls -lh dist", - "version": "npm run build && git add -A dist", - "demo:browser": "echo open http://localhost:8080/demo/browser && http-server -c-1", - "demo:nodejs": "node ./demo/nodejs/index.js", - "demo:express": "cd ./demo/express/ && npm start" + "version": "npm run build && git add -A dist" }, "repository": { "type": "git", @@ -45,12 +42,6 @@ "@semantic-release/git": "^7.0.8", "@semantic-release/npm": "^5.1.4", "@semantic-release/release-notes-generator": "^7.1.4", - "babel-core": "^6.26.3", - "babel-plugin-external-helpers": "^6.22.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-plugin-transform-runtime": "^6.23.0", - "babel-preset-env": "^1.7.0", - "babel-runtime": "^6.26.0", "chai": "^4.2.0", "chai-as-promised": "^7.1.1", "coveralls": "^3.0.2", @@ -63,7 +54,6 @@ "eslint-plugin-promise": "^4.0.1", "eslint-plugin-standard": "^4.0.0", "express": "^4.16.4", - "http-server": "^0.11.1", "jsdom": "^13.2.0", "mocha": "^5.2.0", "mock-fs": "^4.7.0", @@ -71,14 +61,15 @@ "regenerator-runtime": "^0.12.1", "rollup": "^1.1.2", "rollup-plugin-alias": "^1.5.1", - "rollup-plugin-babel": "^3.0.7", - "rollup-plugin-node-resolve": "^3.3.0", "rollup-plugin-shim": "^1.0.0", + "rollup-plugin-typescript2": "^0.19.2", "rollup-plugin-uglify": "^6.0.2", "semantic-release": "^15.13.3", "sinon": "^7.2.3", "sinon-chai": "^3.3.0", - "supertest": "^3.4.2" + "supertest": "^3.4.2", + "ts-node": "^8.0.2", + "typescript": "^3.3.3" }, "release": { "branch": "master", @@ -89,35 +80,5 @@ "@semantic-release/npm", "@semantic-release/git" ] - }, - "nyc": { - "require": [ - "babel-core/register" - ], - "sourceMap": false, - "instrument": false - }, - "babel": { - "presets": [ - "env" - ], - "plugins": [ - [ - "transform-runtime", - { - "helpers": false, - "polyfill": false, - "regenerator": true, - "moduleName": "babel-runtime" - } - ] - ], - "env": { - "test": { - "plugins": [ - "istanbul" - ] - } - } } } diff --git a/rollup.config.js b/rollup.config.js index 6dba30c16..8debbc147 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,9 +1,8 @@ import shim from 'rollup-plugin-shim' import alias from 'rollup-plugin-alias' -import babel from 'rollup-plugin-babel' import { uglify } from 'rollup-plugin-uglify' import pkg from './package.json' -import nodeResolve from 'rollup-plugin-node-resolve' +import typescript from 'rollup-plugin-typescript2' const fake = { fs: `export default {}`, path: `export default {}` } const version = process.env.VERSION || pkg.version @@ -16,12 +15,10 @@ const banner = `/* const treeshake = { propertyReadSideEffects: false } -const input = 'src/index.js' - -const babelConf = { - babelrc: false, - 'presets': [['env', { 'modules': false }]], - 'plugins': ['external-helpers'] +const input = 'src/index.ts' +const tsOptions = { + include: [ '*.ts', '**/*.ts', '*.js', '**/*.js' ], + tsconfigOverride: { compilerOptions: { module: 'ES2015' } } } export default [{ @@ -33,10 +30,7 @@ export default [{ banner }], external: ['path', 'fs'], - plugins: [ - nodeResolve(), - babel(babelConf) - ], + plugins: [typescript(tsOptions)], treeshake, input }, { @@ -49,11 +43,8 @@ export default [{ }], plugins: [ shim(fake), - alias({ - './template': './template-browser' - }), - nodeResolve(), - babel(babelConf) + alias({ './template': './template-browser' }), + typescript(tsOptions) ], treeshake, input @@ -66,8 +57,8 @@ export default [{ }], plugins: [ shim(fake), - nodeResolve(), - babel(babelConf), + alias({ './template': './template-browser' }), + typescript(tsOptions), uglify() ], treeshake, diff --git a/src/filter.js b/src/filter.js index c6b45f078..fbb2a0e67 100644 --- a/src/filter.js +++ b/src/filter.js @@ -1,7 +1,7 @@ -import * as lexical from './lexical.js' -import { evalValue } from './syntax.js' -import assert from './util/assert.js' -import { assign, create } from './util/underscore.js' +import * as lexical from './lexical' +import { evalValue } from './syntax' +import assert from './util/assert' +import { assign, create } from './util/underscore' const valueRE = new RegExp(`${lexical.value.source}`, 'g') diff --git a/src/filters.js b/src/filters.js index a5fadafca..7eae2d484 100644 --- a/src/filters.js +++ b/src/filters.js @@ -1,6 +1,6 @@ -import strftime from './util/strftime.js' -import * as _ from './util/underscore.js' -import { isTruthy } from './syntax.js' +import strftime from './util/strftime' +import * as _ from './util/underscore' +import { isTruthy } from './syntax' const escapeMap = { '&': '&', @@ -132,7 +132,7 @@ function isValidDate (date) { return date instanceof Date && !isNaN(date.getTime()) } -export default function registerAll (liquid) { +export default function registerAll (liquid, Liquid) { return _.forOwn(filters, (func, name) => liquid.registerFilter(name, func)) } diff --git a/src/index.d.ts b/src/index.d.ts deleted file mode 100644 index 26c7195cd..000000000 --- a/src/index.d.ts +++ /dev/null @@ -1,69 +0,0 @@ -export as namespace Liquid; - -export function isTruthy(val: any): boolean; -export function isFalsy(val: any): boolean; -export function evalExp(exp: string, scope: any): any; -export function evalValue(str: string, scope: any): any; - -export default class Liquid { - constructor(options?: Options); - private init(tag, filter, options): Liquid; - private respectCache(key, getter): Promise - parse(html: string, filepath?: string): Liquid.Template - render(tpl: Template, ctx: any, opts?: Options): Promise - parseAndRender(html: string, ctx: any, opts?: Options): Promise - renderFile(file: string, ctx: any, opts?: Options): Promise - getTemplate(file: string, root: string): Promise - registerFilter(name: string, filter: Filter): void - registerTag(name: string, tag: Tag): void - express(opts: Options): any -} - -export interface Options { - /** `root` is a directory or an array of directories to resolve layouts and includes, as well as the filename passed in when calling `.renderFile()`. If an array, the files are looked up in the order they occur in the array. Defaults to `["."]`*/ - root?: string | string[] - /** `extname` is used to lookup the template file when filepath doesn't include an extension name. Eg: setting to `".html"` will allow including file by basename. Defaults to `""`. */ - extname?: string - /** `cache` indicates whether or not to cache resolved templates. Defaults to `false`. */ - cache?: boolean - /** `dynamicPartials`: if set, treat `` parameter in `{%include filepath %}`, `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */ - dynamicPartials?: boolean - /** `strict_filters` is used to enable strict filter existence. If set to `false`, undefined filters will be rendered as empty string. Otherwise, undefined filters will cause an exception. Defaults to `false`. */ - strict_filters?: boolean - /** `trim_tag_right` is used to strip blank characters (including ` `, `\t`, and `\r`) from the right of tags (`{% %}`) until `\n` (inclusive). Defaults to `false`. */ - trim_tag_right?: boolean - /** `trim_tag_left` is similar to `trim_tag_right`, whereas the `\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */ - trim_tag_left?: boolean - /** ``trim_value_right` is used to strip blank characters (including ` `, `\t`, and `\r`) from the right of values (`{{ }}`) until `\n` (inclusive). Defaults to `false`. */ - trim_value_right?: boolean - /** `trim_value_left` is similar to `trim_value_right`, whereas the `\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */ - trim_value_left?: boolean - /** `greedy` is used to specify whether `trim_left`/`trim_right` is greedy. When set to `true`, all consecutive blank characters including `\n` will be trimed regardless of line breaks. Defaults to `true`. */ - greedy?: boolean -} - -export interface Template { } - -export interface Tag { - parse(this: any, tagToken: any, remainTokens: any): void - render(this: any, scope: any, hash: any): void -} -export type Filter = (...args: any) => string - -declare namespace Types { - class LiquidError extends Error { - input: string - line: number - file: string - } - class ParseError extends LiquidError { - originalError: Error - } - class TokenizationError extends LiquidError {} - class RenderBreakError extends LiquidError {} - class AssertionError extends LiquidError {} - class AssignScope {} - class CaptureScope {} - class IncrementScope {} - class DecrementScope {} -} diff --git a/src/index.js b/src/index.ts similarity index 86% rename from src/index.js rename to src/index.ts index 193545d22..2e857f007 100644 --- a/src/index.js +++ b/src/index.ts @@ -1,17 +1,16 @@ -import 'regenerator-runtime/runtime' -import * as Scope from './scope' +import Scope from './scope' import * as template from './template' -import * as _ from './util/underscore.js' -import assert from './util/assert.js' -import * as tokenizer from './tokenizer.js' -import Render from './render.js' -import Tag from './tag.js' -import Filter from './filter.js' +import * as _ from './util/underscore' +import assert from './util/assert' +import * as tokenizer from './tokenizer' +import Render from './render' +import Tag from './tag' +import Filter from './filter' import Parser from './parser' -import { isTruthy, isFalsy, evalExp, evalValue } from './syntax.js' -import { ParseError, TokenizationError, RenderBreakError, AssertionError } from './util/error.js' -import tags from './tags/index.js' -import filters from './filters.js' +import { isTruthy, isFalsy, evalExp, evalValue } from './syntax' +import { ParseError, TokenizationError, RenderBreakError, AssertionError } from './util/error' +import tags from './tags/index' +import filters from './filters' const _engine = { init: function (tag, filter, options) { @@ -35,7 +34,7 @@ const _engine = { }, render: function (tpl, ctx, opts) { opts = _.assign({}, this.options, opts) - const scope = Scope.factory(ctx, opts) + const scope = new Scope(ctx, opts) return this.renderer.renderTemplates(tpl, scope) }, parseAndRender: async function (html, ctx, opts) { diff --git a/src/parser.js b/src/parser.ts similarity index 82% rename from src/parser.js rename to src/parser.ts index 4fa32cbd6..7d7862bf8 100644 --- a/src/parser.js +++ b/src/parser.ts @@ -1,27 +1,28 @@ -import * as lexical from './lexical.js' -import { create } from './util/underscore.js' -import { ParseError } from './util/error.js' -import assert from './util/assert.js' +import * as lexical from './lexical' +import { ParseError } from './util/error' +import assert from './util/assert' export default function (Tag, Filter) { - const stream = { - init: function (tokens) { + class ParseStream { + tokens: Array + handlers: object + stopRequested: boolean + constructor (tokens) { this.tokens = tokens this.handlers = {} - return this - }, - on: function (name, cb) { + } + on (name, cb) { this.handlers[name] = cb return this - }, - trigger: function (event, arg) { + } + trigger (event: string, arg?: any) { const h = this.handlers[event] if (typeof h === 'function') { h(arg) return true } - }, - start: function () { + } + start () { this.trigger('start') let token while (!this.stopRequested && (token = this.tokens.shift())) { @@ -35,8 +36,8 @@ export default function (Tag, Filter) { } if (!this.stopRequested) this.trigger('end') return this - }, - stop: function () { + } + stop () { this.stopRequested = true return this } @@ -93,8 +94,7 @@ export default function (Tag, Filter) { } function parseStream (tokens) { - const s = create(stream) - return s.init(tokens) + return new ParseStream(tokens) } return { diff --git a/src/render.js b/src/render.js index 06d1cbf2e..16b90e1c9 100644 --- a/src/render.js +++ b/src/render.js @@ -1,7 +1,7 @@ -import { evalExp } from './syntax.js' -import { RenderBreakError, RenderError } from './util/error.js' -import { stringify, create } from './util/underscore.js' -import assert from './util/assert.js' +import { evalExp } from './syntax' +import { RenderBreakError, RenderError } from './util/error' +import { stringify, create } from './util/underscore' +import assert from './util/assert' const render = { renderTemplates: async function (templates, scope) { @@ -16,7 +16,7 @@ const render = { e.resolvedHTML = html throw e } - throw new RenderError(e, tpl) + throw e instanceof RenderError ? e : new RenderError(e, tpl) } } return html diff --git a/src/scope.js b/src/scope.ts similarity index 81% rename from src/scope.js rename to src/scope.ts index f343c3456..7757e9331 100644 --- a/src/scope.js +++ b/src/scope.ts @@ -1,17 +1,38 @@ -import * as _ from './util/underscore.js' -import * as lexical from './lexical.js' -import assert from './util/assert.js' +import * as _ from './util/underscore' +import * as lexical from './lexical' +import assert from './util/assert' -const Scope = { - getAll: function () { +interface ScopeOptions { + dynamicPartials: boolean + strict_variables: boolean + strict_filters: boolean + blocks: object + root: Array +} + +export default class Scope { + opts: ScopeOptions + contexts: Array + constructor (ctx = {}, opts?: any) { + const defaultOptions: ScopeOptions = { + dynamicPartials: true, + strict_variables: false, + strict_filters: false, + blocks: {}, + root: [] + } + this.opts = _.assign(defaultOptions, opts) + this.contexts = [ctx || {}] + } + getAll () { return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null)) - }, - get: function (path) { + } + get (path) { const paths = this.propertyAccessSeq(path) const scope = this.findContextFor(paths[0]) || _.last(this.contexts) return paths.reduce((value, key) => this.readProperty(value, key), scope) - }, - set: function (path, v) { + } + set (path, v) { const paths = this.propertyAccessSeq(path) let scope = this.findContextFor(paths[0]) || _.last(this.contexts) paths.some((key, i) => { @@ -27,14 +48,14 @@ const Scope = { } scope = scope[key] }) - }, - unshift: function (ctx) { + } + unshift (ctx) { return this.contexts.unshift(ctx) - }, - push: function (ctx) { + } + push (ctx) { return this.contexts.push(ctx) - }, - pop: function (ctx) { + } + pop (ctx) { if (!arguments.length) { return this.contexts.pop() } @@ -43,9 +64,8 @@ const Scope = { throw new TypeError('scope not found, cannot pop') } return this.contexts.splice(i, 1)[0] - }, - findContextFor: function (key, filter) { - filter = filter || (() => true) + } + findContextFor (key, filter = (arg => true)) { for (let i = this.contexts.length - 1; i >= 0; i--) { const candidate = this.contexts[i] if (!filter(candidate)) continue @@ -54,8 +74,8 @@ const Scope = { } } return null - }, - readProperty: function (obj, key) { + } + readProperty (obj, key) { let val if (_.isNil(obj)) { val = undefined @@ -70,7 +90,7 @@ const Scope = { throw new TypeError(`undefined variable: ${key}`) } return val - }, + } /* * Parse property access sequence from access string @@ -80,7 +100,7 @@ const Scope = { * accessSeq("foo['b]r']") // ['foo', 'b]r'] * accessSeq("foo[bar.coo]") // ['foo', 'bar'], for bar.coo == 'bar' */ - propertyAccessSeq: function (str) { + propertyAccessSeq (str) { str = String(str) const seq = [] let name = '' @@ -163,17 +183,3 @@ function matchRightBracket (str, begin) { } return -1 } - -export function factory (ctx, opts) { - const defaultOptions = { - dynamicPartials: true, - strict_variables: false, - strict_filters: false, - blocks: {}, - root: [] - } - const scope = _.create(Scope) - scope.opts = _.assign(defaultOptions, opts) - scope.contexts = [ctx || {}] - return scope -} diff --git a/src/syntax.js b/src/syntax.js index 78fd28505..65cd95826 100644 --- a/src/syntax.js +++ b/src/syntax.js @@ -1,6 +1,6 @@ -import Operators from './operators.js' -import * as lexical from './lexical.js' -import assert from './util/assert.js' +import Operators from './operators' +import * as lexical from './lexical' +import assert from './util/assert' const operators = Operators(isTruthy) diff --git a/src/tag.js b/src/tag.js index c0d52fe41..08e60c695 100644 --- a/src/tag.js +++ b/src/tag.js @@ -1,7 +1,7 @@ -import { hashCapture } from './lexical.js' -import { create } from './util/underscore.js' -import { evalValue } from './syntax.js' -import assert from './util/assert.js' +import { hashCapture } from './lexical' +import { create } from './util/underscore' +import { evalValue } from './syntax' +import assert from './util/assert' function hash (markup, scope) { const obj = {} diff --git a/src/tags/assign.js b/src/tags/assign.js index cfd5a9c3a..a8e3298f8 100644 --- a/src/tags/assign.js +++ b/src/tags/assign.js @@ -1,6 +1,6 @@ -import assert from '../util/assert.js' -import { identifier } from '../lexical.js' -import { create } from '../util/underscore.js' +import assert from '../util/assert' +import { identifier } from '../lexical' +import { create } from '../util/underscore' export default function (liquid, Liquid) { const re = new RegExp(`(${identifier.source})\\s*=([^]*)`) diff --git a/src/tags/capture.js b/src/tags/capture.js index b2e83f9c2..2fba98958 100644 --- a/src/tags/capture.js +++ b/src/tags/capture.js @@ -1,6 +1,6 @@ -import assert from '../util/assert.js' -import { create } from '../util/underscore.js' -import { identifier } from '../lexical.js' +import assert from '../util/assert' +import { create } from '../util/underscore' +import { identifier } from '../lexical' export default function (liquid, Liquid) { const re = new RegExp(`(${identifier.source})`) diff --git a/src/tags/cycle.js b/src/tags/cycle.js index 344ddd203..17c377688 100644 --- a/src/tags/cycle.js +++ b/src/tags/cycle.js @@ -1,5 +1,5 @@ -import assert from '../util/assert.js' -import { value as rValue } from '../lexical.js' +import assert from '../util/assert' +import { value as rValue } from '../lexical' export default function (liquid, Liquid) { const groupRE = new RegExp(`^(?:(${rValue.source})\\s*:\\s*)?(.*)$`) diff --git a/src/tags/decrement.js b/src/tags/decrement.js index 71a3edcf6..f696f53a5 100644 --- a/src/tags/decrement.js +++ b/src/tags/decrement.js @@ -1,6 +1,6 @@ -import { create } from '../util/underscore.js' -import assert from '../util/assert.js' -import { identifier } from '../lexical.js' +import { create } from '../util/underscore' +import assert from '../util/assert' +import { identifier } from '../lexical' export default function (liquid, Liquid) { const { CaptureScope, AssignScope, DecrementScope } = Liquid.Types diff --git a/src/tags/for.js b/src/tags/for.js index bcaa79d60..d14c436f9 100644 --- a/src/tags/for.js +++ b/src/tags/for.js @@ -1,7 +1,7 @@ -import { mapSeries } from '../util/promise.js' -import { isString, isObject, isArray } from '../util/underscore.js' -import assert from '../util/assert.js' -import { identifier, value, hash } from '../lexical.js' +import { mapSeries } from '../util/promise' +import { isString, isObject, isArray } from '../util/underscore' +import assert from '../util/assert' +import { identifier, value, hash } from '../lexical' export default function (liquid, Liquid) { const RenderBreakError = Liquid.Types.RenderBreakError diff --git a/src/tags/include.js b/src/tags/include.js index 0c456f3c6..af57801f5 100644 --- a/src/tags/include.js +++ b/src/tags/include.js @@ -1,5 +1,5 @@ -import assert from '../util/assert.js' -import { value, quotedLine } from '../lexical.js' +import assert from '../util/assert' +import { value, quotedLine } from '../lexical' const staticFileRE = /[^\s,]+/ diff --git a/src/tags/increment.js b/src/tags/increment.js index 526b99653..b8781865f 100644 --- a/src/tags/increment.js +++ b/src/tags/increment.js @@ -1,6 +1,6 @@ -import assert from '../util/assert.js' -import { create } from '../util/underscore.js' -import { identifier } from '../lexical.js' +import assert from '../util/assert' +import { create } from '../util/underscore' +import { identifier } from '../lexical' export default function (liquid, Liquid) { const { CaptureScope, AssignScope, IncrementScope } = Liquid.Types diff --git a/src/tags/index.js b/src/tags/index.js index ee9ed87f0..f07a6415e 100644 --- a/src/tags/index.js +++ b/src/tags/index.js @@ -1,17 +1,17 @@ -import For from './for.js' -import Assign from './assign.js' -import Capture from './capture.js' -import Case from './case.js' -import Comment from './comment.js' -import Include from './include.js' -import Decrement from './decrement.js' -import Cycle from './cycle.js' -import If from './if.js' -import Increment from './increment.js' -import Layout from './layout.js' -import Raw from './raw.js' -import Tablerow from './tablerow.js' -import Unless from './unless.js' +import For from './for' +import Assign from './assign' +import Capture from './capture' +import Case from './case' +import Comment from './comment' +import Include from './include' +import Decrement from './decrement' +import Cycle from './cycle' +import If from './if' +import Increment from './increment' +import Layout from './layout' +import Raw from './raw' +import Tablerow from './tablerow' +import Unless from './unless' export default function (engine, Liquid) { Assign(engine, Liquid) diff --git a/src/tags/layout.js b/src/tags/layout.js index c157ea332..694300ea7 100644 --- a/src/tags/layout.js +++ b/src/tags/layout.js @@ -1,5 +1,5 @@ -import assert from '../util/assert.js' -import { value as rValue } from '../lexical.js' +import assert from '../util/assert' +import { value as rValue } from '../lexical' /* * blockMode: diff --git a/src/tags/tablerow.js b/src/tags/tablerow.js index 1f3d1adbf..d41234318 100644 --- a/src/tags/tablerow.js +++ b/src/tags/tablerow.js @@ -1,6 +1,6 @@ -import { mapSeries } from '../util/promise.js' -import assert from '../util/assert.js' -import { identifier, value, hash } from '../lexical.js' +import { mapSeries } from '../util/promise' +import assert from '../util/assert' +import { identifier, value, hash } from '../lexical' export default function (liquid, Liquid) { const re = new RegExp(`^(${identifier.source})\\s+in\\s+` + diff --git a/src/template.js b/src/template.ts similarity index 82% rename from src/template.js rename to src/template.ts index bacb4f43e..f5edad4d7 100644 --- a/src/template.js +++ b/src/template.ts @@ -1,7 +1,7 @@ -import * as _ from './util/underscore.js' -import path from 'path' -import { anySeries } from './util/promise.js' -import fs from 'fs' +import * as _ from './util/underscore' +import * as path from 'path' +import { anySeries } from './util/promise' +import * as fs from 'fs' const statFileAsync = _.promisify(fs.stat) const readFileAsync = _.promisify(fs.readFile) diff --git a/src/tokenizer.js b/src/tokenizer.js index 5e3d84b88..f538e07ec 100644 --- a/src/tokenizer.js +++ b/src/tokenizer.js @@ -1,10 +1,10 @@ -import * as lexical from './lexical.js' -import { TokenizationError } from './util/error.js' -import * as _ from './util/underscore.js' -import assert from './util/assert.js' -import whiteSpaceCtrl from './whitespace-ctrl.js' +import * as lexical from './lexical' +import { TokenizationError } from './util/error' +import * as _ from './util/underscore' +import assert from './util/assert' +import whiteSpaceCtrl from './whitespace-ctrl' -export { default as whiteSpaceCtrl } from './whitespace-ctrl.js' +export { default as whiteSpaceCtrl } from './whitespace-ctrl' export function parse (input, file, options) { assert(_.isString(input), 'illegal input') diff --git a/src/util/assert.js b/src/util/assert.ts similarity index 54% rename from src/util/assert.js rename to src/util/assert.ts index 45df079e5..ed4c9ef19 100644 --- a/src/util/assert.js +++ b/src/util/assert.ts @@ -1,6 +1,6 @@ -import { AssertionError } from './error.js' +import { AssertionError } from './error' -export default function (predicate, message) { +export default function (predicate: any, message: string) { if (!predicate) { message = message || `expect ${predicate} to be true` throw new AssertionError(message) diff --git a/src/util/error.js b/src/util/error.js deleted file mode 100644 index 01b0cb747..000000000 --- a/src/util/error.js +++ /dev/null @@ -1,100 +0,0 @@ -import * as _ from './underscore.js' - -function initError () { - this.name = this.constructor.name - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor) - } -} - -function initLiquidError (err, token) { - initError.call(this) - - this.input = token.input - this.line = token.line - this.file = token.file - - const context = mkContext(token.input, token.line) - this.message = mkMessage(err.message, token) - this.stack = context + - '\n' + (this.stack || this.message) + - (err.stack ? '\nFrom ' + err.stack : '') -} - -export function TokenizationError (message, token) { - initLiquidError.call(this, { message: message }, token) -} -TokenizationError.prototype = _.create(Error.prototype) -TokenizationError.prototype.constructor = TokenizationError - -export function ParseError (e, token) { - _.assign(this, e) - this.originalError = e - - initLiquidError.call(this, e, token) -} -ParseError.prototype = _.create(Error.prototype) -ParseError.prototype.constructor = ParseError - -export function RenderError (e, tpl) { - // return the original render error - if (e instanceof RenderError) { - return e - } - _.assign(this, e) - this.originalError = e - - initLiquidError.call(this, e, tpl.token) -} -RenderError.prototype = _.create(Error.prototype) -RenderError.prototype.constructor = RenderError - -export function RenderBreakError (message) { - initError.call(this) - this.message = message + '' -} -RenderBreakError.prototype = _.create(Error.prototype) -RenderBreakError.prototype.constructor = RenderBreakError - -export function AssertionError (message) { - initError.call(this) - this.message = message + '' -} -AssertionError.prototype = _.create(Error.prototype) -AssertionError.prototype.constructor = AssertionError - -function mkContext (input, line) { - const lines = input.split('\n') - const begin = Math.max(line - 2, 1) - const end = Math.min(line + 3, lines.length) - - const context = _ - .range(begin, end + 1) - .map(l => [ - (l === line) ? '>> ' : ' ', - align(l, end), - '| ', - lines[l - 1] - ].join('')) - .join('\n') - - return context -} - -function align (n, max) { - const length = (max + '').length - const str = n + '' - const blank = Array(length - str.length).join(' ') - return blank + str -} - -function mkMessage (msg, token) { - msg = msg || '' - if (token.file) { - msg += ', file:' + token.file - } - if (token.line) { - msg += ', line:' + token.line - } - return msg -} diff --git a/src/util/error.ts b/src/util/error.ts new file mode 100644 index 000000000..a6ce02910 --- /dev/null +++ b/src/util/error.ts @@ -0,0 +1,120 @@ +import * as _ from './underscore' + +function captureStack () { + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor) + } +} + +abstract class LiquidError { + input: string + line: string + file: string + message: string + name: string + stack: string + token: any + originalError: any + constructor(err, token) { + this.input = token.input + this.line = token.line + this.file = token.file + this.originalError = err + this.token = token + } + captureStackTrace(obj) { + this.name = obj.constructor.name + + captureStack.call(obj) + const err = this.originalError + const context = mkContext(this.input, this.line) + this.message = mkMessage(err.message, this.token) + this.stack = context + + '\n' + (this.stack || this.message) + + (err.stack ? '\nFrom ' + err.stack : '') + } +} + +export class TokenizationError extends LiquidError { + constructor(message, token) { + super({message}, token) + super.captureStackTrace(this) + } +} +TokenizationError.prototype = _.create(Error.prototype) +TokenizationError.prototype.constructor = TokenizationError + +export class ParseError extends LiquidError { + constructor(err, token) { + super(err, token) + _.assign(this, err) + super.captureStackTrace(this) + } +} +ParseError.prototype = _.create(Error.prototype) +ParseError.prototype.constructor = ParseError + +export class RenderError extends LiquidError { + constructor(err, tpl) { + super(err, tpl.token) + _.assign(this, err) + super.captureStackTrace(this) + } +} +RenderError.prototype = _.create(Error.prototype) +RenderError.prototype.constructor = RenderError + +export class RenderBreakError { + message: string + constructor (message) { + captureStack.call(this) + this.message = message + '' + } +} +RenderBreakError.prototype = _.create(Error.prototype) +RenderBreakError.prototype.constructor = RenderBreakError + +export class AssertionError { + message: string + constructor (message) { + captureStack.call(this) + this.message = message + '' + } +} +AssertionError.prototype = _.create(Error.prototype) +AssertionError.prototype.constructor = AssertionError + +function mkContext (input, targetLine) { + const lines = input.split('\n') + const begin = Math.max(targetLine - 2, 1) + const end = Math.min(targetLine + 3, lines.length) + + const context = _ + .range(begin, end + 1) + .map(lineNumber => { + const indicator = (lineNumber === targetLine) ? '>> ' : ' ' + const num = padStart(String(end).length, lineNumber) + const text = lines[lineNumber - 1] + return `${indicator}${num}| ${text}` + }) + .join('\n') + + return context +} + +function mkMessage (msg, token) { + msg = msg || '' + if (token.file) { + msg += ', file:' + token.file + } + if (token.line) { + msg += ', line:' + token.line + } + return msg +} + +function padStart (length, str) { + str = String(str) + const blank = Array(length - str.length).join(' ') + return blank + str +} diff --git a/src/util/underscore.js b/src/util/underscore.ts similarity index 91% rename from src/util/underscore.js rename to src/util/underscore.ts index cb51feb46..c64ddf218 100644 --- a/src/util/underscore.js +++ b/src/util/underscore.ts @@ -15,9 +15,9 @@ export function isFunction (value) { } export function promisify (fn) { - return function () { + return function (...args) { return new Promise((resolve, reject) => { - fn(...arguments, (err, result) => { + fn(...args, (err, result) => { err ? reject(err) : resolve(result) }) }) @@ -96,11 +96,14 @@ export function forOwn (object, iteratee) { * @param {...Object} sources The source objects. * @return {Object} Returns object. */ -export function assign (object) { - object = isObject(object) ? object : {} - const srcs = Array.prototype.slice.call(arguments, 1) - srcs.forEach((src) => Object.assign(object, src)) - return object +export function assign (obj, ...srcs) { + obj = isObject(obj) ? obj : {} + srcs.forEach(src => binaryAssign(obj, src)) + return obj +} + +function binaryAssign(target, src) { + for(let key in src) if (src.hasOwnProperty(key)) target[key] = src[key] } export function last (arr) { @@ -139,7 +142,7 @@ export function isObject (value) { * Note that ranges that stop before they start are considered to be zero-length instead of * negative — if you'd like a negative range, use a negative step. */ -export function range (start, stop, step) { +export function range (start: number, stop: number, step?: number) { if (arguments.length === 1) { stop = start start = 0 diff --git a/src/whitespace-ctrl.js b/src/whitespace-ctrl.js index 949f6543d..26cc00a3e 100644 --- a/src/whitespace-ctrl.js +++ b/src/whitespace-ctrl.js @@ -1,4 +1,4 @@ -import { assign } from './util/underscore.js' +import { assign } from './util/underscore' export default function whiteSpaceCtrl (tokens, options) { options = assign({ greedy: true }, options) diff --git a/test/mocha.opts b/test/mocha.opts index f35656415..d88fe5ee2 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -1,2 +1,2 @@ ---require babel-core/register +--require ts-node/register --recursive diff --git a/test/unit/filter.js b/test/unit/filter.ts similarity index 94% rename from test/unit/filter.js rename to test/unit/filter.ts index ebba521b5..26725c7af 100644 --- a/test/unit/filter.js +++ b/test/unit/filter.ts @@ -1,8 +1,8 @@ -import chai from 'chai' -import sinon from 'sinon' -import sinonChai from 'sinon-chai' -import Filter from '../../src/filter.js' -import { factory as scopeFactory } from '../../src/scope.js' +import * as chai from 'chai' +import * as sinon from 'sinon' +import * as sinonChai from 'sinon-chai' +import Filter from '../../src/filter' +import { factory as scopeFactory } from '../../src/scope' chai.use(sinonChai) const expect = chai.expect diff --git a/test/unit/filters.js b/test/unit/filters.js index c508c3370..6de282b81 100644 --- a/test/unit/filters.js +++ b/test/unit/filters.js @@ -1,5 +1,5 @@ -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' +import * as chai from 'chai' +import * as chaiAsPromised from 'chai-as-promised' import Liquid from '../../src/index' chai.use(chaiAsPromised) @@ -130,7 +130,7 @@ describe('filters', function () { return test('{{ "Tetsuro Takara" | escape }}', 'Tetsuro Takara') }) it('should escape function', function () { - return test('{{ func | escape }}', 'function func() {}') + return test('{{ func | escape }}', 'function () { }') }) }) diff --git a/test/unit/index.js b/test/unit/index.js index 7c9efe674..53835e46a 100644 --- a/test/unit/index.js +++ b/test/unit/index.js @@ -1,6 +1,6 @@ -import Liquid from '../../src/index.js' -import mock from 'mock-fs' -import chai from 'chai' +import Liquid from '../../src/index' +import * as mock from 'mock-fs' +import * as chai from 'chai' const expect = chai.expect diff --git a/test/unit/options/cache.js b/test/unit/options/cache.js index 12dc679e8..9ee84ea11 100644 --- a/test/unit/options/cache.js +++ b/test/unit/options/cache.js @@ -1,7 +1,7 @@ -import chai from 'chai' -import mock from 'mock-fs' +import * as chai from 'chai' +import * as mock from 'mock-fs' import Liquid from '../../../src' -import chaiAsPromised from 'chai-as-promised' +import * as chaiAsPromised from 'chai-as-promised' const expect = chai.expect chai.use(chaiAsPromised) diff --git a/test/unit/options/strict.js b/test/unit/options/strict.js index a41559945..f34e6670e 100644 --- a/test/unit/options/strict.js +++ b/test/unit/options/strict.js @@ -1,5 +1,5 @@ import Liquid from '../../../src' -import chai from 'chai' +import * as chai from 'chai' const expect = chai.expect chai.use(require('chai-as-promised')) diff --git a/test/unit/options/trimming.js b/test/unit/options/trimming.js index c567280fc..7b27686e9 100644 --- a/test/unit/options/trimming.js +++ b/test/unit/options/trimming.js @@ -1,6 +1,6 @@ -import chai from 'chai' +import * as chai from 'chai' import Liquid from '../../../src' -import chaiAsPromised from 'chai-as-promised' +import * as chaiAsPromised from 'chai-as-promised' const expect = chai.expect chai.use(chaiAsPromised) diff --git a/test/unit/parser.js b/test/unit/parser.js index e2f5153dc..f8073e66d 100644 --- a/test/unit/parser.js +++ b/test/unit/parser.js @@ -1,8 +1,8 @@ -import chai from 'chai' -import sinonChai from 'sinon-chai' -import Filter from '../../src/filter.js' -import Tag from '../../src/tag.js' -import Template from '../../src/parser.js' +import * as chai from 'chai' +import * as sinonChai from 'sinon-chai' +import Filter from '../../src/filter' +import Tag from '../../src/tag' +import Template from '../../src/parser' const expect = chai.expect const filter = Filter() diff --git a/test/unit/render.js b/test/unit/render.js index 24aa442ac..8f3d03e88 100644 --- a/test/unit/render.js +++ b/test/unit/render.js @@ -1,12 +1,12 @@ -import chai from 'chai' -import chaiAsPromised from 'chai-as-promised' -import sinonChai from 'sinon-chai' -import sinon from 'sinon' -import Tag from '../../src/tag.js' -import { factory as scopeFactory } from '../../src/scope.js' +import * as chai from 'chai' +import * as chaiAsPromised from 'chai-as-promised' +import * as sinonChai from 'sinon-chai' +import * as sinon from 'sinon' +import Tag from '../../src/tag' +import Scope from '../../src/scope' import Filter from '../../src/filter' -import Render from '../../src/render.js' -import parser from '../../src/parser.js' +import Render from '../../src/render' +import parser from '../../src/parser' chai.use(sinonChai) chai.use(chaiAsPromised) @@ -30,21 +30,21 @@ describe('render', function () { }) it('should render html', function () { - const scope = scopeFactory({}) + const scope = new Scope() return expect(render.renderTemplates([{ type: 'html', value: '

' }], scope)).to.eventually.equal('

') }) }) describe('.renderValue()', function () { it('should respect to .to_liquid() method', function () { - const scope = scopeFactory({ + const scope = new Scope({ bar: { to_liquid: x => 'custom' } }) const tpl = Template.parseValue('bar') return expect(render.renderValue(tpl, scope)).to.eventually.equal('custom') }) it('should stringify objects', function () { - const scope = scopeFactory({ + const scope = new Scope({ foo: { obj: { arr: ['a', 2] } } }) const tpl = Template.parseValue('foo') @@ -54,29 +54,29 @@ describe('render', function () { const ctx = { foo: { num: 2 }, bar: 'bar' } ctx.foo.circular = ctx - const scope = scopeFactory(ctx) + const scope = new Scope(ctx) const tpl = Template.parseValue('foo') return expect(render.renderValue(tpl, scope)).to.eventually.equal('{"num":2,"circular":{"bar":"bar"}}') }) it('should skip function property', function () { - const scope = scopeFactory({ obj: { foo: 'foo', bar: x => x } }) + const scope = new Scope({ obj: { foo: 'foo', bar: x => x } }) const tpl = Template.parseValue('obj') return expect(render.renderValue(tpl, scope)).to.eventually.equal('{"foo":"foo"}') }) it('should respect to .toString()', async () => { - const scope = scopeFactory({ obj: { toString: () => 'FOO' } }) + const scope = new Scope({ obj: { toString: () => 'FOO' } }) const tpl = Template.parseValue('obj') const str = await render.renderValue(tpl, scope) return expect(str).to.equal('FOO') }) it('should respect to .to_s()', async () => { - const scope = scopeFactory({ obj: { to_s: () => 'FOO' } }) + const scope = new Scope({ obj: { to_s: () => 'FOO' } }) const tpl = Template.parseValue('obj') const str = await render.renderValue(tpl, scope) return expect(str).to.equal('FOO') }) it('should respect to .liquid_method_missing()', async () => { - const scope = scopeFactory({ obj: { liquid_method_missing: x => x.toUpperCase() } }) + const scope = new Scope({ obj: { liquid_method_missing: x => x.toUpperCase() } }) const tpl = Template.parseValue('obj.foo') const str = await render.renderValue(tpl, scope) return expect(str).to.equal('FOO') @@ -93,7 +93,7 @@ describe('render', function () { filter.register('date', (l, r) => l + r) filter.register('time', (l, r) => l + 3 * r) const tpl = Template.parseValue('foo.bar[0] | date: "b" | time:2') - const scope = scopeFactory({ + const scope = new Scope({ foo: { bar: ['a'] } }) expect(render.evalValue(tpl, scope)).to.equal('ab6') @@ -101,7 +101,7 @@ describe('render', function () { it('should reserve type', function () { filter.register('arr', () => [1]) const tpl = Template.parseValue('"x" | arr') - expect(render.evalValue(tpl, scopeFactory())).to.deep.equal([1]) + expect(render.evalValue(tpl, new Scope())).to.deep.equal([1]) }) it('should eval filter with correct arguments', function () { const date = sinon.stub().returns('y') @@ -109,7 +109,7 @@ describe('render', function () { filter.register('date', date) filter.register('time', time) const tpl = Template.parseValue('foo.bar | date: "b" | time:2') - const scope = scopeFactory({ + const scope = new Scope({ foo: { bar: 'bar' } }) render.evalValue(tpl, scope) diff --git a/test/unit/scope.js b/test/unit/scope.js index b41b269f2..296f1d586 100644 --- a/test/unit/scope.js +++ b/test/unit/scope.js @@ -1,5 +1,5 @@ -import chai from 'chai' -import { factory as scopeFactory } from '../../src/scope.js' +import * as chai from 'chai' +import Scope from '../../src/scope' const expect = chai.expect @@ -15,7 +15,7 @@ describe('scope', function () { arr: ['a', 'b'] } } - scope = scopeFactory(ctx) + scope = new Scope(ctx) }) describe('#propertyAccessSeq()', function () { @@ -97,7 +97,7 @@ describe('scope', function () { }) it('should respect to to_liquid', function () { - const scope = scopeFactory({ foo: { + const scope = new Scope({ foo: { to_liquid: () => ({ bar: 'BAR' }), bar: 'bar' } }) @@ -105,7 +105,7 @@ describe('scope', function () { }) it('should respect to toLiquid', function () { - const scope = scopeFactory({ foo: { + const scope = new Scope({ foo: { toLiquid: () => ({ bar: 'BAR' }), bar: 'bar' } }) @@ -171,7 +171,7 @@ describe('scope', function () { describe('strict_variables', function () { let scope beforeEach(function () { - scope = scopeFactory(ctx, { + scope = new Scope(ctx, { strict_variables: true }) }) diff --git a/test/unit/syntax.js b/test/unit/syntax.js index 0f091a368..07b149228 100644 --- a/test/unit/syntax.js +++ b/test/unit/syntax.js @@ -1,17 +1,12 @@ -const chai = require('chai') -const expect = chai.expect -const syntax = require('../../src/syntax.js') -const Scope = require('../../src/scope.js') - -const evalExp = syntax.evalExp -const evalValue = syntax.evalValue -const isTruthy = syntax.isTruthy +import Scope from '../../src/scope' +import { expect } from 'chai' +import { evalExp, evalValue, isTruthy } from '../../src/syntax' describe('expression', function () { let scope beforeEach(function () { - scope = Scope.factory({ + scope = new Scope({ one: 1, two: 2, empty: '', diff --git a/test/unit/tag.js b/test/unit/tag.js index 91fba7e05..d7d8ba2af 100644 --- a/test/unit/tag.js +++ b/test/unit/tag.js @@ -1,8 +1,8 @@ -import chai from 'chai' -import Tag from '../../src/tag.js' -import { factory as scopeFactory } from '../../src/scope.js' -import sinon from 'sinon' -import sinonChai from 'sinon-chai' +import * as chai from 'chai' +import Tag from '../../src/tag' +import Scope from '../../src/scope' +import * as sinon from 'sinon' +import * as sinonChai from 'sinon-chai' chai.use(sinonChai) const expect = chai.expect @@ -11,7 +11,7 @@ const tag = Tag() describe('tag', function () { let scope before(function () { - scope = scopeFactory({ + scope = new Scope({ foo: 'bar', arr: [2, 1], bar: { diff --git a/test/unit/tags/assign.js b/test/unit/tags/assign.js index a8d070bda..c0711453a 100644 --- a/test/unit/tags/assign.js +++ b/test/unit/tags/assign.js @@ -1,6 +1,6 @@ import Liquid from '../../../src' -import chai from 'chai' -import sinonChai from 'chai-as-promised' +import * as chai from 'chai' +import * as sinonChai from 'chai-as-promised' chai.use(sinonChai) const expect = chai.expect diff --git a/test/unit/tags/capture.js b/test/unit/tags/capture.js index a5c8d3c32..fa6951db0 100644 --- a/test/unit/tags/capture.js +++ b/test/unit/tags/capture.js @@ -1,5 +1,5 @@ import Liquid from '../../../src/index' -import chai from 'chai' +import * as chai from 'chai' const expect = chai.expect chai.use(require('chai-as-promised')) diff --git a/test/unit/tags/case.js b/test/unit/tags/case.js index 2c00090a5..e07af9972 100644 --- a/test/unit/tags/case.js +++ b/test/unit/tags/case.js @@ -1,5 +1,5 @@ import Liquid from '../../../src' -import chai from 'chai' +import * as chai from 'chai' const expect = chai.expect chai.use(require('chai-as-promised')) diff --git a/test/unit/tags/comment.js b/test/unit/tags/comment.js index effe36c95..bdcb55238 100644 --- a/test/unit/tags/comment.js +++ b/test/unit/tags/comment.js @@ -1,5 +1,5 @@ import Liquid from '../../../src' -import chai from 'chai' +import * as chai from 'chai' const expect = chai.expect chai.use(require('chai-as-promised')) diff --git a/test/unit/tags/cycle.js b/test/unit/tags/cycle.js index 404477893..f82038cfd 100644 --- a/test/unit/tags/cycle.js +++ b/test/unit/tags/cycle.js @@ -1,5 +1,5 @@ import Liquid from '../../../src' -import chai from 'chai' +import * as chai from 'chai' const expect = chai.expect chai.use(require('chai-as-promised')) diff --git a/test/unit/tags/decrement.js b/test/unit/tags/decrement.js index eb1abff7e..9e4ff627e 100644 --- a/test/unit/tags/decrement.js +++ b/test/unit/tags/decrement.js @@ -1,5 +1,5 @@ import Liquid from '../../../src' -import chai from 'chai' +import * as chai from 'chai' const expect = chai.expect chai.use(require('chai-as-promised')) diff --git a/test/unit/tags/for.js b/test/unit/tags/for.js index a5f3c3db9..dfa8a8d82 100644 --- a/test/unit/tags/for.js +++ b/test/unit/tags/for.js @@ -1,5 +1,5 @@ import Liquid from '../../../src' -import chai from 'chai' +import * as chai from 'chai' const expect = chai.expect chai.use(require('chai-as-promised')) diff --git a/test/unit/tags/if.js b/test/unit/tags/if.js index d7c587766..99f8044b4 100644 --- a/test/unit/tags/if.js +++ b/test/unit/tags/if.js @@ -1,5 +1,5 @@ import Liquid from '../../../src/index' -import chai from 'chai' +import * as chai from 'chai' const expect = chai.expect chai.use(require('chai-as-promised')) diff --git a/test/unit/tags/include.js b/test/unit/tags/include.js index 2abbdb3be..5d3b716d1 100644 --- a/test/unit/tags/include.js +++ b/test/unit/tags/include.js @@ -1,6 +1,6 @@ import Liquid from '../../../src' -import mock from 'mock-fs' -import chai from 'chai' +import * as mock from 'mock-fs' +import * as chai from 'chai' const expect = chai.expect chai.use(require('chai-as-promised')) diff --git a/test/unit/tags/increment.js b/test/unit/tags/increment.js index 156c62f7c..7a06eb0d7 100644 --- a/test/unit/tags/increment.js +++ b/test/unit/tags/increment.js @@ -1,5 +1,5 @@ import Liquid from '../../../src' -import chai from 'chai' +import * as chai from 'chai' const expect = chai.expect chai.use(require('chai-as-promised')) diff --git a/test/unit/tags/layout.js b/test/unit/tags/layout.js index 39d5bf471..13c0b88e9 100644 --- a/test/unit/tags/layout.js +++ b/test/unit/tags/layout.js @@ -1,6 +1,6 @@ import Liquid from '../../../src' -import mock from 'mock-fs' -import chai from 'chai' +import * as mock from 'mock-fs' +import * as chai from 'chai' const expect = chai.expect chai.use(require('chai-as-promised')) diff --git a/test/unit/tags/raw.js b/test/unit/tags/raw.js index 6e26a2d07..274b3dfaa 100644 --- a/test/unit/tags/raw.js +++ b/test/unit/tags/raw.js @@ -1,5 +1,5 @@ import Liquid from '../../../src' -import chai from 'chai' +import * as chai from 'chai' const expect = chai.expect chai.use(require('chai-as-promised')) diff --git a/test/unit/tags/tablerow.js b/test/unit/tags/tablerow.js index ef28e36bc..416417aef 100644 --- a/test/unit/tags/tablerow.js +++ b/test/unit/tags/tablerow.js @@ -1,5 +1,5 @@ import Liquid from '../../../src' -import chai from 'chai' +import * as chai from 'chai' const expect = chai.expect chai.use(require('chai-as-promised')) diff --git a/test/unit/tags/unless.js b/test/unit/tags/unless.js index 2316c19c0..7f5f58339 100644 --- a/test/unit/tags/unless.js +++ b/test/unit/tags/unless.js @@ -1,5 +1,5 @@ import Liquid from '../../../src' -import chai from 'chai' +import * as chai from 'chai' const expect = chai.expect chai.use(require('chai-as-promised')) diff --git a/test/unit/template-browser.js b/test/unit/template-browser.js index 436f8e102..e0c8aac07 100644 --- a/test/unit/template-browser.js +++ b/test/unit/template-browser.js @@ -1,5 +1,5 @@ -import { resolve } from '../../src/template-browser.js' -import chai from 'chai' +import { resolve } from '../../src/template-browser' +import * as chai from 'chai' const expect = chai.expect diff --git a/test/unit/template.js b/test/unit/template.js index d7228c042..a14fba626 100644 --- a/test/unit/template.js +++ b/test/unit/template.js @@ -1,8 +1,8 @@ -import { resolve } from '../../src/template.js' -import mock from 'mock-fs' -import chai from 'chai' -import path from 'path' -import chaiAsPromised from 'chai-as-promised' +import { resolve } from '../../src/template' +import * as mock from 'mock-fs' +import * as chai from 'chai' +import * as path from 'path' +import * as chaiAsPromised from 'chai-as-promised' const expect = chai.expect chai.use(chaiAsPromised) diff --git a/test/unit/util/assert.js b/test/unit/util/assert.js index 5a1ce6a25..046b06ed5 100644 --- a/test/unit/util/assert.js +++ b/test/unit/util/assert.js @@ -1,5 +1,5 @@ -import chai from 'chai' -import assert from '../../../src/util/assert.js' +import * as chai from 'chai' +import assert from '../../../src/util/assert' const expect = chai.expect diff --git a/test/unit/util/error.js b/test/unit/util/error.js index c444a46be..cae3bf946 100644 --- a/test/unit/util/error.js +++ b/test/unit/util/error.js @@ -1,7 +1,7 @@ import Liquid from '../../../src' -import mock from 'mock-fs' -import chai from 'chai' -import path from 'path' +import * as mock from 'mock-fs' +import * as chai from 'chai' +import * as path from 'path' const expect = chai.expect chai.use(require('chai-as-promised')) diff --git a/test/unit/util/strftime.js b/test/unit/util/strftime.js index 58fcee942..efc46a939 100644 --- a/test/unit/util/strftime.js +++ b/test/unit/util/strftime.js @@ -1,5 +1,5 @@ -import chai from 'chai' -import t from '../../../src/util/strftime.js' +import * as chai from 'chai' +import t from '../../../src/util/strftime' const expect = chai.expect diff --git a/test/unit/util/underscore.js b/test/unit/util/underscore.js index c4165c9b2..519bbdb87 100644 --- a/test/unit/util/underscore.js +++ b/test/unit/util/underscore.js @@ -1,8 +1,8 @@ -import chai from 'chai' -import sinonChai from 'sinon-chai' -import sinon from 'sinon' -import { RenderError, RenderBreakError } from '../../../src/util/error.js' -import * as _ from '../../../src/util/underscore.js' +import * as chai from 'chai' +import * as sinonChai from 'sinon-chai' +import * as sinon from 'sinon' +import { RenderError, RenderBreakError } from '../../../src/util/error' +import * as _ from '../../../src/util/underscore' const expect = chai.expect chai.use(sinonChai) diff --git a/test/unit/xhr.js b/test/unit/xhr.js index 8e637c2f2..1ed9f7ad4 100644 --- a/test/unit/xhr.js +++ b/test/unit/xhr.js @@ -1,6 +1,6 @@ -import { read } from '../../src/template-browser.js' -import sinon from 'sinon' -import chai from 'chai' +import { read } from '../../src/template-browser' +import * as sinon from 'sinon' +import * as chai from 'chai' chai.use(require('chai-as-promised')) diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..8bc88af0a --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "es5", + "module":"CommonJS", + "lib": ["es2015", "es2016", "es2017", "dom"], + "allowJs": true, + "sourceMap": true, + "allowSyntheticDefaultImports": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true + }, + "include": [ + "src" + ] +}