版博士V2.0程序
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

chunk-QAYSRE3T.mjs 1.3 KiB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // src/core/index.ts
  2. import { MagicString, getTransformResult } from "@vue-macros/common";
  3. import { parse } from "@vue/compiler-dom";
  4. function transformSetupBlock(code, id, lang) {
  5. const s = new MagicString(code);
  6. const node = parse(code, {
  7. // there are no components at SFC parsing level
  8. isNativeTag: () => true,
  9. // preserve all whitespaces
  10. isPreTag: () => true,
  11. getTextMode: ({ tag, props }, parent) => {
  12. if (!parent && tag !== "template" || // <template lang="xxx"> should also be treated as raw text
  13. tag === "template" && props.some(
  14. (p) => p.type === 6 && p.name === "lang" && p.value && p.value.content && p.value.content !== "html"
  15. )) {
  16. return 2;
  17. } else {
  18. return 0;
  19. }
  20. }
  21. });
  22. for (const child of node.children) {
  23. if (child.type === 1 && child.tag === "setup") {
  24. const hasLang = child.props.some((p) => p.name === "lang");
  25. let codegen = "script setup";
  26. if (!hasLang && lang) {
  27. codegen += ` lang="${lang}"`;
  28. }
  29. s.overwrite(
  30. child.loc.start.offset + 1,
  31. child.loc.start.offset + 6,
  32. codegen
  33. );
  34. s.overwrite(
  35. child.loc.end.offset - 6,
  36. child.loc.end.offset - 1,
  37. "script"
  38. );
  39. }
  40. }
  41. return getTransformResult(s, id);
  42. }
  43. export {
  44. transformSetupBlock
  45. };