Linux ubuntu22 5.15.0-133-generic #144-Ubuntu SMP Fri Feb 7 20:47:38 UTC 2025 x86_64
nginx/1.18.0
: 128.199.27.159 | : 216.73.216.2
Cant Read [ /etc/named.conf ]
8.1.31
www-data
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
home /
amatya /
quiz1 /
node_modules /
webpack /
lib /
[ HOME SHELL ]
Name
Size
Permission
Action
asset
[ DIR ]
dr-xr-xr-x
async-modules
[ DIR ]
dr-xr-xr-x
cache
[ DIR ]
dr-xr-xr-x
config
[ DIR ]
dr-xr-xr-x
container
[ DIR ]
dr-xr-xr-x
css
[ DIR ]
dr-xr-xr-x
debug
[ DIR ]
dr-xr-xr-x
dependencies
[ DIR ]
dr-xr-xr-x
electron
[ DIR ]
dr-xr-xr-x
errors
[ DIR ]
dr-xr-xr-x
esm
[ DIR ]
dr-xr-xr-x
hmr
[ DIR ]
dr-xr-xr-x
ids
[ DIR ]
dr-xr-xr-x
javascript
[ DIR ]
dr-xr-xr-x
json
[ DIR ]
dr-xr-xr-x
library
[ DIR ]
dr-xr-xr-x
logging
[ DIR ]
dr-xr-xr-x
node
[ DIR ]
dr-xr-xr-x
optimize
[ DIR ]
dr-xr-xr-x
performance
[ DIR ]
dr-xr-xr-x
prefetch
[ DIR ]
dr-xr-xr-x
rules
[ DIR ]
dr-xr-xr-x
runtime
[ DIR ]
dr-xr-xr-x
schemes
[ DIR ]
dr-xr-xr-x
serialization
[ DIR ]
dr-xr-xr-x
sharing
[ DIR ]
dr-xr-xr-x
stats
[ DIR ]
dr-xr-xr-x
util
[ DIR ]
dr-xr-xr-x
wasm
[ DIR ]
dr-xr-xr-x
wasm-async
[ DIR ]
dr-xr-xr-x
wasm-sync
[ DIR ]
dr-xr-xr-x
web
[ DIR ]
dr-xr-xr-x
webworker
[ DIR ]
dr-xr-xr-x
APIPlugin.js
9.33
KB
-rw-rw-rw-
AbstractMethodError.js
1.2
KB
-rw-rw-rw-
AsyncDependenciesBlock.js
3.26
KB
-rw-rw-rw-
AsyncDependencyToInitialChunkE...
913
B
-rw-rw-rw-
AutomaticPrefetchPlugin.js
1.52
KB
-rw-rw-rw-
BannerPlugin.js
3.6
KB
-rw-rw-rw-
Cache.js
4.02
KB
-rw-rw-rw-
CacheFacade.js
8.5
KB
-rw-rw-rw-
CaseSensitiveModulesWarning.js
2.07
KB
-rw-rw-rw-
Chunk.js
22.66
KB
-rw-rw-rw-
ChunkGraph.js
53.68
KB
-rw-rw-rw-
ChunkGroup.js
15.36
KB
-rw-rw-rw-
ChunkRenderError.js
657
B
-rw-rw-rw-
ChunkTemplate.js
5.74
KB
-rw-rw-rw-
CleanPlugin.js
11.96
KB
-rw-rw-rw-
CodeGenerationError.js
619
B
-rw-rw-rw-
CodeGenerationResults.js
4.56
KB
-rw-rw-rw-
CommentCompilationWarning.js
725
B
-rw-rw-rw-
CompatibilityPlugin.js
5.74
KB
-rw-rw-rw-
Compilation.js
165.88
KB
-rw-rw-rw-
Compiler.js
39.7
KB
-rw-rw-rw-
ConcatenationScope.js
4.23
KB
-rw-rw-rw-
ConcurrentCompilationError.js
441
B
-rw-rw-rw-
ConditionalInitFragment.js
3.68
KB
-rw-rw-rw-
ConstPlugin.js
16.16
KB
-rw-rw-rw-
ContextExclusionPlugin.js
786
B
-rw-rw-rw-
ContextModule.js
37.37
KB
-rw-rw-rw-
ContextModuleFactory.js
13.99
KB
-rw-rw-rw-
ContextReplacementPlugin.js
5.26
KB
-rw-rw-rw-
CssModule.js
4.67
KB
-rw-rw-rw-
DefinePlugin.js
19.65
KB
-rw-rw-rw-
DelegatedModule.js
8.05
KB
-rw-rw-rw-
DelegatedModuleFactoryPlugin.j...
3.44
KB
-rw-rw-rw-
DelegatedPlugin.js
1.11
KB
-rw-rw-rw-
DependenciesBlock.js
3.47
KB
-rw-rw-rw-
Dependency.js
10.23
KB
-rw-rw-rw-
DependencyTemplate.js
2.77
KB
-rw-rw-rw-
DependencyTemplates.js
1.71
KB
-rw-rw-rw-
DllEntryPlugin.js
1.67
KB
-rw-rw-rw-
DllModule.js
5.16
KB
-rw-rw-rw-
DllModuleFactory.js
1018
B
-rw-rw-rw-
DllPlugin.js
1.83
KB
-rw-rw-rw-
DllReferencePlugin.js
6.06
KB
-rw-rw-rw-
DynamicEntryPlugin.js
2.3
KB
-rw-rw-rw-
EntryOptionPlugin.js
2.88
KB
-rw-rw-rw-
EntryPlugin.js
1.73
KB
-rw-rw-rw-
Entrypoint.js
2.99
KB
-rw-rw-rw-
EnvironmentNotSupportAsyncWarn...
1.85
KB
-rw-rw-rw-
EnvironmentPlugin.js
1.87
KB
-rw-rw-rw-
ErrorHelpers.js
2.85
KB
-rw-rw-rw-
EvalDevToolModulePlugin.js
4.17
KB
-rw-rw-rw-
EvalSourceMapDevToolPlugin.js
7.22
KB
-rw-rw-rw-
ExportsInfo.js
45.01
KB
-rw-rw-rw-
ExportsInfoApiPlugin.js
2.52
KB
-rw-rw-rw-
ExternalModule.js
29.18
KB
-rw-rw-rw-
ExternalModuleFactoryPlugin.js
9.68
KB
-rw-rw-rw-
ExternalsPlugin.js
899
B
-rw-rw-rw-
FileSystemInfo.js
116.52
KB
-rw-rw-rw-
FlagAllModulesAsUsedPlugin.js
1.5
KB
-rw-rw-rw-
FlagDependencyExportsPlugin.js
12.94
KB
-rw-rw-rw-
FlagDependencyUsagePlugin.js
10.81
KB
-rw-rw-rw-
FlagEntryExportAsUsedPlugin.js
1.46
KB
-rw-rw-rw-
Generator.js
5.06
KB
-rw-rw-rw-
GraphHelpers.js
1.06
KB
-rw-rw-rw-
HarmonyLinkingError.js
357
B
-rw-rw-rw-
HookWebpackError.js
2.03
KB
-rw-rw-rw-
HotModuleReplacementPlugin.js
29.02
KB
-rw-rw-rw-
HotUpdateChunk.js
353
B
-rw-rw-rw-
IgnoreErrorModuleFactory.js
1.02
KB
-rw-rw-rw-
IgnorePlugin.js
2.66
KB
-rw-rw-rw-
IgnoreWarningsPlugin.js
919
B
-rw-rw-rw-
InitFragment.js
5.35
KB
-rw-rw-rw-
InvalidDependenciesModuleWarni...
1.83
KB
-rw-rw-rw-
JavascriptMetaInfoPlugin.js
2.3
KB
-rw-rw-rw-
LibManifestPlugin.js
4.42
KB
-rw-rw-rw-
LibraryTemplatePlugin.js
1.55
KB
-rw-rw-rw-
LoaderOptionsPlugin.js
2.25
KB
-rw-rw-rw-
LoaderTargetPlugin.js
747
B
-rw-rw-rw-
MainTemplate.js
12.59
KB
-rw-rw-rw-
Module.js
33.3
KB
-rw-rw-rw-
ModuleBuildError.js
1.84
KB
-rw-rw-rw-
ModuleDependencyError.js
1.15
KB
-rw-rw-rw-
ModuleDependencyWarning.js
1.26
KB
-rw-rw-rw-
ModuleError.js
1.48
KB
-rw-rw-rw-
ModuleFactory.js
1.4
KB
-rw-rw-rw-
ModuleFilenameHelpers.js
13.51
KB
-rw-rw-rw-
ModuleGraph.js
25
KB
-rw-rw-rw-
ModuleGraphConnection.js
5.53
KB
-rw-rw-rw-
ModuleHashingError.js
615
B
-rw-rw-rw-
ModuleInfoHeaderPlugin.js
8.87
KB
-rw-rw-rw-
ModuleNotFoundError.js
2.63
KB
-rw-rw-rw-
ModuleParseError.js
3.58
KB
-rw-rw-rw-
ModuleProfile.js
2.44
KB
-rw-rw-rw-
ModuleRestoreError.js
1.01
KB
-rw-rw-rw-
ModuleSourceTypesConstants.js
2.4
KB
-rw-rw-rw-
ModuleStoreError.js
1
KB
-rw-rw-rw-
ModuleTemplate.js
5.17
KB
-rw-rw-rw-
ModuleTypeConstants.js
6.47
KB
-rw-rw-rw-
ModuleWarning.js
1.56
KB
-rw-rw-rw-
MultiCompiler.js
18.04
KB
-rw-rw-rw-
MultiStats.js
5.74
KB
-rw-rw-rw-
MultiWatching.js
1.55
KB
-rw-rw-rw-
NoEmitOnErrorsPlugin.js
713
B
-rw-rw-rw-
NoModeWarning.js
663
B
-rw-rw-rw-
NodeStuffInWebError.js
843
B
-rw-rw-rw-
NodeStuffPlugin.js
8.17
KB
-rw-rw-rw-
NormalModule.js
49.02
KB
-rw-rw-rw-
NormalModuleFactory.js
38.85
KB
-rw-rw-rw-
NormalModuleReplacementPlugin....
2.05
KB
-rw-rw-rw-
NullFactory.js
637
B
-rw-rw-rw-
OptimizationStages.js
225
B
-rw-rw-rw-
OptionsApply.js
523
B
-rw-rw-rw-
Parser.js
968
B
-rw-rw-rw-
PlatformPlugin.js
894
B
-rw-rw-rw-
PrefetchPlugin.js
1.14
KB
-rw-rw-rw-
ProgressPlugin.js
19.76
KB
-rw-rw-rw-
ProvidePlugin.js
3.63
KB
-rw-rw-rw-
RawModule.js
5.18
KB
-rw-rw-rw-
RecordIdsPlugin.js
6.69
KB
-rw-rw-rw-
RequestShortener.js
755
B
-rw-rw-rw-
RequireJsStuffPlugin.js
2.24
KB
-rw-rw-rw-
ResolverFactory.js
5.05
KB
-rw-rw-rw-
RuntimeGlobals.js
9.59
KB
-rw-rw-rw-
RuntimeModule.js
5.97
KB
-rw-rw-rw-
RuntimePlugin.js
16.98
KB
-rw-rw-rw-
RuntimeTemplate.js
32.79
KB
-rw-rw-rw-
SelfModuleFactory.js
844
B
-rw-rw-rw-
SingleEntryPlugin.js
161
B
-rw-rw-rw-
SizeFormatHelpers.js
584
B
-rw-rw-rw-
SourceMapDevToolModuleOptionsP...
1.49
KB
-rw-rw-rw-
SourceMapDevToolPlugin.js
18.47
KB
-rw-rw-rw-
Stats.js
2.23
KB
-rw-rw-rw-
Template.js
12.76
KB
-rw-rw-rw-
TemplatedPathPlugin.js
10.15
KB
-rw-rw-rw-
UnhandledSchemeError.js
833
B
-rw-rw-rw-
UnsupportedFeatureWarning.js
780
B
-rw-rw-rw-
UseStrictPlugin.js
2.61
KB
-rw-rw-rw-
WarnCaseSensitiveModulesPlugin...
1.72
KB
-rw-rw-rw-
WarnDeprecatedOptionPlugin.js
1.46
KB
-rw-rw-rw-
WarnNoModeSetPlugin.js
545
B
-rw-rw-rw-
WatchIgnorePlugin.js
3.93
KB
-rw-rw-rw-
Watching.js
14.34
KB
-rw-rw-rw-
WebpackError.js
1.72
KB
-rw-rw-rw-
WebpackIsIncludedPlugin.js
2.71
KB
-rw-rw-rw-
WebpackOptionsApply.js
28.97
KB
-rw-rw-rw-
WebpackOptionsDefaulter.js
818
B
-rw-rw-rw-
buildChunkGraph.js
41.36
KB
-rw-rw-rw-
cli.js
17.44
KB
-rw-rw-rw-
formatLocation.js
1.73
KB
-rw-rw-rw-
index.js
18.22
KB
-rw-rw-rw-
validateSchema.js
6.34
KB
-rw-rw-rw-
webpack.js
5.99
KB
-rw-rw-rw-
Delete
Unzip
Zip
${this.title}
Close
Code Editor : ModuleFilenameHelpers.js
/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const NormalModule = require("./NormalModule"); const createHash = require("./util/createHash"); const memoize = require("./util/memoize"); /** @typedef {import("./ChunkGraph")} ChunkGraph */ /** @typedef {import("./Module")} Module */ /** @typedef {import("./RequestShortener")} RequestShortener */ /** @typedef {typeof import("./util/Hash")} Hash */ /** @typedef {string | RegExp | (string | RegExp)[]} Matcher */ /** @typedef {{test?: Matcher, include?: Matcher, exclude?: Matcher }} MatchObject */ const ModuleFilenameHelpers = module.exports; // TODO webpack 6: consider removing these ModuleFilenameHelpers.ALL_LOADERS_RESOURCE = "[all-loaders][resource]"; ModuleFilenameHelpers.REGEXP_ALL_LOADERS_RESOURCE = /\[all-?loaders\]\[resource\]/gi; ModuleFilenameHelpers.LOADERS_RESOURCE = "[loaders][resource]"; ModuleFilenameHelpers.REGEXP_LOADERS_RESOURCE = /\[loaders\]\[resource\]/gi; ModuleFilenameHelpers.RESOURCE = "[resource]"; ModuleFilenameHelpers.REGEXP_RESOURCE = /\[resource\]/gi; ModuleFilenameHelpers.ABSOLUTE_RESOURCE_PATH = "[absolute-resource-path]"; // cSpell:words olute ModuleFilenameHelpers.REGEXP_ABSOLUTE_RESOURCE_PATH = /\[abs(olute)?-?resource-?path\]/gi; ModuleFilenameHelpers.RESOURCE_PATH = "[resource-path]"; ModuleFilenameHelpers.REGEXP_RESOURCE_PATH = /\[resource-?path\]/gi; ModuleFilenameHelpers.ALL_LOADERS = "[all-loaders]"; ModuleFilenameHelpers.REGEXP_ALL_LOADERS = /\[all-?loaders\]/gi; ModuleFilenameHelpers.LOADERS = "[loaders]"; ModuleFilenameHelpers.REGEXP_LOADERS = /\[loaders\]/gi; ModuleFilenameHelpers.QUERY = "[query]"; ModuleFilenameHelpers.REGEXP_QUERY = /\[query\]/gi; ModuleFilenameHelpers.ID = "[id]"; ModuleFilenameHelpers.REGEXP_ID = /\[id\]/gi; ModuleFilenameHelpers.HASH = "[hash]"; ModuleFilenameHelpers.REGEXP_HASH = /\[hash\]/gi; ModuleFilenameHelpers.NAMESPACE = "[namespace]"; ModuleFilenameHelpers.REGEXP_NAMESPACE = /\[namespace\]/gi; /** @typedef {() => string} ReturnStringCallback */ /** * Returns a function that returns the part of the string after the token * @param {ReturnStringCallback} strFn the function to get the string * @param {string} token the token to search for * @returns {ReturnStringCallback} a function that returns the part of the string after the token */ const getAfter = (strFn, token) => () => { const str = strFn(); const idx = str.indexOf(token); return idx < 0 ? "" : str.slice(idx); }; /** * Returns a function that returns the part of the string before the token * @param {ReturnStringCallback} strFn the function to get the string * @param {string} token the token to search for * @returns {ReturnStringCallback} a function that returns the part of the string before the token */ const getBefore = (strFn, token) => () => { const str = strFn(); const idx = str.lastIndexOf(token); return idx < 0 ? "" : str.slice(0, idx); }; /** * Returns a function that returns a hash of the string * @param {ReturnStringCallback} strFn the function to get the string * @param {string | Hash=} hashFunction the hash function to use * @returns {ReturnStringCallback} a function that returns the hash of the string */ const getHash = (strFn, hashFunction = "md4") => () => { const hash = createHash(hashFunction); hash.update(strFn()); const digest = /** @type {string} */ (hash.digest("hex")); return digest.slice(0, 4); }; /** * Returns a function that returns the string with the token replaced with the replacement * @param {string|RegExp} test A regular expression string or Regular Expression object * @returns {RegExp} A regular expression object * @example * ```js * const test = asRegExp("test"); * test.test("test"); // true * * const test2 = asRegExp(/test/); * test2.test("test"); // true * ``` */ const asRegExp = test => { if (typeof test === "string") { // Escape special characters in the string to prevent them from being interpreted as special characters in a regular expression. Do this by // adding a backslash before each special character test = new RegExp(`^${test.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")}`); } return test; }; /** * @template T * Returns a lazy object. The object is lazy in the sense that the properties are * only evaluated when they are accessed. This is only obtained by setting a function as the value for each key. * @param {Record<string, () => T>} obj the object to convert to a lazy access object * @returns {object} the lazy access object */ const lazyObject = obj => { const newObj = {}; for (const key of Object.keys(obj)) { const fn = obj[key]; Object.defineProperty(newObj, key, { get: () => fn(), set: v => { Object.defineProperty(newObj, key, { value: v, enumerable: true, writable: true }); }, enumerable: true, configurable: true }); } return newObj; }; const SQUARE_BRACKET_TAG_REGEXP = /\[\\*([\w-]+)\\*\]/gi; /** * @param {Module | string} module the module * @param {TODO} options options * @param {object} contextInfo context info * @param {RequestShortener} contextInfo.requestShortener requestShortener * @param {ChunkGraph} contextInfo.chunkGraph chunk graph * @param {string | Hash=} contextInfo.hashFunction the hash function to use * @returns {string} the filename */ ModuleFilenameHelpers.createFilename = ( // eslint-disable-next-line default-param-last module = "", options, { requestShortener, chunkGraph, hashFunction = "md4" } ) => { const opts = { namespace: "", moduleFilenameTemplate: "", ...(typeof options === "object" ? options : { moduleFilenameTemplate: options }) }; let absoluteResourcePath; let hash; /** @type {ReturnStringCallback} */ let identifier; /** @type {ReturnStringCallback} */ let moduleId; /** @type {ReturnStringCallback} */ let shortIdentifier; if (typeof module === "string") { shortIdentifier = /** @type {ReturnStringCallback} */ (memoize(() => requestShortener.shorten(module))); identifier = shortIdentifier; moduleId = () => ""; absoluteResourcePath = () => module.split("!").pop(); hash = getHash(identifier, hashFunction); } else { shortIdentifier = memoize(() => module.readableIdentifier(requestShortener) ); identifier = /** @type {ReturnStringCallback} */ (memoize(() => requestShortener.shorten(module.identifier()))); moduleId = /** @type {ReturnStringCallback} */ (() => chunkGraph.getModuleId(module)); absoluteResourcePath = () => module instanceof NormalModule ? module.resource : module.identifier().split("!").pop(); hash = getHash(identifier, hashFunction); } const resource = /** @type {ReturnStringCallback} */ (memoize(() => shortIdentifier().split("!").pop())); const loaders = getBefore(shortIdentifier, "!"); const allLoaders = getBefore(identifier, "!"); const query = getAfter(resource, "?"); const resourcePath = () => { const q = query().length; return q === 0 ? resource() : resource().slice(0, -q); }; if (typeof opts.moduleFilenameTemplate === "function") { return opts.moduleFilenameTemplate( lazyObject({ identifier, shortIdentifier, resource, resourcePath: memoize(resourcePath), absoluteResourcePath: memoize(absoluteResourcePath), loaders: memoize(loaders), allLoaders: memoize(allLoaders), query: memoize(query), moduleId: memoize(moduleId), hash: memoize(hash), namespace: () => opts.namespace }) ); } // TODO webpack 6: consider removing alternatives without dashes /** @type {Map<string, function(): string>} */ const replacements = new Map([ ["identifier", identifier], ["short-identifier", shortIdentifier], ["resource", resource], ["resource-path", resourcePath], // cSpell:words resourcepath ["resourcepath", resourcePath], ["absolute-resource-path", absoluteResourcePath], ["abs-resource-path", absoluteResourcePath], // cSpell:words absoluteresource ["absoluteresource-path", absoluteResourcePath], // cSpell:words absresource ["absresource-path", absoluteResourcePath], // cSpell:words resourcepath ["absolute-resourcepath", absoluteResourcePath], // cSpell:words resourcepath ["abs-resourcepath", absoluteResourcePath], // cSpell:words absoluteresourcepath ["absoluteresourcepath", absoluteResourcePath], // cSpell:words absresourcepath ["absresourcepath", absoluteResourcePath], ["all-loaders", allLoaders], // cSpell:words allloaders ["allloaders", allLoaders], ["loaders", loaders], ["query", query], ["id", moduleId], ["hash", hash], ["namespace", () => opts.namespace] ]); // TODO webpack 6: consider removing weird double placeholders return /** @type {string} */ (opts.moduleFilenameTemplate) .replace(ModuleFilenameHelpers.REGEXP_ALL_LOADERS_RESOURCE, "[identifier]") .replace( ModuleFilenameHelpers.REGEXP_LOADERS_RESOURCE, "[short-identifier]" ) .replace(SQUARE_BRACKET_TAG_REGEXP, (match, content) => { if (content.length + 2 === match.length) { const replacement = replacements.get(content.toLowerCase()); if (replacement !== undefined) { return replacement(); } } else if (match.startsWith("[\\") && match.endsWith("\\]")) { return `[${match.slice(2, -2)}]`; } return match; }); }; /** * Replaces duplicate items in an array with new values generated by a callback function. * The callback function is called with the duplicate item, the index of the duplicate item, and the number of times the item has been replaced. * The callback function should return the new value for the duplicate item. * @template T * @param {T[]} array the array with duplicates to be replaced * @param {(duplicateItem: T, duplicateItemIndex: number, numberOfTimesReplaced: number) => T} fn callback function to generate new values for the duplicate items * @param {(firstElement:T, nextElement:T) => -1 | 0 | 1} [comparator] optional comparator function to sort the duplicate items * @returns {T[]} the array with duplicates replaced * @example * ```js * const array = ["a", "b", "c", "a", "b", "a"]; * const result = ModuleFilenameHelpers.replaceDuplicates(array, (item, index, count) => `${item}-${count}`); * // result: ["a-1", "b-1", "c", "a-2", "b-2", "a-3"] * ``` */ ModuleFilenameHelpers.replaceDuplicates = (array, fn, comparator) => { const countMap = Object.create(null); const posMap = Object.create(null); for (const [idx, item] of array.entries()) { countMap[item] = countMap[item] || []; countMap[item].push(idx); posMap[item] = 0; } if (comparator) { for (const item of Object.keys(countMap)) { countMap[item].sort(comparator); } } return array.map((item, i) => { if (countMap[item].length > 1) { if (comparator && countMap[item][0] === i) return item; return fn(item, i, posMap[item]++); } return item; }); }; /** * Tests if a string matches a RegExp or an array of RegExp. * @param {string} str string to test * @param {Matcher} test value which will be used to match against the string * @returns {boolean} true, when the RegExp matches * @example * ```js * ModuleFilenameHelpers.matchPart("foo.js", "foo"); // true * ModuleFilenameHelpers.matchPart("foo.js", "foo.js"); // true * ModuleFilenameHelpers.matchPart("foo.js", "foo."); // false * ModuleFilenameHelpers.matchPart("foo.js", "foo*"); // false * ModuleFilenameHelpers.matchPart("foo.js", "foo.*"); // true * ModuleFilenameHelpers.matchPart("foo.js", /^foo/); // true * ModuleFilenameHelpers.matchPart("foo.js", [/^foo/, "bar"]); // true * ModuleFilenameHelpers.matchPart("foo.js", [/^foo/, "bar"]); // true * ModuleFilenameHelpers.matchPart("foo.js", [/^foo/, /^bar/]); // true * ModuleFilenameHelpers.matchPart("foo.js", [/^baz/, /^bar/]); // false * ``` */ ModuleFilenameHelpers.matchPart = (str, test) => { if (!test) return true; if (Array.isArray(test)) { return test.map(asRegExp).some(regExp => regExp.test(str)); } return asRegExp(test).test(str); }; /** * Tests if a string matches a match object. The match object can have the following properties: * - `test`: a RegExp or an array of RegExp * - `include`: a RegExp or an array of RegExp * - `exclude`: a RegExp or an array of RegExp * * The `test` property is tested first, then `include` and then `exclude`. * @param {MatchObject} obj a match object to test against the string * @param {string} str string to test against the matching object * @returns {boolean} true, when the object matches * @example * ```js * ModuleFilenameHelpers.matchObject({ test: "foo.js" }, "foo.js"); // true * ModuleFilenameHelpers.matchObject({ test: /^foo/ }, "foo.js"); // true * ModuleFilenameHelpers.matchObject({ test: [/^foo/, "bar"] }, "foo.js"); // true * ModuleFilenameHelpers.matchObject({ test: [/^foo/, "bar"] }, "baz.js"); // false * ModuleFilenameHelpers.matchObject({ include: "foo.js" }, "foo.js"); // true * ModuleFilenameHelpers.matchObject({ include: "foo.js" }, "bar.js"); // false * ModuleFilenameHelpers.matchObject({ include: /^foo/ }, "foo.js"); // true * ModuleFilenameHelpers.matchObject({ include: [/^foo/, "bar"] }, "foo.js"); // true * ModuleFilenameHelpers.matchObject({ include: [/^foo/, "bar"] }, "baz.js"); // false * ModuleFilenameHelpers.matchObject({ exclude: "foo.js" }, "foo.js"); // false * ModuleFilenameHelpers.matchObject({ exclude: [/^foo/, "bar"] }, "foo.js"); // false * ``` */ ModuleFilenameHelpers.matchObject = (obj, str) => { if (obj.test && !ModuleFilenameHelpers.matchPart(str, obj.test)) { return false; } if (obj.include && !ModuleFilenameHelpers.matchPart(str, obj.include)) { return false; } if (obj.exclude && ModuleFilenameHelpers.matchPart(str, obj.exclude)) { return false; } return true; };
Close