create-appraisejs 0.1.10-alpha.5 → 0.1.10-alpha.7

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 (49) hide show
  1. package/dist/cli.js +0 -0
  2. package/dist/install.d.ts.map +1 -1
  3. package/dist/install.js.map +1 -1
  4. package/package.json +1 -1
  5. package/templates/default/.appraise-template-meta.json +2 -2
  6. package/templates/default/gitignore +0 -1
  7. package/templates/default/package.json +3 -2
  8. package/templates/default/prisma/dev.db +0 -0
  9. package/templates/default/scripts/sync-appraise-base-template.ts +5 -2
  10. package/dist/cli.e2e.test.d.ts +0 -2
  11. package/dist/cli.e2e.test.d.ts.map +0 -1
  12. package/dist/cli.e2e.test.js +0 -76
  13. package/dist/cli.e2e.test.js.map +0 -1
  14. package/dist/config.test.d.ts +0 -2
  15. package/dist/config.test.d.ts.map +0 -1
  16. package/dist/config.test.js +0 -69
  17. package/dist/config.test.js.map +0 -1
  18. package/dist/copy-template.test.d.ts +0 -2
  19. package/dist/copy-template.test.d.ts.map +0 -1
  20. package/dist/copy-template.test.js +0 -76
  21. package/dist/copy-template.test.js.map +0 -1
  22. package/dist/create-project.test.d.ts +0 -2
  23. package/dist/create-project.test.d.ts.map +0 -1
  24. package/dist/create-project.test.js +0 -80
  25. package/dist/create-project.test.js.map +0 -1
  26. package/dist/download-repo.test.d.ts +0 -2
  27. package/dist/download-repo.test.d.ts.map +0 -1
  28. package/dist/download-repo.test.js +0 -14
  29. package/dist/download-repo.test.js.map +0 -1
  30. package/dist/install.test.d.ts +0 -2
  31. package/dist/install.test.d.ts.map +0 -1
  32. package/dist/install.test.js +0 -135
  33. package/dist/install.test.js.map +0 -1
  34. package/dist/package-manager.test.d.ts +0 -2
  35. package/dist/package-manager.test.d.ts.map +0 -1
  36. package/dist/package-manager.test.js +0 -51
  37. package/dist/package-manager.test.js.map +0 -1
  38. package/dist/prepare-template-utils.test.d.ts +0 -2
  39. package/dist/prepare-template-utils.test.d.ts.map +0 -1
  40. package/dist/prepare-template-utils.test.js +0 -67
  41. package/dist/prepare-template-utils.test.js.map +0 -1
  42. package/dist/prompts.test.d.ts +0 -2
  43. package/dist/prompts.test.d.ts.map +0 -1
  44. package/dist/prompts.test.js +0 -68
  45. package/dist/prompts.test.js.map +0 -1
  46. package/dist/template-sync-utils.test.d.ts +0 -2
  47. package/dist/template-sync-utils.test.d.ts.map +0 -1
  48. package/dist/template-sync-utils.test.js +0 -41
  49. package/dist/template-sync-utils.test.js.map +0 -1
package/dist/cli.js CHANGED
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAKtE,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAEzF;AAED,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,cAAc,EAClB,QAAQ,EAAE,iBAAiB,EAAE,GAC5B;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAKrC;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAUlG;AA0BD;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,cAAc,EAClB,QAAQ,EAAE,iBAAiB,EAAE,GAC5B,OAAO,CAAC,IAAI,CAAC,CAQf"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAKrE,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAEzF;AAED,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,cAAc,EAClB,QAAQ,EAAE,iBAAiB,EAAE,GAC5B;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAKrC;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAUlG;AA0BD;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAQlH"}
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-appraisejs",
3
- "version": "0.1.10-alpha.5",
3
+ "version": "0.1.10-alpha.7",
4
4
  "description": "Scaffold a new AppraiseJS app in your directory",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Hasnat Jamil",
@@ -1,5 +1,5 @@
1
1
  {
2
- "preparedAt": "2026-03-11T20:06:05.792Z",
3
- "inputHash": "b8bad3c969b8fcf0e41cfd1e6891ceed425ea5ac7848fef4e1e99f5498e8fb9b",
2
+ "preparedAt": "2026-03-11T20:42:08.795Z",
3
+ "inputHash": "b791f96c5cc19b18dc2263cb632bc664e4e0306d2a2e6d59d96d83d228a680b8",
4
4
  "databasePath": "prisma/dev.db"
5
5
  }
@@ -39,7 +39,6 @@ yarn-error.log*
39
39
  *.db
40
40
  *.sqlite
41
41
  *.sqlite3
42
- !packages/create-appraisejs/templates/default/prisma/dev.db
43
42
 
44
43
  # vercel
45
44
  .vercel
@@ -14,7 +14,7 @@
14
14
  "install-dependencies": "npm install --legacy-peer-deps",
15
15
  "setup-env": "npx tsx scripts/setup-env.ts",
16
16
  "migrate-db": "npx prisma migrate deploy",
17
- "setup": "npm run install-dependencies && npm run setup:db && npm run build:local",
17
+ "setup": "npm run install-dependencies && npm run setup:db && npm run build:local && npm run protect-seeded-files",
18
18
  "sync-features": "npx tsx scripts/regenerate-features.ts",
19
19
  "sync-features:dry-run": "npx tsx scripts/regenerate-features.ts --dry-run",
20
20
  "sync-locator-groups": "npx tsx scripts/sync-locator-groups.ts",
@@ -32,7 +32,8 @@
32
32
  "build:local": "npm run generate-db-client && npm run build:cucumber-runtime && next build",
33
33
  "generate-db-client": "npx prisma generate --schema prisma/schema.prisma",
34
34
  "setup:db": "npm run setup-env && npm run generate-db-client && npm run migrate-db && npm run sync-all",
35
- "setup:full": "npm run install-dependencies && npm run setup:db && npm run build:local",
35
+ "setup:full": "npm run install-dependencies && npm run setup:db && npm run build:local && npm run protect-seeded-files",
36
+ "protect-seeded-files": "npx tsx scripts/protect-seeded-files.ts",
36
37
  "appraisejs:setup": "npm run setup",
37
38
  "appraisejs:sync": "npm run sync-all"
38
39
  },
