@kubb/parser-ts 3.0.0-alpha.6 → 3.0.0-alpha.8

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.
@@ -373,7 +373,7 @@ function createEnumDeclaration({
373
373
  )
374
374
  ),
375
375
  factory.createTypeAliasDeclaration(
376
- [factory.createToken(ts.SyntaxKind.ExportKeyword)],
376
+ type === "asPascalConst" ? [] : [factory.createToken(ts.SyntaxKind.ExportKeyword)],
377
377
  factory.createIdentifier(typeName),
378
378
  void 0,
379
379
  factory.createIndexedAccessTypeNode(
@@ -452,4 +452,4 @@ export {
452
452
  createTupleTypeNode,
453
453
  factory_exports
454
454
  };
455
- //# sourceMappingURL=chunk-WBLAF6SH.js.map
455
+ //# sourceMappingURL=chunk-2BN5RQSZ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/factory.ts"],"sourcesContent":["import { isNumber } from 'remeda'\nimport ts from 'typescript'\n\nconst { factory } = ts\n\n// https://ts-ast-viewer.com/\n\nexport const modifiers = {\n async: factory.createModifier(ts.SyntaxKind.AsyncKeyword),\n export: factory.createModifier(ts.SyntaxKind.ExportKeyword),\n const: factory.createModifier(ts.SyntaxKind.ConstKeyword),\n static: factory.createModifier(ts.SyntaxKind.StaticKeyword),\n} as const\n\nfunction isValidIdentifier(str: string): boolean {\n if (!str.length || str.trim() !== str) {\n return false\n }\n const node = ts.parseIsolatedEntityName(str, ts.ScriptTarget.Latest)\n\n return !!node && node.kind === ts.SyntaxKind.Identifier && ts.identifierToKeywordKind(node.kind as unknown as ts.Identifier) === undefined\n}\n\nfunction propertyName(name: string | ts.PropertyName): ts.PropertyName {\n if (typeof name === 'string') {\n return isValidIdentifier(name) ? factory.createIdentifier(name) : factory.createStringLiteral(name)\n }\n return name\n}\n\nconst questionToken = factory.createToken(ts.SyntaxKind.QuestionToken)\n\nexport function createQuestionToken(token?: boolean | ts.QuestionToken) {\n if (!token) {\n return undefined\n }\n if (token === true) {\n return questionToken\n }\n return token\n}\n\nexport function createIntersectionDeclaration({\n nodes,\n withParentheses,\n}: {\n nodes: Array<ts.TypeNode>\n withParentheses?: boolean\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createIntersectionTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\n/**\n * Minimum nodes length of 2\n * @example `string & number`\n */\nexport function createTupleDeclaration({\n nodes,\n withParentheses,\n}: {\n nodes: Array<ts.TypeNode>\n withParentheses?: boolean\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createTupleTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\nexport function createArrayDeclaration({\n nodes,\n}: {\n nodes: Array<ts.TypeNode>\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return factory.createTupleTypeNode([])\n }\n\n if (nodes.length === 1) {\n return factory.createArrayTypeNode(nodes.at(0)!)\n }\n\n return factory.createExpressionWithTypeArguments(factory.createIdentifier('Array'), [factory.createUnionTypeNode(nodes)])\n}\n\n/**\n * Minimum nodes length of 2\n * @example `string | number`\n */\nexport function createUnionDeclaration({\n nodes,\n withParentheses,\n}: {\n nodes: Array<ts.TypeNode>\n withParentheses?: boolean\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createUnionTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\nexport function createPropertySignature({\n readOnly,\n modifiers = [],\n name,\n questionToken,\n type,\n}: {\n readOnly?: boolean\n modifiers?: Array<ts.Modifier>\n name: ts.PropertyName | string\n questionToken?: ts.QuestionToken | boolean\n type?: ts.TypeNode\n}) {\n return factory.createPropertySignature(\n [...modifiers, readOnly ? factory.createToken(ts.SyntaxKind.ReadonlyKeyword) : undefined].filter(Boolean),\n propertyName(name),\n createQuestionToken(questionToken),\n type,\n )\n}\n\nexport function createParameterSignature(\n name: string | ts.BindingName,\n {\n modifiers,\n dotDotDotToken,\n questionToken,\n type,\n initializer,\n }: {\n decorators?: Array<ts.Decorator>\n modifiers?: Array<ts.Modifier>\n dotDotDotToken?: ts.DotDotDotToken\n questionToken?: ts.QuestionToken | boolean\n type?: ts.TypeNode\n initializer?: ts.Expression\n },\n): ts.ParameterDeclaration {\n return factory.createParameterDeclaration(modifiers, dotDotDotToken, name, createQuestionToken(questionToken), type, initializer)\n}\n\nexport function createJSDoc({ comments }: { comments: string[] }) {\n if (!comments.length) {\n return null\n }\n return factory.createJSDocComment(\n factory.createNodeArray(\n comments.map((comment, i) => {\n if (i === comments.length - 1) {\n return factory.createJSDocText(comment)\n }\n\n return factory.createJSDocText(`${comment}\\n`)\n }),\n ),\n )\n}\n\n/**\n * @link https://github.com/microsoft/TypeScript/issues/44151\n */\nexport function appendJSDocToNode<TNode extends ts.Node>({\n node,\n comments,\n}: {\n node: TNode\n comments: Array<string | undefined>\n}) {\n const filteredComments = comments.filter(Boolean)\n\n if (!filteredComments.length) {\n return node\n }\n\n const text = filteredComments.reduce((acc = '', comment = '') => {\n return `${acc}\\n * ${comment}`\n }, '*')\n\n // node: {...node}, with that ts.addSyntheticLeadingComment is appending\n return ts.addSyntheticLeadingComment({ ...node }, ts.SyntaxKind.MultiLineCommentTrivia, `${text || '*'}\\n`, true)\n}\n\nexport function createIndexSignature(\n type: ts.TypeNode,\n {\n modifiers,\n indexName = 'key',\n indexType = factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n }: {\n indexName?: string\n indexType?: ts.TypeNode\n decorators?: Array<ts.Decorator>\n modifiers?: Array<ts.Modifier>\n } = {},\n) {\n return factory.createIndexSignature(modifiers, [createParameterSignature(indexName, { type: indexType })], type)\n}\n\nexport function createTypeAliasDeclaration({\n modifiers,\n name,\n typeParameters,\n type,\n}: {\n modifiers?: Array<ts.Modifier>\n name: string | ts.Identifier\n typeParameters?: Array<ts.TypeParameterDeclaration>\n type: ts.TypeNode\n}) {\n return factory.createTypeAliasDeclaration(modifiers, name, typeParameters, type)\n}\n\nexport function createNamespaceDeclaration({\n statements,\n name,\n}: {\n name: string\n statements: ts.Statement[]\n}) {\n return factory.createModuleDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(name),\n factory.createModuleBlock(statements),\n ts.NodeFlags.Namespace,\n )\n}\n\n/**\n * In { propertyName: string; name?: string } is `name` being used to make the type more unique when multiple same names are used.\n * @example `import { Pet as Cat } from './Pet'`\n */\nexport function createImportDeclaration({\n name,\n path,\n isTypeOnly = false,\n isNameSpace = false,\n}: {\n name: string | Array<string | { propertyName: string; name?: string }>\n path: string\n isTypeOnly?: boolean\n isNameSpace?: boolean\n}) {\n if (!Array.isArray(name)) {\n let importPropertyName: ts.Identifier | undefined = factory.createIdentifier(name)\n let importName: ts.NamedImportBindings | undefined = undefined\n\n if (isNameSpace) {\n importPropertyName = undefined\n importName = factory.createNamespaceImport(factory.createIdentifier(name))\n }\n\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(isTypeOnly, importPropertyName, importName),\n factory.createStringLiteral(path),\n undefined,\n )\n }\n\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(\n isTypeOnly,\n undefined,\n factory.createNamedImports(\n name.map((item) => {\n if (typeof item === 'object') {\n const obj = item as { propertyName: string; name?: string }\n if (obj.name) {\n return factory.createImportSpecifier(false, factory.createIdentifier(obj.propertyName), factory.createIdentifier(obj.name))\n }\n\n return factory.createImportSpecifier(false, undefined, factory.createIdentifier(obj.propertyName))\n }\n\n return factory.createImportSpecifier(false, undefined, factory.createIdentifier(item))\n }),\n ),\n ),\n factory.createStringLiteral(path),\n undefined,\n )\n}\n\nexport function createExportDeclaration({\n path,\n asAlias,\n isTypeOnly = false,\n name,\n}: {\n path: string\n asAlias?: boolean\n isTypeOnly?: boolean\n name?: string | Array<ts.Identifier | string>\n}) {\n if (name && !Array.isArray(name) && !asAlias) {\n console.warn(`When using name as string, asAlias should be true ${name}`)\n }\n\n if (!Array.isArray(name)) {\n const parsedName = name?.match(/^\\d/) ? `_${name?.slice(1)}` : name\n\n return factory.createExportDeclaration(\n undefined,\n isTypeOnly,\n asAlias && parsedName ? factory.createNamespaceExport(factory.createIdentifier(parsedName)) : undefined,\n factory.createStringLiteral(path),\n undefined,\n )\n }\n\n return factory.createExportDeclaration(\n undefined,\n isTypeOnly,\n factory.createNamedExports(\n name.map((propertyName) => {\n return factory.createExportSpecifier(false, undefined, typeof propertyName === 'string' ? factory.createIdentifier(propertyName) : propertyName)\n }),\n ),\n factory.createStringLiteral(path),\n undefined,\n )\n}\n\nexport function createEnumDeclaration({\n type = 'enum',\n name,\n typeName,\n enums,\n}: {\n /**\n * @default `'enum'`\n */\n type?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal'\n /**\n * Enum name in camelCase.\n */\n name: string\n /**\n * Enum name in PascalCase.\n */\n typeName: string\n enums: [key: string | number, value: string | number | boolean][]\n}): [name: ts.Node | undefined, type: ts.Node] {\n if (type === 'literal') {\n return [\n undefined,\n factory.createTypeAliasDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(typeName),\n undefined,\n factory.createUnionTypeNode(\n enums\n .map(([_key, value]) => {\n if (isNumber(value)) {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(value?.toString()))\n }\n\n if (typeof value === 'boolean') {\n return factory.createLiteralTypeNode(value ? factory.createTrue() : factory.createFalse())\n }\n if (value) {\n return factory.createLiteralTypeNode(factory.createStringLiteral(value.toString()))\n }\n\n return undefined\n })\n .filter(Boolean),\n ),\n ),\n ]\n }\n\n if (type === 'enum' || type === 'constEnum') {\n return [\n undefined,\n factory.createEnumDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword), type === 'constEnum' ? factory.createToken(ts.SyntaxKind.ConstKeyword) : undefined].filter(Boolean),\n factory.createIdentifier(typeName),\n enums\n .map(([key, value]) => {\n let initializer: ts.Expression = factory.createStringLiteral(value?.toString())\n\n if (isNumber(Number.parseInt(value.toString()))) {\n initializer = factory.createNumericLiteral(value as number)\n }\n if (typeof value === 'boolean') {\n initializer = value ? factory.createTrue() : factory.createFalse()\n }\n\n if (isNumber(Number.parseInt(key.toString()))) {\n return factory.createEnumMember(factory.createStringLiteral(`${typeName}_${key}`), initializer)\n }\n\n if (key) {\n return factory.createEnumMember(factory.createStringLiteral(`${key}`), initializer)\n }\n\n return undefined\n })\n .filter(Boolean),\n ),\n ]\n }\n\n // used when using `as const` instead of an TypeScript enum.\n const identifierName = type === 'asPascalConst' ? typeName : name\n\n return [\n factory.createVariableStatement(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier(identifierName),\n undefined,\n undefined,\n factory.createAsExpression(\n factory.createObjectLiteralExpression(\n enums\n .map(([key, value]) => {\n let initializer: ts.Expression = factory.createStringLiteral(`${value?.toString()}`)\n\n if (isNumber(value)) {\n // Error: Negative numbers should be created in combination with createPrefixUnaryExpression factory.\n // The method createNumericLiteral only accepts positive numbers\n // or those combined with createPrefixUnaryExpression.\n // Therefore, we need to ensure that the number is not negative.\n if (value < 0) {\n initializer = factory.createPrefixUnaryExpression(ts.SyntaxKind.MinusToken, factory.createNumericLiteral(Math.abs(value)))\n } else {\n initializer = factory.createNumericLiteral(value)\n }\n }\n\n if (typeof value === 'boolean') {\n initializer = value ? factory.createTrue() : factory.createFalse()\n }\n\n if (key) {\n return factory.createPropertyAssignment(factory.createStringLiteral(`${key}`), initializer)\n }\n\n return undefined\n })\n .filter(Boolean),\n true,\n ),\n factory.createTypeReferenceNode(factory.createIdentifier('const'), undefined),\n ),\n ),\n ],\n ts.NodeFlags.Const,\n ),\n ),\n factory.createTypeAliasDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(typeName),\n undefined,\n factory.createIndexedAccessTypeNode(\n factory.createParenthesizedType(factory.createTypeQueryNode(factory.createIdentifier(identifierName), undefined)),\n factory.createTypeOperatorNode(ts.SyntaxKind.KeyOfKeyword, factory.createTypeQueryNode(factory.createIdentifier(identifierName), undefined)),\n ),\n ),\n ]\n}\n\nexport function createOmitDeclaration({\n keys,\n type,\n nonNullable,\n}: {\n keys: Array<string> | string\n type: ts.TypeNode\n nonNullable?: boolean\n}) {\n const node = nonNullable ? factory.createTypeReferenceNode(factory.createIdentifier('NonNullable'), [type]) : type\n\n if (Array.isArray(keys)) {\n return factory.createTypeReferenceNode(factory.createIdentifier('Omit'), [\n node,\n factory.createUnionTypeNode(\n keys.map((key) => {\n return factory.createLiteralTypeNode(factory.createStringLiteral(key))\n }),\n ),\n ])\n }\n\n return factory.createTypeReferenceNode(factory.createIdentifier('Omit'), [node, factory.createLiteralTypeNode(factory.createStringLiteral(keys))])\n}\n\nexport const keywordTypeNodes = {\n any: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n unknown: factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),\n number: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n integer: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n object: factory.createKeywordTypeNode(ts.SyntaxKind.ObjectKeyword),\n string: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n boolean: factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword),\n undefined: factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword),\n null: factory.createLiteralTypeNode(factory.createToken(ts.SyntaxKind.NullKeyword)),\n} as const\n\nexport const createTypeLiteralNode = factory.createTypeLiteralNode\n\nexport const createTypeReferenceNode = factory.createTypeReferenceNode\nexport const createNumericLiteral = factory.createNumericLiteral\nexport const createStringLiteral = factory.createStringLiteral\n\nexport const createArrayTypeNode = factory.createArrayTypeNode\n\nexport const createLiteralTypeNode = factory.createLiteralTypeNode\nexport const createNull = factory.createNull\nexport const createIdentifier = factory.createIdentifier\n\nexport const createTupleTypeNode = factory.createTupleTypeNode\n"],"mappings":";;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAS,gBAAgB;AACzB,OAAO,QAAQ;AAEf,IAAM,EAAE,QAAQ,IAAI;AAIb,IAAM,YAAY;AAAA,EACvB,OAAO,QAAQ,eAAe,GAAG,WAAW,YAAY;AAAA,EACxD,QAAQ,QAAQ,eAAe,GAAG,WAAW,aAAa;AAAA,EAC1D,OAAO,QAAQ,eAAe,GAAG,WAAW,YAAY;AAAA,EACxD,QAAQ,QAAQ,eAAe,GAAG,WAAW,aAAa;AAC5D;AAEA,SAAS,kBAAkB,KAAsB;AAC/C,MAAI,CAAC,IAAI,UAAU,IAAI,KAAK,MAAM,KAAK;AACrC,WAAO;AAAA,EACT;AACA,QAAM,OAAO,GAAG,wBAAwB,KAAK,GAAG,aAAa,MAAM;AAEnE,SAAO,CAAC,CAAC,QAAQ,KAAK,SAAS,GAAG,WAAW,cAAc,GAAG,wBAAwB,KAAK,IAAgC,MAAM;AACnI;AAEA,SAAS,aAAa,MAAiD;AACrE,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,kBAAkB,IAAI,IAAI,QAAQ,iBAAiB,IAAI,IAAI,QAAQ,oBAAoB,IAAI;AAAA,EACpG;AACA,SAAO;AACT;AAEA,IAAM,gBAAgB,QAAQ,YAAY,GAAG,WAAW,aAAa;AAE9D,SAAS,oBAAoB,OAAoC;AACtE,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,8BAA8B;AAAA,EAC5C;AAAA,EACA;AACF,GAGuB;AACrB,MAAI,CAAC,MAAM,QAAQ;AACjB,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,MAAM,CAAC,KAAK;AAAA,EACrB;AAEA,QAAM,OAAO,QAAQ,2BAA2B,KAAK;AAErD,MAAI,iBAAiB;AACnB,WAAO,QAAQ,wBAAwB,IAAI;AAAA,EAC7C;AAEA,SAAO;AACT;AAMO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AACF,GAGuB;AACrB,MAAI,CAAC,MAAM,QAAQ;AACjB,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,MAAM,CAAC,KAAK;AAAA,EACrB;AAEA,QAAM,OAAO,QAAQ,oBAAoB,KAAK;AAE9C,MAAI,iBAAiB;AACnB,WAAO,QAAQ,wBAAwB,IAAI;AAAA,EAC7C;AAEA,SAAO;AACT;AAEO,SAAS,uBAAuB;AAAA,EACrC;AACF,GAEuB;AACrB,MAAI,CAAC,MAAM,QAAQ;AACjB,WAAO,QAAQ,oBAAoB,CAAC,CAAC;AAAA,EACvC;AAEA,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,QAAQ,oBAAoB,MAAM,GAAG,CAAC,CAAE;AAAA,EACjD;AAEA,SAAO,QAAQ,kCAAkC,QAAQ,iBAAiB,OAAO,GAAG,CAAC,QAAQ,oBAAoB,KAAK,CAAC,CAAC;AAC1H;AAMO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AACF,GAGuB;AACrB,MAAI,CAAC,MAAM,QAAQ;AACjB,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,MAAM,CAAC,KAAK;AAAA,EACrB;AAEA,QAAM,OAAO,QAAQ,oBAAoB,KAAK;AAE9C,MAAI,iBAAiB;AACnB,WAAO,QAAQ,wBAAwB,IAAI;AAAA,EAC7C;AAEA,SAAO;AACT;AAEO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA,WAAAA,aAAY,CAAC;AAAA,EACb;AAAA,EACA,eAAAC;AAAA,EACA;AACF,GAMG;AACD,SAAO,QAAQ;AAAA,IACb,CAAC,GAAGD,YAAW,WAAW,QAAQ,YAAY,GAAG,WAAW,eAAe,IAAI,MAAS,EAAE,OAAO,OAAO;AAAA,IACxG,aAAa,IAAI;AAAA,IACjB,oBAAoBC,cAAa;AAAA,IACjC;AAAA,EACF;AACF;AAEO,SAAS,yBACd,MACA;AAAA,EACE,WAAAD;AAAA,EACA;AAAA,EACA,eAAAC;AAAA,EACA;AAAA,EACA;AACF,GAQyB;AACzB,SAAO,QAAQ,2BAA2BD,YAAW,gBAAgB,MAAM,oBAAoBC,cAAa,GAAG,MAAM,WAAW;AAClI;AAEO,SAAS,YAAY,EAAE,SAAS,GAA2B;AAChE,MAAI,CAAC,SAAS,QAAQ;AACpB,WAAO;AAAA,EACT;AACA,SAAO,QAAQ;AAAA,IACb,QAAQ;AAAA,MACN,SAAS,IAAI,CAAC,SAAS,MAAM;AAC3B,YAAI,MAAM,SAAS,SAAS,GAAG;AAC7B,iBAAO,QAAQ,gBAAgB,OAAO;AAAA,QACxC;AAEA,eAAO,QAAQ,gBAAgB,GAAG,OAAO;AAAA,CAAI;AAAA,MAC/C,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAKO,SAAS,kBAAyC;AAAA,EACvD;AAAA,EACA;AACF,GAGG;AACD,QAAM,mBAAmB,SAAS,OAAO,OAAO;AAEhD,MAAI,CAAC,iBAAiB,QAAQ;AAC5B,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,iBAAiB,OAAO,CAAC,MAAM,IAAI,UAAU,OAAO;AAC/D,WAAO,GAAG,GAAG;AAAA,KAAQ,OAAO;AAAA,EAC9B,GAAG,GAAG;AAGN,SAAO,GAAG,2BAA2B,EAAE,GAAG,KAAK,GAAG,GAAG,WAAW,wBAAwB,GAAG,QAAQ,GAAG;AAAA,GAAM,IAAI;AAClH;AAEO,SAAS,qBACd,MACA;AAAA,EACE,WAAAD;AAAA,EACA,YAAY;AAAA,EACZ,YAAY,QAAQ,sBAAsB,GAAG,WAAW,aAAa;AACvE,IAKI,CAAC,GACL;AACA,SAAO,QAAQ,qBAAqBA,YAAW,CAAC,yBAAyB,WAAW,EAAE,MAAM,UAAU,CAAC,CAAC,GAAG,IAAI;AACjH;AAEO,SAAS,2BAA2B;AAAA,EACzC,WAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,SAAO,QAAQ,2BAA2BA,YAAW,MAAM,gBAAgB,IAAI;AACjF;AAEO,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA;AACF,GAGG;AACD,SAAO,QAAQ;AAAA,IACb,CAAC,QAAQ,YAAY,GAAG,WAAW,aAAa,CAAC;AAAA,IACjD,QAAQ,iBAAiB,IAAI;AAAA,IAC7B,QAAQ,kBAAkB,UAAU;AAAA,IACpC,GAAG,UAAU;AAAA,EACf;AACF;AAMO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,cAAc;AAChB,GAKG;AACD,MAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,QAAI,qBAAgD,QAAQ,iBAAiB,IAAI;AACjF,QAAI,aAAiD;AAErD,QAAI,aAAa;AACf,2BAAqB;AACrB,mBAAa,QAAQ,sBAAsB,QAAQ,iBAAiB,IAAI,CAAC;AAAA,IAC3E;AAEA,WAAO,QAAQ;AAAA,MACb;AAAA,MACA,QAAQ,mBAAmB,YAAY,oBAAoB,UAAU;AAAA,MACrE,QAAQ,oBAAoB,IAAI;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEA,SAAO,QAAQ;AAAA,IACb;AAAA,IACA,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,QACN,KAAK,IAAI,CAAC,SAAS;AACjB,cAAI,OAAO,SAAS,UAAU;AAC5B,kBAAM,MAAM;AACZ,gBAAI,IAAI,MAAM;AACZ,qBAAO,QAAQ,sBAAsB,OAAO,QAAQ,iBAAiB,IAAI,YAAY,GAAG,QAAQ,iBAAiB,IAAI,IAAI,CAAC;AAAA,YAC5H;AAEA,mBAAO,QAAQ,sBAAsB,OAAO,QAAW,QAAQ,iBAAiB,IAAI,YAAY,CAAC;AAAA,UACnG;AAEA,iBAAO,QAAQ,sBAAsB,OAAO,QAAW,QAAQ,iBAAiB,IAAI,CAAC;AAAA,QACvF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,QAAQ,oBAAoB,IAAI;AAAA,IAChC;AAAA,EACF;AACF;AAEO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AACF,GAKG;AACD,MAAI,QAAQ,CAAC,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS;AAC5C,YAAQ,KAAK,qDAAqD,IAAI,EAAE;AAAA,EAC1E;AAEA,MAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,UAAM,aAAa,MAAM,MAAM,KAAK,IAAI,IAAI,MAAM,MAAM,CAAC,CAAC,KAAK;AAE/D,WAAO,QAAQ;AAAA,MACb;AAAA,MACA;AAAA,MACA,WAAW,aAAa,QAAQ,sBAAsB,QAAQ,iBAAiB,UAAU,CAAC,IAAI;AAAA,MAC9F,QAAQ,oBAAoB,IAAI;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEA,SAAO,QAAQ;AAAA,IACb;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,MACN,KAAK,IAAI,CAACE,kBAAiB;AACzB,eAAO,QAAQ,sBAAsB,OAAO,QAAW,OAAOA,kBAAiB,WAAW,QAAQ,iBAAiBA,aAAY,IAAIA,aAAY;AAAA,MACjJ,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,oBAAoB,IAAI;AAAA,IAChC;AAAA,EACF;AACF;AAEO,SAAS,sBAAsB;AAAA,EACpC,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AACF,GAc+C;AAC7C,MAAI,SAAS,WAAW;AACtB,WAAO;AAAA,MACL;AAAA,MACA,QAAQ;AAAA,QACN,CAAC,QAAQ,YAAY,GAAG,WAAW,aAAa,CAAC;AAAA,QACjD,QAAQ,iBAAiB,QAAQ;AAAA,QACjC;AAAA,QACA,QAAQ;AAAA,UACN,MACG,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;AACtB,gBAAI,SAAS,KAAK,GAAG;AACnB,qBAAO,QAAQ,sBAAsB,QAAQ,qBAAqB,OAAO,SAAS,CAAC,CAAC;AAAA,YACtF;AAEA,gBAAI,OAAO,UAAU,WAAW;AAC9B,qBAAO,QAAQ,sBAAsB,QAAQ,QAAQ,WAAW,IAAI,QAAQ,YAAY,CAAC;AAAA,YAC3F;AACA,gBAAI,OAAO;AACT,qBAAO,QAAQ,sBAAsB,QAAQ,oBAAoB,MAAM,SAAS,CAAC,CAAC;AAAA,YACpF;AAEA,mBAAO;AAAA,UACT,CAAC,EACA,OAAO,OAAO;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,UAAU,SAAS,aAAa;AAC3C,WAAO;AAAA,MACL;AAAA,MACA,QAAQ;AAAA,QACN,CAAC,QAAQ,YAAY,GAAG,WAAW,aAAa,GAAG,SAAS,cAAc,QAAQ,YAAY,GAAG,WAAW,YAAY,IAAI,MAAS,EAAE,OAAO,OAAO;AAAA,QACrJ,QAAQ,iBAAiB,QAAQ;AAAA,QACjC,MACG,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACrB,cAAI,cAA6B,QAAQ,oBAAoB,OAAO,SAAS,CAAC;AAE9E,cAAI,SAAS,OAAO,SAAS,MAAM,SAAS,CAAC,CAAC,GAAG;AAC/C,0BAAc,QAAQ,qBAAqB,KAAe;AAAA,UAC5D;AACA,cAAI,OAAO,UAAU,WAAW;AAC9B,0BAAc,QAAQ,QAAQ,WAAW,IAAI,QAAQ,YAAY;AAAA,UACnE;AAEA,cAAI,SAAS,OAAO,SAAS,IAAI,SAAS,CAAC,CAAC,GAAG;AAC7C,mBAAO,QAAQ,iBAAiB,QAAQ,oBAAoB,GAAG,QAAQ,IAAI,GAAG,EAAE,GAAG,WAAW;AAAA,UAChG;AAEA,cAAI,KAAK;AACP,mBAAO,QAAQ,iBAAiB,QAAQ,oBAAoB,GAAG,GAAG,EAAE,GAAG,WAAW;AAAA,UACpF;AAEA,iBAAO;AAAA,QACT,CAAC,EACA,OAAO,OAAO;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAGA,QAAM,iBAAiB,SAAS,kBAAkB,WAAW;AAE7D,SAAO;AAAA,IACL,QAAQ;AAAA,MACN,CAAC,QAAQ,YAAY,GAAG,WAAW,aAAa,CAAC;AAAA,MACjD,QAAQ;AAAA,QACN;AAAA,UACE,QAAQ;AAAA,YACN,QAAQ,iBAAiB,cAAc;AAAA,YACvC;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,cACN,QAAQ;AAAA,gBACN,MACG,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACrB,sBAAI,cAA6B,QAAQ,oBAAoB,GAAG,OAAO,SAAS,CAAC,EAAE;AAEnF,sBAAI,SAAS,KAAK,GAAG;AAKnB,wBAAI,QAAQ,GAAG;AACb,oCAAc,QAAQ,4BAA4B,GAAG,WAAW,YAAY,QAAQ,qBAAqB,KAAK,IAAI,KAAK,CAAC,CAAC;AAAA,oBAC3H,OAAO;AACL,oCAAc,QAAQ,qBAAqB,KAAK;AAAA,oBAClD;AAAA,kBACF;AAEA,sBAAI,OAAO,UAAU,WAAW;AAC9B,kCAAc,QAAQ,QAAQ,WAAW,IAAI,QAAQ,YAAY;AAAA,kBACnE;AAEA,sBAAI,KAAK;AACP,2BAAO,QAAQ,yBAAyB,QAAQ,oBAAoB,GAAG,GAAG,EAAE,GAAG,WAAW;AAAA,kBAC5F;AAEA,yBAAO;AAAA,gBACT,CAAC,EACA,OAAO,OAAO;AAAA,gBACjB;AAAA,cACF;AAAA,cACA,QAAQ,wBAAwB,QAAQ,iBAAiB,OAAO,GAAG,MAAS;AAAA,YAC9E;AAAA,UACF;AAAA,QACF;AAAA,QACA,GAAG,UAAU;AAAA,MACf;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,CAAC,QAAQ,YAAY,GAAG,WAAW,aAAa,CAAC;AAAA,MACjD,QAAQ,iBAAiB,QAAQ;AAAA,MACjC;AAAA,MACA,QAAQ;AAAA,QACN,QAAQ,wBAAwB,QAAQ,oBAAoB,QAAQ,iBAAiB,cAAc,GAAG,MAAS,CAAC;AAAA,QAChH,QAAQ,uBAAuB,GAAG,WAAW,cAAc,QAAQ,oBAAoB,QAAQ,iBAAiB,cAAc,GAAG,MAAS,CAAC;AAAA,MAC7I;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,OAAO,cAAc,QAAQ,wBAAwB,QAAQ,iBAAiB,aAAa,GAAG,CAAC,IAAI,CAAC,IAAI;AAE9G,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,WAAO,QAAQ,wBAAwB,QAAQ,iBAAiB,MAAM,GAAG;AAAA,MACvE;AAAA,MACA,QAAQ;AAAA,QACN,KAAK,IAAI,CAAC,QAAQ;AAChB,iBAAO,QAAQ,sBAAsB,QAAQ,oBAAoB,GAAG,CAAC;AAAA,QACvE,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,QAAQ,wBAAwB,QAAQ,iBAAiB,MAAM,GAAG,CAAC,MAAM,QAAQ,sBAAsB,QAAQ,oBAAoB,IAAI,CAAC,CAAC,CAAC;AACnJ;AAEO,IAAM,mBAAmB;AAAA,EAC9B,KAAK,QAAQ,sBAAsB,GAAG,WAAW,UAAU;AAAA,EAC3D,SAAS,QAAQ,sBAAsB,GAAG,WAAW,cAAc;AAAA,EACnE,QAAQ,QAAQ,sBAAsB,GAAG,WAAW,aAAa;AAAA,EACjE,SAAS,QAAQ,sBAAsB,GAAG,WAAW,aAAa;AAAA,EAClE,QAAQ,QAAQ,sBAAsB,GAAG,WAAW,aAAa;AAAA,EACjE,QAAQ,QAAQ,sBAAsB,GAAG,WAAW,aAAa;AAAA,EACjE,SAAS,QAAQ,sBAAsB,GAAG,WAAW,cAAc;AAAA,EACnE,WAAW,QAAQ,sBAAsB,GAAG,WAAW,gBAAgB;AAAA,EACvE,MAAM,QAAQ,sBAAsB,QAAQ,YAAY,GAAG,WAAW,WAAW,CAAC;AACpF;AAEO,IAAM,wBAAwB,QAAQ;AAEtC,IAAM,0BAA0B,QAAQ;AACxC,IAAM,uBAAuB,QAAQ;AACrC,IAAM,sBAAsB,QAAQ;AAEpC,IAAM,sBAAsB,QAAQ;AAEpC,IAAM,wBAAwB,QAAQ;AACtC,IAAM,aAAa,QAAQ;AAC3B,IAAM,mBAAmB,QAAQ;AAEjC,IAAM,sBAAsB,QAAQ;","names":["modifiers","questionToken","propertyName"]}
1
+ {"version":3,"sources":["../src/factory.ts"],"sourcesContent":["import { isNumber } from 'remeda'\nimport ts from 'typescript'\n\nconst { factory } = ts\n\n// https://ts-ast-viewer.com/\n\nexport const modifiers = {\n async: factory.createModifier(ts.SyntaxKind.AsyncKeyword),\n export: factory.createModifier(ts.SyntaxKind.ExportKeyword),\n const: factory.createModifier(ts.SyntaxKind.ConstKeyword),\n static: factory.createModifier(ts.SyntaxKind.StaticKeyword),\n} as const\n\nfunction isValidIdentifier(str: string): boolean {\n if (!str.length || str.trim() !== str) {\n return false\n }\n const node = ts.parseIsolatedEntityName(str, ts.ScriptTarget.Latest)\n\n return !!node && node.kind === ts.SyntaxKind.Identifier && ts.identifierToKeywordKind(node.kind as unknown as ts.Identifier) === undefined\n}\n\nfunction propertyName(name: string | ts.PropertyName): ts.PropertyName {\n if (typeof name === 'string') {\n return isValidIdentifier(name) ? factory.createIdentifier(name) : factory.createStringLiteral(name)\n }\n return name\n}\n\nconst questionToken = factory.createToken(ts.SyntaxKind.QuestionToken)\n\nexport function createQuestionToken(token?: boolean | ts.QuestionToken) {\n if (!token) {\n return undefined\n }\n if (token === true) {\n return questionToken\n }\n return token\n}\n\nexport function createIntersectionDeclaration({\n nodes,\n withParentheses,\n}: {\n nodes: Array<ts.TypeNode>\n withParentheses?: boolean\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createIntersectionTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\n/**\n * Minimum nodes length of 2\n * @example `string & number`\n */\nexport function createTupleDeclaration({\n nodes,\n withParentheses,\n}: {\n nodes: Array<ts.TypeNode>\n withParentheses?: boolean\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createTupleTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\nexport function createArrayDeclaration({\n nodes,\n}: {\n nodes: Array<ts.TypeNode>\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return factory.createTupleTypeNode([])\n }\n\n if (nodes.length === 1) {\n return factory.createArrayTypeNode(nodes.at(0)!)\n }\n\n return factory.createExpressionWithTypeArguments(factory.createIdentifier('Array'), [factory.createUnionTypeNode(nodes)])\n}\n\n/**\n * Minimum nodes length of 2\n * @example `string | number`\n */\nexport function createUnionDeclaration({\n nodes,\n withParentheses,\n}: {\n nodes: Array<ts.TypeNode>\n withParentheses?: boolean\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createUnionTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\nexport function createPropertySignature({\n readOnly,\n modifiers = [],\n name,\n questionToken,\n type,\n}: {\n readOnly?: boolean\n modifiers?: Array<ts.Modifier>\n name: ts.PropertyName | string\n questionToken?: ts.QuestionToken | boolean\n type?: ts.TypeNode\n}) {\n return factory.createPropertySignature(\n [...modifiers, readOnly ? factory.createToken(ts.SyntaxKind.ReadonlyKeyword) : undefined].filter(Boolean),\n propertyName(name),\n createQuestionToken(questionToken),\n type,\n )\n}\n\nexport function createParameterSignature(\n name: string | ts.BindingName,\n {\n modifiers,\n dotDotDotToken,\n questionToken,\n type,\n initializer,\n }: {\n decorators?: Array<ts.Decorator>\n modifiers?: Array<ts.Modifier>\n dotDotDotToken?: ts.DotDotDotToken\n questionToken?: ts.QuestionToken | boolean\n type?: ts.TypeNode\n initializer?: ts.Expression\n },\n): ts.ParameterDeclaration {\n return factory.createParameterDeclaration(modifiers, dotDotDotToken, name, createQuestionToken(questionToken), type, initializer)\n}\n\nexport function createJSDoc({ comments }: { comments: string[] }) {\n if (!comments.length) {\n return null\n }\n return factory.createJSDocComment(\n factory.createNodeArray(\n comments.map((comment, i) => {\n if (i === comments.length - 1) {\n return factory.createJSDocText(comment)\n }\n\n return factory.createJSDocText(`${comment}\\n`)\n }),\n ),\n )\n}\n\n/**\n * @link https://github.com/microsoft/TypeScript/issues/44151\n */\nexport function appendJSDocToNode<TNode extends ts.Node>({\n node,\n comments,\n}: {\n node: TNode\n comments: Array<string | undefined>\n}) {\n const filteredComments = comments.filter(Boolean)\n\n if (!filteredComments.length) {\n return node\n }\n\n const text = filteredComments.reduce((acc = '', comment = '') => {\n return `${acc}\\n * ${comment}`\n }, '*')\n\n // node: {...node}, with that ts.addSyntheticLeadingComment is appending\n return ts.addSyntheticLeadingComment({ ...node }, ts.SyntaxKind.MultiLineCommentTrivia, `${text || '*'}\\n`, true)\n}\n\nexport function createIndexSignature(\n type: ts.TypeNode,\n {\n modifiers,\n indexName = 'key',\n indexType = factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n }: {\n indexName?: string\n indexType?: ts.TypeNode\n decorators?: Array<ts.Decorator>\n modifiers?: Array<ts.Modifier>\n } = {},\n) {\n return factory.createIndexSignature(modifiers, [createParameterSignature(indexName, { type: indexType })], type)\n}\n\nexport function createTypeAliasDeclaration({\n modifiers,\n name,\n typeParameters,\n type,\n}: {\n modifiers?: Array<ts.Modifier>\n name: string | ts.Identifier\n typeParameters?: Array<ts.TypeParameterDeclaration>\n type: ts.TypeNode\n}) {\n return factory.createTypeAliasDeclaration(modifiers, name, typeParameters, type)\n}\n\nexport function createNamespaceDeclaration({\n statements,\n name,\n}: {\n name: string\n statements: ts.Statement[]\n}) {\n return factory.createModuleDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(name),\n factory.createModuleBlock(statements),\n ts.NodeFlags.Namespace,\n )\n}\n\n/**\n * In { propertyName: string; name?: string } is `name` being used to make the type more unique when multiple same names are used.\n * @example `import { Pet as Cat } from './Pet'`\n */\nexport function createImportDeclaration({\n name,\n path,\n isTypeOnly = false,\n isNameSpace = false,\n}: {\n name: string | Array<string | { propertyName: string; name?: string }>\n path: string\n isTypeOnly?: boolean\n isNameSpace?: boolean\n}) {\n if (!Array.isArray(name)) {\n let importPropertyName: ts.Identifier | undefined = factory.createIdentifier(name)\n let importName: ts.NamedImportBindings | undefined = undefined\n\n if (isNameSpace) {\n importPropertyName = undefined\n importName = factory.createNamespaceImport(factory.createIdentifier(name))\n }\n\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(isTypeOnly, importPropertyName, importName),\n factory.createStringLiteral(path),\n undefined,\n )\n }\n\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(\n isTypeOnly,\n undefined,\n factory.createNamedImports(\n name.map((item) => {\n if (typeof item === 'object') {\n const obj = item as { propertyName: string; name?: string }\n if (obj.name) {\n return factory.createImportSpecifier(false, factory.createIdentifier(obj.propertyName), factory.createIdentifier(obj.name))\n }\n\n return factory.createImportSpecifier(false, undefined, factory.createIdentifier(obj.propertyName))\n }\n\n return factory.createImportSpecifier(false, undefined, factory.createIdentifier(item))\n }),\n ),\n ),\n factory.createStringLiteral(path),\n undefined,\n )\n}\n\nexport function createExportDeclaration({\n path,\n asAlias,\n isTypeOnly = false,\n name,\n}: {\n path: string\n asAlias?: boolean\n isTypeOnly?: boolean\n name?: string | Array<ts.Identifier | string>\n}) {\n if (name && !Array.isArray(name) && !asAlias) {\n console.warn(`When using name as string, asAlias should be true ${name}`)\n }\n\n if (!Array.isArray(name)) {\n const parsedName = name?.match(/^\\d/) ? `_${name?.slice(1)}` : name\n\n return factory.createExportDeclaration(\n undefined,\n isTypeOnly,\n asAlias && parsedName ? factory.createNamespaceExport(factory.createIdentifier(parsedName)) : undefined,\n factory.createStringLiteral(path),\n undefined,\n )\n }\n\n return factory.createExportDeclaration(\n undefined,\n isTypeOnly,\n factory.createNamedExports(\n name.map((propertyName) => {\n return factory.createExportSpecifier(false, undefined, typeof propertyName === 'string' ? factory.createIdentifier(propertyName) : propertyName)\n }),\n ),\n factory.createStringLiteral(path),\n undefined,\n )\n}\n\nexport function createEnumDeclaration({\n type = 'enum',\n name,\n typeName,\n enums,\n}: {\n /**\n * @default `'enum'`\n */\n type?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal'\n /**\n * Enum name in camelCase.\n */\n name: string\n /**\n * Enum name in PascalCase.\n */\n typeName: string\n enums: [key: string | number, value: string | number | boolean][]\n}): [name: ts.Node | undefined, type: ts.Node] {\n if (type === 'literal') {\n return [\n undefined,\n factory.createTypeAliasDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(typeName),\n undefined,\n factory.createUnionTypeNode(\n enums\n .map(([_key, value]) => {\n if (isNumber(value)) {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(value?.toString()))\n }\n\n if (typeof value === 'boolean') {\n return factory.createLiteralTypeNode(value ? factory.createTrue() : factory.createFalse())\n }\n if (value) {\n return factory.createLiteralTypeNode(factory.createStringLiteral(value.toString()))\n }\n\n return undefined\n })\n .filter(Boolean),\n ),\n ),\n ]\n }\n\n if (type === 'enum' || type === 'constEnum') {\n return [\n undefined,\n factory.createEnumDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword), type === 'constEnum' ? factory.createToken(ts.SyntaxKind.ConstKeyword) : undefined].filter(Boolean),\n factory.createIdentifier(typeName),\n enums\n .map(([key, value]) => {\n let initializer: ts.Expression = factory.createStringLiteral(value?.toString())\n\n if (isNumber(Number.parseInt(value.toString()))) {\n initializer = factory.createNumericLiteral(value as number)\n }\n if (typeof value === 'boolean') {\n initializer = value ? factory.createTrue() : factory.createFalse()\n }\n\n if (isNumber(Number.parseInt(key.toString()))) {\n return factory.createEnumMember(factory.createStringLiteral(`${typeName}_${key}`), initializer)\n }\n\n if (key) {\n return factory.createEnumMember(factory.createStringLiteral(`${key}`), initializer)\n }\n\n return undefined\n })\n .filter(Boolean),\n ),\n ]\n }\n\n // used when using `as const` instead of an TypeScript enum.\n const identifierName = type === 'asPascalConst' ? typeName : name\n\n return [\n factory.createVariableStatement(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier(identifierName),\n undefined,\n undefined,\n factory.createAsExpression(\n factory.createObjectLiteralExpression(\n enums\n .map(([key, value]) => {\n let initializer: ts.Expression = factory.createStringLiteral(`${value?.toString()}`)\n\n if (isNumber(value)) {\n // Error: Negative numbers should be created in combination with createPrefixUnaryExpression factory.\n // The method createNumericLiteral only accepts positive numbers\n // or those combined with createPrefixUnaryExpression.\n // Therefore, we need to ensure that the number is not negative.\n if (value < 0) {\n initializer = factory.createPrefixUnaryExpression(ts.SyntaxKind.MinusToken, factory.createNumericLiteral(Math.abs(value)))\n } else {\n initializer = factory.createNumericLiteral(value)\n }\n }\n\n if (typeof value === 'boolean') {\n initializer = value ? factory.createTrue() : factory.createFalse()\n }\n\n if (key) {\n return factory.createPropertyAssignment(factory.createStringLiteral(`${key}`), initializer)\n }\n\n return undefined\n })\n .filter(Boolean),\n true,\n ),\n factory.createTypeReferenceNode(factory.createIdentifier('const'), undefined),\n ),\n ),\n ],\n ts.NodeFlags.Const,\n ),\n ),\n factory.createTypeAliasDeclaration(\n type === 'asPascalConst' ? [] : [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(typeName),\n undefined,\n factory.createIndexedAccessTypeNode(\n factory.createParenthesizedType(factory.createTypeQueryNode(factory.createIdentifier(identifierName), undefined)),\n factory.createTypeOperatorNode(ts.SyntaxKind.KeyOfKeyword, factory.createTypeQueryNode(factory.createIdentifier(identifierName), undefined)),\n ),\n ),\n ]\n}\n\nexport function createOmitDeclaration({\n keys,\n type,\n nonNullable,\n}: {\n keys: Array<string> | string\n type: ts.TypeNode\n nonNullable?: boolean\n}) {\n const node = nonNullable ? factory.createTypeReferenceNode(factory.createIdentifier('NonNullable'), [type]) : type\n\n if (Array.isArray(keys)) {\n return factory.createTypeReferenceNode(factory.createIdentifier('Omit'), [\n node,\n factory.createUnionTypeNode(\n keys.map((key) => {\n return factory.createLiteralTypeNode(factory.createStringLiteral(key))\n }),\n ),\n ])\n }\n\n return factory.createTypeReferenceNode(factory.createIdentifier('Omit'), [node, factory.createLiteralTypeNode(factory.createStringLiteral(keys))])\n}\n\nexport const keywordTypeNodes = {\n any: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n unknown: factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),\n number: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n integer: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n object: factory.createKeywordTypeNode(ts.SyntaxKind.ObjectKeyword),\n string: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n boolean: factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword),\n undefined: factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword),\n null: factory.createLiteralTypeNode(factory.createToken(ts.SyntaxKind.NullKeyword)),\n} as const\n\nexport const createTypeLiteralNode = factory.createTypeLiteralNode\n\nexport const createTypeReferenceNode = factory.createTypeReferenceNode\nexport const createNumericLiteral = factory.createNumericLiteral\nexport const createStringLiteral = factory.createStringLiteral\n\nexport const createArrayTypeNode = factory.createArrayTypeNode\n\nexport const createLiteralTypeNode = factory.createLiteralTypeNode\nexport const createNull = factory.createNull\nexport const createIdentifier = factory.createIdentifier\n\nexport const createTupleTypeNode = factory.createTupleTypeNode\n"],"mappings":"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","names":["modifiers","questionToken","propertyName"]}
@@ -373,7 +373,7 @@ function createEnumDeclaration({
373
373
  )
374
374
  ),
375
375
  factory.createTypeAliasDeclaration(
376
- [factory.createToken(_typescript2.default.SyntaxKind.ExportKeyword)],
376
+ type === "asPascalConst" ? [] : [factory.createToken(_typescript2.default.SyntaxKind.ExportKeyword)],
377
377
  factory.createIdentifier(typeName),
378
378
  void 0,
379
379
  factory.createIndexedAccessTypeNode(
@@ -452,4 +452,4 @@ var createTupleTypeNode = factory.createTupleTypeNode;
452
452
 
453
453
 
454
454
  exports.modifiers = modifiers; exports.createQuestionToken = createQuestionToken; exports.createIntersectionDeclaration = createIntersectionDeclaration; exports.createTupleDeclaration = createTupleDeclaration; exports.createArrayDeclaration = createArrayDeclaration; exports.createUnionDeclaration = createUnionDeclaration; exports.createPropertySignature = createPropertySignature; exports.createParameterSignature = createParameterSignature; exports.createJSDoc = createJSDoc; exports.appendJSDocToNode = appendJSDocToNode; exports.createIndexSignature = createIndexSignature; exports.createTypeAliasDeclaration = createTypeAliasDeclaration; exports.createNamespaceDeclaration = createNamespaceDeclaration; exports.createImportDeclaration = createImportDeclaration; exports.createExportDeclaration = createExportDeclaration; exports.createEnumDeclaration = createEnumDeclaration; exports.createOmitDeclaration = createOmitDeclaration; exports.keywordTypeNodes = keywordTypeNodes; exports.createTypeLiteralNode = createTypeLiteralNode; exports.createTypeReferenceNode = createTypeReferenceNode; exports.createNumericLiteral = createNumericLiteral; exports.createStringLiteral = createStringLiteral; exports.createArrayTypeNode = createArrayTypeNode; exports.createLiteralTypeNode = createLiteralTypeNode; exports.createNull = createNull; exports.createIdentifier = createIdentifier; exports.createTupleTypeNode = createTupleTypeNode; exports.factory_exports = factory_exports;
455
- //# sourceMappingURL=chunk-KWWQXE3U.cjs.map
455
+ //# sourceMappingURL=chunk-TNIGP6OU.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/kubb/kubb/packages/parser-ts/dist/chunk-KWWQXE3U.cjs","../src/factory.ts"],"names":["modifiers","questionToken"],"mappings":"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","file":"/home/runner/work/kubb/kubb/packages/parser-ts/dist/chunk-KWWQXE3U.cjs","sourcesContent":[null,"import { isNumber } from 'remeda'\nimport ts from 'typescript'\n\nconst { factory } = ts\n\n// https://ts-ast-viewer.com/\n\nexport const modifiers = {\n async: factory.createModifier(ts.SyntaxKind.AsyncKeyword),\n export: factory.createModifier(ts.SyntaxKind.ExportKeyword),\n const: factory.createModifier(ts.SyntaxKind.ConstKeyword),\n static: factory.createModifier(ts.SyntaxKind.StaticKeyword),\n} as const\n\nfunction isValidIdentifier(str: string): boolean {\n if (!str.length || str.trim() !== str) {\n return false\n }\n const node = ts.parseIsolatedEntityName(str, ts.ScriptTarget.Latest)\n\n return !!node && node.kind === ts.SyntaxKind.Identifier && ts.identifierToKeywordKind(node.kind as unknown as ts.Identifier) === undefined\n}\n\nfunction propertyName(name: string | ts.PropertyName): ts.PropertyName {\n if (typeof name === 'string') {\n return isValidIdentifier(name) ? factory.createIdentifier(name) : factory.createStringLiteral(name)\n }\n return name\n}\n\nconst questionToken = factory.createToken(ts.SyntaxKind.QuestionToken)\n\nexport function createQuestionToken(token?: boolean | ts.QuestionToken) {\n if (!token) {\n return undefined\n }\n if (token === true) {\n return questionToken\n }\n return token\n}\n\nexport function createIntersectionDeclaration({\n nodes,\n withParentheses,\n}: {\n nodes: Array<ts.TypeNode>\n withParentheses?: boolean\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createIntersectionTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\n/**\n * Minimum nodes length of 2\n * @example `string & number`\n */\nexport function createTupleDeclaration({\n nodes,\n withParentheses,\n}: {\n nodes: Array<ts.TypeNode>\n withParentheses?: boolean\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createTupleTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\nexport function createArrayDeclaration({\n nodes,\n}: {\n nodes: Array<ts.TypeNode>\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return factory.createTupleTypeNode([])\n }\n\n if (nodes.length === 1) {\n return factory.createArrayTypeNode(nodes.at(0)!)\n }\n\n return factory.createExpressionWithTypeArguments(factory.createIdentifier('Array'), [factory.createUnionTypeNode(nodes)])\n}\n\n/**\n * Minimum nodes length of 2\n * @example `string | number`\n */\nexport function createUnionDeclaration({\n nodes,\n withParentheses,\n}: {\n nodes: Array<ts.TypeNode>\n withParentheses?: boolean\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createUnionTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\nexport function createPropertySignature({\n readOnly,\n modifiers = [],\n name,\n questionToken,\n type,\n}: {\n readOnly?: boolean\n modifiers?: Array<ts.Modifier>\n name: ts.PropertyName | string\n questionToken?: ts.QuestionToken | boolean\n type?: ts.TypeNode\n}) {\n return factory.createPropertySignature(\n [...modifiers, readOnly ? factory.createToken(ts.SyntaxKind.ReadonlyKeyword) : undefined].filter(Boolean),\n propertyName(name),\n createQuestionToken(questionToken),\n type,\n )\n}\n\nexport function createParameterSignature(\n name: string | ts.BindingName,\n {\n modifiers,\n dotDotDotToken,\n questionToken,\n type,\n initializer,\n }: {\n decorators?: Array<ts.Decorator>\n modifiers?: Array<ts.Modifier>\n dotDotDotToken?: ts.DotDotDotToken\n questionToken?: ts.QuestionToken | boolean\n type?: ts.TypeNode\n initializer?: ts.Expression\n },\n): ts.ParameterDeclaration {\n return factory.createParameterDeclaration(modifiers, dotDotDotToken, name, createQuestionToken(questionToken), type, initializer)\n}\n\nexport function createJSDoc({ comments }: { comments: string[] }) {\n if (!comments.length) {\n return null\n }\n return factory.createJSDocComment(\n factory.createNodeArray(\n comments.map((comment, i) => {\n if (i === comments.length - 1) {\n return factory.createJSDocText(comment)\n }\n\n return factory.createJSDocText(`${comment}\\n`)\n }),\n ),\n )\n}\n\n/**\n * @link https://github.com/microsoft/TypeScript/issues/44151\n */\nexport function appendJSDocToNode<TNode extends ts.Node>({\n node,\n comments,\n}: {\n node: TNode\n comments: Array<string | undefined>\n}) {\n const filteredComments = comments.filter(Boolean)\n\n if (!filteredComments.length) {\n return node\n }\n\n const text = filteredComments.reduce((acc = '', comment = '') => {\n return `${acc}\\n * ${comment}`\n }, '*')\n\n // node: {...node}, with that ts.addSyntheticLeadingComment is appending\n return ts.addSyntheticLeadingComment({ ...node }, ts.SyntaxKind.MultiLineCommentTrivia, `${text || '*'}\\n`, true)\n}\n\nexport function createIndexSignature(\n type: ts.TypeNode,\n {\n modifiers,\n indexName = 'key',\n indexType = factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n }: {\n indexName?: string\n indexType?: ts.TypeNode\n decorators?: Array<ts.Decorator>\n modifiers?: Array<ts.Modifier>\n } = {},\n) {\n return factory.createIndexSignature(modifiers, [createParameterSignature(indexName, { type: indexType })], type)\n}\n\nexport function createTypeAliasDeclaration({\n modifiers,\n name,\n typeParameters,\n type,\n}: {\n modifiers?: Array<ts.Modifier>\n name: string | ts.Identifier\n typeParameters?: Array<ts.TypeParameterDeclaration>\n type: ts.TypeNode\n}) {\n return factory.createTypeAliasDeclaration(modifiers, name, typeParameters, type)\n}\n\nexport function createNamespaceDeclaration({\n statements,\n name,\n}: {\n name: string\n statements: ts.Statement[]\n}) {\n return factory.createModuleDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(name),\n factory.createModuleBlock(statements),\n ts.NodeFlags.Namespace,\n )\n}\n\n/**\n * In { propertyName: string; name?: string } is `name` being used to make the type more unique when multiple same names are used.\n * @example `import { Pet as Cat } from './Pet'`\n */\nexport function createImportDeclaration({\n name,\n path,\n isTypeOnly = false,\n isNameSpace = false,\n}: {\n name: string | Array<string | { propertyName: string; name?: string }>\n path: string\n isTypeOnly?: boolean\n isNameSpace?: boolean\n}) {\n if (!Array.isArray(name)) {\n let importPropertyName: ts.Identifier | undefined = factory.createIdentifier(name)\n let importName: ts.NamedImportBindings | undefined = undefined\n\n if (isNameSpace) {\n importPropertyName = undefined\n importName = factory.createNamespaceImport(factory.createIdentifier(name))\n }\n\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(isTypeOnly, importPropertyName, importName),\n factory.createStringLiteral(path),\n undefined,\n )\n }\n\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(\n isTypeOnly,\n undefined,\n factory.createNamedImports(\n name.map((item) => {\n if (typeof item === 'object') {\n const obj = item as { propertyName: string; name?: string }\n if (obj.name) {\n return factory.createImportSpecifier(false, factory.createIdentifier(obj.propertyName), factory.createIdentifier(obj.name))\n }\n\n return factory.createImportSpecifier(false, undefined, factory.createIdentifier(obj.propertyName))\n }\n\n return factory.createImportSpecifier(false, undefined, factory.createIdentifier(item))\n }),\n ),\n ),\n factory.createStringLiteral(path),\n undefined,\n )\n}\n\nexport function createExportDeclaration({\n path,\n asAlias,\n isTypeOnly = false,\n name,\n}: {\n path: string\n asAlias?: boolean\n isTypeOnly?: boolean\n name?: string | Array<ts.Identifier | string>\n}) {\n if (name && !Array.isArray(name) && !asAlias) {\n console.warn(`When using name as string, asAlias should be true ${name}`)\n }\n\n if (!Array.isArray(name)) {\n const parsedName = name?.match(/^\\d/) ? `_${name?.slice(1)}` : name\n\n return factory.createExportDeclaration(\n undefined,\n isTypeOnly,\n asAlias && parsedName ? factory.createNamespaceExport(factory.createIdentifier(parsedName)) : undefined,\n factory.createStringLiteral(path),\n undefined,\n )\n }\n\n return factory.createExportDeclaration(\n undefined,\n isTypeOnly,\n factory.createNamedExports(\n name.map((propertyName) => {\n return factory.createExportSpecifier(false, undefined, typeof propertyName === 'string' ? factory.createIdentifier(propertyName) : propertyName)\n }),\n ),\n factory.createStringLiteral(path),\n undefined,\n )\n}\n\nexport function createEnumDeclaration({\n type = 'enum',\n name,\n typeName,\n enums,\n}: {\n /**\n * @default `'enum'`\n */\n type?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal'\n /**\n * Enum name in camelCase.\n */\n name: string\n /**\n * Enum name in PascalCase.\n */\n typeName: string\n enums: [key: string | number, value: string | number | boolean][]\n}): [name: ts.Node | undefined, type: ts.Node] {\n if (type === 'literal') {\n return [\n undefined,\n factory.createTypeAliasDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(typeName),\n undefined,\n factory.createUnionTypeNode(\n enums\n .map(([_key, value]) => {\n if (isNumber(value)) {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(value?.toString()))\n }\n\n if (typeof value === 'boolean') {\n return factory.createLiteralTypeNode(value ? factory.createTrue() : factory.createFalse())\n }\n if (value) {\n return factory.createLiteralTypeNode(factory.createStringLiteral(value.toString()))\n }\n\n return undefined\n })\n .filter(Boolean),\n ),\n ),\n ]\n }\n\n if (type === 'enum' || type === 'constEnum') {\n return [\n undefined,\n factory.createEnumDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword), type === 'constEnum' ? factory.createToken(ts.SyntaxKind.ConstKeyword) : undefined].filter(Boolean),\n factory.createIdentifier(typeName),\n enums\n .map(([key, value]) => {\n let initializer: ts.Expression = factory.createStringLiteral(value?.toString())\n\n if (isNumber(Number.parseInt(value.toString()))) {\n initializer = factory.createNumericLiteral(value as number)\n }\n if (typeof value === 'boolean') {\n initializer = value ? factory.createTrue() : factory.createFalse()\n }\n\n if (isNumber(Number.parseInt(key.toString()))) {\n return factory.createEnumMember(factory.createStringLiteral(`${typeName}_${key}`), initializer)\n }\n\n if (key) {\n return factory.createEnumMember(factory.createStringLiteral(`${key}`), initializer)\n }\n\n return undefined\n })\n .filter(Boolean),\n ),\n ]\n }\n\n // used when using `as const` instead of an TypeScript enum.\n const identifierName = type === 'asPascalConst' ? typeName : name\n\n return [\n factory.createVariableStatement(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier(identifierName),\n undefined,\n undefined,\n factory.createAsExpression(\n factory.createObjectLiteralExpression(\n enums\n .map(([key, value]) => {\n let initializer: ts.Expression = factory.createStringLiteral(`${value?.toString()}`)\n\n if (isNumber(value)) {\n // Error: Negative numbers should be created in combination with createPrefixUnaryExpression factory.\n // The method createNumericLiteral only accepts positive numbers\n // or those combined with createPrefixUnaryExpression.\n // Therefore, we need to ensure that the number is not negative.\n if (value < 0) {\n initializer = factory.createPrefixUnaryExpression(ts.SyntaxKind.MinusToken, factory.createNumericLiteral(Math.abs(value)))\n } else {\n initializer = factory.createNumericLiteral(value)\n }\n }\n\n if (typeof value === 'boolean') {\n initializer = value ? factory.createTrue() : factory.createFalse()\n }\n\n if (key) {\n return factory.createPropertyAssignment(factory.createStringLiteral(`${key}`), initializer)\n }\n\n return undefined\n })\n .filter(Boolean),\n true,\n ),\n factory.createTypeReferenceNode(factory.createIdentifier('const'), undefined),\n ),\n ),\n ],\n ts.NodeFlags.Const,\n ),\n ),\n factory.createTypeAliasDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(typeName),\n undefined,\n factory.createIndexedAccessTypeNode(\n factory.createParenthesizedType(factory.createTypeQueryNode(factory.createIdentifier(identifierName), undefined)),\n factory.createTypeOperatorNode(ts.SyntaxKind.KeyOfKeyword, factory.createTypeQueryNode(factory.createIdentifier(identifierName), undefined)),\n ),\n ),\n ]\n}\n\nexport function createOmitDeclaration({\n keys,\n type,\n nonNullable,\n}: {\n keys: Array<string> | string\n type: ts.TypeNode\n nonNullable?: boolean\n}) {\n const node = nonNullable ? factory.createTypeReferenceNode(factory.createIdentifier('NonNullable'), [type]) : type\n\n if (Array.isArray(keys)) {\n return factory.createTypeReferenceNode(factory.createIdentifier('Omit'), [\n node,\n factory.createUnionTypeNode(\n keys.map((key) => {\n return factory.createLiteralTypeNode(factory.createStringLiteral(key))\n }),\n ),\n ])\n }\n\n return factory.createTypeReferenceNode(factory.createIdentifier('Omit'), [node, factory.createLiteralTypeNode(factory.createStringLiteral(keys))])\n}\n\nexport const keywordTypeNodes = {\n any: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n unknown: factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),\n number: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n integer: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n object: factory.createKeywordTypeNode(ts.SyntaxKind.ObjectKeyword),\n string: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n boolean: factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword),\n undefined: factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword),\n null: factory.createLiteralTypeNode(factory.createToken(ts.SyntaxKind.NullKeyword)),\n} as const\n\nexport const createTypeLiteralNode = factory.createTypeLiteralNode\n\nexport const createTypeReferenceNode = factory.createTypeReferenceNode\nexport const createNumericLiteral = factory.createNumericLiteral\nexport const createStringLiteral = factory.createStringLiteral\n\nexport const createArrayTypeNode = factory.createArrayTypeNode\n\nexport const createLiteralTypeNode = factory.createLiteralTypeNode\nexport const createNull = factory.createNull\nexport const createIdentifier = factory.createIdentifier\n\nexport const createTupleTypeNode = factory.createTupleTypeNode\n"]}
1
+ {"version":3,"sources":["/home/runner/work/kubb/kubb/packages/parser-ts/dist/chunk-TNIGP6OU.cjs","../src/factory.ts"],"names":["modifiers","questionToken"],"mappings":"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","file":"/home/runner/work/kubb/kubb/packages/parser-ts/dist/chunk-TNIGP6OU.cjs","sourcesContent":[null,"import { isNumber } from 'remeda'\nimport ts from 'typescript'\n\nconst { factory } = ts\n\n// https://ts-ast-viewer.com/\n\nexport const modifiers = {\n async: factory.createModifier(ts.SyntaxKind.AsyncKeyword),\n export: factory.createModifier(ts.SyntaxKind.ExportKeyword),\n const: factory.createModifier(ts.SyntaxKind.ConstKeyword),\n static: factory.createModifier(ts.SyntaxKind.StaticKeyword),\n} as const\n\nfunction isValidIdentifier(str: string): boolean {\n if (!str.length || str.trim() !== str) {\n return false\n }\n const node = ts.parseIsolatedEntityName(str, ts.ScriptTarget.Latest)\n\n return !!node && node.kind === ts.SyntaxKind.Identifier && ts.identifierToKeywordKind(node.kind as unknown as ts.Identifier) === undefined\n}\n\nfunction propertyName(name: string | ts.PropertyName): ts.PropertyName {\n if (typeof name === 'string') {\n return isValidIdentifier(name) ? factory.createIdentifier(name) : factory.createStringLiteral(name)\n }\n return name\n}\n\nconst questionToken = factory.createToken(ts.SyntaxKind.QuestionToken)\n\nexport function createQuestionToken(token?: boolean | ts.QuestionToken) {\n if (!token) {\n return undefined\n }\n if (token === true) {\n return questionToken\n }\n return token\n}\n\nexport function createIntersectionDeclaration({\n nodes,\n withParentheses,\n}: {\n nodes: Array<ts.TypeNode>\n withParentheses?: boolean\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createIntersectionTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\n/**\n * Minimum nodes length of 2\n * @example `string & number`\n */\nexport function createTupleDeclaration({\n nodes,\n withParentheses,\n}: {\n nodes: Array<ts.TypeNode>\n withParentheses?: boolean\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createTupleTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\nexport function createArrayDeclaration({\n nodes,\n}: {\n nodes: Array<ts.TypeNode>\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return factory.createTupleTypeNode([])\n }\n\n if (nodes.length === 1) {\n return factory.createArrayTypeNode(nodes.at(0)!)\n }\n\n return factory.createExpressionWithTypeArguments(factory.createIdentifier('Array'), [factory.createUnionTypeNode(nodes)])\n}\n\n/**\n * Minimum nodes length of 2\n * @example `string | number`\n */\nexport function createUnionDeclaration({\n nodes,\n withParentheses,\n}: {\n nodes: Array<ts.TypeNode>\n withParentheses?: boolean\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createUnionTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\nexport function createPropertySignature({\n readOnly,\n modifiers = [],\n name,\n questionToken,\n type,\n}: {\n readOnly?: boolean\n modifiers?: Array<ts.Modifier>\n name: ts.PropertyName | string\n questionToken?: ts.QuestionToken | boolean\n type?: ts.TypeNode\n}) {\n return factory.createPropertySignature(\n [...modifiers, readOnly ? factory.createToken(ts.SyntaxKind.ReadonlyKeyword) : undefined].filter(Boolean),\n propertyName(name),\n createQuestionToken(questionToken),\n type,\n )\n}\n\nexport function createParameterSignature(\n name: string | ts.BindingName,\n {\n modifiers,\n dotDotDotToken,\n questionToken,\n type,\n initializer,\n }: {\n decorators?: Array<ts.Decorator>\n modifiers?: Array<ts.Modifier>\n dotDotDotToken?: ts.DotDotDotToken\n questionToken?: ts.QuestionToken | boolean\n type?: ts.TypeNode\n initializer?: ts.Expression\n },\n): ts.ParameterDeclaration {\n return factory.createParameterDeclaration(modifiers, dotDotDotToken, name, createQuestionToken(questionToken), type, initializer)\n}\n\nexport function createJSDoc({ comments }: { comments: string[] }) {\n if (!comments.length) {\n return null\n }\n return factory.createJSDocComment(\n factory.createNodeArray(\n comments.map((comment, i) => {\n if (i === comments.length - 1) {\n return factory.createJSDocText(comment)\n }\n\n return factory.createJSDocText(`${comment}\\n`)\n }),\n ),\n )\n}\n\n/**\n * @link https://github.com/microsoft/TypeScript/issues/44151\n */\nexport function appendJSDocToNode<TNode extends ts.Node>({\n node,\n comments,\n}: {\n node: TNode\n comments: Array<string | undefined>\n}) {\n const filteredComments = comments.filter(Boolean)\n\n if (!filteredComments.length) {\n return node\n }\n\n const text = filteredComments.reduce((acc = '', comment = '') => {\n return `${acc}\\n * ${comment}`\n }, '*')\n\n // node: {...node}, with that ts.addSyntheticLeadingComment is appending\n return ts.addSyntheticLeadingComment({ ...node }, ts.SyntaxKind.MultiLineCommentTrivia, `${text || '*'}\\n`, true)\n}\n\nexport function createIndexSignature(\n type: ts.TypeNode,\n {\n modifiers,\n indexName = 'key',\n indexType = factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n }: {\n indexName?: string\n indexType?: ts.TypeNode\n decorators?: Array<ts.Decorator>\n modifiers?: Array<ts.Modifier>\n } = {},\n) {\n return factory.createIndexSignature(modifiers, [createParameterSignature(indexName, { type: indexType })], type)\n}\n\nexport function createTypeAliasDeclaration({\n modifiers,\n name,\n typeParameters,\n type,\n}: {\n modifiers?: Array<ts.Modifier>\n name: string | ts.Identifier\n typeParameters?: Array<ts.TypeParameterDeclaration>\n type: ts.TypeNode\n}) {\n return factory.createTypeAliasDeclaration(modifiers, name, typeParameters, type)\n}\n\nexport function createNamespaceDeclaration({\n statements,\n name,\n}: {\n name: string\n statements: ts.Statement[]\n}) {\n return factory.createModuleDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(name),\n factory.createModuleBlock(statements),\n ts.NodeFlags.Namespace,\n )\n}\n\n/**\n * In { propertyName: string; name?: string } is `name` being used to make the type more unique when multiple same names are used.\n * @example `import { Pet as Cat } from './Pet'`\n */\nexport function createImportDeclaration({\n name,\n path,\n isTypeOnly = false,\n isNameSpace = false,\n}: {\n name: string | Array<string | { propertyName: string; name?: string }>\n path: string\n isTypeOnly?: boolean\n isNameSpace?: boolean\n}) {\n if (!Array.isArray(name)) {\n let importPropertyName: ts.Identifier | undefined = factory.createIdentifier(name)\n let importName: ts.NamedImportBindings | undefined = undefined\n\n if (isNameSpace) {\n importPropertyName = undefined\n importName = factory.createNamespaceImport(factory.createIdentifier(name))\n }\n\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(isTypeOnly, importPropertyName, importName),\n factory.createStringLiteral(path),\n undefined,\n )\n }\n\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(\n isTypeOnly,\n undefined,\n factory.createNamedImports(\n name.map((item) => {\n if (typeof item === 'object') {\n const obj = item as { propertyName: string; name?: string }\n if (obj.name) {\n return factory.createImportSpecifier(false, factory.createIdentifier(obj.propertyName), factory.createIdentifier(obj.name))\n }\n\n return factory.createImportSpecifier(false, undefined, factory.createIdentifier(obj.propertyName))\n }\n\n return factory.createImportSpecifier(false, undefined, factory.createIdentifier(item))\n }),\n ),\n ),\n factory.createStringLiteral(path),\n undefined,\n )\n}\n\nexport function createExportDeclaration({\n path,\n asAlias,\n isTypeOnly = false,\n name,\n}: {\n path: string\n asAlias?: boolean\n isTypeOnly?: boolean\n name?: string | Array<ts.Identifier | string>\n}) {\n if (name && !Array.isArray(name) && !asAlias) {\n console.warn(`When using name as string, asAlias should be true ${name}`)\n }\n\n if (!Array.isArray(name)) {\n const parsedName = name?.match(/^\\d/) ? `_${name?.slice(1)}` : name\n\n return factory.createExportDeclaration(\n undefined,\n isTypeOnly,\n asAlias && parsedName ? factory.createNamespaceExport(factory.createIdentifier(parsedName)) : undefined,\n factory.createStringLiteral(path),\n undefined,\n )\n }\n\n return factory.createExportDeclaration(\n undefined,\n isTypeOnly,\n factory.createNamedExports(\n name.map((propertyName) => {\n return factory.createExportSpecifier(false, undefined, typeof propertyName === 'string' ? factory.createIdentifier(propertyName) : propertyName)\n }),\n ),\n factory.createStringLiteral(path),\n undefined,\n )\n}\n\nexport function createEnumDeclaration({\n type = 'enum',\n name,\n typeName,\n enums,\n}: {\n /**\n * @default `'enum'`\n */\n type?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal'\n /**\n * Enum name in camelCase.\n */\n name: string\n /**\n * Enum name in PascalCase.\n */\n typeName: string\n enums: [key: string | number, value: string | number | boolean][]\n}): [name: ts.Node | undefined, type: ts.Node] {\n if (type === 'literal') {\n return [\n undefined,\n factory.createTypeAliasDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(typeName),\n undefined,\n factory.createUnionTypeNode(\n enums\n .map(([_key, value]) => {\n if (isNumber(value)) {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(value?.toString()))\n }\n\n if (typeof value === 'boolean') {\n return factory.createLiteralTypeNode(value ? factory.createTrue() : factory.createFalse())\n }\n if (value) {\n return factory.createLiteralTypeNode(factory.createStringLiteral(value.toString()))\n }\n\n return undefined\n })\n .filter(Boolean),\n ),\n ),\n ]\n }\n\n if (type === 'enum' || type === 'constEnum') {\n return [\n undefined,\n factory.createEnumDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword), type === 'constEnum' ? factory.createToken(ts.SyntaxKind.ConstKeyword) : undefined].filter(Boolean),\n factory.createIdentifier(typeName),\n enums\n .map(([key, value]) => {\n let initializer: ts.Expression = factory.createStringLiteral(value?.toString())\n\n if (isNumber(Number.parseInt(value.toString()))) {\n initializer = factory.createNumericLiteral(value as number)\n }\n if (typeof value === 'boolean') {\n initializer = value ? factory.createTrue() : factory.createFalse()\n }\n\n if (isNumber(Number.parseInt(key.toString()))) {\n return factory.createEnumMember(factory.createStringLiteral(`${typeName}_${key}`), initializer)\n }\n\n if (key) {\n return factory.createEnumMember(factory.createStringLiteral(`${key}`), initializer)\n }\n\n return undefined\n })\n .filter(Boolean),\n ),\n ]\n }\n\n // used when using `as const` instead of an TypeScript enum.\n const identifierName = type === 'asPascalConst' ? typeName : name\n\n return [\n factory.createVariableStatement(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier(identifierName),\n undefined,\n undefined,\n factory.createAsExpression(\n factory.createObjectLiteralExpression(\n enums\n .map(([key, value]) => {\n let initializer: ts.Expression = factory.createStringLiteral(`${value?.toString()}`)\n\n if (isNumber(value)) {\n // Error: Negative numbers should be created in combination with createPrefixUnaryExpression factory.\n // The method createNumericLiteral only accepts positive numbers\n // or those combined with createPrefixUnaryExpression.\n // Therefore, we need to ensure that the number is not negative.\n if (value < 0) {\n initializer = factory.createPrefixUnaryExpression(ts.SyntaxKind.MinusToken, factory.createNumericLiteral(Math.abs(value)))\n } else {\n initializer = factory.createNumericLiteral(value)\n }\n }\n\n if (typeof value === 'boolean') {\n initializer = value ? factory.createTrue() : factory.createFalse()\n }\n\n if (key) {\n return factory.createPropertyAssignment(factory.createStringLiteral(`${key}`), initializer)\n }\n\n return undefined\n })\n .filter(Boolean),\n true,\n ),\n factory.createTypeReferenceNode(factory.createIdentifier('const'), undefined),\n ),\n ),\n ],\n ts.NodeFlags.Const,\n ),\n ),\n factory.createTypeAliasDeclaration(\n type === 'asPascalConst' ? [] : [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(typeName),\n undefined,\n factory.createIndexedAccessTypeNode(\n factory.createParenthesizedType(factory.createTypeQueryNode(factory.createIdentifier(identifierName), undefined)),\n factory.createTypeOperatorNode(ts.SyntaxKind.KeyOfKeyword, factory.createTypeQueryNode(factory.createIdentifier(identifierName), undefined)),\n ),\n ),\n ]\n}\n\nexport function createOmitDeclaration({\n keys,\n type,\n nonNullable,\n}: {\n keys: Array<string> | string\n type: ts.TypeNode\n nonNullable?: boolean\n}) {\n const node = nonNullable ? factory.createTypeReferenceNode(factory.createIdentifier('NonNullable'), [type]) : type\n\n if (Array.isArray(keys)) {\n return factory.createTypeReferenceNode(factory.createIdentifier('Omit'), [\n node,\n factory.createUnionTypeNode(\n keys.map((key) => {\n return factory.createLiteralTypeNode(factory.createStringLiteral(key))\n }),\n ),\n ])\n }\n\n return factory.createTypeReferenceNode(factory.createIdentifier('Omit'), [node, factory.createLiteralTypeNode(factory.createStringLiteral(keys))])\n}\n\nexport const keywordTypeNodes = {\n any: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n unknown: factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),\n number: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n integer: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n object: factory.createKeywordTypeNode(ts.SyntaxKind.ObjectKeyword),\n string: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n boolean: factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword),\n undefined: factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword),\n null: factory.createLiteralTypeNode(factory.createToken(ts.SyntaxKind.NullKeyword)),\n} as const\n\nexport const createTypeLiteralNode = factory.createTypeLiteralNode\n\nexport const createTypeReferenceNode = factory.createTypeReferenceNode\nexport const createNumericLiteral = factory.createNumericLiteral\nexport const createStringLiteral = factory.createStringLiteral\n\nexport const createArrayTypeNode = factory.createArrayTypeNode\n\nexport const createLiteralTypeNode = factory.createLiteralTypeNode\nexport const createNull = factory.createNull\nexport const createIdentifier = factory.createIdentifier\n\nexport const createTupleTypeNode = factory.createTupleTypeNode\n"]}
package/dist/factory.cjs CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
 
28
28
 
29
- var _chunkKWWQXE3Ucjs = require('./chunk-KWWQXE3U.cjs');
29
+ var _chunkTNIGP6OUcjs = require('./chunk-TNIGP6OU.cjs');
30
30
 
31
31
 
32
32
 
@@ -55,5 +55,5 @@ var _chunkKWWQXE3Ucjs = require('./chunk-KWWQXE3U.cjs');
55
55
 
56
56
 
57
57
 
58
- exports.appendJSDocToNode = _chunkKWWQXE3Ucjs.appendJSDocToNode; exports.createArrayDeclaration = _chunkKWWQXE3Ucjs.createArrayDeclaration; exports.createArrayTypeNode = _chunkKWWQXE3Ucjs.createArrayTypeNode; exports.createEnumDeclaration = _chunkKWWQXE3Ucjs.createEnumDeclaration; exports.createExportDeclaration = _chunkKWWQXE3Ucjs.createExportDeclaration; exports.createIdentifier = _chunkKWWQXE3Ucjs.createIdentifier; exports.createImportDeclaration = _chunkKWWQXE3Ucjs.createImportDeclaration; exports.createIndexSignature = _chunkKWWQXE3Ucjs.createIndexSignature; exports.createIntersectionDeclaration = _chunkKWWQXE3Ucjs.createIntersectionDeclaration; exports.createJSDoc = _chunkKWWQXE3Ucjs.createJSDoc; exports.createLiteralTypeNode = _chunkKWWQXE3Ucjs.createLiteralTypeNode; exports.createNamespaceDeclaration = _chunkKWWQXE3Ucjs.createNamespaceDeclaration; exports.createNull = _chunkKWWQXE3Ucjs.createNull; exports.createNumericLiteral = _chunkKWWQXE3Ucjs.createNumericLiteral; exports.createOmitDeclaration = _chunkKWWQXE3Ucjs.createOmitDeclaration; exports.createParameterSignature = _chunkKWWQXE3Ucjs.createParameterSignature; exports.createPropertySignature = _chunkKWWQXE3Ucjs.createPropertySignature; exports.createQuestionToken = _chunkKWWQXE3Ucjs.createQuestionToken; exports.createStringLiteral = _chunkKWWQXE3Ucjs.createStringLiteral; exports.createTupleDeclaration = _chunkKWWQXE3Ucjs.createTupleDeclaration; exports.createTupleTypeNode = _chunkKWWQXE3Ucjs.createTupleTypeNode; exports.createTypeAliasDeclaration = _chunkKWWQXE3Ucjs.createTypeAliasDeclaration; exports.createTypeLiteralNode = _chunkKWWQXE3Ucjs.createTypeLiteralNode; exports.createTypeReferenceNode = _chunkKWWQXE3Ucjs.createTypeReferenceNode; exports.createUnionDeclaration = _chunkKWWQXE3Ucjs.createUnionDeclaration; exports.keywordTypeNodes = _chunkKWWQXE3Ucjs.keywordTypeNodes; exports.modifiers = _chunkKWWQXE3Ucjs.modifiers;
58
+ exports.appendJSDocToNode = _chunkTNIGP6OUcjs.appendJSDocToNode; exports.createArrayDeclaration = _chunkTNIGP6OUcjs.createArrayDeclaration; exports.createArrayTypeNode = _chunkTNIGP6OUcjs.createArrayTypeNode; exports.createEnumDeclaration = _chunkTNIGP6OUcjs.createEnumDeclaration; exports.createExportDeclaration = _chunkTNIGP6OUcjs.createExportDeclaration; exports.createIdentifier = _chunkTNIGP6OUcjs.createIdentifier; exports.createImportDeclaration = _chunkTNIGP6OUcjs.createImportDeclaration; exports.createIndexSignature = _chunkTNIGP6OUcjs.createIndexSignature; exports.createIntersectionDeclaration = _chunkTNIGP6OUcjs.createIntersectionDeclaration; exports.createJSDoc = _chunkTNIGP6OUcjs.createJSDoc; exports.createLiteralTypeNode = _chunkTNIGP6OUcjs.createLiteralTypeNode; exports.createNamespaceDeclaration = _chunkTNIGP6OUcjs.createNamespaceDeclaration; exports.createNull = _chunkTNIGP6OUcjs.createNull; exports.createNumericLiteral = _chunkTNIGP6OUcjs.createNumericLiteral; exports.createOmitDeclaration = _chunkTNIGP6OUcjs.createOmitDeclaration; exports.createParameterSignature = _chunkTNIGP6OUcjs.createParameterSignature; exports.createPropertySignature = _chunkTNIGP6OUcjs.createPropertySignature; exports.createQuestionToken = _chunkTNIGP6OUcjs.createQuestionToken; exports.createStringLiteral = _chunkTNIGP6OUcjs.createStringLiteral; exports.createTupleDeclaration = _chunkTNIGP6OUcjs.createTupleDeclaration; exports.createTupleTypeNode = _chunkTNIGP6OUcjs.createTupleTypeNode; exports.createTypeAliasDeclaration = _chunkTNIGP6OUcjs.createTypeAliasDeclaration; exports.createTypeLiteralNode = _chunkTNIGP6OUcjs.createTypeLiteralNode; exports.createTypeReferenceNode = _chunkTNIGP6OUcjs.createTypeReferenceNode; exports.createUnionDeclaration = _chunkTNIGP6OUcjs.createUnionDeclaration; exports.keywordTypeNodes = _chunkTNIGP6OUcjs.keywordTypeNodes; exports.modifiers = _chunkTNIGP6OUcjs.modifiers;
59
59
  //# sourceMappingURL=factory.cjs.map
package/dist/factory.js CHANGED
@@ -26,7 +26,7 @@ import {
26
26
  createUnionDeclaration,
27
27
  keywordTypeNodes,
28
28
  modifiers
29
- } from "./chunk-WBLAF6SH.js";
29
+ } from "./chunk-2BN5RQSZ.js";
30
30
  export {
31
31
  appendJSDocToNode,
32
32
  createArrayDeclaration,
package/dist/index.cjs CHANGED
@@ -1,41 +1,9 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
2
 
3
- var _chunkKWWQXE3Ucjs = require('./chunk-KWWQXE3U.cjs');
4
-
5
- // src/api.ts
6
- var _path = require('path'); var _path2 = _interopRequireDefault(_path);
7
- var _typescript = require('typescript'); var _typescript2 = _interopRequireDefault(_typescript);
8
- function getExports(filePath, source) {
9
- const rootName = _path2.default.extname(filePath) ? filePath : `${filePath}.ts`;
10
- if (!rootName) {
11
- return void 0;
12
- }
13
- const program = _typescript2.default.createProgram({
14
- rootNames: [rootName],
15
- options: {}
16
- });
17
- const checker = program.getTypeChecker();
18
- const sources = program.getSourceFiles();
19
- const sourceFile = source ? _typescript2.default.createSourceFile(rootName, source, _typescript2.default.ScriptTarget.ES2022, false, _typescript2.default.ScriptKind.TS) : sources.find((sourceFile2) => sourceFile2.fileName === rootName);
20
- if (!sourceFile) {
21
- return void 0;
22
- }
23
- const symbol = checker.getSymbolAtLocation(sourceFile);
24
- if (!_optionalChain([symbol, 'optionalAccess', _ => _.flags])) {
25
- return void 0;
26
- }
27
- const exports = checker.getExportsOfModule(symbol);
28
- return exports.map((e) => {
29
- const type = checker.getTypeOfSymbol(e);
30
- return {
31
- name: e.escapedName.toString(),
32
- isTypeOnly: _optionalChain([type, 'optionalAccess', _2 => _2.id]) === 5
33
- };
34
- });
35
- }
3
+ var _chunkTNIGP6OUcjs = require('./chunk-TNIGP6OU.cjs');
36
4
 
37
5
  // src/print.ts
38
-
6
+ var _typescript = require('typescript'); var _typescript2 = _interopRequireDefault(_typescript);
39
7
  var { factory } = _typescript2.default;
40
8
  var escapeNewLines = (code) => code.replace(/\n\n/g, "\n/* :newline: */");
41
9
  var restoreNewLines = (code) => code.replace(/\/\* :newline: \*\//g, "\n");
@@ -61,17 +29,7 @@ function print(elements, { source = "", baseName = "print.ts", removeComments, n
61
29
  return [outputFile, restoreNewLines(outputSource)].filter(Boolean).join("\n");
62
30
  }
63
31
 
64
- // src/parse.ts
65
- function parse(ast) {
66
- return {
67
- ast,
68
- text: print(ast)
69
- };
70
- }
71
-
72
-
73
-
74
32
 
75
33
 
76
- exports.factory = _chunkKWWQXE3Ucjs.factory_exports; exports.getExports = getExports; exports.parse = parse; exports.print = print;
34
+ exports.factory = _chunkTNIGP6OUcjs.factory_exports; exports.print = print;
77
35
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/kubb/kubb/packages/parser-ts/dist/index.cjs","../src/api.ts","../src/print.ts","../src/parse.ts"],"names":["ts"],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACJA,wEAAiB;AAEjB,gGAAe;AAUR,SAAS,UAAA,CAAW,QAAA,EAAkB,MAAA,EAAmD;AAC9F,EAAA,MAAM,SAAA,EAAW,cAAA,CAAK,OAAA,CAAQ,QAAQ,EAAA,EAAI,SAAA,EAAW,CAAA,EAAA;AAEtC,EAAA;AACN,IAAA;AACT,EAAA;AAEiC,EAAA;AACX,IAAA;AACV,IAAA;AACX,EAAA;AAEsC,EAAA;AACA,EAAA;AAEf,EAAA;AAGP,EAAA;AACR,IAAA;AACT,EAAA;AAEqD,EAAA;AAEjC,EAAA;AACX,IAAA;AACT,EAAA;AAEiD,EAAA;AACvB,EAAA;AAEc,IAAA;AAE/B,IAAA;AACwB,MAAA;AACJ,MAAA;AAC3B,IAAA;AACD,EAAA;AACH;ADfwD;AACA;AEpCzC;AAIKA;AAY2C;AAOR;AAI3B;AAEuB,EAAA;AAChB,EAAA;AACR,IAAA;AACvB,IAAA;AACA,IAAA;AACA,IAAA;AACD,EAAA;AAE4B,EAAA;AAEd,EAAA;AACN,IAAA;AACT,EAAA;AAE6B,EAAA;AACI,IAAA;AAC1B,EAAA;AAC4B,IAAA;AACnC,EAAA;AAEmD,EAAA;AACF,EAAA;AAEE,EAAA;AACrD;AFSwD;AACA;AGtDP;AACxC,EAAA;AACL,IAAA;AACe,IAAA;AACjB,EAAA;AACF;AHwDwD;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/kubb/kubb/packages/parser-ts/dist/index.cjs","sourcesContent":[null,"import path from 'node:path'\n\nimport ts from 'typescript'\n\ntype ExportsResult = {\n name: string\n isTypeOnly: boolean\n}\n\n/**\n * @link https://github.com/microsoft/TypeScript/issues/15840\n */\nexport function getExports(filePath: string, source?: string): undefined | Array<ExportsResult> {\n const rootName = path.extname(filePath) ? filePath : `${filePath}.ts`\n\n if (!rootName) {\n return undefined\n }\n\n const program = ts.createProgram({\n rootNames: [rootName],\n options: {},\n })\n\n const checker = program.getTypeChecker()\n const sources = program.getSourceFiles()\n const sourceFile = source\n ? ts.createSourceFile(rootName, source, ts.ScriptTarget.ES2022, false, ts.ScriptKind.TS)\n : sources.find((sourceFile) => sourceFile.fileName === rootName)\n\n if (!sourceFile) {\n return undefined\n }\n\n const symbol = checker.getSymbolAtLocation(sourceFile)\n\n if (!symbol?.flags) {\n return undefined\n }\n\n const exports = checker.getExportsOfModule(symbol)\n return exports.map((e) => {\n // 5 is type and 90 is const\n const type = checker.getTypeOfSymbol(e) as unknown as { id?: 5 | 90 }\n\n return {\n name: e.escapedName.toString(),\n isTypeOnly: type?.id === 5,\n }\n })\n}\n","import ts from 'typescript'\n\nimport type { PrinterOptions } from 'typescript'\n\nconst { factory } = ts\n\ntype Options = {\n source?: string\n baseName?: string\n} & PrinterOptions\n\n/**\n * Escaped new lines in code with block comments so they can be restored by {@link restoreNewLines}\n * @param {string} code The code to escape new lines in\n * @returns The same code but with new lines escaped using block comments\n */\nconst escapeNewLines = (code: string) => code.replace(/\\n\\n/g, '\\n/* :newline: */')\n\n/**\n * Reverses {@link escapeNewLines} and restores new lines\n * @param {string} code The code with escaped new lines\n * @returns The same code with new lines restored\n */\nconst restoreNewLines = (code: string) => code.replace(/\\/\\* :newline: \\*\\//g, '\\n')\n\nexport function print(\n elements: ts.Node | Array<ts.Node | undefined> | null,\n { source = '', baseName = 'print.ts', removeComments, noEmitHelpers, newLine = ts.NewLineKind.LineFeed }: Options = {},\n): string {\n const sourceFile = ts.createSourceFile(baseName, escapeNewLines(source), ts.ScriptTarget.ES2022, false, ts.ScriptKind.TS)\n const printer = ts.createPrinter({\n omitTrailingSemicolon: true,\n newLine,\n removeComments,\n noEmitHelpers,\n })\n\n let nodes: Array<ts.Node> = []\n\n if (!elements) {\n return ''\n }\n\n if (Array.isArray(elements)) {\n nodes = elements.filter(Boolean)\n } else {\n nodes = [elements].filter(Boolean)\n }\n\n const outputFile = printer.printList(ts.ListFormat.MultiLine, factory.createNodeArray(nodes), sourceFile)\n const outputSource = printer.printFile(sourceFile)\n\n return [outputFile, restoreNewLines(outputSource)].filter(Boolean).join('\\n')\n}\n","import { print } from './print.ts'\n\nimport type ts from 'typescript'\n\ntype ParseResult = {\n ast: ts.Node\n text: string\n}\n\nexport function parse(ast: ts.Node): ParseResult {\n return {\n ast,\n text: print(ast),\n }\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/kubb/kubb/packages/parser-ts/dist/index.cjs","../src/print.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACJA,gGAAe;AAIf,IAAM,EAAE,QAAQ,EAAA,EAAI,oBAAA;AAYpB,IAAM,eAAA,EAAiB,CAAC,IAAA,EAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,mBAAmB,CAAA;AAOlF,IAAM,gBAAA,EAAkB,CAAC,IAAA,EAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,sBAAA,EAAwB,IAAI,CAAA;AAE5E,SAAS,KAAA,CACd,QAAA,EACA,EAAE,OAAA,EAAS,EAAA,EAAI,SAAA,EAAW,UAAA,EAAY,cAAA,EAAgB,aAAA,EAAe,QAAA,EAAU,oBAAA,CAAG,WAAA,CAAY,SAAS,EAAA,EAAa,CAAC,CAAA,EAC7G;AACR,EAAA,MAAM,WAAA,EAAa,oBAAA,CAAG,gBAAA,CAAiB,QAAA,EAAU,cAAA,CAAe,MAAM,CAAA,EAAG,oBAAA,CAAG,YAAA,CAAa,MAAA,EAAQ,KAAA,EAAO,oBAAA,CAAG,UAAA,CAAW,EAAE,CAAA;AACxH,EAAA,MAAM,QAAA,EAAU,oBAAA,CAAG,aAAA,CAAc;AAAA,IAC/B,qBAAA,EAAuB,IAAA;AAAA,IACvB,OAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,EACF,CAAC,CAAA;AAED,EAAA,IAAI,MAAA,EAAwB,CAAC,CAAA;AAE7B,EAAA,GAAA,CAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,IAAA,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,OAAO,CAAA;AAAA,EACjC,EAAA,KAAO;AACL,IAAA,MAAA,EAAQ,CAAC,QAAQ,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,EACnC;AAEA,EAAA,MAAM,WAAA,EAAa,OAAA,CAAQ,SAAA,CAAU,oBAAA,CAAG,UAAA,CAAW,SAAA,EAAW,OAAA,CAAQ,eAAA,CAAgB,KAAK,CAAA,EAAG,UAAU,CAAA;AACxG,EAAA,MAAM,aAAA,EAAe,OAAA,CAAQ,SAAA,CAAU,UAAU,CAAA;AAEjD,EAAA,OAAO,CAAC,UAAA,EAAY,eAAA,CAAgB,YAAY,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC9E;ADvBA;AACE;AACA;AACF,2EAAC","file":"/home/runner/work/kubb/kubb/packages/parser-ts/dist/index.cjs","sourcesContent":[null,"import ts from 'typescript'\n\nimport type { PrinterOptions } from 'typescript'\n\nconst { factory } = ts\n\ntype Options = {\n source?: string\n baseName?: string\n} & PrinterOptions\n\n/**\n * Escaped new lines in code with block comments so they can be restored by {@link restoreNewLines}\n * @param {string} code The code to escape new lines in\n * @returns The same code but with new lines escaped using block comments\n */\nconst escapeNewLines = (code: string) => code.replace(/\\n\\n/g, '\\n/* :newline: */')\n\n/**\n * Reverses {@link escapeNewLines} and restores new lines\n * @param {string} code The code with escaped new lines\n * @returns The same code with new lines restored\n */\nconst restoreNewLines = (code: string) => code.replace(/\\/\\* :newline: \\*\\//g, '\\n')\n\nexport function print(\n elements: ts.Node | Array<ts.Node | undefined> | null,\n { source = '', baseName = 'print.ts', removeComments, noEmitHelpers, newLine = ts.NewLineKind.LineFeed }: Options = {},\n): string {\n const sourceFile = ts.createSourceFile(baseName, escapeNewLines(source), ts.ScriptTarget.ES2022, false, ts.ScriptKind.TS)\n const printer = ts.createPrinter({\n omitTrailingSemicolon: true,\n newLine,\n removeComments,\n noEmitHelpers,\n })\n\n let nodes: Array<ts.Node> = []\n\n if (!elements) {\n return ''\n }\n\n if (Array.isArray(elements)) {\n nodes = elements.filter(Boolean)\n } else {\n nodes = [elements].filter(Boolean)\n }\n\n const outputFile = printer.printList(ts.ListFormat.MultiLine, factory.createNodeArray(nodes), sourceFile)\n const outputSource = printer.printFile(sourceFile)\n\n return [outputFile, restoreNewLines(outputSource)].filter(Boolean).join('\\n')\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -2,25 +2,10 @@ import ts, { PrinterOptions } from 'typescript';
2
2
  export { default as ts } from 'typescript';
3
3
  export { f as factory } from './factory-CFXA_d49.cjs';
4
4
 
5
- type ExportsResult = {
6
- name: string;
7
- isTypeOnly: boolean;
8
- };
9
- /**
10
- * @link https://github.com/microsoft/TypeScript/issues/15840
11
- */
12
- declare function getExports(filePath: string, source?: string): undefined | Array<ExportsResult>;
13
-
14
- type ParseResult = {
15
- ast: ts.Node;
16
- text: string;
17
- };
18
- declare function parse(ast: ts.Node): ParseResult;
19
-
20
5
  type Options = {
21
6
  source?: string;
22
7
  baseName?: string;
23
8
  } & PrinterOptions;
24
9
  declare function print(elements: ts.Node | Array<ts.Node | undefined> | null, { source, baseName, removeComments, noEmitHelpers, newLine }?: Options): string;
25
10
 
26
- export { getExports, parse, print };
11
+ export { print };
package/dist/index.d.ts CHANGED
@@ -2,25 +2,10 @@ import ts, { PrinterOptions } from 'typescript';
2
2
  export { default as ts } from 'typescript';
3
3
  export { f as factory } from './factory-CFXA_d49.js';
4
4
 
5
- type ExportsResult = {
6
- name: string;
7
- isTypeOnly: boolean;
8
- };
9
- /**
10
- * @link https://github.com/microsoft/TypeScript/issues/15840
11
- */
12
- declare function getExports(filePath: string, source?: string): undefined | Array<ExportsResult>;
13
-
14
- type ParseResult = {
15
- ast: ts.Node;
16
- text: string;
17
- };
18
- declare function parse(ast: ts.Node): ParseResult;
19
-
20
5
  type Options = {
21
6
  source?: string;
22
7
  baseName?: string;
23
8
  } & PrinterOptions;
24
9
  declare function print(elements: ts.Node | Array<ts.Node | undefined> | null, { source, baseName, removeComments, noEmitHelpers, newLine }?: Options): string;
25
10
 
26
- export { getExports, parse, print };
11
+ export { print };
package/dist/index.js CHANGED
@@ -1,47 +1,15 @@
1
1
  import {
2
2
  factory_exports
3
- } from "./chunk-WBLAF6SH.js";
4
-
5
- // src/api.ts
6
- import path from "path";
7
- import ts from "typescript";
8
- function getExports(filePath, source) {
9
- const rootName = path.extname(filePath) ? filePath : `${filePath}.ts`;
10
- if (!rootName) {
11
- return void 0;
12
- }
13
- const program = ts.createProgram({
14
- rootNames: [rootName],
15
- options: {}
16
- });
17
- const checker = program.getTypeChecker();
18
- const sources = program.getSourceFiles();
19
- const sourceFile = source ? ts.createSourceFile(rootName, source, ts.ScriptTarget.ES2022, false, ts.ScriptKind.TS) : sources.find((sourceFile2) => sourceFile2.fileName === rootName);
20
- if (!sourceFile) {
21
- return void 0;
22
- }
23
- const symbol = checker.getSymbolAtLocation(sourceFile);
24
- if (!symbol?.flags) {
25
- return void 0;
26
- }
27
- const exports = checker.getExportsOfModule(symbol);
28
- return exports.map((e) => {
29
- const type = checker.getTypeOfSymbol(e);
30
- return {
31
- name: e.escapedName.toString(),
32
- isTypeOnly: type?.id === 5
33
- };
34
- });
35
- }
3
+ } from "./chunk-2BN5RQSZ.js";
36
4
 
37
5
  // src/print.ts
38
- import ts2 from "typescript";
39
- var { factory } = ts2;
6
+ import ts from "typescript";
7
+ var { factory } = ts;
40
8
  var escapeNewLines = (code) => code.replace(/\n\n/g, "\n/* :newline: */");
41
9
  var restoreNewLines = (code) => code.replace(/\/\* :newline: \*\//g, "\n");
42
- function print(elements, { source = "", baseName = "print.ts", removeComments, noEmitHelpers, newLine = ts2.NewLineKind.LineFeed } = {}) {
43
- const sourceFile = ts2.createSourceFile(baseName, escapeNewLines(source), ts2.ScriptTarget.ES2022, false, ts2.ScriptKind.TS);
44
- const printer = ts2.createPrinter({
10
+ function print(elements, { source = "", baseName = "print.ts", removeComments, noEmitHelpers, newLine = ts.NewLineKind.LineFeed } = {}) {
11
+ const sourceFile = ts.createSourceFile(baseName, escapeNewLines(source), ts.ScriptTarget.ES2022, false, ts.ScriptKind.TS);
12
+ const printer = ts.createPrinter({
45
13
  omitTrailingSemicolon: true,
46
14
  newLine,
47
15
  removeComments,
@@ -56,22 +24,12 @@ function print(elements, { source = "", baseName = "print.ts", removeComments, n
56
24
  } else {
57
25
  nodes = [elements].filter(Boolean);
58
26
  }
59
- const outputFile = printer.printList(ts2.ListFormat.MultiLine, factory.createNodeArray(nodes), sourceFile);
27
+ const outputFile = printer.printList(ts.ListFormat.MultiLine, factory.createNodeArray(nodes), sourceFile);
60
28
  const outputSource = printer.printFile(sourceFile);
61
29
  return [outputFile, restoreNewLines(outputSource)].filter(Boolean).join("\n");
62
30
  }
63
-
64
- // src/parse.ts
65
- function parse(ast) {
66
- return {
67
- ast,
68
- text: print(ast)
69
- };
70
- }
71
31
  export {
72
32
  factory_exports as factory,
73
- getExports,
74
- parse,
75
33
  print
76
34
  };
77
35
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api.ts","../src/print.ts","../src/parse.ts"],"sourcesContent":["import path from 'node:path'\n\nimport ts from 'typescript'\n\ntype ExportsResult = {\n name: string\n isTypeOnly: boolean\n}\n\n/**\n * @link https://github.com/microsoft/TypeScript/issues/15840\n */\nexport function getExports(filePath: string, source?: string): undefined | Array<ExportsResult> {\n const rootName = path.extname(filePath) ? filePath : `${filePath}.ts`\n\n if (!rootName) {\n return undefined\n }\n\n const program = ts.createProgram({\n rootNames: [rootName],\n options: {},\n })\n\n const checker = program.getTypeChecker()\n const sources = program.getSourceFiles()\n const sourceFile = source\n ? ts.createSourceFile(rootName, source, ts.ScriptTarget.ES2022, false, ts.ScriptKind.TS)\n : sources.find((sourceFile) => sourceFile.fileName === rootName)\n\n if (!sourceFile) {\n return undefined\n }\n\n const symbol = checker.getSymbolAtLocation(sourceFile)\n\n if (!symbol?.flags) {\n return undefined\n }\n\n const exports = checker.getExportsOfModule(symbol)\n return exports.map((e) => {\n // 5 is type and 90 is const\n const type = checker.getTypeOfSymbol(e) as unknown as { id?: 5 | 90 }\n\n return {\n name: e.escapedName.toString(),\n isTypeOnly: type?.id === 5,\n }\n })\n}\n","import ts from 'typescript'\n\nimport type { PrinterOptions } from 'typescript'\n\nconst { factory } = ts\n\ntype Options = {\n source?: string\n baseName?: string\n} & PrinterOptions\n\n/**\n * Escaped new lines in code with block comments so they can be restored by {@link restoreNewLines}\n * @param {string} code The code to escape new lines in\n * @returns The same code but with new lines escaped using block comments\n */\nconst escapeNewLines = (code: string) => code.replace(/\\n\\n/g, '\\n/* :newline: */')\n\n/**\n * Reverses {@link escapeNewLines} and restores new lines\n * @param {string} code The code with escaped new lines\n * @returns The same code with new lines restored\n */\nconst restoreNewLines = (code: string) => code.replace(/\\/\\* :newline: \\*\\//g, '\\n')\n\nexport function print(\n elements: ts.Node | Array<ts.Node | undefined> | null,\n { source = '', baseName = 'print.ts', removeComments, noEmitHelpers, newLine = ts.NewLineKind.LineFeed }: Options = {},\n): string {\n const sourceFile = ts.createSourceFile(baseName, escapeNewLines(source), ts.ScriptTarget.ES2022, false, ts.ScriptKind.TS)\n const printer = ts.createPrinter({\n omitTrailingSemicolon: true,\n newLine,\n removeComments,\n noEmitHelpers,\n })\n\n let nodes: Array<ts.Node> = []\n\n if (!elements) {\n return ''\n }\n\n if (Array.isArray(elements)) {\n nodes = elements.filter(Boolean)\n } else {\n nodes = [elements].filter(Boolean)\n }\n\n const outputFile = printer.printList(ts.ListFormat.MultiLine, factory.createNodeArray(nodes), sourceFile)\n const outputSource = printer.printFile(sourceFile)\n\n return [outputFile, restoreNewLines(outputSource)].filter(Boolean).join('\\n')\n}\n","import { print } from './print.ts'\n\nimport type ts from 'typescript'\n\ntype ParseResult = {\n ast: ts.Node\n text: string\n}\n\nexport function parse(ast: ts.Node): ParseResult {\n return {\n ast,\n text: print(ast),\n }\n}\n"],"mappings":";;;;;AAAA,OAAO,UAAU;AAEjB,OAAO,QAAQ;AAUR,SAAS,WAAW,UAAkB,QAAmD;AAC9F,QAAM,WAAW,KAAK,QAAQ,QAAQ,IAAI,WAAW,GAAG,QAAQ;AAEhE,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,GAAG,cAAc;AAAA,IAC/B,WAAW,CAAC,QAAQ;AAAA,IACpB,SAAS,CAAC;AAAA,EACZ,CAAC;AAED,QAAM,UAAU,QAAQ,eAAe;AACvC,QAAM,UAAU,QAAQ,eAAe;AACvC,QAAM,aAAa,SACf,GAAG,iBAAiB,UAAU,QAAQ,GAAG,aAAa,QAAQ,OAAO,GAAG,WAAW,EAAE,IACrF,QAAQ,KAAK,CAACA,gBAAeA,YAAW,aAAa,QAAQ;AAEjE,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,QAAQ,oBAAoB,UAAU;AAErD,MAAI,CAAC,QAAQ,OAAO;AAClB,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,QAAQ,mBAAmB,MAAM;AACjD,SAAO,QAAQ,IAAI,CAAC,MAAM;AAExB,UAAM,OAAO,QAAQ,gBAAgB,CAAC;AAEtC,WAAO;AAAA,MACL,MAAM,EAAE,YAAY,SAAS;AAAA,MAC7B,YAAY,MAAM,OAAO;AAAA,IAC3B;AAAA,EACF,CAAC;AACH;;;AClDA,OAAOC,SAAQ;AAIf,IAAM,EAAE,QAAQ,IAAIA;AAYpB,IAAM,iBAAiB,CAAC,SAAiB,KAAK,QAAQ,SAAS,mBAAmB;AAOlF,IAAM,kBAAkB,CAAC,SAAiB,KAAK,QAAQ,wBAAwB,IAAI;AAE5E,SAAS,MACd,UACA,EAAE,SAAS,IAAI,WAAW,YAAY,gBAAgB,eAAe,UAAUA,IAAG,YAAY,SAAS,IAAa,CAAC,GAC7G;AACR,QAAM,aAAaA,IAAG,iBAAiB,UAAU,eAAe,MAAM,GAAGA,IAAG,aAAa,QAAQ,OAAOA,IAAG,WAAW,EAAE;AACxH,QAAM,UAAUA,IAAG,cAAc;AAAA,IAC/B,uBAAuB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI,QAAwB,CAAC;AAE7B,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,YAAQ,SAAS,OAAO,OAAO;AAAA,EACjC,OAAO;AACL,YAAQ,CAAC,QAAQ,EAAE,OAAO,OAAO;AAAA,EACnC;AAEA,QAAM,aAAa,QAAQ,UAAUA,IAAG,WAAW,WAAW,QAAQ,gBAAgB,KAAK,GAAG,UAAU;AACxG,QAAM,eAAe,QAAQ,UAAU,UAAU;AAEjD,SAAO,CAAC,YAAY,gBAAgB,YAAY,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAC9E;;;AC5CO,SAAS,MAAM,KAA2B;AAC/C,SAAO;AAAA,IACL;AAAA,IACA,MAAM,MAAM,GAAG;AAAA,EACjB;AACF;","names":["sourceFile","ts"]}
1
+ {"version":3,"sources":["../src/print.ts"],"sourcesContent":["import ts from 'typescript'\n\nimport type { PrinterOptions } from 'typescript'\n\nconst { factory } = ts\n\ntype Options = {\n source?: string\n baseName?: string\n} & PrinterOptions\n\n/**\n * Escaped new lines in code with block comments so they can be restored by {@link restoreNewLines}\n * @param {string} code The code to escape new lines in\n * @returns The same code but with new lines escaped using block comments\n */\nconst escapeNewLines = (code: string) => code.replace(/\\n\\n/g, '\\n/* :newline: */')\n\n/**\n * Reverses {@link escapeNewLines} and restores new lines\n * @param {string} code The code with escaped new lines\n * @returns The same code with new lines restored\n */\nconst restoreNewLines = (code: string) => code.replace(/\\/\\* :newline: \\*\\//g, '\\n')\n\nexport function print(\n elements: ts.Node | Array<ts.Node | undefined> | null,\n { source = '', baseName = 'print.ts', removeComments, noEmitHelpers, newLine = ts.NewLineKind.LineFeed }: Options = {},\n): string {\n const sourceFile = ts.createSourceFile(baseName, escapeNewLines(source), ts.ScriptTarget.ES2022, false, ts.ScriptKind.TS)\n const printer = ts.createPrinter({\n omitTrailingSemicolon: true,\n newLine,\n removeComments,\n noEmitHelpers,\n })\n\n let nodes: Array<ts.Node> = []\n\n if (!elements) {\n return ''\n }\n\n if (Array.isArray(elements)) {\n nodes = elements.filter(Boolean)\n } else {\n nodes = [elements].filter(Boolean)\n }\n\n const outputFile = printer.printList(ts.ListFormat.MultiLine, factory.createNodeArray(nodes), sourceFile)\n const outputSource = printer.printFile(sourceFile)\n\n return [outputFile, restoreNewLines(outputSource)].filter(Boolean).join('\\n')\n}\n"],"mappings":";;;;;AAAA,OAAO,QAAQ;AAIf,IAAM,EAAE,QAAQ,IAAI;AAYpB,IAAM,iBAAiB,CAAC,SAAiB,KAAK,QAAQ,SAAS,mBAAmB;AAOlF,IAAM,kBAAkB,CAAC,SAAiB,KAAK,QAAQ,wBAAwB,IAAI;AAE5E,SAAS,MACd,UACA,EAAE,SAAS,IAAI,WAAW,YAAY,gBAAgB,eAAe,UAAU,GAAG,YAAY,SAAS,IAAa,CAAC,GAC7G;AACR,QAAM,aAAa,GAAG,iBAAiB,UAAU,eAAe,MAAM,GAAG,GAAG,aAAa,QAAQ,OAAO,GAAG,WAAW,EAAE;AACxH,QAAM,UAAU,GAAG,cAAc;AAAA,IAC/B,uBAAuB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI,QAAwB,CAAC;AAE7B,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,YAAQ,SAAS,OAAO,OAAO;AAAA,EACjC,OAAO;AACL,YAAQ,CAAC,QAAQ,EAAE,OAAO,OAAO;AAAA,EACnC;AAEA,QAAM,aAAa,QAAQ,UAAU,GAAG,WAAW,WAAW,QAAQ,gBAAgB,KAAK,GAAG,UAAU;AACxG,QAAM,eAAe,QAAQ,UAAU,UAAU;AAEjD,SAAO,CAAC,YAAY,gBAAgB,YAAY,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAC9E;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/parser-ts",
3
- "version": "3.0.0-alpha.6",
3
+ "version": "3.0.0-alpha.8",
4
4
  "description": "TypeScript parser",
5
5
  "keywords": [
6
6
  "typescript",
@@ -55,9 +55,9 @@
55
55
  "devDependencies": {
56
56
  "prettier": "^3.3.3",
57
57
  "tsup": "^8.2.4",
58
- "@kubb/config-biome": "3.0.0-alpha.6",
59
- "@kubb/config-ts": "3.0.0-alpha.6",
60
- "@kubb/config-tsup": "3.0.0-alpha.6"
58
+ "@kubb/config-biome": "3.0.0-alpha.8",
59
+ "@kubb/config-ts": "3.0.0-alpha.8",
60
+ "@kubb/config-tsup": "3.0.0-alpha.8"
61
61
  },
62
62
  "engines": {
63
63
  "node": ">=20"
package/src/factory.ts CHANGED
@@ -492,7 +492,7 @@ export function createEnumDeclaration({
492
492
  ),
493
493
  ),
494
494
  factory.createTypeAliasDeclaration(
495
- [factory.createToken(ts.SyntaxKind.ExportKeyword)],
495
+ type === 'asPascalConst' ? [] : [factory.createToken(ts.SyntaxKind.ExportKeyword)],
496
496
  factory.createIdentifier(typeName),
497
497
  undefined,
498
498
  factory.createIndexedAccessTypeNode(
package/src/index.ts CHANGED
@@ -1,5 +1,3 @@
1
- export { getExports } from './api.ts'
2
- export { parse } from './parse.ts'
3
1
  export { print } from './print.ts'
4
2
  export type { default as ts } from 'typescript'
5
3
  export * as factory from './factory.ts'
package/src/api.ts DELETED
@@ -1,51 +0,0 @@
1
- import path from 'node:path'
2
-
3
- import ts from 'typescript'
4
-
5
- type ExportsResult = {
6
- name: string
7
- isTypeOnly: boolean
8
- }
9
-
10
- /**
11
- * @link https://github.com/microsoft/TypeScript/issues/15840
12
- */
13
- export function getExports(filePath: string, source?: string): undefined | Array<ExportsResult> {
14
- const rootName = path.extname(filePath) ? filePath : `${filePath}.ts`
15
-
16
- if (!rootName) {
17
- return undefined
18
- }
19
-
20
- const program = ts.createProgram({
21
- rootNames: [rootName],
22
- options: {},
23
- })
24
-
25
- const checker = program.getTypeChecker()
26
- const sources = program.getSourceFiles()
27
- const sourceFile = source
28
- ? ts.createSourceFile(rootName, source, ts.ScriptTarget.ES2022, false, ts.ScriptKind.TS)
29
- : sources.find((sourceFile) => sourceFile.fileName === rootName)
30
-
31
- if (!sourceFile) {
32
- return undefined
33
- }
34
-
35
- const symbol = checker.getSymbolAtLocation(sourceFile)
36
-
37
- if (!symbol?.flags) {
38
- return undefined
39
- }
40
-
41
- const exports = checker.getExportsOfModule(symbol)
42
- return exports.map((e) => {
43
- // 5 is type and 90 is const
44
- const type = checker.getTypeOfSymbol(e) as unknown as { id?: 5 | 90 }
45
-
46
- return {
47
- name: e.escapedName.toString(),
48
- isTypeOnly: type?.id === 5,
49
- }
50
- })
51
- }
package/src/parse.ts DELETED
@@ -1,15 +0,0 @@
1
- import { print } from './print.ts'
2
-
3
- import type ts from 'typescript'
4
-
5
- type ParseResult = {
6
- ast: ts.Node
7
- text: string
8
- }
9
-
10
- export function parse(ast: ts.Node): ParseResult {
11
- return {
12
- ast,
13
- text: print(ast),
14
- }
15
- }