@tanstack/cta-ui 0.10.0-alpha.20 → 0.10.0-alpha.22

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/lib/index.ts CHANGED
@@ -1,23 +1,35 @@
1
1
  import { dirname, resolve } from 'node:path'
2
2
  import { fileURLToPath } from 'node:url'
3
3
 
4
- import type { SerializedOptions } from '@tanstack/cta-engine'
4
+ import type { Mode, SerializedOptions } from '@tanstack/cta-engine'
5
5
 
6
6
  export function launchUI({
7
7
  mode,
8
8
  addOns,
9
9
  options,
10
+ forcedMode,
11
+ forcedAddOns,
10
12
  }: {
11
13
  mode: 'add' | 'setup'
12
14
  addOns?: Array<string>
13
15
  options?: SerializedOptions
16
+ forcedMode?: Mode
17
+ forcedAddOns?: Array<string>
14
18
  }) {
15
19
  const projectPath = process.cwd()
16
20
 
17
- process.env.CTA_PROJECT_PATH = projectPath
21
+ delete process.env.NODE_ENV
22
+
18
23
  process.env.CTA_ADD_ONS = addOns?.join(',') || ''
24
+ process.env.CTA_PROJECT_PATH = projectPath
19
25
  process.env.CTA_OPTIONS = options ? JSON.stringify(options) : ''
20
26
  process.env.CTA_MODE = mode
27
+ if (forcedMode) {
28
+ process.env.CTA_FORCED_ROUTER_MODE = forcedMode
29
+ }
30
+ if (forcedAddOns) {
31
+ process.env.CTA_FORCED_ADD_ONS = forcedAddOns.join(',')
32
+ }
21
33
 
22
34
  const developerPath = resolve(dirname(fileURLToPath(import.meta.url)), '..')
23
35
  const configPath = resolve(developerPath, './app.config.js')
@@ -1,6 +1,8 @@
1
- import type { SerializedOptions } from '@tanstack/cta-engine';
2
- export declare function launchUI({ mode, addOns, options, }: {
1
+ import type { Mode, SerializedOptions } from '@tanstack/cta-engine';
2
+ export declare function launchUI({ mode, addOns, options, forcedMode, forcedAddOns, }: {
3
3
  mode: 'add' | 'setup';
4
4
  addOns?: Array<string>;
5
5
  options?: SerializedOptions;
6
+ forcedMode?: Mode;
7
+ forcedAddOns?: Array<string>;
6
8
  }): void;
package/lib-dist/index.js CHANGED
@@ -1,11 +1,18 @@
1
1
  import { dirname, resolve } from 'node:path';
2
2
  import { fileURLToPath } from 'node:url';
3
- export function launchUI({ mode, addOns, options, }) {
3
+ export function launchUI({ mode, addOns, options, forcedMode, forcedAddOns, }) {
4
4
  const projectPath = process.cwd();
5
- process.env.CTA_PROJECT_PATH = projectPath;
5
+ delete process.env.NODE_ENV;
6
6
  process.env.CTA_ADD_ONS = addOns?.join(',') || '';
7
+ process.env.CTA_PROJECT_PATH = projectPath;
7
8
  process.env.CTA_OPTIONS = options ? JSON.stringify(options) : '';
8
9
  process.env.CTA_MODE = mode;
10
+ if (forcedMode) {
11
+ process.env.CTA_FORCED_ROUTER_MODE = forcedMode;
12
+ }
13
+ if (forcedAddOns) {
14
+ process.env.CTA_FORCED_ADD_ONS = forcedAddOns.join(',');
15
+ }
9
16
  const developerPath = resolve(dirname(fileURLToPath(import.meta.url)), '..');
10
17
  const configPath = resolve(developerPath, './app.config.js');
11
18
  process.chdir(developerPath);
package/package.json CHANGED
@@ -28,7 +28,6 @@
28
28
  "@tanstack/react-router-devtools": "^1.114.3",
29
29
  "@tanstack/react-router-with-query": "^1.114.3",
30
30
  "@tanstack/react-start": "^1.114.3",
31
- "@tanstack/react-store": "^0.7.0",
32
31
  "@tanstack/router-plugin": "^1.114.3",
33
32
  "@uiw/codemirror-theme-github": "^4.23.10",
34
33
  "@uiw/react-codemirror": "^4.23.10",
@@ -48,9 +47,9 @@
48
47
  "vinxi": "^0.5.3",
49
48
  "vite-tsconfig-paths": "^5.1.4",
50
49
  "zustand": "^5.0.3",
51
- "@tanstack/cta-framework-react-cra": "0.10.0-alpha.20",
52
- "@tanstack/cta-engine": "0.10.0-alpha.20",
53
- "@tanstack/cta-framework-solid": "0.10.0-alpha.20"
50
+ "@tanstack/cta-framework-react-cra": "0.10.0-alpha.21",
51
+ "@tanstack/cta-engine": "0.10.0-alpha.21",
52
+ "@tanstack/cta-framework-solid": "0.10.0-alpha.21"
54
53
  },
55
54
  "devDependencies": {
56
55
  "@testing-library/dom": "^10.4.0",
@@ -66,6 +65,6 @@
66
65
  "vitest": "^3.0.5",
67
66
  "web-vitals": "^4.2.4"
68
67
  },
69
- "version": "0.10.0-alpha.20",
68
+ "version": "0.10.0-alpha.22",
70
69
  "scripts": {}
71
70
  }
@@ -13,6 +13,8 @@ import { createAppWrapper } from './create-app-wrapper.js'
13
13
  import { registerFrameworks } from './framework-registration.js'
14
14
  import {
15
15
  getApplicationMode,
16
+ getForcedAddOns,
17
+ getForcedRouterMode,
16
18
  getProjectOptions,
17
19
  getProjectPath,
18
20
  } from './server-environment.js'
@@ -30,6 +32,8 @@ export async function generateInitialPayload() {
30
32
  ? await cleanUpFiles(await recursivelyGatherFiles(projectPath, false))
31
33
  : {}
32
34
 
35
+ const forcedRouterMode = getForcedRouterMode()
36
+
33
37
  function getSerializedOptions() {
34
38
  if (applicationMode === 'setup') {
35
39
  const projectOptions = getProjectOptions()
@@ -37,7 +41,7 @@ export async function generateInitialPayload() {
37
41
  ...projectOptions,
38
42
  framework: projectOptions.framework || 'react-cra',
39
43
  projectName: projectOptions.projectName || basename(projectPath),
40
- mode: projectOptions.mode || 'file-router',
44
+ mode: forcedRouterMode || projectOptions.mode,
41
45
  typescript: projectOptions.typescript || true,
42
46
  tailwind: projectOptions.tailwind || true,
43
47
  git: projectOptions.git || true,
@@ -89,5 +93,7 @@ export async function generateInitialPayload() {
89
93
  },
90
94
  options: serializedOptions,
91
95
  output,
96
+ forcedRouterMode,
97
+ forcedAddOns: getForcedAddOns(),
92
98
  }
93
99
  }
@@ -1,4 +1,4 @@
1
- import type { SerializedOptions } from '@tanstack/cta-engine'
1
+ import type { Mode, SerializedOptions } from '@tanstack/cta-engine'
2
2
 
3
3
  export function getProjectPath(): string {
4
4
  return process.env.CTA_PROJECT_PATH!
@@ -11,3 +11,14 @@ export function getApplicationMode(): 'add' | 'setup' {
11
11
  export function getProjectOptions(): SerializedOptions {
12
12
  return JSON.parse(process.env.CTA_OPTIONS!)
13
13
  }
14
+
15
+ export function getForcedRouterMode(): Mode | undefined {
16
+ if (!process.env.CTA_FORCED_ROUTER_MODE) {
17
+ return undefined
18
+ }
19
+ return process.env.CTA_FORCED_ROUTER_MODE as Mode
20
+ }
21
+
22
+ export function getForcedAddOns(): Array<string> | undefined {
23
+ return process.env.CTA_FORCED_ADD_ONS?.split(',') || []
24
+ }
@@ -36,9 +36,14 @@ const useInitialData = () =>
36
36
  'file-router': [],
37
37
  },
38
38
  applicationMode: 'none',
39
+ forcedRouterMode: undefined,
40
+ forcedAddOns: [],
39
41
  },
40
42
  })
41
43
 
44
+ const useForcedRouterMode = () => useInitialData().data.forcedRouterMode
45
+ const useForcedAddOns = () => useInitialData().data.forcedAddOns
46
+
42
47
  export const useProjectLocalFiles = () => useInitialData().data.localFiles
43
48
  export const useOriginalOutput = () => useInitialData().data.output
44
49
  export const useOriginalSelectedAddOns = () =>
@@ -98,6 +103,7 @@ export function useAddOns() {
98
103
  const originalSelectedAddOns = useOriginalSelectedAddOns()
99
104
  const codeRouterAddOns = useCodeRouterAddOns()
100
105
  const fileRouterAddOns = useFileRouterAddOns()
106
+ const forcedAddOns = useForcedAddOns()
101
107
  const { userSelectedAddOns, customAddOns } = useMutableAddOns()
102
108
  const projectStarter = useProjectStarter().projectStarter
103
109
 
@@ -118,6 +124,9 @@ export function useAddOns() {
118
124
  for (const addOn of originalSelectedAddOns) {
119
125
  originalAddOns.add(addOn)
120
126
  }
127
+ for (const addOn of forcedAddOns) {
128
+ originalAddOns.add(addOn)
129
+ }
121
130
  return getAddOnStatus(
122
131
  availableAddOns,
123
132
  userSelectedAddOns,
@@ -128,11 +137,18 @@ export function useAddOns() {
128
137
  userSelectedAddOns,
129
138
  originalSelectedAddOns,
130
139
  projectStarter?.dependsOn,
140
+ forcedAddOns,
131
141
  ])
132
142
 
133
143
  const chosenAddOns = useMemo(() => {
134
- return Object.keys(addOnState).filter((addOn) => addOnState[addOn].selected)
135
- }, [addOnState])
144
+ const addOns = new Set(
145
+ Object.keys(addOnState).filter((addOn) => addOnState[addOn].selected),
146
+ )
147
+ for (const addOn of forcedAddOns) {
148
+ addOns.add(addOn)
149
+ }
150
+ return Array.from(addOns)
151
+ }, [addOnState, forcedAddOns])
136
152
 
137
153
  const toggleAddOn = useCallback(
138
154
  (addOnId: string) => {
@@ -166,7 +182,11 @@ export function useAddOns() {
166
182
  const useHasProjectStarter = () =>
167
183
  useProjectStarter((state) => state.projectStarter === undefined)
168
184
 
169
- export const useModeEditable = () => useHasProjectStarter()
185
+ export const useModeEditable = () => {
186
+ const forcedRouterMode = useForcedRouterMode()
187
+ const hasProjectStarter = useHasProjectStarter()
188
+ return !forcedRouterMode && hasProjectStarter
189
+ }
170
190
 
171
191
  export const useTypeScriptEditable = () => {
172
192
  const hasProjectStarter = useHasProjectStarter()
@@ -183,7 +203,11 @@ export const useTailwindEditable = () => {
183
203
  export const useProjectName = () =>
184
204
  useProjectOptions((state) => state.projectName)
185
205
 
186
- export const useRouterMode = () => useProjectOptions((state) => state.mode)
206
+ export const useRouterMode = () => {
207
+ const forcedRouterMode = useForcedRouterMode()
208
+ const userMode = useProjectOptions((state) => state.mode)
209
+ return forcedRouterMode || userMode
210
+ }
187
211
 
188
212
  export function useFilters() {
189
213
  const includedFiles = useApplicationSettings((state) => state.includeFiles)
package/src/types.d.ts CHANGED
@@ -64,6 +64,8 @@ export type InitialData = {
64
64
  'file-router': Array<AddOnInfo>
65
65
  }
66
66
  applicationMode: ApplicationMode
67
+ forcedRouterMode?: Mode
68
+ forcedAddOns?: Array<string>
67
69
  }
68
70
 
69
71
  export type EventItem = {