@tanstack/cta-engine 0.10.0-alpha.18 → 0.10.0-alpha.20
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/dist/add-ons.js +5 -14
- package/dist/add-to-app.js +118 -74
- package/dist/config-file.js +9 -7
- package/dist/create-app.js +111 -42
- package/dist/custom-add-ons/add-on.js +175 -0
- package/dist/custom-add-ons/shared.js +117 -0
- package/dist/custom-add-ons/starter.js +84 -0
- package/dist/environment.js +59 -12
- package/dist/file-helpers.js +108 -2
- package/dist/frameworks.js +15 -1
- package/dist/index.js +12 -5
- package/dist/integrations/shadcn.js +10 -4
- package/dist/options.js +9 -0
- package/dist/package-json.js +7 -4
- package/dist/special-steps/index.js +24 -0
- package/dist/special-steps/rimraf-node-modules.js +16 -0
- package/dist/template-file.js +3 -13
- package/dist/types/add-ons.d.ts +3 -4
- package/dist/types/add-to-app.d.ts +16 -3
- package/dist/types/config-file.d.ts +4 -3
- package/dist/types/create-app.d.ts +1 -7
- package/dist/types/custom-add-ons/add-on.d.ts +69 -0
- package/dist/types/custom-add-ons/shared.d.ts +15 -0
- package/dist/types/custom-add-ons/starter.d.ts +7 -0
- package/dist/types/environment.d.ts +2 -1
- package/dist/types/file-helpers.d.ts +10 -0
- package/dist/types/frameworks.d.ts +2 -0
- package/dist/types/index.d.ts +13 -6
- package/dist/types/integrations/shadcn.d.ts +1 -1
- package/dist/types/options.d.ts +2 -0
- package/dist/types/package-json.d.ts +5 -0
- package/dist/types/package-manager.d.ts +6 -2
- package/dist/types/special-steps/index.d.ts +2 -0
- package/dist/types/special-steps/rimraf-node-modules.d.ts +2 -0
- package/dist/types/template-file.d.ts +1 -1
- package/dist/types/types.d.ts +752 -70
- package/dist/types.js +65 -1
- package/package.json +9 -3
- package/src/add-ons.ts +7 -19
- package/src/add-to-app.ts +195 -101
- package/src/config-file.ts +16 -13
- package/src/create-app.ts +128 -84
- package/src/custom-add-ons/add-on.ts +261 -0
- package/src/custom-add-ons/shared.ts +161 -0
- package/src/custom-add-ons/starter.ts +126 -0
- package/src/environment.ts +70 -11
- package/src/file-helpers.ts +164 -2
- package/src/frameworks.ts +21 -1
- package/src/index.ts +46 -11
- package/src/integrations/shadcn.ts +14 -4
- package/src/options.ts +11 -0
- package/src/package-json.ts +13 -6
- package/src/special-steps/index.ts +36 -0
- package/src/special-steps/rimraf-node-modules.ts +25 -0
- package/src/template-file.ts +3 -18
- package/src/types.ts +143 -85
- package/tests/add-ons.test.ts +5 -5
- package/tests/add-to-app.test.ts +358 -0
- package/tests/config-file.test.ts +36 -7
- package/tests/create-app.test.ts +43 -68
- package/tests/custom-add-ons/add-on.test.ts +12 -0
- package/tests/custom-add-ons/shared.test.ts +257 -0
- package/tests/custom-add-ons/starter.test.ts +58 -0
- package/tests/environment.test.ts +90 -2
- package/tests/file-helper.test.ts +55 -2
- package/tests/frameworks.test.ts +95 -0
- package/tests/index.test.ts +9 -0
- package/tests/integrations/shadcn.test.ts +48 -63
- package/tests/options.test.ts +42 -0
- package/tests/setupVitest.ts +6 -0
- package/tests/template-file.test.ts +54 -93
- package/vitest.config.ts +21 -0
|
@@ -9,22 +9,17 @@ describe('shadcn', () => {
|
|
|
9
9
|
it('should skip if no components are selected', async () => {
|
|
10
10
|
const { environment, output } = createMemoryEnvironment()
|
|
11
11
|
environment.startRun()
|
|
12
|
-
await installShadcnComponents(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
fail: () => {},
|
|
24
|
-
}),
|
|
25
|
-
} as unknown as Options,
|
|
26
|
-
true,
|
|
27
|
-
)
|
|
12
|
+
await installShadcnComponents(environment, '/test', {
|
|
13
|
+
packageManager: 'pnpm',
|
|
14
|
+
chosenAddOns: [],
|
|
15
|
+
projectName: 'test',
|
|
16
|
+
typescript: true,
|
|
17
|
+
spinner: () => ({
|
|
18
|
+
start: () => {},
|
|
19
|
+
succeed: () => {},
|
|
20
|
+
fail: () => {},
|
|
21
|
+
}),
|
|
22
|
+
} as unknown as Options)
|
|
28
23
|
environment.finishRun()
|
|
29
24
|
|
|
30
25
|
expect(output.commands).toEqual([])
|
|
@@ -33,31 +28,26 @@ describe('shadcn', () => {
|
|
|
33
28
|
it('should add shadcn components for add-ons', async () => {
|
|
34
29
|
const { environment, output } = createMemoryEnvironment()
|
|
35
30
|
environment.startRun()
|
|
36
|
-
await installShadcnComponents(
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
fail: () => {},
|
|
57
|
-
}),
|
|
58
|
-
} as unknown as Options,
|
|
59
|
-
false,
|
|
60
|
-
)
|
|
31
|
+
await installShadcnComponents(environment, '/test', {
|
|
32
|
+
packageManager: 'pnpm',
|
|
33
|
+
chosenAddOns: [
|
|
34
|
+
{
|
|
35
|
+
id: 'shadcn',
|
|
36
|
+
shadcnComponents: ['button'],
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: 'test-1',
|
|
40
|
+
shadcnComponents: ['button', 'card'],
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
projectName: 'test',
|
|
44
|
+
typescript: true,
|
|
45
|
+
spinner: () => ({
|
|
46
|
+
start: () => {},
|
|
47
|
+
succeed: () => {},
|
|
48
|
+
fail: () => {},
|
|
49
|
+
}),
|
|
50
|
+
} as unknown as Options)
|
|
61
51
|
environment.finishRun()
|
|
62
52
|
|
|
63
53
|
expect(output.commands).toEqual([
|
|
@@ -71,29 +61,24 @@ describe('shadcn', () => {
|
|
|
71
61
|
it('should add shadcn components in the starter', async () => {
|
|
72
62
|
const { environment, output } = createMemoryEnvironment()
|
|
73
63
|
environment.startRun()
|
|
74
|
-
await installShadcnComponents(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
chosenAddOns: [
|
|
80
|
-
{
|
|
81
|
-
id: 'shadcn',
|
|
82
|
-
},
|
|
83
|
-
],
|
|
84
|
-
projectName: 'test',
|
|
85
|
-
typescript: true,
|
|
86
|
-
starter: {
|
|
87
|
-
shadcnComponents: ['button', 'card'],
|
|
64
|
+
await installShadcnComponents(environment, '/test', {
|
|
65
|
+
packageManager: 'pnpm',
|
|
66
|
+
chosenAddOns: [
|
|
67
|
+
{
|
|
68
|
+
id: 'shadcn',
|
|
88
69
|
},
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
|
|
70
|
+
],
|
|
71
|
+
projectName: 'test',
|
|
72
|
+
typescript: true,
|
|
73
|
+
starter: {
|
|
74
|
+
shadcnComponents: ['button', 'card'],
|
|
75
|
+
},
|
|
76
|
+
spinner: () => ({
|
|
77
|
+
start: () => {},
|
|
78
|
+
succeed: () => {},
|
|
79
|
+
fail: () => {},
|
|
80
|
+
}),
|
|
81
|
+
} as unknown as Options)
|
|
97
82
|
environment.finishRun()
|
|
98
83
|
|
|
99
84
|
expect(output.commands).toEqual([
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import { createSerializedOptions } from '../src/options.js'
|
|
4
|
+
import { AddOn, Framework, Options, Starter } from '../src/types.js'
|
|
5
|
+
|
|
6
|
+
describe('createSerializedOptions', () => {
|
|
7
|
+
it('handle no add-ons', () => {
|
|
8
|
+
const options = createSerializedOptions({
|
|
9
|
+
framework: {
|
|
10
|
+
id: 'react-cra',
|
|
11
|
+
} as Framework,
|
|
12
|
+
chosenAddOns: [],
|
|
13
|
+
} as unknown as Options)
|
|
14
|
+
expect(options).toEqual({
|
|
15
|
+
framework: 'react-cra',
|
|
16
|
+
chosenAddOns: [],
|
|
17
|
+
})
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
it('handle add-ons and a starter', () => {
|
|
21
|
+
const options = createSerializedOptions({
|
|
22
|
+
framework: {
|
|
23
|
+
id: 'react-cra',
|
|
24
|
+
} as Framework,
|
|
25
|
+
chosenAddOns: [
|
|
26
|
+
{
|
|
27
|
+
id: 'add-on-1',
|
|
28
|
+
description: 'Add-on 1',
|
|
29
|
+
modes: ['file-router'],
|
|
30
|
+
} as AddOn,
|
|
31
|
+
],
|
|
32
|
+
starter: {
|
|
33
|
+
id: 'starter-1',
|
|
34
|
+
} as unknown as Starter,
|
|
35
|
+
} as unknown as Options)
|
|
36
|
+
expect(options).toEqual({
|
|
37
|
+
framework: 'react-cra',
|
|
38
|
+
chosenAddOns: ['add-on-1'],
|
|
39
|
+
starter: 'starter-1',
|
|
40
|
+
})
|
|
41
|
+
})
|
|
42
|
+
})
|
|
@@ -8,6 +8,7 @@ import type { AddOn, Integration, Options } from '../src/types.js'
|
|
|
8
8
|
|
|
9
9
|
const simpleOptions = {
|
|
10
10
|
projectName: 'test',
|
|
11
|
+
targetDir: '/test',
|
|
11
12
|
framework: {
|
|
12
13
|
id: 'test',
|
|
13
14
|
name: 'Test',
|
|
@@ -17,15 +18,12 @@ const simpleOptions = {
|
|
|
17
18
|
typescript: true,
|
|
18
19
|
tailwind: true,
|
|
19
20
|
mode: FILE_ROUTER,
|
|
20
|
-
variableValues: {
|
|
21
|
-
a: 'foo',
|
|
22
|
-
},
|
|
23
21
|
} as unknown as Options
|
|
24
22
|
|
|
25
23
|
describe('createTemplateFile', () => {
|
|
26
24
|
it('should template a simple file', async () => {
|
|
27
25
|
const { environment, output } = createMemoryEnvironment()
|
|
28
|
-
const templateFile = createTemplateFile(environment, simpleOptions
|
|
26
|
+
const templateFile = createTemplateFile(environment, simpleOptions)
|
|
29
27
|
environment.startRun()
|
|
30
28
|
await templateFile('./test.ts', 'let a = 1')
|
|
31
29
|
environment.finishRun()
|
|
@@ -33,34 +31,11 @@ describe('createTemplateFile', () => {
|
|
|
33
31
|
expect(output.files['/test/test.ts'].trim()).toEqual('let a = 1')
|
|
34
32
|
})
|
|
35
33
|
|
|
36
|
-
it('should template a simple file with ejs', async () => {
|
|
37
|
-
const { environment, output } = createMemoryEnvironment()
|
|
38
|
-
const templateFile = createTemplateFile(
|
|
39
|
-
environment,
|
|
40
|
-
{
|
|
41
|
-
...simpleOptions,
|
|
42
|
-
variableValues: {
|
|
43
|
-
a: 'foo',
|
|
44
|
-
},
|
|
45
|
-
} as unknown as Options,
|
|
46
|
-
'/test',
|
|
47
|
-
)
|
|
48
|
-
environment.startRun()
|
|
49
|
-
await templateFile('./test.ts.ejs', "let a = '<%= variables.a %>'")
|
|
50
|
-
environment.finishRun()
|
|
51
|
-
|
|
52
|
-
expect(output.files['/test/test.ts'].trim()).toEqual("let a = 'foo'")
|
|
53
|
-
})
|
|
54
|
-
|
|
55
34
|
it('should handle ignore files', async () => {
|
|
56
35
|
const { environment, output } = createMemoryEnvironment()
|
|
57
|
-
const templateFile = createTemplateFile(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
...simpleOptions,
|
|
61
|
-
} as unknown as Options,
|
|
62
|
-
'/test',
|
|
63
|
-
)
|
|
36
|
+
const templateFile = createTemplateFile(environment, {
|
|
37
|
+
...simpleOptions,
|
|
38
|
+
} as unknown as Options)
|
|
64
39
|
environment.startRun()
|
|
65
40
|
await templateFile('./test.ts.ejs', '<% ignoreFile() %>let a = 1')
|
|
66
41
|
environment.finishRun()
|
|
@@ -70,7 +45,7 @@ describe('createTemplateFile', () => {
|
|
|
70
45
|
|
|
71
46
|
it('should handle append files', async () => {
|
|
72
47
|
const { environment, output } = createMemoryEnvironment()
|
|
73
|
-
const templateFile = createTemplateFile(environment, simpleOptions
|
|
48
|
+
const templateFile = createTemplateFile(environment, simpleOptions)
|
|
74
49
|
environment.startRun()
|
|
75
50
|
await templateFile('./test.txt.ejs', 'Line 1\n')
|
|
76
51
|
await templateFile('./test.txt.append', 'Line 2\n')
|
|
@@ -81,23 +56,19 @@ describe('createTemplateFile', () => {
|
|
|
81
56
|
|
|
82
57
|
it('should handle enabled add-ons', async () => {
|
|
83
58
|
const { environment, output } = createMemoryEnvironment()
|
|
84
|
-
const templateFile = createTemplateFile(
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
] as Array<AddOn>,
|
|
98
|
-
},
|
|
99
|
-
'/test',
|
|
100
|
-
)
|
|
59
|
+
const templateFile = createTemplateFile(environment, {
|
|
60
|
+
...simpleOptions,
|
|
61
|
+
chosenAddOns: [
|
|
62
|
+
{
|
|
63
|
+
id: 'test1',
|
|
64
|
+
name: 'Test 1',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: 'test2',
|
|
68
|
+
name: 'Test 2',
|
|
69
|
+
},
|
|
70
|
+
] as Array<AddOn>,
|
|
71
|
+
})
|
|
101
72
|
environment.startRun()
|
|
102
73
|
await templateFile(
|
|
103
74
|
'./test.txt.ejs',
|
|
@@ -110,7 +81,7 @@ describe('createTemplateFile', () => {
|
|
|
110
81
|
|
|
111
82
|
it('should handle relative paths', async () => {
|
|
112
83
|
const { environment, output } = createMemoryEnvironment()
|
|
113
|
-
const templateFile = createTemplateFile(environment, simpleOptions
|
|
84
|
+
const templateFile = createTemplateFile(environment, simpleOptions)
|
|
114
85
|
environment.startRun()
|
|
115
86
|
await templateFile(
|
|
116
87
|
'./src/test/test.txt.ejs',
|
|
@@ -125,27 +96,23 @@ describe('createTemplateFile', () => {
|
|
|
125
96
|
|
|
126
97
|
it('should handle routes', async () => {
|
|
127
98
|
const { environment, output } = createMemoryEnvironment()
|
|
128
|
-
const templateFile = createTemplateFile(
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
],
|
|
146
|
-
},
|
|
147
|
-
'/test',
|
|
148
|
-
)
|
|
99
|
+
const templateFile = createTemplateFile(environment, {
|
|
100
|
+
...simpleOptions,
|
|
101
|
+
chosenAddOns: [
|
|
102
|
+
{
|
|
103
|
+
id: 'test',
|
|
104
|
+
name: 'Test',
|
|
105
|
+
routes: [
|
|
106
|
+
{
|
|
107
|
+
path: '/test',
|
|
108
|
+
name: 'Test',
|
|
109
|
+
url: '/test',
|
|
110
|
+
jsName: 'test',
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
} as AddOn,
|
|
114
|
+
],
|
|
115
|
+
})
|
|
149
116
|
|
|
150
117
|
environment.startRun()
|
|
151
118
|
await templateFile(
|
|
@@ -154,33 +121,27 @@ describe('createTemplateFile', () => {
|
|
|
154
121
|
)
|
|
155
122
|
environment.finishRun()
|
|
156
123
|
|
|
157
|
-
console.log(output.files['/test/test.txt'])
|
|
158
|
-
|
|
159
124
|
expect(output.files['/test/test.txt']).toEqual('/test')
|
|
160
125
|
})
|
|
161
126
|
|
|
162
127
|
it('should handle integrations', async () => {
|
|
163
128
|
const { environment, output } = createMemoryEnvironment()
|
|
164
|
-
const templateFile = createTemplateFile(
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
],
|
|
181
|
-
},
|
|
182
|
-
'/test',
|
|
183
|
-
)
|
|
129
|
+
const templateFile = createTemplateFile(environment, {
|
|
130
|
+
...simpleOptions,
|
|
131
|
+
chosenAddOns: [
|
|
132
|
+
{
|
|
133
|
+
id: 'test',
|
|
134
|
+
name: 'Test',
|
|
135
|
+
integrations: [
|
|
136
|
+
{
|
|
137
|
+
type: 'header-user',
|
|
138
|
+
path: '/test',
|
|
139
|
+
jsName: 'test',
|
|
140
|
+
} as Integration,
|
|
141
|
+
],
|
|
142
|
+
} as AddOn,
|
|
143
|
+
],
|
|
144
|
+
})
|
|
184
145
|
|
|
185
146
|
environment.startRun()
|
|
186
147
|
await templateFile(
|
|
@@ -194,7 +155,7 @@ describe('createTemplateFile', () => {
|
|
|
194
155
|
|
|
195
156
|
it('should handle package manager', async () => {
|
|
196
157
|
const { environment, output } = createMemoryEnvironment()
|
|
197
|
-
const templateFile = createTemplateFile(environment, simpleOptions
|
|
158
|
+
const templateFile = createTemplateFile(environment, simpleOptions)
|
|
198
159
|
environment.startRun()
|
|
199
160
|
await templateFile(
|
|
200
161
|
'./foo.txt.ejs',
|
package/vitest.config.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defineConfig } from 'vitest/config'
|
|
2
|
+
import path from 'node:path'
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
test: {
|
|
6
|
+
setupFiles: ['./tests/setupVitest.js'],
|
|
7
|
+
deps: {
|
|
8
|
+
moduleDirectories: ['node_modules', path.resolve('../../packages')],
|
|
9
|
+
},
|
|
10
|
+
coverage: {
|
|
11
|
+
exclude: [
|
|
12
|
+
'node_modules',
|
|
13
|
+
'dist',
|
|
14
|
+
'build',
|
|
15
|
+
'tests/**',
|
|
16
|
+
'**/types.ts',
|
|
17
|
+
'vitest.config.ts',
|
|
18
|
+
],
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
})
|