@travetto/transformer 7.0.0-rc.0 → 7.0.0-rc.2
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/package.json +2 -2
- package/src/importer.ts +55 -55
- package/src/manager.ts +9 -4
- package/src/register.ts +62 -62
- package/src/resolver/builder.ts +57 -49
- package/src/resolver/coerce.ts +6 -6
- package/src/resolver/service.ts +10 -9
- package/src/state.ts +74 -74
- package/src/types/shared.ts +3 -3
- package/src/types/visitor.ts +3 -3
- package/src/util/core.ts +21 -19
- package/src/util/declaration.ts +24 -24
- package/src/util/decorator.ts +16 -16
- package/src/util/doc.ts +9 -9
- package/src/util/import.ts +11 -11
- package/src/util/literal.ts +84 -84
- package/src/util/log.ts +10 -10
- package/src/visitor.ts +18 -18
package/src/visitor.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { ManifestModuleFolderType, ManifestModuleUtil } from '@travetto/manifest
|
|
|
5
5
|
import { DecoratorMeta, TransformerType, NodeTransformer, TransformerSet, State, TransformPhase } from './types/visitor.ts';
|
|
6
6
|
import { CoreUtil } from './util/core.ts';
|
|
7
7
|
|
|
8
|
-
const
|
|
8
|
+
const COMPILER_SOURCE = new Set<ManifestModuleFolderType>(['support', 'src', '$index']);
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* AST Visitor Factory, combines all active transformers into a single pass transformer for the ts compiler
|
|
@@ -45,10 +45,10 @@ export class VisitorFactory<S extends State = State> {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
#transformers = new Map<TransformerType, TransformerSet<S>>();
|
|
48
|
-
#getState: (context: ts.TransformationContext,
|
|
48
|
+
#getState: (context: ts.TransformationContext, source: ts.SourceFile) => S;
|
|
49
49
|
|
|
50
50
|
constructor(
|
|
51
|
-
getState: (context: ts.TransformationContext,
|
|
51
|
+
getState: (context: ts.TransformationContext, source: ts.SourceFile) => S,
|
|
52
52
|
transformers: NodeTransformer<S, TransformerType, ts.Node>[]
|
|
53
53
|
) {
|
|
54
54
|
this.#getState = getState;
|
|
@@ -97,7 +97,7 @@ export class VisitorFactory<S extends State = State> {
|
|
|
97
97
|
// Skip transforming all the compiler related content
|
|
98
98
|
if (
|
|
99
99
|
/@travetto[/](compiler|manifest|transformer)/.test(state.importName) &&
|
|
100
|
-
|
|
100
|
+
COMPILER_SOURCE.has(ManifestModuleUtil.getFolderKey(state.importName.replace(/@travetto[/][^/]+[/]/, '')))
|
|
101
101
|
) {
|
|
102
102
|
return state.finalize(file);
|
|
103
103
|
}
|
|
@@ -111,7 +111,7 @@ export class VisitorFactory<S extends State = State> {
|
|
|
111
111
|
for (const [idx, all] of [...state.added].toSorted(([idxA], [idxB]) => idxB - idxA)) {
|
|
112
112
|
statements = [
|
|
113
113
|
...statements.slice(0, Math.max(idx, 0)),
|
|
114
|
-
...all.map(
|
|
114
|
+
...all.map(value => this.visit(state, context, value)),
|
|
115
115
|
...statements.slice(Math.max(idx, 0))
|
|
116
116
|
];
|
|
117
117
|
state.added.delete(idx);
|
|
@@ -122,13 +122,13 @@ export class VisitorFactory<S extends State = State> {
|
|
|
122
122
|
node = CoreUtil.updateSource(context.factory, node, statements);
|
|
123
123
|
}
|
|
124
124
|
return state.finalize(node);
|
|
125
|
-
} catch (
|
|
126
|
-
if (!(
|
|
127
|
-
throw
|
|
125
|
+
} catch (error) {
|
|
126
|
+
if (!(error instanceof Error)) {
|
|
127
|
+
throw error;
|
|
128
128
|
}
|
|
129
|
-
console!.error('Failed transforming', { error: `${
|
|
130
|
-
const out = new Error(`Failed transforming: ${file.fileName}: ${
|
|
131
|
-
out.stack =
|
|
129
|
+
console!.error('Failed transforming', { error: `${error.message}\n${error.stack}`, file: file.fileName });
|
|
130
|
+
const out = new Error(`Failed transforming: ${file.fileName}: ${error.message}`);
|
|
131
|
+
out.stack = error.stack;
|
|
132
132
|
throw out;
|
|
133
133
|
}
|
|
134
134
|
};
|
|
@@ -158,9 +158,9 @@ export class VisitorFactory<S extends State = State> {
|
|
|
158
158
|
|
|
159
159
|
// Checks for matches of decorators to registered items
|
|
160
160
|
const targets = new Map<string, DecoratorMeta>();
|
|
161
|
-
for (const
|
|
162
|
-
for (const sub of
|
|
163
|
-
targets.set(sub,
|
|
161
|
+
for (const decorator of state.getDecoratorList(node)) {
|
|
162
|
+
for (const sub of decorator.targets ?? []) {
|
|
163
|
+
targets.set(sub, decorator);
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
166
|
|
|
@@ -168,7 +168,7 @@ export class VisitorFactory<S extends State = State> {
|
|
|
168
168
|
return;
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
-
for (const [key,
|
|
171
|
+
for (const [key, decorator] of targets.entries()) {
|
|
172
172
|
const values = set[phase]!.get(key);
|
|
173
173
|
if (!values || !values.length) {
|
|
174
174
|
continue;
|
|
@@ -176,7 +176,7 @@ export class VisitorFactory<S extends State = State> {
|
|
|
176
176
|
|
|
177
177
|
// For all matching handlers, execute
|
|
178
178
|
for (const item of values) {
|
|
179
|
-
node = item[phase]!<T>(state, node,
|
|
179
|
+
node = item[phase]!<T>(state, node, decorator) ?? node;
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
182
|
return node;
|
|
@@ -190,13 +190,13 @@ export class VisitorFactory<S extends State = State> {
|
|
|
190
190
|
const target = this.#transformers.get(targetType);
|
|
191
191
|
|
|
192
192
|
if (!target) {
|
|
193
|
-
return ts.visitEachChild(node,
|
|
193
|
+
return ts.visitEachChild(node, child => this.visit(state, context, child), context);
|
|
194
194
|
} else {
|
|
195
195
|
// Before
|
|
196
196
|
node = this.executePhaseAlways(state, target, 'before', node) ?? node;
|
|
197
197
|
node = this.executePhase(state, target, 'before', node) ?? node;
|
|
198
198
|
|
|
199
|
-
node = ts.visitEachChild(node,
|
|
199
|
+
node = ts.visitEachChild(node, child => this.visit(state, context, child), context);
|
|
200
200
|
// After
|
|
201
201
|
node = this.executePhaseAlways(state, target, 'after', node) ?? node;
|
|
202
202
|
node = this.executePhase(state, target, 'after', node) ?? node;
|