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.
- package/dist/template/src/app/(frontend)/styles.css +7 -0
- package/package.json +1 -1
- package/dist/ast-integration.spec.js +0 -132
- package/dist/ast-integration.spec.js.map +0 -1
- package/dist/lib/agent-config.spec.js +0 -23
- package/dist/lib/agent-config.spec.js.map +0 -1
- package/dist/lib/ast/package-json.spec.js +0 -139
- package/dist/lib/ast/package-json.spec.js.map +0 -1
- package/dist/lib/ast/payload-config.spec.js +0 -369
- package/dist/lib/ast/payload-config.spec.js.map +0 -1
- package/dist/lib/ast/utils.spec.js +0 -226
- package/dist/lib/ast/utils.spec.js.map +0 -1
- package/dist/lib/configure-payload-tsconfig.spec.js +0 -135
- package/dist/lib/configure-payload-tsconfig.spec.js.map +0 -1
- package/dist/lib/create-project.spec.js +0 -199
- package/dist/lib/create-project.spec.js.map +0 -1
- package/dist/lib/init-tanstack-default-template.spec.js +0 -121
- package/dist/lib/init-tanstack-default-template.spec.js.map +0 -1
- package/dist/lib/init-tanstack.spec.js +0 -394
- package/dist/lib/init-tanstack.spec.js.map +0 -1
- package/dist/lib/manage-env-files.spec.js +0 -118
- package/dist/lib/manage-env-files.spec.js.map +0 -1
- package/dist/lib/tanstack/detect.spec.js +0 -227
- package/dist/lib/tanstack/detect.spec.js.map +0 -1
- package/dist/lib/tanstack/prepare.spec.js +0 -288
- package/dist/lib/tanstack/prepare.spec.js.map +0 -1
- package/dist/lib/tanstack/transform-root-route.spec.js +0 -484
- package/dist/lib/tanstack/transform-root-route.spec.js.map +0 -1
- package/dist/lib/tanstack/transform-router.spec.js +0 -264
- package/dist/lib/tanstack/transform-router.spec.js.map +0 -1
- package/dist/lib/tanstack/transform-vite-config.spec.js +0 -456
- package/dist/lib/tanstack/transform-vite-config.spec.js.map +0 -1
- package/dist/lib/update-payload-in-project.spec.js +0 -262
- package/dist/lib/update-payload-in-project.spec.js.map +0 -1
- package/dist/lib/wrap-next-config.spec.js +0 -167
- package/dist/lib/wrap-next-config.spec.js.map +0 -1
- package/dist/main.spec.js +0 -102
- package/dist/main.spec.js.map +0 -1
- package/dist/utils/resolvePackageVersion.spec.js +0 -77
- 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,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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"}
|