版博士V2.0程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

chunk-OZQFJBTF.js 5.6 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/core/constants.ts
  2. var _common = require('@vue-macros/common');
  3. var PROPS_VARIABLE_NAME = `${_common.HELPER_PREFIX}props`;
  4. var EMIT_VARIABLE_NAME = `${_common.HELPER_PREFIX}emit`;
  5. // src/core/define-emit.ts
  6. function mountEmits(emits) {
  7. const isAllWithoutOptions = emits.every(({ validator }) => !validator);
  8. if (isAllWithoutOptions) {
  9. return `[${emits.map(({ name }) => JSON.stringify(name)).join(", ")}]`;
  10. }
  11. return `{
  12. ${emits.map(
  13. ({ name, validator }) => `${JSON.stringify(name)}: ${validator || `null`}`
  14. ).join(",\n ")}
  15. }`;
  16. }
  17. function transformDefineEmit({ setupAst, offset, s }) {
  18. const emits = [];
  19. _common.walkAST.call(void 0, setupAst, {
  20. enter(node, parent) {
  21. if (_common.isCallOf.call(void 0, node, _common.DEFINE_EMIT)) {
  22. const [name, validator] = node.arguments;
  23. let emitName;
  24. if (!name) {
  25. if (parent.type !== "VariableDeclarator" || parent.id.type !== "Identifier") {
  26. throw new Error(
  27. `A variable must be used to receive the return value of ${_common.DEFINE_EMIT}.`
  28. );
  29. }
  30. emitName = parent.id.name;
  31. } else if (name.type !== "StringLiteral") {
  32. throw new Error(
  33. `The first argument of ${_common.DEFINE_EMIT} must be a string literal.`
  34. );
  35. } else {
  36. emitName = name.value;
  37. }
  38. emits.push({
  39. name: emitName,
  40. validator: validator ? s.sliceNode(validator, { offset }) : void 0
  41. });
  42. s.overwriteNode(
  43. node,
  44. `(...args) => ${EMIT_VARIABLE_NAME}(${JSON.stringify(
  45. emitName
  46. )}, ...args)`,
  47. { offset }
  48. );
  49. }
  50. }
  51. });
  52. if (emits.length > 0) {
  53. s.prependLeft(
  54. offset,
  55. `
  56. const ${EMIT_VARIABLE_NAME} = defineEmits(${mountEmits(emits)})
  57. `
  58. );
  59. }
  60. }
  61. // src/core/define-prop.ts
  62. var _api = require('@vue-macros/api');
  63. async function mountProps({ id, scriptSetup, setupAst, isProduction }, props) {
  64. const isAllWithoutOptions = props.every(
  65. ({ definition, typeParameter }) => !definition && !typeParameter
  66. );
  67. if (isAllWithoutOptions) {
  68. return `[${props.map(({ name }) => JSON.stringify(name)).join(", ")}]`;
  69. }
  70. let propsString = "{\n";
  71. for (const { name, definition, typeParameter } of props) {
  72. propsString += ` ${JSON.stringify(name)}: `;
  73. let propDef;
  74. if (typeParameter && !isProduction) {
  75. const resolved = await _api.resolveTSReferencedType.call(void 0, {
  76. scope: {
  77. filePath: id,
  78. content: scriptSetup.content,
  79. ast: setupAst.body
  80. },
  81. type: typeParameter
  82. });
  83. if (resolved)
  84. propDef = `{ type: ${_api.toRuntimeTypeString.call(void 0,
  85. await _api.inferRuntimeType.call(void 0, resolved)
  86. )} }`;
  87. }
  88. if (definition) {
  89. if (propDef) {
  90. propDef = `{ ...${propDef}, ...${definition} }`;
  91. } else {
  92. propDef = definition;
  93. }
  94. }
  95. propsString += `${propDef || "null"},
  96. `;
  97. }
  98. propsString += "}";
  99. return propsString;
  100. }
  101. async function transformDefineProp(options) {
  102. const { setupAst, offset, s } = options;
  103. const props = [];
  104. _common.walkAST.call(void 0, setupAst, {
  105. enter(node, parent) {
  106. var _a;
  107. if (_common.isCallOf.call(void 0, node, _common.DEFINE_PROP)) {
  108. const [name, definition] = node.arguments;
  109. let propName;
  110. if (!name) {
  111. if (parent.type !== "VariableDeclarator" || parent.id.type !== "Identifier") {
  112. throw new Error(
  113. `A variable must be used to receive the return value of ${_common.DEFINE_PROP}.`
  114. );
  115. }
  116. propName = parent.id.name;
  117. } else if (name.type !== "StringLiteral") {
  118. throw new Error(
  119. `The first argument of ${_common.DEFINE_PROP} must be a string literal.`
  120. );
  121. } else {
  122. propName = name.value;
  123. }
  124. props.push({
  125. name: propName,
  126. definition: definition ? s.sliceNode(definition, { offset }) : void 0,
  127. typeParameter: (_a = node.typeParameters) == null ? void 0 : _a.params[0]
  128. });
  129. s.overwriteNode(
  130. node,
  131. `${_common.HELPER_PREFIX}computed(() => ${PROPS_VARIABLE_NAME}[${JSON.stringify(
  132. propName
  133. )}])`,
  134. { offset }
  135. );
  136. }
  137. }
  138. });
  139. if (props.length > 0) {
  140. _common.importHelperFn.call(void 0, s, offset, "computed", "vue");
  141. s.prependLeft(
  142. offset,
  143. `
  144. const ${PROPS_VARIABLE_NAME} = defineProps(${await mountProps(
  145. options,
  146. props
  147. )})
  148. `
  149. );
  150. }
  151. }
  152. // src/core/index.ts
  153. async function transformDefineSingle(code, id, isProduction) {
  154. const { scriptSetup, getSetupAst } = _common.parseSFC.call(void 0, code, id);
  155. if (!scriptSetup)
  156. return;
  157. const offset = scriptSetup.loc.start.offset;
  158. const s = new (0, _common.MagicString)(code);
  159. const setupAst = getSetupAst();
  160. const options = {
  161. id,
  162. s,
  163. offset,
  164. scriptSetup,
  165. setupAst,
  166. isProduction
  167. };
  168. if (code.includes(_common.DEFINE_PROP)) {
  169. await transformDefineProp(options);
  170. }
  171. if (code.includes(_common.DEFINE_EMIT)) {
  172. await transformDefineEmit(options);
  173. }
  174. return _common.getTransformResult.call(void 0, s, id);
  175. }
  176. exports.PROPS_VARIABLE_NAME = PROPS_VARIABLE_NAME; exports.EMIT_VARIABLE_NAME = EMIT_VARIABLE_NAME; exports.transformDefineEmit = transformDefineEmit; exports.transformDefineProp = transformDefineProp; exports.transformDefineSingle = transformDefineSingle;