@tanstack/cta-engine 0.14.4 → 0.15.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.
- package/dist/create-app.js +1 -1
- package/dist/registry.js +28 -5
- package/dist/types/registry.d.ts +71 -10
- package/package.json +1 -1
- package/src/create-app.ts +1 -1
- package/src/registry.ts +35 -23
package/dist/create-app.js
CHANGED
|
@@ -171,7 +171,7 @@ Use the following commands to start your app:
|
|
|
171
171
|
% cd ${options.projectName}
|
|
172
172
|
% ${formatCommand(getPackageManagerScriptCommand(options.packageManager, ['dev']))}
|
|
173
173
|
|
|
174
|
-
|
|
174
|
+
Please check the README.md for more information on testing, styling, adding routes, etc.${errorStatement}`);
|
|
175
175
|
}
|
|
176
176
|
export async function createApp(environment, options) {
|
|
177
177
|
environment.startRun();
|
package/dist/registry.js
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
1
2
|
import { loadRemoteAddOn } from './custom-add-ons/add-on.js';
|
|
2
3
|
import { loadStarter } from './custom-add-ons/starter.js';
|
|
4
|
+
const registrySchema = z.object({
|
|
5
|
+
starters: z
|
|
6
|
+
.array(z.object({
|
|
7
|
+
name: z.string(),
|
|
8
|
+
description: z.string(),
|
|
9
|
+
url: z.string(),
|
|
10
|
+
banner: z.string().optional(),
|
|
11
|
+
mode: z.enum(['code-router', 'file-router']),
|
|
12
|
+
framework: z.string(),
|
|
13
|
+
}))
|
|
14
|
+
.optional(),
|
|
15
|
+
'add-ons': z
|
|
16
|
+
.array(z.object({
|
|
17
|
+
name: z.string(),
|
|
18
|
+
description: z.string(),
|
|
19
|
+
url: z.string(),
|
|
20
|
+
modes: z.array(z.enum(['code-router', 'file-router'])),
|
|
21
|
+
framework: z.string(),
|
|
22
|
+
}))
|
|
23
|
+
.optional(),
|
|
24
|
+
});
|
|
3
25
|
function absolutizeUrl(originalUrl, relativeUrl) {
|
|
4
26
|
if (relativeUrl.startsWith('http') || relativeUrl.startsWith('https')) {
|
|
5
27
|
return relativeUrl;
|
|
@@ -11,21 +33,22 @@ export async function getRawRegistry(registryUrl) {
|
|
|
11
33
|
const regUrl = registryUrl || process.env.CTA_REGISTRY;
|
|
12
34
|
if (regUrl) {
|
|
13
35
|
const registry = (await fetch(regUrl).then((res) => res.json()));
|
|
14
|
-
|
|
36
|
+
const parsedRegistry = registrySchema.parse(registry);
|
|
37
|
+
for (const addOn of parsedRegistry['add-ons'] || []) {
|
|
15
38
|
addOn.url = absolutizeUrl(regUrl, addOn.url);
|
|
16
39
|
}
|
|
17
|
-
for (const starter of
|
|
40
|
+
for (const starter of parsedRegistry.starters || []) {
|
|
18
41
|
starter.url = absolutizeUrl(regUrl, starter.url);
|
|
19
42
|
if (starter.banner) {
|
|
20
43
|
starter.banner = absolutizeUrl(regUrl, starter.banner);
|
|
21
44
|
}
|
|
22
45
|
}
|
|
23
|
-
return
|
|
46
|
+
return parsedRegistry;
|
|
24
47
|
}
|
|
25
48
|
}
|
|
26
49
|
async function getAddOns(registry) {
|
|
27
50
|
const addOns = [];
|
|
28
|
-
for (const addOnInfo of registry['add-ons']) {
|
|
51
|
+
for (const addOnInfo of registry['add-ons'] || []) {
|
|
29
52
|
const addOn = await loadRemoteAddOn(addOnInfo.url);
|
|
30
53
|
addOns.push(addOn);
|
|
31
54
|
}
|
|
@@ -37,7 +60,7 @@ export async function getRegistryAddOns(registryUrl) {
|
|
|
37
60
|
}
|
|
38
61
|
async function getStarters(registry) {
|
|
39
62
|
const starters = [];
|
|
40
|
-
for (const starterInfo of registry.starters) {
|
|
63
|
+
for (const starterInfo of registry.starters || []) {
|
|
41
64
|
const starter = await loadStarter(starterInfo.url);
|
|
42
65
|
starters.push(starter);
|
|
43
66
|
}
|
package/dist/types/registry.d.ts
CHANGED
|
@@ -1,21 +1,81 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { AddOn, Starter } from './types';
|
|
3
|
+
declare const registrySchema: z.ZodObject<{
|
|
4
|
+
starters: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
5
|
+
name: z.ZodString;
|
|
6
|
+
description: z.ZodString;
|
|
7
|
+
url: z.ZodString;
|
|
8
|
+
banner: z.ZodOptional<z.ZodString>;
|
|
9
|
+
mode: z.ZodEnum<["code-router", "file-router"]>;
|
|
10
|
+
framework: z.ZodString;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
4
12
|
name: string;
|
|
5
13
|
description: string;
|
|
6
14
|
url: string;
|
|
7
|
-
banner?: string;
|
|
8
|
-
mode: Mode;
|
|
9
15
|
framework: string;
|
|
10
|
-
|
|
11
|
-
|
|
16
|
+
mode: "code-router" | "file-router";
|
|
17
|
+
banner?: string | undefined;
|
|
18
|
+
}, {
|
|
12
19
|
name: string;
|
|
13
20
|
description: string;
|
|
14
21
|
url: string;
|
|
15
|
-
modes: Array<Mode>;
|
|
16
22
|
framework: string;
|
|
17
|
-
|
|
18
|
-
|
|
23
|
+
mode: "code-router" | "file-router";
|
|
24
|
+
banner?: string | undefined;
|
|
25
|
+
}>, "many">>;
|
|
26
|
+
'add-ons': z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
27
|
+
name: z.ZodString;
|
|
28
|
+
description: z.ZodString;
|
|
29
|
+
url: z.ZodString;
|
|
30
|
+
modes: z.ZodArray<z.ZodEnum<["code-router", "file-router"]>, "many">;
|
|
31
|
+
framework: z.ZodString;
|
|
32
|
+
}, "strip", z.ZodTypeAny, {
|
|
33
|
+
name: string;
|
|
34
|
+
description: string;
|
|
35
|
+
url: string;
|
|
36
|
+
framework: string;
|
|
37
|
+
modes: ("code-router" | "file-router")[];
|
|
38
|
+
}, {
|
|
39
|
+
name: string;
|
|
40
|
+
description: string;
|
|
41
|
+
url: string;
|
|
42
|
+
framework: string;
|
|
43
|
+
modes: ("code-router" | "file-router")[];
|
|
44
|
+
}>, "many">>;
|
|
45
|
+
}, "strip", z.ZodTypeAny, {
|
|
46
|
+
starters?: {
|
|
47
|
+
name: string;
|
|
48
|
+
description: string;
|
|
49
|
+
url: string;
|
|
50
|
+
framework: string;
|
|
51
|
+
mode: "code-router" | "file-router";
|
|
52
|
+
banner?: string | undefined;
|
|
53
|
+
}[] | undefined;
|
|
54
|
+
'add-ons'?: {
|
|
55
|
+
name: string;
|
|
56
|
+
description: string;
|
|
57
|
+
url: string;
|
|
58
|
+
framework: string;
|
|
59
|
+
modes: ("code-router" | "file-router")[];
|
|
60
|
+
}[] | undefined;
|
|
61
|
+
}, {
|
|
62
|
+
starters?: {
|
|
63
|
+
name: string;
|
|
64
|
+
description: string;
|
|
65
|
+
url: string;
|
|
66
|
+
framework: string;
|
|
67
|
+
mode: "code-router" | "file-router";
|
|
68
|
+
banner?: string | undefined;
|
|
69
|
+
}[] | undefined;
|
|
70
|
+
'add-ons'?: {
|
|
71
|
+
name: string;
|
|
72
|
+
description: string;
|
|
73
|
+
url: string;
|
|
74
|
+
framework: string;
|
|
75
|
+
modes: ("code-router" | "file-router")[];
|
|
76
|
+
}[] | undefined;
|
|
77
|
+
}>;
|
|
78
|
+
export type Registry = z.infer<typeof registrySchema>;
|
|
19
79
|
export declare function getRawRegistry(registryUrl?: string): Promise<Registry | undefined>;
|
|
20
80
|
export declare function getRegistryAddOns(registryUrl?: string): Promise<Array<AddOn>>;
|
|
21
81
|
export declare function getRegistryStarters(registryUrl?: string): Promise<Array<Starter>>;
|
|
@@ -23,3 +83,4 @@ export declare function getRegistry(registryUrl?: string): Promise<{
|
|
|
23
83
|
addOns: Array<AddOn>;
|
|
24
84
|
starters: Array<Starter>;
|
|
25
85
|
}>;
|
|
86
|
+
export {};
|
package/package.json
CHANGED
package/src/create-app.ts
CHANGED
|
@@ -233,7 +233,7 @@ Use the following commands to start your app:
|
|
|
233
233
|
getPackageManagerScriptCommand(options.packageManager, ['dev']),
|
|
234
234
|
)}
|
|
235
235
|
|
|
236
|
-
|
|
236
|
+
Please check the README.md for more information on testing, styling, adding routes, etc.${errorStatement}`,
|
|
237
237
|
)
|
|
238
238
|
}
|
|
239
239
|
|
package/src/registry.ts
CHANGED
|
@@ -1,25 +1,36 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
1
2
|
import { loadRemoteAddOn } from './custom-add-ons/add-on.js'
|
|
2
3
|
import { loadStarter } from './custom-add-ons/starter.js'
|
|
3
4
|
|
|
4
|
-
import type { AddOn,
|
|
5
|
+
import type { AddOn, Starter } from './types'
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
starters:
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
7
|
+
const registrySchema = z.object({
|
|
8
|
+
starters: z
|
|
9
|
+
.array(
|
|
10
|
+
z.object({
|
|
11
|
+
name: z.string(),
|
|
12
|
+
description: z.string(),
|
|
13
|
+
url: z.string(),
|
|
14
|
+
banner: z.string().optional(),
|
|
15
|
+
mode: z.enum(['code-router', 'file-router']),
|
|
16
|
+
framework: z.string(),
|
|
17
|
+
}),
|
|
18
|
+
)
|
|
19
|
+
.optional(),
|
|
20
|
+
'add-ons': z
|
|
21
|
+
.array(
|
|
22
|
+
z.object({
|
|
23
|
+
name: z.string(),
|
|
24
|
+
description: z.string(),
|
|
25
|
+
url: z.string(),
|
|
26
|
+
modes: z.array(z.enum(['code-router', 'file-router'])),
|
|
27
|
+
framework: z.string(),
|
|
28
|
+
}),
|
|
29
|
+
)
|
|
30
|
+
.optional(),
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
export type Registry = z.infer<typeof registrySchema>
|
|
23
34
|
|
|
24
35
|
function absolutizeUrl(originalUrl: string, relativeUrl: string) {
|
|
25
36
|
if (relativeUrl.startsWith('http') || relativeUrl.startsWith('https')) {
|
|
@@ -35,22 +46,23 @@ export async function getRawRegistry(
|
|
|
35
46
|
const regUrl = registryUrl || process.env.CTA_REGISTRY
|
|
36
47
|
if (regUrl) {
|
|
37
48
|
const registry = (await fetch(regUrl).then((res) => res.json())) as Registry
|
|
38
|
-
|
|
49
|
+
const parsedRegistry = registrySchema.parse(registry)
|
|
50
|
+
for (const addOn of parsedRegistry['add-ons'] || []) {
|
|
39
51
|
addOn.url = absolutizeUrl(regUrl, addOn.url)
|
|
40
52
|
}
|
|
41
|
-
for (const starter of
|
|
53
|
+
for (const starter of parsedRegistry.starters || []) {
|
|
42
54
|
starter.url = absolutizeUrl(regUrl, starter.url)
|
|
43
55
|
if (starter.banner) {
|
|
44
56
|
starter.banner = absolutizeUrl(regUrl, starter.banner)
|
|
45
57
|
}
|
|
46
58
|
}
|
|
47
|
-
return
|
|
59
|
+
return parsedRegistry
|
|
48
60
|
}
|
|
49
61
|
}
|
|
50
62
|
|
|
51
63
|
async function getAddOns(registry: Registry): Promise<Array<AddOn>> {
|
|
52
64
|
const addOns: Array<AddOn> = []
|
|
53
|
-
for (const addOnInfo of registry['add-ons']) {
|
|
65
|
+
for (const addOnInfo of registry['add-ons'] || []) {
|
|
54
66
|
const addOn = await loadRemoteAddOn(addOnInfo.url)
|
|
55
67
|
addOns.push(addOn)
|
|
56
68
|
}
|
|
@@ -66,7 +78,7 @@ export async function getRegistryAddOns(
|
|
|
66
78
|
|
|
67
79
|
async function getStarters(registry: Registry): Promise<Array<Starter>> {
|
|
68
80
|
const starters: Array<Starter> = []
|
|
69
|
-
for (const starterInfo of registry.starters) {
|
|
81
|
+
for (const starterInfo of registry.starters || []) {
|
|
70
82
|
const starter = await loadStarter(starterInfo.url)
|
|
71
83
|
starters.push(starter)
|
|
72
84
|
}
|