Binary file
@@ -154,9 +154,12 @@ rootPkg.scripts = {
154
154
  'generate-db-client': 'npx prisma generate --schema prisma/schema.prisma',
155
155
  'migrate-db': 'npx prisma migrate deploy',
156
156
  'install-playwright': 'npx playwright install',
157
- setup: 'npm run install-dependencies && npm run setup:db && npm run build:local',
157
+ setup:
158
+ 'npm run install-dependencies && npm run setup:db && npm run build:local && npm run protect-seeded-files',
158
159
  'setup:db': 'npm run setup-env && npm run generate-db-client && npm run migrate-db && npm run sync-all',
159
- 'setup:full': 'npm run install-dependencies && npm run setup:db && npm run build:local',
160
+ 'setup:full':
161
+ 'npm run install-dependencies && npm run setup:db && npm run build:local && npm run protect-seeded-files',
162
+ 'protect-seeded-files': 'npx tsx scripts/protect-seeded-files.ts',
160
163
  'appraisejs:setup': 'npm run setup',
161
164
  'appraisejs:sync': 'npm run sync-all',
162
165
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=cli.e2e.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.e2e.test.d.ts","sourceRoot":"","sources":["../src/cli.e2e.test.ts"],"names":[],"mappings":""}
@@ -1,76 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import path from 'path';
3
- import fs from 'fs-extra';
4
- import os from 'os';
5
- import { getTemplatePath } from './copy-template.js';
6
- import { patchPackageJsonScripts } from './install.js';
7
- describe('CLI E2E', () => {
8
- let tempDir;
9
- let destDir;
10
- beforeEach(async () => {
11
- tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'create-appraisejs-e2e-'));
12
- destDir = path.join(tempDir, 'my-app');
13
- });
14
- afterEach(async () => {
15
- await fs.remove(tempDir).catch(() => { });
16
- });
17
- it('scaffolds app from the bundled template with a seeded database', async () => {
18
- const templatePath = getTemplatePath();
19
- if (!(await fs.pathExists(templatePath))) {
20
- console.warn('Skipping E2E: template not found (run npm run build first)');
21
- return;
22
- }
23
- await fs.ensureDir(destDir);
24
- const pkgJsonPath = path.join(destDir, 'package.json');
25
- const seededDbPath = path.join(destDir, 'prisma', 'dev.db');
26
- const staleNestedDbPath = path.join(destDir, 'prisma', 'prisma', 'dev.db');
27
- const { copyTemplate } = await import('./copy-template.js');
28
- await copyTemplate(destDir, undefined, undefined, 'npm');
29
- expect(await fs.pathExists(pkgJsonPath)).toBe(true);
30
- expect(await fs.pathExists(seededDbPath)).toBe(true);
31
- expect(await fs.pathExists(staleNestedDbPath)).toBe(false);
32
- const pkg = await fs.readJson(pkgJsonPath);
33
- expect(pkg.scripts?.dev).toBeDefined();
34
- expect(pkg.scripts?.setup).toContain('build:local');
35
- expect(pkg.scripts?.['build:local']).toContain('build:cucumber-runtime');
36
- });
37
- it('patchPackageJsonScripts rewrites real template scripts for chosen package manager', async () => {
38
- const templatePath = getTemplatePath();
39
- if (!(await fs.pathExists(templatePath))) {
40
- console.warn('Skipping E2E: template not found (run npm run build first)');
41
- return;
42
- }
43
- const { copyTemplate } = await import('./copy-template.js');
44
- await copyTemplate(destDir, undefined, undefined, 'npm');
45
- const pkgBefore = await fs.readJson(path.join(destDir, 'package.json'));
46
- expect(pkgBefore.scripts['install-dependencies']).toBe('npm install --legacy-peer-deps');
47
- expect(pkgBefore.scripts.setup).toMatch(/npm run /);
48
- await patchPackageJsonScripts(destDir, 'pnpm');
49
- const pkgAfter = await fs.readJson(path.join(destDir, 'package.json'));
50
- expect(pkgAfter.scripts['install-dependencies']).toBe('pnpm install');
51
- expect(pkgAfter.scripts.setup).toBe('pnpm run install-dependencies && pnpm run setup-env && pnpm run build:local');
52
- expect(pkgAfter.scripts['appraisejs:setup']).toBe('pnpm run setup');
53
- expect(pkgAfter.scripts['appraisejs:sync']).toBe('pnpm run sync-all');
54
- expect(pkgAfter.scripts['setup-env']).toContain('pnpm exec ');
55
- expect(pkgAfter.scripts['setup-env']).not.toContain('npx ');
56
- expect(pkgAfter.scripts['sync-all']).toContain('pnpm exec ');
57
- expect(pkgAfter.scripts['install-playwright']).toContain('pnpm exec ');
58
- expect(pkgAfter.scripts['install-playwright']).not.toContain('npx ');
59
- });
60
- it('patchPackageJsonScripts rewrites npx-using scripts for bun', async () => {
61
- const templatePath = getTemplatePath();
62
- if (!(await fs.pathExists(templatePath))) {
63
- console.warn('Skipping E2E: template not found (run npm run build first)');
64
- return;
65
- }
66
- const { copyTemplate } = await import('./copy-template.js');
67
- await copyTemplate(destDir, undefined, undefined, 'npm');
68
- await patchPackageJsonScripts(destDir, 'bun');
69
- const pkgAfter = await fs.readJson(path.join(destDir, 'package.json'));
70
- expect(pkgAfter.scripts['setup-env']).toContain('bunx ');
71
- expect(pkgAfter.scripts['sync-all']).toContain('bunx ');
72
- expect(pkgAfter.scripts['install-playwright']).toContain('bunx ');
73
- expect(pkgAfter.scripts['setup-env']).not.toContain('npx ');
74
- });
75
- });
76
- //# sourceMappingURL=cli.e2e.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.e2e.test.js","sourceRoot":"","sources":["../src/cli.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=config.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":""}
@@ -1,69 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { getConfig } from './config.js';
3
- describe('getConfig', () => {
4
- const originalEnv = process.env;
5
- beforeEach(() => {
6
- process.env = { ...originalEnv };
7
- delete process.env.CREATE_APPRAISE_REPO_URL;
8
- delete process.env.CREATE_APPRAISE_BRANCH;
9
- delete process.env.CREATE_APPRAISE_TEMPLATE_SUBPATH;
10
- delete process.env.CREATE_APPRAISE_USE_BUNDLED;
11
- });
12
- afterEach(() => {
13
- process.env = originalEnv;
14
- });
15
- it('returns default repo base, branch, template subpath, and useBundled true when no env set', () => {
16
- const config = getConfig();
17
- expect(config.repoBase).toContain('github.com');
18
- expect(config.repoBase).toContain('appraisejs');
19
- expect(config.branch).toBe('main');
20
- expect(config.templateSubpath).toBe('templates/default');
21
- expect(config.useBundled).toBe(true);
22
- });
23
- it('uses CREATE_APPRAISE_REPO_URL when set', () => {
24
- process.env.CREATE_APPRAISE_REPO_URL = 'https://example.com/repo';
25
- const config = getConfig();
26
- expect(config.repoBase).toBe('https://example.com/repo');
27
- expect(config.useBundled).toBe(false);
28
- });
29
- it('normalizes repo base: trims, removes trailing slash and .git', () => {
30
- process.env.CREATE_APPRAISE_REPO_URL = ' https://example.com/repo/.git/ ';
31
- const config = getConfig();
32
- expect(config.repoBase).toBe('https://example.com/repo');
33
- });
34
- it('uses CREATE_APPRAISE_BRANCH when set', () => {
35
- process.env.CREATE_APPRAISE_BRANCH = 'dev';
36
- const config = getConfig();
37
- expect(config.branch).toBe('dev');
38
- expect(config.useBundled).toBe(false);
39
- });
40
- it('uses CREATE_APPRAISE_TEMPLATE_SUBPATH when set', () => {
41
- process.env.CREATE_APPRAISE_TEMPLATE_SUBPATH = 'templates/custom';
42
- const config = getConfig();
43
- expect(config.templateSubpath).toBe('templates/custom');
44
- expect(config.useBundled).toBe(false);
45
- });
46
- it('sets useBundled true when CREATE_APPRAISE_USE_BUNDLED is 1', () => {
47
- process.env.CREATE_APPRAISE_REPO_URL = 'https://example.com/repo';
48
- process.env.CREATE_APPRAISE_USE_BUNDLED = '1';
49
- const config = getConfig();
50
- expect(config.useBundled).toBe(true);
51
- });
52
- it('sets useBundled true when CREATE_APPRAISE_USE_BUNDLED is true', () => {
53
- process.env.CREATE_APPRAISE_USE_BUNDLED = 'true';
54
- const config = getConfig();
55
- expect(config.useBundled).toBe(true);
56
- });
57
- it('sets useBundled true when CREATE_APPRAISE_USE_BUNDLED is yes', () => {
58
- process.env.CREATE_APPRAISE_USE_BUNDLED = 'yes';
59
- const config = getConfig();
60
- expect(config.useBundled).toBe(true);
61
- });
62
- it('keeps bundled mode when CREATE_APPRAISE_USE_BUNDLED is empty or 0 without remote override', () => {
63
- process.env.CREATE_APPRAISE_USE_BUNDLED = '';
64
- expect(getConfig().useBundled).toBe(true);
65
- process.env.CREATE_APPRAISE_USE_BUNDLED = '0';
66
- expect(getConfig().useBundled).toBe(true);
67
- });
68
- });
69
- //# sourceMappingURL=config.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=copy-template.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"copy-template.test.d.ts","sourceRoot":"","sources":["../src/copy-template.test.ts"],"names":[],"mappings":""}
@@ -1,76 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import path from 'path';
3
- import fs from 'fs-extra';
4
- import os from 'os';
5
- import { copyTemplate, getTemplatePath } from './copy-template.js';
6
- describe('copy-template', () => {
7
- let tempDir;
8
- let destDir;
9
- beforeEach(async () => {
10
- tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'create-appraisejs-test-'));
11
- destDir = path.join(tempDir, 'output');
12
- });
13
- afterEach(async () => {
14
- await fs.remove(tempDir).catch(() => { });
15
- });
16
- describe('getTemplatePath', () => {
17
- it('returns a path ending with templates/default', () => {
18
- const templatePath = getTemplatePath();
19
- expect(templatePath).toMatch(/[\\/]templates[\\/]default$/);
20
- });
21
- });
22
- describe('copyTemplate', () => {
23
- it('copies template files and excludes node_modules, .env, and lockfiles while keeping the seeded db', async () => {
24
- const fixtureDir = path.join(tempDir, 'fixture');
25
- await fs.ensureDir(path.join(fixtureDir, 'src', 'app'));
26
- await fs.ensureDir(path.join(fixtureDir, 'node_modules', 'pkg'));
27
- await fs.ensureDir(path.join(fixtureDir, 'prisma'));
28
- await fs.writeJson(path.join(fixtureDir, 'package.json'), { name: 'test' });
29
- await fs.writeFile(path.join(fixtureDir, '.env'), 'SECRET=1');
30
- await fs.writeFile(path.join(fixtureDir, 'package-lock.json'), '{}');
31
- await fs.writeFile(path.join(fixtureDir, 'prisma', 'dev.db'), 'db');
32
- await fs.writeFile(path.join(fixtureDir, 'src', 'app', 'page.tsx'), 'export default function Page() {}');
33
- const files = getTemplatePath();
34
- expect(files).toMatch(/[\\/]templates[\\/]default$/);
35
- const { getCollectedFilesForTest } = await import('./copy-template.js');
36
- const collectedFiles = getCollectedFilesForTest(fixtureDir, 'npm');
37
- expect(collectedFiles).toContain('package.json');
38
- expect(collectedFiles).toContain(path.join('prisma', 'dev.db'));
39
- expect(collectedFiles.some((f) => f.includes('node_modules'))).toBe(false);
40
- expect(collectedFiles.some((f) => f.includes('.env'))).toBe(false);
41
- const srcFiles = collectedFiles.filter((f) => f.includes('src'));
42
- expect(srcFiles.length).toBeGreaterThan(0);
43
- await copyTemplate(destDir, undefined, fixtureDir, 'npm');
44
- expect(await fs.pathExists(path.join(destDir, 'package.json'))).toBe(true);
45
- expect(await fs.pathExists(path.join(destDir, 'src'))).toBe(true);
46
- expect(await fs.pathExists(path.join(destDir, 'src', 'app', 'page.tsx'))).toBe(true);
47
- expect(await fs.pathExists(path.join(destDir, 'prisma', 'dev.db'))).toBe(true);
48
- const hasNodeModules = await fs.pathExists(path.join(destDir, 'node_modules'));
49
- const hasEnv = await fs.pathExists(path.join(destDir, '.env'));
50
- const hasLock = await fs.pathExists(path.join(destDir, 'package-lock.json'));
51
- expect(hasNodeModules).toBe(false);
52
- expect(hasEnv).toBe(false);
53
- expect(hasLock).toBe(true);
54
- });
55
- it('copies package-lock.json when packageManager is npm', async () => {
56
- const fixtureDir = path.join(tempDir, 'fixture');
57
- await fs.ensureDir(path.join(fixtureDir, 'src'));
58
- await fs.writeJson(path.join(fixtureDir, 'package.json'), { name: 'test' });
59
- await fs.writeFile(path.join(fixtureDir, 'package-lock.json'), '{"lockfileVersion": 3}');
60
- await fs.writeFile(path.join(fixtureDir, 'src', 'index.ts'), '// empty');
61
- await copyTemplate(destDir, undefined, fixtureDir, 'npm');
62
- expect(await fs.pathExists(path.join(destDir, 'package-lock.json'))).toBe(true);
63
- expect(await fs.readFile(path.join(destDir, 'package-lock.json'), 'utf-8')).toBe('{"lockfileVersion": 3}');
64
- });
65
- it('does not copy package-lock.json when packageManager is not npm', async () => {
66
- const fixtureDir = path.join(tempDir, 'fixture');
67
- await fs.ensureDir(path.join(fixtureDir, 'src'));
68
- await fs.writeJson(path.join(fixtureDir, 'package.json'), { name: 'test' });
69
- await fs.writeFile(path.join(fixtureDir, 'package-lock.json'), '{}');
70
- await fs.writeFile(path.join(fixtureDir, 'src', 'index.ts'), '// empty');
71
- await copyTemplate(destDir, undefined, fixtureDir, 'yarn');
72
- expect(await fs.pathExists(path.join(destDir, 'package-lock.json'))).toBe(false);
73
- });
74
- });
75
- });
76
- //# sourceMappingURL=copy-template.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"copy-template.test.js","sourceRoot":"","sources":["../src/copy-template.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEnE,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,OAAe,CAAC;IACpB,IAAI,OAAe,CAAC;IAEpB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,yBAAyB,CAAC,CAAC,CAAC;QAC9E,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;YACvC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,kGAAkG,EAAE,KAAK,IAAI,EAAE;YAChH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACjD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YACxD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;YACjE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;YACpD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5E,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;YAC9D,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,CAAC;YACrE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;YACpE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,mCAAmC,CAAC,CAAC;YAEzG,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;YAErD,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACxE,MAAM,cAAc,GAAG,wBAAwB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACnE,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YACjD,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YAChE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3E,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnE,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACjE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAE3C,MAAM,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3E,MAAM,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClE,MAAM,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrF,MAAM,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE/E,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YAC/D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;YAE7E,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACjD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;YACjD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5E,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,EAAE,wBAAwB,CAAC,CAAC;YACzF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;YAEzE,MAAM,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChF,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAC9E,wBAAwB,CACzB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;YAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACjD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;YACjD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5E,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,CAAC;YACrE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;YAEzE,MAAM,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAE3D,MAAM,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=create-project.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-project.test.d.ts","sourceRoot":"","sources":["../src/create-project.test.ts"],"names":[],"mappings":""}
@@ -1,80 +0,0 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
- import { createProject } from './create-project.js';
3
- function createDependencies(overrides = {}) {
4
- return {
5
- copyTemplate: vi.fn().mockResolvedValue(undefined),
6
- downloadRepo: vi.fn().mockResolvedValue({
7
- repoRoot: '/tmp/remote-repo',
8
- cleanupDir: '/tmp/remote-checkout',
9
- }),
10
- getConfig: vi.fn().mockReturnValue({
11
- repoBase: 'https://github.com/jamil2018/appraisejs-core',
12
- branch: 'main',
13
- templateSubpath: 'templates/default',
14
- useBundled: true,
15
- }),
16
- patchPackageJsonScripts: vi.fn().mockResolvedValue(undefined),
17
- removeDirectory: vi.fn().mockResolvedValue(undefined),
18
- runSetup: vi.fn().mockResolvedValue(undefined),
19
- ...overrides,
20
- };
21
- }
22
- function createLogger() {
23
- const messages = [];
24
- return {
25
- logger: {
26
- info(message) {
27
- messages.push(message);
28
- },
29
- },
30
- messages,
31
- };
32
- }
33
- const ANSWERS = {
34
- directory: '/tmp/my-appraise-app',
35
- packageManager: 'pnpm',
36
- runInstall: true,
37
- playwrightBrowsers: ['chromium'],
38
- };
39
- describe('createProject', () => {
40
- it('uses the bundled template path by default', async () => {
41
- const dependencies = createDependencies();
42
- const { logger, messages } = createLogger();
43
- const result = await createProject(ANSWERS, dependencies, logger);
44
- expect(dependencies.copyTemplate).toHaveBeenCalledWith(ANSWERS.directory, undefined, undefined, ANSWERS.packageManager);
45
- expect(dependencies.downloadRepo).not.toHaveBeenCalled();
46
- expect(dependencies.patchPackageJsonScripts).toHaveBeenCalledWith(ANSWERS.directory, ANSWERS.packageManager);
47
- expect(dependencies.runSetup).toHaveBeenCalledWith(ANSWERS.directory, ANSWERS.packageManager, ANSWERS.playwrightBrowsers);
48
- expect(result.targetDirectory).toBe(ANSWERS.directory);
49
- expect(messages).toContain(' Copying bundled template files...');
50
- });
51
- it('downloads and cleans up the remote template when overrides disable bundled mode', async () => {
52
- const dependencies = createDependencies({
53
- getConfig: vi.fn().mockReturnValue({
54
- repoBase: 'https://example.com/custom',
55
- branch: 'develop',
56
- templateSubpath: 'templates/custom',
57
- useBundled: false,
58
- }),
59
- });
60
- await createProject({ ...ANSWERS, runInstall: false }, dependencies);
61
- expect(dependencies.downloadRepo).toHaveBeenCalledWith('https://example.com/custom', 'develop', 'templates/custom');
62
- expect(dependencies.copyTemplate).toHaveBeenCalledWith(ANSWERS.directory, undefined, '/tmp/remote-repo/templates/custom', ANSWERS.packageManager);
63
- expect(dependencies.removeDirectory).toHaveBeenCalledWith('/tmp/remote-checkout');
64
- expect(dependencies.runSetup).not.toHaveBeenCalled();
65
- });
66
- it('still cleans up remote downloads when copying fails', async () => {
67
- const dependencies = createDependencies({
68
- getConfig: vi.fn().mockReturnValue({
69
- repoBase: 'https://example.com/custom',
70
- branch: 'develop',
71
- templateSubpath: 'templates/custom',
72
- useBundled: false,
73
- }),
74
- copyTemplate: vi.fn().mockRejectedValue(new Error('copy failed')),
75
- });
76
- await expect(createProject({ ...ANSWERS, runInstall: false }, dependencies)).rejects.toThrow('copy failed');
77
- expect(dependencies.removeDirectory).toHaveBeenCalledWith('/tmp/remote-checkout');
78
- });
79
- });
80
- //# sourceMappingURL=create-project.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-project.test.js","sourceRoot":"","sources":["../src/create-project.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=download-repo.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"download-repo.test.d.ts","sourceRoot":"","sources":["../src/download-repo.test.ts"],"names":[],"mappings":""}
@@ -1,14 +0,0 @@
1
- import { describe, it, expect, vi, afterEach } from 'vitest';
2
- import { downloadRepo } from './download-repo.js';
3
- describe('downloadRepo', () => {
4
- const originalFetch = globalThis.fetch;
5
- afterEach(() => {
6
- vi.restoreAllMocks();
7
- globalThis.fetch = originalFetch;
8
- });
9
- it('throws with message including both attempts and CREATE_APPRAISE_USE_BUNDLED when both tarball and clone fail', async () => {
10
- globalThis.fetch = vi.fn().mockResolvedValue({ ok: false, status: 404, statusText: 'Not Found' });
11
- await expect(downloadRepo('https://github.com/invalid/repo', 'main', 'templates/default')).rejects.toThrow(/CREATE_APPRAISE_USE_BUNDLED/);
12
- }, 15000);
13
- });
14
- //# sourceMappingURL=download-repo.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"download-repo.test.js","sourceRoot":"","sources":["../src/download-repo.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;QACrB,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8GAA8G,EAAE,KAAK,IAAI,EAAE;QAC5H,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;QAElG,MAAM,MAAM,CACV,YAAY,CAAC,iCAAiC,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAC7E,CAAC,OAAO,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACnD,CAAC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=install.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install.test.d.ts","sourceRoot":"","sources":["../src/install.test.ts"],"names":[],"mappings":""}
@@ -1,135 +0,0 @@
1
- import fs from 'fs-extra';
2
- import path from 'path';
3
- import os from 'os';
4
- import { describe, it, expect } from 'vitest';
5
- import { getInstallCommand, getPlaywrightInstallCommand, patchPackageJsonScripts } from './install.js';
6
- const TEMPLATE_SCRIPTS = {
7
- 'install-dependencies': 'npm install --legacy-peer-deps',
8
- setup: 'npm run install-dependencies && npm run setup-env && npm run build:local',
9
- 'appraisejs:setup': 'npm run setup',
10
- 'appraisejs:sync': 'npm run sync-all',
11
- 'build:local': 'npm run build:cucumber-runtime && next build',
12
- 'setup-env': 'npx tsx scripts/setup-env.ts',
13
- 'migrate-db': 'npx prisma migrate deploy',
14
- 'install-playwright': 'npx playwright install',
15
- 'setup:db': 'npm run setup-env && npm run migrate-db && npm run sync-all',
16
- 'setup:full': 'npm run install-dependencies && npm run setup:db && npm run build:local',
17
- 'sync-all': 'npx tsx scripts/sync-all.ts',
18
- };
19
- async function patchAndRead(dir, pm) {
20
- await fs.writeJson(path.join(dir, 'package.json'), { name: 'appraisejs', scripts: { ...TEMPLATE_SCRIPTS } });
21
- await patchPackageJsonScripts(dir, pm);
22
- return fs.readJson(path.join(dir, 'package.json'));
23
- }
24
- describe('patchPackageJsonScripts', () => {
25
- it('rewrites package.json scripts to use pnpm instead of npm', async () => {
26
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'create-appraisejs-patch-'));
27
- try {
28
- const pkg = await patchAndRead(dir, 'pnpm');
29
- expect(pkg.scripts['install-dependencies']).toBe('pnpm install');
30
- expect(pkg.scripts.setup).toBe('pnpm run install-dependencies && pnpm run setup-env && pnpm run build:local');
31
- expect(pkg.scripts['appraisejs:setup']).toBe('pnpm run setup');
32
- expect(pkg.scripts['appraisejs:sync']).toBe('pnpm run sync-all');
33
- expect(pkg.scripts['build:local']).toBe('pnpm run build:cucumber-runtime && next build');
34
- expect(pkg.scripts['setup-env']).toBe('pnpm exec tsx scripts/setup-env.ts');
35
- expect(pkg.scripts['migrate-db']).toBe('pnpm exec prisma migrate deploy');
36
- expect(pkg.scripts['install-playwright']).toBe('pnpm exec playwright install');
37
- expect(pkg.scripts['setup:db']).toBe('pnpm run setup-env && pnpm run migrate-db && pnpm run sync-all');
38
- expect(pkg.scripts['setup:full']).toBe('pnpm run install-dependencies && pnpm run setup:db && pnpm run build:local');
39
- expect(pkg.scripts['sync-all']).toBe('pnpm exec tsx scripts/sync-all.ts');
40
- expect(pkg.scripts['setup-env']).not.toContain('npx ');
41
- }
42
- finally {
43
- await fs.remove(dir).catch(() => { });
44
- }
45
- });
46
- it('rewrites scripts for npm (keeps legacy-peer-deps and npx)', async () => {
47
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'create-appraisejs-patch-npm-'));
48
- try {
49
- const pkg = await patchAndRead(dir, 'npm');
50
- expect(pkg.scripts['install-dependencies']).toBe('npm install --legacy-peer-deps');
51
- expect(pkg.scripts.setup).toContain('npm run install-dependencies');
52
- expect(pkg.scripts.setup).not.toContain('pnpm run');
53
- expect(pkg.scripts['setup-env']).toContain('npx ');
54
- expect(pkg.scripts['setup-env']).toBe('npx tsx scripts/setup-env.ts');
55
- expect(pkg.scripts['sync-all']).toBe('npx tsx scripts/sync-all.ts');
56
- }
57
- finally {
58
- await fs.remove(dir).catch(() => { });
59
- }
60
- });
61
- it('rewrites scripts for yarn', async () => {
62
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'create-appraisejs-patch-yarn-'));
63
- try {
64
- const pkg = await patchAndRead(dir, 'yarn');
65
- expect(pkg.scripts['install-dependencies']).toBe('yarn install');
66
- expect(pkg.scripts.setup).toBe('yarn run install-dependencies && yarn run setup-env && yarn run build:local');
67
- expect(pkg.scripts['appraisejs:setup']).toBe('yarn run setup');
68
- expect(pkg.scripts['setup-env']).toBe('yarn run tsx scripts/setup-env.ts');
69
- expect(pkg.scripts['install-playwright']).toBe('yarn run playwright install');
70
- expect(pkg.scripts['sync-all']).not.toContain('npx ');
71
- }
72
- finally {
73
- await fs.remove(dir).catch(() => { });
74
- }
75
- });
76
- it('rewrites scripts for bun', async () => {
77
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'create-appraisejs-patch-bun-'));
78
- try {
79
- const pkg = await patchAndRead(dir, 'bun');
80
- expect(pkg.scripts['install-dependencies']).toBe('bun install');
81
- expect(pkg.scripts.setup).toContain('bun run install-dependencies');
82
- expect(pkg.scripts['appraisejs:sync']).toBe('bun run sync-all');
83
- expect(pkg.scripts['setup-env']).toBe('bunx tsx scripts/setup-env.ts');
84
- expect(pkg.scripts['migrate-db']).toBe('bunx prisma migrate deploy');
85
- expect(pkg.scripts['sync-all']).toContain('bunx ');
86
- expect(pkg.scripts['sync-all']).not.toContain('npx ');
87
- }
88
- finally {
89
- await fs.remove(dir).catch(() => { });
90
- }
91
- });
92
- it('no-ops when package.json does not exist', async () => {
93
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'create-appraisejs-noop-'));
94
- try {
95
- await patchPackageJsonScripts(dir, 'yarn');
96
- await expect(fs.pathExists(path.join(dir, 'package.json'))).resolves.toBe(false);
97
- }
98
- finally {
99
- await fs.remove(dir).catch(() => { });
100
- }
101
- });
102
- });
103
- describe('getInstallCommand', () => {
104
- it('returns npm run setup for npm', () => {
105
- const result = getInstallCommand('npm');
106
- expect(result).toEqual({ command: 'npm', args: ['run', 'setup'] });
107
- expect(`${result.command} ${result.args.join(' ')}`).toBe('npm run setup');
108
- });
109
- it('returns pnpm run setup for pnpm', () => {
110
- const result = getInstallCommand('pnpm');
111
- expect(result).toEqual({ command: 'pnpm', args: ['run', 'setup'] });
112
- expect(`${result.command} ${result.args.join(' ')}`).toBe('pnpm run setup');
113
- });
114
- it('returns yarn run setup for yarn', () => {
115
- const result = getInstallCommand('yarn');
116
- expect(result).toEqual({ command: 'yarn', args: ['run', 'setup'] });
117
- expect(`${result.command} ${result.args.join(' ')}`).toBe('yarn run setup');
118
- });
119
- it('returns bun run setup for bun', () => {
120
- const result = getInstallCommand('bun');
121
- expect(result).toEqual({ command: 'bun', args: ['run', 'setup'] });
122
- expect(`${result.command} ${result.args.join(' ')}`).toBe('bun run setup');
123
- });
124
- it('returns package-manager specific playwright install commands', () => {
125
- expect(getPlaywrightInstallCommand('npm', ['chromium', 'firefox'])).toEqual({
126
- command: 'npm',
127
- args: ['run', 'install-playwright', '--', 'chromium', 'firefox'],
128
- });
129
- expect(getPlaywrightInstallCommand('pnpm', [])).toEqual({
130
- command: 'pnpm',
131
- args: ['run', 'install-playwright', '--'],
132
- });
133
- });
134
- });
135
- //# sourceMappingURL=install.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install.test.js","sourceRoot":"","sources":["../src/install.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=package-manager.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-manager.test.d.ts","sourceRoot":"","sources":["../src/package-manager.test.ts"],"names":[],"mappings":""}
@@ -1,51 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { getPackageManagerProfile, rewriteScriptsForPackageManager } from './package-manager.js';
3
- const TEMPLATE_SCRIPTS = {
4
- 'install-dependencies': 'npm install --legacy-peer-deps',
5
- setup: 'npm run install-dependencies && npm run setup-env && npm run build:local',
6
- 'appraisejs:setup': 'npm run setup',
7
- 'appraisejs:sync': 'npm run sync-all',
8
- 'build:local': 'npm run build:cucumber-runtime && next build',
9
- 'setup-env': 'npx tsx scripts/setup-env.ts',
10
- 'migrate-db': 'npx prisma migrate deploy',
11
- 'install-playwright': 'npx playwright install',
12
- 'setup:db': 'npm run setup-env && npm run migrate-db && npm run sync-all',
13
- 'setup:full': 'npm run install-dependencies && npm run setup:db && npm run build:local',
14
- 'sync-all': 'npx tsx scripts/sync-all.ts',
15
- };
16
- describe('getPackageManagerProfile', () => {
17
- it('returns the expected prefixes for pnpm', () => {
18
- expect(getPackageManagerProfile('pnpm')).toEqual({
19
- command: 'pnpm',
20
- installDependenciesScript: 'pnpm install',
21
- runPrefix: 'pnpm run',
22
- execPrefix: 'pnpm exec ',
23
- });
24
- });
25
- });
26
- describe('rewriteScriptsForPackageManager', () => {
27
- it('rewrites scripts for pnpm', () => {
28
- const scripts = rewriteScriptsForPackageManager(TEMPLATE_SCRIPTS, 'pnpm');
29
- expect(scripts['install-dependencies']).toBe('pnpm install');
30
- expect(scripts.setup).toBe('pnpm run install-dependencies && pnpm run setup-env && pnpm run build:local');
31
- expect(scripts['appraisejs:setup']).toBe('pnpm run setup');
32
- expect(scripts['appraisejs:sync']).toBe('pnpm run sync-all');
33
- expect(scripts['setup-env']).toBe('pnpm exec tsx scripts/setup-env.ts');
34
- expect(scripts['install-playwright']).toBe('pnpm exec playwright install');
35
- });
36
- it('rewrites scripts for yarn', () => {
37
- const scripts = rewriteScriptsForPackageManager(TEMPLATE_SCRIPTS, 'yarn');
38
- expect(scripts['install-dependencies']).toBe('yarn install');
39
- expect(scripts.setup).toBe('yarn run install-dependencies && yarn run setup-env && yarn run build:local');
40
- expect(scripts['setup-env']).toBe('yarn run tsx scripts/setup-env.ts');
41
- expect(scripts['install-playwright']).toBe('yarn run playwright install');
42
- });
43
- it('rewrites scripts for bun', () => {
44
- const scripts = rewriteScriptsForPackageManager(TEMPLATE_SCRIPTS, 'bun');
45
- expect(scripts['install-dependencies']).toBe('bun install');
46
- expect(scripts['setup-env']).toBe('bunx tsx scripts/setup-env.ts');
47
- expect(scripts['migrate-db']).toBe('bunx prisma migrate deploy');
48
- expect(scripts['sync-all']).toBe('bunx tsx scripts/sync-all.ts');
49
- });
50
- });
51
- //# sourceMappingURL=package-manager.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-manager.test.js","sourceRoot":"","sources":["../src/package-manager.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=prepare-template-utils.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prepare-template-utils.test.d.ts","sourceRoot":"","sources":["../src/prepare-template-utils.test.ts"],"names":[],"mappings":""}
@@ -1,67 +0,0 @@
1
- import path from 'path';
2
- import os from 'os';
3
- import fs from 'fs-extra';
4
- import { afterEach, describe, expect, it } from 'vitest';
5
- import { shouldAbortOnFallbackSeed, verifyPreparedTemplateState, } from './prepare-template-utils.js';
6
- async function createPreparedTemplateFixture(rootDir) {
7
- await fs.ensureDir(path.join(rootDir, 'prisma'));
8
- await fs.ensureDir(path.join(rootDir, 'automation', 'features', 'base'));
9
- await fs.ensureDir(path.join(rootDir, 'automation', 'config', 'environments'));
10
- await fs.ensureDir(path.join(rootDir, 'automation', 'mapping'));
11
- await fs.ensureDir(path.join(rootDir, 'automation', 'reports'));
12
- await fs.writeFile(path.join(rootDir, 'prisma', 'dev.db'), 'db');
13
- await fs.writeFile(path.join(rootDir, 'automation', 'features', 'base', 'login.feature'), 'Feature: login');
14
- await fs.writeFile(path.join(rootDir, 'automation', 'config', 'environments', 'environments.json'), '{"demo":{"baseUrl":"https://example.com","apiBaseUrl":"","email":"","password":""}}');
15
- await fs.writeFile(path.join(rootDir, 'automation', 'mapping', 'locator-map.json'), '[]');
16
- }
17
- describe('shouldAbortOnFallbackSeed', () => {
18
- const previousMetadata = {
19
- preparedAt: '2026-03-11T00:00:00.000Z',
20
- inputHash: 'previous-hash',
21
- databasePath: 'prisma/dev.db',
22
- };
23
- it('aborts when fallback seed is used and the template input hash changed', () => {
24
- expect(shouldAbortOnFallbackSeed(true, 'new-hash', previousMetadata)).toBe(true);
25
- });
26
- it('does not abort when fallback seed is not used', () => {
27
- expect(shouldAbortOnFallbackSeed(false, 'new-hash', previousMetadata)).toBe(false);
28
- });
29
- it('does not abort when the previous hash matches', () => {
30
- expect(shouldAbortOnFallbackSeed(true, 'previous-hash', previousMetadata)).toBe(false);
31
- });
32
- });
33
- describe('verifyPreparedTemplateState', () => {
34
- const tempDirs = [];
35
- afterEach(async () => {
36
- await Promise.all(tempDirs.map(dir => fs.remove(dir).catch(() => { })));
37
- tempDirs.length = 0;
38
- });
39
- async function createTempTemplateDir() {
40
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'create-appraisejs-prepare-'));
41
- tempDirs.push(dir);
42
- await createPreparedTemplateFixture(dir);
43
- return dir;
44
- }
45
- it('accepts a prepared template with required starter assets and no reports', async () => {
46
- const dir = await createTempTemplateDir();
47
- await expect(verifyPreparedTemplateState(dir)).resolves.toBeUndefined();
48
- });
49
- it('fails when the environments starter file is missing', async () => {
50
- const dir = await createTempTemplateDir();
51
- await fs.remove(path.join(dir, 'automation', 'config', 'environments', 'environments.json'));
52
- await expect(verifyPreparedTemplateState(dir)).rejects.toThrow(/starter environments file/);
53
- });
54
- it('fails when report artifacts are present', async () => {
55
- const dir = await createTempTemplateDir();
56
- await fs.ensureDir(path.join(dir, 'automation', 'reports', 'logs'));
57
- await fs.writeFile(path.join(dir, 'automation', 'reports', 'logs', 'run.log'), 'artifact');
58
- await expect(verifyPreparedTemplateState(dir)).rejects.toThrow(/report artifacts/);
59
- });
60
- it('fails when a stale nested prisma database is present', async () => {
61
- const dir = await createTempTemplateDir();
62
- await fs.ensureDir(path.join(dir, 'prisma', 'prisma'));
63
- await fs.writeFile(path.join(dir, 'prisma', 'prisma', 'dev.db'), 'stale');
64
- await expect(verifyPreparedTemplateState(dir)).rejects.toThrow(/stale nested database/);
65
- });
66
- });
67
- //# sourceMappingURL=prepare-template-utils.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prepare-template-utils.test.js","sourceRoot":"","sources":["../src/prepare-template-utils.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=prompts.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.test.d.ts","sourceRoot":"","sources":["../src/prompts.test.ts"],"names":[],"mappings":""}
@@ -1,68 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import path from 'path';
3
- import fs from 'fs';
4
- import os from 'os';
5
- import { runPrompts } from './prompts.js';
6
- vi.mock('@inquirer/prompts', () => ({
7
- input: vi.fn(),
8
- select: vi.fn(),
9
- confirm: vi.fn(),
10
- checkbox: vi.fn(),
11
- }));
12
- async function getMocks() {
13
- const { checkbox, input, select, confirm } = await import('@inquirer/prompts');
14
- return {
15
- checkbox: checkbox,
16
- input: input,
17
- select: select,
18
- confirm: confirm,
19
- };
20
- }
21
- describe('runPrompts', () => {
22
- let cwd;
23
- let tempDir;
24
- beforeEach(() => {
25
- cwd = process.cwd();
26
- tempDir = path.join(os.tmpdir(), `create-appraisejs-prompts-${Date.now()}`);
27
- });
28
- afterEach(async () => {
29
- if (tempDir && fs.existsSync(tempDir)) {
30
- fs.rmSync(tempDir, { recursive: true, force: true });
31
- }
32
- vi.clearAllMocks();
33
- });
34
- it('returns directory, packageManager, runInstall, and browsers from mocked prompts', async () => {
35
- fs.mkdirSync(tempDir, { recursive: true });
36
- const { checkbox, input, select, confirm } = await getMocks();
37
- input.mockResolvedValue(tempDir);
38
- select.mockResolvedValue('pnpm');
39
- confirm.mockResolvedValue(true);
40
- checkbox.mockResolvedValue(['chromium', 'webkit']);
41
- const result = await runPrompts(cwd);
42
- expect(result.directory).toBe(path.resolve(cwd, tempDir));
43
- expect(result.packageManager).toBe('pnpm');
44
- expect(result.runInstall).toBe(true);
45
- expect(result.playwrightBrowsers).toEqual(['chromium', 'webkit']);
46
- });
47
- it('throws when target directory exists and is non-empty', async () => {
48
- fs.mkdirSync(tempDir, { recursive: true });
49
- fs.writeFileSync(path.join(tempDir, 'file.txt'), 'x');
50
- const { input } = await getMocks();
51
- input.mockResolvedValue(tempDir);
52
- await expect(runPrompts(cwd)).rejects.toThrow(/Directory must be empty/);
53
- });
54
- it('accepts when target directory does not exist', async () => {
55
- const newPath = path.join(tempDir, 'new-app');
56
- const { checkbox, input, select, confirm } = await getMocks();
57
- input.mockResolvedValue(newPath);
58
- select.mockResolvedValue('npm');
59
- confirm.mockResolvedValue(true);
60
- checkbox.mockResolvedValue([]);
61
- const result = await runPrompts(cwd);
62
- expect(result.directory).toBe(path.resolve(cwd, newPath));
63
- expect(result.packageManager).toBe('npm');
64
- expect(result.runInstall).toBe(true);
65
- expect(result.playwrightBrowsers).toEqual([]);
66
- });
67
- });
68
- //# sourceMappingURL=prompts.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.test.js","sourceRoot":"","sources":["../src/prompts.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=template-sync-utils.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template-sync-utils.test.d.ts","sourceRoot":"","sources":["../src/template-sync-utils.test.ts"],"names":[],"mappings":""}
@@ -1,41 +0,0 @@
1
- import { extractModulePathFromAutomationFile, getAutomationLocatorMapPath, shouldBackfillLegacyEnvironmentConfig, shouldExcludeTemplatePath, } from '../../../src/lib/template-sync-utils.js';
2
- import { describe, expect, it } from 'vitest';
3
- describe('shouldExcludeTemplatePath', () => {
4
- it('excludes report artifacts and database files', () => {
5
- expect(shouldExcludeTemplatePath('automation/reports/logs/run.log')).toBe(true);
6
- expect(shouldExcludeTemplatePath('prisma/dev.db')).toBe(true);
7
- expect(shouldExcludeTemplatePath('tsconfig.tsbuildinfo')).toBe(true);
8
- });
9
- it('keeps normal source files and config files', () => {
10
- expect(shouldExcludeTemplatePath('automation/features/base/login.feature')).toBe(false);
11
- expect(shouldExcludeTemplatePath('prisma/schema.prisma')).toBe(false);
12
- expect(shouldExcludeTemplatePath('package.json')).toBe(false);
13
- });
14
- });
15
- describe('shouldBackfillLegacyEnvironmentConfig', () => {
16
- it('backs fills only when the target file is missing and the legacy directory exists', () => {
17
- expect(shouldBackfillLegacyEnvironmentConfig(false, true)).toBe(true);
18
- expect(shouldBackfillLegacyEnvironmentConfig(true, true)).toBe(false);
19
- expect(shouldBackfillLegacyEnvironmentConfig(false, false)).toBe(false);
20
- });
21
- });
22
- describe('extractModulePathFromAutomationFile', () => {
23
- it('derives locator module paths from automation locators', () => {
24
- expect(extractModulePathFromAutomationFile('/repo/automation/locators/base/login.json', '/repo', 'locators')).toBe('/base');
25
- });
26
- it('derives nested feature module paths from automation features', () => {
27
- expect(extractModulePathFromAutomationFile('/repo/automation/features/users/admins/directors/login.feature', '/repo', 'features')).toBe('/users/admins/directors');
28
- });
29
- it('handles windows-style paths', () => {
30
- expect(extractModulePathFromAutomationFile('C:\\repo\\automation\\locators\\users\\admins\\dashboard.json', 'C:\\repo', 'locators')).toBe('/users/admins');
31
- });
32
- it('returns the root module for top-level feature files', () => {
33
- expect(extractModulePathFromAutomationFile('/repo/automation/features/login.feature', '/repo', 'features')).toBe('/');
34
- });
35
- });
36
- describe('getAutomationLocatorMapPath', () => {
37
- it('points locator-map.json into the automation workspace', () => {
38
- expect(getAutomationLocatorMapPath('/repo')).toBe('/repo/automation/mapping/locator-map.json');
39
- });
40
- });
41
- //# sourceMappingURL=template-sync-utils.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template-sync-utils.test.js","sourceRoot":"","sources":["../src/template-sync-utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mCAAmC,EACnC,2BAA2B,EAC3B,qCAAqC,EACrC,yBAAyB,GAC1B,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,yBAAyB,CAAC,iCAAiC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/E,MAAM,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7D,MAAM,CAAC,yBAAyB,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,yBAAyB,CAAC,wCAAwC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACvF,MAAM,CAAC,yBAAyB,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACrE,MAAM,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC/D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,CAAC,qCAAqC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrE,MAAM,CAAC,qCAAqC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACrE,MAAM,CAAC,qCAAqC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CACJ,mCAAmC,CAAC,2CAA2C,EAAE,OAAO,EAAE,UAAU,CAAC,CACtG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CACJ,mCAAmC,CACjC,gEAAgE,EAChE,OAAO,EACP,UAAU,CACX,CACF,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CACJ,mCAAmC,CACjC,+DAA+D,EAC/D,UAAU,EACV,UAAU,CACX,CACF,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IACzB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,mCAAmC,CAAC,yCAAyC,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAC9G,GAAG,CACJ,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;IAChG,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}