create-payload-app 4.0.0-internal.fa183d3 → 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/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/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/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/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 +1 -1
- 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/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,150 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { debug } from '../utils/log.js';
|
|
4
|
+
import { DEFAULT_PAYLOAD_VERSION_TAG, resolvePackageVersion } from '../utils/resolvePackageVersion.js';
|
|
5
|
+
import { getDbPackageName } from './ast/adapter-config.js';
|
|
6
|
+
import { preparePackageJson } from './ast/package-json.js';
|
|
7
|
+
import { configurePayloadTsConfig } from './configure-payload-tsconfig.js';
|
|
8
|
+
import { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js';
|
|
9
|
+
import { installPackages } from './install-packages.js';
|
|
10
|
+
import { getTanStackAppDetails } from './tanstack/detect.js';
|
|
11
|
+
import { applyPreparedWrites, prepareTanStackInit } from './tanstack/prepare.js';
|
|
12
|
+
const filename = fileURLToPath(import.meta.url);
|
|
13
|
+
const dirname = path.dirname(filename);
|
|
14
|
+
export async function initTanStack(args) {
|
|
15
|
+
const appDetailsResult = args.appDetails ? {
|
|
16
|
+
details: args.appDetails,
|
|
17
|
+
success: true
|
|
18
|
+
} : await detectAppDetails({
|
|
19
|
+
projectDir: args.projectDir
|
|
20
|
+
});
|
|
21
|
+
if (!appDetailsResult.success) {
|
|
22
|
+
return appDetailsResult;
|
|
23
|
+
}
|
|
24
|
+
const { details: appDetails } = appDetailsResult;
|
|
25
|
+
const templateRoot = args.templateRoot ?? resolveTemplateRoot();
|
|
26
|
+
if (args['--debug']) {
|
|
27
|
+
debug(`Using TanStack template files from: ${templateRoot}`);
|
|
28
|
+
}
|
|
29
|
+
const prepared = await prepareTanStackInit({
|
|
30
|
+
appDetails,
|
|
31
|
+
templateRoot
|
|
32
|
+
});
|
|
33
|
+
if (!prepared.success) {
|
|
34
|
+
return prepared;
|
|
35
|
+
}
|
|
36
|
+
const payloadVersion = await resolvePackageVersion({
|
|
37
|
+
debug: args['--debug'],
|
|
38
|
+
packageName: 'payload',
|
|
39
|
+
versionOrTag: args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG
|
|
40
|
+
});
|
|
41
|
+
const requiredDependencies = getRequiredDependencies({
|
|
42
|
+
appDetails,
|
|
43
|
+
dbType: args.dbType,
|
|
44
|
+
payloadVersion
|
|
45
|
+
});
|
|
46
|
+
let writes = prepared.writes;
|
|
47
|
+
if (appDetails.kind === 'router-only' || args['--no-deps']) {
|
|
48
|
+
try {
|
|
49
|
+
const packageJsonWrite = preparePackageJson({
|
|
50
|
+
filePath: path.join(args.projectDir, 'package.json'),
|
|
51
|
+
options: {
|
|
52
|
+
addDependencies: args['--no-deps'] ? requiredDependencies : undefined,
|
|
53
|
+
removeDependencies: appDetails.kind === 'router-only' ? [
|
|
54
|
+
'@tanstack/router-plugin'
|
|
55
|
+
] : undefined
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
writes = [
|
|
59
|
+
...writes,
|
|
60
|
+
packageJsonWrite
|
|
61
|
+
];
|
|
62
|
+
} catch (error) {
|
|
63
|
+
return {
|
|
64
|
+
reason: `Could not prepare package.json: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
65
|
+
success: false
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
await applyPreparedWrites({
|
|
70
|
+
writes
|
|
71
|
+
});
|
|
72
|
+
if (!args['--no-deps']) {
|
|
73
|
+
const packagesToInstall = Object.entries(requiredDependencies).map(([packageName, version])=>`${packageName}@${version}`);
|
|
74
|
+
await ensurePnpmBuildApprovals({
|
|
75
|
+
packageManager: args.packageManager,
|
|
76
|
+
projectDir: args.projectDir
|
|
77
|
+
});
|
|
78
|
+
let installation;
|
|
79
|
+
try {
|
|
80
|
+
installation = await installPackages({
|
|
81
|
+
packageManager: args.packageManager,
|
|
82
|
+
packagesToInstall,
|
|
83
|
+
projectDir: args.projectDir
|
|
84
|
+
});
|
|
85
|
+
} catch {
|
|
86
|
+
return {
|
|
87
|
+
reason: 'Failed to install dependencies',
|
|
88
|
+
success: false
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (!installation.success) {
|
|
92
|
+
return {
|
|
93
|
+
reason: 'Failed to install dependencies',
|
|
94
|
+
success: false
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const payloadConfigPath = path.join(appDetails.sourceDir, 'payload.config.ts');
|
|
99
|
+
await configurePayloadTsConfig({
|
|
100
|
+
configPath: path.join(args.projectDir, 'tsconfig.json'),
|
|
101
|
+
payloadConfigPath
|
|
102
|
+
});
|
|
103
|
+
return {
|
|
104
|
+
payloadConfigPath,
|
|
105
|
+
success: true
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
async function detectAppDetails({ projectDir }) {
|
|
109
|
+
const detection = await getTanStackAppDetails({
|
|
110
|
+
projectDir
|
|
111
|
+
});
|
|
112
|
+
if (!detection.detected) {
|
|
113
|
+
return {
|
|
114
|
+
reason: `Could not detect a TanStack application in ${projectDir}.`,
|
|
115
|
+
success: false
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
if (!detection.compatible) {
|
|
119
|
+
return {
|
|
120
|
+
reason: detection.reason,
|
|
121
|
+
success: false
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
details: detection.details,
|
|
126
|
+
success: true
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function getRequiredDependencies({ appDetails, dbType, payloadVersion }) {
|
|
130
|
+
const dependencies = {
|
|
131
|
+
'@payloadcms/plugin-mcp': payloadVersion,
|
|
132
|
+
'@payloadcms/richtext-lexical': payloadVersion,
|
|
133
|
+
'@payloadcms/tanstack-start': payloadVersion,
|
|
134
|
+
'@payloadcms/ui': payloadVersion,
|
|
135
|
+
'@vitejs/plugin-rsc': '^0.5.21',
|
|
136
|
+
[getDbPackageName(dbType)]: payloadVersion,
|
|
137
|
+
graphql: '^16.8.1',
|
|
138
|
+
payload: payloadVersion,
|
|
139
|
+
sharp: '0.34.2'
|
|
140
|
+
};
|
|
141
|
+
if (appDetails.kind === 'router-only') {
|
|
142
|
+
dependencies['@tanstack/react-start'] = '^1.168.26';
|
|
143
|
+
}
|
|
144
|
+
return dependencies;
|
|
145
|
+
}
|
|
146
|
+
function resolveTemplateRoot() {
|
|
147
|
+
return path.basename(path.dirname(dirname)) === 'dist' ? path.resolve(dirname, '../template-tanstack') : path.resolve(dirname, '../../../../templates/blank-tanstack/src');
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
//# sourceMappingURL=init-tanstack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/init-tanstack.ts"],"sourcesContent":["import path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nimport type { CliArgs, DbType, PackageManager, TanStackAppDetails } from '../types.js'\n\nimport { debug } from '../utils/log.js'\nimport {\n DEFAULT_PAYLOAD_VERSION_TAG,\n resolvePackageVersion,\n} from '../utils/resolvePackageVersion.js'\nimport { getDbPackageName } from './ast/adapter-config.js'\nimport { preparePackageJson } from './ast/package-json.js'\nimport { configurePayloadTsConfig } from './configure-payload-tsconfig.js'\nimport { ensurePnpmBuildApprovals } from './configure-pnpm-builds.js'\nimport { installPackages } from './install-packages.js'\nimport { getTanStackAppDetails } from './tanstack/detect.js'\nimport { applyPreparedWrites, prepareTanStackInit } from './tanstack/prepare.js'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\ntype InitTanStackArgs = {\n appDetails?: TanStackAppDetails\n dbType: DbType\n packageManager: PackageManager\n projectDir: string\n templateRoot?: string\n} & Pick<CliArgs, '--debug' | '--no-deps' | '--payload-version'>\n\ntype InitTanStackResult =\n | { payloadConfigPath: string; success: true }\n | { reason: string; success: false }\n\nexport async function initTanStack(args: InitTanStackArgs): Promise<InitTanStackResult> {\n const appDetailsResult = args.appDetails\n ? { details: args.appDetails, success: true as const }\n : await detectAppDetails({ projectDir: args.projectDir })\n\n if (!appDetailsResult.success) {\n return appDetailsResult\n }\n\n const { details: appDetails } = appDetailsResult\n const templateRoot = args.templateRoot ?? resolveTemplateRoot()\n\n if (args['--debug']) {\n debug(`Using TanStack template files from: ${templateRoot}`)\n }\n\n const prepared = await prepareTanStackInit({ appDetails, templateRoot })\n if (!prepared.success) {\n return prepared\n }\n\n const payloadVersion = await resolvePackageVersion({\n debug: args['--debug'],\n packageName: 'payload',\n versionOrTag: args['--payload-version'] ?? DEFAULT_PAYLOAD_VERSION_TAG,\n })\n const requiredDependencies = getRequiredDependencies({\n appDetails,\n dbType: args.dbType,\n payloadVersion,\n })\n let writes = prepared.writes\n if (appDetails.kind === 'router-only' || args['--no-deps']) {\n try {\n const packageJsonWrite = preparePackageJson({\n filePath: path.join(args.projectDir, 'package.json'),\n options: {\n addDependencies: args['--no-deps'] ? requiredDependencies : undefined,\n removeDependencies:\n appDetails.kind === 'router-only' ? ['@tanstack/router-plugin'] : undefined,\n },\n })\n writes = [...writes, packageJsonWrite]\n } catch (error) {\n return {\n reason: `Could not prepare package.json: ${error instanceof Error ? error.message : 'Unknown error'}`,\n success: false,\n }\n }\n }\n\n await applyPreparedWrites({ writes })\n\n if (!args['--no-deps']) {\n const packagesToInstall = Object.entries(requiredDependencies).map(\n ([packageName, version]) => `${packageName}@${version}`,\n )\n\n await ensurePnpmBuildApprovals({\n packageManager: args.packageManager,\n projectDir: args.projectDir,\n })\n\n let installation: { success: boolean }\n try {\n installation = await installPackages({\n packageManager: args.packageManager,\n packagesToInstall,\n projectDir: args.projectDir,\n })\n } catch {\n return { reason: 'Failed to install dependencies', success: false }\n }\n if (!installation.success) {\n return { reason: 'Failed to install dependencies', success: false }\n }\n }\n\n const payloadConfigPath = path.join(appDetails.sourceDir, 'payload.config.ts')\n await configurePayloadTsConfig({\n configPath: path.join(args.projectDir, 'tsconfig.json'),\n payloadConfigPath,\n })\n\n return { payloadConfigPath, success: true }\n}\n\nasync function detectAppDetails({\n projectDir,\n}: {\n projectDir: string\n}): Promise<{ details: TanStackAppDetails; success: true } | { reason: string; success: false }> {\n const detection = await getTanStackAppDetails({ projectDir })\n\n if (!detection.detected) {\n return {\n reason: `Could not detect a TanStack application in ${projectDir}.`,\n success: false,\n }\n }\n\n if (!detection.compatible) {\n return { reason: detection.reason, success: false }\n }\n\n return { details: detection.details, success: true }\n}\n\nfunction getRequiredDependencies({\n appDetails,\n dbType,\n payloadVersion,\n}: {\n appDetails: TanStackAppDetails\n dbType: DbType\n payloadVersion: string\n}): Record<string, string> {\n const dependencies: Record<string, string> = {\n '@payloadcms/plugin-mcp': payloadVersion,\n '@payloadcms/richtext-lexical': payloadVersion,\n '@payloadcms/tanstack-start': payloadVersion,\n '@payloadcms/ui': payloadVersion,\n '@vitejs/plugin-rsc': '^0.5.21',\n [getDbPackageName(dbType)]: payloadVersion,\n graphql: '^16.8.1',\n payload: payloadVersion,\n sharp: '0.34.2',\n }\n\n if (appDetails.kind === 'router-only') {\n dependencies['@tanstack/react-start'] = '^1.168.26'\n }\n\n return dependencies\n}\n\nfunction resolveTemplateRoot(): 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":["path","fileURLToPath","debug","DEFAULT_PAYLOAD_VERSION_TAG","resolvePackageVersion","getDbPackageName","preparePackageJson","configurePayloadTsConfig","ensurePnpmBuildApprovals","installPackages","getTanStackAppDetails","applyPreparedWrites","prepareTanStackInit","filename","url","dirname","initTanStack","args","appDetailsResult","appDetails","details","success","detectAppDetails","projectDir","templateRoot","resolveTemplateRoot","prepared","payloadVersion","packageName","versionOrTag","requiredDependencies","getRequiredDependencies","dbType","writes","kind","packageJsonWrite","filePath","join","options","addDependencies","undefined","removeDependencies","error","reason","Error","message","packagesToInstall","Object","entries","map","version","packageManager","installation","payloadConfigPath","sourceDir","configPath","detection","detected","compatible","dependencies","graphql","payload","sharp","basename","resolve"],"mappings":"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"}
|
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
import fse from 'fs-extra';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
5
|
+
import { initTanStack } from './init-tanstack.js';
|
|
6
|
+
const mocks = vi.hoisted(()=>({
|
|
7
|
+
applyPreparedWrites: vi.fn(),
|
|
8
|
+
configurePayloadTsConfig: vi.fn(),
|
|
9
|
+
ensurePnpmBuildApprovals: vi.fn(),
|
|
10
|
+
getTanStackAppDetails: vi.fn(),
|
|
11
|
+
installPackages: vi.fn(),
|
|
12
|
+
prepareTanStackInit: vi.fn(),
|
|
13
|
+
resolvePackageVersion: vi.fn()
|
|
14
|
+
}));
|
|
15
|
+
vi.mock('../utils/resolvePackageVersion.js', async (importOriginal)=>({
|
|
16
|
+
...await importOriginal(),
|
|
17
|
+
resolvePackageVersion: mocks.resolvePackageVersion
|
|
18
|
+
}));
|
|
19
|
+
vi.mock('./configure-payload-tsconfig.js', ()=>({
|
|
20
|
+
configurePayloadTsConfig: mocks.configurePayloadTsConfig
|
|
21
|
+
}));
|
|
22
|
+
vi.mock('./configure-pnpm-builds.js', ()=>({
|
|
23
|
+
ensurePnpmBuildApprovals: mocks.ensurePnpmBuildApprovals
|
|
24
|
+
}));
|
|
25
|
+
vi.mock('./install-packages.js', ()=>({
|
|
26
|
+
installPackages: mocks.installPackages
|
|
27
|
+
}));
|
|
28
|
+
vi.mock('./tanstack/detect.js', ()=>({
|
|
29
|
+
getTanStackAppDetails: mocks.getTanStackAppDetails
|
|
30
|
+
}));
|
|
31
|
+
vi.mock('./tanstack/prepare.js', ()=>({
|
|
32
|
+
applyPreparedWrites: mocks.applyPreparedWrites,
|
|
33
|
+
prepareTanStackInit: mocks.prepareTanStackInit
|
|
34
|
+
}));
|
|
35
|
+
describe('initTanStack', ()=>{
|
|
36
|
+
const templateRoot = '/tmp/tanstack-template';
|
|
37
|
+
let appDetails;
|
|
38
|
+
let preparedWrites;
|
|
39
|
+
let projectDir;
|
|
40
|
+
beforeEach(()=>{
|
|
41
|
+
vi.clearAllMocks();
|
|
42
|
+
projectDir = fse.mkdtempSync(path.join(os.tmpdir(), 'cpa-init-tanstack-'));
|
|
43
|
+
appDetails = createAppDetails({
|
|
44
|
+
kind: 'start',
|
|
45
|
+
projectDir
|
|
46
|
+
});
|
|
47
|
+
preparedWrites = [
|
|
48
|
+
{
|
|
49
|
+
content: 'export default {}\n',
|
|
50
|
+
filePath: path.join(projectDir, 'src/payload.config.ts')
|
|
51
|
+
}
|
|
52
|
+
];
|
|
53
|
+
mocks.prepareTanStackInit.mockResolvedValue({
|
|
54
|
+
success: true,
|
|
55
|
+
writes: preparedWrites
|
|
56
|
+
});
|
|
57
|
+
mocks.applyPreparedWrites.mockResolvedValue(undefined);
|
|
58
|
+
mocks.ensurePnpmBuildApprovals.mockResolvedValue(undefined);
|
|
59
|
+
mocks.installPackages.mockResolvedValue({
|
|
60
|
+
success: true
|
|
61
|
+
});
|
|
62
|
+
mocks.configurePayloadTsConfig.mockResolvedValue(undefined);
|
|
63
|
+
mocks.resolvePackageVersion.mockResolvedValue('4.2.0');
|
|
64
|
+
mocks.getTanStackAppDetails.mockResolvedValue({
|
|
65
|
+
compatible: true,
|
|
66
|
+
details: appDetails,
|
|
67
|
+
detected: true
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
afterEach(()=>{
|
|
71
|
+
fse.removeSync(projectDir);
|
|
72
|
+
});
|
|
73
|
+
it('should prepare, apply, install, and configure in order', async ()=>{
|
|
74
|
+
const result = await initTanStack({
|
|
75
|
+
'--debug': true,
|
|
76
|
+
'--payload-version': 'beta',
|
|
77
|
+
appDetails,
|
|
78
|
+
dbType: 'mongodb',
|
|
79
|
+
packageManager: 'pnpm',
|
|
80
|
+
projectDir,
|
|
81
|
+
templateRoot
|
|
82
|
+
});
|
|
83
|
+
expect(result).toEqual({
|
|
84
|
+
payloadConfigPath: path.join(projectDir, 'src/payload.config.ts'),
|
|
85
|
+
success: true
|
|
86
|
+
});
|
|
87
|
+
expect(mocks.prepareTanStackInit).toHaveBeenCalledWith({
|
|
88
|
+
appDetails,
|
|
89
|
+
templateRoot
|
|
90
|
+
});
|
|
91
|
+
expect(mocks.applyPreparedWrites).toHaveBeenCalledWith({
|
|
92
|
+
writes: preparedWrites
|
|
93
|
+
});
|
|
94
|
+
expect(mocks.prepareTanStackInit).toHaveBeenCalledBefore(mocks.applyPreparedWrites);
|
|
95
|
+
expect(mocks.applyPreparedWrites).toHaveBeenCalledBefore(mocks.installPackages);
|
|
96
|
+
expect(mocks.resolvePackageVersion).toHaveBeenCalledWith({
|
|
97
|
+
debug: true,
|
|
98
|
+
packageName: 'payload',
|
|
99
|
+
versionOrTag: 'beta'
|
|
100
|
+
});
|
|
101
|
+
expect(mocks.ensurePnpmBuildApprovals).toHaveBeenCalledWith({
|
|
102
|
+
packageManager: 'pnpm',
|
|
103
|
+
projectDir
|
|
104
|
+
});
|
|
105
|
+
expect(mocks.configurePayloadTsConfig).toHaveBeenCalledWith({
|
|
106
|
+
configPath: path.join(projectDir, 'tsconfig.json'),
|
|
107
|
+
payloadConfigPath: path.join(projectDir, 'src/payload.config.ts')
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
it.each([
|
|
111
|
+
[
|
|
112
|
+
'mongodb',
|
|
113
|
+
'@payloadcms/db-mongodb@4.2.0'
|
|
114
|
+
],
|
|
115
|
+
[
|
|
116
|
+
'postgres',
|
|
117
|
+
'@payloadcms/db-postgres@4.2.0'
|
|
118
|
+
],
|
|
119
|
+
[
|
|
120
|
+
'sqlite',
|
|
121
|
+
'@payloadcms/db-sqlite@4.2.0'
|
|
122
|
+
]
|
|
123
|
+
])('should install the exact Payload dependencies for %s', async (dbType, databasePackage)=>{
|
|
124
|
+
await initTanStack({
|
|
125
|
+
appDetails,
|
|
126
|
+
dbType,
|
|
127
|
+
packageManager: 'npm',
|
|
128
|
+
projectDir,
|
|
129
|
+
templateRoot
|
|
130
|
+
});
|
|
131
|
+
expect(mocks.installPackages).toHaveBeenCalledWith({
|
|
132
|
+
packageManager: 'npm',
|
|
133
|
+
packagesToInstall: [
|
|
134
|
+
'@payloadcms/plugin-mcp@4.2.0',
|
|
135
|
+
'@payloadcms/richtext-lexical@4.2.0',
|
|
136
|
+
'@payloadcms/tanstack-start@4.2.0',
|
|
137
|
+
'@payloadcms/ui@4.2.0',
|
|
138
|
+
'@vitejs/plugin-rsc@^0.5.21',
|
|
139
|
+
databasePackage,
|
|
140
|
+
'graphql@^16.8.1',
|
|
141
|
+
'payload@4.2.0',
|
|
142
|
+
'sharp@0.34.2'
|
|
143
|
+
],
|
|
144
|
+
projectDir
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
it('should replace Router-only plugin package metadata', async ()=>{
|
|
148
|
+
appDetails = createAppDetails({
|
|
149
|
+
kind: 'router-only',
|
|
150
|
+
projectDir
|
|
151
|
+
});
|
|
152
|
+
const packageJsonPath = path.join(projectDir, 'package.json');
|
|
153
|
+
const originalPackageContent = `{
|
|
154
|
+
"name": "router-app",
|
|
155
|
+
"scripts": {
|
|
156
|
+
"dev": "vite"
|
|
157
|
+
},
|
|
158
|
+
"dependencies": {
|
|
159
|
+
"@tanstack/router-plugin": "^1.0.0",
|
|
160
|
+
"payload": "^4.0.0"
|
|
161
|
+
},
|
|
162
|
+
"devDependencies": {
|
|
163
|
+
"@tanstack/router-plugin": "^1.0.0",
|
|
164
|
+
"typescript": "^6.0.0"
|
|
165
|
+
}
|
|
166
|
+
}`;
|
|
167
|
+
fse.writeFileSync(packageJsonPath, originalPackageContent);
|
|
168
|
+
await initTanStack({
|
|
169
|
+
appDetails,
|
|
170
|
+
dbType: 'mongodb',
|
|
171
|
+
packageManager: 'yarn',
|
|
172
|
+
projectDir,
|
|
173
|
+
templateRoot
|
|
174
|
+
});
|
|
175
|
+
expect(mocks.applyPreparedWrites).toHaveBeenCalledWith({
|
|
176
|
+
writes: [
|
|
177
|
+
...preparedWrites,
|
|
178
|
+
{
|
|
179
|
+
content: `{
|
|
180
|
+
"name": "router-app",
|
|
181
|
+
"scripts": {
|
|
182
|
+
"dev": "vite"
|
|
183
|
+
},
|
|
184
|
+
"dependencies": {
|
|
185
|
+
"payload": "^4.0.0"
|
|
186
|
+
},
|
|
187
|
+
"devDependencies": {
|
|
188
|
+
"typescript": "^6.0.0"
|
|
189
|
+
}
|
|
190
|
+
}\n`,
|
|
191
|
+
filePath: packageJsonPath
|
|
192
|
+
}
|
|
193
|
+
]
|
|
194
|
+
});
|
|
195
|
+
expect(fse.readFileSync(packageJsonPath, 'utf8')).toBe(originalPackageContent);
|
|
196
|
+
expect(mocks.installPackages).toHaveBeenCalledWith({
|
|
197
|
+
packageManager: 'yarn',
|
|
198
|
+
packagesToInstall: [
|
|
199
|
+
'@payloadcms/plugin-mcp@4.2.0',
|
|
200
|
+
'@payloadcms/richtext-lexical@4.2.0',
|
|
201
|
+
'@payloadcms/tanstack-start@4.2.0',
|
|
202
|
+
'@payloadcms/ui@4.2.0',
|
|
203
|
+
'@vitejs/plugin-rsc@^0.5.21',
|
|
204
|
+
'@payloadcms/db-mongodb@4.2.0',
|
|
205
|
+
'graphql@^16.8.1',
|
|
206
|
+
'payload@4.2.0',
|
|
207
|
+
'sharp@0.34.2',
|
|
208
|
+
'@tanstack/react-start@^1.168.26'
|
|
209
|
+
],
|
|
210
|
+
projectDir
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
it('should reject malformed Router package metadata before applying host writes', async ()=>{
|
|
214
|
+
appDetails = createAppDetails({
|
|
215
|
+
kind: 'router-only',
|
|
216
|
+
projectDir
|
|
217
|
+
});
|
|
218
|
+
const packageJsonPath = path.join(projectDir, 'package.json');
|
|
219
|
+
const malformedPackageContent = '{ "dependencies": {';
|
|
220
|
+
fse.writeFileSync(packageJsonPath, malformedPackageContent);
|
|
221
|
+
const result = await initTanStack({
|
|
222
|
+
appDetails,
|
|
223
|
+
dbType: 'mongodb',
|
|
224
|
+
packageManager: 'pnpm',
|
|
225
|
+
projectDir,
|
|
226
|
+
templateRoot
|
|
227
|
+
});
|
|
228
|
+
expect(result.success).toBe(false);
|
|
229
|
+
if (result.success) {
|
|
230
|
+
throw new Error('Expected malformed package metadata to fail preparation.');
|
|
231
|
+
}
|
|
232
|
+
expect(result.reason).toContain('Could not prepare package.json');
|
|
233
|
+
expect(fse.readFileSync(packageJsonPath, 'utf8')).toBe(malformedPackageContent);
|
|
234
|
+
expect(mocks.applyPreparedWrites).not.toHaveBeenCalled();
|
|
235
|
+
expect(mocks.installPackages).not.toHaveBeenCalled();
|
|
236
|
+
});
|
|
237
|
+
it.each([
|
|
238
|
+
{
|
|
239
|
+
existingDependencies: {
|
|
240
|
+
'@tanstack/react-router': '^1.200.0',
|
|
241
|
+
'@tanstack/react-start': '^1.200.0',
|
|
242
|
+
react: '^19.0.0'
|
|
243
|
+
},
|
|
244
|
+
existingDevDependencies: {
|
|
245
|
+
vite: '^7.0.0'
|
|
246
|
+
},
|
|
247
|
+
expectedDependencies: {
|
|
248
|
+
'@payloadcms/db-postgres': '4.2.0',
|
|
249
|
+
'@payloadcms/plugin-mcp': '4.2.0',
|
|
250
|
+
'@payloadcms/richtext-lexical': '4.2.0',
|
|
251
|
+
'@payloadcms/tanstack-start': '4.2.0',
|
|
252
|
+
'@payloadcms/ui': '4.2.0',
|
|
253
|
+
'@tanstack/react-router': '^1.200.0',
|
|
254
|
+
'@tanstack/react-start': '^1.200.0',
|
|
255
|
+
'@vitejs/plugin-rsc': '^0.5.21',
|
|
256
|
+
graphql: '^16.8.1',
|
|
257
|
+
payload: '4.2.0',
|
|
258
|
+
react: '^19.0.0',
|
|
259
|
+
sharp: '0.34.2'
|
|
260
|
+
},
|
|
261
|
+
expectedDevDependencies: {
|
|
262
|
+
vite: '^7.0.0'
|
|
263
|
+
},
|
|
264
|
+
kind: 'start'
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
existingDependencies: {
|
|
268
|
+
'@tanstack/react-router': '^1.200.0',
|
|
269
|
+
react: '^19.0.0'
|
|
270
|
+
},
|
|
271
|
+
existingDevDependencies: {
|
|
272
|
+
'@tanstack/router-plugin': '^1.200.0',
|
|
273
|
+
vite: '^7.0.0'
|
|
274
|
+
},
|
|
275
|
+
expectedDependencies: {
|
|
276
|
+
'@payloadcms/db-postgres': '4.2.0',
|
|
277
|
+
'@payloadcms/plugin-mcp': '4.2.0',
|
|
278
|
+
'@payloadcms/richtext-lexical': '4.2.0',
|
|
279
|
+
'@payloadcms/tanstack-start': '4.2.0',
|
|
280
|
+
'@payloadcms/ui': '4.2.0',
|
|
281
|
+
'@tanstack/react-router': '^1.200.0',
|
|
282
|
+
'@tanstack/react-start': '^1.168.26',
|
|
283
|
+
'@vitejs/plugin-rsc': '^0.5.21',
|
|
284
|
+
graphql: '^16.8.1',
|
|
285
|
+
payload: '4.2.0',
|
|
286
|
+
react: '^19.0.0',
|
|
287
|
+
sharp: '0.34.2'
|
|
288
|
+
},
|
|
289
|
+
expectedDevDependencies: {
|
|
290
|
+
vite: '^7.0.0'
|
|
291
|
+
},
|
|
292
|
+
kind: 'router-only'
|
|
293
|
+
}
|
|
294
|
+
])('should record required dependencies without installing them for a $kind project with --no-deps', async ({ existingDependencies, existingDevDependencies, expectedDependencies, expectedDevDependencies, kind })=>{
|
|
295
|
+
appDetails = createAppDetails({
|
|
296
|
+
kind,
|
|
297
|
+
projectDir
|
|
298
|
+
});
|
|
299
|
+
const packageJsonPath = path.join(projectDir, 'package.json');
|
|
300
|
+
fse.writeJsonSync(packageJsonPath, {
|
|
301
|
+
dependencies: existingDependencies,
|
|
302
|
+
devDependencies: existingDevDependencies,
|
|
303
|
+
name: `${kind}-app`
|
|
304
|
+
});
|
|
305
|
+
const result = await initTanStack({
|
|
306
|
+
'--no-deps': true,
|
|
307
|
+
appDetails,
|
|
308
|
+
dbType: 'postgres',
|
|
309
|
+
packageManager: 'pnpm',
|
|
310
|
+
projectDir,
|
|
311
|
+
templateRoot
|
|
312
|
+
});
|
|
313
|
+
expect(result.success).toBe(true);
|
|
314
|
+
expect(mocks.resolvePackageVersion).toHaveBeenCalledWith({
|
|
315
|
+
debug: undefined,
|
|
316
|
+
packageName: 'payload',
|
|
317
|
+
versionOrTag: 'canary'
|
|
318
|
+
});
|
|
319
|
+
expect(mocks.ensurePnpmBuildApprovals).not.toHaveBeenCalled();
|
|
320
|
+
expect(mocks.installPackages).not.toHaveBeenCalled();
|
|
321
|
+
expect(mocks.configurePayloadTsConfig).toHaveBeenCalledOnce();
|
|
322
|
+
const appliedWrites = mocks.applyPreparedWrites.mock.calls[0]?.[0].writes;
|
|
323
|
+
const packageJsonWrite = appliedWrites.find(({ filePath })=>filePath === packageJsonPath);
|
|
324
|
+
expect(JSON.parse(packageJsonWrite?.content ?? '{}')).toEqual({
|
|
325
|
+
dependencies: expectedDependencies,
|
|
326
|
+
devDependencies: expectedDevDependencies,
|
|
327
|
+
name: `${kind}-app`
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
it('should return the preparation failure without applying writes', async ()=>{
|
|
331
|
+
mocks.prepareTanStackInit.mockResolvedValue({
|
|
332
|
+
reason: 'unsafe host transform',
|
|
333
|
+
success: false
|
|
334
|
+
});
|
|
335
|
+
const result = await initTanStack({
|
|
336
|
+
appDetails,
|
|
337
|
+
dbType: 'sqlite',
|
|
338
|
+
packageManager: 'bun',
|
|
339
|
+
projectDir,
|
|
340
|
+
templateRoot
|
|
341
|
+
});
|
|
342
|
+
expect(result).toEqual({
|
|
343
|
+
reason: 'unsafe host transform',
|
|
344
|
+
success: false
|
|
345
|
+
});
|
|
346
|
+
expect(mocks.applyPreparedWrites).not.toHaveBeenCalled();
|
|
347
|
+
expect(mocks.installPackages).not.toHaveBeenCalled();
|
|
348
|
+
});
|
|
349
|
+
it('should return a failure when dependency installation rejects', async ()=>{
|
|
350
|
+
mocks.installPackages.mockRejectedValue(new Error('Command failed with exit code 1'));
|
|
351
|
+
const result = await initTanStack({
|
|
352
|
+
appDetails,
|
|
353
|
+
dbType: 'mongodb',
|
|
354
|
+
packageManager: 'npm',
|
|
355
|
+
projectDir,
|
|
356
|
+
templateRoot
|
|
357
|
+
});
|
|
358
|
+
expect(result).toEqual({
|
|
359
|
+
reason: 'Failed to install dependencies',
|
|
360
|
+
success: false
|
|
361
|
+
});
|
|
362
|
+
expect(mocks.configurePayloadTsConfig).not.toHaveBeenCalled();
|
|
363
|
+
});
|
|
364
|
+
it('should detect app details when none are provided', async ()=>{
|
|
365
|
+
const result = await initTanStack({
|
|
366
|
+
dbType: 'mongodb',
|
|
367
|
+
packageManager: 'npm',
|
|
368
|
+
projectDir,
|
|
369
|
+
templateRoot
|
|
370
|
+
});
|
|
371
|
+
expect(result.success).toBe(true);
|
|
372
|
+
expect(mocks.getTanStackAppDetails).toHaveBeenCalledWith({
|
|
373
|
+
projectDir
|
|
374
|
+
});
|
|
375
|
+
expect(mocks.prepareTanStackInit).toHaveBeenCalledWith({
|
|
376
|
+
appDetails,
|
|
377
|
+
templateRoot
|
|
378
|
+
});
|
|
379
|
+
});
|
|
380
|
+
});
|
|
381
|
+
function createAppDetails({ kind, projectDir }) {
|
|
382
|
+
return {
|
|
383
|
+
isPayloadInstalled: false,
|
|
384
|
+
kind,
|
|
385
|
+
projectDir,
|
|
386
|
+
rootRoutePath: path.join(projectDir, 'src/routes/__root.tsx'),
|
|
387
|
+
routerPath: path.join(projectDir, 'src/router.tsx'),
|
|
388
|
+
routesDir: path.join(projectDir, 'src/routes'),
|
|
389
|
+
sourceDir: path.join(projectDir, 'src'),
|
|
390
|
+
viteConfigPath: path.join(projectDir, 'vite.config.ts')
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
//# sourceMappingURL=init-tanstack.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/init-tanstack.spec.ts"],"sourcesContent":["import fse from 'fs-extra'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'\n\nimport type { DbType, TanStackAppDetails } from '../types.js'\n\nimport { initTanStack } from './init-tanstack.js'\n\nconst mocks = vi.hoisted(() => ({\n applyPreparedWrites: vi.fn(),\n configurePayloadTsConfig: vi.fn(),\n ensurePnpmBuildApprovals: vi.fn(),\n getTanStackAppDetails: vi.fn(),\n installPackages: vi.fn(),\n prepareTanStackInit: vi.fn(),\n resolvePackageVersion: vi.fn(),\n}))\n\nvi.mock('../utils/resolvePackageVersion.js', async (importOriginal) => ({\n ...(await importOriginal()),\n resolvePackageVersion: mocks.resolvePackageVersion,\n}))\n\nvi.mock('./configure-payload-tsconfig.js', () => ({\n configurePayloadTsConfig: mocks.configurePayloadTsConfig,\n}))\n\nvi.mock('./configure-pnpm-builds.js', () => ({\n ensurePnpmBuildApprovals: mocks.ensurePnpmBuildApprovals,\n}))\n\nvi.mock('./install-packages.js', () => ({\n installPackages: mocks.installPackages,\n}))\n\nvi.mock('./tanstack/detect.js', () => ({\n getTanStackAppDetails: mocks.getTanStackAppDetails,\n}))\n\nvi.mock('./tanstack/prepare.js', () => ({\n applyPreparedWrites: mocks.applyPreparedWrites,\n prepareTanStackInit: mocks.prepareTanStackInit,\n}))\n\ndescribe('initTanStack', () => {\n const templateRoot = '/tmp/tanstack-template'\n let appDetails: TanStackAppDetails\n let preparedWrites: Array<{ content: string; filePath: string }>\n let projectDir: string\n\n beforeEach(() => {\n vi.clearAllMocks()\n projectDir = fse.mkdtempSync(path.join(os.tmpdir(), 'cpa-init-tanstack-'))\n appDetails = createAppDetails({ kind: 'start', projectDir })\n preparedWrites = [\n {\n content: 'export default {}\\n',\n filePath: path.join(projectDir, 'src/payload.config.ts'),\n },\n ]\n mocks.prepareTanStackInit.mockResolvedValue({ success: true, writes: preparedWrites })\n mocks.applyPreparedWrites.mockResolvedValue(undefined)\n mocks.ensurePnpmBuildApprovals.mockResolvedValue(undefined)\n mocks.installPackages.mockResolvedValue({ success: true })\n mocks.configurePayloadTsConfig.mockResolvedValue(undefined)\n mocks.resolvePackageVersion.mockResolvedValue('4.2.0')\n mocks.getTanStackAppDetails.mockResolvedValue({\n compatible: true,\n details: appDetails,\n detected: true,\n })\n })\n\n afterEach(() => {\n fse.removeSync(projectDir)\n })\n\n it('should prepare, apply, install, and configure in order', async () => {\n const result = await initTanStack({\n '--debug': true,\n '--payload-version': 'beta',\n appDetails,\n dbType: 'mongodb',\n packageManager: 'pnpm',\n projectDir,\n templateRoot,\n })\n\n expect(result).toEqual({\n payloadConfigPath: path.join(projectDir, 'src/payload.config.ts'),\n success: true,\n })\n expect(mocks.prepareTanStackInit).toHaveBeenCalledWith({ appDetails, templateRoot })\n expect(mocks.applyPreparedWrites).toHaveBeenCalledWith({ writes: preparedWrites })\n expect(mocks.prepareTanStackInit).toHaveBeenCalledBefore(mocks.applyPreparedWrites)\n expect(mocks.applyPreparedWrites).toHaveBeenCalledBefore(mocks.installPackages)\n expect(mocks.resolvePackageVersion).toHaveBeenCalledWith({\n debug: true,\n packageName: 'payload',\n versionOrTag: 'beta',\n })\n expect(mocks.ensurePnpmBuildApprovals).toHaveBeenCalledWith({\n packageManager: 'pnpm',\n projectDir,\n })\n expect(mocks.configurePayloadTsConfig).toHaveBeenCalledWith({\n configPath: path.join(projectDir, 'tsconfig.json'),\n payloadConfigPath: path.join(projectDir, 'src/payload.config.ts'),\n })\n })\n\n it.each<[DbType, string]>([\n ['mongodb', '@payloadcms/db-mongodb@4.2.0'],\n ['postgres', '@payloadcms/db-postgres@4.2.0'],\n ['sqlite', '@payloadcms/db-sqlite@4.2.0'],\n ])('should install the exact Payload dependencies for %s', async (dbType, databasePackage) => {\n await initTanStack({\n appDetails,\n dbType,\n packageManager: 'npm',\n projectDir,\n templateRoot,\n })\n\n expect(mocks.installPackages).toHaveBeenCalledWith({\n packageManager: 'npm',\n packagesToInstall: [\n '@payloadcms/plugin-mcp@4.2.0',\n '@payloadcms/richtext-lexical@4.2.0',\n '@payloadcms/tanstack-start@4.2.0',\n '@payloadcms/ui@4.2.0',\n '@vitejs/plugin-rsc@^0.5.21',\n databasePackage,\n 'graphql@^16.8.1',\n 'payload@4.2.0',\n 'sharp@0.34.2',\n ],\n projectDir,\n })\n })\n\n it('should replace Router-only plugin package metadata', async () => {\n appDetails = createAppDetails({ kind: 'router-only', projectDir })\n const packageJsonPath = path.join(projectDir, 'package.json')\n const originalPackageContent = `{\n \"name\": \"router-app\",\n \"scripts\": {\n \"dev\": \"vite\"\n },\n \"dependencies\": {\n \"@tanstack/router-plugin\": \"^1.0.0\",\n \"payload\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@tanstack/router-plugin\": \"^1.0.0\",\n \"typescript\": \"^6.0.0\"\n }\n}`\n fse.writeFileSync(packageJsonPath, originalPackageContent)\n\n await initTanStack({\n appDetails,\n dbType: 'mongodb',\n packageManager: 'yarn',\n projectDir,\n templateRoot,\n })\n\n expect(mocks.applyPreparedWrites).toHaveBeenCalledWith({\n writes: [\n ...preparedWrites,\n {\n content: `{\n \"name\": \"router-app\",\n \"scripts\": {\n \"dev\": \"vite\"\n },\n \"dependencies\": {\n \"payload\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"typescript\": \"^6.0.0\"\n }\n}\\n`,\n filePath: packageJsonPath,\n },\n ],\n })\n expect(fse.readFileSync(packageJsonPath, 'utf8')).toBe(originalPackageContent)\n expect(mocks.installPackages).toHaveBeenCalledWith({\n packageManager: 'yarn',\n packagesToInstall: [\n '@payloadcms/plugin-mcp@4.2.0',\n '@payloadcms/richtext-lexical@4.2.0',\n '@payloadcms/tanstack-start@4.2.0',\n '@payloadcms/ui@4.2.0',\n '@vitejs/plugin-rsc@^0.5.21',\n '@payloadcms/db-mongodb@4.2.0',\n 'graphql@^16.8.1',\n 'payload@4.2.0',\n 'sharp@0.34.2',\n '@tanstack/react-start@^1.168.26',\n ],\n projectDir,\n })\n })\n\n it('should reject malformed Router package metadata before applying host writes', async () => {\n appDetails = createAppDetails({ kind: 'router-only', projectDir })\n const packageJsonPath = path.join(projectDir, 'package.json')\n const malformedPackageContent = '{ \"dependencies\": {'\n fse.writeFileSync(packageJsonPath, malformedPackageContent)\n\n const result = await initTanStack({\n appDetails,\n dbType: 'mongodb',\n packageManager: 'pnpm',\n projectDir,\n templateRoot,\n })\n\n expect(result.success).toBe(false)\n if (result.success) {\n throw new Error('Expected malformed package metadata to fail preparation.')\n }\n expect(result.reason).toContain('Could not prepare package.json')\n expect(fse.readFileSync(packageJsonPath, 'utf8')).toBe(malformedPackageContent)\n expect(mocks.applyPreparedWrites).not.toHaveBeenCalled()\n expect(mocks.installPackages).not.toHaveBeenCalled()\n })\n\n it.each([\n {\n existingDependencies: {\n '@tanstack/react-router': '^1.200.0',\n '@tanstack/react-start': '^1.200.0',\n react: '^19.0.0',\n },\n existingDevDependencies: { vite: '^7.0.0' },\n expectedDependencies: {\n '@payloadcms/db-postgres': '4.2.0',\n '@payloadcms/plugin-mcp': '4.2.0',\n '@payloadcms/richtext-lexical': '4.2.0',\n '@payloadcms/tanstack-start': '4.2.0',\n '@payloadcms/ui': '4.2.0',\n '@tanstack/react-router': '^1.200.0',\n '@tanstack/react-start': '^1.200.0',\n '@vitejs/plugin-rsc': '^0.5.21',\n graphql: '^16.8.1',\n payload: '4.2.0',\n react: '^19.0.0',\n sharp: '0.34.2',\n },\n expectedDevDependencies: { vite: '^7.0.0' },\n kind: 'start' as const,\n },\n {\n existingDependencies: {\n '@tanstack/react-router': '^1.200.0',\n react: '^19.0.0',\n },\n existingDevDependencies: {\n '@tanstack/router-plugin': '^1.200.0',\n vite: '^7.0.0',\n },\n expectedDependencies: {\n '@payloadcms/db-postgres': '4.2.0',\n '@payloadcms/plugin-mcp': '4.2.0',\n '@payloadcms/richtext-lexical': '4.2.0',\n '@payloadcms/tanstack-start': '4.2.0',\n '@payloadcms/ui': '4.2.0',\n '@tanstack/react-router': '^1.200.0',\n '@tanstack/react-start': '^1.168.26',\n '@vitejs/plugin-rsc': '^0.5.21',\n graphql: '^16.8.1',\n payload: '4.2.0',\n react: '^19.0.0',\n sharp: '0.34.2',\n },\n expectedDevDependencies: { vite: '^7.0.0' },\n kind: 'router-only' as const,\n },\n ])(\n 'should record required dependencies without installing them for a $kind project with --no-deps',\n async ({\n existingDependencies,\n existingDevDependencies,\n expectedDependencies,\n expectedDevDependencies,\n kind,\n }) => {\n appDetails = createAppDetails({ kind, projectDir })\n const packageJsonPath = path.join(projectDir, 'package.json')\n fse.writeJsonSync(packageJsonPath, {\n dependencies: existingDependencies,\n devDependencies: existingDevDependencies,\n name: `${kind}-app`,\n })\n\n const result = await initTanStack({\n '--no-deps': true,\n appDetails,\n dbType: 'postgres',\n packageManager: 'pnpm',\n projectDir,\n templateRoot,\n })\n\n expect(result.success).toBe(true)\n expect(mocks.resolvePackageVersion).toHaveBeenCalledWith({\n debug: undefined,\n packageName: 'payload',\n versionOrTag: 'canary',\n })\n expect(mocks.ensurePnpmBuildApprovals).not.toHaveBeenCalled()\n expect(mocks.installPackages).not.toHaveBeenCalled()\n expect(mocks.configurePayloadTsConfig).toHaveBeenCalledOnce()\n\n const appliedWrites = mocks.applyPreparedWrites.mock.calls[0]?.[0].writes as Array<{\n content: string\n filePath: string\n }>\n const packageJsonWrite = appliedWrites.find(({ filePath }) => filePath === packageJsonPath)\n\n expect(JSON.parse(packageJsonWrite?.content ?? '{}')).toEqual({\n dependencies: expectedDependencies,\n devDependencies: expectedDevDependencies,\n name: `${kind}-app`,\n })\n },\n )\n\n it('should return the preparation failure without applying writes', async () => {\n mocks.prepareTanStackInit.mockResolvedValue({ reason: 'unsafe host transform', success: false })\n\n const result = await initTanStack({\n appDetails,\n dbType: 'sqlite',\n packageManager: 'bun',\n projectDir,\n templateRoot,\n })\n\n expect(result).toEqual({ reason: 'unsafe host transform', success: false })\n expect(mocks.applyPreparedWrites).not.toHaveBeenCalled()\n expect(mocks.installPackages).not.toHaveBeenCalled()\n })\n\n it('should return a failure when dependency installation rejects', async () => {\n mocks.installPackages.mockRejectedValue(new Error('Command failed with exit code 1'))\n\n const result = await initTanStack({\n appDetails,\n dbType: 'mongodb',\n packageManager: 'npm',\n projectDir,\n templateRoot,\n })\n\n expect(result).toEqual({ reason: 'Failed to install dependencies', success: false })\n expect(mocks.configurePayloadTsConfig).not.toHaveBeenCalled()\n })\n\n it('should detect app details when none are provided', async () => {\n const result = await initTanStack({\n dbType: 'mongodb',\n packageManager: 'npm',\n projectDir,\n templateRoot,\n })\n\n expect(result.success).toBe(true)\n expect(mocks.getTanStackAppDetails).toHaveBeenCalledWith({ projectDir })\n expect(mocks.prepareTanStackInit).toHaveBeenCalledWith({ appDetails, templateRoot })\n })\n})\n\nfunction createAppDetails({\n kind,\n projectDir,\n}: {\n kind: TanStackAppDetails['kind']\n projectDir: string\n}): TanStackAppDetails {\n return {\n isPayloadInstalled: false,\n kind,\n projectDir,\n rootRoutePath: path.join(projectDir, 'src/routes/__root.tsx'),\n routerPath: path.join(projectDir, 'src/router.tsx'),\n routesDir: path.join(projectDir, 'src/routes'),\n sourceDir: path.join(projectDir, 'src'),\n viteConfigPath: path.join(projectDir, 'vite.config.ts'),\n }\n}\n"],"names":["fse","os","path","afterEach","beforeEach","describe","expect","it","vi","initTanStack","mocks","hoisted","applyPreparedWrites","fn","configurePayloadTsConfig","ensurePnpmBuildApprovals","getTanStackAppDetails","installPackages","prepareTanStackInit","resolvePackageVersion","mock","importOriginal","templateRoot","appDetails","preparedWrites","projectDir","clearAllMocks","mkdtempSync","join","tmpdir","createAppDetails","kind","content","filePath","mockResolvedValue","success","writes","undefined","compatible","details","detected","removeSync","result","dbType","packageManager","toEqual","payloadConfigPath","toHaveBeenCalledWith","toHaveBeenCalledBefore","debug","packageName","versionOrTag","configPath","each","databasePackage","packagesToInstall","packageJsonPath","originalPackageContent","writeFileSync","readFileSync","toBe","malformedPackageContent","Error","reason","toContain","not","toHaveBeenCalled","existingDependencies","react","existingDevDependencies","vite","expectedDependencies","graphql","payload","sharp","expectedDevDependencies","writeJsonSync","dependencies","devDependencies","name","toHaveBeenCalledOnce","appliedWrites","calls","packageJsonWrite","find","JSON","parse","mockRejectedValue","isPayloadInstalled","rootRoutePath","routerPath","routesDir","sourceDir","viteConfigPath"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../src/lib/tanstack/detect.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAuC,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AASlG,wBAAsB,qBAAqB,CAAC,EAC1C,UAAU,GACX,EAAE;IACD,UAAU,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA8GnC"}
|