nango 0.39.33 → 0.40.1
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/cli.d.ts +16 -4
- package/dist/cli.js +50 -53
- package/dist/cli.js.map +1 -1
- package/dist/index.js +29 -19
- package/dist/index.js.map +1 -1
- package/dist/nango-sync.d.ts +19 -2
- package/dist/services/compile.service.d.ts +13 -6
- package/dist/services/compile.service.js +107 -39
- package/dist/services/compile.service.js.map +1 -1
- package/dist/services/compile.service.unit.test.js +17 -7
- package/dist/services/compile.service.unit.test.js.map +1 -1
- package/dist/services/config.service.d.ts +1 -1
- package/dist/services/config.service.js +2 -3
- package/dist/services/config.service.js.map +1 -1
- package/dist/services/deploy.service.d.ts +11 -2
- package/dist/services/deploy.service.js +8 -8
- package/dist/services/deploy.service.js.map +1 -1
- package/dist/services/dryrun.service.js +2 -2
- package/dist/services/dryrun.service.js.map +1 -1
- package/dist/services/model.service.d.ts +4 -1
- package/dist/services/model.service.js +13 -6
- package/dist/services/model.service.js.map +1 -1
- package/dist/services/parser.service.d.ts +1 -0
- package/dist/services/parser.service.js +15 -2
- package/dist/services/parser.service.js.map +1 -1
- package/dist/services/verification.service.d.ts +9 -2
- package/dist/services/verification.service.js +15 -16
- package/dist/services/verification.service.js.map +1 -1
- package/dist/{sync.unit.test.js → sync.unit.cli-test.js} +192 -119
- package/dist/sync.unit.cli-test.js.map +1 -0
- package/dist/templates/nango.yaml +1 -2
- package/dist/tests/helpers.d.ts +1 -0
- package/dist/tests/helpers.js +17 -0
- package/dist/tests/helpers.js.map +1 -0
- package/package.json +5 -6
- package/tsconfig.dev.json +2 -3
- package/dist/sync.unit.test.js.map +0 -1
- /package/dist/{sync.unit.test.d.ts → sync.unit.cli-test.d.ts} +0 -0
|
@@ -1,58 +1,50 @@
|
|
|
1
|
-
import { expect, describe, it,
|
|
1
|
+
import { expect, describe, it, beforeAll } from 'vitest';
|
|
2
2
|
import path from 'path';
|
|
3
|
-
import
|
|
3
|
+
import fs from 'fs';
|
|
4
4
|
import yaml from 'js-yaml';
|
|
5
5
|
import { SyncConfigType } from '@nangohq/shared';
|
|
6
6
|
import { init, generate } from './cli.js';
|
|
7
7
|
import { exampleSyncName } from './constants.js';
|
|
8
8
|
import configService from './services/config.service.js';
|
|
9
|
-
import { compileAllFiles } from './services/compile.service.js';
|
|
9
|
+
import { compileAllFiles, compileSingleFile, getFileToCompile } from './services/compile.service.js';
|
|
10
|
+
import { getNangoRootPath } from './utils.js';
|
|
10
11
|
import parserService from './services/parser.service.js';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
await copyDirectoryAndContents(sourcePath, destinationPath);
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
await fs.promises.copyFile(sourcePath, destinationPath);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
};
|
|
12
|
+
import { copyDirectoryAndContents } from './tests/helpers.js';
|
|
13
|
+
function getTestDirectory(name) {
|
|
14
|
+
const dir = `/tmp/${name}/nango-integrations/`;
|
|
15
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
16
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
17
|
+
return dir;
|
|
18
|
+
}
|
|
25
19
|
describe('generate function tests', () => {
|
|
26
|
-
const testDirectory = './nango-integrations';
|
|
27
20
|
const fixturesPath = './packages/cli/fixtures';
|
|
28
21
|
beforeAll(async () => {
|
|
29
22
|
if (!fs.existsSync('./packages/cli/dist/nango-sync.d.ts')) {
|
|
30
23
|
await fs.promises.writeFile('./packages/cli/dist/nango-sync.d.ts', '', 'utf8');
|
|
31
24
|
}
|
|
32
25
|
});
|
|
33
|
-
afterEach(async () => {
|
|
34
|
-
await fs.promises.rm(testDirectory, { recursive: true, force: true });
|
|
35
|
-
});
|
|
36
26
|
it('should init the expected files in the nango-integrations directory', async () => {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
expect(fs.existsSync(
|
|
40
|
-
expect(fs.existsSync(
|
|
27
|
+
const dir = getTestDirectory('init');
|
|
28
|
+
await init({ absolutePath: path.resolve(dir, '..'), debug: false });
|
|
29
|
+
expect(fs.existsSync(`${dir}/demo-github-integration/syncs/${exampleSyncName}.ts`)).toBe(true);
|
|
30
|
+
expect(fs.existsSync(`${dir}/.env`)).toBe(true);
|
|
31
|
+
expect(fs.existsSync(`${dir}/nango.yaml`)).toBe(true);
|
|
41
32
|
});
|
|
42
33
|
it('should not overwrite existing integration files', async () => {
|
|
43
|
-
|
|
44
|
-
await
|
|
45
|
-
await fs.promises.writeFile(`${
|
|
34
|
+
const dir = getTestDirectory('overwrite');
|
|
35
|
+
await init({ absolutePath: dir, debug: false });
|
|
36
|
+
await fs.promises.writeFile(`${dir}/${exampleSyncName}.ts`, 'dummy fake content', 'utf8');
|
|
46
37
|
const dummyContent = 'This is dummy content. Do not overwrite!';
|
|
47
|
-
const exampleFilePath = path.join(
|
|
38
|
+
const exampleFilePath = path.join(dir, `${exampleSyncName}.ts`);
|
|
48
39
|
await fs.promises.writeFile(exampleFilePath, dummyContent, 'utf8');
|
|
49
|
-
await init();
|
|
40
|
+
await init({ absolutePath: dir });
|
|
50
41
|
expect(fs.existsSync(exampleFilePath)).toBe(true);
|
|
51
42
|
const fileContentAfterInit = await fs.promises.readFile(exampleFilePath, 'utf8');
|
|
52
43
|
expect(fileContentAfterInit).toBe(dummyContent);
|
|
53
44
|
});
|
|
54
45
|
it('should generate a different sync correctly', async () => {
|
|
55
|
-
|
|
46
|
+
const dir = getTestDirectory('generate');
|
|
47
|
+
await init({ absolutePath: dir });
|
|
56
48
|
const data = {
|
|
57
49
|
integrations: {
|
|
58
50
|
'demo-github-integration': {
|
|
@@ -80,12 +72,13 @@ describe('generate function tests', () => {
|
|
|
80
72
|
}
|
|
81
73
|
};
|
|
82
74
|
const yamlData = yaml.dump(data);
|
|
83
|
-
await fs.promises.writeFile(`${
|
|
84
|
-
await generate(false,
|
|
85
|
-
expect(fs.existsSync(`${
|
|
75
|
+
await fs.promises.writeFile(`${dir}/nango.yaml`, yamlData, 'utf8');
|
|
76
|
+
await generate({ debug: false, fullPath: dir });
|
|
77
|
+
expect(fs.existsSync(`${dir}/some-other-sync.ts`)).toBe(true);
|
|
86
78
|
});
|
|
87
79
|
it('should support a single model return in v1 format', async () => {
|
|
88
|
-
|
|
80
|
+
const dir = getTestDirectory('single-model-v1');
|
|
81
|
+
await init({ absolutePath: dir });
|
|
89
82
|
const data = {
|
|
90
83
|
integrations: {
|
|
91
84
|
'demo-github-integration': {
|
|
@@ -113,20 +106,20 @@ describe('generate function tests', () => {
|
|
|
113
106
|
}
|
|
114
107
|
};
|
|
115
108
|
const yamlData = yaml.dump(data);
|
|
116
|
-
await fs.promises.writeFile(`${
|
|
117
|
-
await generate(false,
|
|
118
|
-
expect(fs.existsSync(`${
|
|
109
|
+
await fs.promises.writeFile(`${dir}/nango.yaml`, yamlData, 'utf8');
|
|
110
|
+
await generate({ debug: false, fullPath: dir });
|
|
111
|
+
expect(fs.existsSync(`${dir}/single-model-return.ts`)).toBe(true);
|
|
119
112
|
});
|
|
120
113
|
it('should support a single model return in v2 format', async () => {
|
|
121
|
-
|
|
114
|
+
const dir = getTestDirectory('single-model-v2');
|
|
115
|
+
await init({ absolutePath: dir });
|
|
122
116
|
const data = {
|
|
123
117
|
integrations: {
|
|
124
118
|
'demo-github-integration': {
|
|
125
119
|
syncs: {
|
|
126
120
|
'single-model-return': {
|
|
127
|
-
type: 'sync',
|
|
128
121
|
runs: 'every half hour',
|
|
129
|
-
endpoint: '/issues',
|
|
122
|
+
endpoint: 'GET /issues',
|
|
130
123
|
output: 'GithubIssue'
|
|
131
124
|
}
|
|
132
125
|
}
|
|
@@ -149,12 +142,13 @@ describe('generate function tests', () => {
|
|
|
149
142
|
}
|
|
150
143
|
};
|
|
151
144
|
const yamlData = yaml.dump(data);
|
|
152
|
-
await fs.promises.writeFile(`${
|
|
153
|
-
await generate(false,
|
|
154
|
-
expect(fs.existsSync(`${
|
|
145
|
+
await fs.promises.writeFile(`${dir}/nango.yaml`, yamlData, 'utf8');
|
|
146
|
+
await generate({ debug: false, fullPath: dir });
|
|
147
|
+
expect(fs.existsSync(`${dir}/demo-github-integration/syncs/single-model-return.ts`)).toBe(true);
|
|
155
148
|
});
|
|
156
149
|
it('should not create a file if endpoint is missing from a v2 config', async () => {
|
|
157
|
-
|
|
150
|
+
const dir = getTestDirectory('endpoint-missing-v2');
|
|
151
|
+
await init({ absolutePath: dir });
|
|
158
152
|
const data = {
|
|
159
153
|
integrations: {
|
|
160
154
|
'demo-github-integration': {
|
|
@@ -184,17 +178,17 @@ describe('generate function tests', () => {
|
|
|
184
178
|
}
|
|
185
179
|
};
|
|
186
180
|
const yamlData = yaml.dump(data);
|
|
187
|
-
await fs.promises.writeFile(`${
|
|
188
|
-
expect(fs.existsSync(`${
|
|
181
|
+
await fs.promises.writeFile(`${dir}/nango.yaml`, yamlData, 'utf8');
|
|
182
|
+
expect(fs.existsSync(`${dir}/demo-github-integration/syncs/single-model-return.ts`)).toBe(false);
|
|
189
183
|
});
|
|
190
184
|
it('should generate missing from a v2 config', async () => {
|
|
191
|
-
|
|
185
|
+
const dir = getTestDirectory('v2-incremental-compile');
|
|
186
|
+
await init({ absolutePath: dir });
|
|
192
187
|
const data = {
|
|
193
188
|
integrations: {
|
|
194
189
|
'demo-github-integration': {
|
|
195
190
|
syncs: {
|
|
196
191
|
'single-model-issue-output': {
|
|
197
|
-
type: 'sync',
|
|
198
192
|
runs: 'every half hour',
|
|
199
193
|
endpoint: 'GET /tickets/issue',
|
|
200
194
|
output: 'GithubIssue'
|
|
@@ -219,12 +213,13 @@ describe('generate function tests', () => {
|
|
|
219
213
|
}
|
|
220
214
|
};
|
|
221
215
|
const yamlData = yaml.dump(data);
|
|
222
|
-
await fs.promises.writeFile(`${
|
|
223
|
-
await generate(false,
|
|
224
|
-
expect(fs.existsSync(`${
|
|
216
|
+
await fs.promises.writeFile(`${dir}/nango.yaml`, yamlData, 'utf8');
|
|
217
|
+
await generate({ debug: false, fullPath: dir });
|
|
218
|
+
expect(fs.existsSync(`${dir}/demo-github-integration/syncs/single-model-issue-output.ts`)).toBe(true);
|
|
225
219
|
});
|
|
226
220
|
it('should throw an error if a model is missing an id that is actively used', async () => {
|
|
227
|
-
|
|
221
|
+
const dir = getTestDirectory('missing-id');
|
|
222
|
+
await init({ absolutePath: dir });
|
|
228
223
|
const data = {
|
|
229
224
|
integrations: {
|
|
230
225
|
'demo-github-integration': {
|
|
@@ -251,11 +246,12 @@ describe('generate function tests', () => {
|
|
|
251
246
|
}
|
|
252
247
|
};
|
|
253
248
|
const yamlData = yaml.dump(data);
|
|
254
|
-
await fs.promises.writeFile(`${
|
|
255
|
-
await expect(generate(false,
|
|
249
|
+
await fs.promises.writeFile(`${dir}/nango.yaml`, yamlData, 'utf8');
|
|
250
|
+
await expect(generate({ debug: false, fullPath: dir })).rejects.toThrow(`Model "GithubIssue" doesn't have an id field. This is required to be able to uniquely identify the data record.`);
|
|
256
251
|
});
|
|
257
|
-
it('should allow models to end
|
|
258
|
-
|
|
252
|
+
it('should allow models to end with an "s"', async () => {
|
|
253
|
+
const dir = getTestDirectory('model-with-an-s');
|
|
254
|
+
await init({ absolutePath: dir });
|
|
259
255
|
const data = {
|
|
260
256
|
integrations: {
|
|
261
257
|
'demo-github-integration': {
|
|
@@ -283,13 +279,14 @@ describe('generate function tests', () => {
|
|
|
283
279
|
}
|
|
284
280
|
};
|
|
285
281
|
const yamlData = yaml.dump(data);
|
|
286
|
-
await fs.promises.writeFile(`${
|
|
287
|
-
await generate(false,
|
|
288
|
-
const modelsFile = await fs.promises.readFile(`${
|
|
282
|
+
await fs.promises.writeFile(`${dir}/nango.yaml`, yamlData, 'utf8');
|
|
283
|
+
await generate({ debug: false, fullPath: dir });
|
|
284
|
+
const modelsFile = await fs.promises.readFile(`${dir}/models.ts`, 'utf8');
|
|
289
285
|
expect(modelsFile).toContain('export interface GithubIssues');
|
|
290
286
|
});
|
|
291
287
|
it('should not throw an error if a model is missing an id for an action', async () => {
|
|
292
|
-
|
|
288
|
+
const dir = getTestDirectory('missing-id-action');
|
|
289
|
+
await init({ absolutePath: dir });
|
|
293
290
|
const data = {
|
|
294
291
|
integrations: {
|
|
295
292
|
'demo-github-integration': {
|
|
@@ -315,11 +312,12 @@ describe('generate function tests', () => {
|
|
|
315
312
|
}
|
|
316
313
|
};
|
|
317
314
|
const yamlData = yaml.dump(data);
|
|
318
|
-
await fs.promises.writeFile(`${
|
|
319
|
-
await generate(false,
|
|
315
|
+
await fs.promises.writeFile(`${dir}/nango.yaml`, yamlData, 'utf8');
|
|
316
|
+
await generate({ debug: false, fullPath: dir });
|
|
320
317
|
});
|
|
321
318
|
it('should allow javascript primitives as a return type with no model', async () => {
|
|
322
|
-
|
|
319
|
+
const dir = getTestDirectory('model-returns-primitives');
|
|
320
|
+
await init({ absolutePath: dir });
|
|
323
321
|
const data = {
|
|
324
322
|
integrations: {
|
|
325
323
|
'demo-github-integration': {
|
|
@@ -335,11 +333,12 @@ describe('generate function tests', () => {
|
|
|
335
333
|
}
|
|
336
334
|
};
|
|
337
335
|
const yamlData = yaml.dump(data);
|
|
338
|
-
await fs.promises.writeFile(`${
|
|
339
|
-
await generate(false,
|
|
336
|
+
await fs.promises.writeFile(`${dir}/nango.yaml`, yamlData, 'utf8');
|
|
337
|
+
await generate({ debug: false, fullPath: dir });
|
|
340
338
|
});
|
|
341
339
|
it('should catch non javascript primitives in the config', async () => {
|
|
342
|
-
|
|
340
|
+
const dir = getTestDirectory('model-returns-invalid-primitives');
|
|
341
|
+
await init({ absolutePath: dir });
|
|
343
342
|
const data = {
|
|
344
343
|
integrations: {
|
|
345
344
|
'demo-github-integration': {
|
|
@@ -355,8 +354,8 @@ describe('generate function tests', () => {
|
|
|
355
354
|
}
|
|
356
355
|
};
|
|
357
356
|
const yamlData = yaml.dump(data);
|
|
358
|
-
await fs.promises.writeFile(`${
|
|
359
|
-
expect(await generate(false,
|
|
357
|
+
await fs.promises.writeFile(`${dir}/nango.yaml`, yamlData, 'utf8');
|
|
358
|
+
expect(await generate({ debug: false, fullPath: dir })).toBeUndefined();
|
|
360
359
|
});
|
|
361
360
|
it('should not complain of try catch not being awaited', () => {
|
|
362
361
|
const awaiting = parserService.callsAreUsedCorrectly(`${fixturesPath}/sync.ts`, SyncConfigType.SYNC, ['GithubIssue']);
|
|
@@ -404,14 +403,16 @@ describe('generate function tests', () => {
|
|
|
404
403
|
expect(config).toMatchSnapshot();
|
|
405
404
|
});
|
|
406
405
|
it('v1 - should complain about commas at the end of declared types', async () => {
|
|
407
|
-
|
|
408
|
-
await
|
|
409
|
-
|
|
406
|
+
const dir = getTestDirectory('v1-no-commas');
|
|
407
|
+
await init({ absolutePath: dir });
|
|
408
|
+
await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v1/no-commas/nango.yaml`, `${dir}/nango.yaml`);
|
|
409
|
+
await expect(generate({ debug: false, fullPath: dir })).rejects.toThrow(`Field "integer," in the model GithubIssue ends with a comma or semicolon which is not allowed.`);
|
|
410
410
|
});
|
|
411
411
|
it('v1 - should complain about semi colons at the end of declared types', async () => {
|
|
412
|
-
|
|
413
|
-
await
|
|
414
|
-
|
|
412
|
+
const dir = getTestDirectory('v1-no-semi-colons');
|
|
413
|
+
await init({ absolutePath: dir });
|
|
414
|
+
await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v1/no-semi-colons/nango.yaml`, `${dir}/nango.yaml`);
|
|
415
|
+
await expect(generate({ debug: false, fullPath: dir })).rejects.toThrow(`Field "integer;" in the model GithubIssue ends with a comma or semicolon which is not allowed.`);
|
|
415
416
|
});
|
|
416
417
|
it('should parse a nango.yaml file that is version 2 as expected', async () => {
|
|
417
418
|
const { response: config } = await configService.load(path.resolve(__dirname, `../fixtures/nango-yaml/v2/valid`));
|
|
@@ -422,7 +423,7 @@ describe('generate function tests', () => {
|
|
|
422
423
|
const { response: config, error } = await configService.load(path.resolve(__dirname, `../fixtures/nango-yaml/v2/invalid.1`));
|
|
423
424
|
expect(config).toBeNull();
|
|
424
425
|
expect(error).toBeDefined();
|
|
425
|
-
expect(error?.message).
|
|
426
|
+
expect(error?.message).toMatchSnapshot();
|
|
426
427
|
});
|
|
427
428
|
it('should throw a validation error on a nango.yaml file that is not formatted correctly -- webhook subscriptions are not allowed in an action', async () => {
|
|
428
429
|
const { response: config, error } = await configService.load(path.resolve(__dirname, `../fixtures/nango-yaml/v2/invalid.2`));
|
|
@@ -431,32 +432,36 @@ describe('generate function tests', () => {
|
|
|
431
432
|
expect(error?.message).toEqual('Problem validating the nango.yaml file.');
|
|
432
433
|
});
|
|
433
434
|
it('should correctly interpret a string union literal type', async () => {
|
|
434
|
-
|
|
435
|
-
await
|
|
436
|
-
|
|
437
|
-
|
|
435
|
+
const dir = getTestDirectory('validation-string-union');
|
|
436
|
+
await init({ absolutePath: dir });
|
|
437
|
+
await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/string-literal/nango.yaml`, `${dir}/nango.yaml`);
|
|
438
|
+
await expect(generate({ debug: false, fullPath: dir })).resolves.toBeUndefined();
|
|
439
|
+
const modelsFile = await fs.promises.readFile(`${dir}/models.ts`, 'utf8');
|
|
438
440
|
expect(modelsFile).toContain(`gender: 'male' | 'female';`);
|
|
439
441
|
});
|
|
440
442
|
it('should correctly interpret a union literal type with a string and a primitive', async () => {
|
|
441
|
-
|
|
442
|
-
await
|
|
443
|
-
|
|
444
|
-
|
|
443
|
+
const dir = getTestDirectory('validation-string-primitve');
|
|
444
|
+
await init({ absolutePath: dir });
|
|
445
|
+
await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/mixed-literal/nango.yaml`, `${dir}/nango.yaml`);
|
|
446
|
+
await expect(generate({ debug: false, fullPath: dir })).resolves.toBeUndefined();
|
|
447
|
+
const modelsFile = await fs.promises.readFile(`${dir}/models.ts`, 'utf8');
|
|
445
448
|
expect(modelsFile).toContain(`gender: 'male' | null;`);
|
|
446
449
|
});
|
|
447
450
|
it('should correctly interpret a union literal type with a string and a model', async () => {
|
|
448
|
-
|
|
449
|
-
await
|
|
450
|
-
|
|
451
|
-
|
|
451
|
+
const dir = getTestDirectory('validation-string-model');
|
|
452
|
+
await init({ absolutePath: dir });
|
|
453
|
+
await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/mixed-literal-model/nango.yaml`, `${dir}/nango.yaml`);
|
|
454
|
+
await expect(generate({ debug: false, fullPath: dir })).resolves.toBeUndefined();
|
|
455
|
+
const modelsFile = await fs.promises.readFile(`${dir}/models.ts`, 'utf8');
|
|
452
456
|
expect(modelsFile).toContain(`gender: 'male' | Other`);
|
|
453
457
|
expect(modelsFile).toContain(`user: User | Account`);
|
|
454
458
|
});
|
|
455
459
|
it('should correctly interpret a union types, array types, and record types', async () => {
|
|
456
|
-
|
|
457
|
-
await
|
|
458
|
-
|
|
459
|
-
|
|
460
|
+
const dir = getTestDirectory('validation-array-records');
|
|
461
|
+
await init({ absolutePath: dir });
|
|
462
|
+
await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/mixed-types/nango.yaml`, `${dir}/nango.yaml`);
|
|
463
|
+
await expect(generate({ debug: false, fullPath: dir })).resolves.toBeUndefined();
|
|
464
|
+
const modelsFile = await fs.promises.readFile(`${dir}/models.ts`, 'utf8');
|
|
460
465
|
expect(modelsFile).toContain(`record: Record<string, string>;`);
|
|
461
466
|
expect(modelsFile).toContain(`und: string | null | undefined;`);
|
|
462
467
|
expect(modelsFile).toContain(`def: 'male' | string | null | undefined;`);
|
|
@@ -464,40 +469,108 @@ describe('generate function tests', () => {
|
|
|
464
469
|
expect(modelsFile).toContain(`nullableDate: Date | null;`);
|
|
465
470
|
});
|
|
466
471
|
it('should correctly interpret a union type with an array model', async () => {
|
|
467
|
-
|
|
468
|
-
await
|
|
469
|
-
|
|
470
|
-
|
|
472
|
+
const dir = getTestDirectory('validation-array-model');
|
|
473
|
+
await init({ absolutePath: dir });
|
|
474
|
+
await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/model-array-types/nango.yaml`, `${dir}/nango.yaml`);
|
|
475
|
+
await expect(generate({ debug: false, fullPath: dir })).resolves.toBeUndefined();
|
|
476
|
+
const modelsFile = await fs.promises.readFile(`${dir}/models.ts`, 'utf8');
|
|
471
477
|
expect(modelsFile).not.toContain(`'Other[]' | null | undefined;`);
|
|
472
478
|
expect(modelsFile).toContain(`Other[] | null | undefined;`);
|
|
473
479
|
});
|
|
474
480
|
it('should be able to compile files in nested directories', async () => {
|
|
475
|
-
|
|
476
|
-
await
|
|
477
|
-
await copyDirectoryAndContents(`${fixturesPath}/nango-yaml/v2/nested-integrations/hubspot`,
|
|
478
|
-
await copyDirectoryAndContents(`${fixturesPath}/nango-yaml/v2/nested-integrations/github`,
|
|
479
|
-
await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/nested-integrations/nango.yaml`,
|
|
480
|
-
const success = await compileAllFiles({ debug: true });
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
await fs.promises.rm('./models.ts', { force: true });
|
|
481
|
+
const dir = getTestDirectory('nested');
|
|
482
|
+
await init({ absolutePath: dir });
|
|
483
|
+
await copyDirectoryAndContents(`${fixturesPath}/nango-yaml/v2/nested-integrations/hubspot`, `${dir}/hubspot`);
|
|
484
|
+
await copyDirectoryAndContents(`${fixturesPath}/nango-yaml/v2/nested-integrations/github`, `${dir}/github`);
|
|
485
|
+
await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/nested-integrations/nango.yaml`, `${dir}/nango.yaml`);
|
|
486
|
+
const success = await compileAllFiles({ fullPath: dir, debug: true });
|
|
487
|
+
expect(fs.existsSync(path.join(dir, 'models.ts'))).toBe(true);
|
|
488
|
+
expect(fs.existsSync(path.join(dir, 'hubspot/syncs/contacts.ts'))).toBe(true);
|
|
489
|
+
expect(fs.existsSync(path.join(dir, 'dist/contacts-hubspot.js'))).toBe(true);
|
|
490
|
+
expect(fs.existsSync(path.join(dir, 'dist/issues-github.js'))).toBe(true);
|
|
486
491
|
expect(success).toBe(true);
|
|
487
492
|
});
|
|
488
493
|
it('should be backwards compatible with the single directory for integration files', async () => {
|
|
489
|
-
|
|
490
|
-
await
|
|
491
|
-
await copyDirectoryAndContents(`${fixturesPath}/nango-yaml/v2/non-nested-integrations`,
|
|
492
|
-
const success = await compileAllFiles({ debug:
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
494
|
+
const dir = getTestDirectory('old-directory');
|
|
495
|
+
await init({ absolutePath: dir });
|
|
496
|
+
await copyDirectoryAndContents(`${fixturesPath}/nango-yaml/v2/non-nested-integrations`, dir);
|
|
497
|
+
const success = await compileAllFiles({ fullPath: dir, debug: false });
|
|
498
|
+
expect(fs.existsSync(path.join(dir, 'models.ts'))).toBe(true);
|
|
499
|
+
expect(fs.existsSync(path.join(dir, 'contacts.ts'))).toBe(true);
|
|
500
|
+
expect(fs.existsSync(path.join(dir, 'dist/contacts-hubspot.js'))).toBe(true);
|
|
501
|
+
expect(success).toBe(true);
|
|
502
|
+
});
|
|
503
|
+
it('should be able to compile and run imported files', async () => {
|
|
504
|
+
const dir = getTestDirectory('relative-imports');
|
|
505
|
+
await init({ absolutePath: dir });
|
|
506
|
+
await copyDirectoryAndContents(`${fixturesPath}/nango-yaml/v2/relative-imports/github`, `${dir}/github`);
|
|
507
|
+
await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/relative-imports/nango.yaml`, `${dir}/nango.yaml`);
|
|
508
|
+
const success = await compileAllFiles({ fullPath: dir, debug: false });
|
|
509
|
+
const module = await import(`${dir}dist/issues-github.js`);
|
|
510
|
+
const result = module.default.default();
|
|
511
|
+
expect(result).toBe('Hello, world!');
|
|
500
512
|
expect(success).toBe(true);
|
|
501
513
|
});
|
|
514
|
+
it('should compile helper functions and throw an error if there is a complication error with an imported file', async () => {
|
|
515
|
+
const name = 'relative-imports-with-error';
|
|
516
|
+
const dir = getTestDirectory('relative-imports-with-error');
|
|
517
|
+
await init({ absolutePath: dir });
|
|
518
|
+
await copyDirectoryAndContents(`${fixturesPath}/nango-yaml/v2/${name}/github`, `${dir}/github`);
|
|
519
|
+
await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/${name}/nango.yaml`, `${dir}/nango.yaml`);
|
|
520
|
+
const tsconfig = fs.readFileSync(`${getNangoRootPath()}/tsconfig.dev.json`, 'utf8');
|
|
521
|
+
const { response: config } = await configService.load(path.resolve(`${fixturesPath}/nango-yaml/v2/${name}`));
|
|
522
|
+
expect(config).not.toBeNull();
|
|
523
|
+
const modelNames = configService.getModelNames(config);
|
|
524
|
+
const result = await compileSingleFile({
|
|
525
|
+
fullPath: dir,
|
|
526
|
+
file: getFileToCompile({ fullPath: dir, filePath: path.join(dir, './github/actions/gh-issues.ts') }),
|
|
527
|
+
tsconfig,
|
|
528
|
+
config: config,
|
|
529
|
+
modelNames,
|
|
530
|
+
debug: false
|
|
531
|
+
});
|
|
532
|
+
expect(result).toBe(false);
|
|
533
|
+
});
|
|
534
|
+
it('should complain if a nango call is used incorrectly in a nested file', async () => {
|
|
535
|
+
const name = 'relative-imports-with-nango-misuse';
|
|
536
|
+
const dir = getTestDirectory('relative-imports-with-nango-misuse');
|
|
537
|
+
await init({ absolutePath: dir });
|
|
538
|
+
await copyDirectoryAndContents(`${fixturesPath}/nango-yaml/v2/${name}/github`, `${dir}/github`);
|
|
539
|
+
await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/${name}/nango.yaml`, `${dir}/nango.yaml`);
|
|
540
|
+
const tsconfig = fs.readFileSync(`${getNangoRootPath()}/tsconfig.dev.json`, 'utf8');
|
|
541
|
+
const { response: config } = await configService.load(path.resolve(`${fixturesPath}/nango-yaml/v2/${name}`));
|
|
542
|
+
expect(config).not.toBeNull();
|
|
543
|
+
const modelNames = configService.getModelNames(config);
|
|
544
|
+
const result = await compileSingleFile({
|
|
545
|
+
fullPath: dir,
|
|
546
|
+
file: getFileToCompile({ fullPath: dir, filePath: path.join(dir, './github/actions/gh-issues.ts') }),
|
|
547
|
+
tsconfig,
|
|
548
|
+
config: config,
|
|
549
|
+
modelNames,
|
|
550
|
+
debug: false
|
|
551
|
+
});
|
|
552
|
+
expect(result).toBe(false);
|
|
553
|
+
});
|
|
554
|
+
it('should not allow imports higher than the current directory', async () => {
|
|
555
|
+
const name = 'relative-imports-with-higher-import';
|
|
556
|
+
const dir = getTestDirectory('relative-imports-with-higher-import');
|
|
557
|
+
await init({ absolutePath: dir });
|
|
558
|
+
await copyDirectoryAndContents(`${fixturesPath}/nango-yaml/v2/${name}/github`, `${dir}/github`);
|
|
559
|
+
await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/${name}/nango.yaml`, `${dir}/nango.yaml`);
|
|
560
|
+
await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/${name}/github/actions/welcomer.ts`, `${dir}/welcomer.ts`);
|
|
561
|
+
const tsconfig = fs.readFileSync(`${getNangoRootPath()}/tsconfig.dev.json`, 'utf8');
|
|
562
|
+
const { response: config } = await configService.load(path.resolve(`${fixturesPath}/nango-yaml/v2/${name}`));
|
|
563
|
+
expect(config).not.toBeNull();
|
|
564
|
+
const modelNames = configService.getModelNames(config);
|
|
565
|
+
const result = await compileSingleFile({
|
|
566
|
+
fullPath: dir,
|
|
567
|
+
file: getFileToCompile({ fullPath: dir, filePath: path.join(dir, './github/actions/gh-issues.ts') }),
|
|
568
|
+
tsconfig,
|
|
569
|
+
config: config,
|
|
570
|
+
modelNames,
|
|
571
|
+
debug: false
|
|
572
|
+
});
|
|
573
|
+
expect(result).toBe(false);
|
|
574
|
+
});
|
|
502
575
|
});
|
|
503
|
-
//# sourceMappingURL=sync.unit.test.js.map
|
|
576
|
+
//# sourceMappingURL=sync.unit.cli-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.unit.cli-test.js","sourceRoot":"","sources":["../lib/sync.unit.cli-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,aAAa,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,aAAa,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,SAAS,gBAAgB,CAAC,IAAY;IAClC,MAAM,GAAG,GAAG,QAAQ,IAAI,sBAAsB,CAAC;IAC/C,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,OAAO,GAAG,CAAC;AACf,CAAC;AACD,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACrC,MAAM,YAAY,GAAG,yBAAyB,CAAC;IAE/C,SAAS,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,qCAAqC,CAAC,EAAE,CAAC;YACxD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,qCAAqC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QACnF,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,kCAAkC,eAAe,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/F,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,GAAG,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,IAAI,eAAe,KAAK,EAAE,oBAAoB,EAAE,MAAM,CAAC,CAAC;QAE1F,MAAM,YAAY,GAAG,0CAA0C,CAAC;QAChE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,KAAK,CAAC,CAAC;QAChE,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAEnE,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,oBAAoB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACjF,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,GAAG,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG;YACT,YAAY,EAAE;gBACV,yBAAyB,EAAE;oBACvB,iBAAiB,EAAE;wBACf,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,iBAAiB;wBACvB,OAAO,EAAE,CAAC,aAAa,CAAC;qBAC3B;iBACJ;aACJ;YACD,MAAM,EAAE;gBACJ,WAAW,EAAE;oBACT,EAAE,EAAE,SAAS;oBACb,KAAK,EAAE,QAAQ;oBACf,IAAI,EAAE,QAAQ;oBACd,YAAY,EAAE,QAAQ;oBACtB,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,QAAQ;oBACnB,KAAK,EAAE,QAAQ;oBACf,YAAY,EAAE,MAAM;oBACpB,kBAAkB,EAAE,MAAM;oBAC1B,IAAI,EAAE,QAAQ;iBACjB;aACJ;SACJ,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,GAAG,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG;YACT,YAAY,EAAE;gBACV,yBAAyB,EAAE;oBACvB,qBAAqB,EAAE;wBACnB,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,iBAAiB;wBACvB,OAAO,EAAE,aAAa;qBACzB;iBACJ;aACJ;YACD,MAAM,EAAE;gBACJ,WAAW,EAAE;oBACT,EAAE,EAAE,SAAS;oBACb,KAAK,EAAE,QAAQ;oBACf,IAAI,EAAE,QAAQ;oBACd,YAAY,EAAE,QAAQ;oBACtB,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,QAAQ;oBACnB,KAAK,EAAE,QAAQ;oBACf,YAAY,EAAE,MAAM;oBACpB,kBAAkB,EAAE,MAAM;oBAC1B,IAAI,EAAE,QAAQ;iBACjB;aACJ;SACJ,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,GAAG,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG;YACT,YAAY,EAAE;gBACV,yBAAyB,EAAE;oBACvB,KAAK,EAAE;wBACH,qBAAqB,EAAE;4BACnB,IAAI,EAAE,iBAAiB;4BACvB,QAAQ,EAAE,aAAa;4BACvB,MAAM,EAAE,aAAa;yBACxB;qBACJ;iBACJ;aACJ;YACD,MAAM,EAAE;gBACJ,WAAW,EAAE;oBACT,EAAE,EAAE,SAAS;oBACb,KAAK,EAAE,QAAQ;oBACf,IAAI,EAAE,QAAQ;oBACd,YAAY,EAAE,QAAQ;oBACtB,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,QAAQ;oBACnB,KAAK,EAAE,QAAQ;oBACf,YAAY,EAAE,MAAM;oBACpB,kBAAkB,EAAE,MAAM;oBAC1B,IAAI,EAAE,QAAQ;iBACjB;aACJ;SACJ,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,uDAAuD,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,GAAG,GAAG,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;QACpD,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG;YACT,YAAY,EAAE;gBACV,yBAAyB,EAAE;oBACvB,KAAK,EAAE;wBACH,qBAAqB,EAAE;4BACnB,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,iBAAiB;4BACvB,OAAO,EAAE,aAAa;yBACzB;qBACJ;iBACJ;aACJ;YACD,MAAM,EAAE;gBACJ,WAAW,EAAE;oBACT,EAAE,EAAE,SAAS;oBACb,KAAK,EAAE,QAAQ;oBACf,IAAI,EAAE,QAAQ;oBACd,YAAY,EAAE,QAAQ;oBACtB,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,QAAQ;oBACnB,KAAK,EAAE,QAAQ;oBACf,YAAY,EAAE,MAAM;oBACpB,kBAAkB,EAAE,MAAM;oBAC1B,IAAI,EAAE,QAAQ;iBACjB;aACJ;SACJ,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,uDAAuD,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,GAAG,GAAG,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG;YACT,YAAY,EAAE;gBACV,yBAAyB,EAAE;oBACvB,KAAK,EAAE;wBACH,2BAA2B,EAAE;4BACzB,IAAI,EAAE,iBAAiB;4BACvB,QAAQ,EAAE,oBAAoB;4BAC9B,MAAM,EAAE,aAAa;yBACxB;qBACJ;iBACJ;aACJ;YACD,MAAM,EAAE;gBACJ,WAAW,EAAE;oBACT,EAAE,EAAE,SAAS;oBACb,KAAK,EAAE,QAAQ;oBACf,IAAI,EAAE,QAAQ;oBACd,YAAY,EAAE,QAAQ;oBACtB,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,QAAQ;oBACnB,KAAK,EAAE,QAAQ;oBACf,YAAY,EAAE,MAAM;oBACpB,kBAAkB,EAAE,MAAM;oBAC1B,IAAI,EAAE,QAAQ;iBACjB;aACJ;SACJ,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,6DAA6D,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,GAAG,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG;YACT,YAAY,EAAE;gBACV,yBAAyB,EAAE;oBACvB,qBAAqB,EAAE;wBACnB,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,iBAAiB;wBACvB,OAAO,EAAE,aAAa;qBACzB;iBACJ;aACJ;YACD,MAAM,EAAE;gBACJ,WAAW,EAAE;oBACT,KAAK,EAAE,QAAQ;oBACf,IAAI,EAAE,QAAQ;oBACd,YAAY,EAAE,QAAQ;oBACtB,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,QAAQ;oBACnB,KAAK,EAAE,QAAQ;oBACf,YAAY,EAAE,MAAM;oBACpB,kBAAkB,EAAE,MAAM;oBAC1B,IAAI,EAAE,QAAQ;iBACjB;aACJ;SACJ,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACnE,iHAAiH,CACpH,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,GAAG,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG;YACT,YAAY,EAAE;gBACV,yBAAyB,EAAE;oBACvB,qBAAqB,EAAE;wBACnB,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,iBAAiB;wBACvB,OAAO,EAAE,cAAc;qBAC1B;iBACJ;aACJ;YACD,MAAM,EAAE;gBACJ,YAAY,EAAE;oBACV,EAAE,EAAE,QAAQ;oBACZ,KAAK,EAAE,QAAQ;oBACf,IAAI,EAAE,QAAQ;oBACd,YAAY,EAAE,QAAQ;oBACtB,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,QAAQ;oBACnB,KAAK,EAAE,QAAQ;oBACf,YAAY,EAAE,MAAM;oBACpB,kBAAkB,EAAE,MAAM;oBAC1B,IAAI,EAAE,QAAQ;iBACjB;aACJ;SACJ,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC;QAC1E,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,GAAG,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG;YACT,YAAY,EAAE;gBACV,yBAAyB,EAAE;oBACvB,qBAAqB,EAAE;wBACnB,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,aAAa;qBACzB;iBACJ;aACJ;YACD,MAAM,EAAE;gBACJ,WAAW,EAAE;oBACT,KAAK,EAAE,QAAQ;oBACf,IAAI,EAAE,QAAQ;oBACd,YAAY,EAAE,QAAQ;oBACtB,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,QAAQ;oBACnB,KAAK,EAAE,QAAQ;oBACf,YAAY,EAAE,MAAM;oBACpB,kBAAkB,EAAE,MAAM;oBAC1B,IAAI,EAAE,QAAQ;iBACjB;aACJ;SACJ,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,GAAG,GAAG,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG;YACT,YAAY,EAAE;gBACV,yBAAyB,EAAE;oBACvB,qBAAqB,EAAE;wBACnB,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,QAAQ;qBACpB;oBACD,4BAA4B,EAAE;wBAC1B,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,QAAQ;qBACpB;iBACJ;aACJ;SACJ,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,GAAG,GAAG,gBAAgB,CAAC,kCAAkC,CAAC,CAAC;QACjE,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG;YACT,YAAY,EAAE;gBACV,yBAAyB,EAAE;oBACvB,qBAAqB,EAAE;wBACnB,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,QAAQ;qBACpB;oBACD,4BAA4B,EAAE;wBAC1B,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,SAAS;qBACrB;iBACJ;aACJ;SACJ,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC1D,MAAM,QAAQ,GAAG,aAAa,CAAC,qBAAqB,CAAC,GAAG,YAAY,UAAU,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QACtH,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACvD,MAAM,YAAY,GAAG,aAAa,CAAC,qBAAqB,CAAC,GAAG,YAAY,iBAAiB,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QACjI,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QACxF,MAAM,YAAY,GAAG,aAAa,CAAC,qBAAqB,CAAC,GAAG,YAAY,sBAAsB,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QACtI,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAChF,MAAM,YAAY,GAAG,aAAa,CAAC,qBAAqB,CAAC,GAAG,YAAY,wBAAwB,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC3I,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC5D,MAAM,QAAQ,GAAG,aAAa,CAAC,qBAAqB,CAAC,GAAG,YAAY,kBAAkB,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QAC9H,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACjD,MAAM,aAAa,GAAG,aAAa,CAAC,qBAAqB,CAAC,GAAG,YAAY,eAAe,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;QACjI,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC5E,MAAM,QAAQ,GAAG,aAAa,CAAC,qBAAqB,CAAC,GAAG,YAAY,qBAAqB,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QACjI,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAChD,MAAM,QAAQ,GAAG,aAAa,CAAC,qBAAqB,CAAC,GAAG,YAAY,eAAe,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QAC3H,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC1D,MAAM,aAAa,GAAG,aAAa,CAAC,qBAAqB,CAAC,GAAG,YAAY,kBAAkB,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QACnI,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC3D,MAAM,aAAa,GAAG,aAAa,CAAC,qBAAqB,CAAC,GAAG,YAAY,mBAAmB,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QACpI,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC,CAAC;QAClH,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,GAAG,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY,qCAAqC,EAAE,GAAG,GAAG,aAAa,CAAC,CAAC;QACtG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACnE,gGAAgG,CACnG,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,GAAG,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY,0CAA0C,EAAE,GAAG,GAAG,aAAa,CAAC,CAAC;QAC3G,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACnE,gGAAgG,CACnG,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC,CAAC;QAClH,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0GAA0G,EAAE,KAAK,IAAI,EAAE;QACtH,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,qCAAqC,CAAC,CAAC,CAAC;QAC7H,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4IAA4I,EAAE,KAAK,IAAI,EAAE;QACxJ,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,qCAAqC,CAAC,CAAC,CAAC;QAC7H,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,GAAG,GAAG,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY,0CAA0C,EAAE,GAAG,GAAG,aAAa,CAAC,CAAC;QAC3G,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QACjF,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC;QAC1E,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC3F,MAAM,GAAG,GAAG,gBAAgB,CAAC,4BAA4B,CAAC,CAAC;QAC3D,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY,yCAAyC,EAAE,GAAG,GAAG,aAAa,CAAC,CAAC;QAC1G,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QACjF,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC;QAC1E,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,GAAG,GAAG,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY,+CAA+C,EAAE,GAAG,GAAG,aAAa,CAAC,CAAC;QAChH,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QACjF,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC;QAC1E,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACvD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,GAAG,GAAG,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY,uCAAuC,EAAE,GAAG,GAAG,aAAa,CAAC,CAAC;QACxG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QACjF,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC;QAC1E,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAChE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAChE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC;QACzE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACpD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,GAAG,GAAG,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY,6CAA6C,EAAE,GAAG,GAAG,aAAa,CAAC,CAAC;QAC9G,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QACjF,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC;QAC1E,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAClE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,wBAAwB,CAAC,GAAG,YAAY,4CAA4C,EAAE,GAAG,GAAG,UAAU,CAAC,CAAC;QAC9G,MAAM,wBAAwB,CAAC,GAAG,YAAY,2CAA2C,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC;QAC5G,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY,+CAA+C,EAAE,GAAG,GAAG,aAAa,CAAC,CAAC;QAEhH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtE,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9E,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1E,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,GAAG,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,wBAAwB,CAAC,GAAG,YAAY,wCAAwC,EAAE,GAAG,CAAC,CAAC;QAE7F,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAEvE,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,GAAG,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,wBAAwB,CAAC,GAAG,YAAY,wCAAwC,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC;QACzG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY,4CAA4C,EAAE,GAAG,GAAG,aAAa,CAAC,CAAC;QAE7G,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAEvE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,GAAG,uBAAuB,CAAC,CAAC;QAE3D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAErC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2GAA2G,EAAE,KAAK,IAAI,EAAE;QACvH,MAAM,IAAI,GAAG,6BAA6B,CAAC;QAC3C,MAAM,GAAG,GAAG,gBAAgB,CAAC,6BAA6B,CAAC,CAAC;QAC5D,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,wBAAwB,CAAC,GAAG,YAAY,kBAAkB,IAAI,SAAS,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC;QAChG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY,kBAAkB,IAAI,aAAa,EAAE,GAAG,GAAG,aAAa,CAAC,CAAC;QACpG,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,CAAC,CAAC;QAEpF,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,YAAY,kBAAkB,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7G,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,MAAO,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;YACnC,QAAQ,EAAE,GAAG;YACb,IAAI,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,+BAA+B,CAAC,EAAE,CAAC;YACpG,QAAQ;YACR,MAAM,EAAE,MAAO;YACf,UAAU;YACV,KAAK,EAAE,KAAK;SACf,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,IAAI,GAAG,oCAAoC,CAAC;QAClD,MAAM,GAAG,GAAG,gBAAgB,CAAC,oCAAoC,CAAC,CAAC;QACnE,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,wBAAwB,CAAC,GAAG,YAAY,kBAAkB,IAAI,SAAS,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC;QAChG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY,kBAAkB,IAAI,aAAa,EAAE,GAAG,GAAG,aAAa,CAAC,CAAC;QACpG,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,CAAC,CAAC;QAEpF,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,YAAY,kBAAkB,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7G,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,MAAO,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;YACnC,QAAQ,EAAE,GAAG;YACb,IAAI,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,+BAA+B,CAAC,EAAE,CAAC;YACpG,QAAQ;YACR,MAAM,EAAE,MAAO;YACf,UAAU;YACV,KAAK,EAAE,KAAK;SACf,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,IAAI,GAAG,qCAAqC,CAAC;QACnD,MAAM,GAAG,GAAG,gBAAgB,CAAC,qCAAqC,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAElC,MAAM,wBAAwB,CAAC,GAAG,YAAY,kBAAkB,IAAI,SAAS,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC;QAChG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY,kBAAkB,IAAI,aAAa,EAAE,GAAG,GAAG,aAAa,CAAC,CAAC;QACpG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY,kBAAkB,IAAI,6BAA6B,EAAE,GAAG,GAAG,cAAc,CAAC,CAAC;QACrH,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,CAAC,CAAC;QAEpF,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,YAAY,kBAAkB,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7G,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,MAAO,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;YACnC,QAAQ,EAAE,GAAG;YACb,IAAI,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,+BAA+B,CAAC,EAAE,CAAC;YACpG,QAAQ;YACR,MAAM,EAAE,MAAO;YACf,UAAU;YACV,KAAK,EAAE,KAAK;SACf,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -5,8 +5,7 @@ integrations:
|
|
|
5
5
|
description: |
|
|
6
6
|
Fetches the Github issues from all a user's repositories.
|
|
7
7
|
Details: full sync, doesn't track deletes, metadata is not required.
|
|
8
|
-
|
|
9
|
-
endpoint: /example/github/issues
|
|
8
|
+
endpoint: GET /example/github/issues
|
|
10
9
|
sync_type: full
|
|
11
10
|
scopes: public_repo
|
|
12
11
|
track_deletes: false
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const copyDirectoryAndContents: (source: string, destination: string) => Promise<void>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs/promises';
|
|
3
|
+
export const copyDirectoryAndContents = async (source, destination) => {
|
|
4
|
+
await fs.mkdir(destination, { recursive: true });
|
|
5
|
+
const files = await fs.readdir(source, { withFileTypes: true });
|
|
6
|
+
for (const file of files) {
|
|
7
|
+
const sourcePath = path.join(source, file.name);
|
|
8
|
+
const destinationPath = path.join(destination, file.name);
|
|
9
|
+
if (file.isDirectory()) {
|
|
10
|
+
await copyDirectoryAndContents(sourcePath, destinationPath);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
await fs.copyFile(sourcePath, destinationPath);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../lib/tests/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,aAAa,CAAC;AAE7B,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,MAAc,EAAE,WAAmB,EAAE,EAAE;IAClF,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1D,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACrB,MAAM,wBAAwB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACJ,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;AACL,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nango",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.40.1",
|
|
4
4
|
"description": "Nango's CLI tool.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -26,9 +26,8 @@
|
|
|
26
26
|
"@babel/parser": "^7.22.5",
|
|
27
27
|
"@babel/traverse": "^7.22.5",
|
|
28
28
|
"@babel/types": "^7.22.5",
|
|
29
|
-
"@
|
|
30
|
-
"@
|
|
31
|
-
"@vercel/ncc": "^0.36.1",
|
|
29
|
+
"@nangohq/shared": "^0.40.1",
|
|
30
|
+
"@swc/core": "^1.5.25",
|
|
32
31
|
"ajv": "^8.12.0",
|
|
33
32
|
"ajv-errors": "^3.0.0",
|
|
34
33
|
"axios": "^1.2.0",
|
|
@@ -45,10 +44,10 @@
|
|
|
45
44
|
"js-yaml": "^4.1.0",
|
|
46
45
|
"memfs": "^3.5.1",
|
|
47
46
|
"npm-package-arg": "^10.1.0",
|
|
48
|
-
"ora": "^6.3.1",
|
|
49
47
|
"promptly": "^3.2.0",
|
|
50
48
|
"semver": "^7.5.2",
|
|
51
49
|
"ts-node": "^10.9.1",
|
|
50
|
+
"tsup": "^8.1.0",
|
|
52
51
|
"typescript": "^5.3.3",
|
|
53
52
|
"vm": "^0.1.0",
|
|
54
53
|
"zod": "^3.22.4"
|
|
@@ -57,7 +56,7 @@
|
|
|
57
56
|
"@babel/core": "^7.22.1",
|
|
58
57
|
"@babel/preset-env": "^7.22.4",
|
|
59
58
|
"@babel/preset-typescript": "^7.21.5",
|
|
60
|
-
"@nangohq/types": "^0.
|
|
59
|
+
"@nangohq/types": "^0.40.1",
|
|
61
60
|
"@types/babel__traverse": "^7.20.1",
|
|
62
61
|
"@types/babel-traverse": "^6.25.7",
|
|
63
62
|
"@types/commander": "^2.12.2",
|