ts-codemod-lib 3.2.0 → 3.3.1

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.
Files changed (76) hide show
  1. package/README.md +68 -0
  2. package/dist/entry-point.mjs +2 -23
  3. package/dist/entry-point.mjs.map +1 -1
  4. package/dist/functions/ast-transformers/append-as-const.mjs +330 -292
  5. package/dist/functions/ast-transformers/append-as-const.mjs.map +1 -1
  6. package/dist/functions/ast-transformers/convert-interface-to-type.mjs +85 -70
  7. package/dist/functions/ast-transformers/convert-interface-to-type.mjs.map +1 -1
  8. package/dist/functions/ast-transformers/convert-to-readonly.mjs +969 -840
  9. package/dist/functions/ast-transformers/convert-to-readonly.mjs.map +1 -1
  10. package/dist/functions/ast-transformers/enable-no-unchecked-indexed-access.d.mts +65 -0
  11. package/dist/functions/ast-transformers/enable-no-unchecked-indexed-access.d.mts.map +1 -0
  12. package/dist/functions/ast-transformers/enable-no-unchecked-indexed-access.mjs +297 -0
  13. package/dist/functions/ast-transformers/enable-no-unchecked-indexed-access.mjs.map +1 -0
  14. package/dist/functions/ast-transformers/index.d.mts +1 -0
  15. package/dist/functions/ast-transformers/index.d.mts.map +1 -1
  16. package/dist/functions/ast-transformers/index.mjs +10 -11
  17. package/dist/functions/ast-transformers/index.mjs.map +1 -1
  18. package/dist/functions/ast-transformers/readonly-transformer-helpers/compare-union-types.mjs +14 -7
  19. package/dist/functions/ast-transformers/readonly-transformer-helpers/compare-union-types.mjs.map +1 -1
  20. package/dist/functions/ast-transformers/readonly-transformer-helpers/constants.mjs +12 -15
  21. package/dist/functions/ast-transformers/readonly-transformer-helpers/constants.mjs.map +1 -1
  22. package/dist/functions/ast-transformers/readonly-transformer-helpers/group-union-types.mjs +63 -58
  23. package/dist/functions/ast-transformers/readonly-transformer-helpers/group-union-types.mjs.map +1 -1
  24. package/dist/functions/ast-transformers/readonly-transformer-helpers/index.mjs +5 -5
  25. package/dist/functions/ast-transformers/readonly-transformer-helpers/index.mjs.map +1 -1
  26. package/dist/functions/ast-transformers/readonly-transformer-helpers/readonly-context.mjs +15 -20
  27. package/dist/functions/ast-transformers/readonly-transformer-helpers/readonly-context.mjs.map +1 -1
  28. package/dist/functions/ast-transformers/replace-any-with-unknown.mjs +30 -34
  29. package/dist/functions/ast-transformers/replace-any-with-unknown.mjs.map +1 -1
  30. package/dist/functions/ast-transformers/replace-record-with-unknown-record.mjs +197 -156
  31. package/dist/functions/ast-transformers/replace-record-with-unknown-record.mjs.map +1 -1
  32. package/dist/functions/ast-transformers/transform-source-code.mjs +74 -75
  33. package/dist/functions/ast-transformers/transform-source-code.mjs.map +1 -1
  34. package/dist/functions/ast-transformers/types.mjs +2 -2
  35. package/dist/functions/ast-transformers/types.mjs.map +1 -1
  36. package/dist/functions/constants/ignore-comment-text.mjs +11 -13
  37. package/dist/functions/constants/ignore-comment-text.mjs.map +1 -1
  38. package/dist/functions/constants/index.mjs +2 -2
  39. package/dist/functions/constants/index.mjs.map +1 -1
  40. package/dist/functions/functions/has-disable-next-line-comment.mjs +67 -38
  41. package/dist/functions/functions/has-disable-next-line-comment.mjs.map +1 -1
  42. package/dist/functions/functions/index.mjs +11 -11
  43. package/dist/functions/functions/index.mjs.map +1 -1
  44. package/dist/functions/functions/is-as-const-node.mjs +25 -20
  45. package/dist/functions/functions/is-as-const-node.mjs.map +1 -1
  46. package/dist/functions/functions/is-atomic-type-node.mjs +245 -25
  47. package/dist/functions/functions/is-atomic-type-node.mjs.map +1 -1
  48. package/dist/functions/functions/is-conditional-type-distribution-guard.mjs +34 -13
  49. package/dist/functions/functions/is-conditional-type-distribution-guard.mjs.map +1 -1
  50. package/dist/functions/functions/is-readonly-node.mjs +120 -14
  51. package/dist/functions/functions/is-readonly-node.mjs.map +1 -1
  52. package/dist/functions/functions/is-spread-parameter-node.mjs +5 -6
  53. package/dist/functions/functions/is-spread-parameter-node.mjs.map +1 -1
  54. package/dist/functions/functions/remove-parentheses.mjs +4 -4
  55. package/dist/functions/functions/remove-parentheses.mjs.map +1 -1
  56. package/dist/functions/functions/should-avoid-parentheses-for-readonly.mjs +23 -9
  57. package/dist/functions/functions/should-avoid-parentheses-for-readonly.mjs.map +1 -1
  58. package/dist/functions/functions/unwrap-readonly.mjs +3 -4
  59. package/dist/functions/functions/unwrap-readonly.mjs.map +1 -1
  60. package/dist/functions/functions/wrap-with-parentheses.d.mts.map +1 -1
  61. package/dist/functions/functions/wrap-with-parentheses.mjs +54 -29
  62. package/dist/functions/functions/wrap-with-parentheses.mjs.map +1 -1
  63. package/dist/functions/index.mjs +5 -23
  64. package/dist/functions/index.mjs.map +1 -1
  65. package/dist/functions/utils/index.mjs +2 -2
  66. package/dist/functions/utils/index.mjs.map +1 -1
  67. package/dist/functions/utils/replace-with-debug.mjs +4 -6
  68. package/dist/functions/utils/replace-with-debug.mjs.map +1 -1
  69. package/dist/index.mjs +2 -23
  70. package/dist/index.mjs.map +1 -1
  71. package/package.json +11 -12
  72. package/src/functions/ast-transformers/convert-to-readonly.test.mts +10 -1
  73. package/src/functions/ast-transformers/enable-no-unchecked-indexed-access.mts +438 -0
  74. package/src/functions/ast-transformers/enable-no-unchecked-indexed-access.test.mts +619 -0
  75. package/src/functions/ast-transformers/index.mts +1 -0
  76. package/src/functions/functions/wrap-with-parentheses.mts +5 -2
