UNPKG

15.7 kBSource Map (JSON)View Raw
1{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/utils/search.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,+BAAgC;AAsChC;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,UAAkB,EAAE,KAAoB;IACjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IACE,IAAI,CAAC,GAAG;YACP,IAAI,CAAC,GAAW,CAAC,MAAM;YACxB,CAAE,IAAI,CAAC,GAAqB,CAAC,MAAO,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC5D,IAAI,CAAC,GAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC,EACvD;YACA,OAAO,IAAI,CAAC;SACb;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAZD,gCAYC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,KAAoB;IAClD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACjC,KAAK;QACL,IAAI;KACL,CAAC,CAAC,CAAC;AACN,CAAC;AALD,0CAKC;AAED;;;;GAIG;AACH,SAAgB,QAAQ,CAAC,MAAwB;IAC/C,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAC3C,OAAO,eAAe,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC;AAHD,4BAGC;AAED;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,MAAwB;;IACzD,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAC3C,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE;QACnC,MAAM,IAAI,GAAQ,QAAQ,CAAC,IAAI,CAAC;QAChC,IACE,IAAI,CAAC,GAAG;YACR,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;YAC5B,aAAA,IAAI,CAAC,GAAG,CAAC,OAAO,0CAAE,MAAM,0CAAE,mBAAmB,MAAK,mBAAmB,EACrE;YACA,OAAO,IAAI,CAAC;SACb;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAdD,gDAcC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,KAAoB;IACpD,IAAI,MAAM,GAAkB,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SAC/C;aAAM;YACL,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACnB;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAXD,8CAWC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,KAAiB;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;QACvD,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SACzD;QACD,OAAO,4BAA4B,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,iCACtF,MAAM,KACT,IAAI;YACJ,SAAS,IACT,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC;AAbD,kDAaC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,MAAwB;IACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAHD,gCAGC;AAED,SAAS,4BAA4B,CAAC,MAA8B;IAClE,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;QAChC,OAAO,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAC3D;SAAM,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;QAChC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;KAC3C;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAChC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;KACjF;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB,CACrC,MAAwB,EACxB,KAAe;IAEf,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,aAAa,GAAkC,EAAE,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;KACzF;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAVD,0DAUC;AAED;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,MAAwB,EAAE,KAAe;IAC1E,MAAM,KAAK,GAAG,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AACvE,CAAC;AAHD,gDAGC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,IAAgC;IAChE,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACvB,MAAM,KAAK,GAAG,IAAyB,CAAC;QACxC,IAAI,QAAQ,GAAsB,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,QAAQ,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;SACtD;QACD,OAAO,QAAQ,CAAC;KACjB;SAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC;KACf;SAAM,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QACrC,OAAO,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;KACpC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAfD,8CAeC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB,CAClC,SAAuC,EACvC,IAAY;IAEZ,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,IAAI,eAAQ,CAAC,SAAS,CAAC,EAAE;QACvB,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC7B;SAAM,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;QACxC,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;KACnC;SAAM,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;QAC1C,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;KACjC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QACnC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;KAC3D;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;SAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACpB,QAAQ,GAAG,EAAE;YACX,KAAK,MAAM;gBACT,OAAO,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC3C,KAAK,SAAS;gBACZ,OAAO,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC3C,KAAK,SAAS;gBACZ,OAAO,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC5C,KAAK,KAAK;gBACR,OAAQ,KAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YACjF,KAAK,IAAI;gBACP,OAAQ,KAA4B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAChF,KAAK,KAAK;gBACR,OAAQ,KAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAClF;gBACE,OAAO,IAAI,CAAC;SACf;IACH,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAlCD,oDAkCC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,EAAE,OAAO,GAAG,EAAE,EAAoB;IAC3D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC;AAFD,gCAEC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,MAAwB,EAAE,IAAY;IACrE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAc,EAAE,EAAE;QAC1D,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE;YAChC,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC;SACzC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAPD,4CAOC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,MAAkB;IAC9C,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;AAC/F,CAAC;AAFD,sCAEC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,MAAkB;IAChD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7F,CAAC;AAFD,0CAEC;AAED;;;;GAIG;AACH,SAAgB,OAAO,CAAC,GAAQ;IAC9B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE;QAC3C,OAAO,KAAK,CAAC;KACd;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACtC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;SACxD;QACD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAVD,0BAUC;AAED;;;;GAIG;AACI,KAAK,UAAU,iBAAiB,CAAC,GAAQ;IAC9C,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;KAC7D;IAED,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;QAC7B,OAAO,iBAAiB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;KACvC;SAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAClC,OAAO,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KACjC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC7B,OAAO;YACL,GAAG,EAAE,GAAG;SACT,CAAC;KACH;SAAM,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;QACvB,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,IAAI,KAAK,CAAC,4CAA4C,GAAG,GAAG,CAAC,CAAC;AACtE,CAAC;AAlBD,8CAkBC","sourcesContent":["/**\n * Loader flattening inspired by:\n * https://github.com/preactjs/preact-cli-experiment/tree/7b80623/packages/cli-plugin-legacy-config\n */\nimport { isRegExp } from 'util';\nimport {\n Configuration,\n Entry,\n Plugin,\n Rule,\n RuleSetCondition,\n RuleSetLoader,\n RuleSetRule,\n RuleSetUse,\n RuleSetUseItem,\n} from 'webpack';\n\nimport { DevConfiguration } from '../types';\n\ntype AnyConfiguration = Configuration | DevConfiguration;\n\ntype LoaderItemLoaderPart = Pick<LoaderItem, 'loader' | 'loaderIndex'>;\n\ninterface RuleItem {\n rule: RuleSetRule;\n index: number;\n}\n\ntype ResolvedRuleSet = string | RuleSetLoader;\n\ninterface PluginItem {\n plugin: Plugin;\n index: number;\n}\n\ninterface LoaderItem {\n rule: RuleSetRule;\n ruleIndex: number;\n loader: RuleSetUseItem;\n loaderIndex: number;\n}\n\n/**\n *\n * @param loaderName\n * @param rules\n * @category utils\n */\nexport function findLoader(loaderName: string, rules: RuleSetRule[]): RuleSetRule | null {\n for (const rule of rules) {\n if (\n rule.use &&\n (rule.use as any).loader &&\n ((rule.use as RuleSetLoader).loader!.includes(`/${loaderName}`) ||\n (rule.use as any).loader.includes(`\\\\${loaderName}`))\n ) {\n return rule;\n }\n }\n return null;\n}\n\n/**\n *\n * @param rules\n * @category utils\n */\nexport function getRulesAsItems(rules: RuleSetRule[]): RuleItem[] {\n return rules.map((rule, index) => ({\n index,\n rule,\n }));\n}\n\n/**\n *\n * @param config\n * @category utils\n */\nexport function getRules(config: AnyConfiguration): RuleItem[] {\n const { rules = [] } = config.module || {};\n return getRulesAsItems(getRulesFromRules(rules));\n}\n\n/**\n * Get the babel-loader rule created by `@expo/webpack-config/loaders`\n *\n * @param config\n * @category utils\n */\nexport function getExpoBabelLoader(config: AnyConfiguration): Rule | null {\n const { rules = [] } = config.module || {};\n const currentRules = getRulesAsItems(getRulesFromRules(rules));\n for (const ruleItem of currentRules) {\n const rule: any = ruleItem.rule;\n if (\n rule.use &&\n typeof rule.use === 'object' &&\n rule.use.options?.caller?.__dangerous_rule_id === 'expo-babel-loader'\n ) {\n return rule;\n }\n }\n return null;\n}\n\n/**\n *\n * @param rules\n * @category utils\n */\nexport function getRulesFromRules(rules: RuleSetRule[]): RuleSetRule[] {\n let output: RuleSetRule[] = [];\n\n for (const rule of rules) {\n if (rule.oneOf) {\n output.push(...getRulesFromRules(rule.oneOf));\n } else {\n output.push(rule);\n }\n }\n return output;\n}\n\n/**\n *\n * @param rules\n * @category utils\n */\nexport function getLoadersFromRules(rules: RuleItem[]): LoaderItem[] {\n const loaders = rules.map(({ rule, index: ruleIndex }) => {\n if (rule.oneOf) {\n return getLoadersFromRules(getRulesAsItems(rule.oneOf));\n }\n return loaderToLoaderItemLoaderPart(rule.loaders || rule.loader || rule.use).map(loader => ({\n ...loader,\n rule,\n ruleIndex,\n }));\n });\n\n return loaders.reduce((arr, a) => arr.concat(a), []);\n}\n\n/**\n *\n * @param config\n * @category utils\n */\nexport function getLoaders(config: AnyConfiguration): LoaderItem[] {\n const rules = getRules(config);\n return getLoadersFromRules(rules);\n}\n\nfunction loaderToLoaderItemLoaderPart(loader: RuleSetUse | undefined): Array<LoaderItemLoaderPart> {\n if (!loader) return [];\n const loaders: LoaderItemLoaderPart[] = [];\n if (typeof loader === 'function') {\n loaders.push(...loaderToLoaderItemLoaderPart(loader({})));\n } else if (isRuleSetItem(loader)) {\n loaders.push({ loader, loaderIndex: -1 });\n } else if (Array.isArray(loader)) {\n loaders.push(...loader.map((loader, loaderIndex) => ({ loader, loaderIndex })));\n }\n return loaders;\n}\n\n/**\n *\n * @param config\n * @param files\n * @category utils\n */\nexport function getRulesByMatchingFiles(\n config: AnyConfiguration,\n files: string[]\n): { [key: string]: RuleItem[] } {\n const rules = getRules(config);\n let selectedRules: { [key: string]: RuleItem[] } = {};\n for (const file of files) {\n selectedRules[file] = rules.filter(({ rule }) => conditionMatchesFile(rule.test, file));\n }\n return selectedRules;\n}\n\n/**\n *\n * @param config\n * @param files\n * @category utils\n */\nexport function rulesMatchAnyFiles(config: AnyConfiguration, files: string[]): boolean {\n const rules = getRulesByMatchingFiles(config, files);\n return Object.keys(rules).some(filename => !!rules[filename].length);\n}\n\n/**\n *\n * @param rule\n * @category utils\n */\nexport function resolveRuleSetUse(rule?: RuleSetUse | RuleSetUse[]): ResolvedRuleSet[] {\n if (!rule) return [];\n if (Array.isArray(rule)) {\n const rules = rule as Array<RuleSetUse>;\n let resolved: ResolvedRuleSet[] = [];\n for (const rule of rules) {\n resolved = [...resolved, ...resolveRuleSetUse(rule)];\n }\n return resolved;\n } else if (typeof rule === 'string' || isRuleSetLoader(rule)) {\n return [rule];\n } else if (typeof rule === 'function') {\n return resolveRuleSetUse(rule({}));\n }\n return [rule];\n}\n\n/**\n *\n * @param condition\n * @param file\n * @category utils\n */\nexport function conditionMatchesFile(\n condition: RuleSetCondition | undefined,\n file: string\n): boolean {\n if (!condition) return false;\n if (isRegExp(condition)) {\n return condition.test(file);\n } else if (typeof condition === 'string') {\n return file.startsWith(condition);\n } else if (typeof condition === 'function') {\n return Boolean(condition(file));\n } else if (Array.isArray(condition)) {\n return condition.some(c => conditionMatchesFile(c, file));\n }\n return Object.entries(condition)\n .map(([key, value]) => {\n switch (key) {\n case 'test':\n return conditionMatchesFile(value, file);\n case 'include':\n return conditionMatchesFile(value, file);\n case 'exclude':\n return !conditionMatchesFile(value, file);\n case 'and':\n return (value as RuleSetCondition[]).every(c => conditionMatchesFile(c, file));\n case 'or':\n return (value as RuleSetCondition[]).some(c => conditionMatchesFile(c, file));\n case 'not':\n return (value as RuleSetCondition[]).every(c => !conditionMatchesFile(c, file));\n default:\n return true;\n }\n })\n .every(b => b);\n}\n\n/**\n *\n * @param param0\n * @category utils\n */\nexport function getPlugins({ plugins = [] }: AnyConfiguration): PluginItem[] {\n return plugins.map((plugin, index) => ({ index, plugin }));\n}\n\n/**\n *\n * @param config\n * @param name\n * @category utils\n */\nexport function getPluginsByName(config: AnyConfiguration, name: string): PluginItem[] {\n return getPlugins(config).filter(({ plugin }: PluginItem) => {\n if (plugin && plugin.constructor) {\n return plugin.constructor.name === name;\n }\n return false;\n });\n}\n\n/**\n *\n * @param loader\n * @category utils\n */\nexport function isRuleSetItem(loader: RuleSetUse): loader is RuleSetUseItem {\n return typeof loader === 'string' || typeof loader === 'function' || isRuleSetLoader(loader);\n}\n\n/**\n *\n * @param loader\n * @category utils\n */\nexport function isRuleSetLoader(loader: RuleSetUse): loader is RuleSetLoader {\n return Object.keys(loader).some(k => ['loader', 'options', 'indent', 'query'].includes(k));\n}\n\n/**\n *\n * @param arg\n * @category utils\n */\nexport function isEntry(arg: any): arg is Entry {\n if (typeof arg !== 'object' || arg === null) {\n return false;\n }\n return Object.values(arg).every(value => {\n if (Array.isArray(value)) {\n return value.every(value => typeof value === 'string');\n }\n return typeof value === 'string';\n });\n}\n\n/**\n *\n * @param arg\n * @category utils\n */\nexport async function resolveEntryAsync(arg: any): Promise<Entry> {\n if (typeof arg === 'undefined') {\n throw new Error('Webpack config entry cannot be undefined');\n }\n\n if (typeof arg === 'function') {\n return resolveEntryAsync(await arg());\n } else if (typeof arg === 'string') {\n return resolveEntryAsync([arg]);\n } else if (Array.isArray(arg)) {\n return {\n app: arg,\n };\n } else if (isEntry(arg)) {\n return arg;\n }\n\n throw new Error('Cannot resolve Webpack config entry prop: ' + arg);\n}\n"]}
\No newline at end of file