create-payload-app 4.0.0-canary.34 → 4.0.0-canary.36

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 (40) hide show
  1. package/dist/template/src/app/(frontend)/styles.css +7 -0
  2. package/package.json +1 -1
  3. package/dist/ast-integration.spec.js +0 -132
  4. package/dist/ast-integration.spec.js.map +0 -1
  5. package/dist/lib/agent-config.spec.js +0 -23
  6. package/dist/lib/agent-config.spec.js.map +0 -1
  7. package/dist/lib/ast/package-json.spec.js +0 -139
  8. package/dist/lib/ast/package-json.spec.js.map +0 -1
  9. package/dist/lib/ast/payload-config.spec.js +0 -369
  10. package/dist/lib/ast/payload-config.spec.js.map +0 -1
  11. package/dist/lib/ast/utils.spec.js +0 -226
  12. package/dist/lib/ast/utils.spec.js.map +0 -1
  13. package/dist/lib/configure-payload-tsconfig.spec.js +0 -135
  14. package/dist/lib/configure-payload-tsconfig.spec.js.map +0 -1
  15. package/dist/lib/create-project.spec.js +0 -199
  16. package/dist/lib/create-project.spec.js.map +0 -1
  17. package/dist/lib/init-tanstack-default-template.spec.js +0 -121
  18. package/dist/lib/init-tanstack-default-template.spec.js.map +0 -1
  19. package/dist/lib/init-tanstack.spec.js +0 -394
  20. package/dist/lib/init-tanstack.spec.js.map +0 -1
  21. package/dist/lib/manage-env-files.spec.js +0 -118
  22. package/dist/lib/manage-env-files.spec.js.map +0 -1
  23. package/dist/lib/tanstack/detect.spec.js +0 -227
  24. package/dist/lib/tanstack/detect.spec.js.map +0 -1
  25. package/dist/lib/tanstack/prepare.spec.js +0 -288
  26. package/dist/lib/tanstack/prepare.spec.js.map +0 -1
  27. package/dist/lib/tanstack/transform-root-route.spec.js +0 -484
  28. package/dist/lib/tanstack/transform-root-route.spec.js.map +0 -1
  29. package/dist/lib/tanstack/transform-router.spec.js +0 -264
  30. package/dist/lib/tanstack/transform-router.spec.js.map +0 -1
  31. package/dist/lib/tanstack/transform-vite-config.spec.js +0 -456
  32. package/dist/lib/tanstack/transform-vite-config.spec.js.map +0 -1
  33. package/dist/lib/update-payload-in-project.spec.js +0 -262
  34. package/dist/lib/update-payload-in-project.spec.js.map +0 -1
  35. package/dist/lib/wrap-next-config.spec.js +0 -167
  36. package/dist/lib/wrap-next-config.spec.js.map +0 -1
  37. package/dist/main.spec.js +0 -102
  38. package/dist/main.spec.js.map +0 -1
  39. package/dist/utils/resolvePackageVersion.spec.js +0 -77
  40. package/dist/utils/resolvePackageVersion.spec.js.map +0 -1
