├── .gitignore
├── test
├── .eslintrc.json
├── parseString.test.js
├── getHashDigest.test.js
├── getOptions.test.js
├── parseQuery.test.js
├── urlToRequest.test.js
├── interpolateName.test.js
└── stringifyRequest.test.js
├── .travis.yml
├── lib
├── getCurrentRequest.js
├── getRemainingRequest.js
├── getOptions.js
├── parseString.js
├── isUrlRequest.js
├── index.js
├── parseQuery.js
├── stringifyRequest.js
├── urlToRequest.js
├── getHashDigest.js
└── interpolateName.js
├── .editorconfig
├── CHANGELOG.md
├── package.json
├── LICENSE
├── .eslintrc.json
├── README.md
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | coverage
3 |
--------------------------------------------------------------------------------
/test/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "mocha": true
4 | }
5 | }
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | sudo: false
2 | language: node_js
3 | node_js:
4 | - "4"
5 | - "6"
6 | - "7"
7 | script: npm run travis
8 |
9 | after_success: cat ./coverage/lcov.info | node_modules/.bin/coveralls --verbose && rm -rf ./coverage
10 |
--------------------------------------------------------------------------------
/lib/getCurrentRequest.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | function getCurrentRequest(loaderContext) {
4 | if(loaderContext.currentRequest)
5 | return loaderContext.currentRequest;
6 | const request = loaderContext.loaders
7 | .slice(loaderContext.loaderIndex)
8 | .map(obj => obj.request)
9 | .concat([loaderContext.resource]);
10 | return request.join("!");
11 | }
12 |
13 | module.exports = getCurrentRequest;
14 |
--------------------------------------------------------------------------------
/lib/getRemainingRequest.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | function getRemainingRequest(loaderContext) {
4 | if(loaderContext.remainingRequest)
5 | return loaderContext.remainingRequest;
6 | const request = loaderContext.loaders
7 | .slice(loaderContext.loaderIndex + 1)
8 | .map(obj => obj.request)
9 | .concat([loaderContext.resource]);
10 | return request.join("!");
11 | }
12 |
13 | module.exports = getRemainingRequest;
14 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = tab
5 | indent_size = 4
6 | charset = utf-8
7 | trim_trailing_whitespace = true
8 | insert_final_newline = true
9 | max_line_length = 233
10 |
11 | [*.json]
12 | indent_style = space
13 | indent_size = 2
14 |
15 | [*.yml]
16 | indent_style = space
17 | indent_size = 2
18 |
19 | [test/cases/parsing/bom/bomfile.{css,js}]
20 | charset = utf-8-bom
21 |
22 | [*.md]
23 | trim_trailing_whitespace = false
24 |
--------------------------------------------------------------------------------
/lib/getOptions.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const parseQuery = require("./parseQuery");
4 |
5 | function getOptions(loaderContext) {
6 | const query = loaderContext.query;
7 | if(typeof query === "string" && query !== "") {
8 | return parseQuery(loaderContext.query);
9 | }
10 | if(!query || typeof query !== "object") {
11 | // Not object-like queries are not supported.
12 | return null;
13 | }
14 | return query;
15 | }
16 |
17 | module.exports = getOptions;
18 |
--------------------------------------------------------------------------------
/lib/parseString.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | function parseString(str) {
4 | try {
5 | if(str[0] === "\"") return JSON.parse(str);
6 | if(str[0] === "'" && str.substr(str.length - 1) === "'") {
7 | return parseString(
8 | str
9 | .replace(/\\.|"/g, x => x === "\"" ? "\\\"" : x)
10 | .replace(/^'|'$/g, "\"")
11 | );
12 | }
13 | return JSON.parse("\"" + str + "\"");
14 | } catch(e) {
15 | return str;
16 | }
17 | }
18 |
19 | module.exports = parseString;
20 |
--------------------------------------------------------------------------------
/lib/isUrlRequest.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | function isUrlRequest(url, root) {
4 | // An URL is not an request if
5 | // 1. it's a Data Url
6 | // 2. it's an absolute url or and protocol-relative
7 | // 3. it's some kind of url for a template
8 | if(/^data:|^chrome-extension:|^(https?:)?\/\/|^[\{\}\[\]#*;,'§\$%&\(=?`´\^°<>]/.test(url)) return false;
9 | // 4. It's also not an request if root isn't set and it's a root-relative url
10 | if((root === undefined || root === false) && /^\//.test(url)) return false;
11 | return true;
12 | }
13 |
14 | module.exports = isUrlRequest;
15 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4 |
5 |
6 | # [1.1.0](https://github.com/webpack/loader-utils/compare/v1.0.4...v1.1.0) (2017-03-16)
7 |
8 |
9 | ### Features
10 |
11 | * **automatic-release:** Generation of automatic release ([7484d13](https://github.com/webpack/loader-utils/commit/7484d13))
12 | * **parseQuery:** export parseQuery ([ddf64e4](https://github.com/webpack/loader-utils/commit/ddf64e4))
13 |
--------------------------------------------------------------------------------
/test/parseString.test.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const assert = require("assert");
4 | const loaderUtils = require("../");
5 |
6 | describe("parseString()", () => {
7 | [
8 | ["test string", "test string"],
9 | [JSON.stringify("!\"§$%&/()=?'*#+,.-;öäü:_test"), "!\"§$%&/()=?'*#+,.-;öäü:_test"],
10 | ["'escaped with single \"'", "escaped with single \""],
11 | ["invalid \"' string", "invalid \"' string"],
12 | ["\'inconsistent start and end\"", "\'inconsistent start and end\""]
13 | ].forEach(test => {
14 | it("should parse " + test[0], () => {
15 | const parsed = loaderUtils.parseString(test[0]);
16 | assert.equal(parsed, test[1]);
17 | });
18 | });
19 | });
20 |
--------------------------------------------------------------------------------
/test/getHashDigest.test.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const assert = require("assert");
4 | const loaderUtils = require("../");
5 |
6 | describe("getHashDigest()", () => {
7 | [
8 | ["test string", "md5", "hex", undefined, "6f8db599de986fab7a21625b7916589c"],
9 | ["test string", "md5", "hex", 4, "6f8d"],
10 | ["test string", "md5", "base64", undefined, "2sm1pVmS8xuGJLCdWpJoRL"],
11 | ["test string", "md5", "base52", undefined, "dJnldHSAutqUacjgfBQGLQx"],
12 | ["test string", "md5", "base26", 6, "bhtsgu"],
13 | ["test string", "sha512", "base64", undefined, "2IS-kbfIPnVflXb9CzgoNESGCkvkb0urMmucPD9z8q6HuYz8RShY1-tzSUpm5-Ivx_u4H1MEzPgAhyhaZ7RKog"],
14 | ["test string", "md5", "hex", undefined, "6f8db599de986fab7a21625b7916589c"]
15 | ].forEach(test => {
16 | it("should getHashDigest " + test[0] + " " + test[1] + " " + test[2] + " " + test[3], () => {
17 | const hashDigest = loaderUtils.getHashDigest(test[0], test[1], test[2], test[3]);
18 | assert.equal(hashDigest, test[4]);
19 | });
20 | });
21 | });
22 |
--------------------------------------------------------------------------------
/lib/index.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const getOptions = require("./getOptions");
4 | const parseQuery = require("./parseQuery");
5 | const stringifyRequest = require("./stringifyRequest");
6 | const getRemainingRequest = require("./getRemainingRequest");
7 | const getCurrentRequest = require("./getCurrentRequest");
8 | const isUrlRequest = require("./isUrlRequest");
9 | const urlToRequest = require("./urlToRequest");
10 | const parseString = require("./parseString");
11 | const getHashDigest = require("./getHashDigest");
12 | const interpolateName = require("./interpolateName");
13 |
14 | exports.getOptions = getOptions;
15 | exports.parseQuery = parseQuery;
16 | exports.stringifyRequest = stringifyRequest;
17 | exports.getRemainingRequest = getRemainingRequest;
18 | exports.getCurrentRequest = getCurrentRequest;
19 | exports.isUrlRequest = isUrlRequest;
20 | exports.urlToRequest = urlToRequest;
21 | exports.parseString = parseString;
22 | exports.getHashDigest = getHashDigest;
23 | exports.interpolateName = interpolateName;
24 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "loader-utils",
3 | "version": "1.1.0",
4 | "author": "Tobias Koppers @sokra",
5 | "description": "utils for webpack loaders",
6 | "dependencies": {
7 | "big.js": "^3.1.3",
8 | "emojis-list": "^2.0.0",
9 | "json5": "^0.5.0"
10 | },
11 | "scripts": {
12 | "test": "mocha",
13 | "posttest": "npm run lint",
14 | "lint": "eslint lib test",
15 | "travis": "npm run cover -- --report lcovonly",
16 | "cover": "istanbul cover -x *.runtime.js node_modules/mocha/bin/_mocha",
17 | "release": "npm test && standard-version"
18 | },
19 | "license": "MIT",
20 | "repository": {
21 | "type": "git",
22 | "url": "https://github.com/webpack/loader-utils.git"
23 | },
24 | "engines": {
25 | "node": ">=4.0.0"
26 | },
27 | "devDependencies": {
28 | "coveralls": "^2.11.2",
29 | "eslint": "^3.15.0",
30 | "eslint-plugin-node": "^4.0.1",
31 | "istanbul": "^0.3.14",
32 | "mocha": "^1.21.4",
33 | "standard-version": "^4.0.0"
34 | },
35 | "main": "lib/index.js",
36 | "files": [
37 | "lib"
38 | ]
39 | }
40 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright JS Foundation and other contributors
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | 'Software'), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/lib/parseQuery.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const JSON5 = require("json5");
4 |
5 | const specialValues = {
6 | "null": null,
7 | "true": true,
8 | "false": false
9 | };
10 |
11 | function parseQuery(query) {
12 | if(query.substr(0, 1) !== "?") {
13 | throw new Error("A valid query string passed to parseQuery should begin with '?'");
14 | }
15 | query = query.substr(1);
16 | if(!query) {
17 | return {};
18 | }
19 | if(query.substr(0, 1) === "{" && query.substr(-1) === "}") {
20 | return JSON5.parse(query);
21 | }
22 | const queryArgs = query.split(/[,&]/g);
23 | const result = {};
24 | queryArgs.forEach(arg => {
25 | const idx = arg.indexOf("=");
26 | if(idx >= 0) {
27 | let name = arg.substr(0, idx);
28 | let value = decodeURIComponent(arg.substr(idx + 1));
29 | if(specialValues.hasOwnProperty(value)) {
30 | value = specialValues[value];
31 | }
32 | if(name.substr(-2) === "[]") {
33 | name = decodeURIComponent(name.substr(0, name.length - 2));
34 | if(!Array.isArray(result[name]))
35 | result[name] = [];
36 | result[name].push(value);
37 | } else {
38 | name = decodeURIComponent(name);
39 | result[name] = value;
40 | }
41 | } else {
42 | if(arg.substr(0, 1) === "-") {
43 | result[decodeURIComponent(arg.substr(1))] = false;
44 | } else if(arg.substr(0, 1) === "+") {
45 | result[decodeURIComponent(arg.substr(1))] = true;
46 | } else {
47 | result[decodeURIComponent(arg)] = true;
48 | }
49 | }
50 | });
51 | return result;
52 | }
53 |
54 | module.exports = parseQuery;
55 |
--------------------------------------------------------------------------------
/lib/stringifyRequest.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const path = require("path");
4 |
5 | const matchRelativePath = /^\.\.?[/\\]/;
6 |
7 | function isAbsolutePath(str) {
8 | return path.posix.isAbsolute(str) || path.win32.isAbsolute(str);
9 | }
10 |
11 | function isRelativePath(str) {
12 | return matchRelativePath.test(str);
13 | }
14 |
15 | function stringifyRequest(loaderContext, request) {
16 | const splitted = request.split("!");
17 | const context = loaderContext.context || (loaderContext.options && loaderContext.options.context);
18 | return JSON.stringify(splitted.map(part => {
19 | // First, separate singlePath from query, because the query might contain paths again
20 | const splittedPart = part.match(/^(.*?)(\?.*)/);
21 | let singlePath = splittedPart ? splittedPart[1] : part;
22 | const query = splittedPart ? splittedPart[2] : "";
23 | if(isAbsolutePath(singlePath) && context) {
24 | singlePath = path.relative(context, singlePath);
25 | if(isAbsolutePath(singlePath)) {
26 | // If singlePath still matches an absolute path, singlePath was on a different drive than context.
27 | // In this case, we leave the path platform-specific without replacing any separators.
28 | // @see https://github.com/webpack/loader-utils/pull/14
29 | return singlePath + query;
30 | }
31 | if(isRelativePath(singlePath) === false) {
32 | // Ensure that the relative path starts at least with ./ otherwise it would be a request into the modules directory (like node_modules).
33 | singlePath = "./" + singlePath;
34 | }
35 | }
36 | return singlePath.replace(/\\/g, "/") + query;
37 | }).join("!"));
38 | }
39 |
40 | module.exports = stringifyRequest;
41 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "plugins": ["node"],
4 | "extends": ["eslint:recommended", "plugin:node/recommended"],
5 | "env": {
6 | "node": true
7 | },
8 | "rules": {
9 | "quotes": ["error", "double"],
10 | "no-undef": "error",
11 | "no-extra-semi": "error",
12 | "semi": "error",
13 | "no-template-curly-in-string": "error",
14 | "no-caller": "error",
15 | "yoda": "error",
16 | "eqeqeq": "error",
17 | "global-require": "off",
18 | "brace-style": "error",
19 | "eol-last": "error",
20 | "indent": ["error", "tab", { "SwitchCase": 1 }],
21 | "no-extra-bind": "warn",
22 | "no-empty": "off",
23 | "no-multiple-empty-lines": "error",
24 | "no-multi-spaces": "error",
25 | "no-process-exit": "warn",
26 | "space-in-parens": "error",
27 | "no-trailing-spaces": "error",
28 | "no-use-before-define": "off",
29 | "no-unused-vars": ["error", {"args": "none"}],
30 | "key-spacing": "error",
31 | "space-infix-ops": "error",
32 | "no-unsafe-negation": "error",
33 | "no-loop-func": "warn",
34 | "space-before-function-paren": ["error", "never"],
35 | "space-before-blocks": "error",
36 | "object-curly-spacing": ["error", "always"],
37 | "keyword-spacing": ["error", {
38 | "after": false,
39 | "overrides": {
40 | "try": {"after": true},
41 | "else": {"after": true},
42 | "throw": {"after": true},
43 | "case": {"after": true},
44 | "return": {"after": true},
45 | "finally": {"after": true},
46 | "do": {"after": true}
47 | }
48 | }],
49 | "no-console": "off",
50 | "valid-jsdoc": "error",
51 | "no-var": "error",
52 | "prefer-const": "error",
53 | "prefer-arrow-callback": "error",
54 | "object-shorthand": "error"
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/lib/urlToRequest.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | // we can't use path.win32.isAbsolute because it also matches paths starting with a forward slash
4 | const matchNativeWin32Path = /^[A-Z]:[/\\]|^\\\\/i;
5 |
6 | function urlToRequest(url, root) {
7 | // Do not rewrite an empty url
8 | if(url === "") {
9 | return "";
10 | }
11 |
12 | const moduleRequestRegex = /^[^?]*~/;
13 | let request;
14 |
15 | if(matchNativeWin32Path.test(url)) {
16 | // absolute windows path, keep it
17 | request = url;
18 | } else if(root !== undefined && root !== false && /^\//.test(url)) {
19 | // if root is set and the url is root-relative
20 | switch(typeof root) {
21 | // 1. root is a string: root is prefixed to the url
22 | case "string":
23 | // special case: `~` roots convert to module request
24 | if(moduleRequestRegex.test(root)) {
25 | request = root.replace(/([^~\/])$/, "$1/") + url.slice(1);
26 | } else {
27 | request = root + url;
28 | }
29 | break;
30 | // 2. root is `true`: absolute paths are allowed
31 | // *nix only, windows-style absolute paths are always allowed as they doesn't start with a `/`
32 | case "boolean":
33 | request = url;
34 | break;
35 | default:
36 | throw new Error("Unexpected parameters to loader-utils 'urlToRequest': url = " + url + ", root = " + root + ".");
37 | }
38 | } else if(/^(?:https?:)?\/\//.test(url)) {
39 | // Preserve http and https urls
40 | request = url;
41 | } else if(/^\.\.?\//.test(url)) {
42 | // A relative url stays
43 | request = url;
44 | } else {
45 | // every other url is threaded like a relative url
46 | request = "./" + url;
47 | }
48 |
49 | // A `~` makes the url an module
50 | if(moduleRequestRegex.test(request)) {
51 | request = request.replace(moduleRequestRegex, "");
52 | }
53 |
54 | return request;
55 | }
56 |
57 | module.exports = urlToRequest;
58 |
--------------------------------------------------------------------------------
/lib/getHashDigest.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const baseEncodeTables = {
4 | 26: "abcdefghijklmnopqrstuvwxyz",
5 | 32: "123456789abcdefghjkmnpqrstuvwxyz", // no 0lio
6 | 36: "0123456789abcdefghijklmnopqrstuvwxyz",
7 | 49: "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ", // no lIO
8 | 52: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
9 | 58: "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ", // no 0lIO
10 | 62: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
11 | 64: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_"
12 | };
13 |
14 | function encodeBufferToBase(buffer, base) {
15 | const encodeTable = baseEncodeTables[base];
16 | if(!encodeTable) throw new Error("Unknown encoding base" + base);
17 |
18 | const readLength = buffer.length;
19 |
20 | const Big = require("big.js");
21 | Big.RM = Big.DP = 0;
22 | let b = new Big(0);
23 | for(let i = readLength - 1; i >= 0; i--) {
24 | b = b.times(256).plus(buffer[i]);
25 | }
26 |
27 | let output = "";
28 | while(b.gt(0)) {
29 | output = encodeTable[b.mod(base)] + output;
30 | b = b.div(base);
31 | }
32 |
33 | Big.DP = 20;
34 | Big.RM = 1;
35 |
36 | return output;
37 | }
38 |
39 | function getHashDigest(buffer, hashType, digestType, maxLength) {
40 | hashType = hashType || "md5";
41 | maxLength = maxLength || 9999;
42 | const hash = require("crypto").createHash(hashType);
43 | hash.update(buffer);
44 | if(digestType === "base26" || digestType === "base32" || digestType === "base36" ||
45 | digestType === "base49" || digestType === "base52" || digestType === "base58" ||
46 | digestType === "base62" || digestType === "base64") {
47 | return encodeBufferToBase(hash.digest(), digestType.substr(4)).substr(0, maxLength);
48 | } else {
49 | return hash.digest(digestType || "hex").substr(0, maxLength);
50 | }
51 | }
52 |
53 | module.exports = getHashDigest;
54 |
--------------------------------------------------------------------------------
/test/getOptions.test.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const assert = require("assert");
4 | const loaderUtils = require("../lib");
5 |
6 | describe("getOptions()", () => {
7 | describe("when loaderContext.query is a string with length > 0", () => {
8 | it("should call parseQuery() and return its result", () => {
9 | assert.deepEqual(
10 | loaderUtils.getOptions({
11 | query: "?something=getOptions_cannot_parse"
12 | }),
13 | { something: "getOptions_cannot_parse" }
14 | );
15 | });
16 | });
17 | describe("when loaderContext.query is an empty string", () => {
18 | it("should return null", () => {
19 | assert.strictEqual(
20 | loaderUtils.getOptions({
21 | query: ""
22 | }),
23 | null
24 | );
25 | });
26 | });
27 | describe("when loaderContext.query is an object", () => {
28 | it("should just return it", () => {
29 | const query = {};
30 | assert.strictEqual(
31 | loaderUtils.getOptions({
32 | query
33 | }),
34 | query
35 | );
36 | });
37 | });
38 | describe("when loaderContext.query is an array", () => {
39 | it("should just return it", () => {
40 | const query = [];
41 | assert.strictEqual(
42 | loaderUtils.getOptions({
43 | query
44 | }),
45 | query
46 | );
47 | });
48 | });
49 | describe("when loaderContext.query is anything else", () => {
50 | it("should return null", () => {
51 | assert.strictEqual(
52 | loaderUtils.getOptions({
53 | query: undefined
54 | }),
55 | null
56 | );
57 | assert.strictEqual(
58 | loaderUtils.getOptions({
59 | query: null
60 | }),
61 | null
62 | );
63 | assert.strictEqual(
64 | loaderUtils.getOptions({
65 | query: 1
66 | }),
67 | null
68 | );
69 | assert.strictEqual(
70 | loaderUtils.getOptions({
71 | query: 0
72 | }),
73 | null
74 | );
75 | });
76 | });
77 | });
78 |
--------------------------------------------------------------------------------
/test/parseQuery.test.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const assert = require("assert");
4 | const loaderUtils = require("../");
5 |
6 | describe("parseQuery()", () => {
7 | describe("when passed string is a query string starting with ?", () => {
8 | [{
9 | it: "should return an empty object by default",
10 | query: "?",
11 | expected: {}
12 | },
13 | {
14 | it: "should parse query params",
15 | query: "?name=cheesecake&slices=8&delicious&warm=false",
16 | expected: {
17 | delicious: true,
18 | name: "cheesecake",
19 | slices: "8", // numbers are still strings with query params
20 | warm: false
21 | }
22 | },
23 | {
24 | it: "should parse query params with arrays",
25 | query: "?ingredients[]=flour&ingredients[]=sugar",
26 | expected: {
27 | ingredients: ["flour", "sugar"]
28 | }
29 | },
30 | {
31 | it: "should parse query params in JSON format",
32 | query: "?" + JSON.stringify({
33 | delicious: true,
34 | name: "cheesecake",
35 | slices: 8,
36 | warm: false
37 | }),
38 | expected: {
39 | delicious: true,
40 | name: "cheesecake",
41 | slices: 8,
42 | warm: false
43 | }
44 | },
45 | {
46 | it: "should use decodeURIComponent",
47 | query: "?%3d",
48 | expected: { "=": true }
49 | },
50 | {
51 | it: "should recognize params starting with + as boolean params with the value true",
52 | query: "?+%3d",
53 | expected: { "=": true }
54 | },
55 | {
56 | it: "should recognize params starting with - as boolean params with the value false",
57 | query: "?-%3d",
58 | expected: { "=": false }
59 | },
60 | {
61 | it: "should not confuse regular equal signs and encoded equal signs",
62 | query: "?%3d=%3D",
63 | expected: { "=": "=" }
64 | }].forEach(test => {
65 | it(test.it, () => {
66 | assert.deepEqual(
67 | loaderUtils.parseQuery(test.query),
68 | test.expected
69 | );
70 | });
71 | });
72 | });
73 |
74 | describe("when passed string is any other string not starting with ?", () => {
75 | it("should throw an error", () => {
76 | assert.throws(
77 | () => loaderUtils.parseQuery("a"),
78 | "A valid query string passed to parseQuery should begin with '?'"
79 | );
80 | });
81 | });
82 |
83 | });
84 |
--------------------------------------------------------------------------------
/test/urlToRequest.test.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const assert = require("assert");
4 | const loaderUtils = require("../");
5 |
6 | function ExpectedError(regex) {
7 | this.regex = regex;
8 | }
9 | ExpectedError.prototype.matches = function(err) {
10 | return this.regex.test(err.message);
11 | };
12 |
13 | describe("urlToRequest()", () => {
14 | [
15 | // without root
16 | [["//google.com"], "//google.com", "should handle scheme-agnostic urls"],
17 | [["http://google.com"], "http://google.com", "should handle http urls"],
18 | [["https://google.com"], "https://google.com", "should handle https urls"],
19 | [["path/to/thing"], "./path/to/thing", "should handle implicit relative urls"],
20 | [["./path/to/thing"], "./path/to/thing", "should handle explicit relative urls"],
21 | [["~path/to/thing"], "path/to/thing", "should handle module urls (with ~)"],
22 | [["some/other/stuff/and/then~path/to/thing"], "path/to/thing", "should handle module urls with path prefix"],
23 | [["./some/other/stuff/and/then~path/to/thing"], "path/to/thing", "should handle module urls with relative path prefix"],
24 | // with root (normal path)
25 | [["path/to/thing", "root/dir"], "./path/to/thing", "should do nothing with root if implicit relative url"],
26 | [["./path/to/thing", "root/dir"], "./path/to/thing", "should do nothing with root if explicit relative url"],
27 | [["/path/to/thing", "root/dir"], "root/dir/path/to/thing", "should include root if root-relative url"],
28 | // with root (boolean)
29 | [["/path/to/thing", true], "/path/to/thing", "should allow root-relative to exist as-is if root = `true`"],
30 | // with root (boolean) on Windows
31 | [["C:\\path\\to\\thing"], "C:\\path\\to\\thing", "should handle Windows absolute paths with drive letter"],
32 | [["\\\\?\\UNC\\ComputerName\\path\\to\\thing"], "\\\\?\\UNC\\ComputerName\\path\\to\\thing", "should handle Windows absolute UNC paths"],
33 | // with root (module)
34 | [["/path/to/thing", "~"], "path/to/thing", "should convert to module url if root = ~"],
35 | // with root (module path)
36 | [["/path/to/thing", "~module"], "module/path/to/thing", "should allow module prefixes when root starts with ~"],
37 | [["/path/to/thing", "~module/"], "module/path/to/thing", "should allow module prefixes (with trailing slash) when root starts with ~"],
38 | // error cases
39 | [["/path/to/thing", 1], new ExpectedError(/unexpected parameters/i), "should throw an error on invalid root"],
40 | // difficult cases
41 | [["a:b-not-\\window-path"], "./a:b-not-\\window-path", "should not incorrectly detect windows paths"],
42 | // empty url
43 | [[""], "", "should do nothing if url is empty"]
44 | ].forEach((test) => {
45 | it(test[2], () => {
46 | const expected = test[1];
47 | try {
48 | const request = loaderUtils.urlToRequest.apply(loaderUtils, test[0]);
49 | assert.equal(request, expected);
50 | } catch(e) {
51 | if(expected instanceof ExpectedError) {
52 | assert.ok(expected.matches(e));
53 | } else {
54 | assert.ok(false, "should not have thrown an error: " + e.message);
55 | }
56 | }
57 | });
58 | });
59 | });
60 |
--------------------------------------------------------------------------------
/lib/interpolateName.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const path = require("path");
4 | const emojisList = require("emojis-list");
5 | const getHashDigest = require("./getHashDigest");
6 |
7 | const emojiRegex = /[\uD800-\uDFFF]./;
8 | const emojiList = emojisList.filter(emoji => emojiRegex.test(emoji));
9 | const emojiCache = {};
10 |
11 | function encodeStringToEmoji(content, length) {
12 | if(emojiCache[content]) return emojiCache[content];
13 | length = length || 1;
14 | const emojis = [];
15 | do {
16 | const index = Math.floor(Math.random() * emojiList.length);
17 | emojis.push(emojiList[index]);
18 | emojiList.splice(index, 1);
19 | } while(--length > 0);
20 | const emojiEncoding = emojis.join("");
21 | emojiCache[content] = emojiEncoding;
22 | return emojiEncoding;
23 | }
24 |
25 | function interpolateName(loaderContext, name, options) {
26 | let filename;
27 | if(typeof name === "function") {
28 | filename = name(loaderContext.resourcePath);
29 | } else {
30 | filename = name || "[hash].[ext]";
31 | }
32 | const context = options.context;
33 | const content = options.content;
34 | const regExp = options.regExp;
35 | let ext = "bin";
36 | let basename = "file";
37 | let directory = "";
38 | let folder = "";
39 | if(loaderContext.resourcePath) {
40 | const parsed = path.parse(loaderContext.resourcePath);
41 | let resourcePath = loaderContext.resourcePath;
42 |
43 | if(parsed.ext) {
44 | ext = parsed.ext.substr(1);
45 | }
46 | if(parsed.dir) {
47 | basename = parsed.name;
48 | resourcePath = parsed.dir + path.sep;
49 | }
50 | if(typeof context !== "undefined") {
51 | directory = path.relative(context, resourcePath + "_").replace(/\\/g, "/").replace(/\.\.(\/)?/g, "_$1");
52 | directory = directory.substr(0, directory.length - 1);
53 | } else {
54 | directory = resourcePath.replace(/\\/g, "/").replace(/\.\.(\/)?/g, "_$1");
55 | }
56 | if(directory.length === 1) {
57 | directory = "";
58 | } else if(directory.length > 1) {
59 | folder = path.basename(directory);
60 | }
61 | }
62 | let url = filename;
63 | if(content) {
64 | // Match hash template
65 | url = url
66 | .replace(
67 | /\[(?:(\w+):)?hash(?::([a-z]+\d*))?(?::(\d+))?\]/ig,
68 | (all, hashType, digestType, maxLength) => getHashDigest(content, hashType, digestType, parseInt(maxLength, 10))
69 | )
70 | .replace(
71 | /\[emoji(?::(\d+))?\]/ig,
72 | (all, length) => encodeStringToEmoji(content, length)
73 | );
74 | }
75 | url = url
76 | .replace(/\[ext\]/ig, () => ext)
77 | .replace(/\[name\]/ig, () => basename)
78 | .replace(/\[path\]/ig, () => directory)
79 | .replace(/\[folder\]/ig, () => folder);
80 | if(regExp && loaderContext.resourcePath) {
81 | const match = loaderContext.resourcePath.match(new RegExp(regExp));
82 | match && match.forEach((matched, i) => {
83 | url = url.replace(
84 | new RegExp("\\[" + i + "\\]", "ig"),
85 | matched
86 | );
87 | });
88 | }
89 | if(typeof loaderContext.options === "object" && typeof loaderContext.options.customInterpolateName === "function") {
90 | url = loaderContext.options.customInterpolateName.call(loaderContext, url, name, options);
91 | }
92 | return url;
93 | }
94 |
95 | module.exports = interpolateName;
96 |
--------------------------------------------------------------------------------
/test/interpolateName.test.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const assert = require("assert");
4 | const loaderUtils = require("../");
5 |
6 | const emojiRegex = /[\uD800-\uDFFF]./;
7 |
8 | describe("interpolateName()", () => {
9 | function run(tests) {
10 | tests.forEach((test) => {
11 | const args = test[0];
12 | const expected = test[1];
13 | const message = test[2];
14 | it(message, () => {
15 | const result = loaderUtils.interpolateName.apply(loaderUtils, args);
16 | if(typeof expected === "function") {
17 | expected(result);
18 | } else {
19 | assert.equal(result, expected);
20 | }
21 | });
22 | });
23 | }
24 |
25 | [
26 | ["/app/js/javascript.js", "js/[hash].script.[ext]", "test content", "js/9473fdd0d880a43c21b7778d34872157.script.js"],
27 | ["/app/page.html", "html-[hash:6].html", "test content", "html-9473fd.html"],
28 | ["/app/flash.txt", "[hash]", "test content", "9473fdd0d880a43c21b7778d34872157"],
29 | ["/app/img/image.png", "[sha512:hash:base64:7].[ext]", "test content", "2BKDTjl.png"],
30 | ["/app/dir/file.png", "[path][name].[ext]?[hash]", "test content", "/app/dir/file.png?9473fdd0d880a43c21b7778d34872157"],
31 | ["/vendor/test/images/loading.gif", path => path.replace(/\/?vendor\/?/, ""), "test content", "test/images/loading.gif"],
32 | ["/pathWith.period/filename.js", "js/[name].[ext]", "test content", "js/filename.js"],
33 | ["/pathWith.period/filenameWithoutExt", "js/[name].[ext]", "test content", "js/filenameWithoutExt.bin"]
34 | ].forEach(test => {
35 | it("should interpolate " + test[0] + " " + test[1], () => {
36 | const interpolatedName = loaderUtils.interpolateName({ resourcePath: test[0] }, test[1], { content: test[2] });
37 | assert.equal(interpolatedName, test[3]);
38 | });
39 | });
40 |
41 | run([
42 | [[{}, "", { content: "test string" }], "6f8db599de986fab7a21625b7916589c.bin", "should interpolate default tokens"],
43 | [[{}, "[hash:base64]", { content: "test string" }], "2sm1pVmS8xuGJLCdWpJoRL", "should interpolate [hash] token with options"],
44 | [[{}, "[unrecognized]", { content: "test string" }], "[unrecognized]", "should not interpolate unrecognized token"],
45 | [
46 | [{}, "[emoji]", { content: "test" }],
47 | result => {
48 | assert.ok(emojiRegex.test(result), result);
49 | },
50 | "should interpolate [emoji]"
51 | ],
52 | [
53 | [{}, "[emoji:3]", { content: "string" }],
54 | result => {
55 | assert.ok(emojiRegex.test(result), result);
56 | assert.ok(result.length, 6);
57 | },
58 | "should interpolate [emoji:3]"
59 | ],
60 | ]);
61 |
62 | it("should return the same emoji for the same string", () => {
63 | const args = [{}, "[emoji:5]", { content: "same_emoji" }];
64 | const result1 = loaderUtils.interpolateName.apply(loaderUtils, args);
65 | const result2 = loaderUtils.interpolateName.apply(loaderUtils, args);
66 | assert.equal(result1, result2);
67 | });
68 |
69 | context("no loader context", () => {
70 | const loaderContext = {};
71 | run([
72 | [[loaderContext, "[ext]", {}], "bin", "should interpolate [ext] token"],
73 | [[loaderContext, "[name]", {}], "file", "should interpolate [name] token"],
74 | [[loaderContext, "[path]", {}], "", "should interpolate [path] token"],
75 | [[loaderContext, "[folder]", {}], "", "should interpolate [folder] token"]
76 | ]);
77 | });
78 |
79 | context("with loader context", () => {
80 | const loaderContext = { resourcePath: "/path/to/file.exe" };
81 | run([
82 | [[loaderContext, "[ext]", {}], "exe", "should interpolate [ext] token"],
83 | [[loaderContext, "[name]", {}], "file", "should interpolate [name] token"],
84 | [[loaderContext, "[path]", {}], "/path/to/", "should interpolate [path] token"],
85 | [[loaderContext, "[folder]", {}], "to", "should interpolate [folder] token"]
86 | ]);
87 | });
88 |
89 | run([
90 | [[{
91 | resourcePath: "/xyz",
92 | options: {
93 | customInterpolateName(str, name, options) {
94 | return str + "-" + name + "-" + options.special;
95 | }
96 | }
97 | }, "[name]", {
98 | special: "special"
99 | }], "xyz-[name]-special", "should provide a custom interpolateName function in options"],
100 | ]);
101 | });
102 |
--------------------------------------------------------------------------------
/test/stringifyRequest.test.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | const assert = require("assert");
4 | const path = require("path");
5 | const loaderUtils = require("../");
6 |
7 | const s = JSON.stringify;
8 |
9 | describe("stringifyRequest()", () => {
10 | // We know that query strings that contain paths and question marks can be problematic.
11 | // We must ensure that stringifyRequest is not messing with them
12 | const paramQueryString = "?questionMark?posix=path/to/thing&win=path\\to\\thing";
13 | const jsonQueryString = "?" + s({
14 | questionMark: "?",
15 | posix: "path/to/thing",
16 | win: "path\\to\\file"
17 | });
18 | [
19 | { test: 1, request: "./a.js", expected: s("./a.js") },
20 | { test: 2, request: ".\\a.js", expected: s("./a.js") },
21 | { test: 3, request: "./a/b.js", expected: s("./a/b.js") },
22 | { test: 4, request: ".\\a\\b.js", expected: s("./a/b.js") },
23 | { test: 5, request: "module", expected: s("module") }, // without ./ is a request into the modules directory
24 | { test: 6, request: "module/a.js", expected: s("module/a.js") },
25 | { test: 7, request: "module\\a.js", expected: s("module/a.js") },
26 | { test: 8, request: "./a.js" + paramQueryString, expected: s("./a.js" + paramQueryString) },
27 | { test: 9, request: "./a.js" + jsonQueryString, expected: s("./a.js" + jsonQueryString) },
28 | { test: 10, request: "module" + paramQueryString, expected: s("module" + paramQueryString) },
29 | { test: 11, request: "module" + jsonQueryString, expected: s("module" + jsonQueryString) },
30 | { test: 12, os: "posix", context: "/path/to", request: "/path/to/module/a.js", expected: s("./module/a.js") },
31 | { test: 13, os: "win32", context: "C:\\path\\to\\", request: "C:\\path\\to\\module\\a.js", expected: s("./module/a.js") },
32 | { test: 14, os: "posix", context: "/path/to/thing", request: "/path/to/module/a.js", expected: s("../module/a.js") },
33 | { test: 15, os: "win32", context: "C:\\path\\to\\thing", request: "C:\\path\\to\\module\\a.js", expected: s("../module/a.js") },
34 | { test: 16, os: "win32", context: "\\\\A\\path\\to\\thing", request: "\\\\A\\path\\to\\module\\a.js", expected: s("../module/a.js") },
35 | // If context and request are on different drives, the path should not be relative
36 | // @see https://github.com/webpack/loader-utils/pull/14
37 | { test: 17, os: "win32", context: "D:\\path\\to\\thing", request: "C:\\path\\to\\module\\a.js", expected: s("C:\\path\\to\\module\\a.js") },
38 | { test: 18, os: "win32", context: "\\\\A\\path\\to\\thing", request: "\\\\B\\path\\to\\module\\a.js", expected: s("\\\\B\\path\\to\\module\\a.js") },
39 | {
40 | test: 19,
41 | os: "posix",
42 | context: "/path/to",
43 | request: "/path/to/module/a.js" + paramQueryString,
44 | expected: s("./module/a.js" + paramQueryString)
45 | },
46 | {
47 | test: 20,
48 | os: "win32",
49 | context: "C:\\path\\to\\",
50 | request: "C:\\path\\to\\module\\a.js" + paramQueryString,
51 | expected: s("./module/a.js" + paramQueryString)
52 | },
53 | {
54 | test: 21,
55 | request:
56 | ["./a.js", "./b.js", "./c.js"].join("!"),
57 | expected: s(
58 | ["./a.js", "./b.js", "./c.js"].join("!")
59 | )
60 | },
61 | {
62 | test: 22,
63 | request:
64 | ["a/b.js", "c/d.js", "e/f.js", "g"].join("!"),
65 | expected: s(
66 | ["a/b.js", "c/d.js", "e/f.js", "g"].join("!")
67 | )
68 | },
69 | {
70 | test: 23,
71 | request:
72 | ["a/b.js" + paramQueryString, "c/d.js" + jsonQueryString, "e/f.js"].join("!"),
73 | expected: s(
74 | ["a/b.js" + paramQueryString, "c/d.js" + jsonQueryString, "e/f.js"].join("!")
75 | )
76 | },
77 | {
78 | test: 24,
79 | os: "posix",
80 | context: "/path/to",
81 | request:
82 | ["/a/b.js" + paramQueryString, "c/d.js" + jsonQueryString, "/path/to/e/f.js"].join("!"),
83 | expected: s(
84 | ["../../a/b.js" + paramQueryString, "c/d.js" + jsonQueryString, "./e/f.js"].join("!")
85 | )
86 | },
87 | {
88 | test: 25,
89 | os: "win32",
90 | context: "C:\\path\\to\\",
91 | request:
92 | ["C:\\a\\b.js" + paramQueryString, "c\\d.js" + jsonQueryString, "C:\\path\\to\\e\\f.js"].join("!"),
93 | expected: s(
94 | ["../../a/b.js" + paramQueryString, "c/d.js" + jsonQueryString, "./e/f.js"].join("!")
95 | )
96 | }
97 | ].forEach(testCase => {
98 | it(`${ testCase.test }. should stringify request ${ testCase.request } to ${ testCase.expected } inside context ${ testCase.context }`, () => {
99 | const relative = path.relative;
100 | if(testCase.os) {
101 | // monkey patch path.relative in order to make this test work in every OS
102 | path.relative = path[testCase.os].relative;
103 | }
104 | const actual = loaderUtils.stringifyRequest({ context: testCase.context }, testCase.request);
105 | assert.equal(actual, testCase.expected);
106 | path.relative = relative;
107 | });
108 | });
109 | });
110 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # loader-utils
2 |
3 | ## Methods
4 |
5 | ### `getOptions`
6 |
7 | Recommended way to retrieve the options of a loader invocation:
8 |
9 | ```javascript
10 | // inside your loader
11 | const options = loaderUtils.getOptions(this);
12 | ```
13 |
14 | 1. If `this.query` is a string:
15 | - Tries to parse the query string and returns a new object
16 | - Throws if it's not a valid query string
17 | 2. If `this.query` is object-like, it just returns `this.query`
18 | 3. In any other case, it just returns `null`
19 |
20 | **Please note:** The returned `options` object is *read-only*. It may be re-used across multiple invocations.
21 | If you pass it on to another library, make sure to make a *deep copy* of it:
22 |
23 | ```javascript
24 | const options = Object.assign(
25 | {},
26 | loaderUtils.getOptions(this), // it is safe to pass null to Object.assign()
27 | defaultOptions
28 | );
29 | // don't forget nested objects or arrays
30 | options.obj = Object.assign({}, options.obj);
31 | options.arr = options.arr.slice();
32 | someLibrary(options);
33 | ```
34 |
35 | [clone](https://www.npmjs.com/package/clone) is a good library to make a deep copy of the options.
36 |
37 | #### Options as query strings
38 |
39 | If the loader options have been passed as loader query string (`loader?some¶ms`), the string is parsed by using [`parseQuery`](#parsequery).
40 |
41 | ### `parseQuery`
42 |
43 | Parses a passed string (e.g. `loaderContext.resourceQuery`) as a query string, and returns an object.
44 |
45 | ``` javascript
46 | const params = loaderUtils.parseQuery(this.resourceQuery); // resource: `file?param1=foo`
47 | if (params.param1 === "foo") {
48 | // do something
49 | }
50 | ```
51 |
52 | The string is parsed like this:
53 |
54 | ``` text
55 | -> Error
56 | ? -> {}
57 | ?flag -> { flag: true }
58 | ?+flag -> { flag: true }
59 | ?-flag -> { flag: false }
60 | ?xyz=test -> { xyz: "test" }
61 | ?xyz=1 -> { xyz: "1" } // numbers are NOT parsed
62 | ?xyz[]=a -> { xyz: ["a"] }
63 | ?flag1&flag2 -> { flag1: true, flag2: true }
64 | ?+flag1,-flag2 -> { flag1: true, flag2: false }
65 | ?xyz[]=a,xyz[]=b -> { xyz: ["a", "b"] }
66 | ?a%2C%26b=c%2C%26d -> { "a,&b": "c,&d" }
67 | ?{data:{a:1},isJSON5:true} -> { data: { a: 1 }, isJSON5: true }
68 | ```
69 |
70 | ### `stringifyRequest`
71 |
72 | Turns a request into a string that can be used inside `require()` or `import` while avoiding absolute paths.
73 | Use it instead of `JSON.stringify(...)` if you're generating code inside a loader.
74 |
75 | **Why is this necessary?** Since webpack calculates the hash before module paths are translated into module ids, we must avoid absolute paths to ensure
76 | consistent hashes across different compilations.
77 |
78 | This function:
79 |
80 | - resolves absolute requests into relative requests if the request and the module are on the same hard drive
81 | - replaces `\` with `/` if the request and the module are on the same hard drive
82 | - won't change the path at all if the request and the module are on different hard drives
83 | - applies `JSON.stringify` to the result
84 |
85 | ```javascript
86 | loaderUtils.stringifyRequest(this, "./test.js");
87 | // "\"./test.js\""
88 |
89 | loaderUtils.stringifyRequest(this, ".\\test.js");
90 | // "\"./test.js\""
91 |
92 | loaderUtils.stringifyRequest(this, "test");
93 | // "\"test\""
94 |
95 | loaderUtils.stringifyRequest(this, "test/lib/index.js");
96 | // "\"test/lib/index.js\""
97 |
98 | loaderUtils.stringifyRequest(this, "otherLoader?andConfig!test?someConfig");
99 | // "\"otherLoader?andConfig!test?someConfig\""
100 |
101 | loaderUtils.stringifyRequest(this, require.resolve("test"));
102 | // "\"../node_modules/some-loader/lib/test.js\""
103 |
104 | loaderUtils.stringifyRequest(this, "C:\\module\\test.js");
105 | // "\"../../test.js\"" (on Windows, in case the module and the request are on the same drive)
106 |
107 | loaderUtils.stringifyRequest(this, "C:\\module\\test.js");
108 | // "\"C:\\module\\test.js\"" (on Windows, in case the module and the request are on different drives)
109 |
110 | loaderUtils.stringifyRequest(this, "\\\\network-drive\\test.js");
111 | // "\"\\\\network-drive\\\\test.js\"" (on Windows, in case the module and the request are on different drives)
112 | ```
113 |
114 | ### `urlToRequest`
115 |
116 | Converts some resource URL to a webpack module request.
117 |
118 | ```javascript
119 | const url = "path/to/module.js";
120 | const request = loaderUtils.urlToRequest(url); // "./path/to/module.js"
121 | ```
122 |
123 | #### Module URLs
124 |
125 | Any URL containing a `~` will be interpreted as a module request. Anything after the `~` will be considered the request path.
126 |
127 | ```javascript
128 | const url = "~path/to/module.js";
129 | const request = loaderUtils.urlToRequest(url); // "path/to/module.js"
130 | ```
131 |
132 | #### Root-relative URLs
133 |
134 | URLs that are root-relative (start with `/`) can be resolved relative to some arbitrary path by using the `root` parameter:
135 |
136 | ```javascript
137 | const url = "/path/to/module.js";
138 | const root = "./root";
139 | const request = loaderUtils.urlToRequest(url, root); // "./root/path/to/module.js"
140 | ```
141 |
142 | To convert a root-relative URL into a module URL, specify a `root` value that starts with `~`:
143 |
144 | ```javascript
145 | const url = "/path/to/module.js";
146 | const root = "~";
147 | const request = loaderUtils.urlToRequest(url, root); // "path/to/module.js"
148 | ```
149 |
150 | ### `interpolateName`
151 |
152 | Interpolates a filename template using multiple placeholders and/or a regular expression.
153 | The template and regular expression are set as query params called `name` and `regExp` on the current loader's context.
154 |
155 | ```javascript
156 | const interpolatedName = loaderUtils.interpolateName(loaderContext, name, options);
157 | ```
158 |
159 | The following tokens are replaced in the `name` parameter:
160 |
161 | * `[ext]` the extension of the resource
162 | * `[name]` the basename of the resource
163 | * `[path]` the path of the resource relative to the `context` query parameter or option.
164 | * `[folder]` the folder of the resource is in.
165 | * `[emoji]` a random emoji representation of `options.content`
166 | * `[emoji:]` same as above, but with a customizable number of emojis
167 | * `[hash]` the hash of `options.content` (Buffer) (by default it's the hex digest of the md5 hash)
168 | * `[:hash::]` optionally one can configure
169 | * other `hashType`s, i. e. `sha1`, `md5`, `sha256`, `sha512`
170 | * other `digestType`s, i. e. `hex`, `base26`, `base32`, `base36`, `base49`, `base52`, `base58`, `base62`, `base64`
171 | * and `length` the length in chars
172 | * `[N]` the N-th match obtained from matching the current file name against `options.regExp`
173 |
174 | Examples
175 |
176 | ``` javascript
177 | // loaderContext.resourcePath = "/app/js/javascript.js"
178 | loaderUtils.interpolateName(loaderContext, "js/[hash].script.[ext]", { content: ... });
179 | // => js/9473fdd0d880a43c21b7778d34872157.script.js
180 |
181 | // loaderContext.resourcePath = "/app/page.html"
182 | loaderUtils.interpolateName(loaderContext, "html-[hash:6].html", { content: ... });
183 | // => html-9473fd.html
184 |
185 | // loaderContext.resourcePath = "/app/flash.txt"
186 | loaderUtils.interpolateName(loaderContext, "[hash]", { content: ... });
187 | // => c31e9820c001c9c4a86bce33ce43b679
188 |
189 | // loaderContext.resourcePath = "/app/img/image.gif"
190 | loaderUtils.interpolateName(loaderContext, "[emoji]", { content: ... });
191 | // => 👍
192 |
193 | // loaderContext.resourcePath = "/app/img/image.gif"
194 | loaderUtils.interpolateName(loaderContext, "[emoji:4]", { content: ... });
195 | // => 🙍🏢📤🐝
196 |
197 | // loaderContext.resourcePath = "/app/img/image.png"
198 | loaderUtils.interpolateName(loaderContext, "[sha512:hash:base64:7].[ext]", { content: ... });
199 | // => 2BKDTjl.png
200 | // use sha512 hash instead of md5 and with only 7 chars of base64
201 |
202 | // loaderContext.resourcePath = "/app/img/myself.png"
203 | // loaderContext.query.name =
204 | loaderUtils.interpolateName(loaderContext, "picture.png");
205 | // => picture.png
206 |
207 | // loaderContext.resourcePath = "/app/dir/file.png"
208 | loaderUtils.interpolateName(loaderContext, "[path][name].[ext]?[hash]", { content: ... });
209 | // => /app/dir/file.png?9473fdd0d880a43c21b7778d34872157
210 |
211 | // loaderContext.resourcePath = "/app/js/page-home.js"
212 | loaderUtils.interpolateName(loaderContext, "script-[1].[ext]", { regExp: "page-(.*)\\.js", content: ... });
213 | // => script-home.js
214 | ```
215 |
216 | ### `getHashDigest`
217 |
218 | ``` javascript
219 | const digestString = loaderUtils.getHashDigest(buffer, hashType, digestType, maxLength);
220 | ```
221 |
222 | * `buffer` the content that should be hashed
223 | * `hashType` one of `sha1`, `md5`, `sha256`, `sha512` or any other node.js supported hash type
224 | * `digestType` one of `hex`, `base26`, `base32`, `base36`, `base49`, `base52`, `base58`, `base62`, `base64`
225 | * `maxLength` the maximum length in chars
226 |
227 | ## License
228 |
229 | MIT (http://www.opensource.org/licenses/mit-license.php)
230 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | JSONStream@^1.0.4:
6 | version "1.3.1"
7 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a"
8 | dependencies:
9 | jsonparse "^1.2.0"
10 | through ">=2.2.7 <3"
11 |
12 | abbrev@1, abbrev@1.0.x:
13 | version "1.0.9"
14 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
15 |
16 | acorn-jsx@^3.0.0:
17 | version "3.0.1"
18 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
19 | dependencies:
20 | acorn "^3.0.4"
21 |
22 | acorn@4.0.4:
23 | version "4.0.4"
24 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a"
25 |
26 | acorn@^3.0.4:
27 | version "3.3.0"
28 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
29 |
30 | ajv-keywords@^1.0.0:
31 | version "1.5.1"
32 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
33 |
34 | ajv@^4.7.0:
35 | version "4.11.5"
36 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd"
37 | dependencies:
38 | co "^4.6.0"
39 | json-stable-stringify "^1.0.1"
40 |
41 | align-text@^0.1.1, align-text@^0.1.3:
42 | version "0.1.4"
43 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
44 | dependencies:
45 | kind-of "^3.0.2"
46 | longest "^1.0.1"
47 | repeat-string "^1.5.2"
48 |
49 | amdefine@>=0.0.4:
50 | version "1.0.1"
51 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
52 |
53 | ansi-escapes@^1.1.0:
54 | version "1.4.0"
55 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
56 |
57 | ansi-regex@^2.0.0:
58 | version "2.1.1"
59 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
60 |
61 | ansi-styles@^2.2.1:
62 | version "2.2.1"
63 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
64 |
65 | argparse@^1.0.7:
66 | version "1.0.9"
67 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
68 | dependencies:
69 | sprintf-js "~1.0.2"
70 |
71 | array-find-index@^1.0.1:
72 | version "1.0.2"
73 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
74 |
75 | array-ify@^1.0.0:
76 | version "1.0.0"
77 | resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
78 |
79 | array-union@^1.0.1:
80 | version "1.0.2"
81 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
82 | dependencies:
83 | array-uniq "^1.0.1"
84 |
85 | array-uniq@^1.0.1:
86 | version "1.0.3"
87 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
88 |
89 | arrify@^1.0.0:
90 | version "1.0.1"
91 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
92 |
93 | asn1@~0.2.3:
94 | version "0.2.3"
95 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
96 |
97 | assert-plus@1.0.0, assert-plus@^1.0.0:
98 | version "1.0.0"
99 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
100 |
101 | assert-plus@^0.2.0:
102 | version "0.2.0"
103 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
104 |
105 | async@1.x, async@^1.4.0:
106 | version "1.5.2"
107 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
108 |
109 | asynckit@^0.4.0:
110 | version "0.4.0"
111 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
112 |
113 | aws-sign2@~0.6.0:
114 | version "0.6.0"
115 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
116 |
117 | aws4@^1.2.1:
118 | version "1.6.0"
119 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
120 |
121 | babel-code-frame@^6.16.0:
122 | version "6.22.0"
123 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
124 | dependencies:
125 | chalk "^1.1.0"
126 | esutils "^2.0.2"
127 | js-tokens "^3.0.0"
128 |
129 | balanced-match@^0.4.1:
130 | version "0.4.2"
131 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
132 |
133 | bcrypt-pbkdf@^1.0.0:
134 | version "1.0.1"
135 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
136 | dependencies:
137 | tweetnacl "^0.14.3"
138 |
139 | big.js@^3.1.3:
140 | version "3.1.3"
141 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
142 |
143 | boom@2.x.x:
144 | version "2.10.1"
145 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
146 | dependencies:
147 | hoek "2.x.x"
148 |
149 | brace-expansion@^1.0.0:
150 | version "1.1.6"
151 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
152 | dependencies:
153 | balanced-match "^0.4.1"
154 | concat-map "0.0.1"
155 |
156 | buffer-shims@^1.0.0:
157 | version "1.0.0"
158 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
159 |
160 | builtin-modules@^1.0.0:
161 | version "1.1.1"
162 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
163 |
164 | caller-path@^0.1.0:
165 | version "0.1.0"
166 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
167 | dependencies:
168 | callsites "^0.2.0"
169 |
170 | callsites@^0.2.0:
171 | version "0.2.0"
172 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
173 |
174 | camelcase-keys@^2.0.0:
175 | version "2.1.0"
176 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
177 | dependencies:
178 | camelcase "^2.0.0"
179 | map-obj "^1.0.0"
180 |
181 | camelcase@^1.0.2:
182 | version "1.2.1"
183 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
184 |
185 | camelcase@^2.0.0:
186 | version "2.1.1"
187 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
188 |
189 | camelcase@^3.0.0:
190 | version "3.0.0"
191 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
192 |
193 | caseless@~0.11.0:
194 | version "0.11.0"
195 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
196 |
197 | center-align@^0.1.1:
198 | version "0.1.3"
199 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
200 | dependencies:
201 | align-text "^0.1.3"
202 | lazy-cache "^1.0.3"
203 |
204 | chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
205 | version "1.1.3"
206 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
207 | dependencies:
208 | ansi-styles "^2.2.1"
209 | escape-string-regexp "^1.0.2"
210 | has-ansi "^2.0.0"
211 | strip-ansi "^3.0.0"
212 | supports-color "^2.0.0"
213 |
214 | circular-json@^0.3.1:
215 | version "0.3.1"
216 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d"
217 |
218 | cli-cursor@^1.0.1:
219 | version "1.0.2"
220 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
221 | dependencies:
222 | restore-cursor "^1.0.1"
223 |
224 | cli-width@^2.0.0:
225 | version "2.1.0"
226 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
227 |
228 | cliui@^2.1.0:
229 | version "2.1.0"
230 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
231 | dependencies:
232 | center-align "^0.1.1"
233 | right-align "^0.1.1"
234 | wordwrap "0.0.2"
235 |
236 | cliui@^3.2.0:
237 | version "3.2.0"
238 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
239 | dependencies:
240 | string-width "^1.0.1"
241 | strip-ansi "^3.0.1"
242 | wrap-ansi "^2.0.0"
243 |
244 | co@^4.6.0:
245 | version "4.6.0"
246 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
247 |
248 | code-point-at@^1.0.0:
249 | version "1.1.0"
250 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
251 |
252 | combined-stream@^1.0.5, combined-stream@~1.0.5:
253 | version "1.0.5"
254 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
255 | dependencies:
256 | delayed-stream "~1.0.0"
257 |
258 | commander@0.6.1:
259 | version "0.6.1"
260 | resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06"
261 |
262 | commander@2.3.0:
263 | version "2.3.0"
264 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873"
265 |
266 | commander@^2.9.0:
267 | version "2.9.0"
268 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
269 | dependencies:
270 | graceful-readlink ">= 1.0.0"
271 |
272 | compare-func@^1.3.1:
273 | version "1.3.2"
274 | resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648"
275 | dependencies:
276 | array-ify "^1.0.0"
277 | dot-prop "^3.0.0"
278 |
279 | concat-map@0.0.1:
280 | version "0.0.1"
281 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
282 |
283 | concat-stream@^1.4.10, concat-stream@^1.4.6:
284 | version "1.6.0"
285 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
286 | dependencies:
287 | inherits "^2.0.3"
288 | readable-stream "^2.2.2"
289 | typedarray "^0.0.6"
290 |
291 | conventional-changelog-angular@^1.3.3:
292 | version "1.3.3"
293 | resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.3.3.tgz#e7ce807a85dd4750e1b417f766045497511e0726"
294 | dependencies:
295 | compare-func "^1.3.1"
296 | github-url-from-git "^1.4.0"
297 | q "^1.4.1"
298 |
299 | conventional-changelog-atom@^0.1.0:
300 | version "0.1.0"
301 | resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-0.1.0.tgz#67a47c66a42b2f8909ef1587c9989ae1de730b92"
302 | dependencies:
303 | q "^1.4.1"
304 |
305 | conventional-changelog-codemirror@^0.1.0:
306 | version "0.1.0"
307 | resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.1.0.tgz#7577a591dbf9b538e7a150a7ee62f65a2872b334"
308 | dependencies:
309 | q "^1.4.1"
310 |
311 | conventional-changelog-core@^1.8.0:
312 | version "1.8.0"
313 | resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-1.8.0.tgz#977848b416caf15fb09f20b12a62d40ef145b957"
314 | dependencies:
315 | conventional-changelog-writer "^1.1.0"
316 | conventional-commits-parser "^1.0.0"
317 | dateformat "^1.0.12"
318 | get-pkg-repo "^1.0.0"
319 | git-raw-commits "^1.2.0"
320 | git-remote-origin-url "^2.0.0"
321 | git-semver-tags "^1.2.0"
322 | lodash "^4.0.0"
323 | normalize-package-data "^2.3.5"
324 | q "^1.4.1"
325 | read-pkg "^1.1.0"
326 | read-pkg-up "^1.0.1"
327 | through2 "^2.0.0"
328 |
329 | conventional-changelog-ember@^0.2.5:
330 | version "0.2.5"
331 | resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-0.2.5.tgz#ce21d5cf83cd5ebe05d23fdf232d8844f4b56a4f"
332 | dependencies:
333 | q "^1.4.1"
334 |
335 | conventional-changelog-eslint@^0.1.0:
336 | version "0.1.0"
337 | resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-0.1.0.tgz#a52411e999e0501ce500b856b0a643d0330907e2"
338 | dependencies:
339 | q "^1.4.1"
340 |
341 | conventional-changelog-express@^0.1.0:
342 | version "0.1.0"
343 | resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-0.1.0.tgz#55c6c841c811962036c037bdbd964a54ae310fce"
344 | dependencies:
345 | q "^1.4.1"
346 |
347 | conventional-changelog-jquery@^0.1.0:
348 | version "0.1.0"
349 | resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz#0208397162e3846986e71273b6c79c5b5f80f510"
350 | dependencies:
351 | q "^1.4.1"
352 |
353 | conventional-changelog-jscs@^0.1.0:
354 | version "0.1.0"
355 | resolved "https://registry.yarnpkg.com/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz#0479eb443cc7d72c58bf0bcf0ef1d444a92f0e5c"
356 | dependencies:
357 | q "^1.4.1"
358 |
359 | conventional-changelog-jshint@^0.1.0:
360 | version "0.1.0"
361 | resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-0.1.0.tgz#00cab8e9a3317487abd94c4d84671342918d2a07"
362 | dependencies:
363 | compare-func "^1.3.1"
364 | q "^1.4.1"
365 |
366 | conventional-changelog-writer@^1.1.0:
367 | version "1.4.1"
368 | resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-1.4.1.tgz#3f4cb4d003ebb56989d30d345893b52a43639c8e"
369 | dependencies:
370 | compare-func "^1.3.1"
371 | conventional-commits-filter "^1.0.0"
372 | dateformat "^1.0.11"
373 | handlebars "^4.0.2"
374 | json-stringify-safe "^5.0.1"
375 | lodash "^4.0.0"
376 | meow "^3.3.0"
377 | semver "^5.0.1"
378 | split "^1.0.0"
379 | through2 "^2.0.0"
380 |
381 | conventional-changelog@^1.1.0:
382 | version "1.1.3"
383 | resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-1.1.3.tgz#26283078ac38c094df2af1604b0a46bbc0165c4d"
384 | dependencies:
385 | conventional-changelog-angular "^1.3.3"
386 | conventional-changelog-atom "^0.1.0"
387 | conventional-changelog-codemirror "^0.1.0"
388 | conventional-changelog-core "^1.8.0"
389 | conventional-changelog-ember "^0.2.5"
390 | conventional-changelog-eslint "^0.1.0"
391 | conventional-changelog-express "^0.1.0"
392 | conventional-changelog-jquery "^0.1.0"
393 | conventional-changelog-jscs "^0.1.0"
394 | conventional-changelog-jshint "^0.1.0"
395 |
396 | conventional-commits-filter@^1.0.0:
397 | version "1.0.0"
398 | resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-1.0.0.tgz#6fc2a659372bc3f2339cf9ffff7e1b0344b93039"
399 | dependencies:
400 | is-subset "^0.1.1"
401 | modify-values "^1.0.0"
402 |
403 | conventional-commits-parser@^1.0.0, conventional-commits-parser@^1.0.1:
404 | version "1.3.0"
405 | resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-1.3.0.tgz#e327b53194e1a7ad5dc63479ee9099a52b024865"
406 | dependencies:
407 | JSONStream "^1.0.4"
408 | is-text-path "^1.0.0"
409 | lodash "^4.2.1"
410 | meow "^3.3.0"
411 | split2 "^2.0.0"
412 | through2 "^2.0.0"
413 | trim-off-newlines "^1.0.0"
414 |
415 | conventional-recommended-bump@^0.3.0:
416 | version "0.3.0"
417 | resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-0.3.0.tgz#e839de8f57cbb43445c8b4967401de0644c425d8"
418 | dependencies:
419 | concat-stream "^1.4.10"
420 | conventional-commits-filter "^1.0.0"
421 | conventional-commits-parser "^1.0.1"
422 | git-latest-semver-tag "^1.0.0"
423 | git-raw-commits "^1.0.0"
424 | meow "^3.3.0"
425 | object-assign "^4.0.1"
426 |
427 | core-util-is@~1.0.0:
428 | version "1.0.2"
429 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
430 |
431 | coveralls@^2.11.2:
432 | version "2.12.0"
433 | resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.12.0.tgz#b3d064108e29728385b56e42fc2d119f43e0e517"
434 | dependencies:
435 | js-yaml "3.6.1"
436 | lcov-parse "0.0.10"
437 | log-driver "1.2.5"
438 | minimist "1.2.0"
439 | request "2.79.0"
440 |
441 | cryptiles@2.x.x:
442 | version "2.0.5"
443 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
444 | dependencies:
445 | boom "2.x.x"
446 |
447 | currently-unhandled@^0.4.1:
448 | version "0.4.1"
449 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
450 | dependencies:
451 | array-find-index "^1.0.1"
452 |
453 | d@^0.1.1, d@~0.1.1:
454 | version "0.1.1"
455 | resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309"
456 | dependencies:
457 | es5-ext "~0.10.2"
458 |
459 | dargs@^4.0.1:
460 | version "4.1.0"
461 | resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17"
462 | dependencies:
463 | number-is-nan "^1.0.0"
464 |
465 | dashdash@^1.12.0:
466 | version "1.14.1"
467 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
468 | dependencies:
469 | assert-plus "^1.0.0"
470 |
471 | dateformat@^1.0.11, dateformat@^1.0.12:
472 | version "1.0.12"
473 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9"
474 | dependencies:
475 | get-stdin "^4.0.1"
476 | meow "^3.3.0"
477 |
478 | debug@2.0.0:
479 | version "2.0.0"
480 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.0.0.tgz#89bd9df6732b51256bc6705342bba02ed12131ef"
481 | dependencies:
482 | ms "0.6.2"
483 |
484 | debug@^2.1.1:
485 | version "2.6.3"
486 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d"
487 | dependencies:
488 | ms "0.7.2"
489 |
490 | decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
491 | version "1.2.0"
492 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
493 |
494 | deep-is@~0.1.2, deep-is@~0.1.3:
495 | version "0.1.3"
496 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
497 |
498 | del@^2.0.2:
499 | version "2.2.2"
500 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
501 | dependencies:
502 | globby "^5.0.0"
503 | is-path-cwd "^1.0.0"
504 | is-path-in-cwd "^1.0.0"
505 | object-assign "^4.0.1"
506 | pify "^2.0.0"
507 | pinkie-promise "^2.0.0"
508 | rimraf "^2.2.8"
509 |
510 | delayed-stream@~1.0.0:
511 | version "1.0.0"
512 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
513 |
514 | diff@1.0.8:
515 | version "1.0.8"
516 | resolved "https://registry.yarnpkg.com/diff/-/diff-1.0.8.tgz#343276308ec991b7bc82267ed55bc1411f971666"
517 |
518 | doctrine@^1.2.2:
519 | version "1.5.0"
520 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
521 | dependencies:
522 | esutils "^2.0.2"
523 | isarray "^1.0.0"
524 |
525 | dot-prop@^3.0.0:
526 | version "3.0.0"
527 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
528 | dependencies:
529 | is-obj "^1.0.0"
530 |
531 | ecc-jsbn@~0.1.1:
532 | version "0.1.1"
533 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
534 | dependencies:
535 | jsbn "~0.1.0"
536 |
537 | emojis-list@^2.0.0:
538 | version "2.1.0"
539 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
540 |
541 | error-ex@^1.2.0:
542 | version "1.3.1"
543 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
544 | dependencies:
545 | is-arrayish "^0.2.1"
546 |
547 | es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7:
548 | version "0.10.13"
549 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.13.tgz#a390ab717bde1ce3b4cbaeabe23ca8fbddcb06f6"
550 | dependencies:
551 | es6-iterator "2"
552 | es6-symbol "~3.1"
553 |
554 | es6-iterator@2:
555 | version "2.0.0"
556 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac"
557 | dependencies:
558 | d "^0.1.1"
559 | es5-ext "^0.10.7"
560 | es6-symbol "3"
561 |
562 | es6-map@^0.1.3:
563 | version "0.1.4"
564 | resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.4.tgz#a34b147be224773a4d7da8072794cefa3632b897"
565 | dependencies:
566 | d "~0.1.1"
567 | es5-ext "~0.10.11"
568 | es6-iterator "2"
569 | es6-set "~0.1.3"
570 | es6-symbol "~3.1.0"
571 | event-emitter "~0.3.4"
572 |
573 | es6-set@~0.1.3:
574 | version "0.1.4"
575 | resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8"
576 | dependencies:
577 | d "~0.1.1"
578 | es5-ext "~0.10.11"
579 | es6-iterator "2"
580 | es6-symbol "3"
581 | event-emitter "~0.3.4"
582 |
583 | es6-symbol@3, es6-symbol@~3.1, es6-symbol@~3.1.0:
584 | version "3.1.0"
585 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa"
586 | dependencies:
587 | d "~0.1.1"
588 | es5-ext "~0.10.11"
589 |
590 | es6-weak-map@^2.0.1:
591 | version "2.0.1"
592 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.1.tgz#0d2bbd8827eb5fb4ba8f97fbfea50d43db21ea81"
593 | dependencies:
594 | d "^0.1.1"
595 | es5-ext "^0.10.8"
596 | es6-iterator "2"
597 | es6-symbol "3"
598 |
599 | escape-string-regexp@1.0.2:
600 | version "1.0.2"
601 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1"
602 |
603 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
604 | version "1.0.5"
605 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
606 |
607 | escodegen@1.7.x:
608 | version "1.7.1"
609 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.7.1.tgz#30ecfcf66ca98dc67cd2fd162abeb6eafa8ce6fc"
610 | dependencies:
611 | esprima "^1.2.2"
612 | estraverse "^1.9.1"
613 | esutils "^2.0.2"
614 | optionator "^0.5.0"
615 | optionalDependencies:
616 | source-map "~0.2.0"
617 |
618 | escope@^3.6.0:
619 | version "3.6.0"
620 | resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
621 | dependencies:
622 | es6-map "^0.1.3"
623 | es6-weak-map "^2.0.1"
624 | esrecurse "^4.1.0"
625 | estraverse "^4.1.1"
626 |
627 | eslint-plugin-node@^4.0.1:
628 | version "4.2.1"
629 | resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-4.2.1.tgz#52e8e06595d0be63a25fdc237be5e42b69a46eaa"
630 | dependencies:
631 | ignore "^3.0.11"
632 | minimatch "^3.0.2"
633 | object-assign "^4.0.1"
634 | resolve "^1.1.7"
635 | semver "5.3.0"
636 |
637 | eslint@^3.15.0:
638 | version "3.17.1"
639 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.17.1.tgz#b80ae12d9c406d858406fccda627afce33ea10ea"
640 | dependencies:
641 | babel-code-frame "^6.16.0"
642 | chalk "^1.1.3"
643 | concat-stream "^1.4.6"
644 | debug "^2.1.1"
645 | doctrine "^1.2.2"
646 | escope "^3.6.0"
647 | espree "^3.4.0"
648 | estraverse "^4.2.0"
649 | esutils "^2.0.2"
650 | file-entry-cache "^2.0.0"
651 | glob "^7.0.3"
652 | globals "^9.14.0"
653 | ignore "^3.2.0"
654 | imurmurhash "^0.1.4"
655 | inquirer "^0.12.0"
656 | is-my-json-valid "^2.10.0"
657 | is-resolvable "^1.0.0"
658 | js-yaml "^3.5.1"
659 | json-stable-stringify "^1.0.0"
660 | levn "^0.3.0"
661 | lodash "^4.0.0"
662 | mkdirp "^0.5.0"
663 | natural-compare "^1.4.0"
664 | optionator "^0.8.2"
665 | path-is-inside "^1.0.1"
666 | pluralize "^1.2.1"
667 | progress "^1.1.8"
668 | require-uncached "^1.0.2"
669 | shelljs "^0.7.5"
670 | strip-bom "^3.0.0"
671 | strip-json-comments "~2.0.1"
672 | table "^3.7.8"
673 | text-table "~0.2.0"
674 | user-home "^2.0.0"
675 |
676 | espree@^3.4.0:
677 | version "3.4.0"
678 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.0.tgz#41656fa5628e042878025ef467e78f125cb86e1d"
679 | dependencies:
680 | acorn "4.0.4"
681 | acorn-jsx "^3.0.0"
682 |
683 | esprima@2.5.x:
684 | version "2.5.0"
685 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.5.0.tgz#f387a46fd344c1b1a39baf8c20bfb43b6d0058cc"
686 |
687 | esprima@^1.2.2:
688 | version "1.2.5"
689 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9"
690 |
691 | esprima@^2.6.0:
692 | version "2.7.3"
693 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
694 |
695 | esrecurse@^4.1.0:
696 | version "4.1.0"
697 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220"
698 | dependencies:
699 | estraverse "~4.1.0"
700 | object-assign "^4.0.1"
701 |
702 | estraverse@^1.9.1:
703 | version "1.9.3"
704 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
705 |
706 | estraverse@^4.1.1, estraverse@^4.2.0:
707 | version "4.2.0"
708 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
709 |
710 | estraverse@~4.1.0:
711 | version "4.1.1"
712 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2"
713 |
714 | esutils@^2.0.2:
715 | version "2.0.2"
716 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
717 |
718 | event-emitter@~0.3.4:
719 | version "0.3.4"
720 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5"
721 | dependencies:
722 | d "~0.1.1"
723 | es5-ext "~0.10.7"
724 |
725 | exit-hook@^1.0.0:
726 | version "1.1.1"
727 | resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
728 |
729 | extend@~3.0.0:
730 | version "3.0.0"
731 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
732 |
733 | extsprintf@1.0.2:
734 | version "1.0.2"
735 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
736 |
737 | fast-levenshtein@~1.0.0:
738 | version "1.0.7"
739 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz#0178dcdee023b92905193af0959e8a7639cfdcb9"
740 |
741 | fast-levenshtein@~2.0.4:
742 | version "2.0.6"
743 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
744 |
745 | figures@^1.3.5, figures@^1.5.0:
746 | version "1.7.0"
747 | resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
748 | dependencies:
749 | escape-string-regexp "^1.0.5"
750 | object-assign "^4.1.0"
751 |
752 | file-entry-cache@^2.0.0:
753 | version "2.0.0"
754 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
755 | dependencies:
756 | flat-cache "^1.2.1"
757 | object-assign "^4.0.1"
758 |
759 | fileset@0.2.x:
760 | version "0.2.1"
761 | resolved "https://registry.yarnpkg.com/fileset/-/fileset-0.2.1.tgz#588ef8973c6623b2a76df465105696b96aac8067"
762 | dependencies:
763 | glob "5.x"
764 | minimatch "2.x"
765 |
766 | find-up@^1.0.0:
767 | version "1.1.2"
768 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
769 | dependencies:
770 | path-exists "^2.0.0"
771 | pinkie-promise "^2.0.0"
772 |
773 | flat-cache@^1.2.1:
774 | version "1.2.2"
775 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96"
776 | dependencies:
777 | circular-json "^0.3.1"
778 | del "^2.0.2"
779 | graceful-fs "^4.1.2"
780 | write "^0.2.1"
781 |
782 | forever-agent@~0.6.1:
783 | version "0.6.1"
784 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
785 |
786 | form-data@~2.1.1:
787 | version "2.1.2"
788 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
789 | dependencies:
790 | asynckit "^0.4.0"
791 | combined-stream "^1.0.5"
792 | mime-types "^2.1.12"
793 |
794 | fs-access@^1.0.0:
795 | version "1.0.1"
796 | resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a"
797 | dependencies:
798 | null-check "^1.0.0"
799 |
800 | fs.realpath@^1.0.0:
801 | version "1.0.0"
802 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
803 |
804 | generate-function@^2.0.0:
805 | version "2.0.0"
806 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
807 |
808 | generate-object-property@^1.1.0:
809 | version "1.2.0"
810 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
811 | dependencies:
812 | is-property "^1.0.0"
813 |
814 | get-caller-file@^1.0.1:
815 | version "1.0.2"
816 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
817 |
818 | get-pkg-repo@^1.0.0:
819 | version "1.3.0"
820 | resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.3.0.tgz#43c6b4c048b75dd604fc5388edecde557f6335df"
821 | dependencies:
822 | hosted-git-info "^2.1.4"
823 | meow "^3.3.0"
824 | normalize-package-data "^2.3.0"
825 | parse-github-repo-url "^1.3.0"
826 | through2 "^2.0.0"
827 |
828 | get-stdin@^4.0.1:
829 | version "4.0.1"
830 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
831 |
832 | getpass@^0.1.1:
833 | version "0.1.6"
834 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
835 | dependencies:
836 | assert-plus "^1.0.0"
837 |
838 | git-latest-semver-tag@^1.0.0:
839 | version "1.0.2"
840 | resolved "https://registry.yarnpkg.com/git-latest-semver-tag/-/git-latest-semver-tag-1.0.2.tgz#061130cbf4274111cc6be4612b3ff3a6d93e2660"
841 | dependencies:
842 | git-semver-tags "^1.1.2"
843 | meow "^3.3.0"
844 |
845 | git-raw-commits@^1.0.0, git-raw-commits@^1.2.0:
846 | version "1.2.0"
847 | resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.2.0.tgz#0f3a8bfd99ae0f2d8b9224d58892975e9a52d03c"
848 | dependencies:
849 | dargs "^4.0.1"
850 | lodash.template "^4.0.2"
851 | meow "^3.3.0"
852 | split2 "^2.0.0"
853 | through2 "^2.0.0"
854 |
855 | git-remote-origin-url@^2.0.0:
856 | version "2.0.0"
857 | resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f"
858 | dependencies:
859 | gitconfiglocal "^1.0.0"
860 | pify "^2.3.0"
861 |
862 | git-semver-tags@^1.1.2, git-semver-tags@^1.2.0:
863 | version "1.2.0"
864 | resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-1.2.0.tgz#b31fd02c8ab578bd6c9b5cacca5e1c64c1177ac1"
865 | dependencies:
866 | meow "^3.3.0"
867 | semver "^5.0.1"
868 |
869 | gitconfiglocal@^1.0.0:
870 | version "1.0.0"
871 | resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b"
872 | dependencies:
873 | ini "^1.3.2"
874 |
875 | github-url-from-git@^1.4.0:
876 | version "1.5.0"
877 | resolved "https://registry.yarnpkg.com/github-url-from-git/-/github-url-from-git-1.5.0.tgz#f985fedcc0a9aa579dc88d7aff068d55cc6251a0"
878 |
879 | glob@3.2.3:
880 | version "3.2.3"
881 | resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.3.tgz#e313eeb249c7affaa5c475286b0e115b59839467"
882 | dependencies:
883 | graceful-fs "~2.0.0"
884 | inherits "2"
885 | minimatch "~0.2.11"
886 |
887 | glob@5.x:
888 | version "5.0.15"
889 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
890 | dependencies:
891 | inflight "^1.0.4"
892 | inherits "2"
893 | minimatch "2 || 3"
894 | once "^1.3.0"
895 | path-is-absolute "^1.0.0"
896 |
897 | glob@^7.0.0, glob@^7.0.3, glob@^7.0.5:
898 | version "7.1.1"
899 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
900 | dependencies:
901 | fs.realpath "^1.0.0"
902 | inflight "^1.0.4"
903 | inherits "2"
904 | minimatch "^3.0.2"
905 | once "^1.3.0"
906 | path-is-absolute "^1.0.0"
907 |
908 | globals@^9.14.0:
909 | version "9.16.0"
910 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.16.0.tgz#63e903658171ec2d9f51b1d31de5e2b8dc01fb80"
911 |
912 | globby@^5.0.0:
913 | version "5.0.0"
914 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
915 | dependencies:
916 | array-union "^1.0.1"
917 | arrify "^1.0.0"
918 | glob "^7.0.3"
919 | object-assign "^4.0.1"
920 | pify "^2.0.0"
921 | pinkie-promise "^2.0.0"
922 |
923 | graceful-fs@^4.1.2:
924 | version "4.1.11"
925 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
926 |
927 | graceful-fs@~2.0.0:
928 | version "2.0.3"
929 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-2.0.3.tgz#7cd2cdb228a4a3f36e95efa6cc142de7d1a136d0"
930 |
931 | "graceful-readlink@>= 1.0.0":
932 | version "1.0.1"
933 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
934 |
935 | growl@1.8.1:
936 | version "1.8.1"
937 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.8.1.tgz#4b2dec8d907e93db336624dcec0183502f8c9428"
938 |
939 | handlebars@^4.0.1, handlebars@^4.0.2:
940 | version "4.0.6"
941 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7"
942 | dependencies:
943 | async "^1.4.0"
944 | optimist "^0.6.1"
945 | source-map "^0.4.4"
946 | optionalDependencies:
947 | uglify-js "^2.6"
948 |
949 | har-validator@~2.0.6:
950 | version "2.0.6"
951 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
952 | dependencies:
953 | chalk "^1.1.1"
954 | commander "^2.9.0"
955 | is-my-json-valid "^2.12.4"
956 | pinkie-promise "^2.0.0"
957 |
958 | has-ansi@^2.0.0:
959 | version "2.0.0"
960 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
961 | dependencies:
962 | ansi-regex "^2.0.0"
963 |
964 | has-flag@^1.0.0:
965 | version "1.0.0"
966 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
967 |
968 | hawk@~3.1.3:
969 | version "3.1.3"
970 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
971 | dependencies:
972 | boom "2.x.x"
973 | cryptiles "2.x.x"
974 | hoek "2.x.x"
975 | sntp "1.x.x"
976 |
977 | hoek@2.x.x:
978 | version "2.16.3"
979 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
980 |
981 | hosted-git-info@^2.1.4:
982 | version "2.2.0"
983 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.2.0.tgz#7a0d097863d886c0fabbdcd37bf1758d8becf8a5"
984 |
985 | http-signature@~1.1.0:
986 | version "1.1.1"
987 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
988 | dependencies:
989 | assert-plus "^0.2.0"
990 | jsprim "^1.2.2"
991 | sshpk "^1.7.0"
992 |
993 | ignore@^3.0.11, ignore@^3.2.0:
994 | version "3.2.4"
995 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.4.tgz#4055e03596729a8fabe45a43c100ad5ed815c4e8"
996 |
997 | imurmurhash@^0.1.4:
998 | version "0.1.4"
999 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1000 |
1001 | indent-string@^2.1.0:
1002 | version "2.1.0"
1003 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
1004 | dependencies:
1005 | repeating "^2.0.0"
1006 |
1007 | inflight@^1.0.4:
1008 | version "1.0.6"
1009 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1010 | dependencies:
1011 | once "^1.3.0"
1012 | wrappy "1"
1013 |
1014 | inherits@2, inherits@^2.0.3, inherits@~2.0.1:
1015 | version "2.0.3"
1016 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
1017 |
1018 | ini@^1.3.2:
1019 | version "1.3.4"
1020 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
1021 |
1022 | inquirer@^0.12.0:
1023 | version "0.12.0"
1024 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
1025 | dependencies:
1026 | ansi-escapes "^1.1.0"
1027 | ansi-regex "^2.0.0"
1028 | chalk "^1.0.0"
1029 | cli-cursor "^1.0.1"
1030 | cli-width "^2.0.0"
1031 | figures "^1.3.5"
1032 | lodash "^4.3.0"
1033 | readline2 "^1.0.1"
1034 | run-async "^0.1.0"
1035 | rx-lite "^3.1.2"
1036 | string-width "^1.0.1"
1037 | strip-ansi "^3.0.0"
1038 | through "^2.3.6"
1039 |
1040 | interpret@^1.0.0:
1041 | version "1.0.1"
1042 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c"
1043 |
1044 | invert-kv@^1.0.0:
1045 | version "1.0.0"
1046 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
1047 |
1048 | is-arrayish@^0.2.1:
1049 | version "0.2.1"
1050 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
1051 |
1052 | is-buffer@^1.0.2:
1053 | version "1.1.5"
1054 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc"
1055 |
1056 | is-builtin-module@^1.0.0:
1057 | version "1.0.0"
1058 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
1059 | dependencies:
1060 | builtin-modules "^1.0.0"
1061 |
1062 | is-finite@^1.0.0:
1063 | version "1.0.2"
1064 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
1065 | dependencies:
1066 | number-is-nan "^1.0.0"
1067 |
1068 | is-fullwidth-code-point@^1.0.0:
1069 | version "1.0.0"
1070 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
1071 | dependencies:
1072 | number-is-nan "^1.0.0"
1073 |
1074 | is-fullwidth-code-point@^2.0.0:
1075 | version "2.0.0"
1076 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
1077 |
1078 | is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4:
1079 | version "2.16.0"
1080 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693"
1081 | dependencies:
1082 | generate-function "^2.0.0"
1083 | generate-object-property "^1.1.0"
1084 | jsonpointer "^4.0.0"
1085 | xtend "^4.0.0"
1086 |
1087 | is-obj@^1.0.0:
1088 | version "1.0.1"
1089 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
1090 |
1091 | is-path-cwd@^1.0.0:
1092 | version "1.0.0"
1093 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
1094 |
1095 | is-path-in-cwd@^1.0.0:
1096 | version "1.0.0"
1097 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
1098 | dependencies:
1099 | is-path-inside "^1.0.0"
1100 |
1101 | is-path-inside@^1.0.0:
1102 | version "1.0.0"
1103 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f"
1104 | dependencies:
1105 | path-is-inside "^1.0.1"
1106 |
1107 | is-property@^1.0.0:
1108 | version "1.0.2"
1109 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
1110 |
1111 | is-resolvable@^1.0.0:
1112 | version "1.0.0"
1113 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62"
1114 | dependencies:
1115 | tryit "^1.0.1"
1116 |
1117 | is-subset@^0.1.1:
1118 | version "0.1.1"
1119 | resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6"
1120 |
1121 | is-text-path@^1.0.0:
1122 | version "1.0.1"
1123 | resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e"
1124 | dependencies:
1125 | text-extensions "^1.0.0"
1126 |
1127 | is-typedarray@~1.0.0:
1128 | version "1.0.0"
1129 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
1130 |
1131 | is-utf8@^0.2.0:
1132 | version "0.2.1"
1133 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
1134 |
1135 | isarray@^1.0.0, isarray@~1.0.0:
1136 | version "1.0.0"
1137 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1138 |
1139 | isexe@^1.1.1:
1140 | version "1.1.2"
1141 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0"
1142 |
1143 | isstream@~0.1.2:
1144 | version "0.1.2"
1145 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
1146 |
1147 | istanbul@^0.3.14:
1148 | version "0.3.22"
1149 | resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.3.22.tgz#3e164d85021fe19c985d1f0e7ef0c3e22d012eb6"
1150 | dependencies:
1151 | abbrev "1.0.x"
1152 | async "1.x"
1153 | escodegen "1.7.x"
1154 | esprima "2.5.x"
1155 | fileset "0.2.x"
1156 | handlebars "^4.0.1"
1157 | js-yaml "3.x"
1158 | mkdirp "0.5.x"
1159 | nopt "3.x"
1160 | once "1.x"
1161 | resolve "1.1.x"
1162 | supports-color "^3.1.0"
1163 | which "^1.1.1"
1164 | wordwrap "^1.0.0"
1165 |
1166 | jade@0.26.3:
1167 | version "0.26.3"
1168 | resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c"
1169 | dependencies:
1170 | commander "0.6.1"
1171 | mkdirp "0.3.0"
1172 |
1173 | jodid25519@^1.0.0:
1174 | version "1.0.2"
1175 | resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
1176 | dependencies:
1177 | jsbn "~0.1.0"
1178 |
1179 | js-tokens@^3.0.0:
1180 | version "3.0.1"
1181 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
1182 |
1183 | js-yaml@3.6.1, js-yaml@3.x, js-yaml@^3.5.1:
1184 | version "3.6.1"
1185 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30"
1186 | dependencies:
1187 | argparse "^1.0.7"
1188 | esprima "^2.6.0"
1189 |
1190 | jsbn@~0.1.0:
1191 | version "0.1.1"
1192 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
1193 |
1194 | json-schema@0.2.3:
1195 | version "0.2.3"
1196 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
1197 |
1198 | json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
1199 | version "1.0.1"
1200 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
1201 | dependencies:
1202 | jsonify "~0.0.0"
1203 |
1204 | json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
1205 | version "5.0.1"
1206 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
1207 |
1208 | json5@^0.5.0:
1209 | version "0.5.1"
1210 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
1211 |
1212 | jsonify@~0.0.0:
1213 | version "0.0.0"
1214 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
1215 |
1216 | jsonparse@^1.2.0:
1217 | version "1.3.0"
1218 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.0.tgz#85fc245b1d9259acc6941960b905adf64e7de0e8"
1219 |
1220 | jsonpointer@^4.0.0:
1221 | version "4.0.1"
1222 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
1223 |
1224 | jsprim@^1.2.2:
1225 | version "1.4.0"
1226 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918"
1227 | dependencies:
1228 | assert-plus "1.0.0"
1229 | extsprintf "1.0.2"
1230 | json-schema "0.2.3"
1231 | verror "1.3.6"
1232 |
1233 | kind-of@^3.0.2:
1234 | version "3.1.0"
1235 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
1236 | dependencies:
1237 | is-buffer "^1.0.2"
1238 |
1239 | lazy-cache@^1.0.3:
1240 | version "1.0.4"
1241 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
1242 |
1243 | lcid@^1.0.0:
1244 | version "1.0.0"
1245 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
1246 | dependencies:
1247 | invert-kv "^1.0.0"
1248 |
1249 | lcov-parse@0.0.10:
1250 | version "0.0.10"
1251 | resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3"
1252 |
1253 | levn@^0.3.0, levn@~0.3.0:
1254 | version "0.3.0"
1255 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
1256 | dependencies:
1257 | prelude-ls "~1.1.2"
1258 | type-check "~0.3.2"
1259 |
1260 | levn@~0.2.5:
1261 | version "0.2.5"
1262 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.2.5.tgz#ba8d339d0ca4a610e3a3f145b9caf48807155054"
1263 | dependencies:
1264 | prelude-ls "~1.1.0"
1265 | type-check "~0.3.1"
1266 |
1267 | load-json-file@^1.0.0:
1268 | version "1.1.0"
1269 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
1270 | dependencies:
1271 | graceful-fs "^4.1.2"
1272 | parse-json "^2.2.0"
1273 | pify "^2.0.0"
1274 | pinkie-promise "^2.0.0"
1275 | strip-bom "^2.0.0"
1276 |
1277 | lodash._reinterpolate@~3.0.0:
1278 | version "3.0.0"
1279 | resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
1280 |
1281 | lodash.template@^4.0.2:
1282 | version "4.4.0"
1283 | resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0"
1284 | dependencies:
1285 | lodash._reinterpolate "~3.0.0"
1286 | lodash.templatesettings "^4.0.0"
1287 |
1288 | lodash.templatesettings@^4.0.0:
1289 | version "4.1.0"
1290 | resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316"
1291 | dependencies:
1292 | lodash._reinterpolate "~3.0.0"
1293 |
1294 | lodash@^4.0.0, lodash@^4.2.1, lodash@^4.3.0:
1295 | version "4.17.4"
1296 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
1297 |
1298 | log-driver@1.2.5:
1299 | version "1.2.5"
1300 | resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056"
1301 |
1302 | longest@^1.0.1:
1303 | version "1.0.1"
1304 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
1305 |
1306 | loud-rejection@^1.0.0:
1307 | version "1.6.0"
1308 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
1309 | dependencies:
1310 | currently-unhandled "^0.4.1"
1311 | signal-exit "^3.0.0"
1312 |
1313 | lru-cache@2:
1314 | version "2.7.3"
1315 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
1316 |
1317 | map-obj@^1.0.0, map-obj@^1.0.1:
1318 | version "1.0.1"
1319 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
1320 |
1321 | meow@^3.3.0:
1322 | version "3.7.0"
1323 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
1324 | dependencies:
1325 | camelcase-keys "^2.0.0"
1326 | decamelize "^1.1.2"
1327 | loud-rejection "^1.0.0"
1328 | map-obj "^1.0.1"
1329 | minimist "^1.1.3"
1330 | normalize-package-data "^2.3.4"
1331 | object-assign "^4.0.1"
1332 | read-pkg-up "^1.0.1"
1333 | redent "^1.0.0"
1334 | trim-newlines "^1.0.0"
1335 |
1336 | mime-db@~1.26.0:
1337 | version "1.26.0"
1338 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff"
1339 |
1340 | mime-types@^2.1.12, mime-types@~2.1.7:
1341 | version "2.1.14"
1342 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee"
1343 | dependencies:
1344 | mime-db "~1.26.0"
1345 |
1346 | "minimatch@2 || 3", minimatch@^3.0.2:
1347 | version "3.0.3"
1348 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
1349 | dependencies:
1350 | brace-expansion "^1.0.0"
1351 |
1352 | minimatch@2.x:
1353 | version "2.0.10"
1354 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
1355 | dependencies:
1356 | brace-expansion "^1.0.0"
1357 |
1358 | minimatch@~0.2.11:
1359 | version "0.2.14"
1360 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a"
1361 | dependencies:
1362 | lru-cache "2"
1363 | sigmund "~1.0.0"
1364 |
1365 | minimist@0.0.8, minimist@~0.0.1:
1366 | version "0.0.8"
1367 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
1368 |
1369 | minimist@1.2.0, minimist@^1.1.3:
1370 | version "1.2.0"
1371 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
1372 |
1373 | mkdirp@0.3.0:
1374 | version "0.3.0"
1375 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e"
1376 |
1377 | mkdirp@0.5.0:
1378 | version "0.5.0"
1379 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12"
1380 | dependencies:
1381 | minimist "0.0.8"
1382 |
1383 | mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1:
1384 | version "0.5.1"
1385 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
1386 | dependencies:
1387 | minimist "0.0.8"
1388 |
1389 | mocha@^1.21.4:
1390 | version "1.21.5"
1391 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-1.21.5.tgz#7c58b09174df976e434a23b1e8d639873fc529e9"
1392 | dependencies:
1393 | commander "2.3.0"
1394 | debug "2.0.0"
1395 | diff "1.0.8"
1396 | escape-string-regexp "1.0.2"
1397 | glob "3.2.3"
1398 | growl "1.8.1"
1399 | jade "0.26.3"
1400 | mkdirp "0.5.0"
1401 |
1402 | modify-values@^1.0.0:
1403 | version "1.0.0"
1404 | resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.0.tgz#e2b6cdeb9ce19f99317a53722f3dbf5df5eaaab2"
1405 |
1406 | ms@0.6.2:
1407 | version "0.6.2"
1408 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.6.2.tgz#d89c2124c6fdc1353d65a8b77bf1aac4b193708c"
1409 |
1410 | ms@0.7.2:
1411 | version "0.7.2"
1412 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
1413 |
1414 | mute-stream@0.0.5:
1415 | version "0.0.5"
1416 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
1417 |
1418 | natural-compare@^1.4.0:
1419 | version "1.4.0"
1420 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1421 |
1422 | nopt@3.x:
1423 | version "3.0.6"
1424 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
1425 | dependencies:
1426 | abbrev "1"
1427 |
1428 | normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5:
1429 | version "2.3.6"
1430 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff"
1431 | dependencies:
1432 | hosted-git-info "^2.1.4"
1433 | is-builtin-module "^1.0.0"
1434 | semver "2 || 3 || 4 || 5"
1435 | validate-npm-package-license "^3.0.1"
1436 |
1437 | null-check@^1.0.0:
1438 | version "1.0.0"
1439 | resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd"
1440 |
1441 | number-is-nan@^1.0.0:
1442 | version "1.0.1"
1443 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1444 |
1445 | oauth-sign@~0.8.1:
1446 | version "0.8.2"
1447 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
1448 |
1449 | object-assign@^4.0.1, object-assign@^4.1.0:
1450 | version "4.1.1"
1451 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1452 |
1453 | once@1.x, once@^1.3.0:
1454 | version "1.4.0"
1455 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1456 | dependencies:
1457 | wrappy "1"
1458 |
1459 | onetime@^1.0.0:
1460 | version "1.1.0"
1461 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
1462 |
1463 | optimist@^0.6.1:
1464 | version "0.6.1"
1465 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
1466 | dependencies:
1467 | minimist "~0.0.1"
1468 | wordwrap "~0.0.2"
1469 |
1470 | optionator@^0.5.0:
1471 | version "0.5.0"
1472 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.5.0.tgz#b75a8995a2d417df25b6e4e3862f50aa88651368"
1473 | dependencies:
1474 | deep-is "~0.1.2"
1475 | fast-levenshtein "~1.0.0"
1476 | levn "~0.2.5"
1477 | prelude-ls "~1.1.1"
1478 | type-check "~0.3.1"
1479 | wordwrap "~0.0.2"
1480 |
1481 | optionator@^0.8.2:
1482 | version "0.8.2"
1483 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
1484 | dependencies:
1485 | deep-is "~0.1.3"
1486 | fast-levenshtein "~2.0.4"
1487 | levn "~0.3.0"
1488 | prelude-ls "~1.1.2"
1489 | type-check "~0.3.2"
1490 | wordwrap "~1.0.0"
1491 |
1492 | os-homedir@^1.0.0:
1493 | version "1.0.2"
1494 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1495 |
1496 | os-locale@^1.4.0:
1497 | version "1.4.0"
1498 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
1499 | dependencies:
1500 | lcid "^1.0.0"
1501 |
1502 | parse-github-repo-url@^1.3.0:
1503 | version "1.4.0"
1504 | resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.0.tgz#286c53e2c9962e0641649ee3ac9508fca4dd959c"
1505 |
1506 | parse-json@^2.2.0:
1507 | version "2.2.0"
1508 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
1509 | dependencies:
1510 | error-ex "^1.2.0"
1511 |
1512 | path-exists@^2.0.0:
1513 | version "2.1.0"
1514 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
1515 | dependencies:
1516 | pinkie-promise "^2.0.0"
1517 |
1518 | path-is-absolute@^1.0.0:
1519 | version "1.0.1"
1520 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1521 |
1522 | path-is-inside@^1.0.1:
1523 | version "1.0.2"
1524 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
1525 |
1526 | path-parse@^1.0.5:
1527 | version "1.0.5"
1528 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
1529 |
1530 | path-type@^1.0.0:
1531 | version "1.1.0"
1532 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
1533 | dependencies:
1534 | graceful-fs "^4.1.2"
1535 | pify "^2.0.0"
1536 | pinkie-promise "^2.0.0"
1537 |
1538 | pify@^2.0.0, pify@^2.3.0:
1539 | version "2.3.0"
1540 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
1541 |
1542 | pinkie-promise@^2.0.0:
1543 | version "2.0.1"
1544 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
1545 | dependencies:
1546 | pinkie "^2.0.0"
1547 |
1548 | pinkie@^2.0.0:
1549 | version "2.0.4"
1550 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
1551 |
1552 | pluralize@^1.2.1:
1553 | version "1.2.1"
1554 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
1555 |
1556 | prelude-ls@~1.1.0, prelude-ls@~1.1.1, prelude-ls@~1.1.2:
1557 | version "1.1.2"
1558 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
1559 |
1560 | process-nextick-args@~1.0.6:
1561 | version "1.0.7"
1562 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
1563 |
1564 | progress@^1.1.8:
1565 | version "1.1.8"
1566 | resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
1567 |
1568 | punycode@^1.4.1:
1569 | version "1.4.1"
1570 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
1571 |
1572 | q@^1.4.1:
1573 | version "1.4.1"
1574 | resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
1575 |
1576 | qs@~6.3.0:
1577 | version "6.3.2"
1578 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c"
1579 |
1580 | read-pkg-up@^1.0.1:
1581 | version "1.0.1"
1582 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
1583 | dependencies:
1584 | find-up "^1.0.0"
1585 | read-pkg "^1.0.0"
1586 |
1587 | read-pkg@^1.0.0, read-pkg@^1.1.0:
1588 | version "1.1.0"
1589 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
1590 | dependencies:
1591 | load-json-file "^1.0.0"
1592 | normalize-package-data "^2.3.2"
1593 | path-type "^1.0.0"
1594 |
1595 | readable-stream@^2.1.5, readable-stream@^2.2.2:
1596 | version "2.2.5"
1597 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.5.tgz#a0b187304e05bab01a4ce2b4cc9c607d5aa1d606"
1598 | dependencies:
1599 | buffer-shims "^1.0.0"
1600 | core-util-is "~1.0.0"
1601 | inherits "~2.0.1"
1602 | isarray "~1.0.0"
1603 | process-nextick-args "~1.0.6"
1604 | string_decoder "~0.10.x"
1605 | util-deprecate "~1.0.1"
1606 |
1607 | readline2@^1.0.1:
1608 | version "1.0.1"
1609 | resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
1610 | dependencies:
1611 | code-point-at "^1.0.0"
1612 | is-fullwidth-code-point "^1.0.0"
1613 | mute-stream "0.0.5"
1614 |
1615 | rechoir@^0.6.2:
1616 | version "0.6.2"
1617 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
1618 | dependencies:
1619 | resolve "^1.1.6"
1620 |
1621 | redent@^1.0.0:
1622 | version "1.0.0"
1623 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
1624 | dependencies:
1625 | indent-string "^2.1.0"
1626 | strip-indent "^1.0.1"
1627 |
1628 | repeat-string@^1.5.2:
1629 | version "1.6.1"
1630 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
1631 |
1632 | repeating@^2.0.0:
1633 | version "2.0.1"
1634 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
1635 | dependencies:
1636 | is-finite "^1.0.0"
1637 |
1638 | request@2.79.0:
1639 | version "2.79.0"
1640 | resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
1641 | dependencies:
1642 | aws-sign2 "~0.6.0"
1643 | aws4 "^1.2.1"
1644 | caseless "~0.11.0"
1645 | combined-stream "~1.0.5"
1646 | extend "~3.0.0"
1647 | forever-agent "~0.6.1"
1648 | form-data "~2.1.1"
1649 | har-validator "~2.0.6"
1650 | hawk "~3.1.3"
1651 | http-signature "~1.1.0"
1652 | is-typedarray "~1.0.0"
1653 | isstream "~0.1.2"
1654 | json-stringify-safe "~5.0.1"
1655 | mime-types "~2.1.7"
1656 | oauth-sign "~0.8.1"
1657 | qs "~6.3.0"
1658 | stringstream "~0.0.4"
1659 | tough-cookie "~2.3.0"
1660 | tunnel-agent "~0.4.1"
1661 | uuid "^3.0.0"
1662 |
1663 | require-directory@^2.1.1:
1664 | version "2.1.1"
1665 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
1666 |
1667 | require-main-filename@^1.0.1:
1668 | version "1.0.1"
1669 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
1670 |
1671 | require-uncached@^1.0.2:
1672 | version "1.0.3"
1673 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
1674 | dependencies:
1675 | caller-path "^0.1.0"
1676 | resolve-from "^1.0.0"
1677 |
1678 | resolve-from@^1.0.0:
1679 | version "1.0.1"
1680 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
1681 |
1682 | resolve@1.1.x:
1683 | version "1.1.7"
1684 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
1685 |
1686 | resolve@^1.1.6, resolve@^1.1.7:
1687 | version "1.3.2"
1688 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235"
1689 | dependencies:
1690 | path-parse "^1.0.5"
1691 |
1692 | restore-cursor@^1.0.1:
1693 | version "1.0.1"
1694 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
1695 | dependencies:
1696 | exit-hook "^1.0.0"
1697 | onetime "^1.0.0"
1698 |
1699 | right-align@^0.1.1:
1700 | version "0.1.3"
1701 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
1702 | dependencies:
1703 | align-text "^0.1.1"
1704 |
1705 | rimraf@^2.2.8:
1706 | version "2.6.1"
1707 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
1708 | dependencies:
1709 | glob "^7.0.5"
1710 |
1711 | run-async@^0.1.0:
1712 | version "0.1.0"
1713 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
1714 | dependencies:
1715 | once "^1.3.0"
1716 |
1717 | rx-lite@^3.1.2:
1718 | version "3.1.2"
1719 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
1720 |
1721 | "semver@2 || 3 || 4 || 5", semver@5.3.0, semver@^5.0.1, semver@^5.1.0:
1722 | version "5.3.0"
1723 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
1724 |
1725 | set-blocking@^2.0.0:
1726 | version "2.0.0"
1727 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
1728 |
1729 | shelljs@^0.7.5:
1730 | version "0.7.7"
1731 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1"
1732 | dependencies:
1733 | glob "^7.0.0"
1734 | interpret "^1.0.0"
1735 | rechoir "^0.6.2"
1736 |
1737 | sigmund@~1.0.0:
1738 | version "1.0.1"
1739 | resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
1740 |
1741 | signal-exit@^3.0.0:
1742 | version "3.0.2"
1743 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
1744 |
1745 | slice-ansi@0.0.4:
1746 | version "0.0.4"
1747 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
1748 |
1749 | sntp@1.x.x:
1750 | version "1.0.9"
1751 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
1752 | dependencies:
1753 | hoek "2.x.x"
1754 |
1755 | source-map@^0.4.4:
1756 | version "0.4.4"
1757 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
1758 | dependencies:
1759 | amdefine ">=0.0.4"
1760 |
1761 | source-map@~0.2.0:
1762 | version "0.2.0"
1763 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
1764 | dependencies:
1765 | amdefine ">=0.0.4"
1766 |
1767 | source-map@~0.5.1:
1768 | version "0.5.6"
1769 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
1770 |
1771 | spdx-correct@~1.0.0:
1772 | version "1.0.2"
1773 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
1774 | dependencies:
1775 | spdx-license-ids "^1.0.2"
1776 |
1777 | spdx-expression-parse@~1.0.0:
1778 | version "1.0.4"
1779 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
1780 |
1781 | spdx-license-ids@^1.0.2:
1782 | version "1.2.2"
1783 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
1784 |
1785 | split2@^2.0.0:
1786 | version "2.1.1"
1787 | resolved "https://registry.yarnpkg.com/split2/-/split2-2.1.1.tgz#7a1f551e176a90ecd3345f7246a0cfe175ef4fd0"
1788 | dependencies:
1789 | through2 "^2.0.2"
1790 |
1791 | split@^1.0.0:
1792 | version "1.0.0"
1793 | resolved "https://registry.yarnpkg.com/split/-/split-1.0.0.tgz#c4395ce683abcd254bc28fe1dabb6e5c27dcffae"
1794 | dependencies:
1795 | through "2"
1796 |
1797 | sprintf-js@~1.0.2:
1798 | version "1.0.3"
1799 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
1800 |
1801 | sshpk@^1.7.0:
1802 | version "1.11.0"
1803 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77"
1804 | dependencies:
1805 | asn1 "~0.2.3"
1806 | assert-plus "^1.0.0"
1807 | dashdash "^1.12.0"
1808 | getpass "^0.1.1"
1809 | optionalDependencies:
1810 | bcrypt-pbkdf "^1.0.0"
1811 | ecc-jsbn "~0.1.1"
1812 | jodid25519 "^1.0.0"
1813 | jsbn "~0.1.0"
1814 | tweetnacl "~0.14.0"
1815 |
1816 | standard-version@^4.0.0:
1817 | version "4.0.0"
1818 | resolved "https://registry.yarnpkg.com/standard-version/-/standard-version-4.0.0.tgz#e578cefd43ab7b02944bd7569525052eac1b9787"
1819 | dependencies:
1820 | chalk "^1.1.3"
1821 | conventional-changelog "^1.1.0"
1822 | conventional-recommended-bump "^0.3.0"
1823 | figures "^1.5.0"
1824 | fs-access "^1.0.0"
1825 | object-assign "^4.1.0"
1826 | semver "^5.1.0"
1827 | yargs "^6.0.0"
1828 |
1829 | string-width@^1.0.1, string-width@^1.0.2:
1830 | version "1.0.2"
1831 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
1832 | dependencies:
1833 | code-point-at "^1.0.0"
1834 | is-fullwidth-code-point "^1.0.0"
1835 | strip-ansi "^3.0.0"
1836 |
1837 | string-width@^2.0.0:
1838 | version "2.0.0"
1839 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e"
1840 | dependencies:
1841 | is-fullwidth-code-point "^2.0.0"
1842 | strip-ansi "^3.0.0"
1843 |
1844 | string_decoder@~0.10.x:
1845 | version "0.10.31"
1846 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
1847 |
1848 | stringstream@~0.0.4:
1849 | version "0.0.5"
1850 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
1851 |
1852 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
1853 | version "3.0.1"
1854 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
1855 | dependencies:
1856 | ansi-regex "^2.0.0"
1857 |
1858 | strip-bom@^2.0.0:
1859 | version "2.0.0"
1860 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
1861 | dependencies:
1862 | is-utf8 "^0.2.0"
1863 |
1864 | strip-bom@^3.0.0:
1865 | version "3.0.0"
1866 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
1867 |
1868 | strip-indent@^1.0.1:
1869 | version "1.0.1"
1870 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
1871 | dependencies:
1872 | get-stdin "^4.0.1"
1873 |
1874 | strip-json-comments@~2.0.1:
1875 | version "2.0.1"
1876 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
1877 |
1878 | supports-color@^2.0.0:
1879 | version "2.0.0"
1880 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
1881 |
1882 | supports-color@^3.1.0:
1883 | version "3.2.3"
1884 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
1885 | dependencies:
1886 | has-flag "^1.0.0"
1887 |
1888 | table@^3.7.8:
1889 | version "3.8.3"
1890 | resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
1891 | dependencies:
1892 | ajv "^4.7.0"
1893 | ajv-keywords "^1.0.0"
1894 | chalk "^1.1.1"
1895 | lodash "^4.0.0"
1896 | slice-ansi "0.0.4"
1897 | string-width "^2.0.0"
1898 |
1899 | text-extensions@^1.0.0:
1900 | version "1.4.0"
1901 | resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.4.0.tgz#c385d2e80879fe6ef97893e1709d88d9453726e9"
1902 |
1903 | text-table@~0.2.0:
1904 | version "0.2.0"
1905 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1906 |
1907 | through2@^2.0.0, through2@^2.0.2:
1908 | version "2.0.3"
1909 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
1910 | dependencies:
1911 | readable-stream "^2.1.5"
1912 | xtend "~4.0.1"
1913 |
1914 | through@2, "through@>=2.2.7 <3", through@^2.3.6:
1915 | version "2.3.8"
1916 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
1917 |
1918 | tough-cookie@~2.3.0:
1919 | version "2.3.2"
1920 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
1921 | dependencies:
1922 | punycode "^1.4.1"
1923 |
1924 | trim-newlines@^1.0.0:
1925 | version "1.0.0"
1926 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
1927 |
1928 | trim-off-newlines@^1.0.0:
1929 | version "1.0.1"
1930 | resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
1931 |
1932 | tryit@^1.0.1:
1933 | version "1.0.3"
1934 | resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
1935 |
1936 | tunnel-agent@~0.4.1:
1937 | version "0.4.3"
1938 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
1939 |
1940 | tweetnacl@^0.14.3, tweetnacl@~0.14.0:
1941 | version "0.14.5"
1942 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
1943 |
1944 | type-check@~0.3.1, type-check@~0.3.2:
1945 | version "0.3.2"
1946 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
1947 | dependencies:
1948 | prelude-ls "~1.1.2"
1949 |
1950 | typedarray@^0.0.6:
1951 | version "0.0.6"
1952 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
1953 |
1954 | uglify-js@^2.6:
1955 | version "2.8.12"
1956 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.12.tgz#8a50f5d482243650b7108f6080aa3a6afe2a6c55"
1957 | dependencies:
1958 | source-map "~0.5.1"
1959 | uglify-to-browserify "~1.0.0"
1960 | yargs "~3.10.0"
1961 |
1962 | uglify-to-browserify@~1.0.0:
1963 | version "1.0.2"
1964 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
1965 |
1966 | user-home@^2.0.0:
1967 | version "2.0.0"
1968 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
1969 | dependencies:
1970 | os-homedir "^1.0.0"
1971 |
1972 | util-deprecate@~1.0.1:
1973 | version "1.0.2"
1974 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1975 |
1976 | uuid@^3.0.0:
1977 | version "3.0.1"
1978 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
1979 |
1980 | validate-npm-package-license@^3.0.1:
1981 | version "3.0.1"
1982 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
1983 | dependencies:
1984 | spdx-correct "~1.0.0"
1985 | spdx-expression-parse "~1.0.0"
1986 |
1987 | verror@1.3.6:
1988 | version "1.3.6"
1989 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
1990 | dependencies:
1991 | extsprintf "1.0.2"
1992 |
1993 | which-module@^1.0.0:
1994 | version "1.0.0"
1995 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
1996 |
1997 | which@^1.1.1:
1998 | version "1.2.12"
1999 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
2000 | dependencies:
2001 | isexe "^1.1.1"
2002 |
2003 | window-size@0.1.0:
2004 | version "0.1.0"
2005 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
2006 |
2007 | wordwrap@0.0.2:
2008 | version "0.0.2"
2009 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
2010 |
2011 | wordwrap@^1.0.0, wordwrap@~1.0.0:
2012 | version "1.0.0"
2013 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
2014 |
2015 | wordwrap@~0.0.2:
2016 | version "0.0.3"
2017 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
2018 |
2019 | wrap-ansi@^2.0.0:
2020 | version "2.1.0"
2021 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
2022 | dependencies:
2023 | string-width "^1.0.1"
2024 | strip-ansi "^3.0.1"
2025 |
2026 | wrappy@1:
2027 | version "1.0.2"
2028 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
2029 |
2030 | write@^0.2.1:
2031 | version "0.2.1"
2032 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
2033 | dependencies:
2034 | mkdirp "^0.5.1"
2035 |
2036 | xtend@^4.0.0, xtend@~4.0.1:
2037 | version "4.0.1"
2038 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
2039 |
2040 | y18n@^3.2.1:
2041 | version "3.2.1"
2042 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
2043 |
2044 | yargs-parser@^4.2.0:
2045 | version "4.2.1"
2046 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"
2047 | dependencies:
2048 | camelcase "^3.0.0"
2049 |
2050 | yargs@^6.0.0:
2051 | version "6.6.0"
2052 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
2053 | dependencies:
2054 | camelcase "^3.0.0"
2055 | cliui "^3.2.0"
2056 | decamelize "^1.1.1"
2057 | get-caller-file "^1.0.1"
2058 | os-locale "^1.4.0"
2059 | read-pkg-up "^1.0.1"
2060 | require-directory "^2.1.1"
2061 | require-main-filename "^1.0.1"
2062 | set-blocking "^2.0.0"
2063 | string-width "^1.0.2"
2064 | which-module "^1.0.0"
2065 | y18n "^3.2.1"
2066 | yargs-parser "^4.2.0"
2067 |
2068 | yargs@~3.10.0:
2069 | version "3.10.0"
2070 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
2071 | dependencies:
2072 | camelcase "^1.0.2"
2073 | cliui "^2.1.0"
2074 | decamelize "^1.0.0"
2075 | window-size "0.1.0"
2076 |
--------------------------------------------------------------------------------