ts-codemod-lib 1.4.2 → 2.0.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.
- package/README.md +10 -7
- package/dist/cmd/append-as-const.mjs +5 -4
- package/dist/cmd/append-as-const.mjs.map +1 -1
- package/dist/cmd/convert-interface-to-type.mjs +5 -4
- package/dist/cmd/convert-interface-to-type.mjs.map +1 -1
- package/dist/cmd/convert-to-readonly.mjs +6 -5
- package/dist/cmd/convert-to-readonly.mjs.map +1 -1
- package/dist/cmd/replace-any-with-unknown.mjs +5 -4
- package/dist/cmd/replace-any-with-unknown.mjs.map +1 -1
- package/dist/cmd/replace-record-with-unknown-record.mjs +5 -4
- package/dist/cmd/replace-record-with-unknown-record.mjs.map +1 -1
- package/dist/cmd/run-transformer-cli.d.mts.map +1 -1
- package/dist/cmd/run-transformer-cli.mjs +1 -2
- package/dist/cmd/run-transformer-cli.mjs.map +1 -1
- package/dist/entry-point.mjs +2 -2
- package/dist/functions/ast-transformers/append-as-const.d.mts +3 -0
- package/dist/functions/ast-transformers/append-as-const.d.mts.map +1 -1
- package/dist/functions/ast-transformers/append-as-const.mjs +90 -168
- package/dist/functions/ast-transformers/append-as-const.mjs.map +1 -1
- package/dist/functions/ast-transformers/convert-interface-to-type.d.mts.map +1 -1
- package/dist/functions/ast-transformers/convert-interface-to-type.mjs +12 -7
- package/dist/functions/ast-transformers/convert-interface-to-type.mjs.map +1 -1
- package/dist/functions/ast-transformers/{convert-to-readonly-type.d.mts → convert-to-readonly.d.mts} +2 -2
- package/dist/functions/ast-transformers/convert-to-readonly.d.mts.map +1 -0
- package/dist/functions/ast-transformers/{convert-to-readonly-type.mjs → convert-to-readonly.mjs} +23 -18
- package/dist/functions/ast-transformers/convert-to-readonly.mjs.map +1 -0
- package/dist/functions/ast-transformers/index.d.mts +1 -1
- package/dist/functions/ast-transformers/index.d.mts.map +1 -1
- package/dist/functions/ast-transformers/index.mjs +1 -1
- package/dist/functions/ast-transformers/readonly-transformer-helpers/compare-union-types.mjs +2 -3
- package/dist/functions/ast-transformers/readonly-transformer-helpers/compare-union-types.mjs.map +1 -1
- package/dist/functions/ast-transformers/readonly-transformer-helpers/group-union-types.d.mts +2 -2
- package/dist/functions/ast-transformers/readonly-transformer-helpers/group-union-types.d.mts.map +1 -1
- package/dist/functions/ast-transformers/readonly-transformer-helpers/group-union-types.mjs +2 -2
- package/dist/functions/ast-transformers/readonly-transformer-helpers/group-union-types.mjs.map +1 -1
- package/dist/functions/ast-transformers/readonly-transformer-helpers/readonly-context.d.mts.map +1 -1
- package/dist/functions/ast-transformers/readonly-transformer-helpers/readonly-context.mjs.map +1 -1
- package/dist/functions/ast-transformers/replace-any-with-unknown.d.mts.map +1 -1
- package/dist/functions/ast-transformers/replace-any-with-unknown.mjs +28 -34
- package/dist/functions/ast-transformers/replace-any-with-unknown.mjs.map +1 -1
- package/dist/functions/ast-transformers/replace-record-with-unknown-record.d.mts.map +1 -1
- package/dist/functions/ast-transformers/replace-record-with-unknown-record.mjs +154 -150
- package/dist/functions/ast-transformers/replace-record-with-unknown-record.mjs.map +1 -1
- package/dist/functions/ast-transformers/transform-source-code.d.mts.map +1 -1
- package/dist/functions/ast-transformers/transform-source-code.mjs +4 -6
- package/dist/functions/ast-transformers/transform-source-code.mjs.map +1 -1
- package/dist/functions/ast-transformers/types.d.mts +5 -5
- package/dist/functions/ast-transformers/types.d.mts.map +1 -1
- package/dist/functions/functions/index.d.mts +1 -1
- package/dist/functions/functions/index.d.mts.map +1 -1
- package/dist/functions/functions/index.mjs +1 -1
- package/dist/functions/functions/{is-primitive-type-node.d.mts → is-atomic-type-node.d.mts} +3 -3
- package/dist/functions/functions/is-atomic-type-node.d.mts.map +1 -0
- package/dist/functions/functions/{is-primitive-type-node.mjs → is-atomic-type-node.mjs} +5 -5
- package/dist/functions/functions/is-atomic-type-node.mjs.map +1 -0
- package/dist/functions/functions/is-readonly-node.d.mts +4 -4
- package/dist/functions/functions/is-readonly-node.d.mts.map +1 -1
- package/dist/functions/functions/is-readonly-node.mjs +2 -2
- package/dist/functions/functions/is-readonly-node.mjs.map +1 -1
- package/dist/functions/functions/wrap-with-parentheses.d.mts +1 -1
- package/dist/functions/functions/wrap-with-parentheses.d.mts.map +1 -1
- package/dist/functions/index.mjs +2 -2
- package/dist/index.mjs +2 -2
- package/package.json +17 -5
- package/src/cmd/append-as-const.mts +5 -3
- package/src/cmd/convert-interface-to-type.mts +5 -3
- package/src/cmd/convert-to-readonly.mts +6 -4
- package/src/cmd/replace-any-with-unknown.mts +5 -3
- package/src/cmd/replace-record-with-unknown-record.mts +5 -3
- package/src/cmd/run-transformer-cli.mts +0 -1
- package/src/functions/ast-transformers/append-as-const.mts +143 -266
- package/src/functions/ast-transformers/append-as-const.test.mts +67 -56
- package/src/functions/ast-transformers/convert-interface-to-type.mts +96 -89
- package/src/functions/ast-transformers/convert-interface-to-type.test.mts +20 -20
- package/src/functions/ast-transformers/{convert-to-readonly-type.mts → convert-to-readonly.mts} +32 -30
- package/src/functions/ast-transformers/{convert-to-readonly-type.test.mts → convert-to-readonly.test.mts} +36 -10
- package/src/functions/ast-transformers/index.mts +1 -1
- package/src/functions/ast-transformers/readonly-transformer-helpers/compare-union-types.mts +7 -8
- package/src/functions/ast-transformers/readonly-transformer-helpers/group-union-types.mts +5 -5
- package/src/functions/ast-transformers/readonly-transformer-helpers/readonly-context.mts +4 -4
- package/src/functions/ast-transformers/replace-any-with-unknown.mts +31 -40
- package/src/functions/ast-transformers/replace-record-with-unknown-record.mts +183 -182
- package/src/functions/ast-transformers/transform-source-code.mts +3 -4
- package/src/functions/ast-transformers/transformer-specific-ignore.test.mts +6 -6
- package/src/functions/ast-transformers/types.mts +7 -7
- package/src/functions/functions/index.mts +1 -1
- package/src/functions/functions/{is-primitive-type-node.mts → is-atomic-type-node.mts} +11 -10
- package/src/functions/functions/is-readonly-node.mts +6 -6
- package/src/functions/functions/wrap-with-parentheses.mts +2 -2
- package/dist/functions/ast-transformers/convert-to-readonly-type.d.mts.map +0 -1
- package/dist/functions/ast-transformers/convert-to-readonly-type.mjs.map +0 -1
- package/dist/functions/functions/is-primitive-type-node.d.mts.map +0 -1
- package/dist/functions/functions/is-primitive-type-node.mjs.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ISet, Arr
|
|
1
|
+
import { ISet, Arr } from 'ts-data-forge';
|
|
2
2
|
import * as tsm from 'ts-morph';
|
|
3
3
|
import { hasDisableNextLineComment } from '../functions/has-disable-next-line-comment.mjs';
|
|
4
4
|
import { isAsConstNode } from '../functions/is-as-const-node.mjs';
|
|
5
|
-
import '../functions/is-
|
|
5
|
+
import '../functions/is-atomic-type-node.mjs';
|
|
6
6
|
import { replaceNodeWithDebugPrint } from '../utils/replace-with-debug.mjs';
|
|
7
7
|
|
|
8
8
|
const TRANSFORMER_NAME = 'append-as-const';
|
|
@@ -16,30 +16,23 @@ const appendAsConstTransformer = (options) => {
|
|
|
16
16
|
? replaceNodeWithDebugPrint
|
|
17
17
|
: (node, newNodeText) => node.replaceWithText(newNodeText),
|
|
18
18
|
};
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
return {
|
|
20
|
+
name: TRANSFORMER_NAME,
|
|
21
|
+
transform: (sourceAst) => {
|
|
22
|
+
for (const node of sourceAst.getDescendantsOfKind(tsm.SyntaxKind.VariableDeclaration)) {
|
|
23
|
+
transformNode(node, {
|
|
24
|
+
isUnderConstContext: false,
|
|
25
|
+
isDirectUnderConstInitializer: false,
|
|
26
|
+
}, optionsInternal);
|
|
27
|
+
}
|
|
28
|
+
},
|
|
27
29
|
};
|
|
28
|
-
// eslint-disable-next-line functional/immutable-data
|
|
29
|
-
transformer.transformerName = TRANSFORMER_NAME;
|
|
30
|
-
return transformer;
|
|
31
30
|
};
|
|
32
31
|
const transformNode = (node, context, options) => {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
node.isKind(tsm.SyntaxKind.TypeLiteral) ||
|
|
36
|
-
node.isKind(tsm.SyntaxKind.TypeReference) ||
|
|
37
|
-
node.isKind(tsm.SyntaxKind.UnionType) ||
|
|
38
|
-
node.isKind(tsm.SyntaxKind.TypeAliasDeclaration) ||
|
|
39
|
-
node.isKind(tsm.SyntaxKind.ImportDeclaration) ||
|
|
40
|
-
isDirective(node)) {
|
|
41
|
-
return; // skip type annotations, import declarations, and directives
|
|
32
|
+
if (node.wasForgotten()) {
|
|
33
|
+
return;
|
|
42
34
|
}
|
|
35
|
+
options.debugPrint(node.getKindName(), node.getText(), { context });
|
|
43
36
|
if (hasDisableNextLineComment(node, TRANSFORMER_NAME)) {
|
|
44
37
|
options.debugPrint('skipped by disable-next-line comment');
|
|
45
38
|
return;
|
|
@@ -48,23 +41,6 @@ const transformNode = (node, context, options) => {
|
|
|
48
41
|
tsm.Node.isCallExpression(node)) {
|
|
49
42
|
return;
|
|
50
43
|
}
|
|
51
|
-
if (node.isKind(tsm.SyntaxKind.NoSubstitutionTemplateLiteral) || // `abc`
|
|
52
|
-
node.isKind(tsm.SyntaxKind.NumericLiteral) || // 123
|
|
53
|
-
node.isKind(tsm.SyntaxKind.BigIntLiteral) || // 123n
|
|
54
|
-
node.isKind(tsm.SyntaxKind.StringLiteral) || // 'abc'
|
|
55
|
-
node.isKind(tsm.SyntaxKind.TrueKeyword) || // true
|
|
56
|
-
node.isKind(tsm.SyntaxKind.FalseKeyword) // false
|
|
57
|
-
) {
|
|
58
|
-
if (context.isDirectUnderConstInitializer || context.isUnderConstContext) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
options.replaceNode(node, `${node.getText()} as const`);
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
if (node.isKind(tsm.SyntaxKind.TemplateExpression)) {
|
|
65
|
-
options.replaceNode(node, `${node.getText()} as const`);
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
44
|
if (node.isKind(tsm.SyntaxKind.VariableDeclaration)) {
|
|
69
45
|
const nodeName = node.getName();
|
|
70
46
|
// check for ignorePrefix
|
|
@@ -74,6 +50,11 @@ const transformNode = (node, context, options) => {
|
|
|
74
50
|
options.debugPrint('skipped variable declaration by ignorePrefixes');
|
|
75
51
|
return;
|
|
76
52
|
}
|
|
53
|
+
const variableStatement = node.getVariableStatement();
|
|
54
|
+
if (variableStatement !== undefined &&
|
|
55
|
+
hasDisableNextLineComment(variableStatement, TRANSFORMER_NAME)) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
77
58
|
const initializer = node.getInitializer();
|
|
78
59
|
if (initializer === undefined) {
|
|
79
60
|
return;
|
|
@@ -87,7 +68,6 @@ const transformNode = (node, context, options) => {
|
|
|
87
68
|
transformNode(initializer, {
|
|
88
69
|
isDirectUnderConstInitializer: declarationKindKeywords[0] === 'const',
|
|
89
70
|
isUnderConstContext: false,
|
|
90
|
-
isUnderSpreadElement: context.isUnderSpreadElement,
|
|
91
71
|
}, options);
|
|
92
72
|
return;
|
|
93
73
|
}
|
|
@@ -102,67 +82,56 @@ const transformNode = (node, context, options) => {
|
|
|
102
82
|
// // for (const [i, el] of nodeName.elements.entries())
|
|
103
83
|
// }
|
|
104
84
|
}
|
|
105
|
-
//
|
|
106
|
-
if (isAsConstNode(node)) {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}, options);
|
|
125
|
-
options.replaceNode(node,
|
|
126
|
-
// The expression may be marked "as const"
|
|
127
|
-
node.getExpression().getText()); // remove `as const`
|
|
128
|
-
return;
|
|
85
|
+
// Skip already type asserted nodes
|
|
86
|
+
if (tsm.Node.isAsExpression(node) && !isAsConstNode(node)) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// pass by ([(X)] -> X)
|
|
90
|
+
if (tsm.Node.isParenthesizedExpression(node)) {
|
|
91
|
+
transformNode(node.getExpression(), context, options);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// pass by ([X satisfies ...] -> X)
|
|
95
|
+
if (tsm.Node.isSatisfiesExpression(node)) {
|
|
96
|
+
transformNode(node.getExpression(), context, options);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
// pass by property initializer ([key: value] -> value)
|
|
100
|
+
if (tsm.Node.isPropertyAssignment(node)) {
|
|
101
|
+
const initializer = node.getInitializer();
|
|
102
|
+
if (initializer !== undefined) {
|
|
103
|
+
transformNode(initializer, context, options);
|
|
129
104
|
}
|
|
130
|
-
transformNode(node.getExpression(), {
|
|
131
|
-
isUnderConstContext: true,
|
|
132
|
-
isDirectUnderConstInitializer: false,
|
|
133
|
-
isUnderSpreadElement: context.isUnderSpreadElement,
|
|
134
|
-
}, options);
|
|
135
105
|
return;
|
|
136
106
|
}
|
|
137
|
-
|
|
107
|
+
// pass by arrow function body ([() => X] -> X)
|
|
108
|
+
if (tsm.Node.isArrowFunction(node)) {
|
|
109
|
+
const body = node.getBody();
|
|
110
|
+
transformNode(body, context, options);
|
|
138
111
|
return;
|
|
139
112
|
}
|
|
113
|
+
// pass by spread element ([...X] -> X)
|
|
140
114
|
if (tsm.Node.isSpreadElement(node)) {
|
|
141
|
-
transformNode(node.getExpression(),
|
|
142
|
-
isDirectUnderConstInitializer: false,
|
|
143
|
-
isUnderConstContext: context.isUnderConstContext,
|
|
144
|
-
isUnderSpreadElement: true,
|
|
145
|
-
}, options);
|
|
115
|
+
transformNode(node.getExpression(), context, options);
|
|
146
116
|
return;
|
|
147
117
|
}
|
|
148
|
-
if (tsm.
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
isUnderConstContext: false,
|
|
159
|
-
isUnderSpreadElement: false,
|
|
160
|
-
}, options);
|
|
118
|
+
if (node.isKind(tsm.SyntaxKind.NoSubstitutionTemplateLiteral) || // `abc`
|
|
119
|
+
node.isKind(tsm.SyntaxKind.NumericLiteral) || // 123
|
|
120
|
+
node.isKind(tsm.SyntaxKind.BigIntLiteral) || // 123n
|
|
121
|
+
node.isKind(tsm.SyntaxKind.StringLiteral) || // 'abc'
|
|
122
|
+
node.isKind(tsm.SyntaxKind.TrueKeyword) || // true
|
|
123
|
+
node.isKind(tsm.SyntaxKind.FalseKeyword) // false
|
|
124
|
+
) {
|
|
125
|
+
if (!context.isDirectUnderConstInitializer &&
|
|
126
|
+
!context.isUnderConstContext) {
|
|
127
|
+
options.replaceNode(node, `${node.getText()} as const`);
|
|
161
128
|
}
|
|
162
129
|
return;
|
|
163
130
|
}
|
|
164
|
-
if (tsm.
|
|
165
|
-
|
|
131
|
+
if (node.isKind(tsm.SyntaxKind.TemplateExpression)) {
|
|
132
|
+
if (!context.isUnderConstContext) {
|
|
133
|
+
options.replaceNode(node, `${node.getText()} as const`);
|
|
134
|
+
}
|
|
166
135
|
return;
|
|
167
136
|
}
|
|
168
137
|
if (tsm.Node.isArrayLiteralExpression(node)) {
|
|
@@ -170,7 +139,6 @@ const transformNode = (node, context, options) => {
|
|
|
170
139
|
transformNode(el, {
|
|
171
140
|
isUnderConstContext: true, // [...] as const
|
|
172
141
|
isDirectUnderConstInitializer: false,
|
|
173
|
-
isUnderSpreadElement: context.isUnderSpreadElement,
|
|
174
142
|
}, options);
|
|
175
143
|
}
|
|
176
144
|
if (!context.isUnderConstContext) {
|
|
@@ -183,7 +151,6 @@ const transformNode = (node, context, options) => {
|
|
|
183
151
|
transformNode(el, {
|
|
184
152
|
isUnderConstContext: true, // {...} as const
|
|
185
153
|
isDirectUnderConstInitializer: false,
|
|
186
|
-
isUnderSpreadElement: context.isUnderSpreadElement,
|
|
187
154
|
}, options);
|
|
188
155
|
}
|
|
189
156
|
if (!context.isUnderConstContext) {
|
|
@@ -191,93 +158,48 @@ const transformNode = (node, context, options) => {
|
|
|
191
158
|
}
|
|
192
159
|
return;
|
|
193
160
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
161
|
+
// `as const` node
|
|
162
|
+
if (isAsConstNode(node)) {
|
|
163
|
+
if (context.isDirectUnderConstInitializer) {
|
|
164
|
+
// In const variable declarations, remove `as const` first and then re-append it later if needed
|
|
165
|
+
transformNode(node.getExpression(), {
|
|
166
|
+
isUnderConstContext: false,
|
|
167
|
+
isDirectUnderConstInitializer: true,
|
|
168
|
+
}, options);
|
|
169
|
+
options.replaceNode(node,
|
|
170
|
+
// The expression may be marked "as const"
|
|
171
|
+
node.getExpression().getText()); // remove `as const`
|
|
198
172
|
return;
|
|
199
173
|
}
|
|
200
|
-
|
|
174
|
+
if (context.isUnderConstContext) {
|
|
175
|
+
transformNode(node.getExpression(), {
|
|
176
|
+
isUnderConstContext: true,
|
|
177
|
+
isDirectUnderConstInitializer: false,
|
|
178
|
+
}, options);
|
|
179
|
+
options.replaceNode(node,
|
|
180
|
+
// The expression may be marked "as const"
|
|
181
|
+
node.getExpression().getText()); // remove `as const`
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
transformNode(node.getExpression(), {
|
|
185
|
+
isUnderConstContext: true,
|
|
186
|
+
isDirectUnderConstInitializer: false,
|
|
187
|
+
}, options);
|
|
201
188
|
return;
|
|
202
189
|
}
|
|
203
|
-
|
|
204
|
-
|
|
190
|
+
if (tsm.Node.isConditionalExpression(node)) {
|
|
191
|
+
// For conditional expressions, traverse both branches in a non-const context
|
|
192
|
+
transformNode(node.getWhenTrue(), {
|
|
205
193
|
isDirectUnderConstInitializer: false,
|
|
206
|
-
isUnderConstContext:
|
|
207
|
-
isUnderSpreadElement: context.isUnderSpreadElement,
|
|
194
|
+
isUnderConstContext: false,
|
|
208
195
|
}, options);
|
|
209
|
-
|
|
210
|
-
};
|
|
211
|
-
const transformClassDeclarationNode = (
|
|
212
|
-
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
213
|
-
node, context, options) => {
|
|
214
|
-
for (const mb of node.getMembers()) {
|
|
215
|
-
if (hasDisableNextLineComment(mb)) {
|
|
216
|
-
options.debugPrint('skipped member by disable-next-line comment');
|
|
217
|
-
continue;
|
|
218
|
-
}
|
|
219
|
-
if (mb.isKind(tsm.SyntaxKind.PropertyDeclaration)) {
|
|
220
|
-
if (!checkIfPropertyNameShouldBeIgnored(mb.getNameNode(), options)) {
|
|
221
|
-
const type = mb.getTypeNode();
|
|
222
|
-
if (type !== undefined) {
|
|
223
|
-
transformNode(type, {
|
|
224
|
-
isDirectUnderConstInitializer: false,
|
|
225
|
-
isUnderConstContext: false,
|
|
226
|
-
isUnderSpreadElement: context.isUnderSpreadElement,
|
|
227
|
-
}, options);
|
|
228
|
-
}
|
|
229
|
-
const initializer = mb.getInitializer();
|
|
230
|
-
if (initializer !== undefined) {
|
|
231
|
-
transformNode(initializer, {
|
|
232
|
-
isDirectUnderConstInitializer: false,
|
|
233
|
-
isUnderConstContext: false,
|
|
234
|
-
isUnderSpreadElement: context.isUnderSpreadElement,
|
|
235
|
-
}, options);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
continue;
|
|
239
|
-
}
|
|
240
|
-
transformNode(mb, {
|
|
196
|
+
transformNode(node.getWhenFalse(), {
|
|
241
197
|
isDirectUnderConstInitializer: false,
|
|
242
198
|
isUnderConstContext: false,
|
|
243
|
-
isUnderSpreadElement: context.isUnderSpreadElement,
|
|
244
199
|
}, options);
|
|
200
|
+
// return;
|
|
245
201
|
}
|
|
246
202
|
};
|
|
247
|
-
const checkIfPropertyNameShouldBeIgnored = (
|
|
248
|
-
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
249
|
-
nameNode, options) => {
|
|
250
|
-
return ((nameNode.isKind(tsm.SyntaxKind.Identifier) &&
|
|
251
|
-
pipe(nameNode.getText()).map((nm) => options.ignoredPrefixes.some((p) => nm.startsWith(p))).value) ||
|
|
252
|
-
(nameNode.isKind(tsm.SyntaxKind.StringLiteral) &&
|
|
253
|
-
pipe(nameNode.getLiteralValue()).map((nm) => options.ignoredPrefixes.some((p) => nm.startsWith(p))).value) ||
|
|
254
|
-
(nameNode.isKind(tsm.SyntaxKind.PrivateIdentifier) &&
|
|
255
|
-
pipe(nameNode.getText()).map((nm) => options.ignoredPrefixes.some((p) => nm.startsWith(`#${p}`))).value) ||
|
|
256
|
-
(nameNode.isKind(tsm.SyntaxKind.ComputedPropertyName) &&
|
|
257
|
-
pipe(nameNode.getExpression()).map((exp) => {
|
|
258
|
-
if (exp.isKind(tsm.SyntaxKind.StringLiteral)) {
|
|
259
|
-
const nm = exp.getLiteralValue();
|
|
260
|
-
return options.ignoredPrefixes.some((p) => nm.startsWith(p));
|
|
261
|
-
}
|
|
262
|
-
return false;
|
|
263
|
-
}).value));
|
|
264
|
-
};
|
|
265
|
-
const isDirective = (node) => {
|
|
266
|
-
if (!tsm.Node.isStringLiteral(node))
|
|
267
|
-
return false;
|
|
268
|
-
const parent = node.getParent();
|
|
269
|
-
// 1. 親が ExpressionStatement であることを確認
|
|
270
|
-
if (tsm.Node.isExpressionStatement(parent)) {
|
|
271
|
-
// 2. その ExpressionStatement の子がこの StringLiteral だけである
|
|
272
|
-
// かつ、ソースファイルやブロックの先頭付近にある
|
|
273
|
-
const expression = parent.getExpression();
|
|
274
|
-
if (expression === node) {
|
|
275
|
-
// "use strict" や "use client" などの文字列そのものが文(Statement)になっている
|
|
276
|
-
return true;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
return false;
|
|
280
|
-
};
|
|
281
203
|
|
|
282
204
|
export { appendAsConstTransformer };
|
|
283
205
|
//# sourceMappingURL=append-as-const.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"append-as-const.mjs","sources":["../../../src/functions/ast-transformers/append-as-const.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AASA,MAAM,gBAAgB,GAAG,iBAAiB;AAEnC,MAAM,wBAAwB,GAAG,CACtC,OAAyC,KACnB;IACtB,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAChC,OAAO,EAAE,cAAc,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAC/D;AAED,IAAA,MAAM,eAAe,GAA4C;AAC/D,QAAA,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,qBAAqB;AACxD,QAAA,eAAe,EAAE,cAAc;AAE/B,QAAA,UAAU,EAAE,OAAO,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"append-as-const.mjs","sources":["../../../src/functions/ast-transformers/append-as-const.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-interface-to-type.d.mts","sourceRoot":"","sources":["../../../src/functions/ast-transformers/convert-interface-to-type.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"convert-interface-to-type.d.mts","sourceRoot":"","sources":["../../../src/functions/ast-transformers/convert-interface-to-type.mts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAItD;;;GAGG;AACH,eAAO,MAAM,iCAAiC,QAAO,kBAsHxC,CAAC"}
|
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
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';
|
|
2
5
|
|
|
3
6
|
/* eslint-disable unicorn/consistent-function-scoping -- helper functions are kept inside for clarity */
|
|
4
7
|
/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types -- ts-morph uses mutable types */
|
|
8
|
+
const TRANSFORMER_NAME = 'convert-interface-to-type';
|
|
5
9
|
/**
|
|
6
10
|
* interface による型定義を type による型定義に変換する。
|
|
7
11
|
* @typescript-eslint/consistent-type-definitions: ["error", "type"] と同等の動作
|
|
8
12
|
*/
|
|
9
|
-
const convertInterfaceToTypeTransformer = () => {
|
|
10
|
-
|
|
13
|
+
const convertInterfaceToTypeTransformer = () => ({
|
|
14
|
+
name: TRANSFORMER_NAME,
|
|
15
|
+
transform: (sourceAst) => {
|
|
11
16
|
const processInterfaces = (container) => {
|
|
12
17
|
const interfaces = container.getInterfaces();
|
|
13
18
|
for (const interfaceDecl of interfaces) {
|
|
19
|
+
if (hasDisableNextLineComment(interfaceDecl, TRANSFORMER_NAME)) {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
14
22
|
convertInterfaceToType(interfaceDecl);
|
|
15
23
|
}
|
|
16
24
|
};
|
|
@@ -78,11 +86,8 @@ const convertInterfaceToTypeTransformer = () => {
|
|
|
78
86
|
for (const namespace of namespaces) {
|
|
79
87
|
processInterfaces(namespace);
|
|
80
88
|
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
transformer.transformerName = 'convert-interface-to-type';
|
|
84
|
-
return transformer;
|
|
85
|
-
};
|
|
89
|
+
},
|
|
90
|
+
});
|
|
86
91
|
|
|
87
92
|
export { convertInterfaceToTypeTransformer };
|
|
88
93
|
//# 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":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"convert-interface-to-type.mjs","sources":["../../../src/functions/ast-transformers/convert-interface-to-type.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/functions/ast-transformers/{convert-to-readonly-type.d.mts → convert-to-readonly.d.mts}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type TsMorphTransformer } from './types.mjs';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const convertToReadonlyTransformer: (options?: ReadonlyTransformerOptions) => TsMorphTransformer;
|
|
3
3
|
export type ReadonlyTransformerOptions = DeepReadonly<{
|
|
4
4
|
/**
|
|
5
5
|
* Options for a type utility `DeepReadonly` that recursively applies readonly.
|
|
@@ -28,4 +28,4 @@ export type ReadonlyTransformerOptions = DeepReadonly<{
|
|
|
28
28
|
ignorePrefixes?: string[];
|
|
29
29
|
debug?: boolean;
|
|
30
30
|
}>;
|
|
31
|
-
//# sourceMappingURL=convert-to-readonly
|
|
31
|
+
//# sourceMappingURL=convert-to-readonly.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert-to-readonly.d.mts","sourceRoot":"","sources":["../../../src/functions/ast-transformers/convert-to-readonly.mts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAItD,eAAO,MAAM,4BAA4B,GACvC,UAAU,0BAA0B,KACnC,kBAuCF,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,YAAY,CAAC;IACpD;;OAEG;IACH,YAAY,CAAC,EAAE;QACb;;;;WAIG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;KA2BnB,CAAC;IAEF;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC"}
|
package/dist/functions/ast-transformers/{convert-to-readonly-type.mjs → convert-to-readonly.mjs}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ISet, Arr, pipe, match, mapNullable, isString } from 'ts-data-forge';
|
|
2
2
|
import * as tsm from 'ts-morph';
|
|
3
3
|
import { hasDisableNextLineComment } from '../functions/has-disable-next-line-comment.mjs';
|
|
4
|
-
import {
|
|
4
|
+
import { isAtomicTypeNode } from '../functions/is-atomic-type-node.mjs';
|
|
5
5
|
import { isReadonlyTypeReferenceNode, isReadonlyTupleOrArrayTypeNode, isReadonlyArrayTypeNode, isReadonlyTupleTypeNode } from '../functions/is-readonly-node.mjs';
|
|
6
6
|
import { removeParentheses } from '../functions/remove-parentheses.mjs';
|
|
7
7
|
import { unwrapReadonlyTypeArgText } from '../functions/unwrap-readonly.mjs';
|
|
@@ -11,8 +11,8 @@ import { invalidDeepReadonlyTypeName } from './readonly-transformer-helpers/cons
|
|
|
11
11
|
import { groupUnionIntersectionTypes } from './readonly-transformer-helpers/group-union-types.mjs';
|
|
12
12
|
import { nextReadonlyContext } from './readonly-transformer-helpers/readonly-context.mjs';
|
|
13
13
|
|
|
14
|
-
const TRANSFORMER_NAME = 'convert-to-readonly
|
|
15
|
-
const
|
|
14
|
+
const TRANSFORMER_NAME = 'convert-to-readonly';
|
|
15
|
+
const convertToReadonlyTransformer = (options) => {
|
|
16
16
|
if (options?.DeepReadonly?.typeName !== undefined &&
|
|
17
17
|
invalidDeepReadonlyTypeName.has(options.DeepReadonly.typeName)) {
|
|
18
18
|
throw new Error(`Invalid DeepReadonly typeName "${options.DeepReadonly.typeName}" passed to convertToReadonlyType`);
|
|
@@ -31,14 +31,14 @@ const convertToReadonlyTypeTransformer = (options) => {
|
|
|
31
31
|
? replaceNodeWithDebugPrint
|
|
32
32
|
: (node, newNodeText) => node.replaceWithText(newNodeText),
|
|
33
33
|
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
return {
|
|
35
|
+
name: TRANSFORMER_NAME,
|
|
36
|
+
transform: (sourceAst) => {
|
|
37
|
+
for (const node of sourceAst.getChildren()) {
|
|
38
|
+
transformNode(node, initialReadonlyContext, optionsInternal);
|
|
39
|
+
}
|
|
40
|
+
},
|
|
38
41
|
};
|
|
39
|
-
// eslint-disable-next-line functional/immutable-data
|
|
40
|
-
transformer.transformerName = TRANSFORMER_NAME;
|
|
41
|
-
return transformer;
|
|
42
42
|
};
|
|
43
43
|
const initialReadonlyContext = {
|
|
44
44
|
type: 'none',
|
|
@@ -288,7 +288,7 @@ node, readonlyContext, options) => {
|
|
|
288
288
|
return;
|
|
289
289
|
}
|
|
290
290
|
// Readonly<number> -> number
|
|
291
|
-
if (
|
|
291
|
+
if (isAtomicTypeNode(T)) {
|
|
292
292
|
options.replaceNode(node, T.getFullText());
|
|
293
293
|
return;
|
|
294
294
|
}
|
|
@@ -336,7 +336,7 @@ node, readonlyContext, options) => {
|
|
|
336
336
|
return;
|
|
337
337
|
}
|
|
338
338
|
// Readonly<number> -> number
|
|
339
|
-
if (
|
|
339
|
+
if (isAtomicTypeNode(T)) {
|
|
340
340
|
options.replaceNode(node, T.getFullText());
|
|
341
341
|
return;
|
|
342
342
|
}
|
|
@@ -345,14 +345,14 @@ node, readonlyContext, options) => {
|
|
|
345
345
|
// DeepReadonly<O[]> -> DeepReadonly<O[]> (for object type arrays, keep as is to recursively apply Readonly)
|
|
346
346
|
// DeepReadonly<P[][]> -> DeepReadonly<P[][]>
|
|
347
347
|
if (T.isKind(tsm.SyntaxKind.ArrayType) &&
|
|
348
|
-
|
|
348
|
+
isAtomicTypeNode(T.getElementTypeNode())) {
|
|
349
349
|
options.replaceNode(node, wrapWithParentheses(`readonly ${T.getFullText()}`));
|
|
350
350
|
return;
|
|
351
351
|
}
|
|
352
352
|
// T = [P1, P2, P3]
|
|
353
353
|
// DeepReadonly<[P1, P2, P3]> -> readonly [P1, P2, P3]
|
|
354
354
|
if (T.isKind(tsm.SyntaxKind.TupleType) &&
|
|
355
|
-
T.getElements().every(
|
|
355
|
+
T.getElements().every(isAtomicTypeNode)) {
|
|
356
356
|
options.replaceNode(node, wrapWithParentheses(`readonly ${T.getFullText()}`));
|
|
357
357
|
return;
|
|
358
358
|
}
|
|
@@ -741,7 +741,7 @@ node, readonlyContext, options) => {
|
|
|
741
741
|
T.isKind(tsm.SyntaxKind.TupleType) ||
|
|
742
742
|
// remove () if T is PrimitiveTypeNode
|
|
743
743
|
// e.g. `(number) |-> number`
|
|
744
|
-
|
|
744
|
+
isAtomicTypeNode(T) ||
|
|
745
745
|
// remove () if T is TypeLiteralNode
|
|
746
746
|
// e.g. `({ member: V }) |-> { member: V }`
|
|
747
747
|
T.isKind(tsm.SyntaxKind.TypeLiteral)) {
|
|
@@ -822,12 +822,17 @@ node, readonlyModifier, readonlyContext, options) => {
|
|
|
822
822
|
const checkIfPropertyNameShouldBeIgnored = (
|
|
823
823
|
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
824
824
|
nameNode, options) => {
|
|
825
|
-
return (
|
|
825
|
+
return (
|
|
826
|
+
// mut_x: number[]
|
|
827
|
+
(nameNode.isKind(tsm.SyntaxKind.Identifier) &&
|
|
826
828
|
pipe(nameNode.getText()).map((nm) => options.ignoredPrefixes.some((p) => nm.startsWith(p))).value) ||
|
|
829
|
+
// "mut_x": number[]
|
|
827
830
|
(nameNode.isKind(tsm.SyntaxKind.StringLiteral) &&
|
|
828
831
|
pipe(nameNode.getLiteralValue()).map((nm) => options.ignoredPrefixes.some((p) => nm.startsWith(p))).value) ||
|
|
832
|
+
// #memberName: number[] (class only)
|
|
829
833
|
(nameNode.isKind(tsm.SyntaxKind.PrivateIdentifier) &&
|
|
830
834
|
pipe(nameNode.getText()).map((nm) => options.ignoredPrefixes.some((p) => nm.startsWith(`#${p}`))).value) ||
|
|
835
|
+
// [`mut_x`]: number[]
|
|
831
836
|
(nameNode.isKind(tsm.SyntaxKind.ComputedPropertyName) &&
|
|
832
837
|
pipe(nameNode.getExpression()).map((exp) => {
|
|
833
838
|
if (exp.isKind(tsm.SyntaxKind.StringLiteral)) {
|
|
@@ -838,5 +843,5 @@ nameNode, options) => {
|
|
|
838
843
|
}).value));
|
|
839
844
|
};
|
|
840
845
|
|
|
841
|
-
export {
|
|
842
|
-
//# sourceMappingURL=convert-to-readonly
|
|
846
|
+
export { convertToReadonlyTransformer };
|
|
847
|
+
//# sourceMappingURL=convert-to-readonly.mjs.map
|