版博士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.

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