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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +5 -0
  3. package/dist/commands.d.ts +4 -0
  4. package/dist/commands.d.ts.map +1 -0
  5. package/dist/commands.js +5 -0
  6. package/dist/commands.js.map +1 -0
  7. package/dist/lib/agent-config.d.ts +12 -0
  8. package/dist/lib/agent-config.d.ts.map +1 -0
  9. package/dist/lib/agent-config.js +15 -0
  10. package/dist/lib/agent-config.js.map +1 -0
  11. package/dist/lib/ast/adapter-config.d.ts.map +1 -1
  12. package/dist/lib/ast/adapter-config.js +0 -10
  13. package/dist/lib/ast/adapter-config.js.map +1 -1
  14. package/dist/lib/ast/package-json.d.ts +9 -0
  15. package/dist/lib/ast/package-json.d.ts.map +1 -1
  16. package/dist/lib/ast/package-json.js +34 -8
  17. package/dist/lib/ast/package-json.js.map +1 -1
  18. package/dist/lib/ast/payload-config.js +1 -1
  19. package/dist/lib/ast/payload-config.js.map +1 -1
  20. package/dist/lib/ast/types.d.ts +3 -3
  21. package/dist/lib/ast/types.d.ts.map +1 -1
  22. package/dist/lib/ast/types.js +0 -1
  23. package/dist/lib/ast/types.js.map +1 -1
  24. package/dist/lib/configure-payload-tsconfig.d.ts +5 -0
  25. package/dist/lib/configure-payload-tsconfig.d.ts.map +1 -0
  26. package/dist/lib/configure-payload-tsconfig.js +26 -0
  27. package/dist/lib/configure-payload-tsconfig.js.map +1 -0
  28. package/dist/lib/create-project.d.ts +1 -2
  29. package/dist/lib/create-project.d.ts.map +1 -1
  30. package/dist/lib/create-project.js +64 -79
  31. package/dist/lib/create-project.js.map +1 -1
  32. package/dist/lib/generate-secret.js +1 -1
  33. package/dist/lib/generate-secret.js.map +1 -1
  34. package/dist/lib/get-package-manager.d.ts +9 -0
  35. package/dist/lib/get-package-manager.d.ts.map +1 -1
  36. package/dist/lib/get-package-manager.js +20 -0
  37. package/dist/lib/get-package-manager.js.map +1 -1
  38. package/dist/lib/init-next.d.ts +6 -1
  39. package/dist/lib/init-next.d.ts.map +1 -1
  40. package/dist/lib/init-next.js +34 -41
  41. package/dist/lib/init-next.js.map +1 -1
  42. package/dist/lib/init-tanstack.d.ts +18 -0
  43. package/dist/lib/init-tanstack.d.ts.map +1 -0
  44. package/dist/lib/init-tanstack.js +149 -0
  45. package/dist/lib/init-tanstack.js.map +1 -0
  46. package/dist/lib/tanstack/detect.d.ts +5 -0
  47. package/dist/lib/tanstack/detect.d.ts.map +1 -0
  48. package/dist/lib/tanstack/detect.js +131 -0
  49. package/dist/lib/tanstack/detect.js.map +1 -0
  50. package/dist/lib/tanstack/prepare.d.ts +23 -0
  51. package/dist/lib/tanstack/prepare.d.ts.map +1 -0
  52. package/dist/lib/tanstack/prepare.js +114 -0
  53. package/dist/lib/tanstack/prepare.js.map +1 -0
  54. package/dist/lib/tanstack/template-files.d.ts +50 -0
  55. package/dist/lib/tanstack/template-files.d.ts.map +1 -0
  56. package/dist/lib/tanstack/template-files.js +64 -0
  57. package/dist/lib/tanstack/template-files.js.map +1 -0
  58. package/dist/lib/tanstack/transform-root-route.d.ts +7 -0
  59. package/dist/lib/tanstack/transform-root-route.d.ts.map +1 -0
  60. package/dist/lib/tanstack/transform-root-route.js +747 -0
  61. package/dist/lib/tanstack/transform-root-route.js.map +1 -0
  62. package/dist/lib/tanstack/transform-router.d.ts +5 -0
  63. package/dist/lib/tanstack/transform-router.d.ts.map +1 -0
  64. package/dist/lib/tanstack/transform-router.js +301 -0
  65. package/dist/lib/tanstack/transform-router.js.map +1 -0
  66. package/dist/lib/tanstack/transform-vite-config.d.ts +14 -0
  67. package/dist/lib/tanstack/transform-vite-config.d.ts.map +1 -0
  68. package/dist/lib/tanstack/transform-vite-config.js +576 -0
  69. package/dist/lib/tanstack/transform-vite-config.js.map +1 -0
  70. package/dist/lib/templates.d.ts.map +1 -1
  71. package/dist/lib/templates.js +11 -5
  72. package/dist/lib/templates.js.map +1 -1
  73. package/dist/lib/update-payload-in-project.d.ts +18 -3
  74. package/dist/lib/update-payload-in-project.d.ts.map +1 -1
  75. package/dist/lib/update-payload-in-project.js +102 -21
  76. package/dist/lib/update-payload-in-project.js.map +1 -1
  77. package/dist/lib/wrap-next-config.d.ts.map +1 -1
  78. package/dist/main.d.ts +20 -1
  79. package/dist/main.d.ts.map +1 -1
  80. package/dist/main.js +127 -36
  81. package/dist/main.js.map +1 -1
  82. package/dist/scripts/pack-template-files.js +18 -0
  83. package/dist/scripts/pack-template-files.js.map +1 -1
  84. package/dist/template/src/app/(frontend)/page.tsx +7 -4
  85. package/dist/template/src/app/(frontend)/styles.css +8 -1
  86. package/dist/template/src/app/(payload)/admin/[[...segments]]/not-found.tsx +1 -2
  87. package/dist/template/src/app/(payload)/admin/[[...segments]]/page.tsx +1 -2
  88. package/dist/template/src/app/(payload)/admin/importMap.js +30 -2
  89. package/dist/template/src/app/(payload)/api/[...slug]/route.ts +1 -2
  90. package/dist/template/src/app/(payload)/api/graphql/route.ts +1 -2
  91. package/dist/template/src/app/(payload)/api/graphql-playground/route.ts +1 -2
  92. package/dist/template/src/app/(payload)/custom.css +0 -0
  93. package/dist/template/src/app/(payload)/layout.tsx +9 -4
  94. package/dist/template/src/collections/Folders.ts +16 -0
  95. package/dist/template/src/collections/Media.ts +4 -0
  96. package/dist/template/src/collections/Tags.ts +16 -0
  97. package/dist/template/src/collections/Users.ts +1 -0
  98. package/dist/template/src/payload-types.ts +63 -9
  99. package/dist/template/src/payload.config.ts +14 -4
  100. package/dist/template-tanstack/routes/_payload/admin.$.tsx +25 -0
  101. package/dist/template-tanstack/routes/_payload/admin.index.tsx +25 -0
  102. package/dist/template-tanstack/routes/_payload/api.$.ts +11 -0
  103. package/dist/template-tanstack/routes/_payload/importMap.js +32 -0
  104. package/dist/template-tanstack/routes/_payload/server.functions.ts +50 -0
  105. package/dist/template-tanstack/routes/_payload.tsx +29 -0
  106. package/dist/template-tanstack/src/collections/Folders.ts +16 -0
  107. package/dist/template-tanstack/src/collections/Media.ts +20 -0
  108. package/dist/template-tanstack/src/collections/Tags.ts +16 -0
  109. package/dist/template-tanstack/src/collections/Users.ts +14 -0
  110. package/dist/template-tanstack/src/payload.config.ts +38 -0
  111. package/dist/types.d.ts +23 -4
  112. package/dist/types.d.ts.map +1 -1
  113. package/dist/types.js.map +1 -1
  114. package/dist/utils/messages.d.ts +1 -0
  115. package/dist/utils/messages.d.ts.map +1 -1
  116. package/dist/utils/messages.js +10 -6
  117. package/dist/utils/messages.js.map +1 -1
  118. package/dist/utils/resolvePackageVersion.d.ts +35 -0
  119. package/dist/utils/resolvePackageVersion.d.ts.map +1 -0
  120. package/dist/utils/resolvePackageVersion.js +62 -0
  121. package/dist/utils/resolvePackageVersion.js.map +1 -0
  122. package/package.json +8 -8
  123. package/dist/ast-integration.spec.js +0 -132
  124. package/dist/ast-integration.spec.js.map +0 -1
  125. package/dist/lib/ast/package-json.spec.js +0 -67
  126. package/dist/lib/ast/package-json.spec.js.map +0 -1
  127. package/dist/lib/ast/payload-config.spec.js +0 -365
  128. package/dist/lib/ast/payload-config.spec.js.map +0 -1
  129. package/dist/lib/ast/utils.spec.js +0 -226
  130. package/dist/lib/ast/utils.spec.js.map +0 -1
  131. package/dist/lib/create-project.spec.js +0 -190
  132. package/dist/lib/create-project.spec.js.map +0 -1
  133. package/dist/lib/download-skill.d.ts +0 -8
  134. package/dist/lib/download-skill.d.ts.map +0 -1
  135. package/dist/lib/download-skill.js +0 -35
  136. package/dist/lib/download-skill.js.map +0 -1
  137. package/dist/lib/manage-env-files.spec.js +0 -118
  138. package/dist/lib/manage-env-files.spec.js.map +0 -1
  139. package/dist/lib/select-agent.d.ts +0 -16
  140. package/dist/lib/select-agent.d.ts.map +0 -1
  141. package/dist/lib/select-agent.js +0 -67
  142. package/dist/lib/select-agent.js.map +0 -1
  143. package/dist/lib/wrap-next-config.spec.js +0 -167
  144. package/dist/lib/wrap-next-config.spec.js.map +0 -1
  145. package/dist/utils/getLatestPackageVersion.d.ts +0 -17
  146. package/dist/utils/getLatestPackageVersion.d.ts.map +0 -1
  147. package/dist/utils/getLatestPackageVersion.js +0 -20
  148. package/dist/utils/getLatestPackageVersion.js.map +0 -1
  149. /package/dist/{template/src/app/(payload)/custom.scss → template-tanstack/routes/_payload/custom.css} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD,wBAAgB,gBAAgB,CAAC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAQpF;AAED,wBAAgB,iBAAiB,IAAI,eAAe,EAAE,CAmCrD"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD,wBAAgB,gBAAgB,CAAC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAQpF;AAED,wBAAgB,iBAAiB,IAAI,eAAe,EAAE,CAyCrD"}
