Skip to content

Commit d02d714

Browse files
committed
chore: fixing up bad network calls
1 parent 10a18d4 commit d02d714

File tree

20 files changed

+220
-189
lines changed

20 files changed

+220
-189
lines changed

frameworks/react-cra/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ export function register() {
2222
'code-router': {
2323
displayName: 'Code Router',
2424
description: 'TanStack Router using code to define the routes',
25+
forceTypescript: false,
2526
},
2627
'file-router': {
2728
displayName: 'File Router',
2829
description: 'TanStack Router using files to define the routes',
30+
forceTypescript: true,
2931
},
3032
},
3133
})

frameworks/solid/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ export function register() {
2222
'code-router': {
2323
displayName: 'Code Router',
2424
description: 'TanStack Router using code to define the routes',
25+
forceTypescript: true,
2526
},
2627
'file-router': {
2728
displayName: 'File Router',
2829
description: 'TanStack Router using files to define the routes',
30+
forceTypescript: true,
2931
},
3032
},
3133
})

packages/cta-cli/src/command-line.ts

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,39 +25,42 @@ export async function normalizeOptions(
2525
return undefined
2626
}
2727

28-
const framework = getFrameworkById(cliOptions.framework || 'react-cra')!
29-
30-
// TODO: Make this declarative
31-
let typescript =
32-
cliOptions.template === 'typescript' ||
33-
cliOptions.template === 'file-router' ||
34-
cliOptions.framework === 'solid'
35-
36-
if (forcedMode && framework.supportedModes[forcedMode].forceTypescript) {
37-
typescript = true
38-
}
39-
4028
let tailwind = !!cliOptions.tailwind
41-
if (cliOptions.framework === 'solid') {
42-
tailwind = true
43-
}
4429

4530
let mode: string =
46-
forcedMode || cliOptions.template === 'file-router'
47-
? 'file-router'
48-
: 'code-router'
31+
forcedMode ||
32+
(cliOptions.template === 'file-router' ? 'file-router' : 'code-router')
4933

5034
const starter = cliOptions.starter
5135
? await loadStarter(cliOptions.starter)
5236
: undefined
5337

38+
// TODO: Make this declarative
39+
let typescript =
40+
cliOptions.template === 'typescript' ||
41+
cliOptions.template === 'file-router' ||
42+
cliOptions.framework === 'solid'
43+
5444
if (starter) {
5545
tailwind = starter.tailwind
5646
typescript = starter.typescript
5747
cliOptions.framework = starter.framework
5848
mode = starter.mode
5949
}
6050

