@lynxwall/cucumber-tsflow 7.5.0 → 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.
Files changed (58) hide show
  1. package/bin/cucumber-tsflow +3 -3
  2. package/bin/cucumber-tsflow.js +0 -0
  3. package/lib/api/convert-configuration.d.ts +1 -1
  4. package/lib/api/convert-configuration.js +62 -19
  5. package/lib/api/convert-configuration.js.map +1 -1
  6. package/lib/api/load-configuration.js +226 -101
  7. package/lib/api/load-configuration.js.map +1 -1
  8. package/lib/cli/index.js +61 -13
  9. package/lib/cli/index.js.map +1 -1
  10. package/lib/cli/run.js +29 -15
  11. package/lib/cli/run.js.map +1 -1
  12. package/lib/transpilers/esm/esbuild-transpiler-cjs.js +118 -15
  13. package/lib/transpilers/esm/esbuild-transpiler.mjs +27 -6
  14. package/lib/transpilers/esm/esbuild.mjs +70 -26
  15. package/lib/transpilers/esm/esnode-loader.mjs +7 -0
  16. package/lib/transpilers/esm/esvue-loader.mjs +7 -0
  17. package/lib/transpilers/esm/loader-utils.mjs +283 -157
  18. package/lib/transpilers/esm/tsnode-loader.mjs +84 -38
  19. package/lib/transpilers/esm/tsnode-service.mjs +50 -6
  20. package/lib/transpilers/esm/vue-jsdom-setup.mjs +36 -7
  21. package/lib/transpilers/esm/vue-loader.mjs +48 -62
  22. package/lib/transpilers/esm/vue-sfc-compiler.mjs +194 -65
  23. package/lib/tsconfig.node.tsbuildinfo +1 -1
  24. package/lib/utils/tsflow-logger.d.ts +29 -0
  25. package/lib/utils/tsflow-logger.js +79 -0
  26. package/lib/utils/tsflow-logger.js.map +1 -0
  27. package/lib/utils/tsflow-logger.mjs +78 -0
  28. package/lib/version.d.ts +1 -1
  29. package/lib/version.js +1 -1
  30. package/lib/version.js.map +1 -1
  31. package/package.json +4 -3
  32. package/lib/support_code_library_builder/index.d.ts +0 -80
  33. package/lib/support_code_library_builder/index.js +0 -337
  34. package/lib/support_code_library_builder/index.js.map +0 -1
  35. package/lib/transpilers/esm/esmbuild-transpiler.d.ts +0 -4
  36. package/lib/transpilers/esm/esmbuild-transpiler.js +0 -19
  37. package/lib/transpilers/esm/esmbuild-transpiler.js.map +0 -1
  38. package/lib/transpilers/esm/esmbuild.d.ts +0 -12
  39. package/lib/transpilers/esm/esmbuild.js +0 -72
  40. package/lib/transpilers/esm/esmbuild.js.map +0 -1
  41. package/lib/transpilers/esm/esmnode.d.ts +0 -1
  42. package/lib/transpilers/esm/esmnode.js +0 -8
  43. package/lib/transpilers/esm/esmnode.js.map +0 -1
  44. package/lib/transpilers/esm/esmvue.d.ts +0 -1
  45. package/lib/transpilers/esm/esmvue.js +0 -29
  46. package/lib/transpilers/esm/esmvue.js.map +0 -1
  47. package/lib/transpilers/esm/tsnode-esm.d.ts +0 -1
  48. package/lib/transpilers/esm/tsnode-esm.js +0 -25
  49. package/lib/transpilers/esm/tsnode-esm.js.map +0 -1
  50. package/lib/transpilers/esm/tsnode-exp-esm.d.ts +0 -1
  51. package/lib/transpilers/esm/tsnode-exp-esm.js +0 -19
  52. package/lib/transpilers/esm/tsnode-exp-esm.js.map +0 -1
  53. package/lib/transpilers/esm/tsvue-esm.d.ts +0 -1
  54. package/lib/transpilers/esm/tsvue-esm.js +0 -40
  55. package/lib/transpilers/esm/tsvue-esm.js.map +0 -1
  56. package/lib/transpilers/esm/tsvue-exp-esm.d.ts +0 -1
  57. package/lib/transpilers/esm/tsvue-exp-esm.js +0 -40
  58. 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) return 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
- console.error('Failed to load tsconfig for aliases:', error);
42
+ logger.error('Failed to load tsconfig for aliases', error);
26
43
  }
27
44
 
28
45
  return tsconfigCache || { paths: {} };
29
46
  }
30
47
 
31
- // Add this function to handle path replacements
32
- function rewritePathMappings(code) {
48
+ function rewritePathMappings(code, filename) {
33
49
  const { absoluteBaseUrl, paths } = loadTsConfigPaths();
34
50
 
35
- if (!paths || !absoluteBaseUrl) return code;
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
- // Rewrite path mappings before transpiling
131
- let processedCode = rewritePathMappings(code);
154
+ logger.checkpoint('Rewriting path mappings', { filename });
155
+ let processedCode = rewritePathMappings(code, filename);
132
156
 
133
- const ret = transformSync(processedCode, {
134
- ...commonOptions,
135
- ...(options.esbuild || {}),
157
+ logger.checkpoint('Calling esbuild transformSync', {
158
+ filename,
136
159
  loader: loadersMap[loaderExt],
137
- sourcefile: filename
160
+ processedCodeLength: processedCode?.length
138
161
  });
139
162
 
140
- return { output: ret.code, sourceMap: ret.map };
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;