@@ -15,32 +15,38 @@ export function getValidTemplates() {
15
15
  name: 'blank',
16
16
  type: 'starter',
17
17
  description: 'Blank 3.0 Template',
18
- url: `https://github.com/payloadcms/payload/templates/blank#3.x`
18
+ url: `https://github.com/payloadcms/payload/templates/blank#main`
19
+ },
20
+ {
21
+ name: 'blank-tanstack',
22
+ type: 'starter',
23
+ description: 'Blank TanStack Start Template',
24
+ url: 'https://github.com/payloadcms/payload/templates/blank-tanstack#main'
19
25
  },
20
26
  {
21
27
  name: 'website',
22
28
  type: 'starter',
23
29
  description: 'Website Template',
24
- url: `https://github.com/payloadcms/payload/templates/website#3.x`
30
+ url: `https://github.com/payloadcms/payload/templates/website#main`
25
31
  },
26
32
  {
27
33
  name: 'ecommerce',
28
34
  type: 'starter',
29
35
  description: 'Ecommerce template',
30
- url: 'https://github.com/payloadcms/payload/templates/ecommerce#3.x'
36
+ url: 'https://github.com/payloadcms/payload/templates/ecommerce#main'
31
37
  },
32
38
  {
33
39
  name: 'with-cloudflare-d1',
34
40
  type: 'starter',
35
41
  dbType: 'd1-sqlite',
36
42
  description: 'Blank template with Cloudflare D1 and Workers integration',
37
- url: 'https://github.com/payloadcms/payload/templates/with-cloudflare-d1#3.x'
43
+ url: 'https://github.com/payloadcms/payload/templates/with-cloudflare-d1#main'
38
44
  },
39
45
  {
40
46
  name: 'plugin',
41
47
  type: 'plugin',
42
48
  description: 'Template for creating a Payload plugin',
43
- url: 'https://github.com/payloadcms/payload/templates/plugin#3.x'
49
+ url: 'https://github.com/payloadcms/payload/templates/plugin#main'
44
50
  }
45
51
  ];
