create-payload-app 3.91.0-internal.c1569dc → 4.0.0-beta.0

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 (149) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +5 -0
  3. package/dist/commands.d.ts +4 -0
  4. package/dist/commands.d.ts.map +1 -0
  5. package/dist/commands.js +5 -0
  6. package/dist/commands.js.map +1 -0
  7. package/dist/lib/agent-config.d.ts +12 -0
  8. package/dist/lib/agent-config.d.ts.map +1 -0
  9. package/dist/lib/agent-config.js +15 -0
  10. package/dist/lib/agent-config.js.map +1 -0
  11. package/dist/lib/ast/adapter-config.d.ts.map +1 -1
  12. package/dist/lib/ast/adapter-config.js +0 -10
  13. package/dist/lib/ast/adapter-config.js.map +1 -1
  14. package/dist/lib/ast/package-json.d.ts +9 -0
  15. package/dist/lib/ast/package-json.d.ts.map +1 -1
  16. package/dist/lib/ast/package-json.js +34 -8
  17. package/dist/lib/ast/package-json.js.map +1 -1
  18. package/dist/lib/ast/payload-config.js +1 -1
  19. package/dist/lib/ast/payload-config.js.map +1 -1
  20. package/dist/lib/ast/types.d.ts +3 -3
  21. package/dist/lib/ast/types.d.ts.map +1 -1
  22. package/dist/lib/ast/types.js +0 -1
  23. package/dist/lib/ast/types.js.map +1 -1
  24. package/dist/lib/configure-payload-tsconfig.d.ts +5 -0
  25. package/dist/lib/configure-payload-tsconfig.d.ts.map +1 -0
  26. package/dist/lib/configure-payload-tsconfig.js +26 -0
  27. package/dist/lib/configure-payload-tsconfig.js.map +1 -0
  28. package/dist/lib/create-project.d.ts +1 -2
  29. package/dist/lib/create-project.d.ts.map +1 -1
  30. package/dist/lib/create-project.js +64 -79
  31. package/dist/lib/create-project.js.map +1 -1
  32. package/dist/lib/generate-secret.js +1 -1
  33. package/dist/lib/generate-secret.js.map +1 -1
  34. package/dist/lib/get-package-manager.d.ts +9 -0
  35. package/dist/lib/get-package-manager.d.ts.map +1 -1
  36. package/dist/lib/get-package-manager.js +20 -0
  37. package/dist/lib/get-package-manager.js.map +1 -1
  38. package/dist/lib/init-next.d.ts +6 -1
  39. package/dist/lib/init-next.d.ts.map +1 -1
  40. package/dist/lib/init-next.js +34 -41
  41. package/dist/lib/init-next.js.map +1 -1
  42. package/dist/lib/init-tanstack.d.ts +18 -0
  43. package/dist/lib/init-tanstack.d.ts.map +1 -0
  44. package/dist/lib/init-tanstack.js +149 -0
  45. package/dist/lib/init-tanstack.js.map +1 -0
  46. package/dist/lib/tanstack/detect.d.ts +5 -0
  47. package/dist/lib/tanstack/detect.d.ts.map +1 -0
  48. package/dist/lib/tanstack/detect.js +131 -0
  49. package/dist/lib/tanstack/detect.js.map +1 -0
  50. package/dist/lib/tanstack/prepare.d.ts +23 -0
  51. package/dist/lib/tanstack/prepare.d.ts.map +1 -0
  52. package/dist/lib/tanstack/prepare.js +114 -0
  53. package/dist/lib/tanstack/prepare.js.map +1 -0
  54. package/dist/lib/tanstack/template-files.d.ts +50 -0
  55. package/dist/lib/tanstack/template-files.d.ts.map +1 -0
  56. package/dist/lib/tanstack/template-files.js +64 -0
  57. package/dist/lib/tanstack/template-files.js.map +1 -0
  58. package/dist/lib/tanstack/transform-root-route.d.ts +7 -0
  59. package/dist/lib/tanstack/transform-root-route.d.ts.map +1 -0
  60. package/dist/lib/tanstack/transform-root-route.js +747 -0
  61. package/dist/lib/tanstack/transform-root-route.js.map +1 -0
  62. package/dist/lib/tanstack/transform-router.d.ts +5 -0
  63. package/dist/lib/tanstack/transform-router.d.ts.map +1 -0
  64. package/dist/lib/tanstack/transform-router.js +301 -0
  65. package/dist/lib/tanstack/transform-router.js.map +1 -0
  66. package/dist/lib/tanstack/transform-vite-config.d.ts +14 -0
  67. package/dist/lib/tanstack/transform-vite-config.d.ts.map +1 -0
  68. package/dist/lib/tanstack/transform-vite-config.js +576 -0
  69. package/dist/lib/tanstack/transform-vite-config.js.map +1 -0
  70. package/dist/lib/templates.d.ts.map +1 -1
  71. package/dist/lib/templates.js +11 -5
  72. package/dist/lib/templates.js.map +1 -1
  73. package/dist/lib/update-payload-in-project.d.ts +18 -3
  74. package/dist/lib/update-payload-in-project.d.ts.map +1 -1
  75. package/dist/lib/update-payload-in-project.js +102 -21
  76. package/dist/lib/update-payload-in-project.js.map +1 -1
  77. package/dist/lib/wrap-next-config.d.ts.map +1 -1
  78. package/dist/main.d.ts +20 -1
  79. package/dist/main.d.ts.map +1 -1
  80. package/dist/main.js +127 -36
  81. package/dist/main.js.map +1 -1
  82. package/dist/scripts/pack-template-files.js +18 -0
  83. package/dist/scripts/pack-template-files.js.map +1 -1
  84. package/dist/template/src/app/(frontend)/page.tsx +7 -4
  85. package/dist/template/src/app/(frontend)/styles.css +8 -1
  86. package/dist/template/src/app/(payload)/admin/[[...segments]]/not-found.tsx +1 -2
  87. package/dist/template/src/app/(payload)/admin/[[...segments]]/page.tsx +1 -2
  88. package/dist/template/src/app/(payload)/admin/importMap.js +30 -2
  89. package/dist/template/src/app/(payload)/api/[...slug]/route.ts +1 -2
  90. package/dist/template/src/app/(payload)/api/graphql/route.ts +1 -2
  91. package/dist/template/src/app/(payload)/api/graphql-playground/route.ts +1 -2
  92. package/dist/template/src/app/(payload)/custom.css +0 -0
  93. package/dist/template/src/app/(payload)/layout.tsx +9 -4
  94. package/dist/template/src/collections/Folders.ts +16 -0
  95. package/dist/template/src/collections/Media.ts +4 -0
  96. package/dist/template/src/collections/Tags.ts +16 -0
  97. package/dist/template/src/collections/Users.ts +1 -0
  98. package/dist/template/src/payload-types.ts +63 -9
  99. package/dist/template/src/payload.config.ts +14 -4
  100. package/dist/template-tanstack/routes/_payload/admin.$.tsx +25 -0
  101. package/dist/template-tanstack/routes/_payload/admin.index.tsx +25 -0
  102. package/dist/template-tanstack/routes/_payload/api.$.ts +11 -0
  103. package/dist/template-tanstack/routes/_payload/importMap.js +32 -0
  104. package/dist/template-tanstack/routes/_payload/server.functions.ts +50 -0
  105. package/dist/template-tanstack/routes/_payload.tsx +29 -0
  106. package/dist/template-tanstack/src/collections/Folders.ts +16 -0
  107. package/dist/template-tanstack/src/collections/Media.ts +20 -0
  108. package/dist/template-tanstack/src/collections/Tags.ts +16 -0
  109. package/dist/template-tanstack/src/collections/Users.ts +14 -0
  110. package/dist/template-tanstack/src/payload.config.ts +38 -0
  111. package/dist/types.d.ts +23 -4
  112. package/dist/types.d.ts.map +1 -1
  113. package/dist/types.js.map +1 -1
  114. package/dist/utils/messages.d.ts +1 -0
  115. package/dist/utils/messages.d.ts.map +1 -1
  116. package/dist/utils/messages.js +10 -6
  117. package/dist/utils/messages.js.map +1 -1
  118. package/dist/utils/resolvePackageVersion.d.ts +35 -0
  119. package/dist/utils/resolvePackageVersion.d.ts.map +1 -0
  120. package/dist/utils/resolvePackageVersion.js +62 -0
  121. package/dist/utils/resolvePackageVersion.js.map +1 -0
  122. package/package.json +8 -8
  123. package/dist/ast-integration.spec.js +0 -132
  124. package/dist/ast-integration.spec.js.map +0 -1
  125. package/dist/lib/ast/package-json.spec.js +0 -67
  126. package/dist/lib/ast/package-json.spec.js.map +0 -1
  127. package/dist/lib/ast/payload-config.spec.js +0 -365
  128. package/dist/lib/ast/payload-config.spec.js.map +0 -1
  129. package/dist/lib/ast/utils.spec.js +0 -226
  130. package/dist/lib/ast/utils.spec.js.map +0 -1
  131. package/dist/lib/create-project.spec.js +0 -190
  132. package/dist/lib/create-project.spec.js.map +0 -1
  133. package/dist/lib/download-skill.d.ts +0 -8
  134. package/dist/lib/download-skill.d.ts.map +0 -1
  135. package/dist/lib/download-skill.js +0 -35
  136. package/dist/lib/download-skill.js.map +0 -1
  137. package/dist/lib/manage-env-files.spec.js +0 -118
  138. package/dist/lib/manage-env-files.spec.js.map +0 -1
  139. package/dist/lib/select-agent.d.ts +0 -16
  140. package/dist/lib/select-agent.d.ts.map +0 -1
  141. package/dist/lib/select-agent.js +0 -67
  142. package/dist/lib/select-agent.js.map +0 -1
  143. package/dist/lib/wrap-next-config.spec.js +0 -167
  144. package/dist/lib/wrap-next-config.spec.js.map +0 -1
  145. package/dist/utils/getLatestPackageVersion.d.ts +0 -17
  146. package/dist/utils/getLatestPackageVersion.d.ts.map +0 -1
  147. package/dist/utils/getLatestPackageVersion.js +0 -20
  148. package/dist/utils/getLatestPackageVersion.js.map +0 -1
  149. /package/dist/{template/src/app/(payload)/custom.scss → template-tanstack/routes/_payload/custom.css} +0 -0