@@ -28,6 +28,7 @@ body {
28
28
  margin: 0;
29
29
  color: rgb(1000, 1000, 1000);
30
30
 
31
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
31
32
  @media (max-width: 1024px) {
32
33
  font-size: 15px;
33
34
  line-height: 24px;
@@ -46,17 +47,20 @@ h1 {
46
47
  line-height: 70px;
47
48
  font-weight: bold;
48
49
 
50
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
49
51
  @media (max-width: 1024px) {
50
52
  margin: 24px 0;
51
53
  font-size: 42px;
52
54
  line-height: 42px;
53
55
  }
54
56
 
57
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
55
58
  @media (max-width: 768px) {
56
59
  font-size: 38px;
57
60
  line-height: 38px;
58
61
  }
59
62
 
63
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
60
64
  @media (max-width: 400px) {
61
65
  font-size: 32px;
62
66
  line-height: 32px;
@@ -66,6 +70,7 @@ h1 {
66
70
  p {
67
71
  margin: 24px 0;
68
72
 
73
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
69
74
  @media (max-width: 1024px) {
70
75
  margin: var(--spacer-3) 0;
71
76
  }
@@ -100,6 +105,7 @@ svg {
100
105
  margin: 0 auto;
101
106
  overflow: hidden;
102
107
 
108
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
103
109
  @media (max-width: 400px) {
104
110
  padding: 24px;
105
111
  }
@@ -145,6 +151,7 @@ svg {
145
151
  align-items: center;
146
152
  gap: 8px;
147
153
 
154
+ /* stylelint-disable-next-line plugin/no-max-width-media-query -- TODO: pre-existing; migrate to a mobile-first min-width query */
148
155
  @media (max-width: 1024px) {
149
156
  flex-direction: column;
150
157
  gap: 6px;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-payload-app",
3
- "version": "4.0.0-canary.34",
3
+ "version": "4.0.0-canary.36",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,132 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import * as fs from 'fs';
3
- import * as fse from 'fs-extra';
4
- import * as path from 'path';
5
- import * as os from 'os';
6
- import { configurePayloadConfig } from './lib/configure-payload-config';
7
- import { DB_ADAPTER_CONFIG, STORAGE_ADAPTER_CONFIG } from './lib/ast/adapter-config';
8
- const TEST_CASES = [
9
- {
10
- name: 'blank + mongodb + localDisk',
11
- template: 'blank',
12
- dbType: 'mongodb',
13
- storageAdapter: 'localDisk'
14
- },
15
- {
16
- name: 'blank + postgres + vercelBlobStorage',
17
- template: 'blank',
18
- dbType: 'postgres',
19
- storageAdapter: 'vercelBlobStorage'
20
- },
21
- {
22
- name: 'website + mongodb + s3Storage',
23
- template: 'website',
24
- dbType: 'mongodb',
25
- storageAdapter: 's3Storage'
26
- },
27
- {
28
- name: 'website + postgres + localDisk',
29
- template: 'website',
30
- dbType: 'postgres',
31
- storageAdapter: 'localDisk'
32
- },
33
- {
34
- name: 'ecommerce + mongodb + localDisk',
35
- template: 'ecommerce',
36
- dbType: 'mongodb',
37
- storageAdapter: 'localDisk'
38
- },
39
- {
40
- name: 'ecommerce + postgres + r2Storage',
41
- template: 'ecommerce',
42
- dbType: 'postgres',
43
- storageAdapter: 'r2Storage'
44
- }
45
- ];
46
- describe('AST Integration Tests', ()=>{
47
- let tempDir;
48
- const templatesRoot = path.resolve(__dirname, '../../..', 'templates');
49
- beforeEach(()=>{
50
- tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'payload-ast-integration-'));
51
- });
52
- afterEach(()=>{
53
- if (tempDir && fs.existsSync(tempDir)) {
54
- fs.rmSync(tempDir, {
55
- recursive: true,
56
- force: true
57
- });
58
- }
59
- });
60
- describe.each(TEST_CASES)('$name', ({ template, dbType, storageAdapter })=>{
61
- it('successfully applies AST transformations', async ()=>{
62
- // Setup: Copy template to temp directory
63
- const templateDir = path.join(templatesRoot, template);
64
- const testProjectDir = path.join(tempDir, template);
65
- if (!fs.existsSync(templateDir)) {
66
- throw new Error(`Template ${template} not found at ${templateDir}`);
67
- }
68
- fse.copySync(templateDir, testProjectDir);
69
- const payloadConfigPath = path.join(testProjectDir, 'src', 'payload.config.ts');
70
- const packageJsonPath = path.join(testProjectDir, 'package.json');
71
- // Verify files exist before transformation
72
- expect(fs.existsSync(payloadConfigPath)).toBe(true);
73
- expect(fs.existsSync(packageJsonPath)).toBe(true);
74
- // Apply transformations
75
- await configurePayloadConfig({
76
- dbType,
77
- storageAdapter,
78
- projectDirOrConfigPath: {
79
- projectDir: testProjectDir
80
- }
81
- });
82
- // Verify payload.config.ts transformations
83
- const configContent = fs.readFileSync(payloadConfigPath, 'utf-8');
84
- // Check database adapter import
85
- const dbConfig = DB_ADAPTER_CONFIG[dbType];
86
- expect(configContent).toContain(`from '${dbConfig.packageName}'`);
87
- expect(configContent).toContain(`import { ${dbConfig.adapterName} }`);
88
- // Check database adapter config
89
- expect(configContent).toMatch(new RegExp(`db:\\s*${dbConfig.adapterName}\\(`));
90
- // Check storage adapter if not localDisk
91
- if (storageAdapter !== 'localDisk') {
92
- const storageConfig = STORAGE_ADAPTER_CONFIG[storageAdapter];
93
- if (storageConfig.packageName && storageConfig.adapterName) {
94
- expect(configContent).toContain(`from '${storageConfig.packageName}'`);
95
- expect(configContent).toContain(`import { ${storageConfig.adapterName} }`);
96
- expect(configContent).toContain(`${storageConfig.adapterName}(`);
97
- }
98
- }
99
- // Check that old mongodb adapter is removed if we switched to postgres
100
- if (dbType === 'postgres') {
101
- expect(configContent).not.toContain('@payloadcms/db-mongodb');
102
- expect(configContent).not.toContain('mongooseAdapter');
103
- }
104
- // Check that plugins array exists if storage adapter was added
105
- if (storageAdapter !== 'localDisk') {
106
- expect(configContent).toContain('plugins:');
107
- }
108
- // Verify package.json transformations
109
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
110
- // Check that correct db adapter package is in dependencies
111
- expect(packageJson.dependencies[dbConfig.packageName]).toBeDefined();
112
- // Check that old db adapters are removed
113
- Object.entries(DB_ADAPTER_CONFIG).forEach(([key, config])=>{
114
- if (key !== dbType && config.packageName !== dbConfig.packageName) {
115
- expect(packageJson.dependencies[config.packageName]).toBeUndefined();
116
- }
117
- });
118
- // Note: Storage adapter dependencies are NOT automatically added to package.json
119
- // by configurePayloadConfig - only the payload.config.ts is updated.
120
- // This is expected behavior as storage adapters are typically installed separately.
121
- // Verify file is valid TypeScript (basic syntax check)
122
- expect(configContent).toContain('buildConfig');
123
- expect(configContent).toContain('export default');
124
- // Verify no placeholder comments remain
125
- expect(configContent).not.toContain('database-adapter-import');
126
- expect(configContent).not.toContain('database-adapter-config-start');
127
- expect(configContent).not.toContain('storage-adapter-placeholder');
128
- });
129
- });
130
- });
131
-
132
- //# sourceMappingURL=ast-integration.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ast-integration.spec.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, afterEach } from 'vitest'\nimport * as fs from 'fs'\nimport * as fse from 'fs-extra'\nimport * as path from 'path'\nimport * as os from 'os'\nimport { configurePayloadConfig } from './lib/configure-payload-config'\nimport type { DbType, StorageAdapterType } from './types'\nimport { DB_ADAPTER_CONFIG, STORAGE_ADAPTER_CONFIG } from './lib/ast/adapter-config'\n\ninterface TestCase {\n name: string\n template: string\n dbType: DbType\n storageAdapter: StorageAdapterType\n}\n\nconst TEST_CASES: TestCase[] = [\n {\n name: 'blank + mongodb + localDisk',\n template: 'blank',\n dbType: 'mongodb',\n storageAdapter: 'localDisk',\n },\n {\n name: 'blank + postgres + vercelBlobStorage',\n template: 'blank',\n dbType: 'postgres',\n storageAdapter: 'vercelBlobStorage',\n },\n {\n name: 'website + mongodb + s3Storage',\n template: 'website',\n dbType: 'mongodb',\n storageAdapter: 's3Storage',\n },\n {\n name: 'website + postgres + localDisk',\n template: 'website',\n dbType: 'postgres',\n storageAdapter: 'localDisk',\n },\n {\n name: 'ecommerce + mongodb + localDisk',\n template: 'ecommerce',\n dbType: 'mongodb',\n storageAdapter: 'localDisk',\n },\n {\n name: 'ecommerce + postgres + r2Storage',\n template: 'ecommerce',\n dbType: 'postgres',\n storageAdapter: 'r2Storage',\n },\n]\n\ndescribe('AST Integration Tests', () => {\n let tempDir: string\n const templatesRoot = path.resolve(__dirname, '../../..', 'templates')\n\n beforeEach(() => {\n tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'payload-ast-integration-'))\n })\n\n afterEach(() => {\n if (tempDir && fs.existsSync(tempDir)) {\n fs.rmSync(tempDir, { recursive: true, force: true })\n }\n })\n\n describe.each(TEST_CASES)('$name', ({ template, dbType, storageAdapter }) => {\n it('successfully applies AST transformations', async () => {\n // Setup: Copy template to temp directory\n const templateDir = path.join(templatesRoot, template)\n const testProjectDir = path.join(tempDir, template)\n\n if (!fs.existsSync(templateDir)) {\n throw new Error(`Template ${template} not found at ${templateDir}`)\n }\n\n fse.copySync(templateDir, testProjectDir)\n\n const payloadConfigPath = path.join(testProjectDir, 'src', 'payload.config.ts')\n const packageJsonPath = path.join(testProjectDir, 'package.json')\n\n // Verify files exist before transformation\n expect(fs.existsSync(payloadConfigPath)).toBe(true)\n expect(fs.existsSync(packageJsonPath)).toBe(true)\n\n // Apply transformations\n await configurePayloadConfig({\n dbType,\n storageAdapter,\n projectDirOrConfigPath: { projectDir: testProjectDir },\n })\n\n // Verify payload.config.ts transformations\n const configContent = fs.readFileSync(payloadConfigPath, 'utf-8')\n\n // Check database adapter import\n const dbConfig = DB_ADAPTER_CONFIG[dbType]\n expect(configContent).toContain(`from '${dbConfig.packageName}'`)\n expect(configContent).toContain(`import { ${dbConfig.adapterName} }`)\n\n // Check database adapter config\n expect(configContent).toMatch(new RegExp(`db:\\\\s*${dbConfig.adapterName}\\\\(`))\n\n // Check storage adapter if not localDisk\n if (storageAdapter !== 'localDisk') {\n const storageConfig = STORAGE_ADAPTER_CONFIG[storageAdapter]\n\n if (storageConfig.packageName && storageConfig.adapterName) {\n expect(configContent).toContain(`from '${storageConfig.packageName}'`)\n expect(configContent).toContain(`import { ${storageConfig.adapterName} }`)\n expect(configContent).toContain(`${storageConfig.adapterName}(`)\n }\n }\n\n // Check that old mongodb adapter is removed if we switched to postgres\n if (dbType === 'postgres') {\n expect(configContent).not.toContain('@payloadcms/db-mongodb')\n expect(configContent).not.toContain('mongooseAdapter')\n }\n\n // Check that plugins array exists if storage adapter was added\n if (storageAdapter !== 'localDisk') {\n expect(configContent).toContain('plugins:')\n }\n\n // Verify package.json transformations\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'))\n\n // Check that correct db adapter package is in dependencies\n expect(packageJson.dependencies[dbConfig.packageName]).toBeDefined()\n\n // Check that old db adapters are removed\n Object.entries(DB_ADAPTER_CONFIG).forEach(([key, config]) => {\n if (key !== dbType && config.packageName !== dbConfig.packageName) {\n expect(packageJson.dependencies[config.packageName]).toBeUndefined()\n }\n })\n\n // Note: Storage adapter dependencies are NOT automatically added to package.json\n // by configurePayloadConfig - only the payload.config.ts is updated.\n // This is expected behavior as storage adapters are typically installed separately.\n\n // Verify file is valid TypeScript (basic syntax check)\n expect(configContent).toContain('buildConfig')\n expect(configContent).toContain('export default')\n\n // Verify no placeholder comments remain\n expect(configContent).not.toContain('database-adapter-import')\n expect(configContent).not.toContain('database-adapter-config-start')\n expect(configContent).not.toContain('storage-adapter-placeholder')\n })\n })\n})\n"],"names":["describe","it","expect","beforeEach","afterEach","fs","fse","path","os","configurePayloadConfig","DB_ADAPTER_CONFIG","STORAGE_ADAPTER_CONFIG","TEST_CASES","name","template","dbType","storageAdapter","tempDir","templatesRoot","resolve","__dirname","mkdtempSync","join","tmpdir","existsSync","rmSync","recursive","force","each","templateDir","testProjectDir","Error","copySync","payloadConfigPath","packageJsonPath","toBe","projectDirOrConfigPath","projectDir","configContent","readFileSync","dbConfig","toContain","packageName","adapterName","toMatch","RegExp","storageConfig","not","packageJson","JSON","parse","dependencies","toBeDefined","Object","entries","forEach","key","config","toBeUndefined"],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { buildAgentConfigFiles } from './agent-config.js';
3
- describe('buildAgentConfigFiles', ()=>{
4
- it('should write both AGENTS.md and CLAUDE.md', ()=>{
5
- const fileNames = buildAgentConfigFiles().map((file)=>file.fileName);
6
- expect(fileNames).toEqual([
7
- 'AGENTS.md',
8
- 'CLAUDE.md'
9
- ]);
10
- });
11
- it('should point AGENTS.md at the skill inside node_modules', ()=>{
12
- const agents = buildAgentConfigFiles().find((file)=>file.fileName === 'AGENTS.md');
13
- expect(agents?.content).toContain('# AI Agent');
14
- expect(agents?.content).toContain('node_modules/payload/skills/payload/SKILL.md');
15
- expect(agents?.content).not.toContain('.claude/skills');
16
- });
17
- it('should import AGENTS.md from CLAUDE.md rather than duplicating it', ()=>{
18
- const claude = buildAgentConfigFiles().find((file)=>file.fileName === 'CLAUDE.md');
19
- expect(claude?.content.trim()).toBe('@AGENTS.md');
20
- });
21
- });
22
-
23
- //# sourceMappingURL=agent-config.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/lib/agent-config.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { buildAgentConfigFiles } from './agent-config.js'\n\ndescribe('buildAgentConfigFiles', () => {\n it('should write both AGENTS.md and CLAUDE.md', () => {\n const fileNames = buildAgentConfigFiles().map((file) => file.fileName)\n\n expect(fileNames).toEqual(['AGENTS.md', 'CLAUDE.md'])\n })\n\n it('should point AGENTS.md at the skill inside node_modules', () => {\n const agents = buildAgentConfigFiles().find((file) => file.fileName === 'AGENTS.md')\n\n expect(agents?.content).toContain('# AI Agent')\n expect(agents?.content).toContain('node_modules/payload/skills/payload/SKILL.md')\n expect(agents?.content).not.toContain('.claude/skills')\n })\n\n it('should import AGENTS.md from CLAUDE.md rather than duplicating it', () => {\n const claude = buildAgentConfigFiles().find((file) => file.fileName === 'CLAUDE.md')\n\n expect(claude?.content.trim()).toBe('@AGENTS.md')\n })\n})\n"],"names":["describe","expect","it","buildAgentConfigFiles","fileNames","map","file","fileName","toEqual","agents","find","content","toContain","not","claude","trim","toBe"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,qBAAqB,QAAQ,oBAAmB;AAEzDH,SAAS,yBAAyB;IAChCE,GAAG,6CAA6C;QAC9C,MAAME,YAAYD,wBAAwBE,GAAG,CAAC,CAACC,OAASA,KAAKC,QAAQ;QAErEN,OAAOG,WAAWI,OAAO,CAAC;YAAC;YAAa;SAAY;IACtD;IAEAN,GAAG,2DAA2D;QAC5D,MAAMO,SAASN,wBAAwBO,IAAI,CAAC,CAACJ,OAASA,KAAKC,QAAQ,KAAK;QAExEN,OAAOQ,QAAQE,SAASC,SAAS,CAAC;QAClCX,OAAOQ,QAAQE,SAASC,SAAS,CAAC;QAClCX,OAAOQ,QAAQE,SAASE,GAAG,CAACD,SAAS,CAAC;IACxC;IAEAV,GAAG,qEAAqE;QACtE,MAAMY,SAASX,wBAAwBO,IAAI,CAAC,CAACJ,OAASA,KAAKC,QAAQ,KAAK;QAExEN,OAAOa,QAAQH,QAAQI,QAAQC,IAAI,CAAC;IACtC;AACF"}
@@ -1,139 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { preparePackageJson, updatePackageJson } from './package-json';
3
- import * as fs from 'fs';
4
- import * as path from 'path';
5
- import * as os from 'os';
6
- describe('updatePackageJson', ()=>{
7
- let tempDir;
8
- beforeEach(()=>{
9
- tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'payload-test-'));
10
- });
11
- afterEach(()=>{
12
- fs.rmSync(tempDir, {
13
- recursive: true,
14
- force: true
15
- });
16
- });
17
- it('updates database dependencies', ()=>{
18
- const pkgPath = path.join(tempDir, 'package.json');
19
- const originalPkg = {
20
- name: 'test-app',
21
- dependencies: {
22
- '@payloadcms/db-mongodb': '^3.0.0',
23
- payload: '^3.0.0'
24
- }
25
- };
26
- fs.writeFileSync(pkgPath, JSON.stringify(originalPkg, null, 2));
27
- updatePackageJson(pkgPath, {
28
- databaseAdapter: 'postgres'
29
- });
30
- const updated = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
31
- expect(updated.dependencies['@payloadcms/db-postgres']).toBeDefined();
32
- expect(updated.dependencies['@payloadcms/db-mongodb']).toBeUndefined();
33
- });
34
- it('removes sharp when requested', ()=>{
35
- const pkgPath = path.join(tempDir, 'package.json');
36
- const originalPkg = {
37
- name: 'test-app',
38
- dependencies: {
39
- payload: '^3.0.0',
40
- sharp: '^0.33.0'
41
- }
42
- };
43
- fs.writeFileSync(pkgPath, JSON.stringify(originalPkg, null, 2));
44
- updatePackageJson(pkgPath, {
45
- removeSharp: true
46
- });
47
- const updated = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
48
- expect(updated.dependencies.sharp).toBeUndefined();
49
- });
50
- it('should remove selected packages from dependencies and devDependencies', ()=>{
51
- const pkgPath = path.join(tempDir, 'package.json');
52
- const originalPkg = {
53
- name: 'test-app',
54
- scripts: {
55
- dev: 'vite'
56
- },
57
- dependencies: {
58
- '@tanstack/router-plugin': '^1.0.0',
59
- payload: '^4.0.0'
60
- },
61
- devDependencies: {
62
- '@tanstack/router-plugin': '^1.0.0',
63
- typescript: '^6.0.0'
64
- }
65
- };
66
- fs.writeFileSync(pkgPath, JSON.stringify(originalPkg, null, 2));
67
- updatePackageJson(pkgPath, {
68
- removeDependencies: [
69
- '@tanstack/router-plugin'
70
- ]
71
- });
72
- const updated = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
73
- expect(updated).toEqual({
74
- name: 'test-app',
75
- scripts: {
76
- dev: 'vite'
77
- },
78
- dependencies: {
79
- payload: '^4.0.0'
80
- },
81
- devDependencies: {
82
- typescript: '^6.0.0'
83
- }
84
- });
85
- });
86
- it('should prepare exact package content without writing to disk', ()=>{
87
- const pkgPath = path.join(tempDir, 'package.json');
88
- const original = JSON.stringify({
89
- dependencies: {
90
- '@tanstack/router-plugin': '^1.0.0',
91
- payload: '^4.0.0'
92
- },
93
- devDependencies: {
94
- '@tanstack/router-plugin': '^1.0.0',
95
- typescript: '^6.0.0'
96
- },
97
- name: 'router-app'
98
- }, null, 2);
99
- fs.writeFileSync(pkgPath, original);
100
- const prepared = preparePackageJson({
101
- filePath: pkgPath,
102
- options: {
103
- removeDependencies: [
104
- '@tanstack/router-plugin'
105
- ]
106
- }
107
- });
108
- expect(prepared).toEqual({
109
- content: `${JSON.stringify({
110
- dependencies: {
111
- payload: '^4.0.0'
112
- },
113
- devDependencies: {
114
- typescript: '^6.0.0'
115
- },
116
- name: 'router-app'
117
- }, null, 2)}\n`,
118
- filePath: pkgPath
119
- });
120
- expect(fs.readFileSync(pkgPath, 'utf8')).toBe(original);
121
- });
122
- it('updates package name', ()=>{
123
- const pkgPath = path.join(tempDir, 'package.json');
124
- const originalPkg = {
125
- name: 'template-name',
126
- dependencies: {
127
- payload: '^3.0.0'
128
- }
129
- };
130
- fs.writeFileSync(pkgPath, JSON.stringify(originalPkg, null, 2));
131
- updatePackageJson(pkgPath, {
132
- packageName: 'my-new-app'
133
- });
134
- const updated = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
135
- expect(updated.name).toBe('my-new-app');
136
- });
137
- });
138
-
139
- //# sourceMappingURL=package-json.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/lib/ast/package-json.spec.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, afterEach } from 'vitest'\nimport { preparePackageJson, updatePackageJson } from './package-json'\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport * as os from 'os'\n\ndescribe('updatePackageJson', () => {\n let tempDir: string\n\n beforeEach(() => {\n tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'payload-test-'))\n })\n\n afterEach(() => {\n fs.rmSync(tempDir, { recursive: true, force: true })\n })\n\n it('updates database dependencies', () => {\n const pkgPath = path.join(tempDir, 'package.json')\n const originalPkg = {\n name: 'test-app',\n dependencies: {\n '@payloadcms/db-mongodb': '^3.0.0',\n payload: '^3.0.0',\n },\n }\n fs.writeFileSync(pkgPath, JSON.stringify(originalPkg, null, 2))\n\n updatePackageJson(pkgPath, {\n databaseAdapter: 'postgres',\n })\n\n const updated = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'))\n expect(updated.dependencies['@payloadcms/db-postgres']).toBeDefined()\n expect(updated.dependencies['@payloadcms/db-mongodb']).toBeUndefined()\n })\n\n it('removes sharp when requested', () => {\n const pkgPath = path.join(tempDir, 'package.json')\n const originalPkg = {\n name: 'test-app',\n dependencies: {\n payload: '^3.0.0',\n sharp: '^0.33.0',\n },\n }\n fs.writeFileSync(pkgPath, JSON.stringify(originalPkg, null, 2))\n\n updatePackageJson(pkgPath, {\n removeSharp: true,\n })\n\n const updated = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'))\n expect(updated.dependencies.sharp).toBeUndefined()\n })\n\n it('should remove selected packages from dependencies and devDependencies', () => {\n const pkgPath = path.join(tempDir, 'package.json')\n const originalPkg = {\n name: 'test-app',\n scripts: {\n dev: 'vite',\n },\n dependencies: {\n '@tanstack/router-plugin': '^1.0.0',\n payload: '^4.0.0',\n },\n devDependencies: {\n '@tanstack/router-plugin': '^1.0.0',\n typescript: '^6.0.0',\n },\n }\n fs.writeFileSync(pkgPath, JSON.stringify(originalPkg, null, 2))\n\n updatePackageJson(pkgPath, {\n removeDependencies: ['@tanstack/router-plugin'],\n })\n\n const updated = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'))\n\n expect(updated).toEqual({\n name: 'test-app',\n scripts: {\n dev: 'vite',\n },\n dependencies: {\n payload: '^4.0.0',\n },\n devDependencies: {\n typescript: '^6.0.0',\n },\n })\n })\n\n it('should prepare exact package content without writing to disk', () => {\n const pkgPath = path.join(tempDir, 'package.json')\n const original = JSON.stringify(\n {\n dependencies: {\n '@tanstack/router-plugin': '^1.0.0',\n payload: '^4.0.0',\n },\n devDependencies: {\n '@tanstack/router-plugin': '^1.0.0',\n typescript: '^6.0.0',\n },\n name: 'router-app',\n },\n null,\n 2,\n )\n fs.writeFileSync(pkgPath, original)\n\n const prepared = preparePackageJson({\n filePath: pkgPath,\n options: { removeDependencies: ['@tanstack/router-plugin'] },\n })\n\n expect(prepared).toEqual({\n content: `${JSON.stringify(\n {\n dependencies: {\n payload: '^4.0.0',\n },\n devDependencies: {\n typescript: '^6.0.0',\n },\n name: 'router-app',\n },\n null,\n 2,\n )}\\n`,\n filePath: pkgPath,\n })\n expect(fs.readFileSync(pkgPath, 'utf8')).toBe(original)\n })\n\n it('updates package name', () => {\n const pkgPath = path.join(tempDir, 'package.json')\n const originalPkg = {\n name: 'template-name',\n dependencies: {\n payload: '^3.0.0',\n },\n }\n fs.writeFileSync(pkgPath, JSON.stringify(originalPkg, null, 2))\n\n updatePackageJson(pkgPath, {\n packageName: 'my-new-app',\n })\n\n const updated = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'))\n expect(updated.name).toBe('my-new-app')\n })\n})\n"],"names":["describe","it","expect","beforeEach","afterEach","preparePackageJson","updatePackageJson","fs","path","os","tempDir","mkdtempSync","join","tmpdir","rmSync","recursive","force","pkgPath","originalPkg","name","dependencies","payload","writeFileSync","JSON","stringify","databaseAdapter","updated","parse","readFileSync","toBeDefined","toBeUndefined","sharp","removeSharp","scripts","dev","devDependencies","typescript","removeDependencies","toEqual","original","prepared","filePath","options","content","toBe","packageName"],"mappings":"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"}