Improve arguments generation

This commit is contained in:
Tobias Koppers 2020-03-09 16:24:04 +01:00
parent c0c98f4254
commit dcd7f3245d
6 changed files with 483 additions and 242 deletions

View File

@ -7,19 +7,21 @@
const schema = require("../schemas/WebpackOptions.json"); const schema = require("../schemas/WebpackOptions.json");
const getFlags = ({ filter = undefined } = {}) => { const getArguments = () => {
const flags = {}; const flags = {};
function decamelize(input) { const pathToArgumentName = input => {
return input return input
.replace(/\//g, "-")
.replace( .replace(
/(\p{Uppercase_Letter}+|\p{Lowercase_Letter}|\d)(\p{Uppercase_Letter})/gu, /(\p{Uppercase_Letter}+|\p{Lowercase_Letter}|\d)(\p{Uppercase_Letter})/gu,
"$1-$2" "$1-$2"
) )
.replace(/-?[^\p{Uppercase_Letter}\p{Lowercase_Letter}\d]+/gu, "-")
.toLowerCase(); .toLowerCase();
} };
function getSchemaPart(path) { const getSchemaPart = path => {
const newPath = path.split("/"); const newPath = path.split("/");
let schemaPart = schema; let schemaPart = schema;
@ -35,22 +37,59 @@ const getFlags = ({ filter = undefined } = {}) => {
} }
return schemaPart; return schemaPart;
}
const ignoredSchemaPaths = new Set(["devServer"]);
const specialSchemaPathNames = {
"node/__dirname": "node/dirname",
"node/__filename": "node/filename"
}; };
function addFlag(schemaPath, schemaPart, multiple) { const getTypesFromSchema = schemaPart => {
if (filter && !filter(schemaPath, schemaPart)) return; const result = new Set();
const name = decamelize(schemaPath.replace(/\./g, "-")); if (schemaPart.enum) {
const types = schemaPart.enum for (const value of schemaPart.enum) {
? [...new Set(schemaPart.enum.map(item => typeof item))] switch (typeof value) {
: Array.isArray(schemaPart.type) case "string":
? schemaPart.type result.add("string");
: [schemaPart.type]; break;
case "boolean":
result.add("boolean");
break;
case "number":
result.add("number");
break;
}
}
}
if (schemaPart.type) {
const types = new Set(
Array.isArray(schemaPart.type) ? schemaPart.type : [schemaPart.type]
);
if (types.has("number")) {
result.add("number");
}
if (types.has("string")) {
result.add("string");
}
if (types.has("boolean")) {
result.add("boolean");
}
}
if (schemaPart.instanceof === "RegExp") {
result.add("string");
}
return Array.from(result);
};
const getDescription = (schemaPart, path) => {
const fullPath = [...path, schemaPart];
for (let i = fullPath.length - 1; i > 0; i--) {
const part = fullPath[i];
if (part.cli && part.cli.helper) continue;
if (part.description) return part.description;
}
};
const addFlag = (schemaPath, schemaPart, path, multiple) => {
const name = pathToArgumentName(schemaPath);
const description = getDescription(schemaPart, path);
const types = getTypesFromSchema(schemaPart);
if (types.length === 0) return;
if (!flags[name]) { if (!flags[name]) {
flags[name] = { flags[name] = {
@ -78,21 +117,24 @@ const getFlags = ({ filter = undefined } = {}) => {
if ( if (
flags[name].description && flags[name].description &&
schemaPart.description && description &&
!flags[name].description.includes(schemaPart.description) !flags[name].description.includes(description)
) { ) {
flags[name].description += ` ${schemaPart.description}`; flags[name].description += ` ${description}`;
} }
} };
// TODO support `not` and `if/then/else` // TODO support `not` and `if/then/else`
// TODO support `const`, but we don't use it on our schema // TODO support `const`, but we don't use it on our schema
function traverse(schemaPart, schemaPath = "", depth = 0, inArray = false) { /**
if (ignoredSchemaPaths.has(schemaPath)) { *
return; * @param {object} schemaPart the current schema
} * @param {string} schemaPath the current path in the schema
* @param {object[]} path all previous visisted schemaParts
if (depth === 10) { * @param {string | null} inArray if inside of an array, the path to the array
*/
const traverse = (schemaPart, schemaPath = "", path = [], inArray = null) => {
if (path.includes(schemaPart)) {
return; return;
} }
@ -100,44 +142,38 @@ const getFlags = ({ filter = undefined } = {}) => {
schemaPart = getSchemaPart(schemaPart.$ref); schemaPart = getSchemaPart(schemaPart.$ref);
} }
if ( if (schemaPart.cli && schemaPart.cli.exclude) return;
!schemaPart.type &&
!schemaPart.enum &&
!schemaPart.oneOf &&
!schemaPart.anyOf &&
!schemaPart.allOf
) {
return;
}
if (schemaPart.type === "null") { addFlag(schemaPath, schemaPart, path, !!inArray);
return;
}
if (schemaPart.type === "object") { if (schemaPart.type === "object") {
if (schemaPart.properties) { if (schemaPart.properties) {
Object.keys(schemaPart.properties).forEach(property => for (const property of Object.keys(schemaPart.properties)) {
traverse( traverse(
schemaPart.properties[property], schemaPart.properties[property],
schemaPath ? `${schemaPath}.${property}` : property, schemaPath ? `${schemaPath}.${property}` : property,
depth + 1 [...path, schemaPart],
) inArray
); );
}
} }
return; return;
} }
if (schemaPart.type === "array") { if (schemaPart.type === "array") {
if (inArray) {
return;
}
if (Array.isArray(schemaPart.items)) { if (Array.isArray(schemaPart.items)) {
schemaPart.items.forEach(item => { for (const item of schemaPart.items) {
traverse(item, schemaPath, depth + 1, true); traverse(item, schemaPath, [...path, schemaPart], schemaPath);
}); }
return; return;
} }
traverse(schemaPart.items, schemaPath, depth + 1, true); traverse(schemaPart.items, schemaPath, [...path, schemaPart], schemaPath);
return; return;
} }
@ -147,23 +183,17 @@ const getFlags = ({ filter = undefined } = {}) => {
if (maybeOf) { if (maybeOf) {
const items = maybeOf; const items = maybeOf;
items.forEach((item, index) => for (let i = 0; i < items.length; i++) {
traverse(items[index], schemaPath, depth + 1) traverse(items[i], schemaPath, [...path, schemaPart], inArray);
); }
return; return;
} }
};
if (specialSchemaPathNames[schemaPath]) {
schemaPath = specialSchemaPathNames[schemaPath];
}
addFlag(schemaPath, schemaPart, inArray);
}
traverse(schema); traverse(schema);
return flags; return flags;
}; };
exports.getFlags = getFlags; exports.getArguments = getArguments;

View File

@ -16,8 +16,14 @@
"ArrayOfStringOrStringArrayValues": { "ArrayOfStringOrStringArrayValues": {
"description": "List of string or string-array values.", "description": "List of string or string-array values.",
"type": "array", "type": "array",
"cli": {
"helper": true
},
"items": { "items": {
"description": "String or array of strings.", "description": "String or array of strings.",
"cli": {
"helper": true
},
"anyOf": [ "anyOf": [
{ {
"type": "string", "type": "string",
@ -28,6 +34,9 @@
"items": { "items": {
"description": "A non-empty string.", "description": "A non-empty string.",
"type": "string", "type": "string",
"cli": {
"helper": true
},
"minLength": 1 "minLength": 1
} }
} }
@ -37,9 +46,15 @@
"ArrayOfStringValues": { "ArrayOfStringValues": {
"description": "Array of strings.", "description": "Array of strings.",
"type": "array", "type": "array",
"cli": {
"helper": true
},
"items": { "items": {
"description": "A non-empty string.", "description": "A non-empty string.",
"type": "string", "type": "string",
"cli": {
"helper": true
},
"minLength": 1 "minLength": 1
} }
}, },
@ -917,6 +932,9 @@
"properties": { "properties": {
"defaultRules": { "defaultRules": {
"description": "An array of rules applied by default for modules.", "description": "An array of rules applied by default for modules.",
"cli": {
"exclude": true
},
"anyOf": [ "anyOf": [
{ {
"$ref": "#/definitions/RuleSetRules" "$ref": "#/definitions/RuleSetRules"
@ -2206,6 +2224,9 @@
}, },
"RuleSetCondition": { "RuleSetCondition": {
"description": "A condition matcher.", "description": "A condition matcher.",
"cli": {
"helper": true
},
"anyOf": [ "anyOf": [
{ {
"instanceof": "RegExp", "instanceof": "RegExp",
@ -2256,6 +2277,9 @@
}, },
"RuleSetConditionAbsolute": { "RuleSetConditionAbsolute": {
"description": "A condition matcher matching an absolute path.", "description": "A condition matcher matching an absolute path.",
"cli": {
"helper": true
},
"anyOf": [ "anyOf": [
{ {
"instanceof": "RegExp", "instanceof": "RegExp",
@ -2306,6 +2330,9 @@
}, },
"RuleSetConditionOrConditions": { "RuleSetConditionOrConditions": {
"description": "One or multiple rule conditions.", "description": "One or multiple rule conditions.",
"cli": {
"helper": true
},
"anyOf": [ "anyOf": [
{ {
"$ref": "#/definitions/RuleSetCondition" "$ref": "#/definitions/RuleSetCondition"
@ -2317,6 +2344,9 @@
}, },
"RuleSetConditionOrConditionsAbsolute": { "RuleSetConditionOrConditionsAbsolute": {
"description": "One or multiple rule conditions matching an absolute path.", "description": "One or multiple rule conditions matching an absolute path.",
"cli": {
"helper": true
},
"anyOf": [ "anyOf": [
{ {
"$ref": "#/definitions/RuleSetConditionAbsolute" "$ref": "#/definitions/RuleSetConditionAbsolute"

View File

@ -2,6 +2,6 @@ const webpack = require("../");
describe("Cli", () => { describe("Cli", () => {
it("should generate the correct cli flags", () => { it("should generate the correct cli flags", () => {
expect(webpack.cli.getFlags()).toMatchSnapshot(); expect(webpack.cli.getArguments()).toMatchSnapshot();
}); });
}); });

View File

@ -34,6 +34,7 @@ describe("Schemas", () => {
"$ref", "$ref",
"$id", "$id",
"title", "title",
"cli",
"items", "items",
"properties", "properties",
"additionalProperties", "additionalProperties",

View File

@ -267,11 +267,11 @@ Object {
], ],
}, },
"externals": Object { "externals": Object {
"description": "An exact matched dependency becomes external. The same string is used as external dependency.", "description": "An exact matched dependency becomes external. The same string is used as external dependency. Every matched dependency becomes external.",
"path": "externals", "path": "externals",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -291,7 +291,7 @@ Object {
"path": "infrastructureLogging.debug", "path": "infrastructureLogging.debug",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string", "type": "string",
}, },
Object { Object {
@ -320,146 +320,6 @@ Object {
}, },
], ],
}, },
"module-default-rules-compiler": Object {
"description": undefined,
"path": "module.defaultRules.compiler",
"types": Array [
Object {
"multiple": false,
"type": "string",
},
],
},
"module-default-rules-enforce": Object {
"description": "Enforce this rule as pre or post step.",
"path": "module.defaultRules.enforce",
"types": Array [
Object {
"multiple": false,
"type": "string",
},
],
},
"module-default-rules-exclude": Object {
"description": undefined,
"path": "module.defaultRules.exclude",
"types": Array [
Object {
"multiple": false,
"type": "string",
},
],
},
"module-default-rules-include": Object {
"description": undefined,
"path": "module.defaultRules.include",
"types": Array [
Object {
"multiple": false,
"type": "string",
},
],
},
"module-default-rules-issuer": Object {
"description": undefined,
"path": "module.defaultRules.issuer",
"types": Array [
Object {
"multiple": false,
"type": "string",
},
],
},
"module-default-rules-loader": Object {
"description": "A loader request.",
"path": "module.defaultRules.loader",
"types": Array [
Object {
"multiple": false,
"type": "string",
},
],
},
"module-default-rules-options": Object {
"description": undefined,
"path": "module.defaultRules.options",
"types": Array [
Object {
"multiple": false,
"type": "string",
},
],
},
"module-default-rules-real-resource": Object {
"description": undefined,
"path": "module.defaultRules.realResource",
"types": Array [
Object {
"multiple": false,
"type": "string",
},
],
},
"module-default-rules-resource": Object {
"description": undefined,
"path": "module.defaultRules.resource",
"types": Array [
Object {
"multiple": false,
"type": "string",
},
],
},
"module-default-rules-resource-query": Object {
"description": undefined,
"path": "module.defaultRules.resourceQuery",
"types": Array [
Object {
"multiple": false,
"type": "string",
},
],
},
"module-default-rules-side-effects": Object {
"description": "Flags a module as with or without side effects.",
"path": "module.defaultRules.sideEffects",
"types": Array [
Object {
"multiple": false,
"type": "boolean",
},
],
},
"module-default-rules-test": Object {
"description": undefined,
"path": "module.defaultRules.test",
"types": Array [
Object {
"multiple": false,
"type": "string",
},
],
},
"module-default-rules-type": Object {
"description": "Module type to use for the module.",
"path": "module.defaultRules.type",
"types": Array [
Object {
"multiple": false,
"type": "string",
},
],
},
"module-default-rules-use": Object {
"description": "A loader request.",
"path": "module.defaultRules.use",
"types": Array [
Object {
"multiple": false,
"type": "string",
},
],
},
"module-expr-context-critical": Object { "module-expr-context-critical": Object {
"description": "Enable warnings for full dynamic dependencies.", "description": "Enable warnings for full dynamic dependencies.",
"path": "module.exprContextCritical", "path": "module.exprContextCritical",
@ -488,6 +348,10 @@ Object {
"multiple": false, "multiple": false,
"type": "boolean", "type": "boolean",
}, },
Object {
"multiple": false,
"type": "string",
},
], ],
}, },
"module-expr-context-request": Object { "module-expr-context-request": Object {
@ -501,7 +365,7 @@ Object {
], ],
}, },
"module-no-parse": Object { "module-no-parse": Object {
"description": "An absolute path, when the module starts with this path it is not parsed.", "description": "A regular expression, when matched the module is not parsed. Don't parse files matching. It's matched against the full resolved request. An absolute path, when the module starts with this path it is not parsed.",
"path": "module.noParse", "path": "module.noParse",
"types": Array [ "types": Array [
Object { Object {
@ -515,7 +379,37 @@ Object {
"path": "module.rules.compiler", "path": "module.rules.compiler",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string",
},
],
},
"module-rules-compiler-exclude": Object {
"description": undefined,
"path": "module.rules.compiler.exclude",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-compiler-include": Object {
"description": undefined,
"path": "module.rules.compiler.include",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-compiler-test": Object {
"description": undefined,
"path": "module.rules.compiler.test",
"types": Array [
Object {
"multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -525,7 +419,7 @@ Object {
"path": "module.rules.enforce", "path": "module.rules.enforce",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -535,7 +429,37 @@ Object {
"path": "module.rules.exclude", "path": "module.rules.exclude",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string",
},
],
},
"module-rules-exclude-exclude": Object {
"description": undefined,
"path": "module.rules.exclude.exclude",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-exclude-include": Object {
"description": undefined,
"path": "module.rules.exclude.include",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-exclude-test": Object {
"description": undefined,
"path": "module.rules.exclude.test",
"types": Array [
Object {
"multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -545,7 +469,37 @@ Object {
"path": "module.rules.include", "path": "module.rules.include",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string",
},
],
},
"module-rules-include-exclude": Object {
"description": undefined,
"path": "module.rules.include.exclude",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-include-include": Object {
"description": undefined,
"path": "module.rules.include.include",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-include-test": Object {
"description": undefined,
"path": "module.rules.include.test",
"types": Array [
Object {
"multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -555,7 +509,37 @@ Object {
"path": "module.rules.issuer", "path": "module.rules.issuer",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string",
},
],
},
"module-rules-issuer-exclude": Object {
"description": undefined,
"path": "module.rules.issuer.exclude",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-issuer-include": Object {
"description": undefined,
"path": "module.rules.issuer.include",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-issuer-test": Object {
"description": undefined,
"path": "module.rules.issuer.test",
"types": Array [
Object {
"multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -565,7 +549,37 @@ Object {
"path": "module.rules.loader", "path": "module.rules.loader",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string",
},
],
},
"module-rules-loader-ident": Object {
"description": "Unique loader options identifier.",
"path": "module.rules.loader.ident",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-loader-loader": Object {
"description": "A loader request.",
"path": "module.rules.loader.loader",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-loader-options": Object {
"description": undefined,
"path": "module.rules.loader.options",
"types": Array [
Object {
"multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -575,7 +589,7 @@ Object {
"path": "module.rules.options", "path": "module.rules.options",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -585,7 +599,37 @@ Object {
"path": "module.rules.realResource", "path": "module.rules.realResource",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string",
},
],
},
"module-rules-real-resource-exclude": Object {
"description": undefined,
"path": "module.rules.realResource.exclude",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-real-resource-include": Object {
"description": undefined,
"path": "module.rules.realResource.include",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-real-resource-test": Object {
"description": undefined,
"path": "module.rules.realResource.test",
"types": Array [
Object {
"multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -595,7 +639,27 @@ Object {
"path": "module.rules.resource", "path": "module.rules.resource",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string",
},
],
},
"module-rules-resource-exclude": Object {
"description": undefined,
"path": "module.rules.resource.exclude",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-resource-include": Object {
"description": undefined,
"path": "module.rules.resource.include",
"types": Array [
Object {
"multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -605,7 +669,47 @@ Object {
"path": "module.rules.resourceQuery", "path": "module.rules.resourceQuery",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string",
},
],
},
"module-rules-resource-query-exclude": Object {
"description": undefined,
"path": "module.rules.resourceQuery.exclude",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-resource-query-include": Object {
"description": undefined,
"path": "module.rules.resourceQuery.include",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-resource-query-test": Object {
"description": undefined,
"path": "module.rules.resourceQuery.test",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-resource-test": Object {
"description": undefined,
"path": "module.rules.resource.test",
"types": Array [
Object {
"multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -615,7 +719,7 @@ Object {
"path": "module.rules.sideEffects", "path": "module.rules.sideEffects",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "boolean", "type": "boolean",
}, },
], ],
@ -625,7 +729,37 @@ Object {
"path": "module.rules.test", "path": "module.rules.test",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string",
},
],
},
"module-rules-test-exclude": Object {
"description": undefined,
"path": "module.rules.test.exclude",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-test-include": Object {
"description": undefined,
"path": "module.rules.test.include",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-test-test": Object {
"description": undefined,
"path": "module.rules.test.test",
"types": Array [
Object {
"multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -635,7 +769,7 @@ Object {
"path": "module.rules.type", "path": "module.rules.type",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -645,7 +779,37 @@ Object {
"path": "module.rules.use", "path": "module.rules.use",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string",
},
],
},
"module-rules-use-ident": Object {
"description": "Unique loader options identifier.",
"path": "module.rules.use.ident",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-use-loader": Object {
"description": "A loader request.",
"path": "module.rules.use.loader",
"types": Array [
Object {
"multiple": true,
"type": "string",
},
],
},
"module-rules-use-options": Object {
"description": undefined,
"path": "module.rules.use.options",
"types": Array [
Object {
"multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -698,6 +862,10 @@ Object {
"multiple": false, "multiple": false,
"type": "boolean", "type": "boolean",
}, },
Object {
"multiple": false,
"type": "string",
},
], ],
}, },
"module-unknown-context-request": Object { "module-unknown-context-request": Object {
@ -740,6 +908,16 @@ Object {
}, },
], ],
}, },
"module-wrapped-context-reg-exp": Object {
"description": "Set the inner regular expression for partial dynamic dependencies.",
"path": "module.wrappedContextRegExp",
"types": Array [
Object {
"multiple": false,
"type": "string",
},
],
},
"name": Object { "name": Object {
"description": "Name of the configuration. Used when loading multiple configurations.", "description": "Name of the configuration. Used when loading multiple configurations.",
"path": "name", "path": "name",
@ -760,7 +938,7 @@ Object {
}, },
], ],
}, },
"node-__dirname": Object { "node-dirname": Object {
"description": "Include a polyfill for the '__dirname' variable.", "description": "Include a polyfill for the '__dirname' variable.",
"path": "node.__dirname", "path": "node.__dirname",
"types": Array [ "types": Array [
@ -774,7 +952,7 @@ Object {
}, },
], ],
}, },
"node-__filename": Object { "node-filename": Object {
"description": "Include a polyfill for the '__filename' variable.", "description": "Include a polyfill for the '__filename' variable.",
"path": "node.__filename", "path": "node.__filename",
"types": Array [ "types": Array [
@ -1873,7 +2051,7 @@ Object {
], ],
}, },
"resolve-alias-alias": Object { "resolve-alias-alias": Object {
"description": "New request. One choice of request. Ignore request (replace with empty module).", "description": "New request. Ignore request (replace with empty module).",
"path": "resolve.alias.alias", "path": "resolve.alias.alias",
"types": Array [ "types": Array [
Object { Object {
@ -1881,7 +2059,7 @@ Object {
"type": "string", "type": "string",
}, },
Object { Object {
"multiple": false, "multiple": true,
"type": "boolean", "type": "boolean",
}, },
], ],
@ -1901,7 +2079,7 @@ Object {
"path": "resolve.alias.name", "path": "resolve.alias.name",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -1911,7 +2089,7 @@ Object {
"path": "resolve.alias.onlyModule", "path": "resolve.alias.onlyModule",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "boolean", "type": "boolean",
}, },
], ],
@ -1937,7 +2115,7 @@ Object {
], ],
}, },
"resolve-description-files": Object { "resolve-description-files": Object {
"description": "A non-empty string.", "description": "A non-empty string. Filenames used to find a description file.",
"path": "resolve.descriptionFiles", "path": "resolve.descriptionFiles",
"types": Array [ "types": Array [
Object { Object {
@ -1957,7 +2135,7 @@ Object {
], ],
}, },
"resolve-extensions": Object { "resolve-extensions": Object {
"description": "A non-empty string.", "description": "A non-empty string. Extensions added to the request when trying to find the file.",
"path": "resolve.extensions", "path": "resolve.extensions",
"types": Array [ "types": Array [
Object { Object {
@ -1967,7 +2145,7 @@ Object {
], ],
}, },
"resolve-loader-alias-alias": Object { "resolve-loader-alias-alias": Object {
"description": "New request. One choice of request. Ignore request (replace with empty module).", "description": "New request. Ignore request (replace with empty module).",
"path": "resolveLoader.alias.alias", "path": "resolveLoader.alias.alias",
"types": Array [ "types": Array [
Object { Object {
@ -1975,7 +2153,7 @@ Object {
"type": "string", "type": "string",
}, },
Object { Object {
"multiple": false, "multiple": true,
"type": "boolean", "type": "boolean",
}, },
], ],
@ -1995,7 +2173,7 @@ Object {
"path": "resolveLoader.alias.name", "path": "resolveLoader.alias.name",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -2005,7 +2183,7 @@ Object {
"path": "resolveLoader.alias.onlyModule", "path": "resolveLoader.alias.onlyModule",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "boolean", "type": "boolean",
}, },
], ],
@ -2031,7 +2209,7 @@ Object {
], ],
}, },
"resolve-loader-description-files": Object { "resolve-loader-description-files": Object {
"description": "A non-empty string.", "description": "A non-empty string. Filenames used to find a description file.",
"path": "resolveLoader.descriptionFiles", "path": "resolveLoader.descriptionFiles",
"types": Array [ "types": Array [
Object { Object {
@ -2051,7 +2229,7 @@ Object {
], ],
}, },
"resolve-loader-extensions": Object { "resolve-loader-extensions": Object {
"description": "A non-empty string.", "description": "A non-empty string. Extensions added to the request when trying to find the file.",
"path": "resolveLoader.extensions", "path": "resolveLoader.extensions",
"types": Array [ "types": Array [
Object { Object {
@ -2071,7 +2249,7 @@ Object {
], ],
}, },
"resolve-loader-main-files": Object { "resolve-loader-main-files": Object {
"description": "A non-empty string.", "description": "A non-empty string. Filenames used to find the default entry point if there is no description file or main field.",
"path": "resolveLoader.mainFiles", "path": "resolveLoader.mainFiles",
"types": Array [ "types": Array [
Object { Object {
@ -2081,7 +2259,7 @@ Object {
], ],
}, },
"resolve-loader-modules": Object { "resolve-loader-modules": Object {
"description": "A non-empty string.", "description": "A non-empty string. Folder names or directory paths where to find modules.",
"path": "resolveLoader.modules", "path": "resolveLoader.modules",
"types": Array [ "types": Array [
Object { Object {
@ -2131,7 +2309,7 @@ Object {
], ],
}, },
"resolve-main-files": Object { "resolve-main-files": Object {
"description": "A non-empty string.", "description": "A non-empty string. Filenames used to find the default entry point if there is no description file or main field.",
"path": "resolve.mainFiles", "path": "resolve.mainFiles",
"types": Array [ "types": Array [
Object { Object {
@ -2141,7 +2319,7 @@ Object {
], ],
}, },
"resolve-modules": Object { "resolve-modules": Object {
"description": "A non-empty string.", "description": "A non-empty string. Folder names or directory paths where to find modules.",
"path": "resolve.modules", "path": "resolve.modules",
"types": Array [ "types": Array [
Object { Object {
@ -2479,7 +2657,7 @@ Object {
"path": "stats.exclude", "path": "stats.exclude",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string", "type": "string",
}, },
Object { Object {
@ -2493,7 +2671,7 @@ Object {
"path": "stats.excludeAssets", "path": "stats.excludeAssets",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -2503,7 +2681,7 @@ Object {
"path": "stats.excludeModules", "path": "stats.excludeModules",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string", "type": "string",
}, },
Object { Object {
@ -2551,7 +2729,7 @@ Object {
"path": "stats.loggingDebug", "path": "stats.loggingDebug",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string", "type": "string",
}, },
Object { Object {
@ -2779,7 +2957,7 @@ Object {
"path": "stats.warningsFilter", "path": "stats.warningsFilter",
"types": Array [ "types": Array [
Object { Object {
"multiple": false, "multiple": true,
"type": "string", "type": "string",
}, },
], ],
@ -2815,7 +2993,7 @@ Object {
], ],
}, },
"watch-options-ignored": Object { "watch-options-ignored": Object {
"description": "A single glob pattern for files that should be ignored from watching. A non-empty string.", "description": "A single glob pattern for files that should be ignored from watching. Ignore some files from watching (glob pattern).",
"path": "watchOptions.ignored", "path": "watchOptions.ignored",
"types": Array [ "types": Array [
Object { Object {

View File

@ -43,6 +43,8 @@ const PROPERTIES = [
"description", "description",
"type", "type",
"cli",
"items", "items",
"minItems", "minItems",
"uniqueItems", "uniqueItems",