lcd-router-webpack-plugin 9.0.0-alpha.10 → 9.0.0-alpha.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"enhance-reducer.d.ts","sourceRoot":"","sources":["../../../src/babel/plugins/enhance-reducer.ts"],"names":[],"mappings":";AAWA,wBAwDG"}
1
+ {"version":3,"file":"enhance-reducer.d.ts","sourceRoot":"","sources":["../../../src/babel/plugins/enhance-reducer.ts"],"names":[],"mappings":";AAWA,wBA8DG"}
@@ -19,30 +19,38 @@ var _default = (0, _helperPluginUtils.declare)((api, options) => {
19
19
  name: 'babel-plugin-enhance-reducer',
20
20
  visitor: {
21
21
  ExportDefaultDeclaration: (babelPath, ops) => {
22
- if (!new RegExp(`${options.pageRootAbs}\/.*${options.reducerName}\.(j|t)s`).test(ops.filename)) {
23
- return;
24
- }
22
+ // 这里校验一下文件名, 仅处理 reducer 文件
23
+ if (!new RegExp(`${options.pageRootAbs}\/.*${options.reducerName}\.(j|t)s`).test(ops.filename)) return;
25
24
  const filename = _nodePath.default.basename(ops.filename);
25
+ // 获取包含 me.json 的目录,用于获取当前页面的 namespace
26
26
  function getMeJson(dir) {
27
27
  if (_fsExtra.default.existsSync(_nodePath.default.join(dir, 'me.json'))) {
28
28
  return dir;
29
29
  }
30
+ // 向上递归到 pageRootAbs 后终止,返回false
31
+ if (dir === options.pageRootAbs) return false;
30
32
  return getMeJson(_nodePath.default.dirname(dir));
31
33
  }
34
+
35
+ // 当前页面不包含 me.json,不处理
32
36
  const baseDir = getMeJson(_nodePath.default.dirname(ops.filename));
33
- if (!baseDir) {
34
- return;
35
- }
36
- const meJSON = JSON.parse(_fsExtra.default.readFileSync(_nodePath.default.join(baseDir, 'me.json'), 'utf8'));
37
- if (!meJSON.mobx) {
38
- return;
39
- }
37
+ if (!baseDir) return;
38
+
39
+ // 读取 me.json
40
+ const meJSON = _fsExtra.default.readJSONSync(_nodePath.default.join(baseDir, 'me.json'), 'utf8');
41
+
42
+ // 仅处理 mobx 模式。
43
+ if (!meJSON.mobx) return;
44
+
45
+ // 当前页面的 相对路径作为唯一key,这里是 lcd 内部的一个约定,与生成路由插件 传递的 page 参数一致
40
46
  let namespace = baseDir.replace(`${options.pageRootAbs}/`, '');
41
47
  const isChild = !isMainRegex.test(filename);
42
48
  if (isChild) {
43
49
  namespace += `&&${filename.replace(new RegExp(`(.*)\.reducer\.(j|t)s`), '$1')}`;
44
50
  }
45
51
  const declaration = babelPath.get('declaration');
52
+ // 这里判断 declaration.isIdentifier() 是为了兼容 export default state 这种情况
53
+ // 但是实际上,无法判断 state 这个变量 是否为 对象,所以这里并不是非常严格的判断
46
54
  if (declaration.isObjectExpression() || declaration.isIdentifier()) {
47
55
  const program = babelPath.findParent(x => x.isProgram());
48
56
  if (program.isProgram()) {
@@ -51,7 +59,9 @@ var _default = (0, _helperPluginUtils.declare)((api, options) => {
51
59
  program.unshiftContainer('body', importMobxAdapter);
52
60
  const expression = types.callExpression(uid, [declaration.node, types.stringLiteral(namespace)]);
53
61
  declaration.replaceWith(expression);
62
+ /* c8 ignore next 3 */
54
63
  } else {
64
+ /* c8 ignore next 3 */
55
65
  throw babelPath.buildCodeFrameError('语法解析错误,没有成功的探寻到 Program');
56
66
  }
57
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"enhance-reducer.js","names":["_helperPluginUtils","require","_nodePath","_interopRequireDefault","_fsExtra","obj","__esModule","default","_default","declare","api","options","assertVersion","types","isMainRegex","RegExp","reducerName","name","visitor","ExportDefaultDeclaration","babelPath","ops","pageRootAbs","test","filename","path","basename","getMeJson","dir","fse","existsSync","join","dirname","baseDir","meJSON","JSON","parse","readFileSync","mobx","namespace","replace","isChild","declaration","get","isObjectExpression","isIdentifier","program","findParent","x","isProgram","uid","scope","generateUidIdentifier","importMobxAdapter","importDeclaration","importDefaultSpecifier","stringLiteral","unshiftContainer","expression","callExpression","node","replaceWith","buildCodeFrameError","exports"],"sources":["../../../enhance-reducer.ts"],"sourcesContent":["import type * as __babel__core from '@babel/core';\nimport { declare } from '@babel/helper-plugin-utils';\nimport path from 'node:path';\nimport fse from 'fs-extra';\nimport type { MeJSON } from '../../utils/types';\n\ninterface Options {\n pageRootAbs: string;\n reducerName: string;\n}\n\nexport default declare<Options>((api, options) => {\n const { assertVersion, types } = api;\n assertVersion(7);\n const isMainRegex = new RegExp(`^${options.reducerName}.(j|t)s$`);\n return {\n name: 'babel-plugin-enhance-reducer',\n visitor: {\n ExportDefaultDeclaration: (babelPath, ops) => {\n if (!new RegExp(`${options.pageRootAbs}\\/.*${options.reducerName}\\.(j|t)s`).test(ops.filename)) {\n return;\n }\n const filename = path.basename(ops.filename);\n\n function getMeJson(dir: string) {\n if (fse.existsSync(path.join(dir, 'me.json'))) {\n return dir;\n }\n return getMeJson(path.dirname(dir));\n }\n\n const baseDir = getMeJson(path.dirname(ops.filename));\n\n if (!baseDir) {\n return;\n }\n const meJSON: MeJSON = JSON.parse(fse.readFileSync(path.join(baseDir, 'me.json'), 'utf8'));\n\n if (!meJSON.mobx) {\n return;\n }\n\n let namespace = baseDir.replace(`${options.pageRootAbs}/`, '');\n const isChild = !isMainRegex.test(filename);\n\n if (isChild) {\n namespace += `&&${filename.replace(new RegExp(`(.*)\\.reducer\\.(j|t)s`), '$1')}`;\n }\n const declaration = babelPath.get('declaration');\n if (declaration.isObjectExpression() || declaration.isIdentifier()) {\n const program = babelPath.findParent((x) => x.isProgram());\n if (program.isProgram()) {\n const uid = program.scope.generateUidIdentifier('storeHoc');\n const importMobxAdapter = types.importDeclaration(\n [types.importDefaultSpecifier(uid)],\n isChild ? types.stringLiteral('rrc-loader-helper/lib/store') : types.stringLiteral('rrc-loader-helper/lib/mobx-adapter'),\n );\n program.unshiftContainer('body', importMobxAdapter);\n const expression = types.callExpression(uid, [declaration.node, types.stringLiteral(namespace)]);\n declaration.replaceWith(expression);\n } else {\n throw babelPath.buildCodeFrameError('语法解析错误,没有成功的探寻到 Program');\n }\n }\n },\n },\n };\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"enhance-reducer.js","names":["_helperPluginUtils","require","_nodePath","_interopRequireDefault","_fsExtra","obj","__esModule","default","_default","declare","api","options","assertVersion","types","isMainRegex","RegExp","reducerName","name","visitor","ExportDefaultDeclaration","babelPath","ops","pageRootAbs","test","filename","path","basename","getMeJson","dir","fse","existsSync","join","dirname","baseDir","meJSON","readJSONSync","mobx","namespace","replace","isChild","declaration","get","isObjectExpression","isIdentifier","program","findParent","x","isProgram","uid","scope","generateUidIdentifier","importMobxAdapter","importDeclaration","importDefaultSpecifier","stringLiteral","unshiftContainer","expression","callExpression","node","replaceWith","buildCodeFrameError","exports"],"sources":["../../../enhance-reducer.ts"],"sourcesContent":["import type * as __babel__core from '@babel/core';\nimport { declare } from '@babel/helper-plugin-utils';\nimport path from 'node:path';\nimport fse from 'fs-extra';\nimport type { MeJSON } from '../../utils/types';\n\ninterface Options {\n pageRootAbs: string;\n reducerName: string;\n}\n\nexport default declare<Options>((api, options) => {\n const { assertVersion, types } = api;\n assertVersion(7);\n const isMainRegex = new RegExp(`^${options.reducerName}.(j|t)s$`);\n return {\n name: 'babel-plugin-enhance-reducer',\n visitor: {\n ExportDefaultDeclaration: (babelPath, ops) => {\n // 这里校验一下文件名, 仅处理 reducer 文件\n if (!new RegExp(`${options.pageRootAbs}\\/.*${options.reducerName}\\.(j|t)s`).test(ops.filename)) return;\n\n const filename = path.basename(ops.filename);\n // 获取包含 me.json 的目录,用于获取当前页面的 namespace\n function getMeJson(dir: string) {\n if (fse.existsSync(path.join(dir, 'me.json'))) {\n return dir;\n }\n // 向上递归到 pageRootAbs 后终止,返回false\n if (dir === options.pageRootAbs) return false;\n return getMeJson(path.dirname(dir));\n }\n\n // 当前页面不包含 me.json,不处理\n const baseDir = getMeJson(path.dirname(ops.filename));\n if (!baseDir) return;\n\n // 读取 me.json\n const meJSON: MeJSON = fse.readJSONSync(path.join(baseDir, 'me.json'), 'utf8');\n\n // 仅处理 mobx 模式。\n if (!meJSON.mobx) return;\n\n // 当前页面的 相对路径作为唯一key,这里是 lcd 内部的一个约定,与生成路由插件 传递的 page 参数一致\n let namespace = baseDir.replace(`${options.pageRootAbs}/`, '');\n const isChild = !isMainRegex.test(filename);\n\n if (isChild) {\n namespace += `&&${filename.replace(new RegExp(`(.*)\\.reducer\\.(j|t)s`), '$1')}`;\n }\n const declaration = babelPath.get('declaration');\n // 这里判断 declaration.isIdentifier() 是为了兼容 export default state 这种情况\n // 但是实际上,无法判断 state 这个变量 是否为 对象,所以这里并不是非常严格的判断\n if (declaration.isObjectExpression() || declaration.isIdentifier()) {\n const program = babelPath.findParent((x) => x.isProgram());\n if (program.isProgram()) {\n const uid = program.scope.generateUidIdentifier('storeHoc');\n const importMobxAdapter = types.importDeclaration(\n [types.importDefaultSpecifier(uid)],\n isChild ? types.stringLiteral('rrc-loader-helper/lib/store') : types.stringLiteral('rrc-loader-helper/lib/mobx-adapter'),\n );\n program.unshiftContainer('body', importMobxAdapter);\n const expression = types.callExpression(uid, [declaration.node, types.stringLiteral(namespace)]);\n declaration.replaceWith(expression);\n /* c8 ignore next 3 */\n } else {\n /* c8 ignore next 3 */\n throw babelPath.buildCodeFrameError('语法解析错误,没有成功的探寻到 Program');\n }\n }\n },\n },\n };\n});\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"external-wrap.d.ts","sourceRoot":"","sources":["../../../src/babel/plugins/external-wrap.ts"],"names":[],"mappings":";AASA,wBAkDG"}
1
+ {"version":3,"file":"external-wrap.d.ts","sourceRoot":"","sources":["../../../src/babel/plugins/external-wrap.ts"],"names":[],"mappings":";AASA,wBAiDG"}
@@ -16,22 +16,27 @@ var _default = (0, _helperPluginUtils.declare)((api, options) => {
16
16
  return {
17
17
  name: 'babel-plugin-external-wrap',
18
18
  visitor: {
19
- Program: {
20
- enter: (nodePath, ops) => {
21
- const externalsAbs = options.externals?.map?.(x => _path.default.join(options.pageRootAbs, x, 'view')) ?? [];
22
- const isExternalView = externalsAbs.some(x => ops.filename.startsWith(x));
23
- if (isExternalView) {
24
- nodePath.scope.setData('isExternalView', true);
25
- nodePath.pushContainer('body', [types.importDeclaration([types.importDefaultSpecifier(types.identifier('PvWrapExternalPage'))], types.stringLiteral('rrc-loader-helper/lib/page/external-page'))]);
26
- }
27
- }
28
- },
29
19
  ExportDefaultDeclaration: (nodePath, ops) => {
30
- if (nodePath.scope.getData('isExternalView')) {
20
+ const externalsAbs = options.externals?.map?.(x => _path.default.join(options.pageRootAbs, x, 'view.')) ?? [];
21
+ const isExternalView = externalsAbs.some(x => ops.filename.startsWith(x));
22
+ if (isExternalView) {
31
23
  const pageName = _path.default.dirname(_path.default.relative(options.pageRootAbs, ops.filename));
32
24
  const declarationPath = nodePath.get('declaration');
33
- if (types.isCallExpression(declarationPath.node) || types.isIdentifier(declarationPath.node)) {
34
- const call = types.callExpression(types.identifier('PvWrapExternalPage'), [declarationPath.node, types.stringLiteral(pageName)]);
25
+
26
+ // TODO: 后期可以考虑加上 ClassDeclaration 的兼容。
27
+ // 希望尽量少的兼容,因为这种情况少见,而且推荐使用函数组件
28
+ if (types.isCallExpression(declarationPath.node) || types.isIdentifier(declarationPath.node) || types.isFunctionDeclaration(declarationPath.node) || types.isArrowFunctionExpression(declarationPath.node)) {
29
+ const program = nodePath.findParent(x => x.isProgram());
30
+ program.unshiftContainer('body', [types.importDeclaration([types.importDefaultSpecifier(types.identifier('PvWrapExternalPage'))], types.stringLiteral('rrc-loader-helper/lib/page/external-page'))]);
31
+ let targetNode = declarationPath.node;
32
+ // https://www.babeljs.cn/docs/babel-types#callexpression
33
+ // 处理函数声明,types.callExpression arguments 不支持函数类型, 需要转成函数表达式
34
+ if (types.isFunctionDeclaration(declarationPath.node)) {
35
+ const uniqueId = nodePath.scope.generateUidIdentifier();
36
+ const functionExpression = types.functionExpression(uniqueId, nodePath.node.declaration.params, nodePath.node.declaration.body, nodePath.node.declaration.generator, nodePath.node.declaration.async);
37
+ targetNode = functionExpression;
38
+ }
39
+ const call = types.callExpression(types.identifier('PvWrapExternalPage'), [targetNode, types.stringLiteral(pageName)]);
35
40
  nodePath.get('declaration').replaceWith(call);
36
41
  }
37
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"external-wrap.js","names":["_helperPluginUtils","require","_path","_interopRequireDefault","obj","__esModule","default","_default","declare","api","options","assertVersion","types","name","visitor","Program","enter","nodePath","ops","externalsAbs","externals","map","x","path","join","pageRootAbs","isExternalView","some","filename","startsWith","scope","setData","pushContainer","importDeclaration","importDefaultSpecifier","identifier","stringLiteral","ExportDefaultDeclaration","getData","pageName","dirname","relative","declarationPath","get","isCallExpression","node","isIdentifier","call","callExpression","replaceWith","exports"],"sources":["../../../external-wrap.ts"],"sourcesContent":["import type * as __babel__core from '@babel/core';\nimport { declare } from '@babel/helper-plugin-utils';\nimport path from 'path';\n\ninterface Options {\n externals: string[];\n pageRootAbs: string;\n}\n\nexport default declare<Options>((api, options) => {\n const { assertVersion, types } = api;\n assertVersion(7);\n return {\n name: 'babel-plugin-external-wrap',\n visitor: {\n Program: {\n enter: (nodePath, ops) => {\n const externalsAbs =\n options.externals?.map?.((x) =>\n path.join(options.pageRootAbs, x, 'view'),\n ) ?? [];\n const isExternalView = externalsAbs.some((x) =>\n ops.filename.startsWith(x),\n );\n if (isExternalView) {\n nodePath.scope.setData('isExternalView', true);\n nodePath.pushContainer('body', [\n types.importDeclaration(\n [\n types.importDefaultSpecifier(\n types.identifier('PvWrapExternalPage'),\n ),\n ],\n types.stringLiteral('rrc-loader-helper/lib/page/external-page'),\n ),\n ]);\n }\n },\n },\n ExportDefaultDeclaration: (nodePath, ops) => {\n if (nodePath.scope.getData('isExternalView')) {\n const pageName = path.dirname(\n path.relative(options.pageRootAbs, ops.filename),\n );\n const declarationPath = nodePath.get('declaration');\n if (\n types.isCallExpression(declarationPath.node) ||\n types.isIdentifier(declarationPath.node)\n ) {\n const call = types.callExpression(\n types.identifier('PvWrapExternalPage'),\n [declarationPath.node, types.stringLiteral(pageName)],\n );\n nodePath.get('declaration').replaceWith(call);\n }\n }\n },\n },\n };\n});\n"],"mappings":";;;;;;AACA,IAAAA,kBAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAwB,SAAAE,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,IAAAG,QAAA,GAOT,IAAAC,0BAAO,EAAU,CAACC,GAAG,EAAEC,OAAO,KAAK;EAChD,MAAM;IAAEC,aAAa;IAAEC;EAAM,CAAC,GAAGH,GAAG;EACpCE,aAAa,CAAC,CAAC,CAAC;EAChB,OAAO;IACLE,IAAI,EAAE,4BAA4B;IAClCC,OAAO,EAAE;MACPC,OAAO,EAAE;QACPC,KAAK,EAAEA,CAACC,QAAQ,EAAEC,GAAG,KAAK;UACxB,MAAMC,YAAY,GAChBT,OAAO,CAACU,SAAS,EAAEC,GAAG,GAAIC,CAAC,IACzBC,aAAI,CAACC,IAAI,CAACd,OAAO,CAACe,WAAW,EAAEH,CAAC,EAAE,MAAM,CAAC,CAC1C,IAAI,EAAE;UACT,MAAMI,cAAc,GAAGP,YAAY,CAACQ,IAAI,CAAEL,CAAC,IACzCJ,GAAG,CAACU,QAAQ,CAACC,UAAU,CAACP,CAAC,CAAC,CAC3B;UACD,IAAII,cAAc,EAAE;YAClBT,QAAQ,CAACa,KAAK,CAACC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;YAC9Cd,QAAQ,CAACe,aAAa,CAAC,MAAM,EAAE,CAC7BpB,KAAK,CAACqB,iBAAiB,CACrB,CACErB,KAAK,CAACsB,sBAAsB,CAC1BtB,KAAK,CAACuB,UAAU,CAAC,oBAAoB,CAAC,CACvC,CACF,EACDvB,KAAK,CAACwB,aAAa,CAAC,0CAA0C,CAAC,CAChE,CACF,CAAC;UACJ;QACF;MACF,CAAC;MACDC,wBAAwB,EAAEA,CAACpB,QAAQ,EAAEC,GAAG,KAAK;QAC3C,IAAID,QAAQ,CAACa,KAAK,CAACQ,OAAO,CAAC,gBAAgB,CAAC,EAAE;UAC5C,MAAMC,QAAQ,GAAGhB,aAAI,CAACiB,OAAO,CAC3BjB,aAAI,CAACkB,QAAQ,CAAC/B,OAAO,CAACe,WAAW,EAAEP,GAAG,CAACU,QAAQ,CAAC,CACjD;UACD,MAAMc,eAAe,GAAGzB,QAAQ,CAAC0B,GAAG,CAAC,aAAa,CAAC;UACnD,IACE/B,KAAK,CAACgC,gBAAgB,CAACF,eAAe,CAACG,IAAI,CAAC,IAC5CjC,KAAK,CAACkC,YAAY,CAACJ,eAAe,CAACG,IAAI,CAAC,EACxC;YACA,MAAME,IAAI,GAAGnC,KAAK,CAACoC,cAAc,CAC/BpC,KAAK,CAACuB,UAAU,CAAC,oBAAoB,CAAC,EACtC,CAACO,eAAe,CAACG,IAAI,EAAEjC,KAAK,CAACwB,aAAa,CAACG,QAAQ,CAAC,CAAC,CACtD;YACDtB,QAAQ,CAAC0B,GAAG,CAAC,aAAa,CAAC,CAACM,WAAW,CAACF,IAAI,CAAC;UAC/C;QACF;MACF;IACF;EACF,CAAC;AACH,CAAC,CAAC;AAAAG,OAAA,CAAA5C,OAAA,GAAAC,QAAA"}
1
+ {"version":3,"file":"external-wrap.js","names":["_helperPluginUtils","require","_path","_interopRequireDefault","obj","__esModule","default","_default","declare","api","options","assertVersion","types","name","visitor","ExportDefaultDeclaration","nodePath","ops","externalsAbs","externals","map","x","path","join","pageRootAbs","isExternalView","some","filename","startsWith","pageName","dirname","relative","declarationPath","get","isCallExpression","node","isIdentifier","isFunctionDeclaration","isArrowFunctionExpression","program","findParent","isProgram","unshiftContainer","importDeclaration","importDefaultSpecifier","identifier","stringLiteral","targetNode","uniqueId","scope","generateUidIdentifier","functionExpression","declaration","params","body","generator","async","call","callExpression","replaceWith","exports"],"sources":["../../../external-wrap.ts"],"sourcesContent":["import type * as __babel__core from '@babel/core';\nimport { declare } from '@babel/helper-plugin-utils';\nimport path from 'path';\n\ninterface Options {\n externals: string[];\n pageRootAbs: string;\n}\n\nexport default declare<Options>((api, options) => {\n const { assertVersion, types } = api;\n assertVersion(7);\n return {\n name: 'babel-plugin-external-wrap',\n visitor: {\n ExportDefaultDeclaration: (nodePath, ops) => {\n const externalsAbs = options.externals?.map?.((x) => path.join(options.pageRootAbs, x, 'view.')) ?? [];\n const isExternalView = externalsAbs.some((x) => ops.filename.startsWith(x));\n if (isExternalView) {\n const pageName = path.dirname(path.relative(options.pageRootAbs, ops.filename));\n const declarationPath = nodePath.get('declaration');\n\n // TODO: 后期可以考虑加上 ClassDeclaration 的兼容。\n // 希望尽量少的兼容,因为这种情况少见,而且推荐使用函数组件\n if (\n types.isCallExpression(declarationPath.node) ||\n types.isIdentifier(declarationPath.node) ||\n types.isFunctionDeclaration(declarationPath.node) ||\n types.isArrowFunctionExpression(declarationPath.node)\n ) {\n const program = nodePath.findParent((x) => x.isProgram());\n program.unshiftContainer('body', [\n types.importDeclaration(\n [types.importDefaultSpecifier(types.identifier('PvWrapExternalPage'))],\n types.stringLiteral('rrc-loader-helper/lib/page/external-page'),\n ),\n ]);\n let targetNode = declarationPath.node;\n // https://www.babeljs.cn/docs/babel-types#callexpression\n // 处理函数声明,types.callExpression arguments 不支持函数类型, 需要转成函数表达式\n if (types.isFunctionDeclaration(declarationPath.node)) {\n const uniqueId = nodePath.scope.generateUidIdentifier();\n const functionExpression = types.functionExpression(\n uniqueId,\n nodePath.node.declaration.params,\n nodePath.node.declaration.body,\n nodePath.node.declaration.generator,\n nodePath.node.declaration.async,\n );\n targetNode = functionExpression;\n }\n const call = types.callExpression(types.identifier('PvWrapExternalPage'), [targetNode, types.stringLiteral(pageName)]);\n nodePath.get('declaration').replaceWith(call);\n }\n }\n },\n },\n };\n});\n"],"mappings":";;;;;;AACA,IAAAA,kBAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAwB,SAAAE,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,IAAAG,QAAA,GAOT,IAAAC,0BAAO,EAAU,CAACC,GAAG,EAAEC,OAAO,KAAK;EAChD,MAAM;IAAEC,aAAa;IAAEC;EAAM,CAAC,GAAGH,GAAG;EACpCE,aAAa,CAAC,CAAC,CAAC;EAChB,OAAO;IACLE,IAAI,EAAE,4BAA4B;IAClCC,OAAO,EAAE;MACPC,wBAAwB,EAAEA,CAACC,QAAQ,EAAEC,GAAG,KAAK;QAC3C,MAAMC,YAAY,GAAGR,OAAO,CAACS,SAAS,EAAEC,GAAG,GAAIC,CAAC,IAAKC,aAAI,CAACC,IAAI,CAACb,OAAO,CAACc,WAAW,EAAEH,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE;QACtG,MAAMI,cAAc,GAAGP,YAAY,CAACQ,IAAI,CAAEL,CAAC,IAAKJ,GAAG,CAACU,QAAQ,CAACC,UAAU,CAACP,CAAC,CAAC,CAAC;QAC3E,IAAII,cAAc,EAAE;UAClB,MAAMI,QAAQ,GAAGP,aAAI,CAACQ,OAAO,CAACR,aAAI,CAACS,QAAQ,CAACrB,OAAO,CAACc,WAAW,EAAEP,GAAG,CAACU,QAAQ,CAAC,CAAC;UAC/E,MAAMK,eAAe,GAAGhB,QAAQ,CAACiB,GAAG,CAAC,aAAa,CAAC;;UAEnD;UACA;UACA,IACErB,KAAK,CAACsB,gBAAgB,CAACF,eAAe,CAACG,IAAI,CAAC,IAC5CvB,KAAK,CAACwB,YAAY,CAACJ,eAAe,CAACG,IAAI,CAAC,IACxCvB,KAAK,CAACyB,qBAAqB,CAACL,eAAe,CAACG,IAAI,CAAC,IACjDvB,KAAK,CAAC0B,yBAAyB,CAACN,eAAe,CAACG,IAAI,CAAC,EACrD;YACA,MAAMI,OAAO,GAAGvB,QAAQ,CAACwB,UAAU,CAAEnB,CAAC,IAAKA,CAAC,CAACoB,SAAS,EAAE,CAAC;YACzDF,OAAO,CAACG,gBAAgB,CAAC,MAAM,EAAE,CAC/B9B,KAAK,CAAC+B,iBAAiB,CACrB,CAAC/B,KAAK,CAACgC,sBAAsB,CAAChC,KAAK,CAACiC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,EACtEjC,KAAK,CAACkC,aAAa,CAAC,0CAA0C,CAAC,CAChE,CACF,CAAC;YACF,IAAIC,UAAU,GAAGf,eAAe,CAACG,IAAI;YACrC;YACA;YACA,IAAIvB,KAAK,CAACyB,qBAAqB,CAACL,eAAe,CAACG,IAAI,CAAC,EAAE;cACrD,MAAMa,QAAQ,GAAGhC,QAAQ,CAACiC,KAAK,CAACC,qBAAqB,EAAE;cACvD,MAAMC,kBAAkB,GAAGvC,KAAK,CAACuC,kBAAkB,CACjDH,QAAQ,EACRhC,QAAQ,CAACmB,IAAI,CAACiB,WAAW,CAACC,MAAM,EAChCrC,QAAQ,CAACmB,IAAI,CAACiB,WAAW,CAACE,IAAI,EAC9BtC,QAAQ,CAACmB,IAAI,CAACiB,WAAW,CAACG,SAAS,EACnCvC,QAAQ,CAACmB,IAAI,CAACiB,WAAW,CAACI,KAAK,CAChC;cACDT,UAAU,GAAGI,kBAAkB;YACjC;YACA,MAAMM,IAAI,GAAG7C,KAAK,CAAC8C,cAAc,CAAC9C,KAAK,CAACiC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAACE,UAAU,EAAEnC,KAAK,CAACkC,aAAa,CAACjB,QAAQ,CAAC,CAAC,CAAC;YACtHb,QAAQ,CAACiB,GAAG,CAAC,aAAa,CAAC,CAAC0B,WAAW,CAACF,IAAI,CAAC;UAC/C;QACF;MACF;IACF;EACF,CAAC;AACH,CAAC,CAAC;AAAAG,OAAA,CAAAtD,OAAA,GAAAC,QAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"replace-source.d.ts","sourceRoot":"","sources":["../../../src/babel/plugins/replace-source.ts"],"names":[],"mappings":";AAQA,wBA8GG"}
1
+ {"version":3,"file":"replace-source.d.ts","sourceRoot":"","sources":["../../../src/babel/plugins/replace-source.ts"],"names":[],"mappings":";AAQA,wBAuEG"}
@@ -18,11 +18,12 @@ var _default = (0, _helperPluginUtils.declare)((api, options) => {
18
18
  const fromPath = nodePath.get('source');
19
19
  const fromValue = fromPath.node.value;
20
20
  const isSource = ops.filename.startsWith(options.srcAbs);
21
- if (fromValue.startsWith('react-redux') && isSource) {
21
+ if (!isSource) return;
22
+ if (fromValue.startsWith('react-redux')) {
22
23
  nodePath.set('source', types.stringLiteral(`rrc-loader-helper/lib/reducers/${fromValue}`));
23
- } else if (fromValue.startsWith('react-router-dom') && !options.disableBuiltInRoute && isSource) {
24
+ } else if (fromValue.startsWith('react-router-dom') && !options.disableBuiltInRoute) {
24
25
  nodePath.set('source', types.stringLiteral('rrc-loader-helper/router'));
25
- } else if (fromValue.startsWith('redux-saga') && isSource) {
26
+ } else if (fromValue.startsWith('redux-saga')) {
26
27
  nodePath.set('source', types.stringLiteral(`rrc-loader-helper/lib/sagas/${fromValue}`));
27
28
  }
28
29
  },
@@ -1 +1 @@
1
- {"version":3,"file":"replace-source.js","names":["_helperPluginUtils","require","_default","declare","api","options","assertVersion","types","name","visitor","ImportDeclaration","nodePath","ops","fromPath","get","fromValue","node","value","isSource","filename","startsWith","srcAbs","set","stringLiteral","disableBuiltInRoute","Identifier","program","findParent","x","isProgram","reducersIdentifier","scope","generateUidIdentifier","unshiftContainer","importDeclaration","importDefaultSpecifier","replaceWith","rootSaga","importSpecifier","identifier","expressionStatement","callExpression","routers","memberExpression","arrowFunctionExpression","blockStatement","returnStatement","jsxElement","jsxOpeningElement","jsxIdentifier","jsxSpreadAttribute","exports","default"],"sources":["../../../replace-source.ts"],"sourcesContent":["import type * as __babel__core from '@babel/core';\nimport { declare } from '@babel/helper-plugin-utils';\n\ninterface Options {\n srcAbs: string;\n disableBuiltInRoute: boolean;\n}\n\nexport default declare<Options>((api, options) => {\n const { assertVersion, types } = api;\n assertVersion(7);\n return {\n name: 'babel-plugin-replace-source',\n visitor: {\n ImportDeclaration(nodePath, ops) {\n const fromPath = nodePath.get('source');\n const fromValue = fromPath.node.value;\n const isSource = ops.filename.startsWith(options.srcAbs);\n if (fromValue.startsWith('react-redux') && isSource) {\n nodePath.set(\n 'source',\n types.stringLiteral(`rrc-loader-helper/lib/reducers/${fromValue}`),\n );\n } else if (\n fromValue.startsWith('react-router-dom') &&\n !options.disableBuiltInRoute &&\n isSource\n ) {\n nodePath.set(\n 'source',\n types.stringLiteral('rrc-loader-helper/router'),\n );\n } else if (fromValue.startsWith('redux-saga') && isSource) {\n nodePath.set(\n 'source',\n types.stringLiteral(`rrc-loader-helper/lib/sagas/${fromValue}`),\n );\n }\n },\n Identifier: (nodePath, ops) => {\n const program = nodePath.findParent((x) => x.isProgram());\n if (!program?.isProgram()) {\n return;\n }\n if (nodePath.node.name === '__ROOT_REDUCER__') {\n const reducersIdentifier =\n nodePath.scope.generateUidIdentifier('reducers');\n program.unshiftContainer('body', [\n types.importDeclaration(\n [types.importDefaultSpecifier(reducersIdentifier)],\n types.stringLiteral('@@/lessCoding/reducers'),\n ),\n ]);\n nodePath.replaceWith(reducersIdentifier);\n } else if (nodePath.node.name === '__ROOT_SAGA__') {\n const rootSaga = nodePath.scope.generateUidIdentifier('sagas');\n program.unshiftContainer('body', [\n types.importDeclaration(\n [types.importDefaultSpecifier(rootSaga)],\n types.stringLiteral('@@/lessCoding/sagas'),\n ),\n ]);\n nodePath.replaceWith(rootSaga);\n } else if (nodePath.node.name === '__ROOT_ROUTE__') {\n // FUCK\n program.unshiftContainer('body', [\n types.importDeclaration(\n [\n types.importSpecifier(\n types.identifier('setReducers'),\n types.identifier('setReducers'),\n ),\n ],\n types.stringLiteral('rrc-loader-helper/lib/imp'),\n ),\n types.expressionStatement(\n types.callExpression(types.identifier('setReducers'), [\n types.identifier('reducers'),\n ]),\n ),\n ]);\n\n const routers = nodePath.scope.generateUidIdentifier('routers');\n program.unshiftContainer('body', [\n types.importDeclaration(\n [types.importDefaultSpecifier(routers)],\n types.stringLiteral('@@/lessCoding/routers'),\n ),\n ]);\n nodePath.replaceWith(\n types.callExpression(\n types.memberExpression(\n types.callExpression(routers, [types.identifier('reducers')]),\n types.identifier('map'),\n ),\n [\n types.arrowFunctionExpression(\n [types.identifier('x')],\n types.blockStatement([\n types.returnStatement(\n types.jsxElement(\n types.jsxOpeningElement(types.jsxIdentifier('Route'), [\n types.jsxSpreadAttribute(types.identifier('x')),\n ], true),\n null,\n [],\n true,\n ),\n ),\n ]),\n ),\n ],\n ),\n );\n }\n },\n },\n };\n});\n"],"mappings":";;;;;;AACA,IAAAA,kBAAA,GAAAC,OAAA;AAAqD,IAAAC,QAAA,GAOtC,IAAAC,0BAAO,EAAU,CAACC,GAAG,EAAEC,OAAO,KAAK;EAChD,MAAM;IAAEC,aAAa;IAAEC;EAAM,CAAC,GAAGH,GAAG;EACpCE,aAAa,CAAC,CAAC,CAAC;EAChB,OAAO;IACLE,IAAI,EAAE,6BAA6B;IACnCC,OAAO,EAAE;MACPC,iBAAiBA,CAACC,QAAQ,EAAEC,GAAG,EAAE;QAC/B,MAAMC,QAAQ,GAAGF,QAAQ,CAACG,GAAG,CAAC,QAAQ,CAAC;QACvC,MAAMC,SAAS,GAAGF,QAAQ,CAACG,IAAI,CAACC,KAAK;QACrC,MAAMC,QAAQ,GAAGN,GAAG,CAACO,QAAQ,CAACC,UAAU,CAACf,OAAO,CAACgB,MAAM,CAAC;QACxD,IAAIN,SAAS,CAACK,UAAU,CAAC,aAAa,CAAC,IAAIF,QAAQ,EAAE;UACnDP,QAAQ,CAACW,GAAG,CACV,QAAQ,EACRf,KAAK,CAACgB,aAAa,CAAE,kCAAiCR,SAAU,EAAC,CAAC,CACnE;QACH,CAAC,MAAM,IACLA,SAAS,CAACK,UAAU,CAAC,kBAAkB,CAAC,IACxC,CAACf,OAAO,CAACmB,mBAAmB,IAC5BN,QAAQ,EACR;UACAP,QAAQ,CAACW,GAAG,CACV,QAAQ,EACRf,KAAK,CAACgB,aAAa,CAAC,0BAA0B,CAAC,CAChD;QACH,CAAC,MAAM,IAAIR,SAAS,CAACK,UAAU,CAAC,YAAY,CAAC,IAAIF,QAAQ,EAAE;UACzDP,QAAQ,CAACW,GAAG,CACV,QAAQ,EACRf,KAAK,CAACgB,aAAa,CAAE,+BAA8BR,SAAU,EAAC,CAAC,CAChE;QACH;MACF,CAAC;MACDU,UAAU,EAAEA,CAACd,QAAQ,EAAEC,GAAG,KAAK;QAC7B,MAAMc,OAAO,GAAGf,QAAQ,CAACgB,UAAU,CAAEC,CAAC,IAAKA,CAAC,CAACC,SAAS,EAAE,CAAC;QACzD,IAAI,CAACH,OAAO,EAAEG,SAAS,EAAE,EAAE;UACzB;QACF;QACA,IAAIlB,QAAQ,CAACK,IAAI,CAACR,IAAI,KAAK,kBAAkB,EAAE;UAC7C,MAAMsB,kBAAkB,GACtBnB,QAAQ,CAACoB,KAAK,CAACC,qBAAqB,CAAC,UAAU,CAAC;UAClDN,OAAO,CAACO,gBAAgB,CAAC,MAAM,EAAE,CAC/B1B,KAAK,CAAC2B,iBAAiB,CACrB,CAAC3B,KAAK,CAAC4B,sBAAsB,CAACL,kBAAkB,CAAC,CAAC,EAClDvB,KAAK,CAACgB,aAAa,CAAC,wBAAwB,CAAC,CAC9C,CACF,CAAC;UACFZ,QAAQ,CAACyB,WAAW,CAACN,kBAAkB,CAAC;QAC1C,CAAC,MAAM,IAAInB,QAAQ,CAACK,IAAI,CAACR,IAAI,KAAK,eAAe,EAAE;UACjD,MAAM6B,QAAQ,GAAG1B,QAAQ,CAACoB,KAAK,CAACC,qBAAqB,CAAC,OAAO,CAAC;UAC9DN,OAAO,CAACO,gBAAgB,CAAC,MAAM,EAAE,CAC/B1B,KAAK,CAAC2B,iBAAiB,CACrB,CAAC3B,KAAK,CAAC4B,sBAAsB,CAACE,QAAQ,CAAC,CAAC,EACxC9B,KAAK,CAACgB,aAAa,CAAC,qBAAqB,CAAC,CAC3C,CACF,CAAC;UACFZ,QAAQ,CAACyB,WAAW,CAACC,QAAQ,CAAC;QAChC,CAAC,MAAM,IAAI1B,QAAQ,CAACK,IAAI,CAACR,IAAI,KAAK,gBAAgB,EAAE;UAClD;UACAkB,OAAO,CAACO,gBAAgB,CAAC,MAAM,EAAE,CAC/B1B,KAAK,CAAC2B,iBAAiB,CACrB,CACE3B,KAAK,CAAC+B,eAAe,CACnB/B,KAAK,CAACgC,UAAU,CAAC,aAAa,CAAC,EAC/BhC,KAAK,CAACgC,UAAU,CAAC,aAAa,CAAC,CAChC,CACF,EACDhC,KAAK,CAACgB,aAAa,CAAC,2BAA2B,CAAC,CACjD,EACDhB,KAAK,CAACiC,mBAAmB,CACvBjC,KAAK,CAACkC,cAAc,CAAClC,KAAK,CAACgC,UAAU,CAAC,aAAa,CAAC,EAAE,CACpDhC,KAAK,CAACgC,UAAU,CAAC,UAAU,CAAC,CAC7B,CAAC,CACH,CACF,CAAC;UAEF,MAAMG,OAAO,GAAG/B,QAAQ,CAACoB,KAAK,CAACC,qBAAqB,CAAC,SAAS,CAAC;UAC/DN,OAAO,CAACO,gBAAgB,CAAC,MAAM,EAAE,CAC/B1B,KAAK,CAAC2B,iBAAiB,CACrB,CAAC3B,KAAK,CAAC4B,sBAAsB,CAACO,OAAO,CAAC,CAAC,EACvCnC,KAAK,CAACgB,aAAa,CAAC,uBAAuB,CAAC,CAC7C,CACF,CAAC;UACFZ,QAAQ,CAACyB,WAAW,CAClB7B,KAAK,CAACkC,cAAc,CAClBlC,KAAK,CAACoC,gBAAgB,CACpBpC,KAAK,CAACkC,cAAc,CAACC,OAAO,EAAE,CAACnC,KAAK,CAACgC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAC7DhC,KAAK,CAACgC,UAAU,CAAC,KAAK,CAAC,CACxB,EACD,CACEhC,KAAK,CAACqC,uBAAuB,CAC3B,CAACrC,KAAK,CAACgC,UAAU,CAAC,GAAG,CAAC,CAAC,EACvBhC,KAAK,CAACsC,cAAc,CAAC,CACnBtC,KAAK,CAACuC,eAAe,CACnBvC,KAAK,CAACwC,UAAU,CACdxC,KAAK,CAACyC,iBAAiB,CAACzC,KAAK,CAAC0C,aAAa,CAAC,OAAO,CAAC,EAAE,CACpD1C,KAAK,CAAC2C,kBAAkB,CAAC3C,KAAK,CAACgC,UAAU,CAAC,GAAG,CAAC,CAAC,CAChD,EAAE,IAAI,CAAC,EACR,IAAI,EACJ,EAAE,EACF,IAAI,CACL,CACF,CACF,CAAC,CACH,CACF,CACF,CACF;QACH;MACF;IACF;EACF,CAAC;AACH,CAAC,CAAC;AAAAY,OAAA,CAAAC,OAAA,GAAAlD,QAAA"}
1
+ {"version":3,"file":"replace-source.js","names":["_helperPluginUtils","require","_default","declare","api","options","assertVersion","types","name","visitor","ImportDeclaration","nodePath","ops","fromPath","get","fromValue","node","value","isSource","filename","startsWith","srcAbs","set","stringLiteral","disableBuiltInRoute","Identifier","program","findParent","x","isProgram","reducersIdentifier","scope","generateUidIdentifier","unshiftContainer","importDeclaration","importDefaultSpecifier","replaceWith","rootSaga","importSpecifier","identifier","expressionStatement","callExpression","routers","memberExpression","arrowFunctionExpression","blockStatement","returnStatement","jsxElement","jsxOpeningElement","jsxIdentifier","jsxSpreadAttribute","exports","default"],"sources":["../../../replace-source.ts"],"sourcesContent":["import type * as __babel__core from '@babel/core';\nimport { declare } from '@babel/helper-plugin-utils';\n\ninterface Options {\n srcAbs: string;\n disableBuiltInRoute: boolean;\n}\n\nexport default declare<Options>((api, options) => {\n const { assertVersion, types } = api;\n assertVersion(7);\n return {\n name: 'babel-plugin-replace-source',\n visitor: {\n ImportDeclaration(nodePath, ops) {\n const fromPath = nodePath.get('source');\n const fromValue = fromPath.node.value;\n const isSource = ops.filename.startsWith(options.srcAbs);\n if (!isSource) return;\n if (fromValue.startsWith('react-redux')) {\n nodePath.set('source', types.stringLiteral(`rrc-loader-helper/lib/reducers/${fromValue}`));\n } else if (fromValue.startsWith('react-router-dom') && !options.disableBuiltInRoute) {\n nodePath.set('source', types.stringLiteral('rrc-loader-helper/router'));\n } else if (fromValue.startsWith('redux-saga')) {\n nodePath.set('source', types.stringLiteral(`rrc-loader-helper/lib/sagas/${fromValue}`));\n }\n },\n Identifier: (nodePath, ops) => {\n const program = nodePath.findParent((x) => x.isProgram());\n if (!program?.isProgram()) {\n return;\n }\n if (nodePath.node.name === '__ROOT_REDUCER__') {\n const reducersIdentifier = nodePath.scope.generateUidIdentifier('reducers');\n program.unshiftContainer('body', [\n types.importDeclaration([types.importDefaultSpecifier(reducersIdentifier)], types.stringLiteral('@@/lessCoding/reducers')),\n ]);\n nodePath.replaceWith(reducersIdentifier);\n } else if (nodePath.node.name === '__ROOT_SAGA__') {\n const rootSaga = nodePath.scope.generateUidIdentifier('sagas');\n program.unshiftContainer('body', [\n types.importDeclaration([types.importDefaultSpecifier(rootSaga)], types.stringLiteral('@@/lessCoding/sagas')),\n ]);\n nodePath.replaceWith(rootSaga);\n } else if (nodePath.node.name === '__ROOT_ROUTE__') {\n // FUCK\n program.unshiftContainer('body', [\n types.importDeclaration(\n [types.importSpecifier(types.identifier('setReducers'), types.identifier('setReducers'))],\n types.stringLiteral('rrc-loader-helper/lib/imp'),\n ),\n types.expressionStatement(types.callExpression(types.identifier('setReducers'), [types.identifier('reducers')])),\n ]);\n\n const routers = nodePath.scope.generateUidIdentifier('routers');\n program.unshiftContainer('body', [\n types.importDeclaration([types.importDefaultSpecifier(routers)], types.stringLiteral('@@/lessCoding/routers')),\n ]);\n nodePath.replaceWith(\n types.callExpression(types.memberExpression(types.callExpression(routers, [types.identifier('reducers')]), types.identifier('map')), [\n types.arrowFunctionExpression(\n [types.identifier('x')],\n types.blockStatement([\n types.returnStatement(\n types.jsxElement(\n types.jsxOpeningElement(types.jsxIdentifier('Route'), [types.jsxSpreadAttribute(types.identifier('x'))], true),\n null,\n [],\n true,\n ),\n ),\n ]),\n ),\n ]),\n );\n }\n },\n },\n };\n});\n"],"mappings":"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"}
package/lib/index.js CHANGED
@@ -212,7 +212,7 @@ class LcdRouterWebpackPlugin {
212
212
  index: 'list',
213
213
  externals: [],
214
214
  pageDir: 'component',
215
- reducerName: 'reducers',
215
+ reducerName: 'reducer',
216
216
  disableBuiltInRoute: false
217
217
  };
218
218
  this.options = (0, _deepmerge.default)(defaultOptions, this.options);
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_globby","_interopRequireDefault","require","_chokidar","_deepmerge","_utils","_ReducersGenerator","_SagasGenerator","_RoutersGenerator","_nodePath","obj","__esModule","default","LcdRouterWebpackPlugin","options","constructor","apply","compiler","mergeOptions","hooks","afterPlugins","tap","pathService","PathService","resolver","Resolver","fileService","FileService","reducersGenerator","ReducersGenerator","sagasGenerator","SagasGenerator","routersGenerator","RoutersGenerator","isDev","mode","process","env","NODE_ENV","writeCode","writeCodeToFile","getReducersCacheFileAbs","getSagasCacheFileAbs","getRoutersCacheFileAbs","resolveFile","filepath","absFilePath","getCurrentFileAbs","currentDir","path","dirname","absCurrentDir","chunkCode","meJSON","readJSONSync","reducerPath","getReducerFile","push","e","mobx","Error","viewPath","getViewFile","theme","hash","sagaPath","getSagaFile","errorComponent","errorCompPath","getErrorComFile","themePath","getThemeJSCacheFileAbs","writeThemeFile","meJSONPath","getMeJSONCacheFileAbs","writeMeJSONFile","isExternal","externals","some","x","hasChildStore","globby","sync","reducerName","cwd","length","set","namespace","page","exact","RegExp","index","test","_key","replace","list","getPageRootAbs","console","warn","sortedList","map","sort","a","b","startsWith","localeCompare","dir","forEach","watcher","chokidar","watch","ignoreInitial","fn","on","environment","module","rules","exclude","use","loader","resolve","presets","babelrc","parserOpts","plugins","defaultOptions","context","enablePreFetch","pageDir","disableBuiltInRoute","deepmerge","exports"],"sources":["../index.ts"],"sourcesContent":["import type { Compiler, WebpackPluginInstance } from 'webpack';\nimport globby from 'globby';\nimport chokidar from 'chokidar';\nimport deepmerge from 'deepmerge';\nimport { PathService, Resolver, Options, FileService } from './utils';\nimport { ReducersGenerator } from './ReducersGenerator';\nimport { SagasGenerator } from './SagasGenerator';\nimport { RoutersGenerator } from './RoutersGenerator';\n\nimport path from 'node:path';\n\nexport default class LcdRouterWebpackPlugin implements WebpackPluginInstance {\n options: Options;\n constructor(options: Options) {\n this.options = options;\n }\n\n apply(compiler: Compiler) {\n this.mergeOptions(compiler);\n\n // 处理 lcd 中的路由体系\n compiler.hooks.afterPlugins.tap('LcdRouterWebpackPlugin', (compiler) => {\n const options = this.options;\n\n const pathService = new PathService(options);\n const resolver = new Resolver(compiler, options);\n const fileService = new FileService(pathService);\n\n const reducersGenerator = new ReducersGenerator();\n const sagasGenerator = new SagasGenerator();\n const routersGenerator = new RoutersGenerator(options, pathService);\n\n function isDev(compiler) {\n if (compiler.options.mode === 'production' || process.env.NODE_ENV === 'production') return false;\n return true;\n }\n\n function writeCode() {\n reducersGenerator.writeCodeToFile(pathService.getReducersCacheFileAbs());\n sagasGenerator.writeCodeToFile(pathService.getSagasCacheFileAbs());\n routersGenerator.writeCodeToFile(pathService.getRoutersCacheFileAbs());\n }\n\n function resolveFile(filepath: string) {\n const absFilePath = pathService.getCurrentFileAbs(filepath);\n const currentDir = path.dirname(filepath);\n const absCurrentDir = path.dirname(absFilePath);\n\n const chunkCode = [] as string[];\n const meJSON = fileService.readJSONSync(absFilePath);\n try {\n const reducerPath = resolver.getReducerFile(absCurrentDir);\n chunkCode.push(`export { default as reducer } from '${reducerPath}';`);\n } catch (e) {\n // feat: reducers 可以不存在, 方便结合reactive 和 ak,默认创建一个reducers\n if (meJSON.mobx) {\n /**\n * mobx 模式下, 需要垫一个被 mobx-adapter 包裹的 reducer 函数\n * 如果存在reducer文件,是默认会被 babel-plugin-enhance-reducer 处理的\n *\n * import storeHoc from 'rrc-loader-helper/lib/mobx-adapter';\n * export const reducer = storeHoc({\n * state: {},\n * }, 'report/other-table')\n *\n * 不太方便去垫一个 reducer 函数,reducer 的路径计算比较复杂, 所以直接报错\n * 同时,从逻辑上讲,如果开启了 mobx,那么必须要有 reducer 文件\n */\n throw Error(`开启 mobx 后,reducer 文件必须存在 ${absFilePath}`);\n }\n chunkCode.push(`export function reducer(){ return {} }`);\n }\n\n const viewPath = resolver.getViewFile(absCurrentDir);\n chunkCode.push(`export { default as view } from '${viewPath}';`);\n\n if (meJSON.theme && !options.theme?.hash) {\n throw Error(`开启页面级主题之前,请优先开启全局主题 ${absFilePath}`);\n }\n\n if (!meJSON.mobx) {\n try {\n const sagaPath = resolver.getSagaFile(absCurrentDir);\n chunkCode.push(`export { default as saga } from '${sagaPath}';`);\n } catch (e) {\n // feat: saga 也可以不存在, 方便结合reactive 和 ak,默认创建一个reducers\n chunkCode.push(`export function* saga(){ return {} }`);\n }\n }\n\n if (meJSON.errorComponent) {\n const errorCompPath = resolver.getErrorComFile(absCurrentDir, meJSON.errorComponent);\n chunkCode.push(`export { default as ErrorComponent } from '${errorCompPath}';`);\n }\n\n if (options.theme?.hash) {\n const themePath = pathService.getThemeJSCacheFileAbs(options.theme?.hash);\n chunkCode.push(`export * from '${themePath}';`);\n }\n\n if (meJSON.theme) {\n fileService.writeThemeFile(meJSON.theme, 'toGlobalTheme');\n const themePath = pathService.getThemeJSCacheFileAbs(meJSON.theme);\n chunkCode.push(`export * from '${themePath}';`);\n }\n\n const meJSONPath = pathService.getMeJSONCacheFileAbs(filepath);\n\n fileService.writeMeJSONFile(meJSONPath, chunkCode);\n\n const isExternal = options.externals?.some?.((x) => x === path.dirname(filepath)) ?? false;\n\n // 处理是否存在多store的场景\n const hasChildStore = globby.sync(`**/*.${options.reducerName}.{t,j}s`, { cwd: absCurrentDir }).length > 0;\n if (hasChildStore && (meJSON.sync || isExternal)) {\n throw Error(`如果开启了Sync模式或当前页面存在于LCD的external中,那么则不支持多Store功能,${absCurrentDir}`);\n }\n\n /** reducers.js */\n reducersGenerator.set(filepath, {\n meJSON,\n isExternal,\n namespace: currentDir,\n meJSONPath: meJSONPath,\n });\n\n /** saga.js */\n sagasGenerator.set(currentDir, {\n meJSON,\n isExternal,\n namespace: currentDir,\n meJSONPath: meJSONPath,\n });\n\n /** router */\n routersGenerator.set(currentDir, {\n meJSON,\n isExternal,\n page: currentDir,\n path: currentDir,\n exact: false,\n meJSONPath: meJSONPath,\n });\n\n /** 处理 /list 的路由 */\n if (new RegExp(`\\/${options.index}$`).test(absCurrentDir)) {\n const _key = absCurrentDir.replace(new RegExp(`\\/${options.index}$`), '');\n routersGenerator.set(_key, {\n meJSON,\n isExternal,\n page: absCurrentDir,\n path: _key,\n exact: true,\n meJSONPath: meJSONPath,\n });\n }\n }\n\n if (options.theme?.hash) {\n fileService.writeThemeFile(options.theme.hash, 'toGlobalTheme');\n }\n\n const list = globby.sync('**/me.json', {\n cwd: pathService.getPageRootAbs(),\n });\n\n if (list.length === 0) {\n console.warn('没有找到me.json文件');\n }\n\n /**\n * glob 的排序 是包含文件名 me.json 的完整路径,存在问题\n * 比如 会将 /xx/ss/me.json 排到 /xx/ss/zz/me.json 前面\n * glob 的 noSort option 会将 文件夹排到前面, 因此需要手动排序, 并且统一成 globby, 速度更快\n */\n const sortedList = list\n .map((filepath) => filepath?.replace(/me.json$/, ''))\n .sort((a, b) => {\n if (a?.startsWith(b)) return -1;\n return a.localeCompare(b, 'en');\n })\n .map((dir) => `${dir}me.json`);\n\n sortedList.forEach((filepath) => {\n resolveFile(filepath);\n });\n\n writeCode();\n\n if (isDev(compiler)) {\n const watcher = chokidar.watch('**/me.json', {\n cwd: pathService.getPageRootAbs(),\n ignoreInitial: true,\n });\n const fn = async (filepath) => {\n await resolveFile(filepath);\n writeCode();\n };\n watcher.on('add', fn);\n watcher.on('addDir', fn);\n watcher.on('change', fn);\n watcher.on('unlink', fn);\n watcher.on('unlinkDir', fn);\n watcher.on('error', fn);\n }\n });\n\n // lcd 中包含一些语法转换处理\n compiler.hooks.environment.tap('lcd-preset', () => {\n compiler.options.module.rules.push({\n test: /\\.(js|ts)x?$/,\n exclude: /node_modules/,\n use: [\n {\n loader: require.resolve('babel-loader'),\n options: {\n presets: [[require.resolve('./babel/index'), this.options]],\n babelrc: false,\n // 需要支持语法解析, 但不需要做转换\n parserOpts: {\n plugins: [\n 'jsx',\n 'typescript',\n 'asyncDoExpressions',\n 'decimal',\n 'decorators-legacy',\n 'decoratorAutoAccessors',\n 'destructuringPrivate',\n 'doExpressions',\n 'exportDefaultFrom',\n 'functionBind',\n 'functionSent',\n 'importAssertions',\n 'moduleBlocks',\n 'partialApplication',\n 'throwExpressions',\n ],\n },\n },\n },\n ],\n });\n });\n }\n\n mergeOptions(compiler: Compiler) {\n const defaultOptions = {\n context: compiler.context,\n enablePreFetch: false,\n index: 'list',\n externals: [],\n pageDir: 'component',\n reducerName: 'reducers',\n disableBuiltInRoute: false,\n };\n this.options = deepmerge(defaultOptions, this.options);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_globby","_interopRequireDefault","require","_chokidar","_deepmerge","_utils","_ReducersGenerator","_SagasGenerator","_RoutersGenerator","_nodePath","obj","__esModule","default","LcdRouterWebpackPlugin","options","constructor","apply","compiler","mergeOptions","hooks","afterPlugins","tap","pathService","PathService","resolver","Resolver","fileService","FileService","reducersGenerator","ReducersGenerator","sagasGenerator","SagasGenerator","routersGenerator","RoutersGenerator","isDev","mode","process","env","NODE_ENV","writeCode","writeCodeToFile","getReducersCacheFileAbs","getSagasCacheFileAbs","getRoutersCacheFileAbs","resolveFile","filepath","absFilePath","getCurrentFileAbs","currentDir","path","dirname","absCurrentDir","chunkCode","meJSON","readJSONSync","reducerPath","getReducerFile","push","e","mobx","Error","viewPath","getViewFile","theme","hash","sagaPath","getSagaFile","errorComponent","errorCompPath","getErrorComFile","themePath","getThemeJSCacheFileAbs","writeThemeFile","meJSONPath","getMeJSONCacheFileAbs","writeMeJSONFile","isExternal","externals","some","x","hasChildStore","globby","sync","reducerName","cwd","length","set","namespace","page","exact","RegExp","index","test","_key","replace","list","getPageRootAbs","console","warn","sortedList","map","sort","a","b","startsWith","localeCompare","dir","forEach","watcher","chokidar","watch","ignoreInitial","fn","on","environment","module","rules","exclude","use","loader","resolve","presets","babelrc","parserOpts","plugins","defaultOptions","context","enablePreFetch","pageDir","disableBuiltInRoute","deepmerge","exports"],"sources":["../index.ts"],"sourcesContent":["import type { Compiler, WebpackPluginInstance } from 'webpack';\nimport globby from 'globby';\nimport chokidar from 'chokidar';\nimport deepmerge from 'deepmerge';\nimport { PathService, Resolver, Options, FileService } from './utils';\nimport { ReducersGenerator } from './ReducersGenerator';\nimport { SagasGenerator } from './SagasGenerator';\nimport { RoutersGenerator } from './RoutersGenerator';\n\nimport path from 'node:path';\n\nexport default class LcdRouterWebpackPlugin implements WebpackPluginInstance {\n options: Options;\n constructor(options: Options) {\n this.options = options;\n }\n\n apply(compiler: Compiler) {\n this.mergeOptions(compiler);\n\n // 处理 lcd 中的路由体系\n compiler.hooks.afterPlugins.tap('LcdRouterWebpackPlugin', (compiler) => {\n const options = this.options;\n\n const pathService = new PathService(options);\n const resolver = new Resolver(compiler, options);\n const fileService = new FileService(pathService);\n\n const reducersGenerator = new ReducersGenerator();\n const sagasGenerator = new SagasGenerator();\n const routersGenerator = new RoutersGenerator(options, pathService);\n\n function isDev(compiler) {\n if (compiler.options.mode === 'production' || process.env.NODE_ENV === 'production') return false;\n return true;\n }\n\n function writeCode() {\n reducersGenerator.writeCodeToFile(pathService.getReducersCacheFileAbs());\n sagasGenerator.writeCodeToFile(pathService.getSagasCacheFileAbs());\n routersGenerator.writeCodeToFile(pathService.getRoutersCacheFileAbs());\n }\n\n function resolveFile(filepath: string) {\n const absFilePath = pathService.getCurrentFileAbs(filepath);\n const currentDir = path.dirname(filepath);\n const absCurrentDir = path.dirname(absFilePath);\n\n const chunkCode = [] as string[];\n const meJSON = fileService.readJSONSync(absFilePath);\n try {\n const reducerPath = resolver.getReducerFile(absCurrentDir);\n chunkCode.push(`export { default as reducer } from '${reducerPath}';`);\n } catch (e) {\n // feat: reducers 可以不存在, 方便结合reactive 和 ak,默认创建一个reducers\n if (meJSON.mobx) {\n /**\n * mobx 模式下, 需要垫一个被 mobx-adapter 包裹的 reducer 函数\n * 如果存在reducer文件,是默认会被 babel-plugin-enhance-reducer 处理的\n *\n * import storeHoc from 'rrc-loader-helper/lib/mobx-adapter';\n * export const reducer = storeHoc({\n * state: {},\n * }, 'report/other-table')\n *\n * 不太方便去垫一个 reducer 函数,reducer 的路径计算比较复杂, 所以直接报错\n * 同时,从逻辑上讲,如果开启了 mobx,那么必须要有 reducer 文件\n */\n throw Error(`开启 mobx 后,reducer 文件必须存在 ${absFilePath}`);\n }\n chunkCode.push(`export function reducer(){ return {} }`);\n }\n\n const viewPath = resolver.getViewFile(absCurrentDir);\n chunkCode.push(`export { default as view } from '${viewPath}';`);\n\n if (meJSON.theme && !options.theme?.hash) {\n throw Error(`开启页面级主题之前,请优先开启全局主题 ${absFilePath}`);\n }\n\n if (!meJSON.mobx) {\n try {\n const sagaPath = resolver.getSagaFile(absCurrentDir);\n chunkCode.push(`export { default as saga } from '${sagaPath}';`);\n } catch (e) {\n // feat: saga 也可以不存在, 方便结合reactive 和 ak,默认创建一个reducers\n chunkCode.push(`export function* saga(){ return {} }`);\n }\n }\n\n if (meJSON.errorComponent) {\n const errorCompPath = resolver.getErrorComFile(absCurrentDir, meJSON.errorComponent);\n chunkCode.push(`export { default as ErrorComponent } from '${errorCompPath}';`);\n }\n\n if (options.theme?.hash) {\n const themePath = pathService.getThemeJSCacheFileAbs(options.theme?.hash);\n chunkCode.push(`export * from '${themePath}';`);\n }\n\n if (meJSON.theme) {\n fileService.writeThemeFile(meJSON.theme, 'toGlobalTheme');\n const themePath = pathService.getThemeJSCacheFileAbs(meJSON.theme);\n chunkCode.push(`export * from '${themePath}';`);\n }\n\n const meJSONPath = pathService.getMeJSONCacheFileAbs(filepath);\n\n fileService.writeMeJSONFile(meJSONPath, chunkCode);\n\n const isExternal = options.externals?.some?.((x) => x === path.dirname(filepath)) ?? false;\n\n // 处理是否存在多store的场景\n const hasChildStore = globby.sync(`**/*.${options.reducerName}.{t,j}s`, { cwd: absCurrentDir }).length > 0;\n if (hasChildStore && (meJSON.sync || isExternal)) {\n throw Error(`如果开启了Sync模式或当前页面存在于LCD的external中,那么则不支持多Store功能,${absCurrentDir}`);\n }\n\n /** reducers.js */\n reducersGenerator.set(filepath, {\n meJSON,\n isExternal,\n namespace: currentDir,\n meJSONPath: meJSONPath,\n });\n\n /** saga.js */\n sagasGenerator.set(currentDir, {\n meJSON,\n isExternal,\n namespace: currentDir,\n meJSONPath: meJSONPath,\n });\n\n /** router */\n routersGenerator.set(currentDir, {\n meJSON,\n isExternal,\n page: currentDir,\n path: currentDir,\n exact: false,\n meJSONPath: meJSONPath,\n });\n\n /** 处理 /list 的路由 */\n if (new RegExp(`\\/${options.index}$`).test(absCurrentDir)) {\n const _key = absCurrentDir.replace(new RegExp(`\\/${options.index}$`), '');\n routersGenerator.set(_key, {\n meJSON,\n isExternal,\n page: absCurrentDir,\n path: _key,\n exact: true,\n meJSONPath: meJSONPath,\n });\n }\n }\n\n if (options.theme?.hash) {\n fileService.writeThemeFile(options.theme.hash, 'toGlobalTheme');\n }\n\n const list = globby.sync('**/me.json', {\n cwd: pathService.getPageRootAbs(),\n });\n\n if (list.length === 0) {\n console.warn('没有找到me.json文件');\n }\n\n /**\n * glob 的排序 是包含文件名 me.json 的完整路径,存在问题\n * 比如 会将 /xx/ss/me.json 排到 /xx/ss/zz/me.json 前面\n * glob 的 noSort option 会将 文件夹排到前面, 因此需要手动排序, 并且统一成 globby, 速度更快\n */\n const sortedList = list\n .map((filepath) => filepath?.replace(/me.json$/, ''))\n .sort((a, b) => {\n if (a?.startsWith(b)) return -1;\n return a.localeCompare(b, 'en');\n })\n .map((dir) => `${dir}me.json`);\n\n sortedList.forEach((filepath) => {\n resolveFile(filepath);\n });\n\n writeCode();\n\n if (isDev(compiler)) {\n const watcher = chokidar.watch('**/me.json', {\n cwd: pathService.getPageRootAbs(),\n ignoreInitial: true,\n });\n const fn = async (filepath) => {\n await resolveFile(filepath);\n writeCode();\n };\n watcher.on('add', fn);\n watcher.on('addDir', fn);\n watcher.on('change', fn);\n watcher.on('unlink', fn);\n watcher.on('unlinkDir', fn);\n watcher.on('error', fn);\n }\n });\n\n // lcd 中包含一些语法转换处理\n compiler.hooks.environment.tap('lcd-preset', () => {\n compiler.options.module.rules.push({\n test: /\\.(js|ts)x?$/,\n exclude: /node_modules/,\n use: [\n {\n loader: require.resolve('babel-loader'),\n options: {\n presets: [[require.resolve('./babel/index'), this.options]],\n babelrc: false,\n // 需要支持语法解析, 但不需要做转换\n parserOpts: {\n plugins: [\n 'jsx',\n 'typescript',\n 'asyncDoExpressions',\n 'decimal',\n 'decorators-legacy',\n 'decoratorAutoAccessors',\n 'destructuringPrivate',\n 'doExpressions',\n 'exportDefaultFrom',\n 'functionBind',\n 'functionSent',\n 'importAssertions',\n 'moduleBlocks',\n 'partialApplication',\n 'throwExpressions',\n ],\n },\n },\n },\n ],\n });\n });\n }\n\n mergeOptions(compiler: Compiler) {\n const defaultOptions = {\n context: compiler.context,\n enablePreFetch: false,\n index: 'list',\n externals: [],\n pageDir: 'component',\n reducerName: 'reducer',\n disableBuiltInRoute: false,\n };\n this.options = deepmerge(defaultOptions, this.options);\n }\n}\n"],"mappings":"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"}
@@ -64,6 +64,12 @@ export interface Options {
64
64
  export interface MeJSON {
65
65
  theme?: string;
66
66
  sync?: boolean;
67
+ /**
68
+ * mobx 模式
69
+ * 未开启时, reducer 文件导出为纯函数,用来处理状态修改。 saga 文件用来处理副作用逻辑。
70
+ * 开启后,reducer 文件导出为对象,包含 state 以及方法, 普通函数作为reducer修改状态, generator 函数处理副作用逻辑。
71
+ * @default false
72
+ */
67
73
  mobx?: boolean;
68
74
  keepAlive?: boolean;
69
75
  retain?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../types.ts"],"sourcesContent":["export interface Options {\n /**\n * 组件上下文, 默认取 compiler.context\n * @default compiler.context\n */\n context?: string;\n /**\n * 是否禁用内置路由\n * 默认会将 react-router-dom 转换到 rrc-loader-helper/router\n * 如果你是新项目,建议将该配置配置为true,因为内置路由针对react-router做了大量的改动,可能会引起一些无法预测的故障\n * @default false\n */\n disableBuiltInRoute?: boolean;\n /**\n * 是否开启 webpack prefetch预加载\n * @default false\n */\n enablePreFetch?: boolean;\n /**\n * 指定页面路径 不进行注册路由\n * @default []\n */\n externals?: string[];\n /**\n * 页面目录\n * @default component\n */\n pageDir: string;\n /**\n * shineout 主题\n */\n theme?: {\n hash: string;\n };\n /**\n * reducer 文件名称\n * @default reducers\n */\n reducerName: string;\n /**\n * loading 组件路径\n */\n loading?: string;\n /**\n * 一个神奇的属性,用于处理 /xxx/order/list 这种路由过长的问题\n * 也可以用来作为父路由的默认路由目录\n * 会生成一个新路由 /xxx/order,实际目录指向为 /xxx/order/list\n * @default list\n */\n index?: string;\n /**\n * 渲染出错时的组件地址\n */\n errorComponent?: string;\n\n /**\n * 是否允许页面内生成自定义路由\n * 例如在 component/order/detail/me.json 中 配置 route: '/:id',此时会生成动态路由 /order/detail/:id\n * 非常不推荐使用的一个属性,因为此功能受 me.json 中 exact 属性影响, 仅当 exact: true 时候,才不会拼接路由\n * 当开启 dangerousRoute 后, 不再受 exact 影响, 都会生成 拼接路由 /order/detail/:id\n * @default false\n */\n dangerousRoute?: boolean;\n}\n\nexport interface MeJSON {\n theme?: string;\n sync?: boolean;\n mobx?: boolean;\n keepAlive?: boolean;\n retain?: boolean;\n title?: string;\n linkExtendable?: boolean;\n injectStore?: boolean | string;\n route?: string;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../types.ts"],"sourcesContent":["export interface Options {\n /**\n * 组件上下文, 默认取 compiler.context\n * @default compiler.context\n */\n context?: string;\n /**\n * 是否禁用内置路由\n * 默认会将 react-router-dom 转换到 rrc-loader-helper/router\n * 如果你是新项目,建议将该配置配置为true,因为内置路由针对react-router做了大量的改动,可能会引起一些无法预测的故障\n * @default false\n */\n disableBuiltInRoute?: boolean;\n /**\n * 是否开启 webpack prefetch预加载\n * @default false\n */\n enablePreFetch?: boolean;\n /**\n * 指定页面路径 不进行注册路由\n * @default []\n */\n externals?: string[];\n /**\n * 页面目录\n * @default component\n */\n pageDir: string;\n /**\n * shineout 主题\n */\n theme?: {\n hash: string;\n };\n /**\n * reducer 文件名称\n * @default reducers\n */\n reducerName: string;\n /**\n * loading 组件路径\n */\n loading?: string;\n /**\n * 一个神奇的属性,用于处理 /xxx/order/list 这种路由过长的问题\n * 也可以用来作为父路由的默认路由目录\n * 会生成一个新路由 /xxx/order,实际目录指向为 /xxx/order/list\n * @default list\n */\n index?: string;\n /**\n * 渲染出错时的组件地址\n */\n errorComponent?: string;\n\n /**\n * 是否允许页面内生成自定义路由\n * 例如在 component/order/detail/me.json 中 配置 route: '/:id',此时会生成动态路由 /order/detail/:id\n * 非常不推荐使用的一个属性,因为此功能受 me.json 中 exact 属性影响, 仅当 exact: true 时候,才不会拼接路由\n * 当开启 dangerousRoute 后, 不再受 exact 影响, 都会生成 拼接路由 /order/detail/:id\n * @default false\n */\n dangerousRoute?: boolean;\n}\n\nexport interface MeJSON {\n theme?: string;\n sync?: boolean;\n /**\n * mobx 模式\n * 未开启时, reducer 文件导出为纯函数,用来处理状态修改。 saga 文件用来处理副作用逻辑。\n * 开启后,reducer 文件导出为对象,包含 state 以及方法, 普通函数作为reducer修改状态, generator 函数处理副作用逻辑。\n * @default false\n */\n mobx?: boolean;\n keepAlive?: boolean;\n retain?: boolean;\n title?: string;\n linkExtendable?: boolean;\n injectStore?: boolean | string;\n route?: string;\n}\n"],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lcd-router-webpack-plugin",
3
- "version": "9.0.0-alpha.10",
3
+ "version": "9.0.0-alpha.11",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "files": [