@@ -1,226 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { Project } from 'ts-morph';
3
- import { addImportDeclaration, cleanupOrphanedImports, findImportDeclaration, isNamedImportUsed, removeImportDeclaration, removeNamedImports } from './utils';
4
- describe('findImportDeclaration', ()=>{
5
- it('finds import by module specifier', ()=>{
6
- const project = new Project({
7
- useInMemoryFileSystem: true
8
- });
9
- const sourceFile = project.createSourceFile('test.ts', `import { buildConfig } from 'payload'
10
- import { mongooseAdapter } from '@payloadcms/db-mongodb'`);
11
- const result = findImportDeclaration({
12
- sourceFile,
13
- moduleSpecifier: '@payloadcms/db-mongodb'
14
- });
15
- expect(result).toBeDefined();
16
- expect(result?.getModuleSpecifierValue()).toBe('@payloadcms/db-mongodb');
17
- });
18
- });
19
- describe('addImportDeclaration', ()=>{
20
- it('adds new import when not present', ()=>{
21
- const project = new Project({
22
- useInMemoryFileSystem: true
23
- });
24
- const sourceFile = project.createSourceFile('test.ts', `import { buildConfig } from 'payload'`);
25
- const result = addImportDeclaration({
26
- sourceFile,
27
- moduleSpecifier: '@payloadcms/db-postgres',
28
- namedImports: [
29
- 'postgresAdapter'
30
- ]
31
- });
32
- const imports = result.getImportDeclarations();
33
- expect(imports).toHaveLength(2);
34
- expect(imports[1].getModuleSpecifierValue()).toBe('@payloadcms/db-postgres');
35
- expect(imports[1].getNamedImports()[0].getName()).toBe('postgresAdapter');
36
- });
37
- it('does not duplicate existing import', ()=>{
38
- const project = new Project({
39
- useInMemoryFileSystem: true
40
- });
41
- const sourceFile = project.createSourceFile('test.ts', `import { mongooseAdapter } from '@payloadcms/db-mongodb'`);
42
- const result = addImportDeclaration({
43
- sourceFile,
44
- moduleSpecifier: '@payloadcms/db-mongodb',
45
- namedImports: [
46
- 'mongooseAdapter'
47
- ]
48
- });
49
- const imports = result.getImportDeclarations();
50
- expect(imports).toHaveLength(1);
51
- });
52
- it('adds named import to existing module import', ()=>{
53
- const project = new Project({
54
- useInMemoryFileSystem: true
55
- });
56
- const sourceFile = project.createSourceFile('test.ts', `import { buildConfig } from 'payload'`);
57
- const result = addImportDeclaration({
58
- sourceFile,
59
- moduleSpecifier: 'payload',
60
- namedImports: [
61
- 'Field'
62
- ]
63
- });
64
- const imports = result.getImportDeclarations();
65
- expect(imports).toHaveLength(1);
66
- const namedImports = imports[0].getNamedImports().map((ni)=>ni.getName());
67
- expect(namedImports).toContain('buildConfig');
68
- expect(namedImports).toContain('Field');
69
- });
70
- });
71
- describe('removeImportDeclaration', ()=>{
72
- it('removes import by module specifier', ()=>{
73
- const project = new Project({
74
- useInMemoryFileSystem: true
75
- });
76
- const sourceFile = project.createSourceFile('test.ts', `import { buildConfig } from 'payload'
77
- import sharp from 'sharp'`);
78
- const result = removeImportDeclaration({
79
- sourceFile,
80
- moduleSpecifier: 'sharp'
81
- });
82
- expect(result.removedIndex).toBe(1);
83
- const imports = result.sourceFile.getImportDeclarations();
84
- expect(imports).toHaveLength(1);
85
- expect(imports[0].getModuleSpecifierValue()).toBe('payload');
86
- });
87
- it('returns undefined removedIndex when import not found', ()=>{
88
- const project = new Project({
89
- useInMemoryFileSystem: true
90
- });
91
- const sourceFile = project.createSourceFile('test.ts', `import { buildConfig } from 'payload'`);
92
- const result = removeImportDeclaration({
93
- sourceFile,
94
- moduleSpecifier: 'sharp'
95
- });
96
- expect(result.removedIndex).toBeUndefined();
97
- });
98
- });
99
- describe('removeNamedImports', ()=>{
100
- it('removes specific named imports', ()=>{
101
- const project = new Project({
102
- useInMemoryFileSystem: true
103
- });
104
- const sourceFile = project.createSourceFile('test.ts', `import { mongooseAdapter, SomeOtherType } from '@payloadcms/db-mongodb'`);
105
- const importDecl = findImportDeclaration({
106
- sourceFile,
107
- moduleSpecifier: '@payloadcms/db-mongodb'
108
- });
109
- const result = removeNamedImports({
110
- sourceFile,
111
- importDeclaration: importDecl,
112
- namedImportsToRemove: [
113
- 'mongooseAdapter'
114
- ]
115
- });
116
- expect(result.fullyRemoved).toBe(false);
117
- const imports = result.sourceFile.getImportDeclarations();
118
- expect(imports).toHaveLength(1);
119
- const namedImports = imports[0].getNamedImports().map((ni)=>ni.getName());
120
- expect(namedImports).toEqual([
121
- 'SomeOtherType'
122
- ]);
123
- });
124
- it('removes entire import when no named imports remain', ()=>{
125
- const project = new Project({
126
- useInMemoryFileSystem: true
127
- });
128
- const sourceFile = project.createSourceFile('test.ts', `import { buildConfig } from 'payload'
129
- import { mongooseAdapter } from '@payloadcms/db-mongodb'`);
130
- const importDecl = findImportDeclaration({
131
- sourceFile,
132
- moduleSpecifier: '@payloadcms/db-mongodb'
133
- });
134
- const result = removeNamedImports({
135
- sourceFile,
136
- importDeclaration: importDecl,
137
- namedImportsToRemove: [
138
- 'mongooseAdapter'
139
- ]
140
- });
141
- expect(result.fullyRemoved).toBe(true);
142
- expect(result.index).toBe(1);
143
- const imports = result.sourceFile.getImportDeclarations();
144
- expect(imports).toHaveLength(1);
145
- expect(imports[0].getModuleSpecifierValue()).toBe('payload');
146
- });
147
- });
148
- describe('isNamedImportUsed', ()=>{
149
- it('detects used import in code', ()=>{
150
- const project = new Project({
151
- useInMemoryFileSystem: true
152
- });
153
- const sourceFile = project.createSourceFile('test.ts', `import { mongooseAdapter } from '@payloadcms/db-mongodb'
154
-
155
- export default buildConfig({
156
- db: mongooseAdapter({ url: '' })
157
- })`);
158
- const isUsed = isNamedImportUsed(sourceFile, 'mongooseAdapter');
159
- expect(isUsed).toBe(true);
160
- });
161
- it('detects unused import', ()=>{
162
- const project = new Project({
163
- useInMemoryFileSystem: true
164
- });
165
- const sourceFile = project.createSourceFile('test.ts', `import { mongooseAdapter } from '@payloadcms/db-mongodb'
166
- import { postgresAdapter } from '@payloadcms/db-postgres'
167
-
168
- export default buildConfig({
169
- db: postgresAdapter({ url: '' })
170
- })`);
171
- const isUsed = isNamedImportUsed(sourceFile, 'mongooseAdapter');
172
- expect(isUsed).toBe(false);
173
- });
174
- });
175
- describe('cleanupOrphanedImports', ()=>{
176
- it('removes unused imports', ()=>{
177
- const project = new Project({
178
- useInMemoryFileSystem: true
179
- });
180
- const sourceFile = project.createSourceFile('test.ts', `import { mongooseAdapter } from '@payloadcms/db-mongodb'
181
- import { postgresAdapter } from '@payloadcms/db-postgres'
182
-
183
- export default buildConfig({
184
- db: postgresAdapter({ url: '' })
185
- })`);
186
- const result = cleanupOrphanedImports({
187
- sourceFile,
188
- moduleSpecifier: '@payloadcms/db-mongodb',
189
- importNames: [
190
- 'mongooseAdapter'
191
- ]
192
- });
193
- expect(result.removed).toEqual([
194
- 'mongooseAdapter'
195
- ]);
196
- expect(result.kept).toEqual([]);
197
- const imports = result.sourceFile.getImportDeclarations();
198
- expect(imports).toHaveLength(1);
199
- expect(imports[0].getModuleSpecifierValue()).toBe('@payloadcms/db-postgres');
200
- });
201
- it('keeps used imports', ()=>{
202
- const project = new Project({
203
- useInMemoryFileSystem: true
204
- });
205
- const sourceFile = project.createSourceFile('test.ts', `import { mongooseAdapter } from '@payloadcms/db-mongodb'
206
-
207
- export default buildConfig({
208
- db: mongooseAdapter({ url: '' })
209
- })`);
210
- const result = cleanupOrphanedImports({
211
- sourceFile,
212
- moduleSpecifier: '@payloadcms/db-mongodb',
213
- importNames: [
214
- 'mongooseAdapter'
215
- ]
216
- });
217
- expect(result.removed).toEqual([]);
218
- expect(result.kept).toEqual([
219
- 'mongooseAdapter'
220
- ]);
221
- const imports = result.sourceFile.getImportDeclarations();
222
- expect(imports).toHaveLength(1);
223
- });
224
- });
225
-
226
- //# sourceMappingURL=utils.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/lib/ast/utils.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport { Project } from 'ts-morph'\nimport {\n addImportDeclaration,\n cleanupOrphanedImports,\n findImportDeclaration,\n isNamedImportUsed,\n removeImportDeclaration,\n removeNamedImports,\n} from './utils'\n\ndescribe('findImportDeclaration', () => {\n it('finds import by module specifier', () => {\n const project = new Project({ useInMemoryFileSystem: true })\n const sourceFile = project.createSourceFile(\n 'test.ts',\n `import { buildConfig } from 'payload'\nimport { mongooseAdapter } from '@payloadcms/db-mongodb'`,\n )\n\n const result = findImportDeclaration({ sourceFile, moduleSpecifier: '@payloadcms/db-mongodb' })\n\n expect(result).toBeDefined()\n expect(result?.getModuleSpecifierValue()).toBe('@payloadcms/db-mongodb')\n })\n})\n\ndescribe('addImportDeclaration', () => {\n it('adds new import when not present', () => {\n const project = new Project({ useInMemoryFileSystem: true })\n const sourceFile = project.createSourceFile('test.ts', `import { buildConfig } from 'payload'`)\n\n const result = addImportDeclaration({\n sourceFile,\n moduleSpecifier: '@payloadcms/db-postgres',\n namedImports: ['postgresAdapter'],\n })\n\n const imports = result.getImportDeclarations()\n expect(imports).toHaveLength(2)\n expect(imports[1].getModuleSpecifierValue()).toBe('@payloadcms/db-postgres')\n expect(imports[1].getNamedImports()[0].getName()).toBe('postgresAdapter')\n })\n\n it('does not duplicate existing import', () => {\n const project = new Project({ useInMemoryFileSystem: true })\n const sourceFile = project.createSourceFile(\n 'test.ts',\n `import { mongooseAdapter } from '@payloadcms/db-mongodb'`,\n )\n\n const result = addImportDeclaration({\n sourceFile,\n moduleSpecifier: '@payloadcms/db-mongodb',\n namedImports: ['mongooseAdapter'],\n })\n\n const imports = result.getImportDeclarations()\n expect(imports).toHaveLength(1)\n })\n\n it('adds named import to existing module import', () => {\n const project = new Project({ useInMemoryFileSystem: true })\n const sourceFile = project.createSourceFile('test.ts', `import { buildConfig } from 'payload'`)\n\n const result = addImportDeclaration({\n sourceFile,\n moduleSpecifier: 'payload',\n namedImports: ['Field'],\n })\n\n const imports = result.getImportDeclarations()\n expect(imports).toHaveLength(1)\n const namedImports = imports[0].getNamedImports().map((ni) => ni.getName())\n expect(namedImports).toContain('buildConfig')\n expect(namedImports).toContain('Field')\n })\n})\n\ndescribe('removeImportDeclaration', () => {\n it('removes import by module specifier', () => {\n const project = new Project({ useInMemoryFileSystem: true })\n const sourceFile = project.createSourceFile(\n 'test.ts',\n `import { buildConfig } from 'payload'\nimport sharp from 'sharp'`,\n )\n\n const result = removeImportDeclaration({ sourceFile, moduleSpecifier: 'sharp' })\n\n expect(result.removedIndex).toBe(1)\n const imports = result.sourceFile.getImportDeclarations()\n expect(imports).toHaveLength(1)\n expect(imports[0].getModuleSpecifierValue()).toBe('payload')\n })\n\n it('returns undefined removedIndex when import not found', () => {\n const project = new Project({ useInMemoryFileSystem: true })\n const sourceFile = project.createSourceFile('test.ts', `import { buildConfig } from 'payload'`)\n\n const result = removeImportDeclaration({ sourceFile, moduleSpecifier: 'sharp' })\n\n expect(result.removedIndex).toBeUndefined()\n })\n})\n\ndescribe('removeNamedImports', () => {\n it('removes specific named imports', () => {\n const project = new Project({ useInMemoryFileSystem: true })\n const sourceFile = project.createSourceFile(\n 'test.ts',\n `import { mongooseAdapter, SomeOtherType } from '@payloadcms/db-mongodb'`,\n )\n\n const importDecl = findImportDeclaration({\n sourceFile,\n moduleSpecifier: '@payloadcms/db-mongodb',\n })!\n\n const result = removeNamedImports({\n sourceFile,\n importDeclaration: importDecl,\n namedImportsToRemove: ['mongooseAdapter'],\n })\n\n expect(result.fullyRemoved).toBe(false)\n const imports = result.sourceFile.getImportDeclarations()\n expect(imports).toHaveLength(1)\n const namedImports = imports[0].getNamedImports().map((ni) => ni.getName())\n expect(namedImports).toEqual(['SomeOtherType'])\n })\n\n it('removes entire import when no named imports remain', () => {\n const project = new Project({ useInMemoryFileSystem: true })\n const sourceFile = project.createSourceFile(\n 'test.ts',\n `import { buildConfig } from 'payload'\nimport { mongooseAdapter } from '@payloadcms/db-mongodb'`,\n )\n\n const importDecl = findImportDeclaration({\n sourceFile,\n moduleSpecifier: '@payloadcms/db-mongodb',\n })!\n\n const result = removeNamedImports({\n sourceFile,\n importDeclaration: importDecl,\n namedImportsToRemove: ['mongooseAdapter'],\n })\n\n expect(result.fullyRemoved).toBe(true)\n expect(result.index).toBe(1)\n const imports = result.sourceFile.getImportDeclarations()\n expect(imports).toHaveLength(1)\n expect(imports[0].getModuleSpecifierValue()).toBe('payload')\n })\n})\n\ndescribe('isNamedImportUsed', () => {\n it('detects used import in code', () => {\n const project = new Project({ useInMemoryFileSystem: true })\n const sourceFile = project.createSourceFile(\n 'test.ts',\n `import { mongooseAdapter } from '@payloadcms/db-mongodb'\n\nexport default buildConfig({\n db: mongooseAdapter({ url: '' })\n})`,\n )\n\n const isUsed = isNamedImportUsed(sourceFile, 'mongooseAdapter')\n\n expect(isUsed).toBe(true)\n })\n\n it('detects unused import', () => {\n const project = new Project({ useInMemoryFileSystem: true })\n const sourceFile = project.createSourceFile(\n 'test.ts',\n `import { mongooseAdapter } from '@payloadcms/db-mongodb'\nimport { postgresAdapter } from '@payloadcms/db-postgres'\n\nexport default buildConfig({\n db: postgresAdapter({ url: '' })\n})`,\n )\n\n const isUsed = isNamedImportUsed(sourceFile, 'mongooseAdapter')\n\n expect(isUsed).toBe(false)\n })\n})\n\ndescribe('cleanupOrphanedImports', () => {\n it('removes unused imports', () => {\n const project = new Project({ useInMemoryFileSystem: true })\n const sourceFile = project.createSourceFile(\n 'test.ts',\n `import { mongooseAdapter } from '@payloadcms/db-mongodb'\nimport { postgresAdapter } from '@payloadcms/db-postgres'\n\nexport default buildConfig({\n db: postgresAdapter({ url: '' })\n})`,\n )\n\n const result = cleanupOrphanedImports({\n sourceFile,\n moduleSpecifier: '@payloadcms/db-mongodb',\n importNames: ['mongooseAdapter'],\n })\n\n expect(result.removed).toEqual(['mongooseAdapter'])\n expect(result.kept).toEqual([])\n const imports = result.sourceFile.getImportDeclarations()\n expect(imports).toHaveLength(1)\n expect(imports[0].getModuleSpecifierValue()).toBe('@payloadcms/db-postgres')\n })\n\n it('keeps used imports', () => {\n const project = new Project({ useInMemoryFileSystem: true })\n const sourceFile = project.createSourceFile(\n 'test.ts',\n `import { mongooseAdapter } from '@payloadcms/db-mongodb'\n\nexport default buildConfig({\n db: mongooseAdapter({ url: '' })\n})`,\n )\n\n const result = cleanupOrphanedImports({\n sourceFile,\n moduleSpecifier: '@payloadcms/db-mongodb',\n importNames: ['mongooseAdapter'],\n })\n\n expect(result.removed).toEqual([])\n expect(result.kept).toEqual(['mongooseAdapter'])\n const imports = result.sourceFile.getImportDeclarations()\n expect(imports).toHaveLength(1)\n })\n})\n"],"names":["describe","it","expect","Project","addImportDeclaration","cleanupOrphanedImports","findImportDeclaration","isNamedImportUsed","removeImportDeclaration","removeNamedImports","project","useInMemoryFileSystem","sourceFile","createSourceFile","result","moduleSpecifier","toBeDefined","getModuleSpecifierValue","toBe","namedImports","imports","getImportDeclarations","toHaveLength","getNamedImports","getName","map","ni","toContain","removedIndex","toBeUndefined","importDecl","importDeclaration","namedImportsToRemove","fullyRemoved","toEqual","index","isUsed","importNames","removed","kept"],"mappings":"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"}
@@ -1,190 +0,0 @@
1
- import fs from 'fs';
2
- import fse from 'fs-extra';
3
- import globby from 'globby';
4
- import * as os from 'node:os';
5
- import path from 'path';
6
- import { afterEach, beforeAll, beforeEach, describe, expect, it, vitest } from 'vitest';
7
- import { createProject, updatePackageJSONDependencies } from './create-project.js';
8
- import { getValidTemplates } from './templates.js';
9
- describe('createProject', ()=>{
10
- let projectDir;
11
- beforeAll(()=>{
12
- // eslint-disable-next-line no-console
13
- console.log = vitest.fn();
14
- });
15
- beforeEach(()=>{
16
- const tempDirectory = fs.realpathSync(os.tmpdir());
17
- projectDir = `${tempDirectory}/${Math.random().toString(36).substring(7)}`;
18
- });
19
- afterEach(()=>{
20
- if (fse.existsSync(projectDir)) {
21
- fse.rmSync(projectDir, {
22
- recursive: true
23
- });
24
- }
25
- });
26
- describe('#createProject', ()=>{
27
- const args = {
28
- _: [
29
- 'project-name'
30
- ],
31
- '--db': 'mongodb',
32
- '--local-template': 'blank',
33
- '--no-deps': true
34
- };
35
- const packageManager = 'yarn';
36
- it('creates plugin template', async ()=>{
37
- const projectName = 'plugin';
38
- const template = {
39
- name: 'plugin',
40
- type: 'plugin',
41
- description: 'Template for creating a Payload plugin',
42
- url: 'https://github.com/payloadcms/payload/templates/plugin'
43
- };
44
- await createProject({
45
- cliArgs: {
46
- ...args,
47
- '--local-template': 'plugin'
48
- },
49
- packageManager,
50
- projectDir,
51
- projectName,
52
- template
53
- });
54
- const packageJsonPath = path.resolve(projectDir, 'package.json');
55
- const packageJson = fse.readJsonSync(packageJsonPath);
56
- // Check package name and description
57
- expect(packageJson.name).toStrictEqual(projectName);
58
- });
59
- it('updates project name in plugin template importMap file', async ()=>{
60
- const projectName = 'my-custom-plugin';
61
- const template = {
62
- name: 'plugin',
63
- type: 'plugin',
64
- description: 'Template for creating a Payload plugin',
65
- url: 'https://github.com/payloadcms/payload/templates/plugin'
66
- };
67
- await createProject({
68
- cliArgs: {
69
- ...args,
70
- '--local-template': 'plugin'
71
- },
72
- packageManager,
73
- projectDir,
74
- projectName,
75
- template
76
- });
77
- const importMapPath = path.resolve(projectDir, './dev/app/(payload)/admin/importMap.js');
78
- const importMapFile = fse.readFileSync(importMapPath, 'utf-8');
79
- expect(importMapFile).not.toContain('plugin-package-name-placeholder');
80
- expect(importMapFile).toContain('my-custom-plugin');
81
- });
82
- it('creates example', async ()=>{
83
- const projectName = 'custom-server-example';
84
- const example = {
85
- name: 'custom-server',
86
- url: 'https://github.com/payloadcms/payload/examples/custom-server#3.x'
87
- };
88
- await createProject({
89
- cliArgs: {
90
- ...args,
91
- '--local-template': undefined,
92
- '--local-example': 'custom-server'
93
- },
94
- packageManager,
95
- projectDir,
96
- projectName,
97
- example
98
- });
99
- const packageJsonPath = path.resolve(projectDir, 'package.json');
100
- const packageJson = fse.readJsonSync(packageJsonPath);
101
- // Check package name and description
102
- expect(packageJson.name).toStrictEqual(projectName);
103
- }, 90_000);
104
- describe('creates project from template', ()=>{
105
- const templates = getValidTemplates();
106
- it.each([
107
- [
108
- 'blank',
109
- 'mongodb'
110
- ],
111
- [
112
- 'blank',
113
- 'postgres'
114
- ]
115
- ])('update config and deps: %s, %s', async (templateName, db)=>{
116
- const projectName = 'starter-project';
117
- const template = templates.find((t)=>t.name === templateName);
118
- const cliArgs = {
119
- ...args,
120
- '--db': db,
121
- '--local-template': templateName
122
- };
123
- await createProject({
124
- cliArgs,
125
- dbDetails: {
126
- type: db,
127
- dbUri: `${db}://localhost:27017/create-project-test`
128
- },
129
- packageManager,
130
- projectDir,
131
- projectName,
132
- template: template
133
- });
134
- const packageJsonPath = path.resolve(projectDir, 'package.json');
135
- const packageJson = fse.readJsonSync(packageJsonPath);
136
- // Verify git was initialized
137
- expect(fse.existsSync(path.resolve(projectDir, '.git'))).toBe(true);
138
- // Should only have one db adapter
139
- expect(Object.keys(packageJson.dependencies).filter((n)=>n.startsWith('@payloadcms/db-'))).toHaveLength(1);
140
- const payloadConfigPath = (await globby('**/payload.config.ts', {
141
- absolute: true,
142
- cwd: projectDir
143
- }))?.[0];
144
- const content = fse.readFileSync(payloadConfigPath, 'utf-8');
145
- // Check payload.config.ts doesn't have placeholder comments
146
- expect(content).not.toContain('// database-adapter-import');
147
- expect(content).not.toContain('// database-adapter-config-start');
148
- expect(content).not.toContain('// database-adapter-config-end');
149
- // Verify correct adapter import and usage based on db type
150
- if (db === 'mongodb') {
151
- expect(content).toContain("import { mongooseAdapter } from '@payloadcms/db-mongodb'");
152
- expect(content).toContain('mongooseAdapter');
153
- } else if (db === 'postgres') {
154
- expect(content).toContain("import { postgresAdapter } from '@payloadcms/db-postgres'");
155
- expect(content).toContain('postgresAdapter');
156
- }
157
- });
158
- });
159
- describe('updates package.json', ()=>{
160
- it('updates package name and bumps workspace versions', async ()=>{
161
- const latestVersion = '3.0.0';
162
- const initialJSON = {
163
- name: 'test-project',
164
- version: '1.0.0',
165
- dependencies: {
166
- '@payloadcms/db-mongodb': 'workspace:*',
167
- payload: 'workspace:*',
168
- '@payloadcms/ui': 'workspace:*'
169
- }
170
- };
171
- const correctlyModifiedJSON = {
172
- name: 'test-project',
173
- version: '1.0.0',
174
- dependencies: {
175
- '@payloadcms/db-mongodb': `${latestVersion}`,
176
- payload: `${latestVersion}`,
177
- '@payloadcms/ui': `${latestVersion}`
178
- }
179
- };
180
- updatePackageJSONDependencies({
181
- latestVersion,
182
- packageJson: initialJSON
183
- });
184
- expect(initialJSON).toEqual(correctlyModifiedJSON);
185
- });
186
- });
187
- });
188
- });
189
-
190
- //# sourceMappingURL=create-project.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/lib/create-project.spec.ts"],"sourcesContent":["import fs from 'fs'\nimport fse from 'fs-extra'\nimport globby from 'globby'\nimport * as os from 'node:os'\nimport path from 'path'\nimport { afterEach, beforeAll, beforeEach, describe, expect, it, vitest } from 'vitest'\nimport type { CliArgs, DbType, ProjectExample, ProjectTemplate } from '../types.js'\n\nimport { createProject, updatePackageJSONDependencies } from './create-project.js'\nimport { getValidTemplates } from './templates.js'\n\ndescribe('createProject', () => {\n let projectDir: string\n\n beforeAll(() => {\n // eslint-disable-next-line no-console\n console.log = vitest.fn()\n })\n\n beforeEach(() => {\n const tempDirectory = fs.realpathSync(os.tmpdir())\n projectDir = `${tempDirectory}/${Math.random().toString(36).substring(7)}`\n })\n\n afterEach(() => {\n if (fse.existsSync(projectDir)) {\n fse.rmSync(projectDir, { recursive: true })\n }\n })\n\n describe('#createProject', () => {\n const args = {\n _: ['project-name'],\n '--db': 'mongodb',\n '--local-template': 'blank',\n '--no-deps': true,\n } as CliArgs\n const packageManager = 'yarn'\n\n it('creates plugin template', async () => {\n const projectName = 'plugin'\n const template: ProjectTemplate = {\n name: 'plugin',\n type: 'plugin',\n description: 'Template for creating a Payload plugin',\n url: 'https://github.com/payloadcms/payload/templates/plugin',\n }\n\n await createProject({\n cliArgs: { ...args, '--local-template': 'plugin' } as CliArgs,\n packageManager,\n projectDir,\n projectName,\n template,\n })\n\n const packageJsonPath = path.resolve(projectDir, 'package.json')\n const packageJson = fse.readJsonSync(packageJsonPath)\n\n // Check package name and description\n expect(packageJson.name).toStrictEqual(projectName)\n })\n\n it('updates project name in plugin template importMap file', async () => {\n const projectName = 'my-custom-plugin'\n const template: ProjectTemplate = {\n name: 'plugin',\n type: 'plugin',\n description: 'Template for creating a Payload plugin',\n url: 'https://github.com/payloadcms/payload/templates/plugin',\n }\n\n await createProject({\n cliArgs: { ...args, '--local-template': 'plugin' } as CliArgs,\n packageManager,\n projectDir,\n projectName,\n template,\n })\n\n const importMapPath = path.resolve(projectDir, './dev/app/(payload)/admin/importMap.js')\n const importMapFile = fse.readFileSync(importMapPath, 'utf-8')\n\n expect(importMapFile).not.toContain('plugin-package-name-placeholder')\n expect(importMapFile).toContain('my-custom-plugin')\n })\n\n it('creates example', async () => {\n const projectName = 'custom-server-example'\n const example: ProjectExample = {\n name: 'custom-server',\n url: 'https://github.com/payloadcms/payload/examples/custom-server#3.x',\n }\n\n await createProject({\n cliArgs: {\n ...args,\n '--local-template': undefined,\n '--local-example': 'custom-server',\n } as CliArgs,\n packageManager,\n projectDir,\n projectName,\n example,\n })\n\n const packageJsonPath = path.resolve(projectDir, 'package.json')\n const packageJson = fse.readJsonSync(packageJsonPath)\n\n // Check package name and description\n expect(packageJson.name).toStrictEqual(projectName)\n }, 90_000)\n\n describe('creates project from template', () => {\n const templates = getValidTemplates()\n\n it.each([\n ['blank', 'mongodb'],\n ['blank', 'postgres'],\n\n // TODO: Re-enable these once 3.0 is stable and templates updated\n // ['website', 'mongodb'],\n // ['website', 'postgres'],\n // ['ecommerce', 'mongodb'],\n // ['ecommerce', 'postgres'],\n ])('update config and deps: %s, %s', async (templateName, db) => {\n const projectName = 'starter-project'\n\n const template = templates.find((t) => t.name === templateName)\n\n const cliArgs = {\n ...args,\n '--db': db,\n '--local-template': templateName,\n } as CliArgs\n\n await createProject({\n cliArgs,\n dbDetails: {\n type: db as DbType,\n dbUri: `${db}://localhost:27017/create-project-test`,\n },\n packageManager,\n projectDir,\n projectName,\n template: template as ProjectTemplate,\n })\n\n const packageJsonPath = path.resolve(projectDir, 'package.json')\n const packageJson = fse.readJsonSync(packageJsonPath)\n\n // Verify git was initialized\n expect(fse.existsSync(path.resolve(projectDir, '.git'))).toBe(true)\n\n // Should only have one db adapter\n expect(\n Object.keys(packageJson.dependencies).filter((n) => n.startsWith('@payloadcms/db-')),\n ).toHaveLength(1)\n\n const payloadConfigPath = (\n await globby('**/payload.config.ts', {\n absolute: true,\n cwd: projectDir,\n })\n )?.[0]\n\n const content = fse.readFileSync(payloadConfigPath, 'utf-8')\n\n // Check payload.config.ts doesn't have placeholder comments\n expect(content).not.toContain('// database-adapter-import')\n expect(content).not.toContain('// database-adapter-config-start')\n expect(content).not.toContain('// database-adapter-config-end')\n\n // Verify correct adapter import and usage based on db type\n if (db === 'mongodb') {\n expect(content).toContain(\"import { mongooseAdapter } from '@payloadcms/db-mongodb'\")\n expect(content).toContain('mongooseAdapter')\n } else if (db === 'postgres') {\n expect(content).toContain(\"import { postgresAdapter } from '@payloadcms/db-postgres'\")\n expect(content).toContain('postgresAdapter')\n }\n })\n })\n\n describe('updates package.json', () => {\n it('updates package name and bumps workspace versions', async () => {\n const latestVersion = '3.0.0'\n const initialJSON = {\n name: 'test-project',\n version: '1.0.0',\n dependencies: {\n '@payloadcms/db-mongodb': 'workspace:*',\n payload: 'workspace:*',\n '@payloadcms/ui': 'workspace:*',\n },\n }\n\n const correctlyModifiedJSON = {\n name: 'test-project',\n version: '1.0.0',\n dependencies: {\n '@payloadcms/db-mongodb': `${latestVersion}`,\n payload: `${latestVersion}`,\n '@payloadcms/ui': `${latestVersion}`,\n },\n }\n\n updatePackageJSONDependencies({\n latestVersion,\n packageJson: initialJSON,\n })\n\n expect(initialJSON).toEqual(correctlyModifiedJSON)\n })\n })\n })\n})\n"],"names":["fs","fse","globby","os","path","afterEach","beforeAll","beforeEach","describe","expect","it","vitest","createProject","updatePackageJSONDependencies","getValidTemplates","projectDir","console","log","fn","tempDirectory","realpathSync","tmpdir","Math","random","toString","substring","existsSync","rmSync","recursive","args","_","packageManager","projectName","template","name","type","description","url","cliArgs","packageJsonPath","resolve","packageJson","readJsonSync","toStrictEqual","importMapPath","importMapFile","readFileSync","not","toContain","example","undefined","templates","each","templateName","db","find","t","dbDetails","dbUri","toBe","Object","keys","dependencies","filter","n","startsWith","toHaveLength","payloadConfigPath","absolute","cwd","content","latestVersion","initialJSON","version","payload","correctlyModifiedJSON","toEqual"],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { AgentType } from '../types.js';
2
- export declare function downloadSkill(args: {
3
- agentType: AgentType;
4
- branch?: string;
5
- debug?: boolean;
6
- projectDir: string;
7
- }): Promise<void>;
8
- //# sourceMappingURL=download-skill.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"download-skill.d.ts","sourceRoot":"","sources":["../../src/lib/download-skill.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAK5C,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoChB"}
@@ -1,35 +0,0 @@
1
- import fse from 'fs-extra';
2
- import { Readable } from 'node:stream';
3
- import { pipeline } from 'node:stream/promises';
4
- import path from 'path';
5
- import { x } from 'tar';
6
- import { debug as debugLog } from '../utils/log.js';
7
- import { getSkillsDir } from './select-agent.js';
8
- export async function downloadSkill(args) {
9
- const { agentType, branch = '3.x', debug, projectDir } = args;
10
- const skillsDir = getSkillsDir(agentType);
11
- const destDir = path.join(projectDir, skillsDir, 'payload');
12
- await fse.mkdirp(destDir);
13
- const url = `https://codeload.github.com/payloadcms/payload/tar.gz/${branch}`;
14
- const filter = `payload-${branch.replace(/^v/, '').replaceAll('/', '-')}/tools/claude-plugin/skills/payload/`;
15
- if (debug) {
16
- debugLog(`Downloading skill for agent: ${agentType}`);
17
- debugLog(`Skill codeload url: ${url}`);
18
- debugLog(`Skill filter: ${filter}`);
19
- debugLog(`Skill destination: ${destDir}`);
20
- }
21
- const res = await fetch(url);
22
- if (!res.ok) {
23
- throw new Error(`Failed to download skill: ${res.status} ${res.statusText} from ${url}`);
24
- }
25
- if (!res.body) {
26
- throw new Error(`Failed to download skill: empty response from ${url}`);
27
- }
28
- await pipeline(Readable.from(res.body), x({
29
- cwd: destDir,
30
- filter: (p)=>p.includes(filter),
31
- strip: filter.split('/').length - 1
32
- }));
33
- }
34
-
35
- //# sourceMappingURL=download-skill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/lib/download-skill.ts"],"sourcesContent":["import fse from 'fs-extra'\nimport { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream/promises'\nimport path from 'path'\nimport { x } from 'tar'\n\nimport type { AgentType } from '../types.js'\n\nimport { debug as debugLog } from '../utils/log.js'\nimport { getSkillsDir } from './select-agent.js'\n\nexport async function downloadSkill(args: {\n agentType: AgentType\n branch?: string\n debug?: boolean\n projectDir: string\n}): Promise<void> {\n const { agentType, branch = '3.x', debug, projectDir } = args\n\n const skillsDir = getSkillsDir(agentType)\n const destDir = path.join(projectDir, skillsDir, 'payload')\n\n await fse.mkdirp(destDir)\n\n const url = `https://codeload.github.com/payloadcms/payload/tar.gz/${branch}`\n const filter = `payload-${branch.replace(/^v/, '').replaceAll('/', '-')}/tools/claude-plugin/skills/payload/`\n\n if (debug) {\n debugLog(`Downloading skill for agent: ${agentType}`)\n debugLog(`Skill codeload url: ${url}`)\n debugLog(`Skill filter: ${filter}`)\n debugLog(`Skill destination: ${destDir}`)\n }\n\n const res = await fetch(url)\n\n if (!res.ok) {\n throw new Error(`Failed to download skill: ${res.status} ${res.statusText} from ${url}`)\n }\n\n if (!res.body) {\n throw new Error(`Failed to download skill: empty response from ${url}`)\n }\n\n await pipeline(\n Readable.from(res.body as unknown as NodeJS.ReadableStream),\n x({\n cwd: destDir,\n filter: (p) => p.includes(filter),\n strip: filter.split('/').length - 1,\n }),\n )\n}\n"],"names":["fse","Readable","pipeline","path","x","debug","debugLog","getSkillsDir","downloadSkill","args","agentType","branch","projectDir","skillsDir","destDir","join","mkdirp","url","filter","replace","replaceAll","res","fetch","ok","Error","status","statusText","body","from","cwd","p","includes","strip","split","length"],"mappings":"AAAA,OAAOA,SAAS,WAAU;AAC1B,SAASC,QAAQ,QAAQ,cAAa;AACtC,SAASC,QAAQ,QAAQ,uBAAsB;AAC/C,OAAOC,UAAU,OAAM;AACvB,SAASC,CAAC,QAAQ,MAAK;AAIvB,SAASC,SAASC,QAAQ,QAAQ,kBAAiB;AACnD,SAASC,YAAY,QAAQ,oBAAmB;AAEhD,OAAO,eAAeC,cAAcC,IAKnC;IACC,MAAM,EAAEC,SAAS,EAAEC,SAAS,KAAK,EAAEN,KAAK,EAAEO,UAAU,EAAE,GAAGH;IAEzD,MAAMI,YAAYN,aAAaG;IAC/B,MAAMI,UAAUX,KAAKY,IAAI,CAACH,YAAYC,WAAW;IAEjD,MAAMb,IAAIgB,MAAM,CAACF;IAEjB,MAAMG,MAAM,CAAC,sDAAsD,EAAEN,QAAQ;IAC7E,MAAMO,SAAS,CAAC,QAAQ,EAAEP,OAAOQ,OAAO,CAAC,MAAM,IAAIC,UAAU,CAAC,KAAK,KAAK,oCAAoC,CAAC;IAE7G,IAAIf,OAAO;QACTC,SAAS,CAAC,6BAA6B,EAAEI,WAAW;QACpDJ,SAAS,CAAC,oBAAoB,EAAEW,KAAK;QACrCX,SAAS,CAAC,cAAc,EAAEY,QAAQ;QAClCZ,SAAS,CAAC,mBAAmB,EAAEQ,SAAS;IAC1C;IAEA,MAAMO,MAAM,MAAMC,MAAML;IAExB,IAAI,CAACI,IAAIE,EAAE,EAAE;QACX,MAAM,IAAIC,MAAM,CAAC,0BAA0B,EAAEH,IAAII,MAAM,CAAC,CAAC,EAAEJ,IAAIK,UAAU,CAAC,MAAM,EAAET,KAAK;IACzF;IAEA,IAAI,CAACI,IAAIM,IAAI,EAAE;QACb,MAAM,IAAIH,MAAM,CAAC,8CAA8C,EAAEP,KAAK;IACxE;IAEA,MAAMf,SACJD,SAAS2B,IAAI,CAACP,IAAIM,IAAI,GACtBvB,EAAE;QACAyB,KAAKf;QACLI,QAAQ,CAACY,IAAMA,EAAEC,QAAQ,CAACb;QAC1Bc,OAAOd,OAAOe,KAAK,CAAC,KAAKC,MAAM,GAAG;IACpC;AAEJ"}
@@ -1,118 +0,0 @@
1
- import fs from 'fs';
2
- import fse from 'fs-extra';
3
- import * as os from 'node:os';
4
- import path from 'path';
5
- import { afterEach, beforeAll, beforeEach, describe, expect, it, vitest } from 'vitest';
6
- import { manageEnvFiles } from './manage-env-files.js';
7
- describe('createProject', ()=>{
8
- let projectDir;
9
- let envFilePath = '';
10
- let envExampleFilePath = '';
11
- beforeAll(()=>{
12
- // eslint-disable-next-line no-console
13
- console.log = vitest.fn();
14
- });
15
- beforeEach(()=>{
16
- const tempDirectory = fs.realpathSync(os.tmpdir());
17
- projectDir = `${tempDirectory}/${Math.random().toString(36).substring(7)}`;
18
- envFilePath = path.join(projectDir, '.env');
19
- envExampleFilePath = path.join(projectDir, '.env.example');
20
- if (fse.existsSync(envFilePath)) {
21
- fse.removeSync(envFilePath);
22
- }
23
- fse.ensureDirSync(projectDir);
24
- });
25
- afterEach(()=>{
26
- if (fse.existsSync(projectDir)) {
27
- fse.rmSync(projectDir, {
28
- recursive: true
29
- });
30
- }
31
- });
32
- it('generates .env using defaults (not from .env.example)', async ()=>{
33
- // ensure no .env.example exists so that the default values are used
34
- // the `manageEnvFiles` function will look for .env.example in the file system
35
- if (fse.existsSync(envExampleFilePath)) {
36
- fse.removeSync(envExampleFilePath);
37
- }
38
- await manageEnvFiles({
39
- cliArgs: {
40
- '--debug': true
41
- },
42
- databaseUri: '',
43
- payloadSecret: '',
44
- projectDir,
45
- template: undefined
46
- });
47
- expect(fse.existsSync(envFilePath)).toBe(true);
48
- const updatedEnvContent = fse.readFileSync(envFilePath, 'utf-8');
49
- expect(updatedEnvContent).toBe(`# Added by Payload\nPAYLOAD_SECRET=YOUR_SECRET_HERE\nDATABASE_URL=your-connection-string-here`);
50
- });
51
- it('generates .env from .env.example', async ()=>{
52
- // create or override the .env.example file with a connection string that will NOT be overridden
53
- fse.ensureFileSync(envExampleFilePath);
54
- fse.writeFileSync(envExampleFilePath, `DATABASE_URL=example-connection-string\nCUSTOM_VAR=custom-value\n`);
55
- await manageEnvFiles({
56
- cliArgs: {
57
- '--debug': true
58
- },
59
- databaseUri: '',
60
- payloadSecret: '',
61
- projectDir,
62
- template: undefined
63
- });
64
- expect(fse.existsSync(envFilePath)).toBe(true);
65
- const updatedEnvContent = fse.readFileSync(envFilePath, 'utf-8');
66
- expect(updatedEnvContent).toBe(`DATABASE_URL=example-connection-string\nCUSTOM_VAR=custom-value\nPAYLOAD_SECRET=YOUR_SECRET_HERE\n# Added by Payload`);
67
- });
68
- it('updates existing .env without overriding vars', async ()=>{
69
- // create an existing .env file with some custom variables that should NOT be overridden
70
- fse.ensureFileSync(envFilePath);
71
- fse.writeFileSync(envFilePath, `CUSTOM_VAR=custom-value\nDATABASE_URL=example-connection-string\n`);
72
- // create an .env.example file to ensure that its contents DO NOT override existing .env vars
73
- fse.ensureFileSync(envExampleFilePath);
74
- fse.writeFileSync(envExampleFilePath, `CUSTOM_VAR=custom-value-2\nDATABASE_URL=example-connection-string-2\n`);
75
- await manageEnvFiles({
76
- cliArgs: {
77
- '--debug': true
78
- },
79
- databaseUri: '',
80
- payloadSecret: '',
81
- projectDir,
82
- template: undefined
83
- });
84
- expect(fse.existsSync(envFilePath)).toBe(true);
85
- const updatedEnvContent = fse.readFileSync(envFilePath, 'utf-8');
86
- expect(updatedEnvContent).toBe(`# Added by Payload\nPAYLOAD_SECRET=YOUR_SECRET_HERE\nDATABASE_URL=example-connection-string\nCUSTOM_VAR=custom-value`);
87
- });
88
- it('sanitizes .env based on selected database type', async ()=>{
89
- await manageEnvFiles({
90
- cliArgs: {
91
- '--debug': true
92
- },
93
- databaseType: 'mongodb',
94
- databaseUri: 'mongodb://localhost:27017/test',
95
- payloadSecret: 'test-secret',
96
- projectDir,
97
- template: undefined
98
- });
99
- const updatedEnvContent = fse.readFileSync(envFilePath, 'utf-8');
100
- expect(updatedEnvContent).toBe(`# Added by Payload\nPAYLOAD_SECRET=test-secret\nDATABASE_URL=mongodb://localhost:27017/test`);
101
- // delete the generated .env file and do it again, but this time, omit the databaseUri to ensure the default is generated
102
- fse.removeSync(envFilePath);
103
- await manageEnvFiles({
104
- cliArgs: {
105
- '--debug': true
106
- },
107
- databaseType: 'mongodb',
108
- databaseUri: '',
109
- payloadSecret: 'test-secret',
110
- projectDir,
111
- template: undefined
112
- });
113
- const updatedEnvContentWithDefault = fse.readFileSync(envFilePath, 'utf-8');
114
- expect(updatedEnvContentWithDefault).toBe(`# Added by Payload\nPAYLOAD_SECRET=test-secret\nDATABASE_URL=mongodb://127.0.0.1/your-database-name`);
115
- });
116
- });
117
-
118
- //# sourceMappingURL=manage-env-files.spec.js.map