@lynxwall/cucumber-tsflow 7.4.1 → 7.5.5
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/bin/cucumber-tsflow +3 -3
- package/bin/cucumber-tsflow.js +0 -0
- package/lib/api/convert-configuration.d.ts +1 -1
- package/lib/api/convert-configuration.js +62 -19
- package/lib/api/convert-configuration.js.map +1 -1
- package/lib/api/load-configuration.js +226 -101
- package/lib/api/load-configuration.js.map +1 -1
- package/lib/cli/index.js +61 -13
- package/lib/cli/index.js.map +1 -1
- package/lib/cli/run.js +29 -15
- package/lib/cli/run.js.map +1 -1
- package/lib/transpilers/esm/esbuild-transpiler-cjs.js +118 -15
- package/lib/transpilers/esm/esbuild-transpiler.mjs +27 -6
- package/lib/transpilers/esm/esbuild.mjs +70 -26
- package/lib/transpilers/esm/esnode-loader.mjs +7 -0
- package/lib/transpilers/esm/esvue-loader.mjs +7 -0
- package/lib/transpilers/esm/loader-utils.mjs +285 -148
- package/lib/transpilers/esm/tsnode-loader.mjs +84 -38
- package/lib/transpilers/esm/tsnode-service.mjs +50 -6
- package/lib/transpilers/esm/vue-jsdom-setup.mjs +36 -7
- package/lib/transpilers/esm/vue-loader.mjs +48 -62
- package/lib/transpilers/esm/vue-sfc-compiler.mjs +194 -65
- package/lib/tsconfig.node.tsbuildinfo +1 -1
- package/lib/utils/tsflow-logger.d.ts +29 -0
- package/lib/utils/tsflow-logger.js +79 -0
- package/lib/utils/tsflow-logger.js.map +1 -0
- package/lib/utils/tsflow-logger.mjs +78 -0
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +6 -8
- package/lib/transpilers/esm/esmbuild-transpiler.d.ts +0 -4
- package/lib/transpilers/esm/esmbuild-transpiler.js +0 -19
- package/lib/transpilers/esm/esmbuild-transpiler.js.map +0 -1
- package/lib/transpilers/esm/esmbuild.d.ts +0 -12
- package/lib/transpilers/esm/esmbuild.js +0 -72
- package/lib/transpilers/esm/esmbuild.js.map +0 -1
- package/lib/transpilers/esm/esmnode.d.ts +0 -1
- package/lib/transpilers/esm/esmnode.js +0 -8
- package/lib/transpilers/esm/esmnode.js.map +0 -1
- package/lib/transpilers/esm/esmvue.d.ts +0 -1
- package/lib/transpilers/esm/esmvue.js +0 -29
- package/lib/transpilers/esm/esmvue.js.map +0 -1
- package/lib/transpilers/esm/tsnode-esm.d.ts +0 -1
- package/lib/transpilers/esm/tsnode-esm.js +0 -25
- package/lib/transpilers/esm/tsnode-esm.js.map +0 -1
- package/lib/transpilers/esm/tsnode-exp-esm.d.ts +0 -1
- package/lib/transpilers/esm/tsnode-exp-esm.js +0 -19
- package/lib/transpilers/esm/tsnode-exp-esm.js.map +0 -1
- package/lib/transpilers/esm/tsvue-esm.d.ts +0 -1
- package/lib/transpilers/esm/tsvue-esm.js +0 -40
- package/lib/transpilers/esm/tsvue-esm.js.map +0 -1
- package/lib/transpilers/esm/tsvue-exp-esm.d.ts +0 -1
- package/lib/transpilers/esm/tsvue-exp-esm.js +0 -40
- package/lib/transpilers/esm/tsvue-exp-esm.js.map +0 -1
|
@@ -2,6 +2,9 @@ import { transformSync } from 'esbuild';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { loadConfig } from 'tsconfig-paths';
|
|
4
4
|
import { pathToFileURL } from 'url';
|
|
5
|
+
import { createLogger } from '../../utils/tsflow-logger.mjs';
|
|
6
|
+
|
|
7
|
+
const logger = createLogger('esbuild');
|
|
5
8
|
|
|
6
9
|
export const defaultOptions = {
|
|
7
10
|
debug: true
|
|
@@ -11,54 +14,76 @@ export const defaultOptions = {
|
|
|
11
14
|
let tsconfigCache = null;
|
|
12
15
|
|
|
13
16
|
function loadTsConfigPaths() {
|
|
14
|
-
if (tsconfigCache)
|
|
17
|
+
if (tsconfigCache) {
|
|
18
|
+
logger.checkpoint('loadTsConfigPaths (cached)');
|
|
19
|
+
return tsconfigCache;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
logger.checkpoint('loadTsConfigPaths');
|
|
15
23
|
|
|
16
24
|
try {
|
|
17
25
|
const configLoaderResult = loadConfig(process.cwd());
|
|
26
|
+
logger.checkpoint('tsconfig loadConfig result', {
|
|
27
|
+
resultType: configLoaderResult.resultType,
|
|
28
|
+
cwd: process.cwd()
|
|
29
|
+
});
|
|
30
|
+
|
|
18
31
|
if (configLoaderResult.resultType === 'success') {
|
|
19
32
|
tsconfigCache = {
|
|
20
33
|
absoluteBaseUrl: configLoaderResult.absoluteBaseUrl,
|
|
21
34
|
paths: configLoaderResult.paths
|
|
22
35
|
};
|
|
36
|
+
logger.checkpoint('tsconfig paths cached', {
|
|
37
|
+
absoluteBaseUrl: tsconfigCache.absoluteBaseUrl,
|
|
38
|
+
pathCount: Object.keys(tsconfigCache.paths || {}).length
|
|
39
|
+
});
|
|
23
40
|
}
|
|
24
41
|
} catch (error) {
|
|
25
|
-
|
|
42
|
+
logger.error('Failed to load tsconfig for aliases', error);
|
|
26
43
|
}
|
|
27
44
|
|
|
28
45
|
return tsconfigCache || { paths: {} };
|
|
29
46
|
}
|
|
30
47
|
|
|
31
|
-
|
|
32
|
-
function rewritePathMappings(code) {
|
|
48
|
+
function rewritePathMappings(code, filename) {
|
|
33
49
|
const { absoluteBaseUrl, paths } = loadTsConfigPaths();
|
|
34
50
|
|
|
35
|
-
if (!paths || !absoluteBaseUrl)
|
|
51
|
+
if (!paths || !absoluteBaseUrl) {
|
|
52
|
+
logger.checkpoint('rewritePathMappings skipped (no paths)', { filename });
|
|
53
|
+
return code;
|
|
54
|
+
}
|
|
36
55
|
|
|
37
56
|
let modifiedCode = code;
|
|
57
|
+
let replacementCount = 0;
|
|
38
58
|
|
|
39
|
-
// Process each path mapping
|
|
40
59
|
for (const [pattern, replacements] of Object.entries(paths)) {
|
|
41
|
-
// Convert @fixtures/* to a regex pattern
|
|
42
60
|
const searchPattern = pattern.replace('/*', '');
|
|
43
61
|
const replacementPath = replacements[0].replace('/*', '');
|
|
44
62
|
|
|
45
|
-
// Create regex to match imports/exports
|
|
46
63
|
const regex = new RegExp(`(from\\s+['"])${searchPattern}(/[^'"]+)?(['"])`, 'g');
|
|
47
64
|
|
|
48
65
|
modifiedCode = modifiedCode.replace(regex, (match, prefix, subPath, suffix) => {
|
|
49
|
-
// If subPath is provided, remove leading slash
|
|
50
66
|
const pathSuffix = subPath ? subPath.substring(1) : '';
|
|
51
|
-
// Calculate the absolute path
|
|
52
67
|
const absolutePath = path.resolve(absoluteBaseUrl, replacementPath, pathSuffix);
|
|
53
|
-
// Convert to file URL for ESM
|
|
54
68
|
const fileUrl = pathToFileURL(absolutePath).href;
|
|
55
69
|
|
|
70
|
+
replacementCount++;
|
|
71
|
+
logger.checkpoint('Path mapping replaced', {
|
|
72
|
+
from: `${searchPattern}${subPath || ''}`,
|
|
73
|
+
to: fileUrl
|
|
74
|
+
});
|
|
75
|
+
|
|
56
76
|
return `${prefix}${fileUrl}${suffix}`;
|
|
57
77
|
});
|
|
58
78
|
}
|
|
59
79
|
|
|
80
|
+
if (replacementCount > 0) {
|
|
81
|
+
logger.checkpoint('rewritePathMappings complete', { filename, replacementCount });
|
|
82
|
+
}
|
|
83
|
+
|
|
60
84
|
return modifiedCode;
|
|
61
85
|
}
|
|
86
|
+
|
|
62
87
|
const commonOptions = {
|
|
63
88
|
format: 'esm',
|
|
64
89
|
logLevel: 'info',
|
|
@@ -69,6 +94,7 @@ const commonOptions = {
|
|
|
69
94
|
};
|
|
70
95
|
|
|
71
96
|
if (process.env.CUCUMBER_EXPERIMENTAL_DECORATORS === 'true') {
|
|
97
|
+
logger.checkpoint('Experimental decorators enabled');
|
|
72
98
|
commonOptions.tsconfigRaw = {
|
|
73
99
|
compilerOptions: {
|
|
74
100
|
experimentalDecorators: true,
|
|
@@ -96,18 +122,11 @@ export const loaders = {
|
|
|
96
122
|
};
|
|
97
123
|
|
|
98
124
|
export const supports = filename => {
|
|
99
|
-
// Don't transpile TypeScript files - they're handled by TypeScript compiler
|
|
100
125
|
if (filename.endsWith('.ts') || filename.endsWith('.tsx')) return false;
|
|
101
|
-
|
|
102
|
-
// Don't transpile cucumber-tsflow's lib files - they're CommonJS
|
|
103
126
|
if (filename.includes('cucumber-tsflow/lib') || filename.includes('cucumber-tsflow\\lib')) {
|
|
104
127
|
return false;
|
|
105
128
|
}
|
|
106
|
-
|
|
107
|
-
// Don't transpile node_modules
|
|
108
129
|
if (filename.includes('node_modules')) return false;
|
|
109
|
-
|
|
110
|
-
// Only transpile files in the test project
|
|
111
130
|
if (!filename.includes('cucumber-tsflow-specs')) return false;
|
|
112
131
|
|
|
113
132
|
return path.extname(filename) in loaders;
|
|
@@ -121,21 +140,46 @@ const getLoaders = options => {
|
|
|
121
140
|
return ret;
|
|
122
141
|
};
|
|
123
142
|
|
|
124
|
-
// In esbuild.mjs
|
|
125
143
|
export const transpileCode = (code, filename, ext, _options) => {
|
|
144
|
+
logger.checkpoint('transpileCode', {
|
|
145
|
+
filename,
|
|
146
|
+
ext,
|
|
147
|
+
codeLength: code?.length
|
|
148
|
+
});
|
|
149
|
+
|
|
126
150
|
const options = { ...defaultOptions, ..._options };
|
|
127
151
|
const loadersMap = getLoaders(options);
|
|
128
152
|
const loaderExt = ext != undefined ? ext : path.extname(filename);
|
|
129
153
|
|
|
130
|
-
|
|
131
|
-
let processedCode = rewritePathMappings(code);
|
|
154
|
+
logger.checkpoint('Rewriting path mappings', { filename });
|
|
155
|
+
let processedCode = rewritePathMappings(code, filename);
|
|
132
156
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
...(options.esbuild || {}),
|
|
157
|
+
logger.checkpoint('Calling esbuild transformSync', {
|
|
158
|
+
filename,
|
|
136
159
|
loader: loadersMap[loaderExt],
|
|
137
|
-
|
|
160
|
+
processedCodeLength: processedCode?.length
|
|
138
161
|
});
|
|
139
162
|
|
|
140
|
-
|
|
163
|
+
try {
|
|
164
|
+
const ret = transformSync(processedCode, {
|
|
165
|
+
...commonOptions,
|
|
166
|
+
...(options.esbuild || {}),
|
|
167
|
+
loader: loadersMap[loaderExt],
|
|
168
|
+
sourcefile: filename
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
logger.checkpoint('esbuild transformSync success', {
|
|
172
|
+
filename,
|
|
173
|
+
outputLength: ret.code?.length
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
return { output: ret.code, sourceMap: ret.map };
|
|
177
|
+
} catch (error) {
|
|
178
|
+
logger.error('esbuild transformSync failed', error, {
|
|
179
|
+
filename,
|
|
180
|
+
loader: loadersMap[loaderExt],
|
|
181
|
+
codePreview: processedCode?.substring(0, 200)
|
|
182
|
+
});
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
141
185
|
};
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { createEsbuildLoader } from './loader-utils.mjs';
|
|
2
|
+
import { createLogger } from '../../utils/tsflow-logger.mjs';
|
|
3
|
+
|
|
4
|
+
const logger = createLogger('esnode-loader');
|
|
5
|
+
|
|
6
|
+
logger.checkpoint('Initializing esnode-loader');
|
|
2
7
|
|
|
3
8
|
// Create and export the loader with default options
|
|
4
9
|
const loader = createEsbuildLoader({
|
|
@@ -6,4 +11,6 @@ const loader = createEsbuildLoader({
|
|
|
6
11
|
handleVue: false
|
|
7
12
|
});
|
|
8
13
|
|
|
14
|
+
logger.checkpoint('esnode-loader initialized');
|
|
15
|
+
|
|
9
16
|
export const { resolve, load, getFormat, transformSource } = loader;
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { createEsbuildLoader } from './loader-utils.mjs';
|
|
2
|
+
import { createLogger } from '../../utils/tsflow-logger.mjs';
|
|
3
|
+
|
|
4
|
+
const logger = createLogger('esvue-loader');
|
|
5
|
+
|
|
6
|
+
logger.checkpoint('Initializing esvue-loader');
|
|
2
7
|
|
|
3
8
|
// Create and export the loader with Vue support
|
|
4
9
|
const loader = createEsbuildLoader({
|
|
@@ -6,4 +11,6 @@ const loader = createEsbuildLoader({
|
|
|
6
11
|
handleVue: true
|
|
7
12
|
});
|
|
8
13
|
|
|
14
|
+
logger.checkpoint('esvue-loader initialized');
|
|
15
|
+
|
|
9
16
|
export const { resolve, load, getFormat, transformSource } = loader;
|