51+
const framework = getFrameworkById(cliOptions.framework || 'react-cra')!
52+
53+
if (
54+
forcedMode &&
55+
framework.supportedModes?.[forcedMode]?.forceTypescript !== undefined
56+
) {
57+
typescript = true
58+
}
59+
60+
if (cliOptions.framework === 'solid') {
61+
tailwind = true
62+
}
63+
6164
async function selectAddOns() {
6265
// Edge case for Windows Powershell
6366
if (Array.isArray(cliOptions.addOns) && cliOptions.addOns.length === 1) {

packages/cta-cli/tests/command-line.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,18 @@ describe('normalizeOptions', () => {
6363
id: 'solid',
6464
name: 'Solid',
6565
getAddOns: () => [],
66+
supportedModes: {
67+
'code-router': {
68+
displayName: 'Code Router',
69+
description: 'TanStack Router using code to define the routes',
70+
forceTypescript: false,
71+
},
72+
'file-router': {
73+
displayName: 'File Router',
74+
description: 'TanStack Router using files to define the routes',
75+
forceTypescript: true,
76+
},
77+
},
6678
})
6779
fetch.mockResponseOnce(
6880
JSON.stringify({

packages/cta-cli/tests/options.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,18 @@ beforeEach(() => {
3636
modes: ['file-router', 'code-router'],
3737
},
3838
],
39+
supportedModes: {
40+
'code-router': {
41+
displayName: 'Code Router',
42+
description: 'TanStack Router using code to define the routes',
43+
forceTypescript: false,
44+
},
45+
'file-router': {
46+
displayName: 'File Router',
47+
description: 'TanStack Router using files to define the routes',
48+
forceTypescript: true,
49+
},
50+
},
3951
} as unknown as Framework)
4052

4153
__testRegisterFramework({

packages/cta-cli/tests/ui-prompts.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import {
1111
selectTailwind,
1212
selectToolchain,
1313
} from '../src/ui-prompts'
14-
import { FILE_ROUTER } from '@tanstack/cta-engine'
1514

1615
import type { AddOn, Framework } from '@tanstack/cta-engine'
1716

@@ -44,7 +43,7 @@ describe('selectRouterType', () => {
4443
vi.spyOn(clack, 'isCancel').mockImplementation(() => false)
4544

4645
const routerType = await selectRouterType()
47-
expect(routerType).toBe(FILE_ROUTER)
46+
expect(routerType).toBe('file-router')
4847
})
4948

5049
it('should exit on cancel', async () => {

packages/cta-engine/tests/package-json.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { describe, expect, it } from 'vitest'
22

33
import { createPackageJSON } from '../src/package-json.js'
4-
import { FILE_ROUTER } from '../src/constants.js'
54

65
import type { Options, Framework } from '../src/types.js'
76

@@ -17,7 +16,7 @@ describe('createPackageJSON', () => {
1716
},
1817
},
1918
],
20-
mode: FILE_ROUTER,
19+
mode: 'file-router',
2120
typescript: true,
2221
tailwind: true,
2322
projectName: 'test',

packages/cta-ui/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
rel="stylesheet"
1111
href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap"
1212
/>
13+
<!-- PRELOAD-->
1314
</head>
1415
<body class="dark">
1516
<div id="root"></div>

packages/cta-ui/lib/engine-handling/create-app-wrapper.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ import {
1111

1212
import { TMP_TARGET_DIR } from '../constants.js'
1313

14-
import { registerFrameworks } from './framework-registration.js'
15-
1614
import { cleanUpFileArray, cleanUpFiles } from './file-helpers.js'
1715
import { getApplicationMode, getProjectPath } from './server-environment.js'
1816

@@ -33,9 +31,10 @@ export async function createAppWrapper(
3331
environmentFactory?: () => Environment
3432
},
3533
) {
36-
registerFrameworks()
37-
3834
const framework = getFrameworkById(projectOptions.framework)!
35+
if (!framework) {
36+
throw new Error(`Framework ${projectOptions.framework} not found`)
37+
}
3938

4039
let starter: Starter | undefined
4140
const addOns: Array<string> = [...projectOptions.chosenAddOns]

packages/cta-ui/lib/engine-handling/framework-registration.ts

Lines changed: 0 additions & 11 deletions
This file was deleted.

packages/cta-ui/lib/engine-handling/generate-initial-payload.ts

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import {
1212

1313
import { cleanUpFiles } from './file-helpers.js'
1414
import { createAppWrapper } from './create-app-wrapper.js'
15-
import { registerFrameworks } from './framework-registration.js'
1615
import {
1716
getApplicationMode,
1817
getForcedAddOns,
@@ -40,8 +39,6 @@ function convertAddOnToAddOnInfo(addOn: AddOn): AddOnInfo {
4039
}
4140

4241
export async function generateInitialPayload() {
43-
registerFrameworks()
44-
4542
const projectPath = getProjectPath()
4643
const applicationMode = getApplicationMode()
4744

@@ -76,35 +73,32 @@ export async function generateInitialPayload() {
7673
}
7774
}
7875

76+
const serializedOptions = await getSerializedOptions()
77+
7978
const rawRegistry = await getRawRegistry(getRegistryURL())
8079
const registryAddOns = await getRegistryAddOns(getRegistryURL())
8180

82-
const serializedOptions = await getSerializedOptions()
83-
8481
const output = await createAppWrapper(serializedOptions, {
8582
dryRun: true,
8683
})
8784

8885
const framework = await getFrameworkById(serializedOptions.framework)
8986

90-
const codeRouterAddOns = getAllAddOns(framework!, 'code-router').map(
91-
convertAddOnToAddOnInfo,
92-
)
93-
94-
const fileRouterAddOns = getAllAddOns(framework!, 'file-router').map(
95-
convertAddOnToAddOnInfo,
87+
const addOns = Object.keys(framework!.supportedModes).reduce(
88+
(acc, mode) => {
89+
acc[mode] = getAllAddOns(framework!, mode).map(convertAddOnToAddOnInfo)
90+
return acc
91+
},
92+
{} as Record<string, Array<AddOnInfo>>,
9693
)
9794

9895
for (const addOnInfo of registryAddOns) {
9996
const addOnFramework = rawRegistry?.['add-ons']?.find(
10097
(addOn) => addOn.url === addOnInfo.id,
10198
)
10299
if (addOnFramework?.framework === serializedOptions.framework) {
103-
if (addOnInfo.modes.includes('code-router')) {
104-
codeRouterAddOns.push(convertAddOnToAddOnInfo(addOnInfo))
105-
}
106-
if (addOnInfo.modes.includes('file-router')) {
107-
fileRouterAddOns.push(convertAddOnToAddOnInfo(addOnInfo))
100+
for (const mode of addOnInfo.modes) {
101+
addOns[mode].push(convertAddOnToAddOnInfo(addOnInfo))
108102
}
109103
}
110104
}
@@ -117,12 +111,10 @@ export async function generateInitialPayload() {
117111
}
118112

119113
return {
114+
supportedModes: framework!.supportedModes,
120115
applicationMode,
121116
localFiles,
122-
addOns: {
123-
'code-router': codeRouterAddOns,
124-
'file-router': fileRouterAddOns,
125-
},
117+
addOns,
126118
options: serializedOptions,
127119
output,
128120
forcedRouterMode,

packages/cta-ui/lib/engine-handling/server-environment.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import type { Mode, SerializedOptions } from '@tanstack/cta-engine'
1+
import type { SerializedOptions } from '@tanstack/cta-engine'
22

33
export type ServerEnvironment = {
44
projectPath: string
55
mode: 'add' | 'setup'
66
options?: SerializedOptions
77
addOns?: Array<string>
8-
forcedRouterMode?: Mode
8+
forcedRouterMode?: string
99
forcedAddOns?: Array<string>
1010
registry?: string
1111
}

packages/cta-ui/lib/index.ts

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@ export function launchUI(
3333
app.use(express.json())
3434
app.use(express.urlencoded({ extended: true }))
3535

36+
const packagePath = resolve(dirname(fileURLToPath(import.meta.url)), '..')
37+
3638
const launchUI = !process.env.CTA_DISABLE_UI
3739
if (launchUI) {
38-
const packagePath = resolve(dirname(fileURLToPath(import.meta.url)), '..')
3940
app.use(express.static(resolve(packagePath, 'dist')))
4041
}
4142

@@ -54,21 +55,37 @@ export function launchUI(
5455
})
5556

5657
app.post('/api/dry-run-add-to-app', async (req, res) => {
57-
res.send(
58-
await addToAppWrapper(req.body.addOns, {
59-
dryRun: true,
60-
environmentFactory: options.environmentFactory,
61-
}),
62-
)
58+
try {
59+
res.send(
60+
await addToAppWrapper(req.body.addOns, {
61+
dryRun: true,
62+
environmentFactory: options.environmentFactory,
63+
}),
64+
)
65+
} catch {
66+
res.send({
67+
files: {},
68+
commands: [],
69+
deletedFiles: [],
70+
})
71+
}
6372
})
6473

6574
app.post('/api/dry-run-create-app', async (req, res) => {
66-
res.send(
67-
await createAppWrapper(req.body.options, {
68-
dryRun: true,
69-
environmentFactory: options.environmentFactory,
70-
}),
71-
)
75+
try {
76+
res.send(
77+
await createAppWrapper(req.body.options, {
78+
dryRun: true,
79+
environmentFactory: options.environmentFactory,
80+
}),
81+
)
82+
} catch {
83+
res.send({
84+
files: {},
85+
commands: [],
86+
deletedFiles: [],
87+
})
88+
}
7289
})
7390

7491
app.get('/api/initial-payload', async (_req, res) => {

packages/cta-ui/src/components/cta-sidebar.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ export function AppSidebar() {
2323
<div className="block p-4 bg-gray-500/10 hover:bg-gray-500/20 rounded-lg transition-colors space-y-4 active @container">
2424
<ProjectName />
2525
</div>
26-
<div className="block p-4 bg-gray-500/10 hover:bg-gray-500/20 rounded-lg transition-colors space-y-4 active @container">
27-
<ModeSelector />
28-
</div>
26+
<ModeSelector />
2927
<div className="block p-4 bg-gray-500/10 hover:bg-gray-500/20 rounded-lg transition-colors space-y-4 active @container">
3028
<TypescriptSwitch />
3129
</div>

packages/cta-ui/src/components/file-navigator.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { FileText, Folder } from 'lucide-react'
44
import FileViewer from './file-viewer'
55
import FileTree from './file-tree'
66

7-
import type { FileTreeItem } from '@/types'
7+
import type { DryRunOutput, FileTreeItem } from '@/types'
88

99
import { Label } from '@/components/ui/label'
1010
import { Switch } from '@/components/ui/switch'
@@ -97,8 +97,8 @@ export default function FileNavigator() {
9797
const mode = useApplicationMode()
9898

9999
const tree = dryRunOutput.files
100-
const originalTree =
101-
mode === 'setup' ? dryRunOutput.files : projectFiles.files
100+
const originalTree: DryRunOutput | undefined =
101+
mode === 'setup' ? dryRunOutput.files : projectFiles?.files
102102
const deletedFiles = dryRunOutput.deletedFiles
103103

104104
const [originalFileContents, setOriginalFileContents] = useState<string>()
@@ -109,6 +109,10 @@ export default function FileNavigator() {
109109
const fileTree = useMemo(() => {
110110
const treeData: Array<FileTreeItem> = []
111111

112+
if (!originalTree || !localTree) {
113+
return treeData
114+
}
115+
112116
const allFileSet = Array.from(
113117
new Set([
114118
...Object.keys(tree),

0 commit comments

Comments
 (0)