@teambit/typescript 0.0.895 → 0.0.897

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -43,7 +43,7 @@ function _typeNodeToSchema() {
43
43
  }
44
44
  async function getParams(parameterNodes, context) {
45
45
  return (0, _pMapSeries().default)(parameterNodes, async param => {
46
- return new (_semanticsEntities().ParameterSchema)(context.getLocation(param), getParamName(param), await getParamType(param, context), Boolean(param.questionToken), param.initializer ? param.initializer.getText() : undefined);
46
+ return new (_semanticsEntities().ParameterSchema)(context.getLocation(param), getParamName(param), await getParamType(param, context), Boolean(param.questionToken), param.initializer ? param.initializer.getText() : undefined, undefined, await getParamObjectBindingNodes(param, context));
47
47
  });
48
48
  }
49
49
  function getParamName(param) {
@@ -59,6 +59,14 @@ function getParamName(param) {
59
59
  // it's an object binding
60
60
  return `{ ${elementsStr} }`;
61
61
  }
62
+ async function getParamObjectBindingNodes(param, context) {
63
+ if (param.name.kind !== _typescript().SyntaxKind.ObjectBindingPattern) return undefined;
64
+ return (0, _pMapSeries().default)(param.name.elements, async elem => {
65
+ const info = await context.getQuickInfo(elem.name);
66
+ const parsed = (0, _parseTypeFromQuickInfo().parseTypeFromQuickInfo)(info);
67
+ return new (_semanticsEntities().InferenceTypeSchema)(context.getLocation(param), parsed, elem.name.getText());
68
+ });
69
+ }
62
70
  async function getParamType(param, context) {
63
71
  if (param.type) {
64
72
  const type = param.type;
@@ -1 +1 @@
1
- {"version":3,"names":["getParams","parameterNodes","context","pMapSeries","param","ParameterSchema","getLocation","getParamName","getParamType","Boolean","questionToken","initializer","getText","undefined","isIdentifier","name","elements","map","elem","elementsStr","join","kind","SyntaxKind","ArrayBindingPattern","type","typeNodeToSchema","info","getQuickInfo","parsed","parseTypeFromQuickInfo","InferenceTypeSchema","TupleTypeSchema","ObjectBindingPattern","TypeLiteralSchema","Error"],"sources":["get-params.ts"],"sourcesContent":["import {\n InferenceTypeSchema,\n ParameterSchema,\n TupleTypeSchema,\n TypeLiteralSchema,\n SchemaNode,\n} from '@teambit/semantics.entities.semantic-schema';\nimport pMapSeries from 'p-map-series';\nimport {\n SyntaxKind,\n ParameterDeclaration,\n NodeArray,\n isIdentifier,\n BindingElement,\n ArrayBindingElement,\n} from 'typescript';\nimport { SchemaExtractorContext } from '../../schema-extractor-context';\nimport { parseTypeFromQuickInfo } from './parse-type-from-quick-info';\nimport { typeNodeToSchema } from './type-node-to-schema';\n\nexport async function getParams(\n parameterNodes: NodeArray<ParameterDeclaration>,\n context: SchemaExtractorContext\n): Promise<ParameterSchema[]> {\n return pMapSeries(parameterNodes, async (param) => {\n return new ParameterSchema(\n context.getLocation(param),\n getParamName(param),\n await getParamType(param, context),\n Boolean(param.questionToken),\n param.initializer ? param.initializer.getText() : undefined\n );\n });\n}\n\nfunction getParamName(param: ParameterDeclaration): string {\n if (isIdentifier(param.name)) {\n return param.name.getText();\n }\n // it's binding pattern, either an array or an object\n const elements = param.name.elements.map((elem) => elem.getText());\n const elementsStr = elements.join(', ');\n if (param.name.kind === SyntaxKind.ArrayBindingPattern) {\n return `[ ${elementsStr} ]`;\n }\n // it's an object binding\n return `{ ${elementsStr} }`;\n}\n\nasync function getParamType(param: ParameterDeclaration, context: SchemaExtractorContext): Promise<SchemaNode> {\n if (param.type) {\n const type = param.type;\n return typeNodeToSchema(type, context);\n }\n if (isIdentifier(param.name)) {\n const info = await context.getQuickInfo(param.name);\n const parsed = parseTypeFromQuickInfo(info);\n return new InferenceTypeSchema(context.getLocation(param), parsed);\n }\n // it's binding pattern, either an array or an object\n if (param.name.kind === SyntaxKind.ArrayBindingPattern) {\n const elements = await pMapSeries(param.name.elements, async (elem: ArrayBindingElement) => {\n const info = await context.getQuickInfo(elem);\n const parsed = parseTypeFromQuickInfo(info);\n return new InferenceTypeSchema(context.getLocation(param), parsed);\n });\n return new TupleTypeSchema(context.getLocation(param), elements);\n }\n if (param.name.kind === SyntaxKind.ObjectBindingPattern) {\n const elements = await pMapSeries(param.name.elements, async (elem: BindingElement) => {\n const info = await context.getQuickInfo(elem.name);\n const parsed = parseTypeFromQuickInfo(info);\n return new InferenceTypeSchema(context.getLocation(param), parsed, elem.name.getText());\n });\n return new TypeLiteralSchema(context.getLocation(param), elements);\n }\n throw new Error(`unknown param type`);\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["getParams","parameterNodes","context","pMapSeries","param","ParameterSchema","getLocation","getParamName","getParamType","Boolean","questionToken","initializer","getText","undefined","getParamObjectBindingNodes","isIdentifier","name","elements","map","elem","elementsStr","join","kind","SyntaxKind","ArrayBindingPattern","ObjectBindingPattern","info","getQuickInfo","parsed","parseTypeFromQuickInfo","InferenceTypeSchema","type","typeNodeToSchema","TupleTypeSchema","TypeLiteralSchema","Error"],"sources":["get-params.ts"],"sourcesContent":["import {\n InferenceTypeSchema,\n ParameterSchema,\n TupleTypeSchema,\n TypeLiteralSchema,\n SchemaNode,\n} from '@teambit/semantics.entities.semantic-schema';\nimport pMapSeries from 'p-map-series';\nimport {\n SyntaxKind,\n ParameterDeclaration,\n NodeArray,\n isIdentifier,\n BindingElement,\n ArrayBindingElement,\n} from 'typescript';\nimport { SchemaExtractorContext } from '../../schema-extractor-context';\nimport { parseTypeFromQuickInfo } from './parse-type-from-quick-info';\nimport { typeNodeToSchema } from './type-node-to-schema';\n\nexport async function getParams(\n parameterNodes: NodeArray<ParameterDeclaration>,\n context: SchemaExtractorContext\n): Promise<ParameterSchema[]> {\n return pMapSeries(parameterNodes, async (param) => {\n return new ParameterSchema(\n context.getLocation(param),\n getParamName(param),\n await getParamType(param, context),\n Boolean(param.questionToken),\n param.initializer ? param.initializer.getText() : undefined,\n undefined,\n await getParamObjectBindingNodes(param, context)\n );\n });\n}\n\nfunction getParamName(param: ParameterDeclaration): string {\n if (isIdentifier(param.name)) {\n return param.name.getText();\n }\n // it's binding pattern, either an array or an object\n const elements = param.name.elements.map((elem) => elem.getText());\n const elementsStr = elements.join(', ');\n if (param.name.kind === SyntaxKind.ArrayBindingPattern) {\n return `[ ${elementsStr} ]`;\n }\n // it's an object binding\n return `{ ${elementsStr} }`;\n}\n\nasync function getParamObjectBindingNodes(\n param: ParameterDeclaration,\n context: SchemaExtractorContext\n): Promise<SchemaNode[] | undefined> {\n if (param.name.kind !== SyntaxKind.ObjectBindingPattern) return undefined;\n return pMapSeries(param.name.elements, async (elem: BindingElement) => {\n const info = await context.getQuickInfo(elem.name);\n const parsed = parseTypeFromQuickInfo(info);\n return new InferenceTypeSchema(context.getLocation(param), parsed, elem.name.getText());\n });\n}\n\nasync function getParamType(param: ParameterDeclaration, context: SchemaExtractorContext): Promise<SchemaNode> {\n if (param.type) {\n const type = param.type;\n return typeNodeToSchema(type, context);\n }\n if (isIdentifier(param.name)) {\n const info = await context.getQuickInfo(param.name);\n const parsed = parseTypeFromQuickInfo(info);\n return new InferenceTypeSchema(context.getLocation(param), parsed);\n }\n // it's binding pattern, either an array or an object\n if (param.name.kind === SyntaxKind.ArrayBindingPattern) {\n const elements = await pMapSeries(param.name.elements, async (elem: ArrayBindingElement) => {\n const info = await context.getQuickInfo(elem);\n const parsed = parseTypeFromQuickInfo(info);\n return new InferenceTypeSchema(context.getLocation(param), parsed);\n });\n return new TupleTypeSchema(context.getLocation(param), elements);\n }\n if (param.name.kind === SyntaxKind.ObjectBindingPattern) {\n const elements = await pMapSeries(param.name.elements, async (elem: BindingElement) => {\n const info = await context.getQuickInfo(elem.name);\n const parsed = parseTypeFromQuickInfo(info);\n return new InferenceTypeSchema(context.getLocation(param), parsed, elem.name.getText());\n });\n return new TypeLiteralSchema(context.getLocation(param), elements);\n }\n throw new Error(`unknown param type`);\n}\n"],"mappings":"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"}
@@ -99,6 +99,11 @@ function parseTypeFromQuickInfo(quickInfo) {
99
99
  const [, ...tail] = splitByEqual;
100
100
  return tail.join('=').trim();
101
101
  }
102
+ case 'parameter':
103
+ {
104
+ const typeColonIndex = displayString.indexOf(':');
105
+ return displayString.slice(typeColonIndex + 1).trim();
106
+ }
102
107
  default:
103
108
  return splitByColon[splitByColon.length - 1].trim();
104
109
  }
@@ -1 +1 @@
1
- {"version":3,"names":["UNRESOLVED","parseTypeFromQuickInfo","quickInfo","body","displayString","splitByColon","split","kind","replace","tail","join","trim","length","firstLine","splitBySpace","typeName","splitByEqual","parseReturnTypeFromQuickInfo","typeStr","array"],"sources":["parse-type-from-quick-info.ts"],"sourcesContent":["// eslint-disable-next-line import/no-unresolved\nimport protocol from 'typescript/lib/protocol';\n\nexport const UNRESOLVED = '<<unresolved>>';\n\n/**\n * try to parse the type from the quickinfo.\n * this is an error-prone process, we do our best here.\n *\n * an example of a function with many \":\"\n * `export function getObj(a: string, func: (b: number) => {}) { return { a: 1, b: 2 } };`\n * which produce the following quickinfo:\n * ```ts\n * function getObj(a: string, func: (b: number) => {}): {\n * a: number;\n * b: number;\n * }\n * ```\n *\n * some examples of quickinfo:\n *\n * function ts.signatureToDisplayParts(typechecker: TypeChecker, signature: Signature, enclosingDeclaration?: Node | undefined, flags?: TypeFormatFlags): SymbolDisplayPart[]\n *\n * const enum ts.TypeFormatFlags\n *\n * (method) ts.TypeChecker.writeSignature(signature: Signature, enclosingDeclaration?: Node | undefined, flags?: TypeFormatFlags | undefined, kind?: SignatureKind | undefined, writer?: EmitTextWriter | undefined): string\n *\n * const obj: {\n * a: number;\n * b: number;\n * }\n *\n * function getObj(a: string): {\n * a: number;\n * b: number;\n * }\n */\nexport function parseTypeFromQuickInfo(quickInfo: protocol.QuickInfoResponse | undefined): string {\n if (!quickInfo?.body?.displayString) return '';\n const displayString = quickInfo.body.displayString;\n const splitByColon = displayString.split(':');\n switch (quickInfo.body.kind) {\n case 'type parameter':\n // (type parameter) T in concat<T, K, V>(array1: T[], array2: T[]): T[]\n return displayString.replace(`(${quickInfo.body.kind}) `, '').split(' ')[0];\n case 'const':\n case 'property':\n case 'let':\n case 'var': {\n const [, ...tail] = splitByColon;\n return tail.join(':').trim();\n }\n case 'method':\n case 'function': {\n const split = displayString.split('): ');\n if (split.length !== 2) {\n // it's hard to determine where the return-type is. so it's better to show unresolved.\n // maybe, in the UI, in this case, it's best to show the signature.\n // e.g.\n // (method) IssuesList.getIssue<T extends ComponentIssue>(IssueClass: {\n // new (): T;\n // }): T | undefined\n return UNRESOLVED;\n }\n return split[1].trim();\n }\n case 'alias': {\n // e.g. (alias) class BuilderService\\nimport BuilderService\n // e.g. '(alias) type Serializable = {\\n' +\n // ' toString(): string;\\n' +\n // '}\\n' +\n // 'import Serializable'\n const firstLine = displayString.split('\\n')[0];\n const splitBySpace = firstLine.trim().split(' ');\n // first two are alias keyword and alias type\n const [, , typeName] = splitBySpace;\n return typeName;\n }\n case 'type': {\n // e.g. `type TaskSlot = SlotRegistry<BuildTask[]>`\n const splitByEqual = displayString.split('=');\n const [, ...tail] = splitByEqual;\n return tail.join('=').trim();\n }\n default:\n return splitByColon[splitByColon.length - 1].trim();\n }\n}\n\nexport function parseReturnTypeFromQuickInfo(quickInfo: protocol.QuickInfoResponse | undefined): string {\n if (!quickInfo) return '';\n const typeStr = parseTypeFromQuickInfo(quickInfo);\n const array = typeStr.split('=>');\n return array[array.length - 1].trim();\n}\n"],"mappings":";;;;;;;;;;;;AAAA;;AAGO,MAAMA,UAAU,GAAG,gBAAgB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA/BA;AAgCO,SAASC,sBAAsB,CAACC,SAAiD,EAAU;EAAA;EAChG,IAAI,EAACA,SAAS,aAATA,SAAS,kCAATA,SAAS,CAAEC,IAAI,4CAAf,gBAAiBC,aAAa,GAAE,OAAO,EAAE;EAC9C,MAAMA,aAAa,GAAGF,SAAS,CAACC,IAAI,CAACC,aAAa;EAClD,MAAMC,YAAY,GAAGD,aAAa,CAACE,KAAK,CAAC,GAAG,CAAC;EAC7C,QAAQJ,SAAS,CAACC,IAAI,CAACI,IAAI;IACzB,KAAK,gBAAgB;MACnB;MACA,OAAOH,aAAa,CAACI,OAAO,CAAE,IAAGN,SAAS,CAACC,IAAI,CAACI,IAAK,IAAG,EAAE,EAAE,CAAC,CAACD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7E,KAAK,OAAO;IACZ,KAAK,UAAU;IACf,KAAK,KAAK;IACV,KAAK,KAAK;MAAE;QACV,MAAM,GAAG,GAAGG,IAAI,CAAC,GAAGJ,YAAY;QAChC,OAAOI,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC,CAACC,IAAI,EAAE;MAC9B;IACA,KAAK,QAAQ;IACb,KAAK,UAAU;MAAE;QACf,MAAML,KAAK,GAAGF,aAAa,CAACE,KAAK,CAAC,KAAK,CAAC;QACxC,IAAIA,KAAK,CAACM,MAAM,KAAK,CAAC,EAAE;UACtB;UACA;UACA;UACA;UACA;UACA;UACA,OAAOZ,UAAU;QACnB;QACA,OAAOM,KAAK,CAAC,CAAC,CAAC,CAACK,IAAI,EAAE;MACxB;IACA,KAAK,OAAO;MAAE;QACZ;QACA;QACA;QACA;QACA;QACA,MAAME,SAAS,GAAGT,aAAa,CAACE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAMQ,YAAY,GAAGD,SAAS,CAACF,IAAI,EAAE,CAACL,KAAK,CAAC,GAAG,CAAC;QAChD;QACA,MAAM,IAAKS,QAAQ,CAAC,GAAGD,YAAY;QACnC,OAAOC,QAAQ;MACjB;IACA,KAAK,MAAM;MAAE;QACX;QACA,MAAMC,YAAY,GAAGZ,aAAa,CAACE,KAAK,CAAC,GAAG,CAAC;QAC7C,MAAM,GAAG,GAAGG,IAAI,CAAC,GAAGO,YAAY;QAChC,OAAOP,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC,CAACC,IAAI,EAAE;MAC9B;IACA;MACE,OAAON,YAAY,CAACA,YAAY,CAACO,MAAM,GAAG,CAAC,CAAC,CAACD,IAAI,EAAE;EAAC;AAE1D;AAEO,SAASM,4BAA4B,CAACf,SAAiD,EAAU;EACtG,IAAI,CAACA,SAAS,EAAE,OAAO,EAAE;EACzB,MAAMgB,OAAO,GAAGjB,sBAAsB,CAACC,SAAS,CAAC;EACjD,MAAMiB,KAAK,GAAGD,OAAO,CAACZ,KAAK,CAAC,IAAI,CAAC;EACjC,OAAOa,KAAK,CAACA,KAAK,CAACP,MAAM,GAAG,CAAC,CAAC,CAACD,IAAI,EAAE;AACvC"}
1
+ {"version":3,"names":["UNRESOLVED","parseTypeFromQuickInfo","quickInfo","body","displayString","splitByColon","split","kind","replace","tail","join","trim","length","firstLine","splitBySpace","typeName","splitByEqual","typeColonIndex","indexOf","slice","parseReturnTypeFromQuickInfo","typeStr","array"],"sources":["parse-type-from-quick-info.ts"],"sourcesContent":["// eslint-disable-next-line import/no-unresolved\nimport protocol from 'typescript/lib/protocol';\n\nexport const UNRESOLVED = '<<unresolved>>';\n\n/**\n * try to parse the type from the quickinfo.\n * this is an error-prone process, we do our best here.\n *\n * an example of a function with many \":\"\n * `export function getObj(a: string, func: (b: number) => {}) { return { a: 1, b: 2 } };`\n * which produce the following quickinfo:\n * ```ts\n * function getObj(a: string, func: (b: number) => {}): {\n * a: number;\n * b: number;\n * }\n * ```\n *\n * some examples of quickinfo:\n *\n * function ts.signatureToDisplayParts(typechecker: TypeChecker, signature: Signature, enclosingDeclaration?: Node | undefined, flags?: TypeFormatFlags): SymbolDisplayPart[]\n *\n * const enum ts.TypeFormatFlags\n *\n * (method) ts.TypeChecker.writeSignature(signature: Signature, enclosingDeclaration?: Node | undefined, flags?: TypeFormatFlags | undefined, kind?: SignatureKind | undefined, writer?: EmitTextWriter | undefined): string\n *\n * const obj: {\n * a: number;\n * b: number;\n * }\n *\n * function getObj(a: string): {\n * a: number;\n * b: number;\n * }\n */\nexport function parseTypeFromQuickInfo(quickInfo: protocol.QuickInfoResponse | undefined): string {\n if (!quickInfo?.body?.displayString) return '';\n const displayString = quickInfo.body.displayString;\n const splitByColon = displayString.split(':');\n switch (quickInfo.body.kind) {\n case 'type parameter':\n // (type parameter) T in concat<T, K, V>(array1: T[], array2: T[]): T[]\n return displayString.replace(`(${quickInfo.body.kind}) `, '').split(' ')[0];\n case 'const':\n case 'property':\n case 'let':\n case 'var': {\n const [, ...tail] = splitByColon;\n return tail.join(':').trim();\n }\n case 'method':\n case 'function': {\n const split = displayString.split('): ');\n if (split.length !== 2) {\n // it's hard to determine where the return-type is. so it's better to show unresolved.\n // maybe, in the UI, in this case, it's best to show the signature.\n // e.g.\n // (method) IssuesList.getIssue<T extends ComponentIssue>(IssueClass: {\n // new (): T;\n // }): T | undefined\n return UNRESOLVED;\n }\n return split[1].trim();\n }\n case 'alias': {\n // e.g. (alias) class BuilderService\\nimport BuilderService\n // e.g. '(alias) type Serializable = {\\n' +\n // ' toString(): string;\\n' +\n // '}\\n' +\n // 'import Serializable'\n const firstLine = displayString.split('\\n')[0];\n const splitBySpace = firstLine.trim().split(' ');\n // first two are alias keyword and alias type\n const [, , typeName] = splitBySpace;\n return typeName;\n }\n case 'type': {\n // e.g. `type TaskSlot = SlotRegistry<BuildTask[]>`\n const splitByEqual = displayString.split('=');\n const [, ...tail] = splitByEqual;\n return tail.join('=').trim();\n }\n case 'parameter': {\n const typeColonIndex = displayString.indexOf(':');\n return displayString.slice(typeColonIndex + 1).trim();\n }\n default:\n return splitByColon[splitByColon.length - 1].trim();\n }\n}\n\nexport function parseReturnTypeFromQuickInfo(quickInfo: protocol.QuickInfoResponse | undefined): string {\n if (!quickInfo) return '';\n const typeStr = parseTypeFromQuickInfo(quickInfo);\n const array = typeStr.split('=>');\n return array[array.length - 1].trim();\n}\n"],"mappings":";;;;;;;;;;;;AAAA;;AAGO,MAAMA,UAAU,GAAG,gBAAgB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA/BA;AAgCO,SAASC,sBAAsB,CAACC,SAAiD,EAAU;EAAA;EAChG,IAAI,EAACA,SAAS,aAATA,SAAS,kCAATA,SAAS,CAAEC,IAAI,4CAAf,gBAAiBC,aAAa,GAAE,OAAO,EAAE;EAC9C,MAAMA,aAAa,GAAGF,SAAS,CAACC,IAAI,CAACC,aAAa;EAClD,MAAMC,YAAY,GAAGD,aAAa,CAACE,KAAK,CAAC,GAAG,CAAC;EAC7C,QAAQJ,SAAS,CAACC,IAAI,CAACI,IAAI;IACzB,KAAK,gBAAgB;MACnB;MACA,OAAOH,aAAa,CAACI,OAAO,CAAE,IAAGN,SAAS,CAACC,IAAI,CAACI,IAAK,IAAG,EAAE,EAAE,CAAC,CAACD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7E,KAAK,OAAO;IACZ,KAAK,UAAU;IACf,KAAK,KAAK;IACV,KAAK,KAAK;MAAE;QACV,MAAM,GAAG,GAAGG,IAAI,CAAC,GAAGJ,YAAY;QAChC,OAAOI,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC,CAACC,IAAI,EAAE;MAC9B;IACA,KAAK,QAAQ;IACb,KAAK,UAAU;MAAE;QACf,MAAML,KAAK,GAAGF,aAAa,CAACE,KAAK,CAAC,KAAK,CAAC;QACxC,IAAIA,KAAK,CAACM,MAAM,KAAK,CAAC,EAAE;UACtB;UACA;UACA;UACA;UACA;UACA;UACA,OAAOZ,UAAU;QACnB;QACA,OAAOM,KAAK,CAAC,CAAC,CAAC,CAACK,IAAI,EAAE;MACxB;IACA,KAAK,OAAO;MAAE;QACZ;QACA;QACA;QACA;QACA;QACA,MAAME,SAAS,GAAGT,aAAa,CAACE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAMQ,YAAY,GAAGD,SAAS,CAACF,IAAI,EAAE,CAACL,KAAK,CAAC,GAAG,CAAC;QAChD;QACA,MAAM,IAAKS,QAAQ,CAAC,GAAGD,YAAY;QACnC,OAAOC,QAAQ;MACjB;IACA,KAAK,MAAM;MAAE;QACX;QACA,MAAMC,YAAY,GAAGZ,aAAa,CAACE,KAAK,CAAC,GAAG,CAAC;QAC7C,MAAM,GAAG,GAAGG,IAAI,CAAC,GAAGO,YAAY;QAChC,OAAOP,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC,CAACC,IAAI,EAAE;MAC9B;IACA,KAAK,WAAW;MAAE;QAChB,MAAMM,cAAc,GAAGb,aAAa,CAACc,OAAO,CAAC,GAAG,CAAC;QACjD,OAAOd,aAAa,CAACe,KAAK,CAACF,cAAc,GAAG,CAAC,CAAC,CAACN,IAAI,EAAE;MACvD;IACA;MACE,OAAON,YAAY,CAACA,YAAY,CAACO,MAAM,GAAG,CAAC,CAAC,CAACD,IAAI,EAAE;EAAC;AAE1D;AAEO,SAASS,4BAA4B,CAAClB,SAAiD,EAAU;EACtG,IAAI,CAACA,SAAS,EAAE,OAAO,EAAE;EACzB,MAAMmB,OAAO,GAAGpB,sBAAsB,CAACC,SAAS,CAAC;EACjD,MAAMoB,KAAK,GAAGD,OAAO,CAACf,KAAK,CAAC,IAAI,CAAC;EACjC,OAAOgB,KAAK,CAACA,KAAK,CAACV,MAAM,GAAG,CAAC,CAAC,CAACD,IAAI,EAAE;AACvC"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/typescript",
3
- "version": "0.0.895",
3
+ "version": "0.0.897",
4
4
  "homepage": "https://bit.dev/teambit/typescript/typescript",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.typescript",
8
8
  "name": "typescript",
9
- "version": "0.0.895"
9
+ "version": "0.0.897"
10
10
  },
11
11
  "dependencies": {
12
12
  "lodash": "4.17.21",
@@ -19,23 +19,23 @@
19
19
  "@babel/runtime": "7.20.0",
20
20
  "core-js": "^3.0.0",
21
21
  "@teambit/harmony": "0.3.3",
22
- "@teambit/compiler": "0.0.895",
22
+ "@teambit/compiler": "0.0.897",
23
23
  "@teambit/typescript.modules.ts-config-mutator": "0.0.76",
24
- "@teambit/component": "0.0.895",
25
- "@teambit/dependency-resolver": "0.0.895",
26
- "@teambit/formatter": "0.0.446",
27
- "@teambit/semantics.entities.semantic-schema": "0.0.47",
24
+ "@teambit/component": "0.0.897",
25
+ "@teambit/dependency-resolver": "0.0.897",
26
+ "@teambit/formatter": "0.0.448",
27
+ "@teambit/semantics.entities.semantic-schema": "0.0.48",
28
28
  "@teambit/ts-server": "0.0.39",
29
- "@teambit/aspect-loader": "0.0.895",
30
- "@teambit/envs": "0.0.895",
29
+ "@teambit/aspect-loader": "0.0.897",
30
+ "@teambit/envs": "0.0.897",
31
31
  "@teambit/logger": "0.0.692",
32
- "@teambit/workspace": "0.0.895",
32
+ "@teambit/workspace": "0.0.897",
33
33
  "@teambit/bit-error": "0.0.402",
34
- "@teambit/builder": "0.0.895",
35
- "@teambit/isolator": "0.0.895",
36
- "@teambit/schema": "0.0.895",
34
+ "@teambit/builder": "0.0.897",
35
+ "@teambit/isolator": "0.0.897",
36
+ "@teambit/schema": "0.0.897",
37
37
  "@teambit/cli": "0.0.599",
38
- "@teambit/pkg": "0.0.895"
38
+ "@teambit/pkg": "0.0.897"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@types/lodash": "4.14.165",
@@ -1,5 +1,5 @@
1
- import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.typescript_typescript@0.0.895/dist/typescript.composition.js';
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.typescript_typescript@0.0.895/dist/typescript.docs.mdx';
1
+ import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.typescript_typescript@0.0.897/dist/typescript.composition.js';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.typescript_typescript@0.0.897/dist/typescript.docs.mdx';
3
3
 
4
4
  export const compositions = [compositions_0];
5
5
  export const overview = [overview_0];
@@ -28,7 +28,9 @@ export async function getParams(
28
28
  getParamName(param),
29
29
  await getParamType(param, context),
30
30
  Boolean(param.questionToken),
31
- param.initializer ? param.initializer.getText() : undefined
31
+ param.initializer ? param.initializer.getText() : undefined,
32
+ undefined,
33
+ await getParamObjectBindingNodes(param, context)
32
34
  );
33
35
  });
34
36
  }
@@ -47,6 +49,18 @@ function getParamName(param: ParameterDeclaration): string {
47
49
  return `{ ${elementsStr} }`;
48
50
  }
49
51
 
52
+ async function getParamObjectBindingNodes(
53
+ param: ParameterDeclaration,
54
+ context: SchemaExtractorContext
55
+ ): Promise<SchemaNode[] | undefined> {
56
+ if (param.name.kind !== SyntaxKind.ObjectBindingPattern) return undefined;
57
+ return pMapSeries(param.name.elements, async (elem: BindingElement) => {
58
+ const info = await context.getQuickInfo(elem.name);
59
+ const parsed = parseTypeFromQuickInfo(info);
60
+ return new InferenceTypeSchema(context.getLocation(param), parsed, elem.name.getText());
61
+ });
62
+ }
63
+
50
64
  async function getParamType(param: ParameterDeclaration, context: SchemaExtractorContext): Promise<SchemaNode> {
51
65
  if (param.type) {
52
66
  const type = param.type;
@@ -82,6 +82,10 @@ export function parseTypeFromQuickInfo(quickInfo: protocol.QuickInfoResponse | u
82
82
  const [, ...tail] = splitByEqual;
83
83
  return tail.join('=').trim();
84
84
  }
85
+ case 'parameter': {
86
+ const typeColonIndex = displayString.indexOf(':');
87
+ return displayString.slice(typeColonIndex + 1).trim();
88
+ }
85
89
  default:
86
90
  return splitByColon[splitByColon.length - 1].trim();
87
91
  }