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.
Files changed (38) hide show
  1. package/dist/cli.d.ts +16 -4
  2. package/dist/cli.js +50 -53
  3. package/dist/cli.js.map +1 -1
  4. package/dist/index.js +29 -19
  5. package/dist/index.js.map +1 -1
  6. package/dist/nango-sync.d.ts +19 -2
  7. package/dist/services/compile.service.d.ts +13 -6
  8. package/dist/services/compile.service.js +107 -39
  9. package/dist/services/compile.service.js.map +1 -1
  10. package/dist/services/compile.service.unit.test.js +17 -7
  11. package/dist/services/compile.service.unit.test.js.map +1 -1
  12. package/dist/services/config.service.d.ts +1 -1
  13. package/dist/services/config.service.js +2 -3
  14. package/dist/services/config.service.js.map +1 -1
  15. package/dist/services/deploy.service.d.ts +11 -2
  16. package/dist/services/deploy.service.js +8 -8
  17. package/dist/services/deploy.service.js.map +1 -1
  18. package/dist/services/dryrun.service.js +2 -2
  19. package/dist/services/dryrun.service.js.map +1 -1
  20. package/dist/services/model.service.d.ts +4 -1
  21. package/dist/services/model.service.js +13 -6
  22. package/dist/services/model.service.js.map +1 -1
  23. package/dist/services/parser.service.d.ts +1 -0
  24. package/dist/services/parser.service.js +15 -2
  25. package/dist/services/parser.service.js.map +1 -1
  26. package/dist/services/verification.service.d.ts +9 -2
  27. package/dist/services/verification.service.js +15 -16
  28. package/dist/services/verification.service.js.map +1 -1
  29. package/dist/{sync.unit.test.js → sync.unit.cli-test.js} +192 -119
  30. package/dist/sync.unit.cli-test.js.map +1 -0
  31. package/dist/templates/nango.yaml +1 -2
  32. package/dist/tests/helpers.d.ts +1 -0
  33. package/dist/tests/helpers.js +17 -0
  34. package/dist/tests/helpers.js.map +1 -0
  35. package/package.json +5 -6
  36. package/tsconfig.dev.json +2 -3
  37. package/dist/sync.unit.test.js.map +0 -1
  38. /package/dist/{sync.unit.test.d.ts → sync.unit.cli-test.d.ts} +0 -0
@@ -1,58 +1,50 @@
1
- import { expect, describe, it, afterEach, beforeAll } from 'vitest';
1
+ import { expect, describe, it, beforeAll } from 'vitest';
2
2
  import path from 'path';
