yuku-ast 0.1.2 → 0.1.3
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 +30 -0
- package/dist/index.d.mts +62 -61
- package/dist/index.mjs +4 -0
- package/dist/utils.d.mts +18 -0
- package/dist/utils.mjs +20 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -6,6 +6,7 @@ node builders, type guards, a walker, and identifier validators. No runtime depe
|
|
|
6
6
|
| Import | Provides |
|
|
7
7
|
| --------------------- | ------------------------------------------------------------ |
|
|
8
8
|
| `yuku-ast` | `walk`, `walkAsync`, `b` (node builders), `is` (type guards) |
|
|
9
|
+
| `yuku-ast/utils` | node utilities such as `nameOf` |
|
|
9
10
|
| `yuku-ast/identifier` | identifier and reserved-word validators |
|
|
10
11
|
|
|
11
12
|
```ts
|
|
@@ -114,6 +115,9 @@ is.StringLiteral(node); // Literal variants
|
|
|
114
115
|
is.StaticMemberExpression(node); // MemberExpression variants
|
|
115
116
|
is.BindingIdentifier(node); // Identifier roles, via `kind`
|
|
116
117
|
|
|
118
|
+
is.Identifier(node, "this"); // an Identifier with that exact name
|
|
119
|
+
is.oneOf(node, ["CallExpression", "NewExpression"]); // any of these types
|
|
120
|
+
|
|
117
121
|
walk(program, {
|
|
118
122
|
Literal(node, path) {
|
|
119
123
|
if (is.ArrayExpression(path.parent)) {
|
|
@@ -123,6 +127,32 @@ walk(program, {
|
|
|
123
127
|
});
|
|
124
128
|
```
|
|
125
129
|
|
|
130
|
+
`is.oneOf(node, types)` narrows to the union of the listed types, and
|
|
131
|
+
`is.Identifier(node, name?)` narrows to `Identifier`. Both accept `null` or
|
|
132
|
+
`undefined`.
|
|
133
|
+
|
|
134
|
+
## Reading names (`nameOf`)
|
|
135
|
+
|
|
136
|
+
`nameOf(node)` returns the static name a node denotes, an `Identifier`'s `name`
|
|
137
|
+
or a string `Literal`'s `value`, and `null` for anything else (including `null`
|
|
138
|
+
or `undefined`). It reads the common `Identifier | StringLiteral` slots, such as
|
|
139
|
+
a `ModuleExportName` or a static property or member key, in one call.
|
|
140
|
+
|
|
141
|
+
```ts
|
|
142
|
+
import { walk } from "yuku-ast";
|
|
143
|
+
import { nameOf } from "yuku-ast/utils";
|
|
144
|
+
|
|
145
|
+
walk(program, {
|
|
146
|
+
ExportSpecifier(node) {
|
|
147
|
+
// `export { x as y }` and `export { x as "z" }` both resolve.
|
|
148
|
+
nameOf(node.exported); // "y", "z"
|
|
149
|
+
},
|
|
150
|
+
Property(node) {
|
|
151
|
+
if (!node.computed) nameOf(node.key); // static key name, else null
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
```
|
|
155
|
+
|
|
126
156
|
## Builders (`b`)
|
|
127
157
|
|
|
128
158
|
A builder for every node type. Required fields are positional, the rest go in a
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as t from "yuku-parser";
|
|
2
|
-
import { BigIntLiteral, BindingIdentifier, BooleanLiteral, ComputedMemberExpression, Directive, IdentifierName, IdentifierReference, LabelIdentifier, Node, NullLiteral, NumericLiteral, PrivateFieldExpression, RegExpLiteral, StaticMemberExpression, StringLiteral } from "yuku-parser";
|
|
2
|
+
import { BigIntLiteral, BindingIdentifier, BooleanLiteral, ComputedMemberExpression, Directive, Identifier, IdentifierName, IdentifierReference, LabelIdentifier, Node, NullLiteral, NumericLiteral, PrivateFieldExpression, RegExpLiteral, StaticMemberExpression, StringLiteral } from "yuku-parser";
|
|
3
3
|
|
|
4
4
|
//#region src/types.d.ts
|
|
5
5
|
/** Discriminant `type` string of every AST node. */
|
|
@@ -95,6 +95,8 @@ type AliasMap = { [K in AliasName]: NodeOfType<(typeof ALIAS_GROUPS)[K][number]>
|
|
|
95
95
|
//#region src/predicates.d.ts
|
|
96
96
|
type MaybeNode = Node | null | undefined;
|
|
97
97
|
declare const is: {
|
|
98
|
+
/** True when `node`'s `type` is one of `types`, narrowing to that union. */oneOf: <const K extends NodeType>(node: MaybeNode, types: readonly K[]) => node is NodeOfType<K>; /** An `Identifier`, optionally with the exact `name` (e.g. `is.Identifier(node, "this")`). */
|
|
99
|
+
Identifier: (node: MaybeNode, name?: string) => node is Identifier;
|
|
98
100
|
Expression: (node: MaybeNode) => node is NodeOfType<"Identifier" | "Literal" | "ThisExpression" | "Super" | "ArrayExpression" | "ObjectExpression" | "FunctionExpression" | "ArrowFunctionExpression" | "ClassExpression" | "TaggedTemplateExpression" | "TemplateLiteral" | "MemberExpression" | "CallExpression" | "NewExpression" | "ChainExpression" | "SequenceExpression" | "ParenthesizedExpression" | "BinaryExpression" | "LogicalExpression" | "ConditionalExpression" | "UnaryExpression" | "UpdateExpression" | "AssignmentExpression" | "YieldExpression" | "AwaitExpression" | "ImportExpression" | "MetaProperty" | "TSAsExpression" | "TSSatisfiesExpression" | "TSTypeAssertion" | "TSNonNullExpression" | "TSInstantiationExpression" | "JSXElement" | "JSXFragment">;
|
|
99
101
|
Statement: (node: MaybeNode) => node is AliasMap["Statement"];
|
|
100
102
|
Declaration: (node: MaybeNode) => node is AliasMap["Declaration"];
|
|
@@ -120,37 +122,11 @@ declare const is: {
|
|
|
120
122
|
StaticMemberExpression: (node: MaybeNode) => node is StaticMemberExpression;
|
|
121
123
|
PrivateFieldExpression: (node: MaybeNode) => node is PrivateFieldExpression;
|
|
122
124
|
Directive: (node: MaybeNode) => node is Directive;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
BlockStatement: (node: MaybeNode) => node is import("yuku-parser").BlockStatement;
|
|
127
|
-
EmptyStatement: (node: MaybeNode) => node is import("yuku-parser").EmptyStatement;
|
|
128
|
-
DebuggerStatement: (node: MaybeNode) => node is import("yuku-parser").DebuggerStatement;
|
|
129
|
-
ReturnStatement: (node: MaybeNode) => node is import("yuku-parser").ReturnStatement;
|
|
130
|
-
LabeledStatement: (node: MaybeNode) => node is import("yuku-parser").LabeledStatement;
|
|
131
|
-
BreakStatement: (node: MaybeNode) => node is import("yuku-parser").BreakStatement;
|
|
132
|
-
ContinueStatement: (node: MaybeNode) => node is import("yuku-parser").ContinueStatement;
|
|
133
|
-
IfStatement: (node: MaybeNode) => node is import("yuku-parser").IfStatement;
|
|
134
|
-
SwitchStatement: (node: MaybeNode) => node is import("yuku-parser").SwitchStatement;
|
|
135
|
-
ThrowStatement: (node: MaybeNode) => node is import("yuku-parser").ThrowStatement;
|
|
136
|
-
TryStatement: (node: MaybeNode) => node is import("yuku-parser").TryStatement;
|
|
137
|
-
WhileStatement: (node: MaybeNode) => node is import("yuku-parser").WhileStatement;
|
|
138
|
-
DoWhileStatement: (node: MaybeNode) => node is import("yuku-parser").DoWhileStatement;
|
|
139
|
-
ForStatement: (node: MaybeNode) => node is import("yuku-parser").ForStatement;
|
|
140
|
-
ForInStatement: (node: MaybeNode) => node is import("yuku-parser").ForInStatement;
|
|
141
|
-
ForOfStatement: (node: MaybeNode) => node is import("yuku-parser").ForOfStatement;
|
|
142
|
-
WithStatement: (node: MaybeNode) => node is import("yuku-parser").WithStatement;
|
|
143
|
-
FunctionDeclaration: (node: MaybeNode) => node is import("yuku-parser").FunctionDeclaration;
|
|
144
|
-
ClassDeclaration: (node: MaybeNode) => node is import("yuku-parser").ClassDeclaration;
|
|
145
|
-
VariableDeclaration: (node: MaybeNode) => node is import("yuku-parser").VariableDeclaration;
|
|
146
|
-
TSDeclareFunction: (node: MaybeNode) => node is import("yuku-parser").TSDeclareFunction;
|
|
147
|
-
TSTypeAliasDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSTypeAliasDeclaration;
|
|
148
|
-
TSInterfaceDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSInterfaceDeclaration;
|
|
149
|
-
TSEnumDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSEnumDeclaration;
|
|
150
|
-
TSModuleDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSModuleDeclaration;
|
|
151
|
-
TSImportEqualsDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSImportEqualsDeclaration;
|
|
152
|
-
Identifier: (node: MaybeNode) => node is import("yuku-parser").Identifier;
|
|
125
|
+
TSTypeAnnotation: (node: MaybeNode) => node is import("yuku-parser").TSTypeAnnotation;
|
|
126
|
+
Decorator: (node: MaybeNode) => node is import("yuku-parser").Decorator;
|
|
127
|
+
PrivateIdentifier: (node: MaybeNode) => node is import("yuku-parser").PrivateIdentifier;
|
|
153
128
|
Literal: (node: MaybeNode) => node is NodeOfType<"Literal">;
|
|
129
|
+
TemplateElement: (node: MaybeNode) => node is import("yuku-parser").TemplateElement;
|
|
154
130
|
ThisExpression: (node: MaybeNode) => node is import("yuku-parser").ThisExpression;
|
|
155
131
|
Super: (node: MaybeNode) => node is import("yuku-parser").Super;
|
|
156
132
|
ArrayExpression: (node: MaybeNode) => node is import("yuku-parser").ArrayExpression;
|
|
@@ -183,24 +159,19 @@ declare const is: {
|
|
|
183
159
|
TSInstantiationExpression: (node: MaybeNode) => node is import("yuku-parser").TSInstantiationExpression;
|
|
184
160
|
JSXElement: (node: MaybeNode) => node is import("yuku-parser").JSXElement;
|
|
185
161
|
JSXFragment: (node: MaybeNode) => node is import("yuku-parser").JSXFragment;
|
|
186
|
-
ImportDeclaration: (node: MaybeNode) => node is import("yuku-parser").ImportDeclaration;
|
|
187
|
-
ExportNamedDeclaration: (node: MaybeNode) => node is import("yuku-parser").ExportNamedDeclaration;
|
|
188
|
-
ExportDefaultDeclaration: (node: MaybeNode) => node is import("yuku-parser").ExportDefaultDeclaration;
|
|
189
|
-
ExportAllDeclaration: (node: MaybeNode) => node is import("yuku-parser").ExportAllDeclaration;
|
|
190
|
-
TSExportAssignment: (node: MaybeNode) => node is import("yuku-parser").TSExportAssignment;
|
|
191
|
-
TSNamespaceExportDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSNamespaceExportDeclaration;
|
|
192
|
-
Property: (node: MaybeNode) => node is NodeOfType<"Property">;
|
|
193
|
-
SpreadElement: (node: MaybeNode) => node is import("yuku-parser").SpreadElement;
|
|
194
|
-
PrivateIdentifier: (node: MaybeNode) => node is import("yuku-parser").PrivateIdentifier;
|
|
195
|
-
TemplateElement: (node: MaybeNode) => node is import("yuku-parser").TemplateElement;
|
|
196
|
-
VariableDeclarator: (node: MaybeNode) => node is import("yuku-parser").VariableDeclarator;
|
|
197
|
-
CatchClause: (node: MaybeNode) => node is import("yuku-parser").CatchClause;
|
|
198
|
-
SwitchCase: (node: MaybeNode) => node is import("yuku-parser").SwitchCase;
|
|
199
|
-
RestElement: (node: MaybeNode) => node is import("yuku-parser").RestElement;
|
|
200
162
|
ArrayPattern: (node: MaybeNode) => node is import("yuku-parser").ArrayPattern;
|
|
201
163
|
ObjectPattern: (node: MaybeNode) => node is import("yuku-parser").ObjectPattern;
|
|
202
164
|
AssignmentPattern: (node: MaybeNode) => node is import("yuku-parser").AssignmentPattern;
|
|
165
|
+
RestElement: (node: MaybeNode) => node is import("yuku-parser").RestElement;
|
|
166
|
+
Property: (node: MaybeNode) => node is NodeOfType<"Property">;
|
|
167
|
+
SpreadElement: (node: MaybeNode) => node is import("yuku-parser").SpreadElement;
|
|
168
|
+
TSTypeParameterInstantiation: (node: MaybeNode) => node is import("yuku-parser").TSTypeParameterInstantiation;
|
|
169
|
+
TSParameterProperty: (node: MaybeNode) => node is import("yuku-parser").TSParameterProperty;
|
|
170
|
+
BlockStatement: (node: MaybeNode) => node is import("yuku-parser").BlockStatement;
|
|
171
|
+
TSTypeParameterDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSTypeParameterDeclaration;
|
|
172
|
+
FunctionDeclaration: (node: MaybeNode) => node is import("yuku-parser").FunctionDeclaration;
|
|
203
173
|
ClassBody: (node: MaybeNode) => node is import("yuku-parser").ClassBody;
|
|
174
|
+
ClassDeclaration: (node: MaybeNode) => node is import("yuku-parser").ClassDeclaration;
|
|
204
175
|
MethodDefinition: (node: MaybeNode) => node is import("yuku-parser").MethodDefinition;
|
|
205
176
|
TSAbstractMethodDefinition: (node: MaybeNode) => node is import("yuku-parser").TSAbstractMethodDefinition;
|
|
206
177
|
PropertyDefinition: (node: MaybeNode) => node is import("yuku-parser").PropertyDefinition;
|
|
@@ -208,27 +179,57 @@ declare const is: {
|
|
|
208
179
|
AccessorProperty: (node: MaybeNode) => node is import("yuku-parser").AccessorProperty;
|
|
209
180
|
TSAbstractAccessorProperty: (node: MaybeNode) => node is import("yuku-parser").TSAbstractAccessorProperty;
|
|
210
181
|
StaticBlock: (node: MaybeNode) => node is import("yuku-parser").StaticBlock;
|
|
211
|
-
|
|
182
|
+
TSIndexSignature: (node: MaybeNode) => node is import("yuku-parser").TSIndexSignature;
|
|
212
183
|
TSEmptyBodyFunctionExpression: (node: MaybeNode) => node is import("yuku-parser").TSEmptyBodyFunctionExpression;
|
|
184
|
+
ExpressionStatement: (node: MaybeNode) => node is NodeOfType<"ExpressionStatement">;
|
|
185
|
+
EmptyStatement: (node: MaybeNode) => node is import("yuku-parser").EmptyStatement;
|
|
186
|
+
DebuggerStatement: (node: MaybeNode) => node is import("yuku-parser").DebuggerStatement;
|
|
187
|
+
ReturnStatement: (node: MaybeNode) => node is import("yuku-parser").ReturnStatement;
|
|
188
|
+
LabeledStatement: (node: MaybeNode) => node is import("yuku-parser").LabeledStatement;
|
|
189
|
+
BreakStatement: (node: MaybeNode) => node is import("yuku-parser").BreakStatement;
|
|
190
|
+
ContinueStatement: (node: MaybeNode) => node is import("yuku-parser").ContinueStatement;
|
|
191
|
+
IfStatement: (node: MaybeNode) => node is import("yuku-parser").IfStatement;
|
|
192
|
+
SwitchStatement: (node: MaybeNode) => node is import("yuku-parser").SwitchStatement;
|
|
193
|
+
ThrowStatement: (node: MaybeNode) => node is import("yuku-parser").ThrowStatement;
|
|
194
|
+
TryStatement: (node: MaybeNode) => node is import("yuku-parser").TryStatement;
|
|
195
|
+
WhileStatement: (node: MaybeNode) => node is import("yuku-parser").WhileStatement;
|
|
196
|
+
DoWhileStatement: (node: MaybeNode) => node is import("yuku-parser").DoWhileStatement;
|
|
197
|
+
ForStatement: (node: MaybeNode) => node is import("yuku-parser").ForStatement;
|
|
198
|
+
ForInStatement: (node: MaybeNode) => node is import("yuku-parser").ForInStatement;
|
|
199
|
+
ForOfStatement: (node: MaybeNode) => node is import("yuku-parser").ForOfStatement;
|
|
200
|
+
WithStatement: (node: MaybeNode) => node is import("yuku-parser").WithStatement;
|
|
201
|
+
VariableDeclaration: (node: MaybeNode) => node is import("yuku-parser").VariableDeclaration;
|
|
202
|
+
TSDeclareFunction: (node: MaybeNode) => node is import("yuku-parser").TSDeclareFunction;
|
|
203
|
+
TSTypeAliasDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSTypeAliasDeclaration;
|
|
204
|
+
TSInterfaceDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSInterfaceDeclaration;
|
|
205
|
+
TSEnumDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSEnumDeclaration;
|
|
206
|
+
TSModuleDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSModuleDeclaration;
|
|
207
|
+
TSImportEqualsDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSImportEqualsDeclaration;
|
|
208
|
+
SwitchCase: (node: MaybeNode) => node is import("yuku-parser").SwitchCase;
|
|
209
|
+
CatchClause: (node: MaybeNode) => node is import("yuku-parser").CatchClause;
|
|
210
|
+
VariableDeclarator: (node: MaybeNode) => node is import("yuku-parser").VariableDeclarator;
|
|
213
211
|
ImportSpecifier: (node: MaybeNode) => node is import("yuku-parser").ImportSpecifier;
|
|
214
212
|
ImportDefaultSpecifier: (node: MaybeNode) => node is import("yuku-parser").ImportDefaultSpecifier;
|
|
215
213
|
ImportNamespaceSpecifier: (node: MaybeNode) => node is import("yuku-parser").ImportNamespaceSpecifier;
|
|
216
214
|
ImportAttribute: (node: MaybeNode) => node is import("yuku-parser").ImportAttribute;
|
|
215
|
+
ImportDeclaration: (node: MaybeNode) => node is import("yuku-parser").ImportDeclaration;
|
|
217
216
|
ExportSpecifier: (node: MaybeNode) => node is import("yuku-parser").ExportSpecifier;
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
JSXClosingFragment: (node: MaybeNode) => node is import("yuku-parser").JSXClosingFragment;
|
|
217
|
+
ExportNamedDeclaration: (node: MaybeNode) => node is import("yuku-parser").ExportNamedDeclaration;
|
|
218
|
+
ExportDefaultDeclaration: (node: MaybeNode) => node is import("yuku-parser").ExportDefaultDeclaration;
|
|
219
|
+
ExportAllDeclaration: (node: MaybeNode) => node is import("yuku-parser").ExportAllDeclaration;
|
|
222
220
|
JSXIdentifier: (node: MaybeNode) => node is import("yuku-parser").JSXIdentifier;
|
|
223
221
|
JSXNamespacedName: (node: MaybeNode) => node is import("yuku-parser").JSXNamespacedName;
|
|
224
222
|
JSXMemberExpression: (node: MaybeNode) => node is import("yuku-parser").JSXMemberExpression;
|
|
223
|
+
JSXOpeningElement: (node: MaybeNode) => node is import("yuku-parser").JSXOpeningElement;
|
|
224
|
+
JSXText: (node: MaybeNode) => node is import("yuku-parser").JSXText;
|
|
225
|
+
JSXExpressionContainer: (node: MaybeNode) => node is import("yuku-parser").JSXExpressionContainer;
|
|
226
|
+
JSXSpreadChild: (node: MaybeNode) => node is import("yuku-parser").JSXSpreadChild;
|
|
227
|
+
JSXClosingElement: (node: MaybeNode) => node is import("yuku-parser").JSXClosingElement;
|
|
225
228
|
JSXAttribute: (node: MaybeNode) => node is import("yuku-parser").JSXAttribute;
|
|
226
229
|
JSXSpreadAttribute: (node: MaybeNode) => node is import("yuku-parser").JSXSpreadAttribute;
|
|
227
|
-
|
|
230
|
+
JSXOpeningFragment: (node: MaybeNode) => node is import("yuku-parser").JSXOpeningFragment;
|
|
231
|
+
JSXClosingFragment: (node: MaybeNode) => node is import("yuku-parser").JSXClosingFragment;
|
|
228
232
|
JSXEmptyExpression: (node: MaybeNode) => node is import("yuku-parser").JSXEmptyExpression;
|
|
229
|
-
JSXText: (node: MaybeNode) => node is import("yuku-parser").JSXText;
|
|
230
|
-
JSXSpreadChild: (node: MaybeNode) => node is import("yuku-parser").JSXSpreadChild;
|
|
231
|
-
TSTypeAnnotation: (node: MaybeNode) => node is import("yuku-parser").TSTypeAnnotation;
|
|
232
233
|
TSAnyKeyword: (node: MaybeNode) => node is import("yuku-parser").TSAnyKeyword;
|
|
233
234
|
TSUnknownKeyword: (node: MaybeNode) => node is import("yuku-parser").TSUnknownKeyword;
|
|
234
235
|
TSNeverKeyword: (node: MaybeNode) => node is import("yuku-parser").TSNeverKeyword;
|
|
@@ -266,25 +267,25 @@ declare const is: {
|
|
|
266
267
|
TSTypePredicate: (node: MaybeNode) => node is import("yuku-parser").TSTypePredicate;
|
|
267
268
|
TSTypeLiteral: (node: MaybeNode) => node is import("yuku-parser").TSTypeLiteral;
|
|
268
269
|
TSMappedType: (node: MaybeNode) => node is import("yuku-parser").TSMappedType;
|
|
269
|
-
TSTypeParameter: (node: MaybeNode) => node is import("yuku-parser").TSTypeParameter;
|
|
270
|
-
TSTypeParameterDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSTypeParameterDeclaration;
|
|
271
|
-
TSTypeParameterInstantiation: (node: MaybeNode) => node is import("yuku-parser").TSTypeParameterInstantiation;
|
|
272
270
|
TSQualifiedName: (node: MaybeNode) => node is import("yuku-parser").TSQualifiedName;
|
|
271
|
+
TSTypeParameter: (node: MaybeNode) => node is import("yuku-parser").TSTypeParameter;
|
|
272
|
+
TSOptionalType: (node: MaybeNode) => node is import("yuku-parser").TSOptionalType;
|
|
273
|
+
TSRestType: (node: MaybeNode) => node is import("yuku-parser").TSRestType;
|
|
273
274
|
TSPropertySignature: (node: MaybeNode) => node is import("yuku-parser").TSPropertySignature;
|
|
274
275
|
TSMethodSignature: (node: MaybeNode) => node is import("yuku-parser").TSMethodSignature;
|
|
275
276
|
TSCallSignatureDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSCallSignatureDeclaration;
|
|
276
277
|
TSConstructSignatureDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSConstructSignatureDeclaration;
|
|
277
|
-
TSIndexSignature: (node: MaybeNode) => node is import("yuku-parser").TSIndexSignature;
|
|
278
278
|
TSInterfaceBody: (node: MaybeNode) => node is import("yuku-parser").TSInterfaceBody;
|
|
279
279
|
TSInterfaceHeritage: (node: MaybeNode) => node is import("yuku-parser").TSInterfaceHeritage;
|
|
280
280
|
TSClassImplements: (node: MaybeNode) => node is import("yuku-parser").TSClassImplements;
|
|
281
281
|
TSEnumBody: (node: MaybeNode) => node is import("yuku-parser").TSEnumBody;
|
|
282
282
|
TSEnumMember: (node: MaybeNode) => node is import("yuku-parser").TSEnumMember;
|
|
283
283
|
TSModuleBlock: (node: MaybeNode) => node is import("yuku-parser").TSModuleBlock;
|
|
284
|
-
|
|
284
|
+
TSExportAssignment: (node: MaybeNode) => node is import("yuku-parser").TSExportAssignment;
|
|
285
|
+
TSNamespaceExportDeclaration: (node: MaybeNode) => node is import("yuku-parser").TSNamespaceExportDeclaration;
|
|
285
286
|
TSExternalModuleReference: (node: MaybeNode) => node is import("yuku-parser").TSExternalModuleReference;
|
|
286
|
-
|
|
287
|
-
|
|
287
|
+
Hashbang: (node: MaybeNode) => node is import("yuku-parser").Hashbang;
|
|
288
|
+
Program: (node: MaybeNode) => node is import("yuku-parser").Program;
|
|
288
289
|
};
|
|
289
290
|
//#endregion
|
|
290
291
|
//#region src/builders.d.ts
|
package/dist/index.mjs
CHANGED
|
@@ -548,6 +548,10 @@ function aliasGuard(name) {
|
|
|
548
548
|
}
|
|
549
549
|
const is = {
|
|
550
550
|
...Object.fromEntries(Object.keys(VISITOR_KEYS).map((type) => [type, (node) => node != null && node.type === type])),
|
|
551
|
+
/** True when `node`'s `type` is one of `types`, narrowing to that union. */
|
|
552
|
+
oneOf: (node, types) => node != null && types.includes(node.type),
|
|
553
|
+
/** An `Identifier`, optionally with the exact `name` (e.g. `is.Identifier(node, "this")`). */
|
|
554
|
+
Identifier: (node, name) => node?.type === "Identifier" && (name === void 0 || node.name === name),
|
|
551
555
|
Expression: aliasGuard("Expression"),
|
|
552
556
|
Statement: aliasGuard("Statement"),
|
|
553
557
|
Declaration: aliasGuard("Declaration"),
|
package/dist/utils.d.mts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Node } from "yuku-parser";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/index.d.ts
|
|
4
|
+
type MaybeNode = Node | null | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* The static name a node denotes: an `Identifier`'s `name`, or a string
|
|
7
|
+
* `Literal`'s `value`. Returns `null` for anything else, and for `null` or
|
|
8
|
+
* `undefined`, so the common `Identifier | StringLiteral` name slots (a
|
|
9
|
+
* `ModuleExportName`, or a static property or member key) read in one call.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* nameOf(b.identifier("x")) // "x"
|
|
13
|
+
* nameOf(b.stringLiteral("y")) // "y"
|
|
14
|
+
* nameOf(b.numericLiteral(1)) // null
|
|
15
|
+
*/
|
|
16
|
+
declare function nameOf(node: MaybeNode): string | null;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { nameOf };
|
package/dist/utils.mjs
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/utils/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* The static name a node denotes: an `Identifier`'s `name`, or a string
|
|
4
|
+
* `Literal`'s `value`. Returns `null` for anything else, and for `null` or
|
|
5
|
+
* `undefined`, so the common `Identifier | StringLiteral` name slots (a
|
|
6
|
+
* `ModuleExportName`, or a static property or member key) read in one call.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* nameOf(b.identifier("x")) // "x"
|
|
10
|
+
* nameOf(b.stringLiteral("y")) // "y"
|
|
11
|
+
* nameOf(b.numericLiteral(1)) // null
|
|
12
|
+
*/
|
|
13
|
+
function nameOf(node) {
|
|
14
|
+
if (node == null) return null;
|
|
15
|
+
if (node.type === "Identifier") return node.name;
|
|
16
|
+
if (node.type === "Literal" && typeof node.value === "string") return node.value;
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { nameOf };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yuku-ast",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "A fast, typed AST toolkit for yuku-parser's ESTree / TypeScript-ESTree AST: node builders, type guards, a walker, and identifier validators.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ast",
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"exports": {
|
|
31
31
|
".": "./dist/index.mjs",
|
|
32
32
|
"./identifier": "./dist/identifier.mjs",
|
|
33
|
+
"./utils": "./dist/utils.mjs",
|
|
33
34
|
"./package.json": "./package.json"
|
|
34
35
|
},
|
|
35
36
|
"scripts": {
|