123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- const relateContext = require('./relate-context');
- const pipe = (exports.pipe = (...fns) => ({
- freeze(arg, module, extra, methods) {
- for (const fn of fns) {
- arg = fn.freeze(arg, module, extra, methods);
- }
- return arg;
- },
- thaw(arg, frozen, extra, methods) {
- for (const fn of fns) {
- arg = fn.thaw(arg, frozen, extra, methods);
- }
- return arg;
- },
- }));
- const serialMap = (exports.map = (keyOp, valueOp) => ({
- freeze(arg, module, extra) {
- const resolved = [];
- for (const key in arg) {
- resolved.push([
- keyOp.freeze(key, key, extra),
- valueOp.freeze(arg[key], arg[key], extra),
- ]);
- }
- return resolved;
- },
- thaw(arg, frozen, extra) {
- const resolved = {};
- for (const item of arg) {
- const key = keyOp.thaw(item[0], item[0], extra);
- const value = valueOp.thaw(item[1], item[1], extra);
- resolved[key] = value;
- }
- return resolved;
- },
- }));
- const contextual = (exports.contextual = fnname => {
- const relate = relateContext[`relateNormal${fnname}`];
- const context = relateContext[`contextNormal${fnname}`];
- return {
- freeze: (arg, module, { compiler, compilation }, methods) =>
- arg ? relate(compiler || compilation.compiler, arg) : arg,
- thaw: (arg, module, { compiler, compilation }, methods) =>
- arg ? context(compiler || compilation.compiler, arg) : arg,
- };
- });
- const archetype = (exports.archetype = type => ({
- freeze: (arg, module, extra, { freeze }) => freeze(type, null, arg, extra),
- thaw: (arg, module, extra, { thaw }) => thaw(type, null, arg, extra),
- }));
- const mapArchetype = (exports.mapArchetype = type => ({
- freeze: (arg, module, extra, { mapFreeze }) =>
- mapFreeze(type, null, arg, extra),
- thaw: (arg, module, extra, { mapThaw }) => mapThaw(type, null, arg, extra),
- }));
- const path = (exports.path = contextual('Path'));
- const pathArray = (exports.pathArray = contextual('PathArray'));
- const pathSet = (exports.pathSet = contextual('PathSet'));
- const request = (exports.request = contextual('Request'));
- const _loaders = (exports._loaders = contextual('Loaders'));
- const loaders = (exports.loaders = {
- freeze: _loaders.freeze,
- thaw(arg, frozen, extra, methods) {
- return _loaders.thaw(arg, frozen, extra, methods).map(loader => {
- if (loader.ident) {
- let ruleSet =
- extra.normalModuleFactory && extra.normalModuleFactory.ruleSet;
- if (!ruleSet) {
- ruleSet = extra.compiler.__hardSource_ruleSet;
- if (!ruleSet) {
- const RuleSet = require('webpack/lib/RuleSet');
- if (extra.compiler.options.module.defaultRules) {
- // webpack 4
- ruleSet = extra.compiler.__hardSource_ruleSet = new RuleSet(
- extra.compiler.options.module.defaultRules.concat(
- extra.compiler.options.module.rules,
- ),
- );
- } else {
- // webpack <4
- ruleSet = extra.compiler.__hardSource_ruleSet = new RuleSet(
- extra.compiler.options.module.rules ||
- extra.compiler.options.module.loaders,
- );
- }
- }
- }
- return {
- loader: loader.loader,
- ident: loader.ident,
- options: ruleSet.findOptionsByIdent(loader.ident),
- };
- }
- return loader;
- });
- },
- });
- const regExp = (exports.regExp = {
- freeze: arg => (arg ? arg.source : false),
- thaw: arg => (arg ? new RegExp(arg) : false),
- });
- const parser = (exports.parser = archetype('Parser'));
- const generator = (exports.generator = archetype('Generator'));
- const source = (exports.source = archetype('Source'));
- const moduleAssets = (exports.moduleAssets = archetype('ModuleAssets'));
- const moduleError = (exports.moduleError = mapArchetype('ModuleError'));
- const moduleWarning = (exports.moduleWarning = mapArchetype('ModuleWarning'));
- const dependencyBlock = (exports.dependencyBlock = {
- freeze: (arg, module, extra, { freeze }) =>
- freeze('DependencyBlock', null, arg, extra),
- thaw: (arg, module, extra, { thaw }) =>
- thaw('DependencyBlock', arg, module, extra),
- });
- const _null = (exports.null = {
- freeze: () => null,
- thaw: () => null,
- });
- const identity = (exports.identity = {
- freeze: (arg, module, extra, methods) => arg,
- thaw: (arg, module, extra, methods) => arg,
- });
- const assigned = (exports.assigned = members => ({
- freeze(arg, module, extra, methods) {
- const out = {};
- for (const key in members) {
- out[key] = members[key].freeze(arg[key], module, extra, methods);
- }
- return out;
- },
- thaw(arg, frozen, extra, methods) {
- for (const key in members) {
- arg[key] = members[key].thaw(frozen[key], frozen, extra, methods);
- }
- return arg;
- },
- }));
- const created = (exports.created = members => ({
- freeze(arg, module, extra, methods) {
- if (!arg) {
- return null;
- }
- const out = {};
- for (const key in members) {
- out[key] = members[key].freeze(arg[key], module, extra, methods);
- }
- return out;
- },
- thaw(arg, frozen, extra, methods) {
- if (!arg) {
- return null;
- }
- const out = {};
- for (const key in members) {
- out[key] = members[key].thaw(arg[key], frozen, extra, methods);
- }
- return out;
- },
- }));
- const objectAssign = (exports.objectAssign = opts => ({
- freeze(arg, module, extra) {
- const out = Object.assign({}, arg);
- for (const key in opts) {
- out[key] = opts[key].freeze(arg[key], arg, extra);
- }
- return out;
- },
- thaw(arg, frozen, extra) {
- const out = Object.assign({}, arg);
- for (const key in opts) {
- out[key] = opts[key].thaw(arg[key], arg, extra);
- }
- return out;
- },
- }));
- const constructed = (exports.constructed = (Type, args) => ({
- freeze(arg, module, extra, methods) {
- const out = {};
- for (const key in args) {
- out[key] = args[key].freeze(arg[key], module, extra, methods);
- }
- return out;
- },
- thaw(arg, frozen, extra, methods) {
- const newArgs = [];
- for (const key in args) {
- newArgs.push(args[key].thaw(frozen[key], frozen, extra, methods));
- }
- return new Type(...newArgs);
- },
- }));
- const serial = (exports.serial = (name, stages) => ({
- freeze(arg, module, extra, methods) {
- const out = {
- type: name,
- };
- for (const key in stages) {
- out[key] = stages[key].freeze(module, module, extra, methods);
- }
- return out;
- },
- thaw(arg, frozen, extra, methods) {
- let out = arg;
- for (const key in stages) {
- out = stages[key].thaw(out, frozen[key], extra, methods);
- }
- return out;
- },
- }));
|