create-payload-app 4.0.0-internal.fa345ef → 4.0.0-internal.fec2230
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/README.md +5 -0
- package/dist/commands.d.ts +4 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +5 -0
- package/dist/commands.js.map +1 -0
- package/dist/lib/agent-config.d.ts +15 -0
- package/dist/lib/agent-config.d.ts.map +1 -0
- package/dist/lib/agent-config.js +22 -0
- package/dist/lib/agent-config.js.map +1 -0
- package/dist/lib/agent-config.spec.js +23 -0
- package/dist/lib/agent-config.spec.js.map +1 -0
- package/dist/lib/ast/adapter-config.d.ts.map +1 -1
- package/dist/lib/ast/adapter-config.js +0 -10
- package/dist/lib/ast/adapter-config.js.map +1 -1
- package/dist/lib/ast/package-json.d.ts +9 -0
- package/dist/lib/ast/package-json.d.ts.map +1 -1
- package/dist/lib/ast/package-json.js +34 -8
- package/dist/lib/ast/package-json.js.map +1 -1
- package/dist/lib/ast/package-json.spec.js +73 -1
- package/dist/lib/ast/package-json.spec.js.map +1 -1
- package/dist/lib/ast/types.d.ts +2 -2
- package/dist/lib/ast/types.d.ts.map +1 -1
- package/dist/lib/ast/types.js +0 -1
- package/dist/lib/ast/types.js.map +1 -1
- package/dist/lib/configure-payload-tsconfig.d.ts +5 -0
- package/dist/lib/configure-payload-tsconfig.d.ts.map +1 -0
- package/dist/lib/configure-payload-tsconfig.js +26 -0
- package/dist/lib/configure-payload-tsconfig.js.map +1 -0
- package/dist/lib/configure-payload-tsconfig.spec.js +135 -0
- package/dist/lib/configure-payload-tsconfig.spec.js.map +1 -0
- package/dist/lib/configure-plugin-project.d.ts.map +1 -1
- package/dist/lib/create-project.d.ts +1 -2
- package/dist/lib/create-project.d.ts.map +1 -1
- package/dist/lib/create-project.js +5 -21
- package/dist/lib/create-project.js.map +1 -1
- package/dist/lib/create-project.spec.js +9 -0
- package/dist/lib/create-project.spec.js.map +1 -1
- package/dist/lib/generate-secret.js +1 -1
- package/dist/lib/generate-secret.js.map +1 -1
- package/dist/lib/init-next.d.ts.map +1 -1
- package/dist/lib/init-next.js +5 -34
- package/dist/lib/init-next.js.map +1 -1
- package/dist/lib/init-tanstack-default-template.spec.js +121 -0
- package/dist/lib/init-tanstack-default-template.spec.js.map +1 -0
- package/dist/lib/init-tanstack.d.ts +18 -0
- package/dist/lib/init-tanstack.d.ts.map +1 -0
- package/dist/lib/init-tanstack.js +150 -0
- package/dist/lib/init-tanstack.js.map +1 -0
- package/dist/lib/init-tanstack.spec.js +394 -0
- package/dist/lib/init-tanstack.spec.js.map +1 -0
- package/dist/lib/tanstack/detect.d.ts +5 -0
- package/dist/lib/tanstack/detect.d.ts.map +1 -0
- package/dist/lib/tanstack/detect.js +131 -0
- package/dist/lib/tanstack/detect.js.map +1 -0
- package/dist/lib/tanstack/detect.spec.js +227 -0
- package/dist/lib/tanstack/detect.spec.js.map +1 -0
- package/dist/lib/tanstack/prepare.d.ts +23 -0
- package/dist/lib/tanstack/prepare.d.ts.map +1 -0
- package/dist/lib/tanstack/prepare.js +114 -0
- package/dist/lib/tanstack/prepare.js.map +1 -0
- package/dist/lib/tanstack/prepare.spec.js +288 -0
- package/dist/lib/tanstack/prepare.spec.js.map +1 -0
- package/dist/lib/tanstack/template-files.d.ts +50 -0
- package/dist/lib/tanstack/template-files.d.ts.map +1 -0
- package/dist/lib/tanstack/template-files.js +64 -0
- package/dist/lib/tanstack/template-files.js.map +1 -0
- package/dist/lib/tanstack/transform-root-route.d.ts +7 -0
- package/dist/lib/tanstack/transform-root-route.d.ts.map +1 -0
- package/dist/lib/tanstack/transform-root-route.js +747 -0
- package/dist/lib/tanstack/transform-root-route.js.map +1 -0
- package/dist/lib/tanstack/transform-root-route.spec.js +484 -0
- package/dist/lib/tanstack/transform-root-route.spec.js.map +1 -0
- package/dist/lib/tanstack/transform-router.d.ts +5 -0
- package/dist/lib/tanstack/transform-router.d.ts.map +1 -0
- package/dist/lib/tanstack/transform-router.js +301 -0
- package/dist/lib/tanstack/transform-router.js.map +1 -0
- package/dist/lib/tanstack/transform-router.spec.js +264 -0
- package/dist/lib/tanstack/transform-router.spec.js.map +1 -0
- package/dist/lib/tanstack/transform-vite-config.d.ts +14 -0
- package/dist/lib/tanstack/transform-vite-config.d.ts.map +1 -0
- package/dist/lib/tanstack/transform-vite-config.js +576 -0
- package/dist/lib/tanstack/transform-vite-config.js.map +1 -0
- package/dist/lib/tanstack/transform-vite-config.spec.js +456 -0
- package/dist/lib/tanstack/transform-vite-config.spec.js.map +1 -0
- package/dist/lib/templates.d.ts.map +1 -1
- package/dist/lib/templates.js +6 -0
- package/dist/lib/templates.js.map +1 -1
- package/dist/lib/update-payload-in-project.d.ts +18 -3
- package/dist/lib/update-payload-in-project.d.ts.map +1 -1
- package/dist/lib/update-payload-in-project.js +98 -18
- package/dist/lib/update-payload-in-project.js.map +1 -1
- package/dist/lib/update-payload-in-project.spec.js +262 -0
- package/dist/lib/update-payload-in-project.spec.js.map +1 -0
- package/dist/lib/wrap-next-config.d.ts.map +1 -1
- package/dist/main.d.ts +20 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +120 -29
- package/dist/main.js.map +1 -1
- package/dist/main.spec.js +102 -0
- package/dist/main.spec.js.map +1 -0
- package/dist/scripts/pack-template-files.js +18 -0
- package/dist/scripts/pack-template-files.js.map +1 -1
- package/dist/template/src/app/(frontend)/styles.css +1 -1
- package/dist/template/src/app/(payload)/layout.tsx +8 -2
- package/dist/template-tanstack/routes/_payload/admin.$.tsx +8 -0
- package/dist/template-tanstack/routes/_payload/admin.index.tsx +8 -0
- package/dist/template-tanstack/routes/_payload/api.$.ts +10 -0
- package/dist/template-tanstack/routes/_payload/importMap.js +32 -0
- package/dist/template-tanstack/routes/_payload/server.functions.ts +49 -0
- package/dist/template-tanstack/routes/_payload.tsx +30 -0
- package/dist/template-tanstack/src/collections/Folders.ts +16 -0
- package/dist/template-tanstack/src/collections/Media.ts +20 -0
- package/dist/template-tanstack/src/collections/Tags.ts +16 -0
- package/dist/template-tanstack/src/collections/Users.ts +14 -0
- package/dist/template-tanstack/src/payload.config.ts +40 -0
- package/dist/template-tanstack/src/payload.css +1 -0
- package/dist/types.d.ts +22 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/casing.d.ts.map +1 -1
- package/dist/utils/log.d.ts.map +1 -1
- package/dist/utils/messages.d.ts +1 -0
- package/dist/utils/messages.d.ts.map +1 -1
- package/dist/utils/messages.js +8 -6
- package/dist/utils/messages.js.map +1 -1
- package/package.json +4 -4
- package/dist/lib/download-skill.d.ts +0 -8
- package/dist/lib/download-skill.d.ts.map +0 -1
- package/dist/lib/download-skill.js +0 -35
- package/dist/lib/download-skill.js.map +0 -1
- package/dist/lib/select-agent.d.ts +0 -16
- package/dist/lib/select-agent.d.ts.map +0 -1
- package/dist/lib/select-agent.js +0 -67
- package/dist/lib/select-agent.js.map +0 -1
- /package/dist/template/src/app/(payload)/{custom.scss → custom.css} +0 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { parse } from 'comment-json';
|
|
2
|
+
import fse from 'fs-extra';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
6
|
+
import { configurePayloadTsConfig } from './configure-payload-tsconfig.js';
|
|
7
|
+
describe('configurePayloadTsConfig', ()=>{
|
|
8
|
+
let configPath;
|
|
9
|
+
let payloadConfigPath;
|
|
10
|
+
let projectDir;
|
|
11
|
+
beforeEach(()=>{
|
|
12
|
+
projectDir = fse.mkdtempSync(path.join(os.tmpdir(), 'cpa-payload-tsconfig-'));
|
|
13
|
+
configPath = path.join(projectDir, 'tsconfig.json');
|
|
14
|
+
payloadConfigPath = path.join(projectDir, 'src/payload.config.ts');
|
|
15
|
+
});
|
|
16
|
+
afterEach(()=>{
|
|
17
|
+
fse.removeSync(projectDir);
|
|
18
|
+
});
|
|
19
|
+
it('should add the Payload alias without changing existing paths', async ()=>{
|
|
20
|
+
writeTsConfig(`{
|
|
21
|
+
"compilerOptions": {
|
|
22
|
+
"paths": {
|
|
23
|
+
"@/*": ["./src/*"]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}`);
|
|
27
|
+
await configurePayloadTsConfig({
|
|
28
|
+
configPath,
|
|
29
|
+
payloadConfigPath
|
|
30
|
+
});
|
|
31
|
+
expect(readTsConfig().compilerOptions.paths).toEqual({
|
|
32
|
+
'@/*': [
|
|
33
|
+
'./src/*'
|
|
34
|
+
],
|
|
35
|
+
'@payload-config': [
|
|
36
|
+
'./src/payload.config.ts'
|
|
37
|
+
]
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
it('should create paths when compiler options do not define them', async ()=>{
|
|
41
|
+
writeTsConfig(`{
|
|
42
|
+
"compilerOptions": {
|
|
43
|
+
"strict": true
|
|
44
|
+
}
|
|
45
|
+
}`);
|
|
46
|
+
await configurePayloadTsConfig({
|
|
47
|
+
configPath,
|
|
48
|
+
payloadConfigPath
|
|
49
|
+
});
|
|
50
|
+
expect(readTsConfig().compilerOptions).toEqual({
|
|
51
|
+
paths: {
|
|
52
|
+
'@payload-config': [
|
|
53
|
+
'./src/payload.config.ts'
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
strict: true
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
it('should preserve comments while adding the Payload alias', async ()=>{
|
|
60
|
+
writeTsConfig(`{
|
|
61
|
+
// Keep this compiler explanation.
|
|
62
|
+
"compilerOptions": {
|
|
63
|
+
"paths": {
|
|
64
|
+
// Keep this application alias.
|
|
65
|
+
"@/*": ["./src/*"]
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}`);
|
|
69
|
+
await configurePayloadTsConfig({
|
|
70
|
+
configPath,
|
|
71
|
+
payloadConfigPath
|
|
72
|
+
});
|
|
73
|
+
const content = fse.readFileSync(configPath, 'utf8');
|
|
74
|
+
expect(content).toContain('// Keep this compiler explanation.');
|
|
75
|
+
expect(content).toContain('// Keep this application alias.');
|
|
76
|
+
expect(readTsConfig().compilerOptions.paths['@payload-config']).toEqual([
|
|
77
|
+
'./src/payload.config.ts'
|
|
78
|
+
]);
|
|
79
|
+
});
|
|
80
|
+
it('should resolve the Payload alias relative to a non-default baseUrl', async ()=>{
|
|
81
|
+
writeTsConfig(`{
|
|
82
|
+
"compilerOptions": {
|
|
83
|
+
"baseUrl": "./src",
|
|
84
|
+
"paths": {}
|
|
85
|
+
}
|
|
86
|
+
}`);
|
|
87
|
+
await configurePayloadTsConfig({
|
|
88
|
+
configPath,
|
|
89
|
+
payloadConfigPath
|
|
90
|
+
});
|
|
91
|
+
expect(readTsConfig().compilerOptions.paths['@payload-config']).toEqual([
|
|
92
|
+
'./payload.config.ts'
|
|
93
|
+
]);
|
|
94
|
+
});
|
|
95
|
+
it('should leave an existing Payload alias unchanged', async ()=>{
|
|
96
|
+
const original = `{
|
|
97
|
+
"compilerOptions": {
|
|
98
|
+
"paths": {
|
|
99
|
+
"@payload-config": ["./custom/payload.ts"]
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}`;
|
|
103
|
+
writeTsConfig(original);
|
|
104
|
+
await configurePayloadTsConfig({
|
|
105
|
+
configPath,
|
|
106
|
+
payloadConfigPath
|
|
107
|
+
});
|
|
108
|
+
expect(fse.readFileSync(configPath, 'utf8')).toBe(original);
|
|
109
|
+
});
|
|
110
|
+
it('should be idempotent after adding the Payload alias', async ()=>{
|
|
111
|
+
writeTsConfig(`{
|
|
112
|
+
"compilerOptions": {
|
|
113
|
+
"paths": {}
|
|
114
|
+
}
|
|
115
|
+
}`);
|
|
116
|
+
await configurePayloadTsConfig({
|
|
117
|
+
configPath,
|
|
118
|
+
payloadConfigPath
|
|
119
|
+
});
|
|
120
|
+
const firstResult = fse.readFileSync(configPath, 'utf8');
|
|
121
|
+
await configurePayloadTsConfig({
|
|
122
|
+
configPath,
|
|
123
|
+
payloadConfigPath
|
|
124
|
+
});
|
|
125
|
+
expect(fse.readFileSync(configPath, 'utf8')).toBe(firstResult);
|
|
126
|
+
});
|
|
127
|
+
function readTsConfig() {
|
|
128
|
+
return parse(fse.readFileSync(configPath, 'utf8'));
|
|
129
|
+
}
|
|
130
|
+
function writeTsConfig(content) {
|
|
131
|
+
fse.writeFileSync(configPath, content);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
//# sourceMappingURL=configure-payload-tsconfig.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/configure-payload-tsconfig.spec.ts"],"sourcesContent":["import { parse } from 'comment-json'\nimport fse from 'fs-extra'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { afterEach, beforeEach, describe, expect, it } from 'vitest'\n\nimport { configurePayloadTsConfig } from './configure-payload-tsconfig.js'\n\ndescribe('configurePayloadTsConfig', () => {\n let configPath: string\n let payloadConfigPath: string\n let projectDir: string\n\n beforeEach(() => {\n projectDir = fse.mkdtempSync(path.join(os.tmpdir(), 'cpa-payload-tsconfig-'))\n configPath = path.join(projectDir, 'tsconfig.json')\n payloadConfigPath = path.join(projectDir, 'src/payload.config.ts')\n })\n\n afterEach(() => {\n fse.removeSync(projectDir)\n })\n\n it('should add the Payload alias without changing existing paths', async () => {\n writeTsConfig(`{\n \"compilerOptions\": {\n \"paths\": {\n \"@/*\": [\"./src/*\"]\n }\n }\n}`)\n\n await configurePayloadTsConfig({ configPath, payloadConfigPath })\n\n expect(readTsConfig().compilerOptions.paths).toEqual({\n '@/*': ['./src/*'],\n '@payload-config': ['./src/payload.config.ts'],\n })\n })\n\n it('should create paths when compiler options do not define them', async () => {\n writeTsConfig(`{\n \"compilerOptions\": {\n \"strict\": true\n }\n}`)\n\n await configurePayloadTsConfig({ configPath, payloadConfigPath })\n\n expect(readTsConfig().compilerOptions).toEqual({\n paths: {\n '@payload-config': ['./src/payload.config.ts'],\n },\n strict: true,\n })\n })\n\n it('should preserve comments while adding the Payload alias', async () => {\n writeTsConfig(`{\n // Keep this compiler explanation.\n \"compilerOptions\": {\n \"paths\": {\n // Keep this application alias.\n \"@/*\": [\"./src/*\"]\n }\n }\n}`)\n\n await configurePayloadTsConfig({ configPath, payloadConfigPath })\n\n const content = fse.readFileSync(configPath, 'utf8')\n\n expect(content).toContain('// Keep this compiler explanation.')\n expect(content).toContain('// Keep this application alias.')\n expect(readTsConfig().compilerOptions.paths['@payload-config']).toEqual([\n './src/payload.config.ts',\n ])\n })\n\n it('should resolve the Payload alias relative to a non-default baseUrl', async () => {\n writeTsConfig(`{\n \"compilerOptions\": {\n \"baseUrl\": \"./src\",\n \"paths\": {}\n }\n}`)\n\n await configurePayloadTsConfig({ configPath, payloadConfigPath })\n\n expect(readTsConfig().compilerOptions.paths['@payload-config']).toEqual(['./payload.config.ts'])\n })\n\n it('should leave an existing Payload alias unchanged', async () => {\n const original = `{\n \"compilerOptions\": {\n \"paths\": {\n \"@payload-config\": [\"./custom/payload.ts\"]\n }\n }\n}`\n writeTsConfig(original)\n\n await configurePayloadTsConfig({ configPath, payloadConfigPath })\n\n expect(fse.readFileSync(configPath, 'utf8')).toBe(original)\n })\n\n it('should be idempotent after adding the Payload alias', async () => {\n writeTsConfig(`{\n \"compilerOptions\": {\n \"paths\": {}\n }\n}`)\n\n await configurePayloadTsConfig({ configPath, payloadConfigPath })\n const firstResult = fse.readFileSync(configPath, 'utf8')\n\n await configurePayloadTsConfig({ configPath, payloadConfigPath })\n\n expect(fse.readFileSync(configPath, 'utf8')).toBe(firstResult)\n })\n\n function readTsConfig(): {\n compilerOptions: {\n baseUrl?: string\n paths: Record<string, string[]>\n strict?: boolean\n }\n } {\n return parse(fse.readFileSync(configPath, 'utf8')) as {\n compilerOptions: {\n baseUrl?: string\n paths: Record<string, string[]>\n strict?: boolean\n }\n }\n }\n\n function writeTsConfig(content: string): void {\n fse.writeFileSync(configPath, content)\n }\n})\n"],"names":["parse","fse","os","path","afterEach","beforeEach","describe","expect","it","configurePayloadTsConfig","configPath","payloadConfigPath","projectDir","mkdtempSync","join","tmpdir","removeSync","writeTsConfig","readTsConfig","compilerOptions","paths","toEqual","strict","content","readFileSync","toContain","original","toBe","firstResult","writeFileSync"],"mappings":"AAAA,SAASA,KAAK,QAAQ,eAAc;AACpC,OAAOC,SAAS,WAAU;AAC1B,OAAOC,QAAQ,UAAS;AACxB,OAAOC,UAAU,YAAW;AAC5B,SAASC,SAAS,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAEpE,SAASC,wBAAwB,QAAQ,kCAAiC;AAE1EH,SAAS,4BAA4B;IACnC,IAAII;IACJ,IAAIC;IACJ,IAAIC;IAEJP,WAAW;QACTO,aAAaX,IAAIY,WAAW,CAACV,KAAKW,IAAI,CAACZ,GAAGa,MAAM,IAAI;QACpDL,aAAaP,KAAKW,IAAI,CAACF,YAAY;QACnCD,oBAAoBR,KAAKW,IAAI,CAACF,YAAY;IAC5C;IAEAR,UAAU;QACRH,IAAIe,UAAU,CAACJ;IACjB;IAEAJ,GAAG,gEAAgE;QACjES,cAAc,CAAC;;;;;;CAMlB,CAAC;QAEE,MAAMR,yBAAyB;YAAEC;YAAYC;QAAkB;QAE/DJ,OAAOW,eAAeC,eAAe,CAACC,KAAK,EAAEC,OAAO,CAAC;YACnD,OAAO;gBAAC;aAAU;YAClB,mBAAmB;gBAAC;aAA0B;QAChD;IACF;IAEAb,GAAG,gEAAgE;QACjES,cAAc,CAAC;;;;CAIlB,CAAC;QAEE,MAAMR,yBAAyB;YAAEC;YAAYC;QAAkB;QAE/DJ,OAAOW,eAAeC,eAAe,EAAEE,OAAO,CAAC;YAC7CD,OAAO;gBACL,mBAAmB;oBAAC;iBAA0B;YAChD;YACAE,QAAQ;QACV;IACF;IAEAd,GAAG,2DAA2D;QAC5DS,cAAc,CAAC;;;;;;;;CAQlB,CAAC;QAEE,MAAMR,yBAAyB;YAAEC;YAAYC;QAAkB;QAE/D,MAAMY,UAAUtB,IAAIuB,YAAY,CAACd,YAAY;QAE7CH,OAAOgB,SAASE,SAAS,CAAC;QAC1BlB,OAAOgB,SAASE,SAAS,CAAC;QAC1BlB,OAAOW,eAAeC,eAAe,CAACC,KAAK,CAAC,kBAAkB,EAAEC,OAAO,CAAC;YACtE;SACD;IACH;IAEAb,GAAG,sEAAsE;QACvES,cAAc,CAAC;;;;;CAKlB,CAAC;QAEE,MAAMR,yBAAyB;YAAEC;YAAYC;QAAkB;QAE/DJ,OAAOW,eAAeC,eAAe,CAACC,KAAK,CAAC,kBAAkB,EAAEC,OAAO,CAAC;YAAC;SAAsB;IACjG;IAEAb,GAAG,oDAAoD;QACrD,MAAMkB,WAAW,CAAC;;;;;;CAMrB,CAAC;QACET,cAAcS;QAEd,MAAMjB,yBAAyB;YAAEC;YAAYC;QAAkB;QAE/DJ,OAAON,IAAIuB,YAAY,CAACd,YAAY,SAASiB,IAAI,CAACD;IACpD;IAEAlB,GAAG,uDAAuD;QACxDS,cAAc,CAAC;;;;CAIlB,CAAC;QAEE,MAAMR,yBAAyB;YAAEC;YAAYC;QAAkB;QAC/D,MAAMiB,cAAc3B,IAAIuB,YAAY,CAACd,YAAY;QAEjD,MAAMD,yBAAyB;YAAEC;YAAYC;QAAkB;QAE/DJ,OAAON,IAAIuB,YAAY,CAACd,YAAY,SAASiB,IAAI,CAACC;IACpD;IAEA,SAASV;QAOP,OAAOlB,MAAMC,IAAIuB,YAAY,CAACd,YAAY;IAO5C;IAEA,SAASO,cAAcM,OAAe;QACpCtB,IAAI4B,aAAa,CAACnB,YAAYa;IAChC;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure-plugin-project.d.ts","sourceRoot":"","sources":["../../src/lib/configure-plugin-project.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,eAAO,MAAM,sBAAsB,
|
|
1
|
+
{"version":3,"file":"configure-plugin-project.d.ts","sourceRoot":"","sources":["../../src/lib/configure-plugin-project.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,eAAO,MAAM,sBAAsB,qCAGhC;IACD,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;CACpB,SAmCA,CAAA"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CliArgs, DbDetails, PackageManager, ProjectExample, ProjectTemplate } from '../types.js';
|
|
2
2
|
type TemplateOrExample = {
|
|
3
3
|
example: ProjectExample;
|
|
4
4
|
} | {
|
|
5
5
|
template: ProjectTemplate;
|
|
6
6
|
};
|
|
7
7
|
export declare function createProject(args: {
|
|
8
|
-
agentType?: AgentType;
|
|
9
8
|
cliArgs: CliArgs;
|
|
10
9
|
dbDetails?: DbDetails;
|
|
11
10
|
packageManager: PackageManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EAChB,MAAM,aAAa,CAAA;AA2DpB,KAAK,iBAAiB,GAClB;IACE,OAAO,EAAE,cAAc,CAAA;CACxB,GACD;IACE,QAAQ,EAAE,eAAe,CAAA;CAC1B,CAAA;AAEL,wBAAsB,aAAa,CACjC,IAAI,EAAE;IACJ,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,iBAAiB,GACpB,OAAO,CAAC,IAAI,CAAC,CA0Gf;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAClD,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC,GAAG,IAAI,CAiBP"}
|
|
@@ -7,15 +7,14 @@ import path from 'path';
|
|
|
7
7
|
import { tryInitRepoAndCommit } from '../utils/git.js';
|
|
8
8
|
import { debug, error, info, warning } from '../utils/log.js';
|
|
9
9
|
import { DEFAULT_PAYLOAD_VERSION_TAG, resolvePackageVersion } from '../utils/resolvePackageVersion.js';
|
|
10
|
+
import { buildAgentConfigFiles } from './agent-config.js';
|
|
10
11
|
import { configurePayloadConfig } from './configure-payload-config.js';
|
|
11
12
|
import { configurePluginProject } from './configure-plugin-project.js';
|
|
12
13
|
import { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js';
|
|
13
14
|
import { downloadExample } from './download-example.js';
|
|
14
|
-
import { downloadSkill } from './download-skill.js';
|
|
15
15
|
import { downloadTemplate } from './download-template.js';
|
|
16
16
|
import { generateSecret } from './generate-secret.js';
|
|
17
17
|
import { manageEnvFiles } from './manage-env-files.js';
|
|
18
|
-
import { getAgentChoice } from './select-agent.js';
|
|
19
18
|
const filename = fileURLToPath(import.meta.url);
|
|
20
19
|
const dirname = path.dirname(filename);
|
|
21
20
|
async function createOrFindProjectDir(projectDir) {
|
|
@@ -52,7 +51,7 @@ async function installDeps(args) {
|
|
|
52
51
|
}
|
|
53
52
|
}
|
|
54
53
|
export async function createProject(args) {
|
|
55
|
-
const {
|
|
54
|
+
const { cliArgs, dbDetails, packageManager, projectDir, projectName } = args;
|
|
56
55
|
if (cliArgs['--dry-run']) {
|
|
57
56
|
debug(`Dry run: Creating project in ${chalk.green(projectDir)}`);
|
|
58
57
|
return;
|
|
@@ -126,24 +125,9 @@ export async function createProject(args) {
|
|
|
126
125
|
projectDir,
|
|
127
126
|
template: 'template' in args ? args.template : undefined
|
|
128
127
|
});
|
|
129
|
-
if (
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
await downloadSkill({
|
|
133
|
-
agentType,
|
|
134
|
-
branch: cliArgs['--branch'] || undefined,
|
|
135
|
-
debug: cliArgs['--debug'],
|
|
136
|
-
projectDir
|
|
137
|
-
});
|
|
138
|
-
const { configFile, skillsDir } = getAgentChoice(agentType);
|
|
139
|
-
const skillPath = `${skillsDir}/payload`;
|
|
140
|
-
const configContent = configFile === 'CLAUDE.md' ? `# Claude Code\n\nThis project uses the Payload CMS skill at \`${skillPath}/\`.\nStart with \`${skillPath}/SKILL.md\` for a quick reference, then see \`${skillPath}/reference/\` for detailed docs.\n` : `# Agents\n\nThis project uses the Payload CMS skill at \`${skillPath}/\`.\nStart with \`${skillPath}/SKILL.md\` for a quick reference, then see \`${skillPath}/reference/\` for detailed docs.\n`;
|
|
141
|
-
await fse.writeFile(path.resolve(projectDir, configFile), configContent);
|
|
142
|
-
} catch (err) {
|
|
143
|
-
if (cliArgs['--debug'] && err instanceof Error) {
|
|
144
|
-
debug(`Failed to download skill: ${err.message}`);
|
|
145
|
-
}
|
|
146
|
-
warning('Could not download agent skill. You can install it manually later.');
|
|
128
|
+
if (!cliArgs['--no-agent']) {
|
|
129
|
+
for (const { content, fileName } of buildAgentConfigFiles()){
|
|
130
|
+
await fse.writeFile(path.resolve(projectDir, fileName), content);
|
|
147
131
|
}
|
|
148
132
|
}
|
|
149
133
|
if (!cliArgs['--no-deps']) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/create-project.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport chalk from 'chalk'\nimport execa from 'execa'\nimport fse from 'fs-extra'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nimport type {\n AgentType,\n CliArgs,\n DbDetails,\n PackageManager,\n ProjectExample,\n ProjectTemplate,\n} from '../types.js'\n\nimport { tryInitRepoAndCommit } from '../utils/git.js'\nimport { debug, error, info, warning } from '../utils/log.js'\nimport {\n DEFAULT_PAYLOAD_VERSION_TAG,\n resolvePackageVersion,\n} from '../utils/resolvePackageVersion.js'\nimport { configurePayloadConfig } from './configure-payload-config.js'\nimport { configurePluginProject } from './configure-plugin-project.js'\nimport { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js'\nimport { downloadExample } from './download-example.js'\nimport { downloadSkill } from './download-skill.js'\nimport { downloadTemplate } from './download-template.js'\nimport { generateSecret } from './generate-secret.js'\nimport { manageEnvFiles } from './manage-env-files.js'\nimport { getAgentChoice } from './select-agent.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nasync function createOrFindProjectDir(projectDir: string): Promise<void> {\n const pathExists = await fse.pathExists(projectDir)\n if (!pathExists) {\n await fse.mkdir(projectDir)\n }\n}\n\nasync function installDeps(args: {\n cliArgs: CliArgs\n packageManager: PackageManager\n projectDir: string\n}): Promise<boolean> {\n const { cliArgs, packageManager, projectDir } = args\n if (cliArgs['--no-deps']) {\n return true\n }\n let installCmd = 'npm install --legacy-peer-deps'\n\n if (packageManager === 'yarn') {\n installCmd = 'yarn'\n } else if (packageManager === 'pnpm') {\n installCmd = 'pnpm install'\n } else if (packageManager === 'bun') {\n installCmd = 'bun install'\n }\n\n await ensurePnpmBuildApprovals({ packageManager, projectDir })\n\n try {\n await execa.command(installCmd, {\n cwd: path.resolve(projectDir),\n })\n return true\n } catch (err: unknown) {\n error(`Error installing dependencies${err instanceof Error ? `: ${err.message}` : ''}.`)\n return false\n }\n}\n\ntype TemplateOrExample =\n | {\n example: ProjectExample\n }\n | {\n template: ProjectTemplate\n }\n\nexport async function createProject(\n args: {\n agentType?: AgentType\n cliArgs: CliArgs\n dbDetails?: DbDetails\n packageManager: PackageManager\n projectDir: string\n projectName: string\n } & TemplateOrExample,\n): Promise<void> {\n const { agentType, cliArgs, dbDetails, packageManager, projectDir, projectName } = args\n\n if (cliArgs['--dry-run']) {\n debug(`Dry run: Creating project in ${chalk.green(projectDir)}`)\n return\n }\n\n await createOrFindProjectDir(projectDir)\n\n if (cliArgs['--local-example']) {\n // Copy example from local path. For development purposes.\n const localExample = path.resolve(dirname, '../../../../examples/', cliArgs['--local-example'])\n await fse.copy(localExample, projectDir)\n }\n\n if (cliArgs['--local-template']) {\n // Copy template from local path. For development purposes.\n const localTemplate = path.resolve(\n dirname,\n '../../../../templates/',\n cliArgs['--local-template'],\n )\n await fse.copy(localTemplate, projectDir)\n } else if ('template' in args && 'url' in args.template) {\n const { template } = args\n if (cliArgs['--branch']) {\n template.url = `${template.url.split('#')?.[0]}#${cliArgs['--branch']}`\n }\n\n await downloadTemplate({\n debug: cliArgs['--debug'],\n projectDir,\n template,\n })\n } else if ('example' in args && 'url' in args.example) {\n const { example } = args\n if (cliArgs['--branch']) {\n example.url = `${example.url.split('#')?.[0]}#${cliArgs['--branch']}`\n }\n\n await downloadExample({\n debug: cliArgs['--debug'],\n example,\n projectDir,\n })\n }\n\n const versionOrTag = cliArgs['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG\n\n const spinner = p.spinner()\n spinner.start(`Resolving Payload version (${versionOrTag})...`)\n\n const payloadVersion = await resolvePackageVersion({\n packageName: 'payload',\n versionOrTag,\n })\n\n spinner.stop(`Using Payload version ${payloadVersion}`)\n\n await updatePackageJSON({ latestVersion: payloadVersion, projectDir, projectName })\n\n if ('template' in args) {\n if (args.template.type === 'plugin') {\n spinner.message('Configuring Plugin...')\n configurePluginProject({ projectDirPath: projectDir, projectName })\n } else {\n spinner.message('Configuring Payload...')\n await configurePayloadConfig({\n dbType: dbDetails?.type,\n projectDirOrConfigPath: { projectDir },\n })\n }\n }\n\n await manageEnvFiles({\n cliArgs,\n databaseType: dbDetails?.type,\n databaseUri: dbDetails?.dbUri,\n payloadSecret: generateSecret(),\n projectDir,\n template: 'template' in args ? args.template : undefined,\n })\n\n if (agentType) {\n spinner.message('Installing agent skill...')\n try {\n await downloadSkill({\n agentType,\n branch: cliArgs['--branch'] || undefined,\n debug: cliArgs['--debug'],\n projectDir,\n })\n\n const { configFile, skillsDir } = getAgentChoice(agentType)\n const skillPath = `${skillsDir}/payload`\n const configContent =\n configFile === 'CLAUDE.md'\n ? `# Claude Code\\n\\nThis project uses the Payload CMS skill at \\`${skillPath}/\\`.\\nStart with \\`${skillPath}/SKILL.md\\` for a quick reference, then see \\`${skillPath}/reference/\\` for detailed docs.\\n`\n : `# Agents\\n\\nThis project uses the Payload CMS skill at \\`${skillPath}/\\`.\\nStart with \\`${skillPath}/SKILL.md\\` for a quick reference, then see \\`${skillPath}/reference/\\` for detailed docs.\\n`\n await fse.writeFile(path.resolve(projectDir, configFile), configContent)\n } catch (err) {\n if (cliArgs['--debug'] && err instanceof Error) {\n debug(`Failed to download skill: ${err.message}`)\n }\n warning('Could not download agent skill. You can install it manually later.')\n }\n }\n\n if (!cliArgs['--no-deps']) {\n info(`Using ${packageManager}.\\n`)\n spinner.message('Installing dependencies...')\n const result = await installDeps({ cliArgs, packageManager, projectDir })\n if (result) {\n spinner.stop('Successfully installed Payload and dependencies')\n } else {\n spinner.stop('Error installing dependencies', 1)\n }\n } else {\n spinner.stop('Dependency installation skipped')\n }\n\n if (!cliArgs['--no-git']) {\n tryInitRepoAndCommit({ cwd: projectDir })\n }\n}\n\n/**\n * Reads the package.json file into an object and then does the following:\n * - Sets the `name` property to the provided `projectName`.\n * - Bumps the payload packages from workspace:* to the latest version.\n * - Writes the updated object back to the package.json file.\n */\nexport async function updatePackageJSON(args: {\n /**\n * The latest version of Payload to use in the package.json.\n */\n latestVersion: string\n projectDir: string\n /**\n * The name of the project to set in package.json.\n */\n projectName: string\n}): Promise<void> {\n const { latestVersion, projectDir, projectName } = args\n const packageJsonPath = path.resolve(projectDir, 'package.json')\n try {\n const packageObj = await fse.readJson(packageJsonPath)\n packageObj.name = projectName\n\n updatePackageJSONDependencies({\n latestVersion,\n packageJson: packageObj,\n })\n\n await fse.writeJson(packageJsonPath, packageObj, { spaces: 2 })\n } catch (err: unknown) {\n warning(`Unable to update name in package.json. ${err instanceof Error ? err.message : ''}`)\n }\n}\n\n/**\n * Recursively updates a JSON object to replace all instances of `workspace:` with the latest version pinned.\n *\n * Does not return and instead modifies the `packageJson` object in place.\n */\nexport function updatePackageJSONDependencies(args: {\n latestVersion: string\n packageJson: Record<string, unknown>\n}): void {\n const { latestVersion, packageJson } = args\n\n const updatedDependencies = Object.entries(packageJson.dependencies || {}).reduce(\n (acc, [key, value]) => {\n if (typeof value === 'string' && value.startsWith('workspace:')) {\n acc[key] = `${latestVersion}`\n } else if (key === 'payload' || key.startsWith('@payloadcms')) {\n acc[key] = `${latestVersion}`\n } else {\n acc[key] = value\n }\n return acc\n },\n {} as Record<string, string>,\n )\n packageJson.dependencies = updatedDependencies\n}\n"],"names":["p","chalk","execa","fse","fileURLToPath","path","tryInitRepoAndCommit","debug","error","info","warning","DEFAULT_PAYLOAD_VERSION_TAG","resolvePackageVersion","configurePayloadConfig","configurePluginProject","ensurePnpmBuildApprovals","downloadExample","downloadSkill","downloadTemplate","generateSecret","manageEnvFiles","getAgentChoice","filename","url","dirname","createOrFindProjectDir","projectDir","pathExists","mkdir","installDeps","args","cliArgs","packageManager","installCmd","command","cwd","resolve","err","Error","message","createProject","agentType","dbDetails","projectName","green","localExample","copy","localTemplate","template","split","example","versionOrTag","spinner","start","payloadVersion","packageName","stop","updatePackageJSON","latestVersion","type","projectDirPath","dbType","projectDirOrConfigPath","databaseType","databaseUri","dbUri","payloadSecret","undefined","branch","configFile","skillsDir","skillPath","configContent","writeFile","result","packageJsonPath","packageObj","readJson","name","updatePackageJSONDependencies","packageJson","writeJson","spaces","updatedDependencies","Object","entries","dependencies","reduce","acc","key","value","startsWith"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/create-project.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport chalk from 'chalk'\nimport execa from 'execa'\nimport fse from 'fs-extra'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nimport type {\n CliArgs,\n DbDetails,\n PackageManager,\n ProjectExample,\n ProjectTemplate,\n} from '../types.js'\n\nimport { tryInitRepoAndCommit } from '../utils/git.js'\nimport { debug, error, info, warning } from '../utils/log.js'\nimport {\n DEFAULT_PAYLOAD_VERSION_TAG,\n resolvePackageVersion,\n} from '../utils/resolvePackageVersion.js'\nimport { buildAgentConfigFiles } from './agent-config.js'\nimport { configurePayloadConfig } from './configure-payload-config.js'\nimport { configurePluginProject } from './configure-plugin-project.js'\nimport { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js'\nimport { downloadExample } from './download-example.js'\nimport { downloadTemplate } from './download-template.js'\nimport { generateSecret } from './generate-secret.js'\nimport { manageEnvFiles } from './manage-env-files.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nasync function createOrFindProjectDir(projectDir: string): Promise<void> {\n const pathExists = await fse.pathExists(projectDir)\n if (!pathExists) {\n await fse.mkdir(projectDir)\n }\n}\n\nasync function installDeps(args: {\n cliArgs: CliArgs\n packageManager: PackageManager\n projectDir: string\n}): Promise<boolean> {\n const { cliArgs, packageManager, projectDir } = args\n if (cliArgs['--no-deps']) {\n return true\n }\n let installCmd = 'npm install --legacy-peer-deps'\n\n if (packageManager === 'yarn') {\n installCmd = 'yarn'\n } else if (packageManager === 'pnpm') {\n installCmd = 'pnpm install'\n } else if (packageManager === 'bun') {\n installCmd = 'bun install'\n }\n\n await ensurePnpmBuildApprovals({ packageManager, projectDir })\n\n try {\n await execa.command(installCmd, {\n cwd: path.resolve(projectDir),\n })\n return true\n } catch (err: unknown) {\n error(`Error installing dependencies${err instanceof Error ? `: ${err.message}` : ''}.`)\n return false\n }\n}\n\ntype TemplateOrExample =\n | {\n example: ProjectExample\n }\n | {\n template: ProjectTemplate\n }\n\nexport async function createProject(\n args: {\n cliArgs: CliArgs\n dbDetails?: DbDetails\n packageManager: PackageManager\n projectDir: string\n projectName: string\n } & TemplateOrExample,\n): Promise<void> {\n const { cliArgs, dbDetails, packageManager, projectDir, projectName } = args\n\n if (cliArgs['--dry-run']) {\n debug(`Dry run: Creating project in ${chalk.green(projectDir)}`)\n return\n }\n\n await createOrFindProjectDir(projectDir)\n\n if (cliArgs['--local-example']) {\n // Copy example from local path. For development purposes.\n const localExample = path.resolve(dirname, '../../../../examples/', cliArgs['--local-example'])\n await fse.copy(localExample, projectDir)\n }\n\n if (cliArgs['--local-template']) {\n // Copy template from local path. For development purposes.\n const localTemplate = path.resolve(\n dirname,\n '../../../../templates/',\n cliArgs['--local-template'],\n )\n await fse.copy(localTemplate, projectDir)\n } else if ('template' in args && 'url' in args.template) {\n const { template } = args\n if (cliArgs['--branch']) {\n template.url = `${template.url.split('#')?.[0]}#${cliArgs['--branch']}`\n }\n\n await downloadTemplate({\n debug: cliArgs['--debug'],\n projectDir,\n template,\n })\n } else if ('example' in args && 'url' in args.example) {\n const { example } = args\n if (cliArgs['--branch']) {\n example.url = `${example.url.split('#')?.[0]}#${cliArgs['--branch']}`\n }\n\n await downloadExample({\n debug: cliArgs['--debug'],\n example,\n projectDir,\n })\n }\n\n const versionOrTag = cliArgs['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG\n\n const spinner = p.spinner()\n spinner.start(`Resolving Payload version (${versionOrTag})...`)\n\n const payloadVersion = await resolvePackageVersion({\n packageName: 'payload',\n versionOrTag,\n })\n\n spinner.stop(`Using Payload version ${payloadVersion}`)\n\n await updatePackageJSON({ latestVersion: payloadVersion, projectDir, projectName })\n\n if ('template' in args) {\n if (args.template.type === 'plugin') {\n spinner.message('Configuring Plugin...')\n configurePluginProject({ projectDirPath: projectDir, projectName })\n } else {\n spinner.message('Configuring Payload...')\n await configurePayloadConfig({\n dbType: dbDetails?.type,\n projectDirOrConfigPath: { projectDir },\n })\n }\n }\n\n await manageEnvFiles({\n cliArgs,\n databaseType: dbDetails?.type,\n databaseUri: dbDetails?.dbUri,\n payloadSecret: generateSecret(),\n projectDir,\n template: 'template' in args ? args.template : undefined,\n })\n\n if (!cliArgs['--no-agent']) {\n for (const { content, fileName } of buildAgentConfigFiles()) {\n await fse.writeFile(path.resolve(projectDir, fileName), content)\n }\n }\n\n if (!cliArgs['--no-deps']) {\n info(`Using ${packageManager}.\\n`)\n spinner.message('Installing dependencies...')\n const result = await installDeps({ cliArgs, packageManager, projectDir })\n if (result) {\n spinner.stop('Successfully installed Payload and dependencies')\n } else {\n spinner.stop('Error installing dependencies', 1)\n }\n } else {\n spinner.stop('Dependency installation skipped')\n }\n\n if (!cliArgs['--no-git']) {\n tryInitRepoAndCommit({ cwd: projectDir })\n }\n}\n\n/**\n * Reads the package.json file into an object and then does the following:\n * - Sets the `name` property to the provided `projectName`.\n * - Bumps the payload packages from workspace:* to the latest version.\n * - Writes the updated object back to the package.json file.\n */\nexport async function updatePackageJSON(args: {\n /**\n * The latest version of Payload to use in the package.json.\n */\n latestVersion: string\n projectDir: string\n /**\n * The name of the project to set in package.json.\n */\n projectName: string\n}): Promise<void> {\n const { latestVersion, projectDir, projectName } = args\n const packageJsonPath = path.resolve(projectDir, 'package.json')\n try {\n const packageObj = await fse.readJson(packageJsonPath)\n packageObj.name = projectName\n\n updatePackageJSONDependencies({\n latestVersion,\n packageJson: packageObj,\n })\n\n await fse.writeJson(packageJsonPath, packageObj, { spaces: 2 })\n } catch (err: unknown) {\n warning(`Unable to update name in package.json. ${err instanceof Error ? err.message : ''}`)\n }\n}\n\n/**\n * Recursively updates a JSON object to replace all instances of `workspace:` with the latest version pinned.\n *\n * Does not return and instead modifies the `packageJson` object in place.\n */\nexport function updatePackageJSONDependencies(args: {\n latestVersion: string\n packageJson: Record<string, unknown>\n}): void {\n const { latestVersion, packageJson } = args\n\n const updatedDependencies = Object.entries(packageJson.dependencies || {}).reduce(\n (acc, [key, value]) => {\n if (typeof value === 'string' && value.startsWith('workspace:')) {\n acc[key] = `${latestVersion}`\n } else if (key === 'payload' || key.startsWith('@payloadcms')) {\n acc[key] = `${latestVersion}`\n } else {\n acc[key] = value\n }\n return acc\n },\n {} as Record<string, string>,\n )\n packageJson.dependencies = updatedDependencies\n}\n"],"names":["p","chalk","execa","fse","fileURLToPath","path","tryInitRepoAndCommit","debug","error","info","warning","DEFAULT_PAYLOAD_VERSION_TAG","resolvePackageVersion","buildAgentConfigFiles","configurePayloadConfig","configurePluginProject","ensurePnpmBuildApprovals","downloadExample","downloadTemplate","generateSecret","manageEnvFiles","filename","url","dirname","createOrFindProjectDir","projectDir","pathExists","mkdir","installDeps","args","cliArgs","packageManager","installCmd","command","cwd","resolve","err","Error","message","createProject","dbDetails","projectName","green","localExample","copy","localTemplate","template","split","example","versionOrTag","spinner","start","payloadVersion","packageName","stop","updatePackageJSON","latestVersion","type","projectDirPath","dbType","projectDirOrConfigPath","databaseType","databaseUri","dbUri","payloadSecret","undefined","content","fileName","writeFile","result","packageJsonPath","packageObj","readJson","name","updatePackageJSONDependencies","packageJson","writeJson","spaces","updatedDependencies","Object","entries","dependencies","reduce","acc","key","value","startsWith"],"mappings":"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"}
|
|
@@ -111,10 +111,19 @@ describe('createProject', ()=>{
|
|
|
111
111
|
[
|
|
112
112
|
'blank',
|
|
113
113
|
'postgres'
|
|
114
|
+
],
|
|
115
|
+
[
|
|
116
|
+
'blank-tanstack',
|
|
117
|
+
'mongodb'
|
|
118
|
+
],
|
|
119
|
+
[
|
|
120
|
+
'blank-tanstack',
|
|
121
|
+
'postgres'
|
|
114
122
|
]
|
|
115
123
|
])('update config and deps: %s, %s', async (templateName, db)=>{
|
|
116
124
|
const projectName = 'starter-project';
|
|
117
125
|
const template = templates.find((t)=>t.name === templateName);
|
|
126
|
+
expect(template).toBeDefined();
|
|
118
127
|
const cliArgs = {
|
|
119
128
|
...args,
|
|
120
129
|
'--db': db,
|
|
@@ -1 +1 @@
|
|
|
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#main',\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
|
+
{"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#main',\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 ['blank-tanstack', 'mongodb'],\n ['blank-tanstack', '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 expect(template).toBeDefined()\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","toBeDefined","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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/generate-secret.ts"],"sourcesContent":["import { randomBytes } from 'crypto'\n\nexport function generateSecret(): string {\n return randomBytes(32).toString('hex')
|
|
1
|
+
{"version":3,"sources":["../../src/lib/generate-secret.ts"],"sourcesContent":["import { randomBytes } from 'crypto'\n\nexport function generateSecret(): string {\n return randomBytes(32).toString('hex')\n}\n"],"names":["randomBytes","generateSecret","toString"],"mappings":"AAAA,SAASA,WAAW,QAAQ,SAAQ;AAEpC,OAAO,SAASC;IACd,OAAOD,YAAY,IAAIE,QAAQ,CAAC;AAClC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-next.d.ts","sourceRoot":"","sources":["../../src/lib/init-next.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init-next.d.ts","sourceRoot":"","sources":["../../src/lib/init-next.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAkB,cAAc,EAAE,MAAM,aAAa,CAAA;AAiBlG,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,mBAAmB,CAAC,CAAA;AAElD,KAAK,cAAc,GACf;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,GAC1E;IACE,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,iBAAiB,EAAE,MAAM,CAAA;IACzB,OAAO,EAAE,IAAI,CAAA;CACd,CAAA;AAEL,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAuE1E;AA2GD,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA2FnF"}
|
package/dist/lib/init-next.js
CHANGED
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import * as p from '@clack/prompts';
|
|
2
|
-
import { parse, stringify } from 'comment-json';
|
|
3
2
|
import fs from 'fs';
|
|
4
3
|
import fse from 'fs-extra';
|
|
5
4
|
import globby from 'globby';
|
|
6
5
|
import { fileURLToPath } from 'node:url';
|
|
7
6
|
import path from 'path';
|
|
8
|
-
import { promisify } from 'util';
|
|
9
7
|
import { copyRecursiveSync } from '../utils/copy-recursive-sync.js';
|
|
10
8
|
import { debug as origDebug, warning } from '../utils/log.js';
|
|
11
9
|
import { moveMessage } from '../utils/messages.js';
|
|
12
10
|
import { DEFAULT_PAYLOAD_VERSION_TAG, resolvePackageVersion } from '../utils/resolvePackageVersion.js';
|
|
11
|
+
import { configurePayloadTsConfig } from './configure-payload-tsconfig.js';
|
|
13
12
|
import { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js';
|
|
14
13
|
import { installPackages } from './install-packages.js';
|
|
15
14
|
import { wrapNextConfig } from './wrap-next-config.js';
|
|
16
|
-
const readFile = promisify(fs.readFile);
|
|
17
|
-
const writeFile = promisify(fs.writeFile);
|
|
18
15
|
const filename = fileURLToPath(import.meta.url);
|
|
19
16
|
const dirname = path.dirname(filename);
|
|
20
17
|
export async function initNext(args) {
|
|
@@ -81,8 +78,10 @@ export async function initNext(args) {
|
|
|
81
78
|
success: false
|
|
82
79
|
};
|
|
83
80
|
}
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
await configurePayloadTsConfig({
|
|
82
|
+
configPath: path.resolve(projectDir, 'tsconfig.json'),
|
|
83
|
+
payloadConfigPath: configurationResult.payloadConfigPath
|
|
84
|
+
});
|
|
86
85
|
installSpinner.stop('Successfully installed Payload and dependencies');
|
|
87
86
|
return {
|
|
88
87
|
...configurationResult,
|
|
@@ -91,34 +90,6 @@ export async function initNext(args) {
|
|
|
91
90
|
success: true
|
|
92
91
|
};
|
|
93
92
|
}
|
|
94
|
-
async function addPayloadConfigToTsConfig(projectDir, isSrcDir) {
|
|
95
|
-
const tsConfigPath = path.resolve(projectDir, 'tsconfig.json');
|
|
96
|
-
// Check if tsconfig.json exists
|
|
97
|
-
if (!fs.existsSync(tsConfigPath)) {
|
|
98
|
-
warning(`Could not find tsconfig.json to add @payload-config path.`);
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
const userTsConfigContent = await readFile(tsConfigPath, {
|
|
102
|
-
encoding: 'utf8'
|
|
103
|
-
});
|
|
104
|
-
const userTsConfig = parse(userTsConfigContent);
|
|
105
|
-
const hasBaseUrl = userTsConfig?.compilerOptions?.baseUrl && userTsConfig?.compilerOptions?.baseUrl !== '.';
|
|
106
|
-
const baseUrl = hasBaseUrl ? userTsConfig?.compilerOptions?.baseUrl : './';
|
|
107
|
-
if (!userTsConfig.compilerOptions && !('extends' in userTsConfig)) {
|
|
108
|
-
userTsConfig.compilerOptions = {};
|
|
109
|
-
}
|
|
110
|
-
if (!userTsConfig.compilerOptions?.paths?.['@payload-config'] && userTsConfig.compilerOptions?.paths) {
|
|
111
|
-
userTsConfig.compilerOptions.paths = {
|
|
112
|
-
...userTsConfig.compilerOptions.paths || {},
|
|
113
|
-
'@payload-config': [
|
|
114
|
-
`${baseUrl}${isSrcDir ? 'src/' : ''}payload.config.ts`
|
|
115
|
-
]
|
|
116
|
-
};
|
|
117
|
-
await writeFile(tsConfigPath, stringify(userTsConfig, null, 2), {
|
|
118
|
-
encoding: 'utf8'
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
93
|
async function installAndConfigurePayload(args) {
|
|
123
94
|
const { '--debug': debug, nextAppDetails: { isSrcDir, nextAppDir, nextConfigPath } = {}, nextConfigType, projectDir, useDistFiles } = args;
|
|
124
95
|
if (!nextAppDir || !nextConfigPath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/init-next.ts"],"sourcesContent":["import type { CompilerOptions } from 'typescript'\n\nimport * as p from '@clack/prompts'\nimport { parse, stringify } from 'comment-json'\nimport fs from 'fs'\nimport fse from 'fs-extra'\nimport globby from 'globby'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\nimport { promisify } from 'util'\n\nimport type { CliArgs, DbType, NextAppDetails, NextConfigType, PackageManager } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport { debug as origDebug, warning } from '../utils/log.js'\nimport { moveMessage } from '../utils/messages.js'\nimport {\n DEFAULT_PAYLOAD_VERSION_TAG,\n resolvePackageVersion,\n} from '../utils/resolvePackageVersion.js'\nimport { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js'\nimport { installPackages } from './install-packages.js'\nimport { wrapNextConfig } from './wrap-next-config.js'\n\nconst readFile = promisify(fs.readFile)\nconst writeFile = promisify(fs.writeFile)\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\ntype InitNextArgs = {\n dbType: DbType\n nextAppDetails?: NextAppDetails\n packageManager: PackageManager\n projectDir: string\n useDistFiles?: boolean\n} & Pick<CliArgs, '--debug' | '--payload-version'>\n\ntype InitNextResult =\n | { isSrcDir: boolean; nextAppDir?: string; reason: string; success: false }\n | {\n isSrcDir: boolean\n nextAppDir: string\n payloadConfigPath: string\n success: true\n }\n\nexport async function initNext(args: InitNextArgs): Promise<InitNextResult> {\n const { dbType: dbType, packageManager, projectDir } = args\n\n const nextAppDetails = args.nextAppDetails || (await getNextAppDetails(projectDir))\n\n if (!nextAppDetails.nextAppDir) {\n warning(`Could not find app directory in ${projectDir}, creating...`)\n const createdAppDir = path.resolve(projectDir, nextAppDetails.isSrcDir ? 'src/app' : 'app')\n fse.mkdirSync(createdAppDir, { recursive: true })\n nextAppDetails.nextAppDir = createdAppDir\n }\n\n const { hasTopLevelLayout, isSrcDir, nextAppDir, nextConfigType } = nextAppDetails\n\n if (!nextConfigType) {\n return {\n isSrcDir,\n nextAppDir,\n reason: `Could not determine Next Config type in ${projectDir}. Possibly try renaming next.config.js to next.config.cjs or next.config.mjs.`,\n success: false,\n }\n }\n\n if (hasTopLevelLayout) {\n // Output directions for user to move all files from app to top-level directory named `(app)`\n p.log.warn(moveMessage({ nextAppDir, projectDir }))\n return {\n isSrcDir,\n nextAppDir,\n reason: 'Found existing layout.tsx in app directory',\n success: false,\n }\n }\n\n const installSpinner = p.spinner()\n installSpinner.start('Installing Payload and dependencies...')\n\n const configurationResult = await installAndConfigurePayload({\n ...args,\n nextAppDetails,\n nextConfigType,\n useDistFiles: true, // Requires running 'pnpm pack-template-files' in cpa\n })\n\n if (configurationResult.success === false) {\n installSpinner.stop(configurationResult.reason, 1)\n return { ...configurationResult, isSrcDir, success: false }\n }\n\n const { success: installSuccess } = await installDeps({\n dbType,\n packageManager,\n projectDir,\n versionOrTag: args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG,\n })\n if (!installSuccess) {\n installSpinner.stop('Failed to install dependencies', 1)\n return {\n ...configurationResult,\n isSrcDir,\n reason: 'Failed to install dependencies',\n success: false,\n }\n }\n\n // Add `@payload-config` to tsconfig.json `paths`\n await addPayloadConfigToTsConfig(projectDir, isSrcDir)\n installSpinner.stop('Successfully installed Payload and dependencies')\n return { ...configurationResult, isSrcDir, nextAppDir, success: true }\n}\n\nasync function addPayloadConfigToTsConfig(projectDir: string, isSrcDir: boolean) {\n const tsConfigPath = path.resolve(projectDir, 'tsconfig.json')\n\n // Check if tsconfig.json exists\n if (!fs.existsSync(tsConfigPath)) {\n warning(`Could not find tsconfig.json to add @payload-config path.`)\n return\n }\n const userTsConfigContent = await readFile(tsConfigPath, {\n encoding: 'utf8',\n })\n const userTsConfig = parse(userTsConfigContent) as {\n compilerOptions?: CompilerOptions\n }\n\n const hasBaseUrl =\n userTsConfig?.compilerOptions?.baseUrl && userTsConfig?.compilerOptions?.baseUrl !== '.'\n const baseUrl = hasBaseUrl ? userTsConfig?.compilerOptions?.baseUrl : './'\n\n if (!userTsConfig.compilerOptions && !('extends' in userTsConfig)) {\n userTsConfig.compilerOptions = {}\n }\n\n if (\n !userTsConfig.compilerOptions?.paths?.['@payload-config'] &&\n userTsConfig.compilerOptions?.paths\n ) {\n userTsConfig.compilerOptions.paths = {\n ...(userTsConfig.compilerOptions.paths || {}),\n '@payload-config': [`${baseUrl}${isSrcDir ? 'src/' : ''}payload.config.ts`],\n }\n await writeFile(tsConfigPath, stringify(userTsConfig, null, 2), { encoding: 'utf8' })\n }\n}\n\nasync function installAndConfigurePayload(\n args: {\n nextAppDetails: NextAppDetails\n nextConfigType: NextConfigType\n useDistFiles?: boolean\n } & InitNextArgs,\n): Promise<\n | { payloadConfigPath: string; success: true }\n | { payloadConfigPath?: string; reason: string; success: false }\n> {\n const {\n '--debug': debug,\n nextAppDetails: { isSrcDir, nextAppDir, nextConfigPath } = {},\n nextConfigType,\n projectDir,\n useDistFiles,\n } = args\n\n if (!nextAppDir || !nextConfigPath) {\n return {\n reason: 'Could not find app directory or next.config.js',\n success: false,\n }\n }\n\n const logDebug = (message: string) => {\n if (debug) {\n origDebug(message)\n }\n }\n\n if (!fs.existsSync(projectDir)) {\n return {\n reason: `Could not find specified project directory at ${projectDir}`,\n success: false,\n }\n }\n\n const templateFilesPath =\n dirname.endsWith('dist') || useDistFiles\n ? path.resolve(dirname, '../..', 'dist/template')\n : path.resolve(dirname, '../../../../templates/blank')\n\n logDebug(`Using template files from: ${templateFilesPath}`)\n\n if (!fs.existsSync(templateFilesPath)) {\n return {\n reason: `Could not find template source files from ${templateFilesPath}`,\n success: false,\n }\n } else {\n logDebug('Found template source files')\n }\n\n logDebug(`Copying template files from ${templateFilesPath} to ${nextAppDir}`)\n\n const templateSrcDir = path.resolve(templateFilesPath, isSrcDir ? '' : 'src')\n\n logDebug(`templateSrcDir: ${templateSrcDir}`)\n logDebug(`nextAppDir: ${nextAppDir}`)\n logDebug(`projectDir: ${projectDir}`)\n logDebug(`nextConfigPath: ${nextConfigPath}`)\n logDebug(`payloadConfigPath: ${path.resolve(projectDir, 'payload.config.ts')}`)\n\n logDebug(\n `isSrcDir: ${isSrcDir}. source: ${templateSrcDir}. dest: ${path.dirname(nextConfigPath)}`,\n )\n\n // This is a little clunky and needs to account for isSrcDir\n copyRecursiveSync(templateSrcDir, path.dirname(nextConfigPath))\n\n // Wrap next.config.js with withPayload\n await wrapNextConfig({ nextConfigPath, nextConfigType })\n\n return {\n payloadConfigPath: path.resolve(nextAppDir, '../payload.config.ts'),\n success: true,\n }\n}\n\nasync function installDeps(args: {\n dbType: DbType\n packageManager: PackageManager\n projectDir: string\n versionOrTag?: string\n}) {\n const { dbType, packageManager, projectDir, versionOrTag } = args\n const { getDbPackageName } = await import('./ast/adapter-config.js')\n\n const version = await resolvePackageVersion({ packageName: 'payload', versionOrTag })\n\n const packagesToInstall = ['payload', '@payloadcms/next', '@payloadcms/richtext-lexical'].map(\n (pkg) => `${pkg}@${version}`,\n )\n\n packagesToInstall.push(`${getDbPackageName(dbType)}@${version}`)\n\n // Match graphql version of @payloadcms/next\n packagesToInstall.push('graphql@^16.8.1')\n\n await ensurePnpmBuildApprovals({ packageManager, projectDir })\n\n return await installPackages({ packageManager, packagesToInstall, projectDir })\n}\n\nexport async function getNextAppDetails(projectDir: string): Promise<NextAppDetails> {\n const isSrcDir = fs.existsSync(path.resolve(projectDir, 'src'))\n\n // Match next.config.js, next.config.ts, next.config.mjs, next.config.cjs\n const nextConfigPath: string | undefined = (\n await globby('next.config.(\\\\w)?(t|j)s', { absolute: true, cwd: projectDir })\n )?.[0]\n\n if (!nextConfigPath || nextConfigPath.length === 0) {\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath: undefined,\n nextVersion: null,\n }\n }\n\n const packageObj = await fse.readJson(path.resolve(projectDir, 'package.json'))\n // Check if Next.js version is new enough\n let nextVersion = null\n if (packageObj.dependencies?.next) {\n nextVersion = packageObj.dependencies.next\n // Match versions using regex matching groups\n const versionMatch = /(?<major>\\d+)/.exec(nextVersion)\n if (!versionMatch) {\n p.log.warn(`Could not determine Next.js version from ${nextVersion}`)\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath,\n nextVersion,\n }\n }\n\n const { major } = versionMatch.groups as { major: string }\n const majorVersion = parseInt(major)\n if (majorVersion < 15) {\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath,\n nextVersion,\n }\n }\n }\n\n const isSupportedNextVersion = true\n\n // Check if Payload already installed\n if (packageObj.dependencies?.payload) {\n return {\n hasTopLevelLayout: false,\n isPayloadInstalled: true,\n isSrcDir,\n isSupportedNextVersion,\n nextConfigPath,\n nextVersion,\n }\n }\n\n let nextAppDir: string | undefined = (\n await globby(['**/app'], {\n absolute: true,\n cwd: projectDir,\n ignore: ['**/node_modules/**'],\n onlyDirectories: true,\n })\n )?.[0]\n\n if (!nextAppDir || nextAppDir.length === 0) {\n nextAppDir = undefined\n }\n\n const configType = getProjectType({ nextConfigPath, packageObj })\n\n const hasTopLevelLayout = nextAppDir\n ? fs.existsSync(path.resolve(nextAppDir, 'layout.tsx'))\n : false\n\n return {\n hasTopLevelLayout,\n isSrcDir,\n isSupportedNextVersion,\n nextAppDir,\n nextConfigPath,\n nextConfigType: configType,\n nextVersion,\n }\n}\n\nfunction getProjectType(args: {\n nextConfigPath: string\n packageObj: Record<string, unknown>\n}): NextConfigType {\n const { nextConfigPath, packageObj } = args\n\n if (nextConfigPath.endsWith('.ts')) {\n return 'ts'\n }\n\n if (nextConfigPath.endsWith('.mjs')) {\n return 'esm'\n }\n if (nextConfigPath.endsWith('.cjs')) {\n return 'cjs'\n }\n\n const packageJsonType = packageObj.type\n if (packageJsonType === 'module') {\n return 'esm'\n }\n if (packageJsonType === 'commonjs') {\n return 'cjs'\n }\n\n return 'cjs'\n}\n"],"names":["p","parse","stringify","fs","fse","globby","fileURLToPath","path","promisify","copyRecursiveSync","debug","origDebug","warning","moveMessage","DEFAULT_PAYLOAD_VERSION_TAG","resolvePackageVersion","ensurePnpmBuildApprovals","installPackages","wrapNextConfig","readFile","writeFile","filename","url","dirname","initNext","args","dbType","packageManager","projectDir","nextAppDetails","getNextAppDetails","nextAppDir","createdAppDir","resolve","isSrcDir","mkdirSync","recursive","hasTopLevelLayout","nextConfigType","reason","success","log","warn","installSpinner","spinner","start","configurationResult","installAndConfigurePayload","useDistFiles","stop","installSuccess","installDeps","versionOrTag","addPayloadConfigToTsConfig","tsConfigPath","existsSync","userTsConfigContent","encoding","userTsConfig","hasBaseUrl","compilerOptions","baseUrl","paths","nextConfigPath","logDebug","message","templateFilesPath","endsWith","templateSrcDir","payloadConfigPath","getDbPackageName","version","packageName","packagesToInstall","map","pkg","push","absolute","cwd","length","isSupportedNextVersion","undefined","nextVersion","packageObj","readJson","dependencies","next","versionMatch","exec","major","groups","majorVersion","parseInt","payload","isPayloadInstalled","ignore","onlyDirectories","configType","getProjectType","packageJsonType","type"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/init-next.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport fs from 'fs'\nimport fse from 'fs-extra'\nimport globby from 'globby'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nimport type { CliArgs, DbType, NextAppDetails, NextConfigType, PackageManager } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport { debug as origDebug, warning } from '../utils/log.js'\nimport { moveMessage } from '../utils/messages.js'\nimport {\n DEFAULT_PAYLOAD_VERSION_TAG,\n resolvePackageVersion,\n} from '../utils/resolvePackageVersion.js'\nimport { configurePayloadTsConfig } from './configure-payload-tsconfig.js'\nimport { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js'\nimport { installPackages } from './install-packages.js'\nimport { wrapNextConfig } from './wrap-next-config.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\ntype InitNextArgs = {\n dbType: DbType\n nextAppDetails?: NextAppDetails\n packageManager: PackageManager\n projectDir: string\n useDistFiles?: boolean\n} & Pick<CliArgs, '--debug' | '--payload-version'>\n\ntype InitNextResult =\n | { isSrcDir: boolean; nextAppDir?: string; reason: string; success: false }\n | {\n isSrcDir: boolean\n nextAppDir: string\n payloadConfigPath: string\n success: true\n }\n\nexport async function initNext(args: InitNextArgs): Promise<InitNextResult> {\n const { dbType: dbType, packageManager, projectDir } = args\n\n const nextAppDetails = args.nextAppDetails || (await getNextAppDetails(projectDir))\n\n if (!nextAppDetails.nextAppDir) {\n warning(`Could not find app directory in ${projectDir}, creating...`)\n const createdAppDir = path.resolve(projectDir, nextAppDetails.isSrcDir ? 'src/app' : 'app')\n fse.mkdirSync(createdAppDir, { recursive: true })\n nextAppDetails.nextAppDir = createdAppDir\n }\n\n const { hasTopLevelLayout, isSrcDir, nextAppDir, nextConfigType } = nextAppDetails\n\n if (!nextConfigType) {\n return {\n isSrcDir,\n nextAppDir,\n reason: `Could not determine Next Config type in ${projectDir}. Possibly try renaming next.config.js to next.config.cjs or next.config.mjs.`,\n success: false,\n }\n }\n\n if (hasTopLevelLayout) {\n // Output directions for user to move all files from app to top-level directory named `(app)`\n p.log.warn(moveMessage({ nextAppDir, projectDir }))\n return {\n isSrcDir,\n nextAppDir,\n reason: 'Found existing layout.tsx in app directory',\n success: false,\n }\n }\n\n const installSpinner = p.spinner()\n installSpinner.start('Installing Payload and dependencies...')\n\n const configurationResult = await installAndConfigurePayload({\n ...args,\n nextAppDetails,\n nextConfigType,\n useDistFiles: true, // Requires running 'pnpm pack-template-files' in cpa\n })\n\n if (configurationResult.success === false) {\n installSpinner.stop(configurationResult.reason, 1)\n return { ...configurationResult, isSrcDir, success: false }\n }\n\n const { success: installSuccess } = await installDeps({\n dbType,\n packageManager,\n projectDir,\n versionOrTag: args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG,\n })\n if (!installSuccess) {\n installSpinner.stop('Failed to install dependencies', 1)\n return {\n ...configurationResult,\n isSrcDir,\n reason: 'Failed to install dependencies',\n success: false,\n }\n }\n\n await configurePayloadTsConfig({\n configPath: path.resolve(projectDir, 'tsconfig.json'),\n payloadConfigPath: configurationResult.payloadConfigPath,\n })\n installSpinner.stop('Successfully installed Payload and dependencies')\n return { ...configurationResult, isSrcDir, nextAppDir, success: true }\n}\n\nasync function installAndConfigurePayload(\n args: {\n nextAppDetails: NextAppDetails\n nextConfigType: NextConfigType\n useDistFiles?: boolean\n } & InitNextArgs,\n): Promise<\n | { payloadConfigPath: string; success: true }\n | { payloadConfigPath?: string; reason: string; success: false }\n> {\n const {\n '--debug': debug,\n nextAppDetails: { isSrcDir, nextAppDir, nextConfigPath } = {},\n nextConfigType,\n projectDir,\n useDistFiles,\n } = args\n\n if (!nextAppDir || !nextConfigPath) {\n return {\n reason: 'Could not find app directory or next.config.js',\n success: false,\n }\n }\n\n const logDebug = (message: string) => {\n if (debug) {\n origDebug(message)\n }\n }\n\n if (!fs.existsSync(projectDir)) {\n return {\n reason: `Could not find specified project directory at ${projectDir}`,\n success: false,\n }\n }\n\n const templateFilesPath =\n dirname.endsWith('dist') || useDistFiles\n ? path.resolve(dirname, '../..', 'dist/template')\n : path.resolve(dirname, '../../../../templates/blank')\n\n logDebug(`Using template files from: ${templateFilesPath}`)\n\n if (!fs.existsSync(templateFilesPath)) {\n return {\n reason: `Could not find template source files from ${templateFilesPath}`,\n success: false,\n }\n } else {\n logDebug('Found template source files')\n }\n\n logDebug(`Copying template files from ${templateFilesPath} to ${nextAppDir}`)\n\n const templateSrcDir = path.resolve(templateFilesPath, isSrcDir ? '' : 'src')\n\n logDebug(`templateSrcDir: ${templateSrcDir}`)\n logDebug(`nextAppDir: ${nextAppDir}`)\n logDebug(`projectDir: ${projectDir}`)\n logDebug(`nextConfigPath: ${nextConfigPath}`)\n logDebug(`payloadConfigPath: ${path.resolve(projectDir, 'payload.config.ts')}`)\n\n logDebug(\n `isSrcDir: ${isSrcDir}. source: ${templateSrcDir}. dest: ${path.dirname(nextConfigPath)}`,\n )\n\n // This is a little clunky and needs to account for isSrcDir\n copyRecursiveSync(templateSrcDir, path.dirname(nextConfigPath))\n\n // Wrap next.config.js with withPayload\n await wrapNextConfig({ nextConfigPath, nextConfigType })\n\n return {\n payloadConfigPath: path.resolve(nextAppDir, '../payload.config.ts'),\n success: true,\n }\n}\n\nasync function installDeps(args: {\n dbType: DbType\n packageManager: PackageManager\n projectDir: string\n versionOrTag?: string\n}) {\n const { dbType, packageManager, projectDir, versionOrTag } = args\n const { getDbPackageName } = await import('./ast/adapter-config.js')\n\n const version = await resolvePackageVersion({ packageName: 'payload', versionOrTag })\n\n const packagesToInstall = ['payload', '@payloadcms/next', '@payloadcms/richtext-lexical'].map(\n (pkg) => `${pkg}@${version}`,\n )\n\n packagesToInstall.push(`${getDbPackageName(dbType)}@${version}`)\n\n // Match graphql version of @payloadcms/next\n packagesToInstall.push('graphql@^16.8.1')\n\n await ensurePnpmBuildApprovals({ packageManager, projectDir })\n\n return await installPackages({ packageManager, packagesToInstall, projectDir })\n}\n\nexport async function getNextAppDetails(projectDir: string): Promise<NextAppDetails> {\n const isSrcDir = fs.existsSync(path.resolve(projectDir, 'src'))\n\n // Match next.config.js, next.config.ts, next.config.mjs, next.config.cjs\n const nextConfigPath: string | undefined = (\n await globby('next.config.(\\\\w)?(t|j)s', { absolute: true, cwd: projectDir })\n )?.[0]\n\n if (!nextConfigPath || nextConfigPath.length === 0) {\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath: undefined,\n nextVersion: null,\n }\n }\n\n const packageObj = await fse.readJson(path.resolve(projectDir, 'package.json'))\n // Check if Next.js version is new enough\n let nextVersion = null\n if (packageObj.dependencies?.next) {\n nextVersion = packageObj.dependencies.next\n // Match versions using regex matching groups\n const versionMatch = /(?<major>\\d+)/.exec(nextVersion)\n if (!versionMatch) {\n p.log.warn(`Could not determine Next.js version from ${nextVersion}`)\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath,\n nextVersion,\n }\n }\n\n const { major } = versionMatch.groups as { major: string }\n const majorVersion = parseInt(major)\n if (majorVersion < 15) {\n return {\n hasTopLevelLayout: false,\n isSrcDir,\n isSupportedNextVersion: false,\n nextConfigPath,\n nextVersion,\n }\n }\n }\n\n const isSupportedNextVersion = true\n\n // Check if Payload already installed\n if (packageObj.dependencies?.payload) {\n return {\n hasTopLevelLayout: false,\n isPayloadInstalled: true,\n isSrcDir,\n isSupportedNextVersion,\n nextConfigPath,\n nextVersion,\n }\n }\n\n let nextAppDir: string | undefined = (\n await globby(['**/app'], {\n absolute: true,\n cwd: projectDir,\n ignore: ['**/node_modules/**'],\n onlyDirectories: true,\n })\n )?.[0]\n\n if (!nextAppDir || nextAppDir.length === 0) {\n nextAppDir = undefined\n }\n\n const configType = getProjectType({ nextConfigPath, packageObj })\n\n const hasTopLevelLayout = nextAppDir\n ? fs.existsSync(path.resolve(nextAppDir, 'layout.tsx'))\n : false\n\n return {\n hasTopLevelLayout,\n isSrcDir,\n isSupportedNextVersion,\n nextAppDir,\n nextConfigPath,\n nextConfigType: configType,\n nextVersion,\n }\n}\n\nfunction getProjectType(args: {\n nextConfigPath: string\n packageObj: Record<string, unknown>\n}): NextConfigType {\n const { nextConfigPath, packageObj } = args\n\n if (nextConfigPath.endsWith('.ts')) {\n return 'ts'\n }\n\n if (nextConfigPath.endsWith('.mjs')) {\n return 'esm'\n }\n if (nextConfigPath.endsWith('.cjs')) {\n return 'cjs'\n }\n\n const packageJsonType = packageObj.type\n if (packageJsonType === 'module') {\n return 'esm'\n }\n if (packageJsonType === 'commonjs') {\n return 'cjs'\n }\n\n return 'cjs'\n}\n"],"names":["p","fs","fse","globby","fileURLToPath","path","copyRecursiveSync","debug","origDebug","warning","moveMessage","DEFAULT_PAYLOAD_VERSION_TAG","resolvePackageVersion","configurePayloadTsConfig","ensurePnpmBuildApprovals","installPackages","wrapNextConfig","filename","url","dirname","initNext","args","dbType","packageManager","projectDir","nextAppDetails","getNextAppDetails","nextAppDir","createdAppDir","resolve","isSrcDir","mkdirSync","recursive","hasTopLevelLayout","nextConfigType","reason","success","log","warn","installSpinner","spinner","start","configurationResult","installAndConfigurePayload","useDistFiles","stop","installSuccess","installDeps","versionOrTag","configPath","payloadConfigPath","nextConfigPath","logDebug","message","existsSync","templateFilesPath","endsWith","templateSrcDir","getDbPackageName","version","packageName","packagesToInstall","map","pkg","push","absolute","cwd","length","isSupportedNextVersion","undefined","nextVersion","packageObj","readJson","dependencies","next","versionMatch","exec","major","groups","majorVersion","parseInt","payload","isPayloadInstalled","ignore","onlyDirectories","configType","getProjectType","packageJsonType","type"],"mappings":"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"}
|