版博士V2.0程序
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 

114 righe
3.2 KiB

  1. "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/index.ts
  2. var _unplugin = require('unplugin');
  3. var _common = require('@vue-macros/common');
  4. // src/core/index.ts
  5. var MAGIC_COMMENT = "hoist-static";
  6. function transformHoistStatic(code, id) {
  7. function moveToScript(decl, prefix = "") {
  8. if (scriptOffset === void 0)
  9. scriptOffset = normalScript.start();
  10. const text = `
  11. ${prefix}${s.sliceNode(decl, { offset: setupOffset })}`;
  12. s.appendRight(scriptOffset, text);
  13. s.removeNode(decl, { offset: setupOffset });
  14. }
  15. const sfc = _common.parseSFC.call(void 0, code, id);
  16. const { scriptSetup, getSetupAst } = sfc;
  17. if (!scriptSetup)
  18. return;
  19. const setupOffset = scriptSetup.loc.start.offset;
  20. const setupOffsetEnd = scriptSetup.loc.end.offset;
  21. const s = new (0, _common.MagicString)(code);
  22. const program = getSetupAst();
  23. let normalScript = _common.addNormalScript.call(void 0, sfc, s);
  24. let scriptOffset;
  25. for (const stmt of program.body) {
  26. if (stmt.type === "VariableDeclaration" && stmt.kind === "const") {
  27. const decls = stmt.declarations;
  28. let count = 0;
  29. for (const [i, decl] of decls.entries()) {
  30. if (!decl.init || !_common.isStaticExpression.call(void 0, decl.init, {
  31. unary: true,
  32. magicComment: MAGIC_COMMENT
  33. }))
  34. continue;
  35. count++;
  36. moveToScript(decl, "const ");
  37. if (decls.length > 1) {
  38. const isLast = i === decls.length - 1;
  39. const start = isLast ? decls[i - 1].end : decl.end;
  40. const end = isLast ? decl.start : decls[i + 1].start;
  41. s.remove(setupOffset + start, setupOffset + end);
  42. }
  43. }
  44. if (count === decls.length) {
  45. s.removeNode(stmt, { offset: setupOffset });
  46. }
  47. } else if (stmt.type === "TSEnumDeclaration") {
  48. const isAllConstant = stmt.members.every(
  49. (member) => !member.initializer || _common.isStaticExpression.call(void 0, member.initializer, {
  50. unary: true,
  51. magicComment: MAGIC_COMMENT
  52. })
  53. );
  54. if (!isAllConstant)
  55. continue;
  56. moveToScript(stmt);
  57. }
  58. }
  59. const restSetup = s.slice(setupOffset, setupOffsetEnd);
  60. if (restSetup.trim().length === 0) {
  61. s.appendLeft(setupOffsetEnd, "/* hoist static placeholder */");
  62. }
  63. if (scriptOffset !== void 0)
  64. normalScript.end();
  65. return _common.getTransformResult.call(void 0, s, id);
  66. }
  67. // src/index.ts
  68. function resolveOption(options, framework) {
  69. const version = options.version || _common.detectVueVersion.call(void 0, );
  70. return {
  71. include: [_common.REGEX_VUE_SFC, _common.REGEX_SETUP_SFC].concat(
  72. version === 2 && framework === "webpack" ? _common.REGEX_VUE_SUB : []
  73. ),
  74. ...options,
  75. version
  76. };
  77. }
  78. var name = "unplugin-vue-hoist-static";
  79. var src_default = _unplugin.createUnplugin.call(void 0,
  80. (userOptions = {}, { framework }) => {
  81. const options = resolveOption(userOptions, framework);
  82. const filter = _common.createFilter.call(void 0, options);
  83. return {
  84. name,
  85. enforce: "pre",
  86. transformInclude(id) {
  87. return filter(id);
  88. },
  89. transform(code, id) {
  90. return transformHoistStatic(code, id);
  91. }
  92. };
  93. }
  94. );
  95. exports.src_default = src_default;