@@ -1 +1 @@
1
- {"version":3,"file":"append-as-const.mjs","sources":["../../../src/functions/ast-transformers/append-as-const.mts"],"sourcesContent":["import { Arr, ISet } from 'ts-data-forge';\nimport * as tsm from 'ts-morph';\nimport { type DeepReadonly } from 'ts-type-forge';\nimport {\n hasDisableNextLineComment,\n isAsConstNode,\n} from '../functions/index.mjs';\nimport { replaceNodeWithDebugPrint } from '../utils/index.mjs';\nimport { type TsMorphTransformer } from './types.mjs';\n\nconst TRANSFORMER_NAME = 'append-as-const';\n\nexport const appendAsConstTransformer = (\n options?: AppendAsConstTransformerOptions,\n): TsMorphTransformer => {\n const ignorePrefixes = ISet.create(\n options?.ignorePrefixes ?? ['mut_', '#mut_', '_mut_', 'draft'],\n );\n\n const optionsInternal: AppendAsConstTransformerOptionsInternal = {\n applyLevel: options?.applyLevel ?? 'avoidInFunctionArgs',\n ignoredPrefixes: ignorePrefixes,\n removeAsConstForConstTypeParameters:\n options?.removeAsConstForConstTypeParameters ?? true,\n\n debugPrint: options?.debug === true ? console.debug : () => {},\n replaceNode:\n options?.debug === true\n ? replaceNodeWithDebugPrint\n : (node, newNodeText) => node.replaceWithText(newNodeText),\n } as const;\n\n return {\n name: TRANSFORMER_NAME,\n transform: (sourceAst) => {\n for (const node of sourceAst.getDescendantsOfKind(\n tsm.SyntaxKind.VariableDeclaration,\n )) {\n transformNode(\n node,\n {\n isUnderConstContext: false,\n isDirectUnderConstInitializer: false,\n },\n optionsInternal,\n );\n }\n\n if (optionsInternal.removeAsConstForConstTypeParameters) {\n removeAsConstInConstTypeParameterArgs(sourceAst, optionsInternal);\n }\n },\n };\n};\n\nexport type AppendAsConstTransformerOptions = DeepReadonly<{\n /**\n * @default \"avoidInFunctionArgs\"\n */\n applyLevel?: 'all' | 'avoidInFunctionArgs';\n\n /**\n * A mute keywords to ignore the readonly conversion.\n *\n * (e.g. `\"mut_\"`)\n *\n * @default ['mut_', '#mut_', '_mut_', 'draft']\n */\n ignorePrefixes?: string[];\n\n /**\n * Whether to remove redundant `as const` assertions from call arguments\n * whose corresponding parameter type is exactly a `const`-modified type\n * parameter.\n *\n * (e.g. `f([1, 2] as const)` becomes `f([1, 2])` for\n * `function f<const T>(x: T): T`, because the `const` type parameter\n * already makes TypeScript infer the argument as if it were annotated\n * with `as const`.)\n *\n * Only applies when the callee resolves to a single call signature within\n * the transformed file itself; imported callees are left as they are.\n *\n * @default true\n */\n removeAsConstForConstTypeParameters?: boolean;\n\n debug?: boolean;\n}>;\n\ntype AppendAsConstTransformerOptionsInternal = DeepReadonly<{\n applyLevel: 'all' | 'avoidInFunctionArgs';\n ignoredPrefixes: ISet<string>;\n removeAsConstForConstTypeParameters: boolean;\n\n debugPrint: (...args: readonly unknown[]) => void;\n replaceNode: (node: tsm.Node, newNodeText: string) => void;\n}>;\n\ntype AsConstContext = Readonly<{\n /**\n * Whether the current node is under an `as const` context.\n *\n * (e.g. `[1, 2, {x: 3}] as const` --> `isUnderConstContext` is true for `[1, 2, {x: 3}]` and its children `{x: 3}`)\n */\n isUnderConstContext: boolean;\n\n /**\n * Whether the current node is directly under a `const` variable initializer.\n *\n * (e.g. `const foo = [1, 2, 3];` --> `isDirectUnderConstInitializer` is true for `[1, 2, 3]`)\n */\n isDirectUnderConstInitializer: boolean;\n}>;\n\nconst transformNode = (\n node: tsm.Node,\n context: AsConstContext,\n options: AppendAsConstTransformerOptionsInternal,\n): void => {\n if (node.wasForgotten()) {\n return;\n }\n\n options.debugPrint(node.getKindName(), node.getText(), { context });\n\n if (hasDisableNextLineComment(node, TRANSFORMER_NAME)) {\n options.debugPrint('skipped by disable-next-line comment');\n\n return;\n }\n\n if (\n options.applyLevel === 'avoidInFunctionArgs' &&\n tsm.Node.isCallExpression(node)\n ) {\n return;\n }\n\n if (node.isKind(tsm.SyntaxKind.VariableDeclaration)) {\n const nodeName = node.getName();\n\n // check for ignorePrefix\n if (options.ignoredPrefixes.some((p) => nodeName.startsWith(p))) {\n // Skip conversion for variable declarations with ignored prefixes\n // Example: const mut_foo: string[] = []; -> remains as is, without appending `as const`\n options.debugPrint('skipped variable declaration by ignorePrefixes');\n\n return;\n }\n\n const variableStatement = node.getVariableStatement();\n\n if (\n variableStatement !== undefined &&\n hasDisableNextLineComment(variableStatement, TRANSFORMER_NAME)\n ) {\n return;\n }\n\n const initializer = node.getInitializer();\n\n if (initializer === undefined) {\n return;\n }\n\n const declarationKindKeywords = node\n .getVariableStatement()\n ?.getDeclarationKindKeywords()\n .map((k) => k.getText());\n\n if (\n declarationKindKeywords !== undefined &&\n Arr.isFixedLengthArray(1, declarationKindKeywords)\n ) {\n transformNode(\n initializer,\n {\n isDirectUnderConstInitializer: declarationKindKeywords[0] === 'const',\n isUnderConstContext: false,\n },\n options,\n );\n\n return;\n }\n\n // const [a, b] = ...;\n // TODO: Support ignoredPrefixes in ArrayBindingPattern\n // if (ts.isArrayBindingPattern(nodeName)) {\n // // for (const [i, el] of nodeName.elements.entries())\n // }\n\n // const { x, y } = ...;\n // TODO: Support ignoredPrefixes in ObjectBindingPattern\n // if (ts.isObjectBindingPattern(nodeName)) {\n // // for (const [i, el] of nodeName.elements.entries())\n // }\n }\n\n // Skip already type asserted nodes\n if (tsm.Node.isAsExpression(node) && !isAsConstNode(node)) {\n return;\n }\n\n // pass by ([(X)] -> X)\n if (tsm.Node.isParenthesizedExpression(node)) {\n transformNode(node.getExpression(), context, options);\n\n return;\n }\n\n // pass by ([X satisfies ...] -> X)\n if (tsm.Node.isSatisfiesExpression(node)) {\n transformNode(node.getExpression(), context, options);\n\n return;\n }\n\n // pass by property initializer ([key: value] -> value)\n if (tsm.Node.isPropertyAssignment(node)) {\n const initializer = node.getInitializer();\n\n if (initializer !== undefined) {\n transformNode(initializer, context, options);\n }\n\n return;\n }\n\n // pass by arrow function body ([() => X] -> X)\n if (tsm.Node.isArrowFunction(node)) {\n const body = node.getBody();\n\n transformNode(body, context, options);\n\n return;\n }\n\n // pass by spread element ([...X] -> X)\n if (tsm.Node.isSpreadElement(node)) {\n transformNode(node.getExpression(), context, options);\n\n return;\n }\n\n if (\n node.isKind(tsm.SyntaxKind.NoSubstitutionTemplateLiteral) || // `abc`\n node.isKind(tsm.SyntaxKind.NumericLiteral) || // 123\n node.isKind(tsm.SyntaxKind.BigIntLiteral) || // 123n\n node.isKind(tsm.SyntaxKind.StringLiteral) || // 'abc'\n node.isKind(tsm.SyntaxKind.TrueKeyword) || // true\n node.isKind(tsm.SyntaxKind.FalseKeyword) // false\n ) {\n if (\n !context.isDirectUnderConstInitializer &&\n !context.isUnderConstContext\n ) {\n options.replaceNode(node, `${node.getText()} as const`);\n }\n\n return;\n }\n\n if (node.isKind(tsm.SyntaxKind.TemplateExpression)) {\n if (!context.isUnderConstContext) {\n options.replaceNode(node, `${node.getText()} as const`);\n }\n\n return;\n }\n\n if (tsm.Node.isArrayLiteralExpression(node)) {\n for (const el of node.getElements()) {\n transformNode(\n el,\n {\n isUnderConstContext: true, // [...] as const\n isDirectUnderConstInitializer: false,\n },\n options,\n );\n }\n\n if (!context.isUnderConstContext) {\n options.replaceNode(node, `${node.getText()} as const`);\n }\n\n return;\n }\n\n if (tsm.Node.isObjectLiteralExpression(node)) {\n for (const el of node.getProperties()) {\n transformNode(\n el,\n {\n isUnderConstContext: true, // {...} as const\n isDirectUnderConstInitializer: false,\n },\n options,\n );\n }\n\n if (!context.isUnderConstContext) {\n options.replaceNode(node, `${node.getText()} as const`);\n }\n\n return;\n }\n\n // `as const` node\n if (isAsConstNode(node)) {\n if (context.isDirectUnderConstInitializer) {\n // In const variable declarations, remove `as const` first and then re-append it later if needed\n\n transformNode(\n node.getExpression(),\n {\n isUnderConstContext: false,\n isDirectUnderConstInitializer: true,\n },\n options,\n );\n\n options.replaceNode(\n node,\n // The expression may be marked \"as const\"\n node.getExpression().getText(),\n ); // remove `as const`\n\n return;\n }\n\n if (context.isUnderConstContext) {\n transformNode(\n node.getExpression(),\n {\n isUnderConstContext: true,\n isDirectUnderConstInitializer: false,\n },\n options,\n );\n\n options.replaceNode(\n node,\n // The expression may be marked \"as const\"\n node.getExpression().getText(),\n ); // remove `as const`\n\n return;\n }\n\n transformNode(\n node.getExpression(),\n {\n isUnderConstContext: true,\n isDirectUnderConstInitializer: false,\n },\n options,\n );\n\n return;\n }\n\n if (tsm.Node.isConditionalExpression(node)) {\n // For conditional expressions, traverse both branches in a non-const context\n transformNode(\n node.getWhenTrue(),\n {\n isDirectUnderConstInitializer: context.isDirectUnderConstInitializer,\n isUnderConstContext: false,\n },\n options,\n );\n\n transformNode(\n node.getWhenFalse(),\n {\n isDirectUnderConstInitializer: context.isDirectUnderConstInitializer,\n isUnderConstContext: false,\n },\n options,\n );\n\n // return;\n }\n};\n\n/**\n * Removes redundant `as const` assertions from call arguments whose\n * corresponding parameter type is exactly a `const`-modified type parameter\n * (e.g. `f([1, 2] as const)` for `function f<const T>(x: T): T`).\n *\n * A `const` type parameter makes TypeScript treat every inference candidate\n * as if it were annotated with `as const`, so when the parameter type is the\n * bare type parameter itself, removing the assertion cannot change the\n * inferred type. Conservative bail-outs (the `as const` is kept) when:\n *\n * - the callee does not resolve to exactly one call signature (unresolved\n * imports resolve to none, since each file is transformed in an isolated\n * single-file project; overloaded functions resolve to several),\n * - the call has explicit type arguments (inference is not involved),\n * - the argument is a spread argument or follows one (its parameter position\n * is not statically known),\n * - the parameter type is not the bare type parameter (e.g. `readonly T[]`).\n */\nconst removeAsConstInConstTypeParameterArgs = (\n // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types\n sourceAst: tsm.SourceFile,\n options: AppendAsConstTransformerOptionsInternal,\n): void => {\n // Reversed so that calls nested inside another call's arguments are\n // processed before the outer call replaces (and thereby forgets) them.\n for (const call of sourceAst\n .getDescendantsOfKind(tsm.SyntaxKind.CallExpression)\n .toReversed()) {\n if (call.wasForgotten()) {\n continue;\n }\n\n const args = call.getArguments();\n\n // Cheap syntactic pre-check before touching the type checker\n if (!args.some(isAsConstNode)) {\n continue;\n }\n\n if (hasDisableNextLineComment(call, TRANSFORMER_NAME)) {\n continue;\n }\n\n const variableStatement = call.getFirstAncestorByKind(\n tsm.SyntaxKind.VariableStatement,\n );\n\n if (\n variableStatement !== undefined &&\n hasDisableNextLineComment(variableStatement, TRANSFORMER_NAME)\n ) {\n continue;\n }\n\n // With explicit type arguments no inference happens, so the `as const`\n // may be load-bearing for assignability.\n if (!Arr.isEmpty(call.getTypeArguments())) {\n continue;\n }\n\n const callTarget = resolveSingleSignatureCallTarget(call);\n\n if (callTarget === undefined) {\n continue;\n }\n\n removeAsConstArgsOfCall(args, callTarget, options);\n }\n};\n\nconst removeAsConstArgsOfCall = (\n args: readonly tsm.Node[],\n // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types\n callTarget: ResolvedCallTarget,\n options: AppendAsConstTransformerOptionsInternal,\n): void => {\n // Argument positions at or after a spread argument cannot be mapped to a\n // parameter statically.\n const firstSpreadIndex = args.findIndex((a) =>\n a.isKind(tsm.SyntaxKind.SpreadElement),\n );\n\n const mappableArgCount =\n firstSpreadIndex === -1 ? args.length : firstSpreadIndex;\n\n for (const [argumentIndex, argument] of args.entries()) {\n if (argumentIndex >= mappableArgCount) {\n return;\n }\n\n if (argument.wasForgotten() || !isAsConstNode(argument)) {\n continue;\n }\n\n if (hasDisableNextLineComment(argument, TRANSFORMER_NAME)) {\n continue;\n }\n\n const parameter = getMatchedParameter(callTarget.parameters, argumentIndex);\n\n if (\n parameter === undefined ||\n !isBareConstTypeParameterReference(\n parameter,\n callTarget.constTypeParameterNames,\n )\n ) {\n continue;\n }\n\n options.debugPrint(\n 'removing redundant as const in const type parameter argument',\n argument.getText(),\n );\n\n options.replaceNode(argument, argument.getExpression().getText());\n }\n};\n\ntype ResolvedCallTarget = Readonly<{\n parameters: readonly tsm.ParameterDeclaration[];\n constTypeParameterNames: ISet<string>;\n}>;\n\n/**\n * Resolves the callee of a call expression to the declaration of its single\n * call signature, and collects the names of that declaration's\n * `const`-modified type parameters.\n *\n * Returns `undefined` when the callee does not resolve to exactly one call\n * signature, the resolved declaration has no parameters or type parameters,\n * or none of the type parameters carry the `const` modifier.\n */\nconst resolveSingleSignatureCallTarget = (\n // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types\n call: tsm.CallExpression,\n): ResolvedCallTarget | undefined => {\n // 0 signatures: the callee is unresolved (e.g. imported, since each file\n // is transformed in an isolated single-file project).\n // 2+ signatures: overloads, where removing `as const` could change which\n // overload is selected.\n if (\n !Arr.isFixedLengthArray(\n 1,\n call.getExpression().getType().getCallSignatures(),\n )\n ) {\n return undefined;\n }\n\n const declaration = call\n .getProject()\n .getTypeChecker()\n .getResolvedSignature(call)\n ?.getDeclaration();\n\n if (\n declaration === undefined ||\n !tsm.Node.isParametered(declaration) ||\n !tsm.Node.isTypeParametered(declaration)\n ) {\n return undefined;\n }\n\n // Only type parameters declared on the call's own signature are inferred\n // at the call site; a `const` type parameter of an enclosing declaration\n // (e.g. a generic class containing this method) is already fixed there.\n const constTypeParameterNames = ISet.create(\n declaration\n .getTypeParameters()\n .filter((tp) => tp.hasModifier(tsm.SyntaxKind.ConstKeyword))\n .map((tp) => tp.getName()),\n );\n\n if (constTypeParameterNames.size === 0) {\n return undefined;\n }\n\n return {\n parameters: declaration.getParameters(),\n constTypeParameterNames,\n } as const;\n};\n\nconst getMatchedParameter = (\n // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types\n parameters: readonly tsm.ParameterDeclaration[],\n argumentIndex: number,\n): tsm.ParameterDeclaration | undefined => {\n if (argumentIndex < parameters.length) {\n return parameters[argumentIndex];\n }\n\n const lastParameter = parameters.at(-1);\n\n return lastParameter?.isRestParameter() === true ? lastParameter : undefined;\n};\n\n/**\n * Whether the parameter's declared type is exactly a bare reference to one of\n * the given `const`-modified type parameters (i.e. `x: T`, not `x: readonly\n * T[]` or `x: Wrapper<T>` — there the argument expression's own type is still\n * observable, so the `as const` is kept).\n */\nconst isBareConstTypeParameterReference = (\n // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types\n parameter: tsm.ParameterDeclaration,\n constTypeParameterNames: ISet<string>,\n): boolean => {\n const typeNode = parameter.getTypeNode();\n\n if (typeNode === undefined) {\n return false;\n }\n\n if (!typeNode.isKind(tsm.SyntaxKind.TypeReference)) {\n return false;\n }\n\n const typeName = typeNode.getTypeName();\n\n return (\n typeName.isKind(tsm.SyntaxKind.Identifier) &&\n Arr.isEmpty(typeNode.getTypeArguments()) &&\n constTypeParameterNames.has(typeName.getText())\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"append-as-const.mjs","sourceRoot":"","sources":["../../../src/functions/ast-transformers/append-as-const.mts"],"names":[],"mappings":"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"}
@@ -1,73 +1,88 @@
1
+
2
+
1
3
  import { Arr } from 'ts-data-forge';
2
- import { hasDisableNextLineComment } from '../functions/has-disable-next-line-comment.mjs';
3
- import 'ts-morph';
4
- import '../functions/is-atomic-type-node.mjs';
5
-
6
- const TRANSFORMER_NAME = "convert-interface-to-type";
7
- const convertInterfaceToTypeTransformer = () => ({
8
- name: TRANSFORMER_NAME,
9
- transform: (sourceAst) => {
10
- const processInterfaces = (container) => {
11
- const interfaces = container.getInterfaces();
12
- for (const interfaceDecl of interfaces) {
13
- if (hasDisableNextLineComment(interfaceDecl, TRANSFORMER_NAME)) {
14
- continue;
15
- }
16
- convertInterfaceToType(interfaceDecl);
17
- }
18
- };
19
- const convertInterfaceToType = (interfaceDecl) => {
20
- const interfaceName = interfaceDecl.getName();
21
- const typeParameters = interfaceDecl.getTypeParameters();
22
- const extendsExpressions = interfaceDecl.getExtends();
23
- const members = interfaceDecl.getMembers();
24
- const typeParamsStr = Arr.isNonEmpty(typeParameters) ? `<${typeParameters.map((tp) => tp.getText()).join(", ")}>` : "";
25
- const mut_typeBody = (() => {
26
- if (Arr.isEmpty(extendsExpressions)) {
27
- return buildTypeLiteral(members);
28
- }
29
- if (Arr.isEmpty(members)) {
30
- const extendedTypes = extendsExpressions.map(
31
- (ext) => ext.getText()
32
- );
33
- return Arr.isFixedLengthArray(1, extendedTypes) ? extendedTypes[0] : extendedTypes.join(" & ");
4
+ import { hasDisableNextLineComment } from '../functions/index.mjs';
5
+ const TRANSFORMER_NAME = 'convert-interface-to-type';
6
+
7
+
8
+
9
+
10
+ export const convertInterfaceToTypeTransformer = () => ({
11
+ name: TRANSFORMER_NAME,
12
+ transform: (sourceAst) => {
13
+ const processInterfaces = (container) => {
14
+ const interfaces = container.getInterfaces();
15
+ for (const interfaceDecl of interfaces) {
16
+ if (hasDisableNextLineComment(interfaceDecl, TRANSFORMER_NAME)) {
17
+ continue;
18
+ }
19
+ convertInterfaceToType(interfaceDecl);
20
+ }
21
+ };
22
+ const convertInterfaceToType = (interfaceDecl) => {
23
+ const interfaceName = interfaceDecl.getName();
24
+ const typeParameters = interfaceDecl.getTypeParameters();
25
+ const extendsExpressions = interfaceDecl.getExtends();
26
+ const members = interfaceDecl.getMembers();
27
+
28
+ const typeParamsStr = Arr.isNonEmpty(typeParameters)
29
+ ? `<${typeParameters.map((tp) => tp.getText()).join(', ')}>`
30
+ : '';
31
+
32
+ const mut_typeBody = (() => {
33
+ if (Arr.isEmpty(extendsExpressions)) {
34
+
35
+ return buildTypeLiteral(members);
36
+ }
37
+ if (Arr.isEmpty(members)) {
38
+
39
+ const extendedTypes = extendsExpressions.map((ext) => ext.getText());
40
+ return Arr.isFixedLengthArray(1, extendedTypes)
41
+ ? extendedTypes[0]
42
+ : extendedTypes.join(' & ');
43
+ }
44
+
45
+ const extendedTypesWithMembers = extendsExpressions.map((ext) => ext.getText());
46
+ const ownType = buildTypeLiteral(members);
47
+ return Arr.toPushed(extendedTypesWithMembers, ownType).join(' & ');
48
+ })();
49
+
50
+ const isExported = interfaceDecl.isExported();
51
+ const exportKeyword = isExported ? 'export ' : '';
52
+
53
+ const leadingComments = interfaceDecl.getLeadingCommentRanges();
54
+ const commentTexts = leadingComments
55
+ .map((range) => range.getText())
56
+ .join('\n');
57
+ const jsDocText = commentTexts.length > 0 ? `${commentTexts}\n` : '';
58
+
59
+ const typeAliasText = `${jsDocText}${exportKeyword}type ${interfaceName}${typeParamsStr} = ${mut_typeBody};`;
60
+ interfaceDecl.replaceWithText(typeAliasText);
61
+ };
62
+ const buildTypeLiteral = (members) => {
63
+ if (Arr.isEmpty(members)) {
64
+ return 'Record<string, never>';
65
+ }
66
+ const memberTexts = members.map((member) => {
67
+
68
+ const leadingComments = member
69
+ .getLeadingCommentRanges()
70
+ .map((range) => range.getText())
71
+ .join('\n');
72
+ const memberText = member.getText();
73
+ return leadingComments.length > 0
74
+ ? `${leadingComments}\n${memberText}`
75
+ : memberText;
76
+ });
77
+ return `{\n ${memberTexts.join('\n ')}\n}`;
78
+ };
79
+
80
+ processInterfaces(sourceAst);
81
+
82
+ const namespaces = sourceAst.getModules();
83
+ for (const namespace of namespaces) {
84
+ processInterfaces(namespace);
34
85
  }
35
- const extendedTypesWithMembers = extendsExpressions.map(
36
- (ext) => ext.getText()
37
- );
38
- const ownType = buildTypeLiteral(members);
39
- return Arr.toPushed(extendedTypesWithMembers, ownType).join(" & ");
40
- })();
41
- const isExported = interfaceDecl.isExported();
42
- const exportKeyword = isExported ? "export " : "";
43
- const leadingComments = interfaceDecl.getLeadingCommentRanges();
44
- const commentTexts = leadingComments.map((range) => range.getText()).join("\n");
45
- const jsDocText = commentTexts.length > 0 ? `${commentTexts}
46
- ` : "";
47
- const typeAliasText = `${jsDocText}${exportKeyword}type ${interfaceName}${typeParamsStr} = ${mut_typeBody};`;
48
- interfaceDecl.replaceWithText(typeAliasText);
49
- };
50
- const buildTypeLiteral = (members) => {
51
- if (Arr.isEmpty(members)) {
52
- return "Record<string, never>";
53
- }
54
- const memberTexts = members.map((member) => {
55
- const leadingComments = member.getLeadingCommentRanges().map((range) => range.getText()).join("\n");
56
- const memberText = member.getText();
57
- return leadingComments.length > 0 ? `${leadingComments}
58
- ${memberText}` : memberText;
59
- });
60
- return `{
61
- ${memberTexts.join("\n ")}
62
- }`;
63
- };
64
- processInterfaces(sourceAst);
65
- const namespaces = sourceAst.getModules();
66
- for (const namespace of namespaces) {
67
- processInterfaces(namespace);
68
- }
69
- }
86
+ },
70
87
  });
71
-
72
- export { convertInterfaceToTypeTransformer };
73
- //# sourceMappingURL=convert-interface-to-type.mjs.map
88
+ //# sourceMappingURL=convert-interface-to-type.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"convert-interface-to-type.mjs","sources":["../../../src/functions/ast-transformers/convert-interface-to-type.mts"],"sourcesContent":["/* eslint-disable unicorn/consistent-function-scoping -- helper functions are kept inside for clarity */\n/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ts-morph uses mutable types */\nimport { Arr } from 'ts-data-forge';\nimport type * as tsm from 'ts-morph';\nimport { hasDisableNextLineComment } from '../functions/index.mjs';\nimport { type TsMorphTransformer } from './types.mjs';\n\nconst TRANSFORMER_NAME = 'convert-interface-to-type';\n\n/**\n * interface による型定義を type による型定義に変換する。\n * @typescript-eslint/consistent-type-definitions: [\"error\", \"type\"] と同等の動作\n */\nexport const convertInterfaceToTypeTransformer = (): TsMorphTransformer =>\n ({\n name: TRANSFORMER_NAME,\n transform: (sourceAst) => {\n const processInterfaces = (\n container: tsm.SourceFile | tsm.ModuleDeclaration,\n ): void => {\n const interfaces = container.getInterfaces();\n\n for (const interfaceDecl of interfaces) {\n if (hasDisableNextLineComment(interfaceDecl, TRANSFORMER_NAME)) {\n continue;\n }\n\n convertInterfaceToType(interfaceDecl);\n }\n };\n\n const convertInterfaceToType = (\n interfaceDecl: tsm.InterfaceDeclaration,\n ): void => {\n const interfaceName = interfaceDecl.getName();\n\n const typeParameters = interfaceDecl.getTypeParameters();\n\n const extendsExpressions = interfaceDecl.getExtends();\n\n const members = interfaceDecl.getMembers();\n\n // Build type parameters string\n const typeParamsStr = Arr.isNonEmpty(typeParameters)\n ? `<${typeParameters.map((tp) => tp.getText()).join(', ')}>`\n : '';\n\n // Build type literal from members\n const mut_typeBody: string = (() => {\n if (Arr.isEmpty(extendsExpressions)) {\n // No extends: simple type literal\n return buildTypeLiteral(members);\n }\n\n if (Arr.isEmpty(members)) {\n // Only extends, no own members: union of extended types\n const extendedTypes = extendsExpressions.map((ext) =>\n ext.getText(),\n );\n\n return Arr.isFixedLengthArray(1, extendedTypes)\n ? extendedTypes[0]\n : extendedTypes.join(' & ');\n }\n\n // Both extends and own members: intersection\n const extendedTypesWithMembers = extendsExpressions.map((ext) =>\n ext.getText(),\n );\n\n const ownType = buildTypeLiteral(members);\n\n return Arr.toPushed(extendedTypesWithMembers, ownType).join(' & ');\n })();\n\n // Get export keyword\n const isExported = interfaceDecl.isExported();\n\n const exportKeyword = isExported ? 'export ' : '';\n\n // Get leading comments (including JSDoc)\n const leadingComments = interfaceDecl.getLeadingCommentRanges();\n\n const commentTexts = leadingComments\n .map((range) => range.getText())\n .join('\\n');\n\n const jsDocText = commentTexts.length > 0 ? `${commentTexts}\\n` : '';\n\n // Replace interface with type alias\n const typeAliasText =\n `${jsDocText}${exportKeyword}type ${interfaceName}${typeParamsStr} = ${mut_typeBody};` as const;\n\n interfaceDecl.replaceWithText(typeAliasText);\n };\n\n const buildTypeLiteral = (\n members: readonly tsm.TypeElementTypes[],\n ): string => {\n if (Arr.isEmpty(members)) {\n return 'Record<string, never>';\n }\n\n const memberTexts = members.map((member) => {\n // Preserve comments\n const leadingComments = member\n .getLeadingCommentRanges()\n .map((range) => range.getText())\n .join('\\n');\n\n const memberText = member.getText();\n\n return leadingComments.length > 0\n ? `${leadingComments}\\n${memberText}`\n : memberText;\n });\n\n return `{\\n ${memberTexts.join('\\n ')}\\n}`;\n };\n\n // Process top-level interface declarations\n processInterfaces(sourceAst);\n\n // Process interfaces inside namespaces/modules\n const namespaces = sourceAst.getModules();\n\n for (const namespace of namespaces) {\n processInterfaces(namespace);\n }\n },\n }) as const;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"convert-interface-to-type.mjs","sourceRoot":"","sources":["../../../src/functions/ast-transformers/convert-interface-to-type.mts"],"names":[],"mappings":"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"}