@workflow/builders 4.1.0 → 4.1.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/dist/apply-swc-transform.d.ts +7 -2
- package/dist/apply-swc-transform.d.ts.map +1 -1
- package/dist/apply-swc-transform.js +10 -4
- package/dist/base-builder-logging.test.d.ts +2 -0
- package/dist/base-builder-logging.test.d.ts.map +1 -0
- package/dist/base-builder-logging.test.js +99 -0
- package/dist/base-builder.d.ts +37 -14
- package/dist/base-builder.d.ts.map +1 -1
- package/dist/base-builder.js +301 -60
- package/dist/config-helpers.d.ts +2 -0
- package/dist/config-helpers.d.ts.map +1 -1
- package/dist/config-helpers.js +62 -1
- package/dist/config-helpers.test.d.ts +2 -0
- package/dist/config-helpers.test.d.ts.map +1 -0
- package/dist/config-helpers.test.js +17 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +18 -5
- package/dist/constants.test.js +7 -1
- package/dist/fast-discovery.d.ts +14 -0
- package/dist/fast-discovery.d.ts.map +1 -0
- package/dist/fast-discovery.js +649 -0
- package/dist/fast-discovery.test.d.ts +2 -0
- package/dist/fast-discovery.test.d.ts.map +1 -0
- package/dist/fast-discovery.test.js +376 -0
- package/dist/get-input-files.test.js +34 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/module-specifier.d.ts +13 -0
- package/dist/module-specifier.d.ts.map +1 -1
- package/dist/module-specifier.js +20 -1
- package/dist/standalone.d.ts.map +1 -1
- package/dist/standalone.js +4 -4
- package/dist/step-source-registration.test.d.ts +2 -0
- package/dist/step-source-registration.test.d.ts.map +1 -0
- package/dist/step-source-registration.test.js +82 -0
- package/dist/swc-esbuild-plugin.d.ts +1 -0
- package/dist/swc-esbuild-plugin.d.ts.map +1 -1
- package/dist/swc-esbuild-plugin.js +5 -3
- package/dist/swc-esbuild-plugin.test.js +25 -3
- package/dist/transform-utils.d.ts.map +1 -1
- package/dist/transform-utils.js +45 -6
- package/dist/transform-utils.test.js +92 -1
- package/dist/types.d.ts +9 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/vercel-build-output-api.d.ts.map +1 -1
- package/dist/vercel-build-output-api.js +8 -8
- package/dist/workflows-extractor.js +8 -3
- package/dist/workflows-extractor.test.d.ts +2 -0
- package/dist/workflows-extractor.test.d.ts.map +1 -0
- package/dist/workflows-extractor.test.js +70 -0
- package/package.json +5 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fast-discovery.test.d.ts","sourceRoot":"","sources":["../src/fast-discovery.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
import { mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync, } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
5
|
+
import { BaseBuilder } from './base-builder.js';
|
|
6
|
+
import { importParents, parentHasChild, } from './discover-entries-esbuild-plugin.js';
|
|
7
|
+
class TestBuilder extends BaseBuilder {
|
|
8
|
+
async build() {
|
|
9
|
+
// no-op
|
|
10
|
+
}
|
|
11
|
+
discoverEntriesPublic(inputs, outdir, tsconfigPath) {
|
|
12
|
+
return this.discoverEntries(inputs, outdir, tsconfigPath);
|
|
13
|
+
}
|
|
14
|
+
createRouteImportSpecifierPublic(file, routeDir) {
|
|
15
|
+
return this.createRouteImportSpecifier(file, routeDir);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const realTmpdir = realpathSync(tmpdir());
|
|
19
|
+
function normalize(path) {
|
|
20
|
+
return path.replace(/\\/g, '/');
|
|
21
|
+
}
|
|
22
|
+
function writeFile(path, contents) {
|
|
23
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
24
|
+
writeFileSync(path, contents, 'utf-8');
|
|
25
|
+
}
|
|
26
|
+
function createBuilder(workingDir) {
|
|
27
|
+
const config = {
|
|
28
|
+
buildTarget: 'standalone',
|
|
29
|
+
workingDir,
|
|
30
|
+
dirs: ['.'],
|
|
31
|
+
stepsBundlePath: join(workingDir, 'steps.js'),
|
|
32
|
+
workflowsBundlePath: join(workingDir, 'workflows.js'),
|
|
33
|
+
webhookBundlePath: join(workingDir, 'webhook.js'),
|
|
34
|
+
};
|
|
35
|
+
return new TestBuilder(config);
|
|
36
|
+
}
|
|
37
|
+
describe('fast workflow discovery', () => {
|
|
38
|
+
let testRoot;
|
|
39
|
+
beforeEach(() => {
|
|
40
|
+
testRoot = mkdtempSync(join(realTmpdir, 'workflow-fast-discovery-'));
|
|
41
|
+
importParents.clear();
|
|
42
|
+
});
|
|
43
|
+
afterEach(() => {
|
|
44
|
+
importParents.clear();
|
|
45
|
+
rmSync(testRoot, { recursive: true, force: true });
|
|
46
|
+
});
|
|
47
|
+
it('discovers transitive relative step imports and tracks the parent chain', async () => {
|
|
48
|
+
const entryFile = join(testRoot, 'src', 'entry.ts');
|
|
49
|
+
const workflowFile = join(testRoot, 'src', 'workflow.ts');
|
|
50
|
+
const stepFile = join(testRoot, 'src', 'step.ts');
|
|
51
|
+
writeFile(entryFile, `import './workflow';\n`);
|
|
52
|
+
writeFile(workflowFile, `import { doStep } from './step';\nvoid doStep;\n`);
|
|
53
|
+
writeFile(stepFile, `export async function doStep() {
|
|
54
|
+
'use step';
|
|
55
|
+
return 1;
|
|
56
|
+
}
|
|
57
|
+
`);
|
|
58
|
+
const discovered = await createBuilder(testRoot).discoverEntriesPublic([entryFile], join(testRoot, 'out'));
|
|
59
|
+
expect(discovered.discoveredSteps).toEqual(new Set([normalize(stepFile)]));
|
|
60
|
+
expect(parentHasChild(normalize(entryFile), normalize(stepFile))).toBe(true);
|
|
61
|
+
});
|
|
62
|
+
it('discovers relative JS imports whose basename includes .step', async () => {
|
|
63
|
+
const entryFile = join(testRoot, 'src', 'entry.ts');
|
|
64
|
+
const workflowFile = join(testRoot, 'src', 'hello.step.js');
|
|
65
|
+
writeFile(entryFile, `import './hello.step';\n`);
|
|
66
|
+
writeFile(workflowFile, `export async function run() {
|
|
67
|
+
'use workflow';
|
|
68
|
+
return 'ok';
|
|
69
|
+
}
|
|
70
|
+
`);
|
|
71
|
+
const discovered = await createBuilder(testRoot).discoverEntriesPublic([entryFile], join(testRoot, 'out'));
|
|
72
|
+
expect(discovered.discoveredWorkflows).toEqual(new Set([normalize(workflowFile)]));
|
|
73
|
+
expect(parentHasChild(normalize(entryFile), normalize(workflowFile))).toBe(true);
|
|
74
|
+
});
|
|
75
|
+
it('discovers workflow files reached through an imported package re-export', async () => {
|
|
76
|
+
const entryFile = join(testRoot, 'src', 'entry.ts');
|
|
77
|
+
const packageRoot = join(testRoot, 'node_modules', 'workflow-pkg');
|
|
78
|
+
const packageIndex = join(packageRoot, 'index.js');
|
|
79
|
+
const packageWorkflow = join(packageRoot, 'workflow.js');
|
|
80
|
+
writeFile(entryFile, `import { run } from 'workflow-pkg';\nvoid run;\n`);
|
|
81
|
+
writeFile(join(packageRoot, 'package.json'), JSON.stringify({
|
|
82
|
+
name: 'workflow-pkg',
|
|
83
|
+
version: '1.0.0',
|
|
84
|
+
main: 'index.js',
|
|
85
|
+
dependencies: {
|
|
86
|
+
workflow: '^1.0.0',
|
|
87
|
+
},
|
|
88
|
+
}));
|
|
89
|
+
writeFile(packageIndex, `export { run } from './workflow.js';\n`);
|
|
90
|
+
writeFile(packageWorkflow, `export async function run() {
|
|
91
|
+
"use workflow";
|
|
92
|
+
return "ok";
|
|
93
|
+
}
|
|
94
|
+
`);
|
|
95
|
+
const discovered = await createBuilder(testRoot).discoverEntriesPublic([entryFile], join(testRoot, 'out'));
|
|
96
|
+
expect(discovered.discoveredWorkflows).toEqual(new Set([normalize(packageWorkflow)]));
|
|
97
|
+
expect(parentHasChild(normalize(packageIndex), normalize(packageWorkflow))).toBe(true);
|
|
98
|
+
});
|
|
99
|
+
it('uses the workflow package export condition when discovering SDK stdlib steps', async () => {
|
|
100
|
+
const entryFile = join(testRoot, 'src', 'entry.ts');
|
|
101
|
+
const workflowPackageRoot = join(testRoot, 'node_modules', 'workflow');
|
|
102
|
+
const workflowEntry = join(workflowPackageRoot, 'workflow.js');
|
|
103
|
+
const workflowRequireEntry = join(workflowPackageRoot, 'typescript-plugin.cjs');
|
|
104
|
+
const stdlibFile = join(workflowPackageRoot, 'stdlib.js');
|
|
105
|
+
writeFile(entryFile, `import { fetch } from 'workflow';
|
|
106
|
+
|
|
107
|
+
export async function run() {
|
|
108
|
+
'use workflow';
|
|
109
|
+
return fetch('https://example.com');
|
|
110
|
+
}
|
|
111
|
+
`);
|
|
112
|
+
writeFile(join(workflowPackageRoot, 'package.json'), JSON.stringify({
|
|
113
|
+
name: 'workflow',
|
|
114
|
+
version: '1.0.0',
|
|
115
|
+
exports: {
|
|
116
|
+
'.': {
|
|
117
|
+
workflow: './workflow.js',
|
|
118
|
+
require: './typescript-plugin.cjs',
|
|
119
|
+
default: './index.js',
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
}));
|
|
123
|
+
writeFile(workflowEntry, `export * from './stdlib.js';
|
|
124
|
+
`);
|
|
125
|
+
writeFile(workflowRequireEntry, `module.exports = {};
|
|
126
|
+
`);
|
|
127
|
+
writeFile(stdlibFile, `export async function fetch(...args) {
|
|
128
|
+
'use step';
|
|
129
|
+
return globalThis.fetch(...args);
|
|
130
|
+
}
|
|
131
|
+
`);
|
|
132
|
+
const discovered = await createBuilder(testRoot).discoverEntriesPublic([entryFile], join(testRoot, 'out'));
|
|
133
|
+
expect(discovered.discoveredSteps).toEqual(new Set([normalize(stdlibFile)]));
|
|
134
|
+
expect(parentHasChild(normalize(workflowEntry), normalize(stdlibFile))).toBe(true);
|
|
135
|
+
});
|
|
136
|
+
it('discovers files reached through tsconfig path aliases', async () => {
|
|
137
|
+
const entryFile = join(testRoot, 'src', 'entry.ts');
|
|
138
|
+
const registryFile = join(testRoot, 'src', '_workflows.ts');
|
|
139
|
+
const workflowFile = join(testRoot, 'src', 'workflows', 'workflow.ts');
|
|
140
|
+
const tsconfigFile = join(testRoot, 'tsconfig.json');
|
|
141
|
+
writeFile(tsconfigFile, JSON.stringify({
|
|
142
|
+
compilerOptions: {
|
|
143
|
+
paths: {
|
|
144
|
+
'@/*': ['./src/*'],
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
}));
|
|
148
|
+
writeFile(entryFile, `import { allWorkflows } from '@/_workflows';\n`);
|
|
149
|
+
writeFile(registryFile, `import * as workflow from './workflows/workflow';
|
|
150
|
+
export const allWorkflows = { workflow };
|
|
151
|
+
`);
|
|
152
|
+
writeFile(workflowFile, `export async function run() {
|
|
153
|
+
'use workflow';
|
|
154
|
+
return 'ok';
|
|
155
|
+
}
|
|
156
|
+
`);
|
|
157
|
+
const discovered = await createBuilder(testRoot).discoverEntriesPublic([entryFile], join(testRoot, 'out'), tsconfigFile);
|
|
158
|
+
expect(discovered.discoveredWorkflows).toEqual(new Set([normalize(workflowFile)]));
|
|
159
|
+
expect(parentHasChild(normalize(entryFile), normalize(workflowFile))).toBe(true);
|
|
160
|
+
});
|
|
161
|
+
it('discovers dotted files reached through tsconfig path aliases', async () => {
|
|
162
|
+
const entryFile = join(testRoot, 'src', 'entry.ts');
|
|
163
|
+
const registryFile = join(testRoot, 'src', 'workflows', 'hello.index.ts');
|
|
164
|
+
const workflowFile = join(testRoot, 'src', 'workflows', 'hello.ts');
|
|
165
|
+
const tsconfigFile = join(testRoot, 'tsconfig.json');
|
|
166
|
+
writeFile(tsconfigFile, JSON.stringify({
|
|
167
|
+
compilerOptions: {
|
|
168
|
+
paths: {
|
|
169
|
+
'@/*': ['./src/*'],
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
}));
|
|
173
|
+
writeFile(entryFile, `import { helloWorkflow } from '@/workflows/hello.index';\n`);
|
|
174
|
+
writeFile(registryFile, `export { helloWorkflow } from './hello';\n`);
|
|
175
|
+
writeFile(workflowFile, `export async function helloWorkflow() {
|
|
176
|
+
'use workflow';
|
|
177
|
+
return 'ok';
|
|
178
|
+
}
|
|
179
|
+
`);
|
|
180
|
+
const discovered = await createBuilder(testRoot).discoverEntriesPublic([entryFile], join(testRoot, 'out'), tsconfigFile);
|
|
181
|
+
expect(discovered.discoveredWorkflows).toEqual(new Set([normalize(workflowFile)]));
|
|
182
|
+
});
|
|
183
|
+
it('ignores non-source files reached through tsconfig path aliases', async () => {
|
|
184
|
+
const entryFile = join(testRoot, 'src', 'entry.ts');
|
|
185
|
+
const assetFile = join(testRoot, 'src', 'styles', 'app.css');
|
|
186
|
+
const tsconfigFile = join(testRoot, 'tsconfig.json');
|
|
187
|
+
writeFile(tsconfigFile, JSON.stringify({
|
|
188
|
+
compilerOptions: {
|
|
189
|
+
paths: {
|
|
190
|
+
'@/*': ['./src/*'],
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
}));
|
|
194
|
+
writeFile(entryFile, `import '@/styles/app.css';\n`);
|
|
195
|
+
writeFile(assetFile, `'use workflow';\n`);
|
|
196
|
+
const discovered = await createBuilder(testRoot).discoverEntriesPublic([entryFile], join(testRoot, 'out'), tsconfigFile);
|
|
197
|
+
expect(discovered.discoveredWorkflows).toEqual(new Set());
|
|
198
|
+
});
|
|
199
|
+
it('discovers path aliases inherited through tsconfig extends', async () => {
|
|
200
|
+
const entryFile = join(testRoot, 'src', 'entry.ts');
|
|
201
|
+
const workflowFile = join(testRoot, 'src', 'workflows', 'workflow.ts');
|
|
202
|
+
const baseTsconfigFile = join(testRoot, 'tsconfig.base.json');
|
|
203
|
+
const tsconfigFile = join(testRoot, 'tsconfig.json');
|
|
204
|
+
writeFile(baseTsconfigFile, JSON.stringify({
|
|
205
|
+
compilerOptions: {
|
|
206
|
+
baseUrl: '.',
|
|
207
|
+
paths: {
|
|
208
|
+
'@base/*': ['./src/*'],
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
}));
|
|
212
|
+
writeFile(tsconfigFile, JSON.stringify({
|
|
213
|
+
extends: './tsconfig.base.json',
|
|
214
|
+
}));
|
|
215
|
+
writeFile(entryFile, `import { run } from '@base/workflows/workflow';\n`);
|
|
216
|
+
writeFile(workflowFile, `export async function run() {
|
|
217
|
+
'use workflow';
|
|
218
|
+
return 'ok';
|
|
219
|
+
}
|
|
220
|
+
`);
|
|
221
|
+
const discovered = await createBuilder(testRoot).discoverEntriesPublic([entryFile], join(testRoot, 'out'), tsconfigFile);
|
|
222
|
+
expect(discovered.discoveredWorkflows).toEqual(new Set([normalize(workflowFile)]));
|
|
223
|
+
});
|
|
224
|
+
it('discovers path aliases with multiple wildcards', async () => {
|
|
225
|
+
const entryFile = join(testRoot, 'src', 'entry.ts');
|
|
226
|
+
const workflowFile = join(testRoot, 'src', 'features', 'billing', 'flows', 'charge.ts');
|
|
227
|
+
const tsconfigFile = join(testRoot, 'tsconfig.json');
|
|
228
|
+
writeFile(tsconfigFile, JSON.stringify({
|
|
229
|
+
compilerOptions: {
|
|
230
|
+
paths: {
|
|
231
|
+
'@feature/*/workflow/*': ['./src/features/*/flows/*'],
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
}));
|
|
235
|
+
writeFile(entryFile, `import { charge } from '@feature/billing/workflow/charge';\n`);
|
|
236
|
+
writeFile(workflowFile, `export async function charge() {
|
|
237
|
+
'use workflow';
|
|
238
|
+
return 'ok';
|
|
239
|
+
}
|
|
240
|
+
`);
|
|
241
|
+
const discovered = await createBuilder(testRoot).discoverEntriesPublic([entryFile], join(testRoot, 'out'), tsconfigFile);
|
|
242
|
+
expect(discovered.discoveredWorkflows).toEqual(new Set([normalize(workflowFile)]));
|
|
243
|
+
});
|
|
244
|
+
it('uses nearest nested jsconfig aliases in monorepo packages', async () => {
|
|
245
|
+
const rootTsconfigFile = join(testRoot, 'tsconfig.json');
|
|
246
|
+
const packageRoot = join(testRoot, 'packages', 'app');
|
|
247
|
+
const entryFile = join(packageRoot, 'src', 'entry.js');
|
|
248
|
+
const workflowFile = join(packageRoot, 'src', 'workflow.js');
|
|
249
|
+
writeFile(rootTsconfigFile, JSON.stringify({
|
|
250
|
+
compilerOptions: {
|
|
251
|
+
paths: {
|
|
252
|
+
'@root/*': ['./root/*'],
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
}));
|
|
256
|
+
writeFile(join(packageRoot, 'jsconfig.json'), JSON.stringify({
|
|
257
|
+
compilerOptions: {
|
|
258
|
+
paths: {
|
|
259
|
+
'#/*': ['./src/*'],
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
}));
|
|
263
|
+
writeFile(entryFile, `import { run } from '#/workflow';\n`);
|
|
264
|
+
writeFile(workflowFile, `export async function run() {
|
|
265
|
+
"use workflow";
|
|
266
|
+
return "ok";
|
|
267
|
+
}
|
|
268
|
+
`);
|
|
269
|
+
const discovered = await createBuilder(testRoot).discoverEntriesPublic([entryFile], join(testRoot, 'out'));
|
|
270
|
+
expect(discovered.discoveredWorkflows).toEqual(new Set([normalize(workflowFile)]));
|
|
271
|
+
});
|
|
272
|
+
it('only treats serde files as registration candidates when they define static serde methods', async () => {
|
|
273
|
+
const entryFile = join(testRoot, 'src', 'entry.ts');
|
|
274
|
+
const reducerFile = join(testRoot, 'src', 'reducer.ts');
|
|
275
|
+
const serdeFile = join(testRoot, 'src', 'serde.ts');
|
|
276
|
+
writeFile(entryFile, `import './reducer';
|
|
277
|
+
import './serde';
|
|
278
|
+
`);
|
|
279
|
+
writeFile(reducerFile, `import { WORKFLOW_SERIALIZE } from '@workflow/serde';
|
|
280
|
+
|
|
281
|
+
export function reducer(value: unknown) {
|
|
282
|
+
return value?.constructor?.[WORKFLOW_SERIALIZE];
|
|
283
|
+
}
|
|
284
|
+
`);
|
|
285
|
+
writeFile(serdeFile, `import { WORKFLOW_SERIALIZE as WS } from '@workflow/serde';
|
|
286
|
+
|
|
287
|
+
export class Value {
|
|
288
|
+
static classId = 'Value';
|
|
289
|
+
static [WS](value: Value) {
|
|
290
|
+
return value;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
`);
|
|
294
|
+
const discovered = await createBuilder(testRoot).discoverEntriesPublic([entryFile], join(testRoot, 'out'));
|
|
295
|
+
expect(discovered.discoveredSerdeFiles).toEqual(new Set([normalize(serdeFile)]));
|
|
296
|
+
});
|
|
297
|
+
it('categorizes step, workflow, and serde usage independently', async () => {
|
|
298
|
+
const entryFile = join(testRoot, 'src', 'entry.ts');
|
|
299
|
+
const stepFile = join(testRoot, 'src', 'step.ts');
|
|
300
|
+
const workflowFile = join(testRoot, 'src', 'workflow.ts');
|
|
301
|
+
const serdeFile = join(testRoot, 'src', 'serde.ts');
|
|
302
|
+
writeFile(entryFile, `import './step';
|
|
303
|
+
import './workflow';
|
|
304
|
+
import './serde';
|
|
305
|
+
`);
|
|
306
|
+
writeFile(stepFile, `export async function runStep() {
|
|
307
|
+
'use step';
|
|
308
|
+
return 'ok';
|
|
309
|
+
}
|
|
310
|
+
`);
|
|
311
|
+
writeFile(workflowFile, `export async function runWorkflow() {
|
|
312
|
+
'use workflow';
|
|
313
|
+
return 'ok';
|
|
314
|
+
}
|
|
315
|
+
`);
|
|
316
|
+
writeFile(serdeFile, `export class Value {
|
|
317
|
+
static classId = 'Value';
|
|
318
|
+
static [Symbol.for('workflow-serialize')](value: Value) {
|
|
319
|
+
return value;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
`);
|
|
323
|
+
const discovered = await createBuilder(testRoot).discoverEntriesPublic([entryFile], join(testRoot, 'out'));
|
|
324
|
+
expect(discovered.discoveredSteps).toEqual(new Set([normalize(stepFile)]));
|
|
325
|
+
expect(discovered.discoveredWorkflows).toEqual(new Set([normalize(workflowFile)]));
|
|
326
|
+
expect(discovered.discoveredSerdeFiles).toEqual(new Set([normalize(serdeFile)]));
|
|
327
|
+
});
|
|
328
|
+
it('ignores serde examples that only appear inside comments', async () => {
|
|
329
|
+
const entryFile = join(testRoot, 'src', 'entry.ts');
|
|
330
|
+
const docsFile = join(testRoot, 'src', 'docs.ts');
|
|
331
|
+
writeFile(entryFile, `import './docs';\n`);
|
|
332
|
+
writeFile(docsFile, `/**
|
|
333
|
+
* import { WORKFLOW_SERIALIZE } from '@workflow/serde';
|
|
334
|
+
*
|
|
335
|
+
* class Example {
|
|
336
|
+
* static [WORKFLOW_SERIALIZE](value) {
|
|
337
|
+
* return value;
|
|
338
|
+
* }
|
|
339
|
+
* }
|
|
340
|
+
*/
|
|
341
|
+
export const WORKFLOW_SERIALIZE = Symbol.for('workflow-serialize');
|
|
342
|
+
`);
|
|
343
|
+
const discovered = await createBuilder(testRoot).discoverEntriesPublic([entryFile], join(testRoot, 'out'));
|
|
344
|
+
expect(discovered.discoveredSerdeFiles).toEqual(new Set());
|
|
345
|
+
});
|
|
346
|
+
it('relativizes nested package step registration imports', () => {
|
|
347
|
+
const routeDir = join(testRoot, 'app', '.well-known', 'workflow', 'v1');
|
|
348
|
+
const directPackageFile = join(testRoot, 'node_modules', 'direct-pkg', 'step.js');
|
|
349
|
+
const nestedPackageFile = join(testRoot, 'node_modules', 'parent-pkg', 'node_modules', 'nested-pkg', 'step.js');
|
|
350
|
+
writeFile(join(testRoot, 'package.json'), JSON.stringify({
|
|
351
|
+
dependencies: {
|
|
352
|
+
'direct-pkg': '1.0.0',
|
|
353
|
+
},
|
|
354
|
+
}));
|
|
355
|
+
writeFile(join(testRoot, 'node_modules', 'direct-pkg', 'package.json'), JSON.stringify({
|
|
356
|
+
name: 'direct-pkg',
|
|
357
|
+
version: '1.0.0',
|
|
358
|
+
exports: {
|
|
359
|
+
'./step': './step.js',
|
|
360
|
+
},
|
|
361
|
+
}));
|
|
362
|
+
writeFile(directPackageFile, `export const step = true;\n`);
|
|
363
|
+
writeFile(join(testRoot, 'node_modules', 'parent-pkg', 'node_modules', 'nested-pkg', 'package.json'), JSON.stringify({
|
|
364
|
+
name: 'nested-pkg',
|
|
365
|
+
version: '1.0.0',
|
|
366
|
+
exports: {
|
|
367
|
+
'./step': './step.js',
|
|
368
|
+
},
|
|
369
|
+
}));
|
|
370
|
+
writeFile(nestedPackageFile, `export const step = true;\n`);
|
|
371
|
+
const builder = createBuilder(testRoot);
|
|
372
|
+
expect(builder.createRouteImportSpecifierPublic(directPackageFile, routeDir)).toBe('direct-pkg/step');
|
|
373
|
+
expect(builder.createRouteImportSpecifierPublic(nestedPackageFile, routeDir)).toBe('../../../../node_modules/parent-pkg/node_modules/nested-pkg/step.js');
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFzdC1kaXNjb3ZlcnkudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9mYXN0LWRpc2NvdmVyeS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sYUFBYSxHQUNkLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBMEIsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RSxPQUFPLEVBQ0wsYUFBYSxFQUNiLGNBQWMsR0FDZixNQUFNLHNDQUFzQyxDQUFDO0FBRzlDLE1BQU0sV0FBWSxTQUFRLFdBQVc7SUFDbkMsS0FBSyxDQUFDLEtBQUs7UUFDVCxRQUFRO0lBQ1YsQ0FBQztJQUVNLHFCQUFxQixDQUMxQixNQUFnQixFQUNoQixNQUFjLEVBQ2QsWUFBcUI7UUFFckIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVNLGdDQUFnQyxDQUNyQyxJQUFZLEVBQ1osUUFBZ0I7UUFFaEIsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBRTFDLFNBQVMsU0FBUyxDQUFDLElBQVk7SUFDN0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENB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QUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sQ0FDSixPQUFPLENBQUMsZ0NBQWdDLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQ3RFLENBQUMsSUFBSSxDQUNKLHFFQUFxRSxDQUN0RSxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIG1rZGlyU3luYyxcbiAgbWtkdGVtcFN5bmMsXG4gIHJlYWxwYXRoU3luYyxcbiAgcm1TeW5jLFxuICB3cml0ZUZpbGVTeW5jLFxufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBhZnRlckVhY2gsIGJlZm9yZUVhY2gsIGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSAndml0ZXN0JztcbmltcG9ydCB7IEJhc2VCdWlsZGVyLCB0eXBlIERpc2NvdmVyZWRFbnRyaWVzIH0gZnJvbSAnLi9iYXNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHtcbiAgaW1wb3J0UGFyZW50cyxcbiAgcGFyZW50SGFzQ2hpbGQsXG59IGZyb20gJy4vZGlzY292ZXItZW50cmllcy1lc2J1aWxkLXBsdWdpbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YW5kYWxvbmVDb25maWcgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuY2xhc3MgVGVzdEJ1aWxkZXIgZXh0ZW5kcyBCYXNlQnVpbGRlciB7XG4gIGFzeW5jIGJ1aWxkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIG5vLW9wXG4gIH1cblxuICBwdWJsaWMgZGlzY292ZXJFbnRyaWVzUHVibGljKFxuICAgIGlucHV0czogc3RyaW5nW10sXG4gICAgb3V0ZGlyOiBzdHJpbmcsXG4gICAgdHNjb25maWdQYXRoPzogc3RyaW5nXG4gICk6IFByb21pc2U8RGlzY292ZXJlZEVudHJpZXM+IHtcbiAgICByZXR1cm4gdGhpcy5kaXNjb3ZlckVudHJpZXMoaW5wdXRzLCBvdXRkaXIsIHRzY29uZmlnUGF0aCk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlUm91dGVJbXBvcnRTcGVjaWZpZXJQdWJsaWMoXG4gICAgZmlsZTogc3RyaW5nLFxuICAgIHJvdXRlRGlyOiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVSb3V0ZUltcG9ydFNwZWNpZmllcihmaWxlLCByb3V0ZURpcik7XG4gIH1cbn1cblxuY29uc3QgcmVhbFRtcGRpciA9IHJlYWxwYXRoU3luYyh0bXBkaXIoKSk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlRmlsZShwYXRoOiBzdHJpbmcsIGNvbnRlbnRzOiBzdHJpbmcpOiB2b2lkIHtcbiAgbWtkaXJTeW5jKGRpcm5hbWUocGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB3cml0ZUZpbGVTeW5jKHBhdGgsIGNvbnRlbnRzLCAndXRmLTgnKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVpbGRlcih3b3JraW5nRGlyOiBzdHJpbmcpOiBUZXN0QnVpbGRlciB7XG4gIGNvbnN0IGNvbmZpZzogU3RhbmRhbG9uZUNvbmZpZyA9IHtcbiAgICBidWlsZFRhcmdldDogJ3N0YW5kYWxvbmUnLFxuICAgIHdvcmtpbmdEaXIsXG4gICAgZGlyczogWycuJ10sXG4gICAgc3RlcHNCdW5kbGVQYXRoOiBqb2luKHdvcmtpbmdEaXIsICdzdGVwcy5qcycpLFxuICAgIHdvcmtmbG93c0J1bmRsZVBhdGg6IGpvaW4od29ya2luZ0RpciwgJ3dvcmtmbG93cy5qcycpLFxuICAgIHdlYmhvb2tCdW5kbGVQYXRoOiBqb2luKHdvcmtpbmdEaXIsICd3ZWJob29rLmpzJyksXG4gIH07XG4gIHJldHVybiBuZXcgVGVzdEJ1aWxkZXIoY29uZmlnKTtcbn1cblxuZGVzY3JpYmUoJ2Zhc3Qgd29ya2Zsb3cgZGlzY292ZXJ5JywgKCkgPT4ge1xuICBsZXQgdGVzdFJvb3Q6IHN0cmluZztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB0ZXN0Um9vdCA9IG1rZHRlbXBTeW5jKGpvaW4ocmVhbFRtcGRpciwgJ3dvcmtmbG93LWZhc3QtZGlzY292ZXJ5LScpKTtcbiAgICBpbXBvcnRQYXJlbnRzLmNsZWFyKCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgaW1wb3J0UGFyZW50cy5jbGVhcigpO1xuICAgIHJtU3luYyh0ZXN0Um9vdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9KTtcblxuICBpdCgnZGlzY292ZXJzIHRyYW5zaXRpdmUgcmVsYXRpdmUgc3RlcCBpbXBvcnRzIGFuZCB0cmFja3MgdGhlIHBhcmVudCBjaGFpbicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICd3b3JrZmxvdy50cycpO1xuICAgIGNvbnN0IHN0ZXBGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdzdGVwLnRzJyk7XG5cbiAgICB3cml0ZUZpbGUoZW50cnlGaWxlLCBgaW1wb3J0ICcuL3dvcmtmbG93JztcXG5gKTtcbiAgICB3cml0ZUZpbGUod29ya2Zsb3dGaWxlLCBgaW1wb3J0IHsgZG9TdGVwIH0gZnJvbSAnLi9zdGVwJztcXG52b2lkIGRvU3RlcDtcXG5gKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBzdGVwRmlsZSxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9TdGVwKCkge1xuICAndXNlIHN0ZXAnO1xuICByZXR1cm4gMTtcbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRTdGVwcykudG9FcXVhbChuZXcgU2V0KFtub3JtYWxpemUoc3RlcEZpbGUpXSkpO1xuICAgIGV4cGVjdChwYXJlbnRIYXNDaGlsZChub3JtYWxpemUoZW50cnlGaWxlKSwgbm9ybWFsaXplKHN0ZXBGaWxlKSkpLnRvQmUoXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2Rpc2NvdmVycyByZWxhdGl2ZSBKUyBpbXBvcnRzIHdob3NlIGJhc2VuYW1lIGluY2x1ZGVzIC5zdGVwJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnZW50cnkudHMnKTtcbiAgICBjb25zdCB3b3JrZmxvd0ZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2hlbGxvLnN0ZXAuanMnKTtcblxuICAgIHdyaXRlRmlsZShlbnRyeUZpbGUsIGBpbXBvcnQgJy4vaGVsbG8uc3RlcCc7XFxuYCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgd29ya2Zsb3dGaWxlLFxuICAgICAgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW4oKSB7XG4gICd1c2Ugd29ya2Zsb3cnO1xuICByZXR1cm4gJ29rJztcbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUod29ya2Zsb3dGaWxlKV0pXG4gICAgKTtcbiAgICBleHBlY3QocGFyZW50SGFzQ2hpbGQobm9ybWFsaXplKGVudHJ5RmlsZSksIG5vcm1hbGl6ZSh3b3JrZmxvd0ZpbGUpKSkudG9CZShcbiAgICAgIHRydWVcbiAgICApO1xuICB9KTtcblxuICBpdCgnZGlzY292ZXJzIHdvcmtmbG93IGZpbGVzIHJlYWNoZWQgdGhyb3VnaCBhbiBpbXBvcnRlZCBwYWNrYWdlIHJlLWV4cG9ydCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3QgcGFja2FnZVJvb3QgPSBqb2luKHRlc3RSb290LCAnbm9kZV9tb2R1bGVzJywgJ3dvcmtmbG93LXBrZycpO1xuICAgIGNvbnN0IHBhY2thZ2VJbmRleCA9IGpvaW4ocGFja2FnZVJvb3QsICdpbmRleC5qcycpO1xuICAgIGNvbnN0IHBhY2thZ2VXb3JrZmxvdyA9IGpvaW4ocGFja2FnZVJvb3QsICd3b3JrZmxvdy5qcycpO1xuXG4gICAgd3JpdGVGaWxlKGVudHJ5RmlsZSwgYGltcG9ydCB7IHJ1biB9IGZyb20gJ3dvcmtmbG93LXBrZyc7XFxudm9pZCBydW47XFxuYCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbihwYWNrYWdlUm9vdCwgJ3BhY2thZ2UuanNvbicpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBuYW1lOiAnd29ya2Zsb3ctcGtnJyxcbiAgICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgICAgbWFpbjogJ2luZGV4LmpzJyxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiB7XG4gICAgICAgICAgd29ya2Zsb3c6ICdeMS4wLjAnLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShwYWNrYWdlSW5kZXgsIGBleHBvcnQgeyBydW4gfSBmcm9tICcuL3dvcmtmbG93LmpzJztcXG5gKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBwYWNrYWdlV29ya2Zsb3csXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bigpIHtcbiAgXCJ1c2Ugd29ya2Zsb3dcIjtcbiAgcmV0dXJuIFwib2tcIjtcbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUocGFja2FnZVdvcmtmbG93KV0pXG4gICAgKTtcbiAgICBleHBlY3QoXG4gICAgICBwYXJlbnRIYXNDaGlsZChub3JtYWxpemUocGFja2FnZUluZGV4KSwgbm9ybWFsaXplKHBhY2thZ2VXb3JrZmxvdykpXG4gICAgKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdCgndXNlcyB0aGUgd29ya2Zsb3cgcGFja2FnZSBleHBvcnQgY29uZGl0aW9uIHdoZW4gZGlzY292ZXJpbmcgU0RLIHN0ZGxpYiBzdGVwcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dQYWNrYWdlUm9vdCA9IGpvaW4odGVzdFJvb3QsICdub2RlX21vZHVsZXMnLCAnd29ya2Zsb3cnKTtcbiAgICBjb25zdCB3b3JrZmxvd0VudHJ5ID0gam9pbih3b3JrZmxvd1BhY2thZ2VSb290LCAnd29ya2Zsb3cuanMnKTtcbiAgICBjb25zdCB3b3JrZmxvd1JlcXVpcmVFbnRyeSA9IGpvaW4oXG4gICAgICB3b3JrZmxvd1BhY2thZ2VSb290LFxuICAgICAgJ3R5cGVzY3JpcHQtcGx1Z2luLmNqcydcbiAgICApO1xuICAgIGNvbnN0IHN0ZGxpYkZpbGUgPSBqb2luKHdvcmtmbG93UGFja2FnZVJvb3QsICdzdGRsaWIuanMnKTtcblxuICAgIHdyaXRlRmlsZShcbiAgICAgIGVudHJ5RmlsZSxcbiAgICAgIGBpbXBvcnQgeyBmZXRjaCB9IGZyb20gJ3dvcmtmbG93JztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bigpIHtcbiAgJ3VzZSB3b3JrZmxvdyc7XG4gIHJldHVybiBmZXRjaCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xufVxuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbih3b3JrZmxvd1BhY2thZ2VSb290LCAncGFja2FnZS5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIG5hbWU6ICd3b3JrZmxvdycsXG4gICAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICAgIGV4cG9ydHM6IHtcbiAgICAgICAgICAnLic6IHtcbiAgICAgICAgICAgIHdvcmtmbG93OiAnLi93b3JrZmxvdy5qcycsXG4gICAgICAgICAgICByZXF1aXJlOiAnLi90eXBlc2NyaXB0LXBsdWdpbi5janMnLFxuICAgICAgICAgICAgZGVmYXVsdDogJy4vaW5kZXguanMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgd29ya2Zsb3dFbnRyeSxcbiAgICAgIGBleHBvcnQgKiBmcm9tICcuL3N0ZGxpYi5qcyc7XG5gXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICB3b3JrZmxvd1JlcXVpcmVFbnRyeSxcbiAgICAgIGBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc3RkbGliRmlsZSxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2goLi4uYXJncykge1xuICAndXNlIHN0ZXAnO1xuICByZXR1cm4gZ2xvYmFsVGhpcy5mZXRjaCguLi5hcmdzKTtcbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRTdGVwcykudG9FcXVhbChcbiAgICAgIG5ldyBTZXQoW25vcm1hbGl6ZShzdGRsaWJGaWxlKV0pXG4gICAgKTtcbiAgICBleHBlY3QoXG4gICAgICBwYXJlbnRIYXNDaGlsZChub3JtYWxpemUod29ya2Zsb3dFbnRyeSksIG5vcm1hbGl6ZShzdGRsaWJGaWxlKSlcbiAgICApLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdkaXNjb3ZlcnMgZmlsZXMgcmVhY2hlZCB0aHJvdWdoIHRzY29uZmlnIHBhdGggYWxpYXNlcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3QgcmVnaXN0cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdfd29ya2Zsb3dzLnRzJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICd3b3JrZmxvd3MnLCAnd29ya2Zsb3cudHMnKTtcbiAgICBjb25zdCB0c2NvbmZpZ0ZpbGUgPSBqb2luKHRlc3RSb290LCAndHNjb25maWcuanNvbicpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgdHNjb25maWdGaWxlLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgICAgICBwYXRoczoge1xuICAgICAgICAgICAgJ0AvKic6IFsnLi9zcmMvKiddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKGVudHJ5RmlsZSwgYGltcG9ydCB7IGFsbFdvcmtmbG93cyB9IGZyb20gJ0AvX3dvcmtmbG93cyc7XFxuYCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgcmVnaXN0cnlGaWxlLFxuICAgICAgYGltcG9ydCAqIGFzIHdvcmtmbG93IGZyb20gJy4vd29ya2Zsb3dzL3dvcmtmbG93JztcbmV4cG9ydCBjb25zdCBhbGxXb3JrZmxvd3MgPSB7IHdvcmtmbG93IH07XG5gXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICB3b3JrZmxvd0ZpbGUsXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bigpIHtcbiAgJ3VzZSB3b3JrZmxvdyc7XG4gIHJldHVybiAnb2snO1xufVxuYFxuICAgICk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcmVkID0gYXdhaXQgY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCkuZGlzY292ZXJFbnRyaWVzUHVibGljKFxuICAgICAgW2VudHJ5RmlsZV0sXG4gICAgICBqb2luKHRlc3RSb290LCAnb3V0JyksXG4gICAgICB0c2NvbmZpZ0ZpbGVcbiAgICApO1xuXG4gICAgZXhwZWN0KGRpc2NvdmVyZWQuZGlzY292ZXJlZFdvcmtmbG93cykudG9FcXVhbChcbiAgICAgIG5ldyBTZXQoW25vcm1hbGl6ZSh3b3JrZmxvd0ZpbGUpXSlcbiAgICApO1xuICAgIGV4cGVjdChwYXJlbnRIYXNDaGlsZChub3JtYWxpemUoZW50cnlGaWxlKSwgbm9ybWFsaXplKHdvcmtmbG93RmlsZSkpKS50b0JlKFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdkaXNjb3ZlcnMgZG90dGVkIGZpbGVzIHJlYWNoZWQgdGhyb3VnaCB0c2NvbmZpZyBwYXRoIGFsaWFzZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW50cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdlbnRyeS50cycpO1xuICAgIGNvbnN0IHJlZ2lzdHJ5RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnd29ya2Zsb3dzJywgJ2hlbGxvLmluZGV4LnRzJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICd3b3JrZmxvd3MnLCAnaGVsbG8udHMnKTtcbiAgICBjb25zdCB0c2NvbmZpZ0ZpbGUgPSBqb2luKHRlc3RSb290LCAndHNjb25maWcuanNvbicpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgdHNjb25maWdGaWxlLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgICAgICBwYXRoczoge1xuICAgICAgICAgICAgJ0AvKic6IFsnLi9zcmMvKiddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgZW50cnlGaWxlLFxuICAgICAgYGltcG9ydCB7IGhlbGxvV29ya2Zsb3cgfSBmcm9tICdAL3dvcmtmbG93cy9oZWxsby5pbmRleCc7XFxuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKHJlZ2lzdHJ5RmlsZSwgYGV4cG9ydCB7IGhlbGxvV29ya2Zsb3cgfSBmcm9tICcuL2hlbGxvJztcXG5gKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICB3b3JrZmxvd0ZpbGUsXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhlbGxvV29ya2Zsb3coKSB7XG4gICd1c2Ugd29ya2Zsb3cnO1xuICByZXR1cm4gJ29rJztcbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpLFxuICAgICAgdHNjb25maWdGaWxlXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUod29ya2Zsb3dGaWxlKV0pXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2lnbm9yZXMgbm9uLXNvdXJjZSBmaWxlcyByZWFjaGVkIHRocm91Z2ggdHNjb25maWcgcGF0aCBhbGlhc2VzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnZW50cnkudHMnKTtcbiAgICBjb25zdCBhc3NldEZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3N0eWxlcycsICdhcHAuY3NzJyk7XG4gICAgY29uc3QgdHNjb25maWdGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3RzY29uZmlnLmpzb24nKTtcblxuICAgIHdyaXRlRmlsZShcbiAgICAgIHRzY29uZmlnRmlsZSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgcGF0aHM6IHtcbiAgICAgICAgICAgICdALyonOiBbJy4vc3JjLyonXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShlbnRyeUZpbGUsIGBpbXBvcnQgJ0Avc3R5bGVzL2FwcC5jc3MnO1xcbmApO1xuICAgIHdyaXRlRmlsZShhc3NldEZpbGUsIGAndXNlIHdvcmtmbG93JztcXG5gKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyZWQgPSBhd2FpdCBjcmVhdGVCdWlsZGVyKHRlc3RSb290KS5kaXNjb3ZlckVudHJpZXNQdWJsaWMoXG4gICAgICBbZW50cnlGaWxlXSxcbiAgICAgIGpvaW4odGVzdFJvb3QsICdvdXQnKSxcbiAgICAgIHRzY29uZmlnRmlsZVxuICAgICk7XG5cbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkV29ya2Zsb3dzKS50b0VxdWFsKG5ldyBTZXQoKSk7XG4gIH0pO1xuXG4gIGl0KCdkaXNjb3ZlcnMgcGF0aCBhbGlhc2VzIGluaGVyaXRlZCB0aHJvdWdoIHRzY29uZmlnIGV4dGVuZHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW50cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdlbnRyeS50cycpO1xuICAgIGNvbnN0IHdvcmtmbG93RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnd29ya2Zsb3dzJywgJ3dvcmtmbG93LnRzJyk7XG4gICAgY29uc3QgYmFzZVRzY29uZmlnRmlsZSA9IGpvaW4odGVzdFJvb3QsICd0c2NvbmZpZy5iYXNlLmpzb24nKTtcbiAgICBjb25zdCB0c2NvbmZpZ0ZpbGUgPSBqb2luKHRlc3RSb290LCAndHNjb25maWcuanNvbicpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgYmFzZVRzY29uZmlnRmlsZSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgYmFzZVVybDogJy4nLFxuICAgICAgICAgIHBhdGhzOiB7XG4gICAgICAgICAgICAnQGJhc2UvKic6IFsnLi9zcmMvKiddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgdHNjb25maWdGaWxlLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBleHRlbmRzOiAnLi90c2NvbmZpZy5iYXNlLmpzb24nLFxuICAgICAgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShlbnRyeUZpbGUsIGBpbXBvcnQgeyBydW4gfSBmcm9tICdAYmFzZS93b3JrZmxvd3Mvd29ya2Zsb3cnO1xcbmApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHdvcmtmbG93RmlsZSxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuKCkge1xuICAndXNlIHdvcmtmbG93JztcbiAgcmV0dXJuICdvayc7XG59XG5gXG4gICAgKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyZWQgPSBhd2FpdCBjcmVhdGVCdWlsZGVyKHRlc3RSb290KS5kaXNjb3ZlckVudHJpZXNQdWJsaWMoXG4gICAgICBbZW50cnlGaWxlXSxcbiAgICAgIGpvaW4odGVzdFJvb3QsICdvdXQnKSxcbiAgICAgIHRzY29uZmlnRmlsZVxuICAgICk7XG5cbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkV29ya2Zsb3dzKS50b0VxdWFsKFxuICAgICAgbmV3IFNldChbbm9ybWFsaXplKHdvcmtmbG93RmlsZSldKVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdkaXNjb3ZlcnMgcGF0aCBhbGlhc2VzIHdpdGggbXVsdGlwbGUgd2lsZGNhcmRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGpvaW4odGVzdFJvb3QsICdzcmMnLCAnZW50cnkudHMnKTtcbiAgICBjb25zdCB3b3JrZmxvd0ZpbGUgPSBqb2luKFxuICAgICAgdGVzdFJvb3QsXG4gICAgICAnc3JjJyxcbiAgICAgICdmZWF0dXJlcycsXG4gICAgICAnYmlsbGluZycsXG4gICAgICAnZmxvd3MnLFxuICAgICAgJ2NoYXJnZS50cydcbiAgICApO1xuICAgIGNvbnN0IHRzY29uZmlnRmlsZSA9IGpvaW4odGVzdFJvb3QsICd0c2NvbmZpZy5qc29uJyk7XG5cbiAgICB3cml0ZUZpbGUoXG4gICAgICB0c2NvbmZpZ0ZpbGUsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIHBhdGhzOiB7XG4gICAgICAgICAgICAnQGZlYXR1cmUvKi93b3JrZmxvdy8qJzogWycuL3NyYy9mZWF0dXJlcy8qL2Zsb3dzLyonXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIGVudHJ5RmlsZSxcbiAgICAgIGBpbXBvcnQgeyBjaGFyZ2UgfSBmcm9tICdAZmVhdHVyZS9iaWxsaW5nL3dvcmtmbG93L2NoYXJnZSc7XFxuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgd29ya2Zsb3dGaWxlLFxuICAgICAgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGFyZ2UoKSB7XG4gICd1c2Ugd29ya2Zsb3cnO1xuICByZXR1cm4gJ29rJztcbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpLFxuICAgICAgdHNjb25maWdGaWxlXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUod29ya2Zsb3dGaWxlKV0pXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3VzZXMgbmVhcmVzdCBuZXN0ZWQganNjb25maWcgYWxpYXNlcyBpbiBtb25vcmVwbyBwYWNrYWdlcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByb290VHNjb25maWdGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3RzY29uZmlnLmpzb24nKTtcbiAgICBjb25zdCBwYWNrYWdlUm9vdCA9IGpvaW4odGVzdFJvb3QsICdwYWNrYWdlcycsICdhcHAnKTtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHBhY2thZ2VSb290LCAnc3JjJywgJ2VudHJ5LmpzJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dGaWxlID0gam9pbihwYWNrYWdlUm9vdCwgJ3NyYycsICd3b3JrZmxvdy5qcycpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgcm9vdFRzY29uZmlnRmlsZSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgcGF0aHM6IHtcbiAgICAgICAgICAgICdAcm9vdC8qJzogWycuL3Jvb3QvKiddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbihwYWNrYWdlUm9vdCwgJ2pzY29uZmlnLmpzb24nKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgcGF0aHM6IHtcbiAgICAgICAgICAgICcjLyonOiBbJy4vc3JjLyonXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShlbnRyeUZpbGUsIGBpbXBvcnQgeyBydW4gfSBmcm9tICcjL3dvcmtmbG93JztcXG5gKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICB3b3JrZmxvd0ZpbGUsXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bigpIHtcbiAgXCJ1c2Ugd29ya2Zsb3dcIjtcbiAgcmV0dXJuIFwib2tcIjtcbn1cbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRXb3JrZmxvd3MpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUod29ya2Zsb3dGaWxlKV0pXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ29ubHkgdHJlYXRzIHNlcmRlIGZpbGVzIGFzIHJlZ2lzdHJhdGlvbiBjYW5kaWRhdGVzIHdoZW4gdGhleSBkZWZpbmUgc3RhdGljIHNlcmRlIG1ldGhvZHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW50cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdlbnRyeS50cycpO1xuICAgIGNvbnN0IHJlZHVjZXJGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdyZWR1Y2VyLnRzJyk7XG4gICAgY29uc3Qgc2VyZGVGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdzZXJkZS50cycpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgZW50cnlGaWxlLFxuICAgICAgYGltcG9ydCAnLi9yZWR1Y2VyJztcbmltcG9ydCAnLi9zZXJkZSc7XG5gXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICByZWR1Y2VyRmlsZSxcbiAgICAgIGBpbXBvcnQgeyBXT1JLRkxPV19TRVJJQUxJWkUgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlcih2YWx1ZTogdW5rbm93bikge1xuICByZXR1cm4gdmFsdWU/LmNvbnN0cnVjdG9yPy5bV09SS0ZMT1dfU0VSSUFMSVpFXTtcbn1cbmBcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHNlcmRlRmlsZSxcbiAgICAgIGBpbXBvcnQgeyBXT1JLRkxPV19TRVJJQUxJWkUgYXMgV1MgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO1xuXG5leHBvcnQgY2xhc3MgVmFsdWUge1xuICBzdGF0aWMgY2xhc3NJZCA9ICdWYWx1ZSc7XG4gIHN0YXRpYyBbV1NdKHZhbHVlOiBWYWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuYFxuICAgICk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcmVkID0gYXdhaXQgY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCkuZGlzY292ZXJFbnRyaWVzUHVibGljKFxuICAgICAgW2VudHJ5RmlsZV0sXG4gICAgICBqb2luKHRlc3RSb290LCAnb3V0JylcbiAgICApO1xuXG4gICAgZXhwZWN0KGRpc2NvdmVyZWQuZGlzY292ZXJlZFNlcmRlRmlsZXMpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUoc2VyZGVGaWxlKV0pXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2NhdGVnb3JpemVzIHN0ZXAsIHdvcmtmbG93LCBhbmQgc2VyZGUgdXNhZ2UgaW5kZXBlbmRlbnRseScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3Qgc3RlcEZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3N0ZXAudHMnKTtcbiAgICBjb25zdCB3b3JrZmxvd0ZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3dvcmtmbG93LnRzJyk7XG4gICAgY29uc3Qgc2VyZGVGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdzZXJkZS50cycpO1xuXG4gICAgd3JpdGVGaWxlKFxuICAgICAgZW50cnlGaWxlLFxuICAgICAgYGltcG9ydCAnLi9zdGVwJztcbmltcG9ydCAnLi93b3JrZmxvdyc7XG5pbXBvcnQgJy4vc2VyZGUnO1xuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc3RlcEZpbGUsXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blN0ZXAoKSB7XG4gICd1c2Ugc3RlcCc7XG4gIHJldHVybiAnb2snO1xufVxuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgd29ya2Zsb3dGaWxlLFxuICAgICAgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Xb3JrZmxvdygpIHtcbiAgJ3VzZSB3b3JrZmxvdyc7XG4gIHJldHVybiAnb2snO1xufVxuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc2VyZGVGaWxlLFxuICAgICAgYGV4cG9ydCBjbGFzcyBWYWx1ZSB7XG4gIHN0YXRpYyBjbGFzc0lkID0gJ1ZhbHVlJztcbiAgc3RhdGljIFtTeW1ib2wuZm9yKCd3b3JrZmxvdy1zZXJpYWxpemUnKV0odmFsdWU6IFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5gXG4gICAgKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyZWQgPSBhd2FpdCBjcmVhdGVCdWlsZGVyKHRlc3RSb290KS5kaXNjb3ZlckVudHJpZXNQdWJsaWMoXG4gICAgICBbZW50cnlGaWxlXSxcbiAgICAgIGpvaW4odGVzdFJvb3QsICdvdXQnKVxuICAgICk7XG5cbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkU3RlcHMpLnRvRXF1YWwobmV3IFNldChbbm9ybWFsaXplKHN0ZXBGaWxlKV0pKTtcbiAgICBleHBlY3QoZGlzY292ZXJlZC5kaXNjb3ZlcmVkV29ya2Zsb3dzKS50b0VxdWFsKFxuICAgICAgbmV3IFNldChbbm9ybWFsaXplKHdvcmtmbG93RmlsZSldKVxuICAgICk7XG4gICAgZXhwZWN0KGRpc2NvdmVyZWQuZGlzY292ZXJlZFNlcmRlRmlsZXMpLnRvRXF1YWwoXG4gICAgICBuZXcgU2V0KFtub3JtYWxpemUoc2VyZGVGaWxlKV0pXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2lnbm9yZXMgc2VyZGUgZXhhbXBsZXMgdGhhdCBvbmx5IGFwcGVhciBpbnNpZGUgY29tbWVudHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW50cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdlbnRyeS50cycpO1xuICAgIGNvbnN0IGRvY3NGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdkb2NzLnRzJyk7XG5cbiAgICB3cml0ZUZpbGUoZW50cnlGaWxlLCBgaW1wb3J0ICcuL2RvY3MnO1xcbmApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIGRvY3NGaWxlLFxuICAgICAgYC8qKlxuICogaW1wb3J0IHsgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztcbiAqXG4gKiBjbGFzcyBFeGFtcGxlIHtcbiAqICAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKHZhbHVlKSB7XG4gKiAgICAgcmV0dXJuIHZhbHVlO1xuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBXT1JLRkxPV19TRVJJQUxJWkUgPSBTeW1ib2wuZm9yKCd3b3JrZmxvdy1zZXJpYWxpemUnKTtcbmBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpLmRpc2NvdmVyRW50cmllc1B1YmxpYyhcbiAgICAgIFtlbnRyeUZpbGVdLFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ291dCcpXG4gICAgKTtcblxuICAgIGV4cGVjdChkaXNjb3ZlcmVkLmRpc2NvdmVyZWRTZXJkZUZpbGVzKS50b0VxdWFsKG5ldyBTZXQoKSk7XG4gIH0pO1xuXG4gIGl0KCdyZWxhdGl2aXplcyBuZXN0ZWQgcGFja2FnZSBzdGVwIHJlZ2lzdHJhdGlvbiBpbXBvcnRzJywgKCkgPT4ge1xuICAgIGNvbnN0IHJvdXRlRGlyID0gam9pbih0ZXN0Um9vdCwgJ2FwcCcsICcud2VsbC1rbm93bicsICd3b3JrZmxvdycsICd2MScpO1xuICAgIGNvbnN0IGRpcmVjdFBhY2thZ2VGaWxlID0gam9pbihcbiAgICAgIHRlc3RSb290LFxuICAgICAgJ25vZGVfbW9kdWxlcycsXG4gICAgICAnZGlyZWN0LXBrZycsXG4gICAgICAnc3RlcC5qcydcbiAgICApO1xuICAgIGNvbnN0IG5lc3RlZFBhY2thZ2VGaWxlID0gam9pbihcbiAgICAgIHRlc3RSb290LFxuICAgICAgJ25vZGVfbW9kdWxlcycsXG4gICAgICAncGFyZW50LXBrZycsXG4gICAgICAnbm9kZV9tb2R1bGVzJyxcbiAgICAgICduZXN0ZWQtcGtnJyxcbiAgICAgICdzdGVwLmpzJ1xuICAgICk7XG5cbiAgICB3cml0ZUZpbGUoXG4gICAgICBqb2luKHRlc3RSb290LCAncGFja2FnZS5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGRlcGVuZGVuY2llczoge1xuICAgICAgICAgICdkaXJlY3QtcGtnJzogJzEuMC4wJyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBqb2luKHRlc3RSb290LCAnbm9kZV9tb2R1bGVzJywgJ2RpcmVjdC1wa2cnLCAncGFja2FnZS5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIG5hbWU6ICdkaXJlY3QtcGtnJyxcbiAgICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgICAgZXhwb3J0czoge1xuICAgICAgICAgICcuL3N0ZXAnOiAnLi9zdGVwLmpzJyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoZGlyZWN0UGFja2FnZUZpbGUsIGBleHBvcnQgY29uc3Qgc3RlcCA9IHRydWU7XFxuYCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbihcbiAgICAgICAgdGVzdFJvb3QsXG4gICAgICAgICdub2RlX21vZHVsZXMnLFxuICAgICAgICAncGFyZW50LXBrZycsXG4gICAgICAgICdub2RlX21vZHVsZXMnLFxuICAgICAgICAnbmVzdGVkLXBrZycsXG4gICAgICAgICdwYWNrYWdlLmpzb24nXG4gICAgICApLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBuYW1lOiAnbmVzdGVkLXBrZycsXG4gICAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICAgIGV4cG9ydHM6IHtcbiAgICAgICAgICAnLi9zdGVwJzogJy4vc3RlcC5qcycsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKG5lc3RlZFBhY2thZ2VGaWxlLCBgZXhwb3J0IGNvbnN0IHN0ZXAgPSB0cnVlO1xcbmApO1xuXG4gICAgY29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QpO1xuICAgIGV4cGVjdChcbiAgICAgIGJ1aWxkZXIuY3JlYXRlUm91dGVJbXBvcnRTcGVjaWZpZXJQdWJsaWMoZGlyZWN0UGFja2FnZUZpbGUsIHJvdXRlRGlyKVxuICAgICkudG9CZSgnZGlyZWN0LXBrZy9zdGVwJyk7XG4gICAgZXhwZWN0KFxuICAgICAgYnVpbGRlci5jcmVhdGVSb3V0ZUltcG9ydFNwZWNpZmllclB1YmxpYyhuZXN0ZWRQYWNrYWdlRmlsZSwgcm91dGVEaXIpXG4gICAgKS50b0JlKFxuICAgICAgJy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wYXJlbnQtcGtnL25vZGVfbW9kdWxlcy9uZXN0ZWQtcGtnL3N0ZXAuanMnXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync, } from 'node:fs';
|
|
1
|
+
import { mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync, writeFileSync, } from 'node:fs';
|
|
2
2
|
import { tmpdir } from 'node:os';
|
|
3
3
|
import { dirname, join } from 'node:path';
|
|
4
4
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
@@ -14,6 +14,9 @@ class TestBuilder extends BaseBuilder {
|
|
|
14
14
|
getInputFiles() {
|
|
15
15
|
return super.getInputFiles();
|
|
16
16
|
}
|
|
17
|
+
ensureSwcIgnored() {
|
|
18
|
+
return super.ensureSwcIgnored();
|
|
19
|
+
}
|
|
17
20
|
}
|
|
18
21
|
// Resolve symlinks in tmpdir to avoid macOS /var -> /private/var issues
|
|
19
22
|
const realTmpdir = realpathSync(tmpdir());
|
|
@@ -80,6 +83,7 @@ describe('getInputFiles', () => {
|
|
|
80
83
|
writeFile(srcDir, '.workflow-data/state.ts');
|
|
81
84
|
writeFile(srcDir, '.workflow-vitest/workflows.mjs');
|
|
82
85
|
writeFile(srcDir, '.well-known/workflow/route.ts');
|
|
86
|
+
writeFile(srcDir, '.swc/cache/plugin-output.ts');
|
|
83
87
|
writeFile(srcDir, '.turbo/cache/build.ts');
|
|
84
88
|
writeFile(srcDir, '.cache/babel/plugin.js');
|
|
85
89
|
writeFile(srcDir, '.yarn/releases/yarn.cjs');
|
|
@@ -97,6 +101,7 @@ describe('getInputFiles', () => {
|
|
|
97
101
|
expect(files).not.toContain(normalize(join(srcDir, '.workflow-data/state.ts')));
|
|
98
102
|
expect(files).not.toContain(normalize(join(srcDir, '.workflow-vitest/workflows.mjs')));
|
|
99
103
|
expect(files).not.toContain(normalize(join(srcDir, '.well-known/workflow/route.ts')));
|
|
104
|
+
expect(files).not.toContain(normalize(join(srcDir, '.swc/cache/plugin-output.ts')));
|
|
100
105
|
expect(files).not.toContain(normalize(join(srcDir, '.turbo/cache/build.ts')));
|
|
101
106
|
expect(files).not.toContain(normalize(join(srcDir, '.cache/babel/plugin.js')));
|
|
102
107
|
expect(files).not.toContain(normalize(join(srcDir, '.yarn/releases/yarn.cjs')));
|
|
@@ -118,4 +123,31 @@ describe('getInputFiles', () => {
|
|
|
118
123
|
expect(files).toContain(normalize(join(srcDir, '.api/config.cjs')));
|
|
119
124
|
});
|
|
120
125
|
});
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWlucHV0LWZpbGVzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ2V0LWlucHV0LWZpbGVzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixhQUFhLEdBQ2QsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHaEQ7O0dBRUc7QUFDSCxNQUFNLFdBQVksU0FBUSxXQUFXO0lBQ25DLEtBQUssQ0FBQyxLQUFLO1FBQ1QsUUFBUTtJQUNWLENBQUM7SUFFRCxtQkFBbUI7SUFDWixhQUFhO1FBQ2xCLE9BQU8sS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQUVELHdFQUF3RTtBQUN4RSxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUUxQzs7OztHQUlHO0FBQ0gsU0FBUyxTQUFTLENBQUMsQ0FBUztJQUMxQixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxHQUFXLEVBQUUsWUFBb0IsRUFBRSxPQUFPLEdBQUcsRUFBRTtJQUNoRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3pDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUs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LFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyQyxTQUFTLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDcEMsU0FBUyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDbkMsU0FBUyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRXJDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFN0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIG1rZGlyU3luYyxcbiAgbWtkdGVtcFN5bmMsXG4gIHJlYWxwYXRoU3luYyxcbiAgcm1TeW5jLFxuICB3cml0ZUZpbGVTeW5jLFxufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBhZnRlckVhY2gsIGJlZm9yZUVhY2gsIGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSAndml0ZXN0JztcbmltcG9ydCB7IEJhc2VCdWlsZGVyIH0gZnJvbSAnLi9iYXNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFuZGFsb25lQ29uZmlnIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKlxuICogTWluaW1hbCBzdWJjbGFzcyB0byBleHBvc2UgdGhlIHByb3RlY3RlZCBgZ2V0SW5wdXRGaWxlcygpYCBmb3IgdGVzdGluZy5cbiAqL1xuY2xhc3MgVGVzdEJ1aWxkZXIgZXh0ZW5kcyBCYXNlQnVpbGRlciB7XG4gIGFzeW5jIGJ1aWxkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIG5vLW9wXG4gIH1cblxuICAvLyBFeHBvc2UgZm9yIHRlc3RzXG4gIHB1YmxpYyBnZXRJbnB1dEZpbGVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0SW5wdXRGaWxlcygpO1xuICB9XG59XG5cbi8vIFJlc29sdmUgc3ltbGlua3MgaW4gdG1wZGlyIHRvIGF2b2lkIG1hY09TIC92YXIgLT4gL3ByaXZhdGUvdmFyIGlzc3Vlc1xuY29uc3QgcmVhbFRtcGRpciA9IHJlYWxwYXRoU3luYyh0bXBkaXIoKSk7XG5cbi8qKlxuICogTm9ybWFsaXplIGEgcGF0aCB0byBmb3J3YXJkIHNsYXNoZXMgZm9yIGNyb3NzLXBsYXRmb3JtIGNvbXBhcmlzb24uXG4gKiB0aW55Z2xvYmJ5IGFsd2F5cyByZXR1cm5zIGZvcndhcmQtc2xhc2ggcGF0aHMsIGV2ZW4gb24gV2luZG93cyxcbiAqIHdoaWxlIE5vZGUncyBgcGF0aC5qb2luKClgIHVzZXMgYmFja3NsYXNoZXMgb24gV2luZG93cy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplKHA6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVGaWxlKGRpcjogc3RyaW5nLCByZWxhdGl2ZVBhdGg6IHN0cmluZywgY29udGVudCA9ICcnKTogc3RyaW5nIHtcbiAgY29uc3QgZnVsbFBhdGggPSBqb2luKGRpciwgcmVsYXRpdmVQYXRoKTtcbiAgbWtkaXJTeW5jKGRpcm5hbWUoZnVsbFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhmdWxsUGF0aCwgY29udGVudCwgJ3V0Zi04Jyk7XG4gIHJldHVybiBmdWxsUGF0aDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVpbGRlcih3b3JraW5nRGlyOiBzdHJpbmcsIGRpcnM6IHN0cmluZ1tdKTogVGVzdEJ1aWxkZXIge1xuICBjb25zdCBjb25maWc6IFN0YW5kYWxvbmVDb25maWcgPSB7XG4gICAgYnVpbGRUYXJnZXQ6ICdzdGFuZGFsb25lJyxcbiAgICB3b3JraW5nRGlyLFxuICAgIGRpcnMsXG4gICAgc3RlcHNCdW5kbGVQYXRoOiBqb2luKHdvcmtpbmdEaXIsICdzdGVwcy5qcycpLFxuICAgIHdvcmtmbG93c0J1bmRsZVBhdGg6IGpvaW4od29ya2luZ0RpciwgJ3dvcmtmbG93cy5qcycpLFxuICAgIHdlYmhvb2tCdW5kbGVQYXRoOiBqb2luKHdvcmtpbmdEaXIsICd3ZWJob29rLmpzJyksXG4gIH07XG4gIHJldHVybiBuZXcgVGVzdEJ1aWxkZXIoY29uZmlnKTtcbn1cblxuZGVzY3JpYmUoJ2dldElucHV0RmlsZXMnLCAoKSA9PiB7XG4gIGxldCB0ZXN0Um9vdDogc3RyaW5nO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHRlc3RSb290ID0gbWtkdGVtcFN5bmMoam9pbihyZWFsVG1wZGlyLCAnZ2V0LWlucHV0LWZpbGVzLScpKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBybVN5bmModGVzdFJvb3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgaXQoJ2Rpc2NvdmVycyBmaWxlcyBpbnNpZGUgZG90LXByZWZpeGVkIGRpcmVjdG9yaWVzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNyY0RpciA9IGpvaW4odGVzdFJvb3QsICdzcmMnKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnLmhpZGRlbi9zdGVwLnRzJywgXCIndXNlIHN0ZXAnO1wiKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnLmNvbmZpZy93b3JrZmxvdy50cycsIFwiJ3VzZSB3b3JrZmxvdyc7XCIpO1xuICAgIHdyaXRlRmlsZShzcmNEaXIsICdyZWd1bGFyL3N0ZXAudHMnLCBcIid1c2Ugc3RlcCc7XCIpO1xuXG4gICAgY29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QsIFsnc3JjJ10pO1xuICAgIGNvbnN0IGZpbGVzID0gKGF3YWl0IGJ1aWxkZXIuZ2V0SW5wdXRGaWxlcygpKS5tYXAobm9ybWFsaXplKTtcblxuICAgIGV4cGVjdChmaWxlcykudG9Db250YWluKG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy5oaWRkZW4vc3RlcC50cycpKSk7XG4gICAgZXhwZWN0KGZpbGVzKS50b0NvbnRhaW4obm9ybWFsaXplKGpvaW4oc3JjRGlyLCAnLmNvbmZpZy93b3JrZmxvdy50cycpKSk7XG4gICAgZXhwZWN0KGZpbGVzKS50b0NvbnRhaW4obm9ybWFsaXplKGpvaW4oc3JjRGlyLCAncmVndWxhci9zdGVwLnRzJykpKTtcbiAgfSk7XG5cbiAgaXQoJ2Rpc2NvdmVycyBkb3QtcHJlZml4ZWQgZmlsZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3JjRGlyID0gam9pbih0ZXN0Um9vdCwgJ3NyYycpO1xuICAgIHdyaXRlRmlsZShzcmNEaXIsICcuaGlkZGVuLXN0ZXAudHMnLCBcIid1c2Ugc3RlcCc7XCIpO1xuICAgIHdyaXRlRmlsZShzcmNEaXIsICd2aXNpYmxlLXN0ZXAudHMnLCBcIid1c2Ugc3RlcCc7XCIpO1xuXG4gICAgY29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QsIFsnc3JjJ10pO1xuICAgIGNvbnN0IGZpbGVzID0gKGF3YWl0IGJ1aWxkZXIuZ2V0SW5wdXRGaWxlcygpKS5tYXAobm9ybWFsaXplKTtcblxuICAgIGV4cGVjdChmaWxlcykudG9Db250YWluKG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy5oaWRkZW4tc3RlcC50cycpKSk7XG4gICAgZXhwZWN0KGZpbGVzKS50b0NvbnRhaW4obm9ybWFsaXplKGpvaW4oc3JjRGlyLCAndmlzaWJsZS1zdGVwLnRzJykpKTtcbiAgfSk7XG5cbiAgaXQoJ3N0aWxsIGV4Y2x1ZGVzIGV4cGxpY2l0bHkgaWdub3JlZCBkb3QtZGlyZWN0b3JpZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3JjRGlyID0gam9pbih0ZXN0Um9vdCwgJ3NyYycpO1xuICAgIHdyaXRlRmlsZShzcmNEaXIsICcuZ2l0L2hvb2tzL3ByZS1jb21taXQudHMnKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnLm5leHQvc2VydmVyL3BhZ2UudHMnKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnLm51eHQvd29ya2Zsb3cvc3RlcHMubWpzJyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy52ZXJjZWwvb3V0cHV0L3N0ZXAudHMnKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnLnN2ZWx0ZS1raXQvb3V0cHV0L3N0ZXAudHMnKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnLndvcmtmbG93LWRhdGEvc3RhdGUudHMnKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnLndvcmtmbG93LXZpdGVzdC93b3JrZmxvd3MubWpzJyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy53ZWxsLWtub3duL3dvcmtmbG93L3JvdXRlLnRzJyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy50dXJiby9jYWNoZS9idWlsZC50cycpO1xuICAgIHdyaXRlRmlsZShzcmNEaXIsICcuY2FjaGUvYmFiZWwvcGx1Z2luLmpzJyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy55YXJuL3JlbGVhc2VzL3lhcm4uY2pzJyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy5wbnBtLXN0b3JlL3YzL2ZpbGVzLnRzJyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJ25vZGVfbW9kdWxlcy9wa2cvaW5kZXgudHMnKTtcbiAgICAvLyBUaGlzIG9uZSBzaG91bGQgc3RpbGwgYmUgZm91bmRcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnLmN1c3RvbS9zdGVwLnRzJywgXCIndXNlIHN0ZXAnO1wiKTtcblxuICAgIGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRlc3RSb290LCBbJ3NyYyddKTtcbiAgICBjb25zdCBmaWxlcyA9IChhd2FpdCBidWlsZGVyLmdldElucHV0RmlsZXMoKSkubWFwKG5vcm1hbGl6ZSk7XG5cbiAgICBleHBlY3QoZmlsZXMpLm5vdC50b0NvbnRhaW4oXG4gICAgICBub3JtYWxpemUoam9pbihzcmNEaXIsICcuZ2l0L2hvb2tzL3ByZS1jb21taXQudHMnKSlcbiAgICApO1xuICAgIGV4cGVjdChmaWxlcykubm90LnRvQ29udGFpbihcbiAgICAgIG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy5uZXh0L3NlcnZlci9wYWdlLnRzJykpXG4gICAgKTtcbiAgICBleHBlY3QoZmlsZXMpLm5vdC50b0NvbnRhaW4oXG4gICAgICBub3JtYWxpemUoam9pbihzcmNEaXIsICcubnV4dC93b3JrZmxvdy9zdGVwcy5tanMnKSlcbiAgICApO1xuICAgIGV4cGVjdChmaWxlcykubm90LnRvQ29udGFpbihcbiAgICAgIG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy52ZXJjZWwvb3V0cHV0L3N0ZXAudHMnKSlcbiAgICApO1xuICAgIGV4cGVjdChmaWxlcykubm90LnRvQ29udGFpbihcbiAgICAgIG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy5zdmVsdGUta2l0L291dHB1dC9zdGVwLnRzJykpXG4gICAgKTtcbiAgICBleHBlY3QoZmlsZXMpLm5vdC50b0NvbnRhaW4oXG4gICAgICBub3JtYWxpemUoam9pbihzcmNEaXIsICcud29ya2Zsb3ctZGF0YS9zdGF0ZS50cycpKVxuICAgICk7XG4gICAgZXhwZWN0KGZpbGVzKS5ub3QudG9Db250YWluKFxuICAgICAgbm9ybWFsaXplKGpvaW4oc3JjRGlyLCAnLndvcmtmbG93LXZpdGVzdC93b3JrZmxvd3MubWpzJykpXG4gICAgKTtcbiAgICBleHBlY3QoZmlsZXMpLm5vdC50b0NvbnRhaW4oXG4gICAgICBub3JtYWxpemUoam9pbihzcmNEaXIsICcud2VsbC1rbm93bi93b3JrZmxvdy9yb3V0ZS50cycpKVxuICAgICk7XG4gICAgZXhwZWN0KGZpbGVzKS5ub3QudG9Db250YWluKFxuICAgICAgbm9ybWFsaXplKGpvaW4oc3JjRGlyLCAnLnR1cmJvL2NhY2hlL2J1aWxkLnRzJykpXG4gICAgKTtcbiAgICBleHBlY3QoZmlsZXMpLm5vdC50b0NvbnRhaW4oXG4gICAgICBub3JtYWxpemUoam9pbihzcmNEaXIsICcuY2FjaGUvYmFiZWwvcGx1Z2luLmpzJykpXG4gICAgKTtcbiAgICBleHBlY3QoZmlsZXMpLm5vdC50b0NvbnRhaW4oXG4gICAgICBub3JtYWxpemUoam9pbihzcmNEaXIsICcueWFybi9yZWxlYXNlcy95YXJuLmNqcycpKVxuICAgICk7XG4gICAgZXhwZWN0KGZpbGVzKS5ub3QudG9Db250YWluKFxuICAgICAgbm9ybWFsaXplKGpvaW4oc3JjRGlyLCAnLnBucG0tc3RvcmUvdjMvZmlsZXMudHMnKSlcbiAgICApO1xuICAgIGV4cGVjdChmaWxlcykubm90LnRvQ29udGFpbihcbiAgICAgIG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJ25vZGVfbW9kdWxlcy9wa2cvaW5kZXgudHMnKSlcbiAgICApO1xuICAgIGV4cGVjdChmaWxlcykudG9Db250YWluKG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy5jdXN0b20vc3RlcC50cycpKSk7XG4gIH0pO1xuXG4gIGl0KCdkaXNjb3ZlcnMgZmlsZXMgd2l0aCB2YXJpb3VzIHN1cHBvcnRlZCBleHRlbnNpb25zIGluIGRvdC1kaXJlY3RvcmllcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzcmNEaXIgPSBqb2luKHRlc3RSb290LCAnc3JjJyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy5hcGkvcm91dGUudHN4Jyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy5hcGkvaGFuZGxlci5tdHMnKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnLmFwaS91dGlscy5qcycpO1xuICAgIHdyaXRlRmlsZShzcmNEaXIsICcuYXBpL2NvbmZpZy5janMnKTtcblxuICAgIGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRlc3RSb290LCBbJ3NyYyddKTtcbiAgICBjb25zdCBmaWxlcyA9IChhd2FpdCBidWlsZGVyLmdldElucHV0RmlsZXMoKSkubWFwKG5vcm1hbGl6ZSk7XG5cbiAgICBleHBlY3QoZmlsZXMpLnRvQ29udGFpbihub3JtYWxpemUoam9pbihzcmNEaXIsICcuYXBpL3JvdXRlLnRzeCcpKSk7XG4gICAgZXhwZWN0KGZpbGVzKS50b0NvbnRhaW4obm9ybWFsaXplKGpvaW4oc3JjRGlyLCAnLmFwaS9oYW5kbGVyLm10cycpKSk7XG4gICAgZXhwZWN0KGZpbGVzKS50b0NvbnRhaW4obm9ybWFsaXplKGpvaW4oc3JjRGlyLCAnLmFwaS91dGlscy5qcycpKSk7XG4gICAgZXhwZWN0KGZpbGVzKS50b0NvbnRhaW4obm9ybWFsaXplKGpvaW4oc3JjRGlyLCAnLmFwaS9jb25maWcuY2pzJykpKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
126
|
+
describe('ensureSwcIgnored', () => {
|
|
127
|
+
let testRoot;
|
|
128
|
+
beforeEach(() => {
|
|
129
|
+
testRoot = mkdtempSync(join(realTmpdir, 'swc-gitignore-'));
|
|
130
|
+
});
|
|
131
|
+
afterEach(() => {
|
|
132
|
+
rmSync(testRoot, { recursive: true, force: true });
|
|
133
|
+
});
|
|
134
|
+
it('adds .swc to the project .gitignore once', async () => {
|
|
135
|
+
writeFile(testRoot, '.gitignore', 'node_modules\n');
|
|
136
|
+
const builder = createBuilder(testRoot, ['src']);
|
|
137
|
+
await builder.ensureSwcIgnored();
|
|
138
|
+
await builder.ensureSwcIgnored();
|
|
139
|
+
const gitignore = readFileSync(join(testRoot, '.gitignore'), 'utf-8');
|
|
140
|
+
const swcEntries = gitignore
|
|
141
|
+
.split(/\r?\n/)
|
|
142
|
+
.filter((line) => line.trim() === '/.swc');
|
|
143
|
+
expect(gitignore).toBe('node_modules\n/.swc\n');
|
|
144
|
+
expect(swcEntries).toHaveLength(1);
|
|
145
|
+
});
|
|
146
|
+
it('preserves existing .swc gitignore variants', async () => {
|
|
147
|
+
writeFile(testRoot, '.gitignore', 'node_modules\n.swc/\n');
|
|
148
|
+
const builder = createBuilder(testRoot, ['src']);
|
|
149
|
+
await builder.ensureSwcIgnored();
|
|
150
|
+
expect(readFileSync(join(testRoot, '.gitignore'), 'utf-8')).toBe('node_modules\n.swc/\n');
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWlucHV0LWZpbGVzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ2V0LWlucHV0LWZpbGVzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sYUFBYSxHQUNkLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2hEOztHQUVHO0FBQ0gsTUFBTSxXQUFZLFNBQVEsV0FBVztJQUNuQyxLQUFLLENBQUMsS0FBSztRQUNULFFBQVE7SUFDVixDQUFDO0lBRUQsbUJBQW1CO0lBQ1osYUFBYTtRQUNsQixPQUFPLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE9BQU8sS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBRUQsd0VBQXdFO0FBQ3hFLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBRTFDOzs7O0dBSUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxDQUFTO0lBQzFCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQVcsRUFBRSxZQUFvQixFQUFFLE9BQU8sR0FBRyxFQUFFO0lBQ2hFLE1BQU0sUUFBUSxHQUFHLElBQUks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QUFDLENBQUM7UUFDaEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMxRCxTQUFTLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBRTNELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRWpELE1BQU0sT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFakMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM5RCx1QkFBdUIsQ0FDeEIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBta2RpclN5bmMsXG4gIG1rZHRlbXBTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJlYWxwYXRoU3luYyxcbiAgcm1TeW5jLFxuICB3cml0ZUZpbGVTeW5jLFxufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBhZnRlckVhY2gsIGJlZm9yZUVhY2gsIGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSAndml0ZXN0JztcbmltcG9ydCB7IEJhc2VCdWlsZGVyIH0gZnJvbSAnLi9iYXNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFuZGFsb25lQ29uZmlnIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKlxuICogTWluaW1hbCBzdWJjbGFzcyB0byBleHBvc2UgdGhlIHByb3RlY3RlZCBgZ2V0SW5wdXRGaWxlcygpYCBmb3IgdGVzdGluZy5cbiAqL1xuY2xhc3MgVGVzdEJ1aWxkZXIgZXh0ZW5kcyBCYXNlQnVpbGRlciB7XG4gIGFzeW5jIGJ1aWxkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIG5vLW9wXG4gIH1cblxuICAvLyBFeHBvc2UgZm9yIHRlc3RzXG4gIHB1YmxpYyBnZXRJbnB1dEZpbGVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0SW5wdXRGaWxlcygpO1xuICB9XG5cbiAgcHVibGljIGVuc3VyZVN3Y0lnbm9yZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHN1cGVyLmVuc3VyZVN3Y0lnbm9yZWQoKTtcbiAgfVxufVxuXG4vLyBSZXNvbHZlIHN5bWxpbmtzIGluIHRtcGRpciB0byBhdm9pZCBtYWNPUyAvdmFyIC0+IC9wcml2YXRlL3ZhciBpc3N1ZXNcbmNvbnN0IHJlYWxUbXBkaXIgPSByZWFscGF0aFN5bmModG1wZGlyKCkpO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHBhdGggdG8gZm9yd2FyZCBzbGFzaGVzIGZvciBjcm9zcy1wbGF0Zm9ybSBjb21wYXJpc29uLlxuICogdGlueWdsb2JieSBhbHdheXMgcmV0dXJucyBmb3J3YXJkLXNsYXNoIHBhdGhzLCBldmVuIG9uIFdpbmRvd3MsXG4gKiB3aGlsZSBOb2RlJ3MgYHBhdGguam9pbigpYCB1c2VzIGJhY2tzbGFzaGVzIG9uIFdpbmRvd3MuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShwOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlRmlsZShkaXI6IHN0cmluZywgcmVsYXRpdmVQYXRoOiBzdHJpbmcsIGNvbnRlbnQgPSAnJyk6IHN0cmluZyB7XG4gIGNvbnN0IGZ1bGxQYXRoID0gam9pbihkaXIsIHJlbGF0aXZlUGF0aCk7XG4gIG1rZGlyU3luYyhkaXJuYW1lKGZ1bGxQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHdyaXRlRmlsZVN5bmMoZnVsbFBhdGgsIGNvbnRlbnQsICd1dGYtOCcpO1xuICByZXR1cm4gZnVsbFBhdGg7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1aWxkZXIod29ya2luZ0Rpcjogc3RyaW5nLCBkaXJzOiBzdHJpbmdbXSk6IFRlc3RCdWlsZGVyIHtcbiAgY29uc3QgY29uZmlnOiBTdGFuZGFsb25lQ29uZmlnID0ge1xuICAgIGJ1aWxkVGFyZ2V0OiAnc3RhbmRhbG9uZScsXG4gICAgd29ya2luZ0RpcixcbiAgICBkaXJzLFxuICAgIHN0ZXBzQnVuZGxlUGF0aDogam9pbih3b3JraW5nRGlyLCAnc3RlcHMuanMnKSxcbiAgICB3b3JrZmxvd3NCdW5kbGVQYXRoOiBqb2luKHdvcmtpbmdEaXIsICd3b3JrZmxvd3MuanMnKSxcbiAgICB3ZWJob29rQnVuZGxlUGF0aDogam9pbih3b3JraW5nRGlyLCAnd2ViaG9vay5qcycpLFxuICB9O1xuICByZXR1cm4gbmV3IFRlc3RCdWlsZGVyKGNvbmZpZyk7XG59XG5cbmRlc2NyaWJlKCdnZXRJbnB1dEZpbGVzJywgKCkgPT4ge1xuICBsZXQgdGVzdFJvb3Q6IHN0cmluZztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB0ZXN0Um9vdCA9IG1rZHRlbXBTeW5jKGpvaW4ocmVhbFRtcGRpciwgJ2dldC1pbnB1dC1maWxlcy0nKSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgcm1TeW5jKHRlc3RSb290LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH0pO1xuXG4gIGl0KCdkaXNjb3ZlcnMgZmlsZXMgaW5zaWRlIGRvdC1wcmVmaXhlZCBkaXJlY3RvcmllcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzcmNEaXIgPSBqb2luKHRlc3RSb290LCAnc3JjJyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy5oaWRkZW4vc3RlcC50cycsIFwiJ3VzZSBzdGVwJztcIik7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy5jb25maWcvd29ya2Zsb3cudHMnLCBcIid1c2Ugd29ya2Zsb3cnO1wiKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAncmVndWxhci9zdGVwLnRzJywgXCIndXNlIHN0ZXAnO1wiKTtcblxuICAgIGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRlc3RSb290LCBbJ3NyYyddKTtcbiAgICBjb25zdCBmaWxlcyA9IChhd2FpdCBidWlsZGVyLmdldElucHV0RmlsZXMoKSkubWFwKG5vcm1hbGl6ZSk7XG5cbiAgICBleHBlY3QoZmlsZXMpLnRvQ29udGFpbihub3JtYWxpemUoam9pbihzcmNEaXIsICcuaGlkZGVuL3N0ZXAudHMnKSkpO1xuICAgIGV4cGVjdChmaWxlcykudG9Db250YWluKG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy5jb25maWcvd29ya2Zsb3cudHMnKSkpO1xuICAgIGV4cGVjdChmaWxlcykudG9Db250YWluKG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJ3JlZ3VsYXIvc3RlcC50cycpKSk7XG4gIH0pO1xuXG4gIGl0KCdkaXNjb3ZlcnMgZG90LXByZWZpeGVkIGZpbGVzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNyY0RpciA9IGpvaW4odGVzdFJvb3QsICdzcmMnKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnLmhpZGRlbi1zdGVwLnRzJywgXCIndXNlIHN0ZXAnO1wiKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAndmlzaWJsZS1zdGVwLnRzJywgXCIndXNlIHN0ZXAnO1wiKTtcblxuICAgIGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVCdWlsZGVyKHRlc3RSb290LCBbJ3NyYyddKTtcbiAgICBjb25zdCBmaWxlcyA9IChhd2FpdCBidWlsZGVyLmdldElucHV0RmlsZXMoKSkubWFwKG5vcm1hbGl6ZSk7XG5cbiAgICBleHBlY3QoZmlsZXMpLnRvQ29udGFpbihub3JtYWxpemUoam9pbihzcmNEaXIsICcuaGlkZGVuLXN0ZXAudHMnKSkpO1xuICAgIGV4cGVjdChmaWxlcykudG9Db250YWluKG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJ3Zpc2libGUtc3RlcC50cycpKSk7XG4gIH0pO1xuXG4gIGl0KCdzdGlsbCBleGNsdWRlcyBleHBsaWNpdGx5IGlnbm9yZWQgZG90LWRpcmVjdG9yaWVzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNyY0RpciA9IGpvaW4odGVzdFJvb3QsICdzcmMnKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnLmdpdC9ob29rcy9wcmUtY29tbWl0LnRzJyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy5uZXh0L3NlcnZlci9wYWdlLnRzJyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy5udXh0L3dvcmtmbG93L3N0ZXBzLm1qcycpO1xuICAgIHdyaXRlRmlsZShzcmNEaXIsICcudmVyY2VsL291dHB1dC9zdGVwLnRzJyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy5zdmVsdGUta2l0L291dHB1dC9zdGVwLnRzJyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy53b3JrZmxvdy1kYXRhL3N0YXRlLnRzJyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy53b3JrZmxvdy12aXRlc3Qvd29ya2Zsb3dzLm1qcycpO1xuICAgIHdyaXRlRmlsZShzcmNEaXIsICcud2VsbC1rbm93bi93b3JrZmxvdy9yb3V0ZS50cycpO1xuICAgIHdyaXRlRmlsZShzcmNEaXIsICcuc3djL2NhY2hlL3BsdWdpbi1vdXRwdXQudHMnKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnLnR1cmJvL2NhY2hlL2J1aWxkLnRzJyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy5jYWNoZS9iYWJlbC9wbHVnaW4uanMnKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnLnlhcm4vcmVsZWFzZXMveWFybi5janMnKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnLnBucG0tc3RvcmUvdjMvZmlsZXMudHMnKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnbm9kZV9tb2R1bGVzL3BrZy9pbmRleC50cycpO1xuICAgIC8vIFRoaXMgb25lIHNob3VsZCBzdGlsbCBiZSBmb3VuZFxuICAgIHdyaXRlRmlsZShzcmNEaXIsICcuY3VzdG9tL3N0ZXAudHMnLCBcIid1c2Ugc3RlcCc7XCIpO1xuXG4gICAgY29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QsIFsnc3JjJ10pO1xuICAgIGNvbnN0IGZpbGVzID0gKGF3YWl0IGJ1aWxkZXIuZ2V0SW5wdXRGaWxlcygpKS5tYXAobm9ybWFsaXplKTtcblxuICAgIGV4cGVjdChmaWxlcykubm90LnRvQ29udGFpbihcbiAgICAgIG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy5naXQvaG9va3MvcHJlLWNvbW1pdC50cycpKVxuICAgICk7XG4gICAgZXhwZWN0KGZpbGVzKS5ub3QudG9Db250YWluKFxuICAgICAgbm9ybWFsaXplKGpvaW4oc3JjRGlyLCAnLm5leHQvc2VydmVyL3BhZ2UudHMnKSlcbiAgICApO1xuICAgIGV4cGVjdChmaWxlcykubm90LnRvQ29udGFpbihcbiAgICAgIG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy5udXh0L3dvcmtmbG93L3N0ZXBzLm1qcycpKVxuICAgICk7XG4gICAgZXhwZWN0KGZpbGVzKS5ub3QudG9Db250YWluKFxuICAgICAgbm9ybWFsaXplKGpvaW4oc3JjRGlyLCAnLnZlcmNlbC9vdXRwdXQvc3RlcC50cycpKVxuICAgICk7XG4gICAgZXhwZWN0KGZpbGVzKS5ub3QudG9Db250YWluKFxuICAgICAgbm9ybWFsaXplKGpvaW4oc3JjRGlyLCAnLnN2ZWx0ZS1raXQvb3V0cHV0L3N0ZXAudHMnKSlcbiAgICApO1xuICAgIGV4cGVjdChmaWxlcykubm90LnRvQ29udGFpbihcbiAgICAgIG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy53b3JrZmxvdy1kYXRhL3N0YXRlLnRzJykpXG4gICAgKTtcbiAgICBleHBlY3QoZmlsZXMpLm5vdC50b0NvbnRhaW4oXG4gICAgICBub3JtYWxpemUoam9pbihzcmNEaXIsICcud29ya2Zsb3ctdml0ZXN0L3dvcmtmbG93cy5tanMnKSlcbiAgICApO1xuICAgIGV4cGVjdChmaWxlcykubm90LnRvQ29udGFpbihcbiAgICAgIG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy53ZWxsLWtub3duL3dvcmtmbG93L3JvdXRlLnRzJykpXG4gICAgKTtcbiAgICBleHBlY3QoZmlsZXMpLm5vdC50b0NvbnRhaW4oXG4gICAgICBub3JtYWxpemUoam9pbihzcmNEaXIsICcuc3djL2NhY2hlL3BsdWdpbi1vdXRwdXQudHMnKSlcbiAgICApO1xuICAgIGV4cGVjdChmaWxlcykubm90LnRvQ29udGFpbihcbiAgICAgIG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy50dXJiby9jYWNoZS9idWlsZC50cycpKVxuICAgICk7XG4gICAgZXhwZWN0KGZpbGVzKS5ub3QudG9Db250YWluKFxuICAgICAgbm9ybWFsaXplKGpvaW4oc3JjRGlyLCAnLmNhY2hlL2JhYmVsL3BsdWdpbi5qcycpKVxuICAgICk7XG4gICAgZXhwZWN0KGZpbGVzKS5ub3QudG9Db250YWluKFxuICAgICAgbm9ybWFsaXplKGpvaW4oc3JjRGlyLCAnLnlhcm4vcmVsZWFzZXMveWFybi5janMnKSlcbiAgICApO1xuICAgIGV4cGVjdChmaWxlcykubm90LnRvQ29udGFpbihcbiAgICAgIG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy5wbnBtLXN0b3JlL3YzL2ZpbGVzLnRzJykpXG4gICAgKTtcbiAgICBleHBlY3QoZmlsZXMpLm5vdC50b0NvbnRhaW4oXG4gICAgICBub3JtYWxpemUoam9pbihzcmNEaXIsICdub2RlX21vZHVsZXMvcGtnL2luZGV4LnRzJykpXG4gICAgKTtcbiAgICBleHBlY3QoZmlsZXMpLnRvQ29udGFpbihub3JtYWxpemUoam9pbihzcmNEaXIsICcuY3VzdG9tL3N0ZXAudHMnKSkpO1xuICB9KTtcblxuICBpdCgnZGlzY292ZXJzIGZpbGVzIHdpdGggdmFyaW91cyBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBpbiBkb3QtZGlyZWN0b3JpZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3JjRGlyID0gam9pbih0ZXN0Um9vdCwgJ3NyYycpO1xuICAgIHdyaXRlRmlsZShzcmNEaXIsICcuYXBpL3JvdXRlLnRzeCcpO1xuICAgIHdyaXRlRmlsZShzcmNEaXIsICcuYXBpL2hhbmRsZXIubXRzJyk7XG4gICAgd3JpdGVGaWxlKHNyY0RpciwgJy5hcGkvdXRpbHMuanMnKTtcbiAgICB3cml0ZUZpbGUoc3JjRGlyLCAnLmFwaS9jb25maWcuY2pzJyk7XG5cbiAgICBjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCwgWydzcmMnXSk7XG4gICAgY29uc3QgZmlsZXMgPSAoYXdhaXQgYnVpbGRlci5nZXRJbnB1dEZpbGVzKCkpLm1hcChub3JtYWxpemUpO1xuXG4gICAgZXhwZWN0KGZpbGVzKS50b0NvbnRhaW4obm9ybWFsaXplKGpvaW4oc3JjRGlyLCAnLmFwaS9yb3V0ZS50c3gnKSkpO1xuICAgIGV4cGVjdChmaWxlcykudG9Db250YWluKG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy5hcGkvaGFuZGxlci5tdHMnKSkpO1xuICAgIGV4cGVjdChmaWxlcykudG9Db250YWluKG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy5hcGkvdXRpbHMuanMnKSkpO1xuICAgIGV4cGVjdChmaWxlcykudG9Db250YWluKG5vcm1hbGl6ZShqb2luKHNyY0RpciwgJy5hcGkvY29uZmlnLmNqcycpKSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdlbnN1cmVTd2NJZ25vcmVkJywgKCkgPT4ge1xuICBsZXQgdGVzdFJvb3Q6IHN0cmluZztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB0ZXN0Um9vdCA9IG1rZHRlbXBTeW5jKGpvaW4ocmVhbFRtcGRpciwgJ3N3Yy1naXRpZ25vcmUtJykpO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIHJtU3luYyh0ZXN0Um9vdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9KTtcblxuICBpdCgnYWRkcyAuc3djIHRvIHRoZSBwcm9qZWN0IC5naXRpZ25vcmUgb25jZScsIGFzeW5jICgpID0+IHtcbiAgICB3cml0ZUZpbGUodGVzdFJvb3QsICcuZ2l0aWdub3JlJywgJ25vZGVfbW9kdWxlc1xcbicpO1xuXG4gICAgY29uc3QgYnVpbGRlciA9IGNyZWF0ZUJ1aWxkZXIodGVzdFJvb3QsIFsnc3JjJ10pO1xuXG4gICAgYXdhaXQgYnVpbGRlci5lbnN1cmVTd2NJZ25vcmVkKCk7XG4gICAgYXdhaXQgYnVpbGRlci5lbnN1cmVTd2NJZ25vcmVkKCk7XG5cbiAgICBjb25zdCBnaXRpZ25vcmUgPSByZWFkRmlsZVN5bmMoam9pbih0ZXN0Um9vdCwgJy5naXRpZ25vcmUnKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3Qgc3djRW50cmllcyA9IGdpdGlnbm9yZVxuICAgICAgLnNwbGl0KC9cXHI/XFxuLylcbiAgICAgIC5maWx0ZXIoKGxpbmUpID0+IGxpbmUudHJpbSgpID09PSAnLy5zd2MnKTtcblxuICAgIGV4cGVjdChnaXRpZ25vcmUpLnRvQmUoJ25vZGVfbW9kdWxlc1xcbi8uc3djXFxuJyk7XG4gICAgZXhwZWN0KHN3Y0VudHJpZXMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgfSk7XG5cbiAgaXQoJ3ByZXNlcnZlcyBleGlzdGluZyAuc3djIGdpdGlnbm9yZSB2YXJpYW50cycsIGFzeW5jICgpID0+IHtcbiAgICB3cml0ZUZpbGUodGVzdFJvb3QsICcuZ2l0aWdub3JlJywgJ25vZGVfbW9kdWxlc1xcbi5zd2MvXFxuJyk7XG5cbiAgICBjb25zdCBidWlsZGVyID0gY3JlYXRlQnVpbGRlcih0ZXN0Um9vdCwgWydzcmMnXSk7XG5cbiAgICBhd2FpdCBidWlsZGVyLmVuc3VyZVN3Y0lnbm9yZWQoKTtcblxuICAgIGV4cGVjdChyZWFkRmlsZVN5bmMoam9pbih0ZXN0Um9vdCwgJy5naXRpZ25vcmUnKSwgJ3V0Zi04JykpLnRvQmUoXG4gICAgICAnbm9kZV9tb2R1bGVzXFxuLnN3Yy9cXG4nXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export type { WorkflowManifest } from './apply-swc-transform.js';
|
|
2
2
|
export { applySwcTransform } from './apply-swc-transform.js';
|
|
3
|
-
export { BaseBuilder } from './base-builder.js';
|
|
3
|
+
export { BaseBuilder, type DiscoveredEntries } from './base-builder.js';
|
|
4
4
|
export { createBuildQueue } from './build-queue.js';
|
|
5
|
-
export { createBaseBuilderConfig, type DecoratorOptions, type DecoratorOptionsWithConfigPath, getDecoratorOptionsForDirectory, getDecoratorOptionsForDirectoryWithConfigPath, } from './config-helpers.js';
|
|
5
|
+
export { createBaseBuilderConfig, type DecoratorOptions, type DecoratorOptionsWithConfigPath, getDecoratorOptionsForDirectory, getDecoratorOptionsForDirectoryWithConfigPath, resolveConfiguredProjectRoot, resolveProjectRoot, } from './config-helpers.js';
|
|
6
6
|
export { createStepQueueTrigger, createWorkflowEntrypointOptionsCode, createWorkflowQueueTrigger, STEP_QUEUE_TRIGGER, WORKFLOW_QUEUE_TRIGGER, } from './constants.js';
|
|
7
7
|
export { createDiscoverEntriesPlugin } from './discover-entries-esbuild-plugin.js';
|
|
8
8
|
export { clearModuleSpecifierCache, getImportPath, type ImportPathResult, type ModuleSpecifierResult, resolveModuleSpecifier, } from './module-specifier.js';
|