@travetto/transformer 3.0.0-rc.1 → 3.0.0-rc.11

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/src/visitor.ts CHANGED
@@ -1,11 +1,6 @@
1
- import * as ts from 'typescript';
2
- import { createWriteStream } from 'fs';
3
-
4
- import { ConsoleManager } from '@travetto/base/src/console';
5
- import { AppCache } from '@travetto/boot';
1
+ import ts from 'typescript';
6
2
 
7
3
  import { DecoratorMeta, TransformerType, NodeTransformer, TransformerSet, State, TransformPhase } from './types/visitor';
8
- import { LogUtil } from './util/log';
9
4
  import { CoreUtil } from './util/core';
10
5
 
11
6
  /**
@@ -28,25 +23,24 @@ export class VisitorFactory<S extends State = State> {
28
23
  return 'class';
29
24
  } else if (ts.isParameter(node)) {
30
25
  return 'parameter';
31
- } else if (ts.isFunctionDeclaration(node) || (ts.isFunctionExpression(node) && !ts.isArrowFunction(node))) {
26
+ } else if ((ts.isFunctionDeclaration(node) && node.body) || (ts.isFunctionExpression(node) && !ts.isArrowFunction(node))) {
32
27
  return 'function';
33
28
  } else if (ts.isGetAccessor(node)) {
34
29
  return 'getter';
35
30
  } else if (ts.isSetAccessor(node)) {
36
31
  return 'setter';
32
+ } else if (ts.isSourceFile(node)) {
33
+ return 'file';
37
34
  }
38
35
  }
39
36
 
40
37
  #transformers = new Map<TransformerType, TransformerSet<S>>();
41
- #logTarget: string;
42
38
  #getState: (context: ts.TransformationContext, src: ts.SourceFile) => S;
43
39
 
44
40
  constructor(
45
41
  getState: (context: ts.TransformationContext, src: ts.SourceFile) => S,
46
- transformers: NodeTransformer<S, TransformerType, ts.Node>[],
47
- logTarget = 'compiler.log'
42
+ transformers: NodeTransformer<S, TransformerType, ts.Node>[]
48
43
  ) {
49
- this.#logTarget = logTarget;
50
44
  this.#getState = getState;
51
45
  this.#init(transformers);
52
46
  }
@@ -83,17 +77,11 @@ export class VisitorFactory<S extends State = State> {
83
77
  */
84
78
  visitor(): ts.TransformerFactory<ts.SourceFile> {
85
79
  return (context: ts.TransformationContext) => (file: ts.SourceFile): ts.SourceFile => {
86
- try {
87
- const c = new console.Console({
88
- stdout: createWriteStream(AppCache.toEntryName(this.#logTarget), { flags: 'a' }),
89
- inspectOptions: { depth: 4 },
90
- });
91
-
92
- ConsoleManager.set({
93
- onLog: (level, ctx, args) => c[level](level, ctx, ...LogUtil.collapseNodes(args))
94
- });
80
+ if (!file.fileName.endsWith('.ts')) { // Skip all non-ts files
81
+ return file;
82
+ }
95
83
 
96
- console.debug('Processing', { file: file.fileName, pid: process.pid });
84
+ try {
97
85
  const state = this.#getState(context, file);
98
86
  let ret = this.visit(state, context, file);
99
87
 
@@ -101,12 +89,11 @@ export class VisitorFactory<S extends State = State> {
101
89
  const changed = state.added.size;
102
90
  let statements: ts.NodeArray<ts.Statement> | ts.Statement[] = ret.statements;
103
91
  while (state.added.size) {
104
- for (const [k, all] of [...state.added]) {
105
- const idx = k === -1 ? state.added.size : k;
92
+ for (const [idx, all] of [...state.added].sort(([idxA], [idxB]) => idxB - idxA)) {
106
93
  statements = [
107
- ...statements.slice(0, idx),
94
+ ...statements.slice(0, Math.max(idx, 0)),
108
95
  ...all.map(v => this.visit(state, context, v)),
109
- ...statements.slice(idx)
96
+ ...statements.slice(Math.max(idx, 0))
110
97
  ];
111
98
  state.added.delete(idx);
112
99
  }
@@ -120,12 +107,10 @@ export class VisitorFactory<S extends State = State> {
120
107
  if (!(err instanceof Error)) {
121
108
  throw err;
122
109
  }
123
- console.error('Failed transforming', { error: err, file: file.fileName });
110
+ console!.error('Failed transforming', { error: `${err.message}\n${err.stack}`, file: file.fileName });
124
111
  const out = new Error(`Failed transforming: ${file.fileName}: ${err.message}`);
125
112
  out.stack = err.stack;
126
113
  throw out;
127
- } finally {
128
- ConsoleManager.clear(); // Reset logging
129
114
  }
130
115
  };
131
116
  }
package/index.ts DELETED
@@ -1,7 +0,0 @@
1
- export * from './src/state';
2
- export * from './src/visitor';
3
- export * from './src/register';
4
- export * from './src/types/visitor';
5
- export * from './src/types/shared';
6
- export { AnyType } from './src/resolver/types';
7
- export * from './src/util';
package/src/util/index.ts DELETED
@@ -1,6 +0,0 @@
1
- export * from './core';
2
- export * from './declaration';
3
- export * from './decorator';
4
- export * from './doc';
5
- export * from './literal';
6
- export * from './log';
@@ -1,57 +0,0 @@
1
- import * as ts from 'typescript';
2
- import { readFileSync } from 'fs';
3
-
4
- import { FsUtil, ScanFs } from '@travetto/boot';
5
- import { Util } from '@travetto/base';
6
-
7
- import { VisitorFactory, TransformerState, getAllTransformers } from '..';
8
-
9
- /**
10
- * Utils for testing transformers
11
- */
12
- export class TransformerTestUtil {
13
- /**
14
- * Compile a single file from a folder
15
- */
16
- static async compile(folder: string, file?: string): Promise<string> {
17
-
18
- const tsconfigObj = await import('@travetto/boot/tsconfig.trv.json');
19
-
20
- const prog = ts.createProgram({
21
- options: ts.convertCompilerOptionsFromJson(tsconfigObj, '').options,
22
- rootNames: (await ScanFs.scanDir({ testFile: f => f.startsWith('src/') && f.endsWith('.ts') }, folder))
23
- .filter(x => x.stats?.isFile())
24
- .filter(x => !file || x.file.endsWith(file))
25
- .map(x => x.file),
26
- });
27
- const log = `${folder}/.trv_compiler.log`;
28
-
29
- await FsUtil.unlinkRecursive(log);
30
-
31
- const transformers =
32
- (await ScanFs.scanDir({ testFile: f => f.startsWith('support/transformer') }, folder))
33
- .filter(x => x.stats?.isFile())
34
- .map(x => import(x.file).then(getAllTransformers));
35
-
36
- const visitor = new VisitorFactory(
37
- (ctx, src) => new TransformerState(src, ctx.factory, prog.getTypeChecker()),
38
- (await Promise.all(transformers)).flat(),
39
- log
40
- );
41
-
42
- const out = await new Promise<string>(res => {
43
- prog.emit(prog.getSourceFile(`src/${file}`), (__, data) => res(data), undefined, false,
44
- { before: [visitor.visitor()] }
45
- );
46
- });
47
-
48
- await Util.wait('1s'); // Wait for file buffer to sync
49
- try {
50
- console.info(readFileSync(log, 'utf8'));
51
- } catch { }
52
-
53
- await FsUtil.unlinkRecursive(log);
54
-
55
- return out;
56
- }
57
- }