46
52
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/templates.ts"],"sourcesContent":["import type { ProjectTemplate } from '../types.js'\n\nimport { error, info } from '../utils/log.js'\n\nexport function validateTemplate({ templateName }: { templateName: string }): boolean {\n const validTemplates = getValidTemplates()\n if (!validTemplates.map((t) => t.name).includes(templateName)) {\n error(`'${templateName}' is not a valid template.`)\n info(`Valid templates: ${validTemplates.map((t) => t.name).join(', ')}`)\n return false\n }\n return true\n}\n\nexport function getValidTemplates(): ProjectTemplate[] {\n // Starters _must_ be a valid template name from the templates/ directory\n return [\n {\n name: 'blank',\n type: 'starter',\n description: 'Blank 3.0 Template',\n url: `https://github.com/payloadcms/payload/templates/blank#3.x`,\n },\n {\n name: 'website',\n type: 'starter',\n description: 'Website Template',\n url: `https://github.com/payloadcms/payload/templates/website#3.x`,\n },\n {\n name: 'ecommerce',\n type: 'starter',\n description: 'Ecommerce template',\n url: 'https://github.com/payloadcms/payload/templates/ecommerce#3.x',\n },\n {\n name: 'with-cloudflare-d1',\n type: 'starter',\n dbType: 'd1-sqlite',\n description: 'Blank template with Cloudflare D1 and Workers integration',\n url: 'https://github.com/payloadcms/payload/templates/with-cloudflare-d1#3.x',\n },\n {\n name: 'plugin',\n type: 'plugin',\n description: 'Template for creating a Payload plugin',\n url: 'https://github.com/payloadcms/payload/templates/plugin#3.x',\n },\n ]\n}\n"],"names":["error","info","validateTemplate","templateName","validTemplates","getValidTemplates","map","t","name","includes","join","type","description","url","dbType"],"mappings":"AAEA,SAASA,KAAK,EAAEC,IAAI,QAAQ,kBAAiB;AAE7C,OAAO,SAASC,iBAAiB,EAAEC,YAAY,EAA4B;IACzE,MAAMC,iBAAiBC;IACvB,IAAI,CAACD,eAAeE,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI,EAAEC,QAAQ,CAACN,eAAe;QAC7DH,MAAM,CAAC,CAAC,EAAEG,aAAa,0BAA0B,CAAC;QAClDF,KAAK,CAAC,iBAAiB,EAAEG,eAAeE,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI,EAAEE,IAAI,CAAC,OAAO;QACvE,OAAO;IACT;IACA,OAAO;AACT;AAEA,OAAO,SAASL;IACd,yEAAyE;IACzE,OAAO;QACL;YACEG,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK,CAAC,yDAAyD,CAAC;QAClE;QACA;YACEL,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK,CAAC,2DAA2D,CAAC;QACpE;QACA;YACEL,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK;QACP;QACA;YACEL,MAAM;YACNG,MAAM;YACNG,QAAQ;YACRF,aAAa;YACbC,KAAK;QACP;QACA;YACEL,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK;QACP;KACD;AACH"}
1
+ {"version":3,"sources":["../../src/lib/templates.ts"],"sourcesContent":["import type { ProjectTemplate } from '../types.js'\n\nimport { error, info } from '../utils/log.js'\n\nexport function validateTemplate({ templateName }: { templateName: string }): boolean {\n const validTemplates = getValidTemplates()\n if (!validTemplates.map((t) => t.name).includes(templateName)) {\n error(`'${templateName}' is not a valid template.`)\n info(`Valid templates: ${validTemplates.map((t) => t.name).join(', ')}`)\n return false\n }\n return true\n}\n\nexport function getValidTemplates(): ProjectTemplate[] {\n // Starters _must_ be a valid template name from the templates/ directory\n return [\n {\n name: 'blank',\n type: 'starter',\n description: 'Blank 3.0 Template',\n url: `https://github.com/payloadcms/payload/templates/blank#main`,\n },\n {\n name: 'blank-tanstack',\n type: 'starter',\n description: 'Blank TanStack Start Template',\n url: 'https://github.com/payloadcms/payload/templates/blank-tanstack#main',\n },\n {\n name: 'website',\n type: 'starter',\n description: 'Website Template',\n url: `https://github.com/payloadcms/payload/templates/website#main`,\n },\n {\n name: 'ecommerce',\n type: 'starter',\n description: 'Ecommerce template',\n url: 'https://github.com/payloadcms/payload/templates/ecommerce#main',\n },\n {\n name: 'with-cloudflare-d1',\n type: 'starter',\n dbType: 'd1-sqlite',\n description: 'Blank template with Cloudflare D1 and Workers integration',\n url: 'https://github.com/payloadcms/payload/templates/with-cloudflare-d1#main',\n },\n {\n name: 'plugin',\n type: 'plugin',\n description: 'Template for creating a Payload plugin',\n url: 'https://github.com/payloadcms/payload/templates/plugin#main',\n },\n ]\n}\n"],"names":["error","info","validateTemplate","templateName","validTemplates","getValidTemplates","map","t","name","includes","join","type","description","url","dbType"],"mappings":"AAEA,SAASA,KAAK,EAAEC,IAAI,QAAQ,kBAAiB;AAE7C,OAAO,SAASC,iBAAiB,EAAEC,YAAY,EAA4B;IACzE,MAAMC,iBAAiBC;IACvB,IAAI,CAACD,eAAeE,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI,EAAEC,QAAQ,CAACN,eAAe;QAC7DH,MAAM,CAAC,CAAC,EAAEG,aAAa,0BAA0B,CAAC;QAClDF,KAAK,CAAC,iBAAiB,EAAEG,eAAeE,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI,EAAEE,IAAI,CAAC,OAAO;QACvE,OAAO;IACT;IACA,OAAO;AACT;AAEA,OAAO,SAASL;IACd,yEAAyE;IACzE,OAAO;QACL;YACEG,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK,CAAC,0DAA0D,CAAC;QACnE;QACA;YACEL,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK;QACP;QACA;YACEL,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK,CAAC,4DAA4D,CAAC;QACrE;QACA;YACEL,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK;QACP;QACA;YACEL,MAAM;YACNG,MAAM;YACNG,QAAQ;YACRF,aAAa;YACbC,KAAK;QACP;QACA;YACEL,MAAM;YACNG,MAAM;YACNC,aAAa;YACbC,KAAK;QACP;KACD;AACH"}
@@ -1,6 +1,21 @@
1
- import type { NextAppDetails } from '../types.js';
2
- export declare function updatePayloadInProject(appDetails: NextAppDetails): Promise<{
1
+ import type { NextAppDetails, TanStackAppDetails } from '../types.js';
2
+ type UpdateResult = {
3
3
  message: string;
4
4
  success: boolean;
5
- }>;
5
+ };
6
+ export declare function updatePayloadPackages({ projectDir, versionOrTag, }: {
7
+ projectDir: string;
8
+ versionOrTag?: string;
9
+ }): Promise<UpdateResult>;
10
+ export declare function updatePayloadInNextProject({ appDetails, versionOrTag, }: {
11
+ appDetails: NextAppDetails;
12
+ versionOrTag?: string;
13
+ }): Promise<UpdateResult>;
14
+ export declare function updatePayloadInTanStackProject({ appDetails, templateRoot, versionOrTag, }: {
15
+ appDetails: TanStackAppDetails;
16
+ templateRoot?: string;
17
+ versionOrTag?: string;
18
+ }): Promise<UpdateResult>;
19
+ export declare function updatePayloadInProject(appDetails: NextAppDetails, versionOrTag?: string): Promise<UpdateResult>;
20
+ export {};
6
21
  //# sourceMappingURL=update-payload-in-project.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-payload-in-project.d.ts","sourceRoot":"","sources":["../../src/lib/update-payload-in-project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAQjD,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,cAAc,GACzB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAqEhD"}
1
+ {"version":3,"file":"update-payload-in-project.d.ts","sourceRoot":"","sources":["../../src/lib/update-payload-in-project.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAYrE,KAAK,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAA;AAIzD,wBAAsB,qBAAqB,CAAC,EAC1C,UAAU,EACV,YAAY,GACb,EAAE;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,GAAG,OAAO,CAAC,YAAY,CAAC,CAIxB;AAED,wBAAsB,0BAA0B,CAAC,EAC/C,UAAU,EACV,YAAY,GACb,EAAE;IACD,UAAU,EAAE,cAAc,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,GAAG,OAAO,CAAC,YAAY,CAAC,CAuCxB;AAED,wBAAsB,8BAA8B,CAAC,EACnD,UAAU,EACV,YAA4C,EAC5C,YAAY,GACb,EAAE;IACD,UAAU,EAAE,kBAAkB,CAAA;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,GAAG,OAAO,CAAC,YAAY,CAAC,CAqCxB;AAED,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,cAAc,EAC1B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,YAAY,CAAC,CAEvB"}
@@ -1,14 +1,25 @@
1
1
  import fse from 'fs-extra';
2
2
  import { fileURLToPath } from 'node:url';
3
3
  import path from 'path';
4
- const filename = fileURLToPath(import.meta.url);
5
- const dirname = path.dirname(filename);
6
4
  import { copyRecursiveSync } from '../utils/copy-recursive-sync.js';
7
- import { getLatestPackageVersion } from '../utils/getLatestPackageVersion.js';
8
5
  import { info } from '../utils/log.js';
6
+ import { resolvePackageVersion } from '../utils/resolvePackageVersion.js';
9
7
  import { getPackageManager } from './get-package-manager.js';
10
8
  import { installPackages } from './install-packages.js';
11
- export async function updatePayloadInProject(appDetails) {
9
+ import { TANSTACK_TEMPLATE_FILES } from './tanstack/template-files.js';
10
+ const filename = fileURLToPath(import.meta.url);
11
+ const dirname = path.dirname(filename);
12
+ export async function updatePayloadPackages({ projectDir, versionOrTag }) {
13
+ const result = await performPayloadPackageUpdate({
14
+ projectDir,
15
+ versionOrTag
16
+ });
17
+ return {
18
+ message: result.message,
19
+ success: result.success
20
+ };
21
+ }
22
+ export async function updatePayloadInNextProject({ appDetails, versionOrTag }) {
12
23
  if (!appDetails.nextConfigPath) {
13
24
  return {
14
25
  message: 'No Next.js config found',
@@ -16,36 +27,108 @@ export async function updatePayloadInProject(appDetails) {
16
27
  };
17
28
  }
18
29
  const projectDir = path.dirname(appDetails.nextConfigPath);
30
+ const packageUpdate = await performPayloadPackageUpdate({
31
+ projectDir,
32
+ versionOrTag
33
+ });
34
+ if (!packageUpdate.isUpdated) {
35
+ return {
36
+ message: packageUpdate.message,
37
+ success: packageUpdate.success
38
+ };
39
+ }
40
+ info(`Updating Payload Next.js files...`);
41
+ const templateFilesPath = process.env.JEST_WORKER_ID !== undefined ? path.resolve(dirname, '../../../../templates/blank') : path.resolve(dirname, '../..', 'dist/template');
42
+ const templateSrcDir = path.resolve(templateFilesPath, 'src/app/(payload)');
43
+ const payloadDirPath = path.resolve(projectDir, appDetails.isSrcDir ? 'src/app' : 'app', '(payload)');
44
+ const legacyCustomStylesPath = path.resolve(payloadDirPath, 'custom.scss');
45
+ const customCssPath = path.resolve(payloadDirPath, 'custom.css');
46
+ if (fse.existsSync(legacyCustomStylesPath) && !fse.existsSync(customCssPath)) {
47
+ fse.renameSync(legacyCustomStylesPath, customCssPath);
48
+ info('Renamed `(payload)/custom.scss` to `custom.css`. If it contained Sass syntax (nesting, `$variables`, `@mixin`, etc.), convert it to plain CSS — it is no longer transpiled.');
49
+ }
50
+ copyRecursiveSync(templateSrcDir, payloadDirPath, [
51
+ 'custom.css$'
52
+ ]);
53
+ return {
54
+ message: packageUpdate.message,
55
+ success: packageUpdate.success
56
+ };
57
+ }
58
+ export async function updatePayloadInTanStackProject({ appDetails, templateRoot = resolveTanStackTemplateRoot(), versionOrTag }) {
59
+ const packageUpdate = await performPayloadPackageUpdate({
60
+ projectDir: appDetails.projectDir,
61
+ versionOrTag
62
+ });
63
+ if (!packageUpdate.isUpdated) {
64
+ return {
65
+ message: packageUpdate.message,
66
+ success: packageUpdate.success
67
+ };
68
+ }
69
+ info(`Updating Payload TanStack files...`);
70
+ const hasPackedTemplateLayout = fse.existsSync(path.join(templateRoot, 'routes'));
71
+ for (const { destination, relativePath, sourcePath } of TANSTACK_TEMPLATE_FILES){
72
+ const isPayloadRoute = destination === 'routes' && relativePath.startsWith('_payload');
73
+ const isCustomStyles = destination === 'routes' && relativePath === '_payload/custom.css';
74
+ if (!isPayloadRoute) {
75
+ continue;
76
+ }
77
+ const destinationPath = path.join(destination === 'routes' ? appDetails.routesDir : appDetails.sourceDir, relativePath);
78
+ if (isCustomStyles && fse.existsSync(destinationPath)) {
79
+ continue;
80
+ }
81
+ const templatePath = hasPackedTemplateLayout ? path.join(templateRoot, destination, relativePath) : path.join(templateRoot, sourcePath);
82
+ fse.ensureDirSync(path.dirname(destinationPath));
83
+ fse.copyFileSync(templatePath, destinationPath);
84
+ }
85
+ return {
86
+ message: packageUpdate.message,
87
+ success: packageUpdate.success
88
+ };
89
+ }
90
+ export async function updatePayloadInProject(appDetails, versionOrTag) {
91
+ return updatePayloadInNextProject({
92
+ appDetails,
93
+ versionOrTag
94
+ });
95
+ }
96
+ async function performPayloadPackageUpdate({ projectDir, versionOrTag }) {
19
97
  const packageObj = await fse.readJson(path.resolve(projectDir, 'package.json'));
20
- if (!packageObj?.dependencies) {
98
+ if (!packageObj.dependencies && !packageObj.devDependencies) {
21
99
  throw new Error('No package.json found in this project');
22
100
  }
23
- const payloadVersion = packageObj.dependencies?.payload;
101
+ const dependencyGroups = [
102
+ packageObj.dependencies,
103
+ packageObj.devDependencies
104
+ ].filter((dependencies)=>Boolean(dependencies));
105
+ const payloadPackageEntries = dependencyGroups.flatMap((dependencies)=>Object.entries(dependencies).filter(([packageName])=>packageName === 'payload' || packageName.startsWith('@payloadcms/')));
106
+ const payloadVersion = payloadPackageEntries.find(([packageName])=>packageName === 'payload')?.[1];
24
107
  if (!payloadVersion) {
25
108
  throw new Error('Payload is not installed in this project');
26
109
  }
27
110
  const packageManager = await getPackageManager({
28
111
  projectDir
29
112
  });
30
- // Fetch latest Payload version
31
- const latestPayloadVersion = await getLatestPackageVersion({
32
- packageName: 'payload'
113
+ const latestPayloadVersion = await resolvePackageVersion({
114
+ packageName: 'payload',
115
+ versionOrTag
33
116
  });
34
- if (payloadVersion === latestPayloadVersion) {
117
+ if (payloadPackageEntries.every(([, version])=>version === latestPayloadVersion)) {
35
118
  return {
119
+ isUpdated: false,
36
120
  message: `Payload v${payloadVersion} is already up to date.`,
37
121
  success: true
38
122
  };
39
123
  }
40
- // Update all existing Payload packages
41
- const payloadPackages = Object.keys(packageObj.dependencies).filter((dep)=>dep.startsWith('@payloadcms/'));
124
+ const payloadPackages = payloadPackageEntries.map(([packageName])=>packageName).filter((packageName)=>packageName.startsWith('@payloadcms/'));
42
125
  const packageNames = [
43
126
  'payload',
44
- ...payloadPackages
127
+ ...new Set(payloadPackages)
45
128
  ];
46
- const packagesToUpdate = packageNames.map((pkg)=>`${pkg}@${latestPayloadVersion}`);
129
+ const packagesToUpdate = packageNames.map((packageName)=>`${packageName}@${latestPayloadVersion}`);
47
130
  info(`Using ${packageManager}.\n`);
48
- info(`Updating ${packagesToUpdate.length} Payload packages to v${latestPayloadVersion}...\n\n${packageNames.map((p)=>` - ${p}`).join('\n')}`);
131
+ info(`Updating ${packagesToUpdate.length} Payload packages to v${latestPayloadVersion}...\n\n${packageNames.map((packageName)=>` - ${packageName}`).join('\n')}`);
49
132
  const { success: updateSuccess } = await installPackages({
50
133
  packageManager,
51
134
  packagesToInstall: packagesToUpdate,
@@ -55,16 +138,14 @@ export async function updatePayloadInProject(appDetails) {
55
138
  throw new Error('Failed to update Payload packages');
56
139
  }
57
140
  info('Payload packages updated successfully.');
58
- info(`Updating Payload Next.js files...`);
59
- const templateFilesPath = process.env.JEST_WORKER_ID !== undefined ? path.resolve(dirname, '../../../../templates/blank') : path.resolve(dirname, '../..', 'dist/template');
60
- const templateSrcDir = path.resolve(templateFilesPath, 'src/app/(payload)');
61
- copyRecursiveSync(templateSrcDir, path.resolve(projectDir, appDetails.isSrcDir ? 'src/app' : 'app', '(payload)'), [
62
- 'custom.scss$'
63
- ]);
64
141
  return {
142
+ isUpdated: true,
65
143
  message: 'Payload updated successfully.',
66
144
  success: true
67
145
  };
68
146
  }
147
+ function resolveTanStackTemplateRoot() {
148
+ return path.basename(path.dirname(dirname)) === 'dist' ? path.resolve(dirname, '../template-tanstack') : path.resolve(dirname, '../../../../templates/blank-tanstack/src');
149
+ }
69
150
 
70
151
  //# sourceMappingURL=update-payload-in-project.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/update-payload-in-project.ts"],"sourcesContent":["import fse from 'fs-extra'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nimport type { NextAppDetails } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport { getLatestPackageVersion } from '../utils/getLatestPackageVersion.js'\nimport { info } from '../utils/log.js'\nimport { getPackageManager } from './get-package-manager.js'\nimport { installPackages } from './install-packages.js'\n\nexport async function updatePayloadInProject(\n appDetails: NextAppDetails,\n): Promise<{ message: string; success: boolean }> {\n if (!appDetails.nextConfigPath) {\n return { message: 'No Next.js config found', success: false }\n }\n\n const projectDir = path.dirname(appDetails.nextConfigPath)\n\n const packageObj = (await fse.readJson(path.resolve(projectDir, 'package.json'))) as {\n dependencies?: Record<string, string>\n }\n if (!packageObj?.dependencies) {\n throw new Error('No package.json found in this project')\n }\n\n const payloadVersion = packageObj.dependencies?.payload\n if (!payloadVersion) {\n throw new Error('Payload is not installed in this project')\n }\n\n const packageManager = await getPackageManager({ projectDir })\n\n // Fetch latest Payload version\n const latestPayloadVersion = await getLatestPackageVersion({ packageName: 'payload' })\n\n if (payloadVersion === latestPayloadVersion) {\n return { message: `Payload v${payloadVersion} is already up to date.`, success: true }\n }\n\n // Update all existing Payload packages\n const payloadPackages = Object.keys(packageObj.dependencies).filter((dep) =>\n dep.startsWith('@payloadcms/'),\n )\n\n const packageNames = ['payload', ...payloadPackages]\n\n const packagesToUpdate = packageNames.map((pkg) => `${pkg}@${latestPayloadVersion}`)\n\n info(`Using ${packageManager}.\\n`)\n info(\n `Updating ${packagesToUpdate.length} Payload packages to v${latestPayloadVersion}...\\n\\n${packageNames.map((p) => ` - ${p}`).join('\\n')}`,\n )\n\n const { success: updateSuccess } = await installPackages({\n packageManager,\n packagesToInstall: packagesToUpdate,\n projectDir,\n })\n\n if (!updateSuccess) {\n throw new Error('Failed to update Payload packages')\n }\n info('Payload packages updated successfully.')\n\n info(`Updating Payload Next.js files...`)\n\n const templateFilesPath =\n process.env.JEST_WORKER_ID !== undefined\n ? path.resolve(dirname, '../../../../templates/blank')\n : path.resolve(dirname, '../..', 'dist/template')\n\n const templateSrcDir = path.resolve(templateFilesPath, 'src/app/(payload)')\n\n copyRecursiveSync(\n templateSrcDir,\n path.resolve(projectDir, appDetails.isSrcDir ? 'src/app' : 'app', '(payload)'),\n ['custom.scss$'], // Do not overwrite user's custom.scss\n )\n\n return { message: 'Payload updated successfully.', success: true }\n}\n"],"names":["fse","fileURLToPath","path","filename","url","dirname","copyRecursiveSync","getLatestPackageVersion","info","getPackageManager","installPackages","updatePayloadInProject","appDetails","nextConfigPath","message","success","projectDir","packageObj","readJson","resolve","dependencies","Error","payloadVersion","payload","packageManager","latestPayloadVersion","packageName","payloadPackages","Object","keys","filter","dep","startsWith","packageNames","packagesToUpdate","map","pkg","length","p","join","updateSuccess","packagesToInstall","templateFilesPath","process","env","JEST_WORKER_ID","undefined","templateSrcDir","isSrcDir"],"mappings":"AAAA,OAAOA,SAAS,WAAU;AAC1B,SAASC,aAAa,QAAQ,WAAU;AACxC,OAAOC,UAAU,OAAM;AAEvB,MAAMC,WAAWF,cAAc,YAAYG,GAAG;AAC9C,MAAMC,UAAUH,KAAKG,OAAO,CAACF;AAI7B,SAASG,iBAAiB,QAAQ,kCAAiC;AACnE,SAASC,uBAAuB,QAAQ,sCAAqC;AAC7E,SAASC,IAAI,QAAQ,kBAAiB;AACtC,SAASC,iBAAiB,QAAQ,2BAA0B;AAC5D,SAASC,eAAe,QAAQ,wBAAuB;AAEvD,OAAO,eAAeC,uBACpBC,UAA0B;IAE1B,IAAI,CAACA,WAAWC,cAAc,EAAE;QAC9B,OAAO;YAAEC,SAAS;YAA2BC,SAAS;QAAM;IAC9D;IAEA,MAAMC,aAAad,KAAKG,OAAO,CAACO,WAAWC,cAAc;IAEzD,MAAMI,aAAc,MAAMjB,IAAIkB,QAAQ,CAAChB,KAAKiB,OAAO,CAACH,YAAY;IAGhE,IAAI,CAACC,YAAYG,cAAc;QAC7B,MAAM,IAAIC,MAAM;IAClB;IAEA,MAAMC,iBAAiBL,WAAWG,YAAY,EAAEG;IAChD,IAAI,CAACD,gBAAgB;QACnB,MAAM,IAAID,MAAM;IAClB;IAEA,MAAMG,iBAAiB,MAAMf,kBAAkB;QAAEO;IAAW;IAE5D,+BAA+B;IAC/B,MAAMS,uBAAuB,MAAMlB,wBAAwB;QAAEmB,aAAa;IAAU;IAEpF,IAAIJ,mBAAmBG,sBAAsB;QAC3C,OAAO;YAAEX,SAAS,CAAC,SAAS,EAAEQ,eAAe,uBAAuB,CAAC;YAAEP,SAAS;QAAK;IACvF;IAEA,uCAAuC;IACvC,MAAMY,kBAAkBC,OAAOC,IAAI,CAACZ,WAAWG,YAAY,EAAEU,MAAM,CAAC,CAACC,MACnEA,IAAIC,UAAU,CAAC;IAGjB,MAAMC,eAAe;QAAC;WAAcN;KAAgB;IAEpD,MAAMO,mBAAmBD,aAAaE,GAAG,CAAC,CAACC,MAAQ,GAAGA,IAAI,CAAC,EAAEX,sBAAsB;IAEnFjB,KAAK,CAAC,MAAM,EAAEgB,eAAe,GAAG,CAAC;IACjChB,KACE,CAAC,SAAS,EAAE0B,iBAAiBG,MAAM,CAAC,sBAAsB,EAAEZ,qBAAqB,OAAO,EAAEQ,aAAaE,GAAG,CAAC,CAACG,IAAM,CAAC,IAAI,EAAEA,GAAG,EAAEC,IAAI,CAAC,OAAO;IAG5I,MAAM,EAAExB,SAASyB,aAAa,EAAE,GAAG,MAAM9B,gBAAgB;QACvDc;QACAiB,mBAAmBP;QACnBlB;IACF;IAEA,IAAI,CAACwB,eAAe;QAClB,MAAM,IAAInB,MAAM;IAClB;IACAb,KAAK;IAELA,KAAK,CAAC,iCAAiC,CAAC;IAExC,MAAMkC,oBACJC,QAAQC,GAAG,CAACC,cAAc,KAAKC,YAC3B5C,KAAKiB,OAAO,CAACd,SAAS,iCACtBH,KAAKiB,OAAO,CAACd,SAAS,SAAS;IAErC,MAAM0C,iBAAiB7C,KAAKiB,OAAO,CAACuB,mBAAmB;IAEvDpC,kBACEyC,gBACA7C,KAAKiB,OAAO,CAACH,YAAYJ,WAAWoC,QAAQ,GAAG,YAAY,OAAO,cAClE;QAAC;KAAe;IAGlB,OAAO;QAAElC,SAAS;QAAiCC,SAAS;IAAK;AACnE"}
1
+ {"version":3,"sources":["../../src/lib/update-payload-in-project.ts"],"sourcesContent":["import fse from 'fs-extra'\nimport { fileURLToPath } from 'node:url'\nimport path from 'path'\n\nimport type { NextAppDetails, TanStackAppDetails } from '../types.js'\n\nimport { copyRecursiveSync } from '../utils/copy-recursive-sync.js'\nimport { info } from '../utils/log.js'\nimport { resolvePackageVersion } from '../utils/resolvePackageVersion.js'\nimport { getPackageManager } from './get-package-manager.js'\nimport { installPackages } from './install-packages.js'\nimport { TANSTACK_TEMPLATE_FILES } from './tanstack/template-files.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\ntype UpdateResult = { message: string; success: boolean }\n\ntype PackageUpdateResult = { isUpdated: boolean } & UpdateResult\n\nexport async function updatePayloadPackages({\n projectDir,\n versionOrTag,\n}: {\n projectDir: string\n versionOrTag?: string\n}): Promise<UpdateResult> {\n const result = await performPayloadPackageUpdate({ projectDir, versionOrTag })\n\n return { message: result.message, success: result.success }\n}\n\nexport async function updatePayloadInNextProject({\n appDetails,\n versionOrTag,\n}: {\n appDetails: NextAppDetails\n versionOrTag?: string\n}): Promise<UpdateResult> {\n if (!appDetails.nextConfigPath) {\n return { message: 'No Next.js config found', success: false }\n }\n\n const projectDir = path.dirname(appDetails.nextConfigPath)\n const packageUpdate = await performPayloadPackageUpdate({ projectDir, versionOrTag })\n\n if (!packageUpdate.isUpdated) {\n return { message: packageUpdate.message, success: packageUpdate.success }\n }\n\n info(`Updating Payload Next.js files...`)\n\n const templateFilesPath =\n process.env.JEST_WORKER_ID !== undefined\n ? path.resolve(dirname, '../../../../templates/blank')\n : path.resolve(dirname, '../..', 'dist/template')\n\n const templateSrcDir = path.resolve(templateFilesPath, 'src/app/(payload)')\n const payloadDirPath = path.resolve(\n projectDir,\n appDetails.isSrcDir ? 'src/app' : 'app',\n '(payload)',\n )\n\n const legacyCustomStylesPath = path.resolve(payloadDirPath, 'custom.scss')\n const customCssPath = path.resolve(payloadDirPath, 'custom.css')\n\n if (fse.existsSync(legacyCustomStylesPath) && !fse.existsSync(customCssPath)) {\n fse.renameSync(legacyCustomStylesPath, customCssPath)\n info(\n 'Renamed `(payload)/custom.scss` to `custom.css`. If it contained Sass syntax (nesting, `$variables`, `@mixin`, etc.), convert it to plain CSS — it is no longer transpiled.',\n )\n }\n\n copyRecursiveSync(templateSrcDir, payloadDirPath, ['custom.css$'])\n\n return { message: packageUpdate.message, success: packageUpdate.success }\n}\n\nexport async function updatePayloadInTanStackProject({\n appDetails,\n templateRoot = resolveTanStackTemplateRoot(),\n versionOrTag,\n}: {\n appDetails: TanStackAppDetails\n templateRoot?: string\n versionOrTag?: string\n}): Promise<UpdateResult> {\n const packageUpdate = await performPayloadPackageUpdate({\n projectDir: appDetails.projectDir,\n versionOrTag,\n })\n\n if (!packageUpdate.isUpdated) {\n return { message: packageUpdate.message, success: packageUpdate.success }\n }\n\n info(`Updating Payload TanStack files...`)\n const hasPackedTemplateLayout = fse.existsSync(path.join(templateRoot, 'routes'))\n\n for (const { destination, relativePath, sourcePath } of TANSTACK_TEMPLATE_FILES) {\n const isPayloadRoute = destination === 'routes' && relativePath.startsWith('_payload')\n const isCustomStyles = destination === 'routes' && relativePath === '_payload/custom.css'\n\n if (!isPayloadRoute) {\n continue\n }\n\n const destinationPath = path.join(\n destination === 'routes' ? appDetails.routesDir : appDetails.sourceDir,\n relativePath,\n )\n if (isCustomStyles && fse.existsSync(destinationPath)) {\n continue\n }\n\n const templatePath = hasPackedTemplateLayout\n ? path.join(templateRoot, destination, relativePath)\n : path.join(templateRoot, sourcePath)\n fse.ensureDirSync(path.dirname(destinationPath))\n fse.copyFileSync(templatePath, destinationPath)\n }\n\n return { message: packageUpdate.message, success: packageUpdate.success }\n}\n\nexport async function updatePayloadInProject(\n appDetails: NextAppDetails,\n versionOrTag?: string,\n): Promise<UpdateResult> {\n return updatePayloadInNextProject({ appDetails, versionOrTag })\n}\n\nasync function performPayloadPackageUpdate({\n projectDir,\n versionOrTag,\n}: {\n projectDir: string\n versionOrTag?: string\n}): Promise<PackageUpdateResult> {\n const packageObj = (await fse.readJson(path.resolve(projectDir, 'package.json'))) as {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n }\n if (!packageObj.dependencies && !packageObj.devDependencies) {\n throw new Error('No package.json found in this project')\n }\n\n const dependencyGroups = [packageObj.dependencies, packageObj.devDependencies].filter(\n (dependencies): dependencies is Record<string, string> => Boolean(dependencies),\n )\n const payloadPackageEntries = dependencyGroups.flatMap((dependencies) =>\n Object.entries(dependencies).filter(\n ([packageName]) => packageName === 'payload' || packageName.startsWith('@payloadcms/'),\n ),\n )\n const payloadVersion = payloadPackageEntries.find(\n ([packageName]) => packageName === 'payload',\n )?.[1]\n if (!payloadVersion) {\n throw new Error('Payload is not installed in this project')\n }\n\n const packageManager = await getPackageManager({ projectDir })\n const latestPayloadVersion = await resolvePackageVersion({ packageName: 'payload', versionOrTag })\n\n if (payloadPackageEntries.every(([, version]) => version === latestPayloadVersion)) {\n return {\n isUpdated: false,\n message: `Payload v${payloadVersion} is already up to date.`,\n success: true,\n }\n }\n\n const payloadPackages = payloadPackageEntries\n .map(([packageName]) => packageName)\n .filter((packageName) => packageName.startsWith('@payloadcms/'))\n const packageNames = ['payload', ...new Set(payloadPackages)]\n const packagesToUpdate = packageNames.map(\n (packageName) => `${packageName}@${latestPayloadVersion}`,\n )\n\n info(`Using ${packageManager}.\\n`)\n info(\n `Updating ${packagesToUpdate.length} Payload packages to v${latestPayloadVersion}...\\n\\n${packageNames.map((packageName) => ` - ${packageName}`).join('\\n')}`,\n )\n\n const { success: updateSuccess } = await installPackages({\n packageManager,\n packagesToInstall: packagesToUpdate,\n projectDir,\n })\n\n if (!updateSuccess) {\n throw new Error('Failed to update Payload packages')\n }\n info('Payload packages updated successfully.')\n\n return { isUpdated: true, message: 'Payload updated successfully.', success: true }\n}\n\nfunction resolveTanStackTemplateRoot(): string {\n return path.basename(path.dirname(dirname)) === 'dist'\n ? path.resolve(dirname, '../template-tanstack')\n : path.resolve(dirname, '../../../../templates/blank-tanstack/src')\n}\n"],"names":["fse","fileURLToPath","path","copyRecursiveSync","info","resolvePackageVersion","getPackageManager","installPackages","TANSTACK_TEMPLATE_FILES","filename","url","dirname","updatePayloadPackages","projectDir","versionOrTag","result","performPayloadPackageUpdate","message","success","updatePayloadInNextProject","appDetails","nextConfigPath","packageUpdate","isUpdated","templateFilesPath","process","env","JEST_WORKER_ID","undefined","resolve","templateSrcDir","payloadDirPath","isSrcDir","legacyCustomStylesPath","customCssPath","existsSync","renameSync","updatePayloadInTanStackProject","templateRoot","resolveTanStackTemplateRoot","hasPackedTemplateLayout","join","destination","relativePath","sourcePath","isPayloadRoute","startsWith","isCustomStyles","destinationPath","routesDir","sourceDir","templatePath","ensureDirSync","copyFileSync","updatePayloadInProject","packageObj","readJson","dependencies","devDependencies","Error","dependencyGroups","filter","Boolean","payloadPackageEntries","flatMap","Object","entries","packageName","payloadVersion","find","packageManager","latestPayloadVersion","every","version","payloadPackages","map","packageNames","Set","packagesToUpdate","length","updateSuccess","packagesToInstall","basename"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-next-config.d.ts","sourceRoot":"","sources":["../../src/lib/wrap-next-config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,eAAO,MAAM,oBAAoB;;;;CAIhC,CAAA;AAED,eAAO,MAAM,cAAc,SAAgB;IACzC,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,cAAc,CAAA;CAC/B,kBAaA,CAAA;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,cAAc,GACzB,OAAO,CAAC;IAAE,qBAAqB,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA4H9D"}
1
+ {"version":3,"file":"wrap-next-config.d.ts","sourceRoot":"","sources":["../../src/lib/wrap-next-config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,eAAO,MAAM,oBAAoB;IAC/B,GAAG;IACH,GAAG;IACH,EAAE;CACH,CAAA;AAED,eAAO,MAAM,cAAc,SAAgB;IACzC,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,cAAc,CAAA;CAC/B,kBAaA,CAAA;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,cAAc,GACzB,OAAO,CAAC;IAAE,qBAAqB,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA4H9D"}
package/dist/main.d.ts CHANGED
@@ -1,7 +1,26 @@
1
- import type { CliArgs } from './types.js';
1
+ import type { CliArgs, NextAppDetails, TanStackAppDetails, TanStackDetectionResult } from './types.js';
2
2
  export declare class Main {
3
3
  args: CliArgs;
4
4
  constructor();
5
5
  init(): Promise<void>;
6
6
  }
7
+ type AppFramework = {
8
+ appDetails: NextAppDetails;
9
+ kind: 'next';
10
+ } | {
11
+ appDetails: TanStackAppDetails;
12
+ kind: 'tanstack';
13
+ } | {
14
+ kind: 'ambiguous';
15
+ } | {
16
+ kind: 'none';
17
+ } | {
18
+ kind: 'unsupported-tanstack';
19
+ reason: string;
20
+ };
21
+ export declare function resolveAppFramework({ nextAppDetails, tanStackDetection, }: {
22
+ nextAppDetails: NextAppDetails;
23
+ tanStackDetection: TanStackDetectionResult;
24
+ }): AppFramework;
25
+ export {};
7
26
  //# sourceMappingURL=main.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAyBzC,qBAAa,IAAI;IACf,IAAI,EAAE,OAAO,CAAA;;IAoDP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA2N5B"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,YAAY,CAAA;AAiCnB,qBAAa,IAAI;IACf,IAAI,EAAE,OAAO,CAAA;IAEb,cA8CC;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAwS1B;CACF;AAED,KAAK,YAAY,GACb;IAAE,UAAU,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,UAAU,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpD,wBAAgB,mBAAmB,CAAC,EAClC,cAAc,EACd,iBAAiB,GAClB,EAAE;IACD,cAAc,EAAE,cAAc,CAAA;IAC9B,iBAAiB,EAAE,uBAAuB,CAAA;CAC3C,GAAG,YAAY,CAkBf"}
package/dist/main.js CHANGED
@@ -9,23 +9,23 @@ import { createProject } from './lib/create-project.js';
9
9
  import { parseExample } from './lib/examples.js';
10
10
  import { generateSecret } from './lib/generate-secret.js';
11
11
  import { getPackageManager } from './lib/get-package-manager.js';
12
- import { getNextAppDetails, initNext } from './lib/init-next.js';
12
+ import { getNextAppDetails, initNext, minimumNextVersion } from './lib/init-next.js';
13
+ import { initTanStack } from './lib/init-tanstack.js';
13
14
  import { manageEnvFiles } from './lib/manage-env-files.js';
14
15
  import { parseProjectName } from './lib/parse-project-name.js';
15
16
  import { parseTemplate } from './lib/parse-template.js';
16
- import { selectAgent } from './lib/select-agent.js';
17
17
  import { selectDb } from './lib/select-db.js';
18
+ import { getTanStackAppDetails } from './lib/tanstack/detect.js';
18
19
  import { getValidTemplates, validateTemplate } from './lib/templates.js';
19
- import { updatePayloadInProject } from './lib/update-payload-in-project.js';
20
- import { getLatestPackageVersion } from './utils/getLatestPackageVersion.js';
20
+ import { updatePayloadInNextProject, updatePayloadInTanStackProject } from './lib/update-payload-in-project.js';
21
21
  import { debug, error, info } from './utils/log.js';
22
- import { feedbackOutro, helpMessage, moveMessage, successfulNextInit, successMessage } from './utils/messages.js';
22
+ import { feedbackOutro, helpMessage, moveMessage, successfulNextInit, successfulTanStackInit, successMessage } from './utils/messages.js';
23
+ import { DEFAULT_PAYLOAD_VERSION_TAG, resolvePackageVersion } from './utils/resolvePackageVersion.js';
23
24
  export class Main {
24
25
  args;
25
26
  constructor(){
26
27
  // @ts-expect-error bad typings
27
28
  this.args = arg({
28
- '--agent': String,
29
29
  '--branch': String,
30
30
  '--db': String,
31
31
  '--db-accept-recommended': Boolean,
@@ -34,9 +34,9 @@ export class Main {
34
34
  '--help': Boolean,
35
35
  '--local-template': String,
36
36
  '--name': String,
37
+ '--payload-version': String,
37
38
  '--secret': String,
38
39
  '--template': String,
39
- '--version': String,
40
40
  // Next.js
41
41
  '--init-next': Boolean,
42
42
  // Agent
@@ -54,7 +54,6 @@ export class Main {
54
54
  '--debug': Boolean,
55
55
  '--dry-run': Boolean,
56
56
  // Aliases
57
- '-a': '--agent',
58
57
  '-d': '--db',
59
58
  '-e': '--example',
60
59
  '-h': '--help',
@@ -71,9 +70,10 @@ export class Main {
71
70
  if (debugFlag) {
72
71
  process.env.DEBUG = 'true';
73
72
  }
74
- const LATEST_VERSION = await getLatestPackageVersion({
73
+ const LATEST_VERSION = await resolvePackageVersion({
75
74
  debug: debugFlag,
76
- packageName: 'payload'
75
+ packageName: 'payload',
76
+ versionOrTag: this.args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG
77
77
  });
78
78
  if (this.args['--help']) {
79
79
  helpMessage();
@@ -83,23 +83,46 @@ export class Main {
83
83
  console.log('\n');
84
84
  p.intro(chalk.bgCyan(chalk.black(' create-payload-app ')));
85
85
  p.note("Welcome to Payload. Let's create a project!");
86
- // Detect if inside Next.js project
86
+ const tanStackDetection = await getTanStackAppDetails({
87
+ projectDir: process.cwd()
88
+ });
87
89
  const nextAppDetails = await getNextAppDetails(process.cwd());
88
- const { hasTopLevelLayout, isPayloadInstalled, isSupportedNextVersion, nextAppDir, nextConfigPath, nextVersion } = nextAppDetails;
89
- if (nextConfigPath && !isSupportedNextVersion) {
90
- p.log.warn(`Next.js v${nextVersion} is unsupported. Next.js >= 15 is required to use Payload.`);
90
+ const appFramework = resolveAppFramework({
91
+ nextAppDetails,
92
+ tanStackDetection
93
+ });
94
+ if (appFramework.kind === 'ambiguous') {
95
+ p.log.warn('Both Next.js and TanStack project markers were detected. Remove one framework before installing Payload.');
96
+ p.outro(feedbackOutro());
97
+ return;
98
+ }
99
+ if (appFramework.kind === 'unsupported-tanstack') {
100
+ p.log.warn(appFramework.reason);
101
+ p.outro(feedbackOutro());
102
+ return;
103
+ }
104
+ if (appFramework.kind === 'next' && !appFramework.appDetails.isSupportedNextVersion) {
105
+ p.log.warn(`Next.js v${appFramework.appDetails.nextVersion} is unsupported. Next.js >= ${minimumNextVersion.major}.${minimumNextVersion.minor} is required to use Payload.`);
91
106
  p.outro(feedbackOutro());
92
107
  process.exit(0);
93
108
  }
94
- // Upgrade Payload in existing project
95
- if (isPayloadInstalled && nextConfigPath) {
109
+ const hasPayload = appFramework.kind !== 'none' && appFramework.appDetails.isPayloadInstalled;
110
+ if (hasPayload) {
96
111
  p.log.warn(`Payload installation detected in current project.`);
97
112
  const shouldUpdate = await p.confirm({
98
113
  initialValue: false,
99
114
  message: chalk.bold(`Upgrade Payload in this project?`)
100
115
  });
101
116
  if (!p.isCancel(shouldUpdate) && shouldUpdate) {
102
- const { message, success: updateSuccess } = await updatePayloadInProject(nextAppDetails);
117
+ const versionOrTag = this.args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG;
118
+ const updateResult = appFramework.kind === 'next' ? await updatePayloadInNextProject({
119
+ appDetails: appFramework.appDetails,
120
+ versionOrTag
121
+ }) : await updatePayloadInTanStackProject({
122
+ appDetails: appFramework.appDetails,
123
+ versionOrTag
124
+ });
125
+ const { message, success: updateSuccess } = updateResult;
103
126
  if (updateSuccess) {
104
127
  info(message);
105
128
  } else {
@@ -107,18 +130,28 @@ export class Main {
107
130
  }
108
131
  }
109
132
  p.outro(feedbackOutro());
110
- process.exit(0);
133
+ return;
111
134
  }
112
- if (nextConfigPath) {
113
- this.args['--name'] = slugify(path.basename(path.dirname(nextConfigPath)));
135
+ if (appFramework.kind === 'next') {
136
+ this.args['--name'] = slugify(path.basename(path.dirname(appFramework.appDetails.nextConfigPath)));
137
+ } else if (appFramework.kind === 'tanstack') {
138
+ this.args['--name'] = slugify(path.basename(appFramework.appDetails.projectDir));
114
139
  }
115
140
  const projectName = await parseProjectName(this.args);
116
- const projectDir = nextConfigPath ? path.dirname(nextConfigPath) : path.resolve(process.cwd(), slugify(projectName));
141
+ let projectDir;
142
+ if (appFramework.kind === 'next') {
143
+ projectDir = path.dirname(appFramework.appDetails.nextConfigPath);
144
+ } else if (appFramework.kind === 'tanstack') {
145
+ projectDir = appFramework.appDetails.projectDir;
146
+ } else {
147
+ projectDir = path.resolve(process.cwd(), slugify(projectName));
148
+ }
117
149
  const packageManager = await getPackageManager({
118
150
  cliArgs: this.args,
119
151
  projectDir
120
152
  });
121
- if (nextConfigPath) {
153
+ if (appFramework.kind === 'next') {
154
+ const { hasTopLevelLayout, nextAppDir } = appFramework.appDetails;
122
155
  p.log.step(chalk.bold(`${chalk.bgBlack(` ${figures.triangleUp} Next.js `)} project detected!`));
123
156
  const proceed = await p.confirm({
124
157
  initialValue: true,
@@ -141,7 +174,7 @@ export class Main {
141
174
  const result = await initNext({
142
175
  ...this.args,
143
176
  dbType: dbDetails.type,
144
- nextAppDetails,
177
+ nextAppDetails: appFramework.appDetails,
145
178
  packageManager,
146
179
  projectDir
147
180
  });
@@ -167,6 +200,48 @@ export class Main {
167
200
  p.outro(feedbackOutro());
168
201
  return;
169
202
  }
203
+ if (appFramework.kind === 'tanstack') {
204
+ const frameworkName = appFramework.appDetails.kind === 'start' ? 'TanStack Start' : 'TanStack Router';
205
+ p.log.step(chalk.bold(`${chalk.bgBlack(` ${frameworkName} `)} project detected!`));
206
+ const proceed = await p.confirm({
207
+ initialValue: true,
208
+ message: chalk.bold(appFramework.appDetails.kind === 'start' ? 'Install Payload in this TanStack Start project?' : 'Convert this project to TanStack Start and install Payload?')
209
+ });
210
+ if (p.isCancel(proceed) || !proceed) {
211
+ p.outro(feedbackOutro());
212
+ process.exit(0);
213
+ }
214
+ const dbDetails = await selectDb(this.args, projectName);
215
+ const result = await initTanStack({
216
+ ...this.args,
217
+ appDetails: appFramework.appDetails,
218
+ dbType: dbDetails.type,
219
+ packageManager,
220
+ projectDir
221
+ });
222
+ if (result.success === false) {
223
+ p.log.error(result.reason);
224
+ p.outro(feedbackOutro());
225
+ process.exit(1);
226
+ }
227
+ await configurePayloadConfig({
228
+ dbType: dbDetails.type,
229
+ projectDirOrConfigPath: {
230
+ payloadConfigPath: result.payloadConfigPath
231
+ }
232
+ });
233
+ await manageEnvFiles({
234
+ cliArgs: this.args,
235
+ databaseType: dbDetails.type,
236
+ databaseUri: dbDetails.dbUri,
237
+ payloadSecret: generateSecret(),
238
+ projectDir
239
+ });
240
+ info('Payload project successfully initialized!');
241
+ p.note(successfulTanStackInit(), chalk.bgGreen(chalk.black(' TanStack Start initialized ')));
242
+ p.outro(feedbackOutro());
243
+ return;
244
+ }
170
245
  const templateArg = this.args['--template'];
171
246
  if (templateArg) {
172
247
  const valid = validateTemplate({
@@ -181,17 +256,13 @@ export class Main {
181
256
  if (exampleArg) {
182
257
  const example = await parseExample({
183
258
  name: exampleArg,
184
- branch: this.args['--branch'] ?? '3.x'
259
+ branch: this.args['--branch'] ?? 'main'
185
260
  });
186
261
  if (!example) {
187
262
  helpMessage();
188
263
  process.exit(1);
189
264
  }
190
- const agentType = await selectAgent({
191
- cliArgs: this.args
192
- });
193
265
  await createProject({
194
- agentType,
195
266
  cliArgs: this.args,
196
267
  example,
197
268
  packageManager,
@@ -213,11 +284,7 @@ export class Main {
213
284
  switch(template.type){
214
285
  case 'plugin':
215
286
  {
216
- const agentType = await selectAgent({
217
- cliArgs: this.args
218
- });
219
287
  await createProject({
220
- agentType,
221
288
  cliArgs: this.args,
222
289
  packageManager,
223
290
  projectDir,
@@ -229,11 +296,7 @@ export class Main {
229
296
  case 'starter':
230
297
  {
231
298
  const dbDetails = await selectDb(this.args, projectName, template);
232
- const agentType = await selectAgent({
233
- cliArgs: this.args
234
- });
235
299
  await createProject({
236
- agentType,
237
300
  cliArgs: this.args,
238
301
  dbDetails,
239
302
  packageManager,
@@ -254,5 +317,33 @@ export class Main {
254
317
  }
255
318
  }
256
319
  }
320
+ export function resolveAppFramework({ nextAppDetails, tanStackDetection }) {
321
+ if (nextAppDetails.nextConfigPath && tanStackDetection.detected) {
322
+ return {
323
+ kind: 'ambiguous'
324
+ };
325
+ }
326
+ if (nextAppDetails.nextConfigPath) {
327
+ return {
328
+ appDetails: nextAppDetails,
329
+ kind: 'next'
330
+ };
331
+ }
332
+ if (!tanStackDetection.detected) {
333
+ return {
334
+ kind: 'none'
335
+ };
336
+ }
337
+ if (!tanStackDetection.compatible) {
338
+ return {
339
+ kind: 'unsupported-tanstack',
340
+ reason: tanStackDetection.reason
341
+ };
342
+ }
343
+ return {
344
+ appDetails: tanStackDetection.details,
345
+ kind: 'tanstack'
346
+ };
347
+ }
257
348
 
258
349
  //# sourceMappingURL=main.js.map