版博士V2.0程序
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

804 строки
22 KiB

  1. import {
  2. RollupResolve
  3. } from "./chunk-E4LU3OPM.mjs";
  4. import {
  5. exportsSymbol,
  6. getTSFile,
  7. isTSDeclaration,
  8. isTSExports,
  9. mergeTSProperties,
  10. resolveTSEntityName,
  11. resolveTSExports,
  12. resolveTSFileId,
  13. resolveTSFileIdNode,
  14. resolveTSProperties,
  15. resolveTSReferencedType,
  16. resolveTSScope,
  17. resolveTypeElements,
  18. setResolveTSFileIdImpl,
  19. tsFileCache,
  20. tsFileExportsCache
  21. } from "./chunk-5FIR3URH.mjs";
  22. import {
  23. keyToString
  24. } from "./chunk-VQQLEFAO.mjs";
  25. // src/index.ts
  26. import { MagicString } from "@vue-macros/common";
  27. // src/vue/analyze.ts
  28. import {
  29. DEFINE_EMITS,
  30. DEFINE_PROPS,
  31. WITH_DEFAULTS,
  32. babelParse as babelParse3,
  33. isCallOf
  34. } from "@vue-macros/common";
  35. // src/vue/props.ts
  36. import {
  37. babelParse,
  38. isStaticObjectKey,
  39. resolveObjectExpression
  40. } from "@vue-macros/common";
  41. // src/vue/types.ts
  42. var DefinitionKind = /* @__PURE__ */ ((DefinitionKind2) => {
  43. DefinitionKind2["Reference"] = "Reference";
  44. DefinitionKind2["Object"] = "Object";
  45. DefinitionKind2["TS"] = "TS";
  46. return DefinitionKind2;
  47. })(DefinitionKind || {});
  48. // src/vue/utils.ts
  49. async function inferRuntimeType(node) {
  50. if (isTSExports(node))
  51. return ["Object"];
  52. switch (node.type.type) {
  53. case "TSStringKeyword":
  54. return ["String"];
  55. case "TSNumberKeyword":
  56. return ["Number"];
  57. case "TSBooleanKeyword":
  58. return ["Boolean"];
  59. case "TSObjectKeyword":
  60. return ["Object"];
  61. case "TSTypeLiteral": {
  62. const types = /* @__PURE__ */ new Set();
  63. for (const m of node.type.members) {
  64. switch (m.type) {
  65. case "TSCallSignatureDeclaration":
  66. case "TSConstructSignatureDeclaration":
  67. types.add("Function");
  68. break;
  69. default:
  70. types.add("Object");
  71. }
  72. }
  73. return Array.from(types);
  74. }
  75. case "TSFunctionType":
  76. return ["Function"];
  77. case "TSArrayType":
  78. case "TSTupleType":
  79. return ["Array"];
  80. case "TSLiteralType":
  81. switch (node.type.literal.type) {
  82. case "StringLiteral":
  83. return ["String"];
  84. case "BooleanLiteral":
  85. return ["Boolean"];
  86. case "NumericLiteral":
  87. case "BigIntLiteral":
  88. return ["Number"];
  89. default:
  90. return [`null`];
  91. }
  92. case "TSTypeReference":
  93. if (node.type.typeName.type === "Identifier") {
  94. switch (node.type.typeName.name) {
  95. case "Array":
  96. case "Function":
  97. case "Object":
  98. case "Set":
  99. case "Map":
  100. case "WeakSet":
  101. case "WeakMap":
  102. case "Date":
  103. case "Promise":
  104. return [node.type.typeName.name];
  105. case "Record":
  106. case "Partial":
  107. case "Readonly":
  108. case "Pick":
  109. case "Omit":
  110. case "Required":
  111. case "InstanceType":
  112. return ["Object"];
  113. case "Extract":
  114. if (node.type.typeParameters && node.type.typeParameters.params[1]) {
  115. const t = await resolveTSReferencedType({
  116. scope: node.scope,
  117. type: node.type.typeParameters.params[1]
  118. });
  119. if (t)
  120. return inferRuntimeType(t);
  121. }
  122. return ["null"];
  123. case "Exclude":
  124. if (node.type.typeParameters && node.type.typeParameters.params[0]) {
  125. const t = await resolveTSReferencedType({
  126. scope: node.scope,
  127. type: node.type.typeParameters.params[0]
  128. });
  129. if (t)
  130. return inferRuntimeType(t);
  131. }
  132. return ["null"];
  133. }
  134. }
  135. return [`null`];
  136. case "TSUnionType": {
  137. const types = (await Promise.all(
  138. node.type.types.map(async (subType) => {
  139. const resolved = await resolveTSReferencedType({
  140. scope: node.scope,
  141. type: subType
  142. });
  143. return resolved && !isTSExports(resolved) ? inferRuntimeType(resolved) : void 0;
  144. })
  145. )).flatMap((t) => t ? t : ["null"]);
  146. return [...new Set(types)];
  147. }
  148. case "TSIntersectionType":
  149. return ["Object"];
  150. case "TSSymbolKeyword":
  151. return ["Symbol"];
  152. case "TSInterfaceDeclaration":
  153. return ["Object"];
  154. default:
  155. return [`null`];
  156. }
  157. }
  158. function attachNodeLoc(node, newNode) {
  159. newNode.start = node.start;
  160. newNode.end = node.end;
  161. }
  162. function toRuntimeTypeString(types) {
  163. return types.length > 1 ? `[${types.join(", ")}]` : types[0];
  164. }
  165. // src/vue/props.ts
  166. async function handleTSPropsDefinition({
  167. s,
  168. file,
  169. offset,
  170. definePropsAst,
  171. typeDeclRaw,
  172. withDefaultsAst,
  173. defaultsDeclRaw,
  174. statement,
  175. declId
  176. }) {
  177. const { definitions, definitionsAst } = await resolveDefinitions({
  178. type: typeDeclRaw,
  179. scope: file
  180. });
  181. const { defaults, defaultsAst } = resolveDefaults(defaultsDeclRaw);
  182. const addProp = (name, value, optional) => {
  183. const { key, signature, valueAst, signatureAst } = buildNewProp(
  184. name,
  185. value,
  186. optional
  187. );
  188. if (definitions[key])
  189. return false;
  190. if (definitionsAst.scope === file) {
  191. if (definitionsAst.ast.type === "TSIntersectionType") {
  192. s.appendLeft(definitionsAst.ast.end + offset, ` & { ${signature} }`);
  193. } else {
  194. s.appendLeft(definitionsAst.ast.end + offset - 1, ` ${signature}
  195. `);
  196. }
  197. }
  198. definitions[key] = {
  199. type: "property",
  200. value: {
  201. code: value,
  202. ast: valueAst,
  203. scope: void 0
  204. },
  205. optional: !!optional,
  206. signature: {
  207. code: signature,
  208. ast: signatureAst,
  209. scope: void 0
  210. },
  211. addByAPI: true
  212. };
  213. return true;
  214. };
  215. const setProp = (name, value, optional) => {
  216. const { key, signature, signatureAst, valueAst } = buildNewProp(
  217. name,
  218. value,
  219. optional
  220. );
  221. const def = definitions[key];
  222. if (!definitions[key])
  223. return false;
  224. switch (def.type) {
  225. case "method": {
  226. attachNodeLoc(def.methods[0].ast, signatureAst);
  227. if (def.methods[0].scope === file)
  228. s.overwriteNode(def.methods[0].ast, signature, { offset });
  229. def.methods.slice(1).forEach((method) => {
  230. if (method.scope === file) {
  231. s.removeNode(method.ast, { offset });
  232. }
  233. });
  234. break;
  235. }
  236. case "property": {
  237. attachNodeLoc(def.signature.ast, signatureAst);
  238. if (def.signature.scope === file && !def.addByAPI) {
  239. s.overwriteNode(def.signature.ast, signature, { offset });
  240. }
  241. break;
  242. }
  243. }
  244. definitions[key] = {
  245. type: "property",
  246. value: {
  247. code: value,
  248. ast: valueAst,
  249. scope: void 0
  250. },
  251. optional: !!optional,
  252. signature: {
  253. code: signature,
  254. ast: signatureAst,
  255. scope: void 0
  256. },
  257. addByAPI: def.type === "property" && def.addByAPI
  258. };
  259. return true;
  260. };
  261. const removeProp = (name) => {
  262. const key = keyToString(name);
  263. if (!definitions[key])
  264. return false;
  265. const def = definitions[key];
  266. switch (def.type) {
  267. case "property": {
  268. if (def.signature.scope === file && !def.addByAPI) {
  269. s.removeNode(def.signature.ast, { offset });
  270. }
  271. break;
  272. }
  273. case "method":
  274. def.methods.forEach((method) => {
  275. if (method.scope === file)
  276. s.removeNode(method.ast, { offset });
  277. });
  278. break;
  279. }
  280. delete definitions[key];
  281. return true;
  282. };
  283. const getRuntimeDefinitions = async () => {
  284. const props = {};
  285. for (const [propName, def] of Object.entries(definitions)) {
  286. let prop;
  287. if (def.type === "method") {
  288. prop = {
  289. type: ["Function"],
  290. required: !def.optional
  291. };
  292. } else {
  293. const resolvedType = def.value;
  294. if (resolvedType) {
  295. prop = {
  296. type: await inferRuntimeType({
  297. scope: resolvedType.scope || file,
  298. type: resolvedType.ast
  299. }),
  300. required: !def.optional
  301. };
  302. } else {
  303. prop = { type: ["null"], required: false };
  304. }
  305. }
  306. const defaultValue = defaults == null ? void 0 : defaults[propName];
  307. if (defaultValue) {
  308. prop.default = (key = "default") => {
  309. switch (defaultValue.type) {
  310. case "ObjectMethod":
  311. return `${defaultValue.kind !== "method" ? `${defaultValue.kind} ` : ""}${defaultValue.async ? `async ` : ""}${key}(${s.sliceNode(
  312. defaultValue.params,
  313. { offset }
  314. )}) ${s.sliceNode(defaultValue.body, { offset })}`;
  315. case "ObjectProperty":
  316. return `${key}: ${s.sliceNode(defaultValue.value, { offset })}`;
  317. }
  318. };
  319. }
  320. props[propName] = prop;
  321. }
  322. return props;
  323. };
  324. return {
  325. kind: "TS" /* TS */,
  326. definitions,
  327. defaults,
  328. declId,
  329. addProp,
  330. setProp,
  331. removeProp,
  332. getRuntimeDefinitions,
  333. // AST
  334. definitionsAst,
  335. defaultsAst,
  336. statementAst: statement,
  337. definePropsAst,
  338. withDefaultsAst
  339. };
  340. async function resolveDefinitions(typeDeclRaw2) {
  341. const resolved = await resolveTSReferencedType(typeDeclRaw2);
  342. if (!resolved || isTSExports(resolved))
  343. throw new SyntaxError(`Cannot resolve TS definition.`);
  344. const { type: definitionsAst2, scope } = resolved;
  345. if (definitionsAst2.type === "TSIntersectionType") {
  346. const results = {};
  347. for (const type of definitionsAst2.types) {
  348. const defMap = await resolveDefinitions({ type, scope }).then(
  349. ({ definitions: definitions3 }) => definitions3
  350. );
  351. for (const [key, def] of Object.entries(defMap)) {
  352. const result = results[key];
  353. if (!result) {
  354. results[key] = def;
  355. continue;
  356. }
  357. if (result.type === "method" && def.type === "method") {
  358. result.methods.push(...def.methods);
  359. } else {
  360. results[key] = def;
  361. }
  362. }
  363. }
  364. return {
  365. definitions: results,
  366. definitionsAst: buildDefinition({ scope, type: definitionsAst2 })
  367. };
  368. } else if (definitionsAst2.type === "TSUnionType") {
  369. const unionDefs = [];
  370. const keys = /* @__PURE__ */ new Set();
  371. for (const type of definitionsAst2.types) {
  372. const defs = await resolveDefinitions({ type, scope }).then(
  373. ({ definitions: definitions3 }) => definitions3
  374. );
  375. Object.keys(defs).map((key) => keys.add(key));
  376. unionDefs.push(defs);
  377. }
  378. const results = {};
  379. for (const key of keys) {
  380. let optional = false;
  381. let result;
  382. for (const defMap of unionDefs) {
  383. const def = defMap[key];
  384. if (!def) {
  385. optional = true;
  386. continue;
  387. }
  388. optional || (optional = def.optional);
  389. if (!result) {
  390. result = def;
  391. continue;
  392. }
  393. if (result.type === "method" && def.type === "method") {
  394. result.methods.push(...def.methods);
  395. } else if (result.type === "property" && def.type === "property") {
  396. if (!def.value) {
  397. continue;
  398. } else if (!result.value) {
  399. result = def;
  400. continue;
  401. }
  402. if (def.value.ast.type === "TSImportType" || def.value.ast.type === "TSDeclareFunction" || def.value.ast.type === "TSEnumDeclaration" || def.value.ast.type === "TSInterfaceDeclaration" || def.value.ast.type === "TSModuleDeclaration" || result.value.ast.type === "TSImportType" || result.value.ast.type === "TSDeclareFunction" || result.value.ast.type === "TSEnumDeclaration" || result.value.ast.type === "TSInterfaceDeclaration" || result.value.ast.type === "TSModuleDeclaration") {
  403. continue;
  404. }
  405. if (result.value.ast.type === "TSUnionType") {
  406. result.value.ast.types.push(def.value.ast);
  407. } else {
  408. result = {
  409. type: "property",
  410. value: buildDefinition({
  411. scope,
  412. type: {
  413. type: "TSUnionType",
  414. types: [result.value.ast, def.value.ast]
  415. }
  416. }),
  417. signature: null,
  418. optional,
  419. addByAPI: false
  420. };
  421. }
  422. } else {
  423. throw new SyntaxError(
  424. `Cannot resolve TS definition. Union type contains different types of results.`
  425. );
  426. }
  427. }
  428. if (result) {
  429. results[key] = { ...result, optional };
  430. }
  431. }
  432. return {
  433. definitions: results,
  434. definitionsAst: buildDefinition({ scope, type: definitionsAst2 })
  435. };
  436. } else if (definitionsAst2.type !== "TSInterfaceDeclaration" && definitionsAst2.type !== "TSTypeLiteral" && definitionsAst2.type !== "TSMappedType")
  437. throw new SyntaxError(
  438. `Cannot resolve TS definition: ${definitionsAst2.type}.`
  439. );
  440. const properties = await resolveTSProperties({
  441. scope,
  442. type: definitionsAst2
  443. });
  444. const definitions2 = {};
  445. for (const [key, sign] of Object.entries(properties.methods)) {
  446. const methods = sign.map((sign2) => buildDefinition(sign2));
  447. definitions2[key] = {
  448. type: "method",
  449. methods,
  450. optional: sign.some((sign2) => !!sign2.type.optional)
  451. };
  452. }
  453. for (const [key, value] of Object.entries(properties.properties)) {
  454. const referenced = value.value ? await resolveTSReferencedType(value.value) : void 0;
  455. definitions2[key] = {
  456. type: "property",
  457. addByAPI: false,
  458. value: referenced && !isTSExports(referenced) ? buildDefinition(referenced) : void 0,
  459. optional: value.optional,
  460. signature: buildDefinition(value.signature)
  461. };
  462. }
  463. return {
  464. definitions: definitions2,
  465. definitionsAst: buildDefinition({ scope, type: definitionsAst2 })
  466. };
  467. }
  468. function resolveDefaults(defaultsAst2) {
  469. if (!defaultsAst2)
  470. return {};
  471. const isStatic = defaultsAst2.type === "ObjectExpression" && isStaticObjectKey(defaultsAst2);
  472. if (!isStatic)
  473. return { defaultsAst: defaultsAst2 };
  474. const defaults2 = resolveObjectExpression(defaultsAst2);
  475. if (!defaults2)
  476. return { defaultsAst: defaultsAst2 };
  477. return { defaults: defaults2, defaultsAst: defaultsAst2 };
  478. }
  479. function buildNewProp(name, value, optional) {
  480. const key = keyToString(name);
  481. const signature = `${name}${optional ? "?" : ""}: ${value}`;
  482. const valueAst = babelParse(`type T = (${value})`, "ts").body[0].typeAnnotation.typeAnnotation;
  483. const signatureAst = babelParse(`interface T {${signature}}`, "ts").body[0].body.body[0];
  484. return { key, signature, signatureAst, valueAst };
  485. }
  486. function buildDefinition({
  487. type,
  488. scope
  489. }) {
  490. return {
  491. code: resolveTSScope(scope).file.content.slice(type.start, type.end),
  492. ast: type,
  493. scope
  494. };
  495. }
  496. }
  497. // src/vue/emits.ts
  498. import {
  499. babelParse as babelParse2,
  500. isStaticExpression,
  501. resolveLiteral
  502. } from "@vue-macros/common";
  503. async function handleTSEmitsDefinition({
  504. s,
  505. file,
  506. offset,
  507. defineEmitsAst,
  508. typeDeclRaw,
  509. declId,
  510. statement
  511. }) {
  512. const { definitions, definitionsAst } = await resolveDefinitions({
  513. type: typeDeclRaw,
  514. scope: file
  515. });
  516. const addEmit = (name, signature) => {
  517. const key = keyToString(name);
  518. if (definitionsAst.scope === file) {
  519. if (definitionsAst.ast.type === "TSIntersectionType") {
  520. s.appendLeft(definitionsAst.ast.end + offset, ` & { ${signature} }`);
  521. } else {
  522. s.appendLeft(definitionsAst.ast.end + offset - 1, ` ${signature}
  523. `);
  524. }
  525. }
  526. if (!definitions[key])
  527. definitions[key] = [];
  528. const ast = parseSignature(signature);
  529. definitions[key].push({
  530. code: signature,
  531. ast,
  532. scope: void 0
  533. });
  534. };
  535. const setEmit = (name, idx, signature) => {
  536. const key = keyToString(name);
  537. const def = definitions[key][idx];
  538. if (!def)
  539. return false;
  540. const ast = parseSignature(signature);
  541. attachNodeLoc(def.ast, ast);
  542. if (def.scope === file)
  543. s.overwriteNode(def.ast, signature, { offset });
  544. definitions[key][idx] = {
  545. code: signature,
  546. ast,
  547. scope: void 0
  548. };
  549. return true;
  550. };
  551. const removeEmit = (name, idx) => {
  552. const key = keyToString(name);
  553. const def = definitions[key][idx];
  554. if (!def)
  555. return false;
  556. if (def.scope === file)
  557. s.removeNode(def.ast, { offset });
  558. delete definitions[key][idx];
  559. return true;
  560. };
  561. return {
  562. kind: "TS" /* TS */,
  563. definitions,
  564. definitionsAst,
  565. declId,
  566. addEmit,
  567. setEmit,
  568. removeEmit,
  569. statementAst: statement,
  570. defineEmitsAst
  571. };
  572. function parseSignature(signature) {
  573. return babelParse2(`interface T {${signature}}`, "ts").body[0].body.body[0];
  574. }
  575. async function resolveDefinitions(typeDeclRaw2) {
  576. var _a;
  577. const resolved = await resolveTSReferencedType(typeDeclRaw2);
  578. if (!resolved || isTSExports(resolved))
  579. throw new SyntaxError(`Cannot resolve TS definition.`);
  580. const { type: definitionsAst2, scope } = resolved;
  581. if (definitionsAst2.type !== "TSInterfaceDeclaration" && definitionsAst2.type !== "TSTypeLiteral" && definitionsAst2.type !== "TSIntersectionType" && definitionsAst2.type !== "TSFunctionType")
  582. throw new SyntaxError(
  583. `Cannot resolve TS definition: ${definitionsAst2.type}`
  584. );
  585. const properties = await resolveTSProperties({
  586. scope,
  587. type: definitionsAst2
  588. });
  589. const definitions2 = {};
  590. for (const signature of properties.callSignatures) {
  591. const evtArg = signature.type.parameters[0];
  592. if (!evtArg || evtArg.type !== "Identifier" || ((_a = evtArg.typeAnnotation) == null ? void 0 : _a.type) !== "TSTypeAnnotation")
  593. continue;
  594. const evtType = await resolveTSReferencedType({
  595. type: evtArg.typeAnnotation.typeAnnotation,
  596. scope: signature.scope
  597. });
  598. if (isTSExports(evtType) || !(evtType == null ? void 0 : evtType.type))
  599. continue;
  600. const types = evtType.type.type === "TSUnionType" ? evtType.type.types : [evtType.type];
  601. for (const type of types) {
  602. if (type.type !== "TSLiteralType")
  603. continue;
  604. const literal = type.literal;
  605. if (!isStaticExpression(literal))
  606. continue;
  607. const evt = String(
  608. resolveLiteral(literal)
  609. );
  610. if (!definitions2[evt])
  611. definitions2[evt] = [];
  612. definitions2[evt].push(buildDefinition(signature));
  613. }
  614. }
  615. return {
  616. definitions: definitions2,
  617. definitionsAst: buildDefinition({ scope, type: definitionsAst2 })
  618. };
  619. }
  620. function buildDefinition({
  621. type,
  622. scope
  623. }) {
  624. return {
  625. code: resolveTSScope(scope).file.content.slice(type.start, type.end),
  626. ast: type,
  627. scope
  628. };
  629. }
  630. }
  631. // src/vue/analyze.ts
  632. import { parseSFC } from "@vue-macros/common";
  633. async function analyzeSFC(s, sfc) {
  634. if (!sfc.scriptSetup)
  635. throw new Error("Only <script setup> is supported");
  636. const { scriptSetup } = sfc;
  637. const body = babelParse3(
  638. scriptSetup.content,
  639. sfc.scriptSetup.lang || "js"
  640. ).body;
  641. const offset = scriptSetup.loc.start.offset;
  642. const file = {
  643. filePath: sfc.filename,
  644. content: scriptSetup.content,
  645. ast: body
  646. };
  647. let props;
  648. let emits;
  649. for (const node of body) {
  650. if (node.type === "ExpressionStatement") {
  651. await processDefineProps({
  652. statement: node,
  653. defineProps: node.expression
  654. });
  655. await processWithDefaults({
  656. statement: node,
  657. withDefaults: node.expression
  658. });
  659. await processDefineEmits({
  660. statement: node,
  661. defineEmits: node.expression
  662. });
  663. } else if (node.type === "VariableDeclaration" && !node.declare) {
  664. for (const decl of node.declarations) {
  665. if (!decl.init)
  666. continue;
  667. await processDefineProps({
  668. statement: node,
  669. defineProps: decl.init,
  670. declId: decl.id
  671. });
  672. await processWithDefaults({
  673. statement: node,
  674. withDefaults: decl.init,
  675. declId: decl.id
  676. });
  677. await processDefineEmits({
  678. statement: node,
  679. defineEmits: decl.init,
  680. declId: decl.id
  681. });
  682. }
  683. }
  684. }
  685. return {
  686. props,
  687. emits
  688. };
  689. async function processDefineProps({
  690. defineProps,
  691. declId,
  692. statement,
  693. withDefaultsAst,
  694. defaultsDeclRaw
  695. }) {
  696. var _a;
  697. if (!isCallOf(defineProps, DEFINE_PROPS) || props)
  698. return false;
  699. const typeDeclRaw = (_a = defineProps.typeParameters) == null ? void 0 : _a.params[0];
  700. if (typeDeclRaw) {
  701. props = await handleTSPropsDefinition({
  702. s,
  703. file,
  704. sfc,
  705. offset,
  706. definePropsAst: defineProps,
  707. typeDeclRaw,
  708. withDefaultsAst,
  709. defaultsDeclRaw,
  710. statement,
  711. declId
  712. });
  713. } else {
  714. return false;
  715. }
  716. return true;
  717. }
  718. async function processWithDefaults({
  719. withDefaults,
  720. declId,
  721. statement: stmt
  722. }) {
  723. if (!isCallOf(withDefaults, WITH_DEFAULTS))
  724. return false;
  725. if (!isCallOf(withDefaults.arguments[0], DEFINE_PROPS)) {
  726. throw new SyntaxError(
  727. `${WITH_DEFAULTS}: first argument must be a ${DEFINE_PROPS} call.`
  728. );
  729. }
  730. const isDefineProps = await processDefineProps({
  731. defineProps: withDefaults.arguments[0],
  732. declId,
  733. statement: stmt,
  734. withDefaultsAst: withDefaults,
  735. defaultsDeclRaw: withDefaults.arguments[1]
  736. });
  737. if (!isDefineProps)
  738. return false;
  739. return true;
  740. }
  741. async function processDefineEmits({
  742. defineEmits,
  743. declId,
  744. statement
  745. }) {
  746. var _a;
  747. if (!isCallOf(defineEmits, DEFINE_EMITS) || emits)
  748. return false;
  749. const typeDeclRaw = (_a = defineEmits.typeParameters) == null ? void 0 : _a.params[0];
  750. if (typeDeclRaw) {
  751. emits = await handleTSEmitsDefinition({
  752. s,
  753. file,
  754. sfc,
  755. offset,
  756. defineEmitsAst: defineEmits,
  757. typeDeclRaw,
  758. statement,
  759. declId
  760. });
  761. } else {
  762. return false;
  763. }
  764. return true;
  765. }
  766. }
  767. export {
  768. DefinitionKind,
  769. MagicString,
  770. RollupResolve,
  771. analyzeSFC,
  772. attachNodeLoc,
  773. exportsSymbol,
  774. getTSFile,
  775. handleTSEmitsDefinition,
  776. handleTSPropsDefinition,
  777. inferRuntimeType,
  778. isTSDeclaration,
  779. isTSExports,
  780. keyToString,
  781. mergeTSProperties,
  782. parseSFC,
  783. resolveTSEntityName,
  784. resolveTSExports,
  785. resolveTSFileId,
  786. resolveTSFileIdNode,
  787. resolveTSProperties,
  788. resolveTSReferencedType,
  789. resolveTSScope,
  790. resolveTypeElements,
  791. setResolveTSFileIdImpl,
  792. toRuntimeTypeString,
  793. tsFileCache,
  794. tsFileExportsCache
  795. };