3
- import * as fs from 'fs';
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
- const copyDirectoryAndContents = async (source, destination) => {
12
- await fs.promises.mkdir(destination, { recursive: true });
13
- const files = await fs.promises.readdir(source, { withFileTypes: true });
14
- for (const file of files) {
15
- const sourcePath = path.join(source, file.name);
16
- const destinationPath = path.join(destination, file.name);
17
- if (file.isDirectory()) {
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
- await init();
38
- expect(fs.existsSync(`./${testDirectory}/demo-github-integration/syncs/${exampleSyncName}.ts`)).toBe(true);
39
- expect(fs.existsSync(`./${testDirectory}/.env`)).toBe(true);
40
- expect(fs.existsSync(`./${testDirectory}/nango.yaml`)).toBe(true);
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
- await fs.promises.rm(testDirectory, { recursive: true, force: true });
44
- await fs.promises.mkdir(testDirectory, { recursive: true });
45
- await fs.promises.writeFile(`${testDirectory}/${exampleSyncName}.ts`, 'dummy fake content', 'utf8');
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(testDirectory, `${exampleSyncName}.ts`);
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
- await init();
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(`${testDirectory}/nango.yaml`, yamlData, 'utf8');
84
- await generate(false, true);
85
- expect(fs.existsSync(`${testDirectory}/some-other-sync.ts`)).toBe(true);
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
- await init();
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(`${testDirectory}/nango.yaml`, yamlData, 'utf8');
117
- await generate(false, true);
118
- expect(fs.existsSync(`${testDirectory}/single-model-return.ts`)).toBe(true);
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
- await init();
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(`${testDirectory}/nango.yaml`, yamlData, 'utf8');
153
- await generate(false, true);
154
- expect(fs.existsSync(`${testDirectory}/demo-github-integration/syncs/single-model-return.ts`)).toBe(true);
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
- await init();
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(`${testDirectory}/nango.yaml`, yamlData, 'utf8');
188
- expect(fs.existsSync(`${testDirectory}/demo-github-integration/syncs/single-model-return.ts`)).toBe(false);
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
- await init();
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(`${testDirectory}/nango.yaml`, yamlData, 'utf8');
223
- await generate(false, true);
224
- expect(fs.existsSync(`${testDirectory}/demo-github-integration/syncs/single-model-issue-output.ts`)).toBe(true);
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
- await init();
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(`${testDirectory}/nango.yaml`, yamlData, 'utf8');
255
- await expect(generate(false, true)).rejects.toThrow(`Model "GithubIssue" doesn't have an id field. This is required to be able to uniquely identify the data record.`);
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 in an s', async () => {
258
- await init();
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(`${testDirectory}/nango.yaml`, yamlData, 'utf8');
287
- await generate(false, true);
288
- const modelsFile = await fs.promises.readFile(`${testDirectory}/models.ts`, 'utf8');
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
- await init();
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(`${testDirectory}/nango.yaml`, yamlData, 'utf8');
319
- await generate(false, true);
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
- await init();
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(`${testDirectory}/nango.yaml`, yamlData, 'utf8');
339
- await generate(false, true);
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
- await init();
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(`${testDirectory}/nango.yaml`, yamlData, 'utf8');
359
- expect(await generate(false, true)).toBeUndefined();
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
- await fs.promises.mkdir(testDirectory, { recursive: true });
408
- await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v1/no-commas/nango.yaml`, `${testDirectory}/nango.yaml`);
409
- expect(generate(false, true)).rejects.toThrow(`Field "integer," in the model GithubIssue ends with a comma or semicolon which is not allowed.`);
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
- await fs.promises.mkdir(testDirectory, { recursive: true });
413
- await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v1/no-semi-colons/nango.yaml`, `${testDirectory}/nango.yaml`);
414
- expect(generate(false, true)).rejects.toThrow(`Field "integer;" in the model GithubIssue ends with a comma or semicolon which is not allowed.`);
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).toEqual('Problem validating the nango.yaml file.');
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
- await fs.promises.mkdir(testDirectory, { recursive: true });
435
- await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/string-literal/nango.yaml`, `${testDirectory}/nango.yaml`);
436
- expect(generate(false, true));
437
- const modelsFile = await fs.promises.readFile(`${testDirectory}/models.ts`, 'utf8');
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
- await fs.promises.mkdir(testDirectory, { recursive: true });
442
- await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/mixed-literal/nango.yaml`, `${testDirectory}/nango.yaml`);
443
- expect(generate(false, true));
444
- const modelsFile = await fs.promises.readFile(`${testDirectory}/models.ts`, 'utf8');
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
- await fs.promises.mkdir(testDirectory, { recursive: true });
449
- await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/mixed-literal-model/nango.yaml`, `${testDirectory}/nango.yaml`);
450
- expect(generate(false, true));
451
- const modelsFile = await fs.promises.readFile(`${testDirectory}/models.ts`, 'utf8');
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
- await fs.promises.mkdir(testDirectory, { recursive: true });
457
- await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/mixed-types/nango.yaml`, `${testDirectory}/nango.yaml`);
458
- expect(generate(false, true));
459
- const modelsFile = await fs.promises.readFile(`${testDirectory}/models.ts`, 'utf8');
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
- await fs.promises.mkdir(testDirectory, { recursive: true });
468
- await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/model-array-types/nango.yaml`, `${testDirectory}/nango.yaml`);
469
- expect(generate(false, true));
470
- const modelsFile = await fs.promises.readFile(`${testDirectory}/models.ts`, 'utf8');
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
- await fs.promises.rm(testDirectory, { recursive: true, force: true });
476
- await fs.promises.mkdir(testDirectory, { recursive: true });
477
- await copyDirectoryAndContents(`${fixturesPath}/nango-yaml/v2/nested-integrations/hubspot`, './hubspot');
478
- await copyDirectoryAndContents(`${fixturesPath}/nango-yaml/v2/nested-integrations/github`, './github');
479
- await fs.promises.copyFile(`${fixturesPath}/nango-yaml/v2/nested-integrations/nango.yaml`, `./nango.yaml`);
480
- const success = await compileAllFiles({ debug: true });
481
- await fs.promises.rm('./hubspot', { recursive: true, force: true });
482
- await fs.promises.rm('./github', { recursive: true, force: true });
483
- await fs.promises.rm('./dist', { recursive: true, force: true });
484
- await fs.promises.rm('./nango.yaml', { force: true });
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
- await fs.promises.rm(testDirectory, { recursive: true, force: true });
490
- await fs.promises.mkdir(testDirectory, { recursive: true });
491
- await copyDirectoryAndContents(`${fixturesPath}/nango-yaml/v2/non-nested-integrations`, './');
492
- const success = await compileAllFiles({ debug: true });
493
- await fs.promises.rm('./dist', { recursive: true, force: true });
494
- await fs.promises.rm('./nango.yaml', { force: true });
495
- await fs.promises.rm('./models.ts', { force: true });
496
- await fs.promises.rm('./contacts.ts', { force: true });
497
- await fs.promises.rm('./create-contact.ts', { force: true });
498
- await fs.promises.rm('./create-issue.ts', { force: true });
499
- await fs.promises.rm('./issues.ts', { force: true });
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
- type: sync
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.39.33",
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
- "@inquirer/prompts": "^2.3.0",
30
- "@nangohq/shared": "^0.39.33",
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.39.33",
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",