@tanstack/create 0.61.4 → 0.61.6
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/CHANGELOG.md +27 -0
- package/dist/create-app.js +64 -3
- package/dist/custom-add-ons/add-on.js +59 -1
- package/dist/custom-add-ons/starter.js +5 -1
- package/dist/frameworks/react/add-ons/clerk/info.json +9 -0
- package/dist/frameworks/react/add-ons/convex/info.json +16 -0
- package/dist/frameworks/react/add-ons/strapi/README.md +158 -8
- package/dist/frameworks/react/add-ons/strapi/assets/_dot_env.local.append +1 -1
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/blocks/block-renderer.tsx +55 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/blocks/index.ts +14 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/blocks/media.tsx +27 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/blocks/quote.tsx +19 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/blocks/rich-text.tsx +11 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/blocks/slider.tsx +28 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/markdown-content.tsx +74 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/pagination.tsx +120 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/search.tsx +35 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/components/strapi-image.tsx +47 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/data/loaders/articles.ts +106 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/data/loaders/index.ts +28 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/data/strapi-sdk.ts +9 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/lib/strapi-utils.ts +25 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.$articleId.tsx +170 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.tsx +269 -43
- package/dist/frameworks/react/add-ons/strapi/assets/src/types/strapi.ts +90 -0
- package/dist/frameworks/react/add-ons/strapi/info.json +3 -3
- package/dist/frameworks/react/add-ons/strapi/package.json +5 -2
- package/dist/frameworks.js +1 -0
- package/dist/index.js +1 -1
- package/dist/types/custom-add-ons/add-on.d.ts +9 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/types.d.ts +192 -0
- package/dist/types.js +10 -0
- package/package.json +1 -1
- package/src/create-app.ts +77 -3
- package/src/custom-add-ons/add-on.ts +72 -1
- package/src/custom-add-ons/starter.ts +7 -1
- package/src/frameworks/react/add-ons/clerk/info.json +9 -0
- package/src/frameworks/react/add-ons/convex/info.json +16 -0
- package/src/frameworks/react/add-ons/strapi/README.md +158 -8
- package/src/frameworks/react/add-ons/strapi/assets/_dot_env.local.append +1 -1
- package/src/frameworks/react/add-ons/strapi/assets/src/components/blocks/block-renderer.tsx +55 -0
- package/src/frameworks/react/add-ons/strapi/assets/src/components/blocks/index.ts +14 -0
- package/src/frameworks/react/add-ons/strapi/assets/src/components/blocks/media.tsx +27 -0
- package/src/frameworks/react/add-ons/strapi/assets/src/components/blocks/quote.tsx +19 -0
- package/src/frameworks/react/add-ons/strapi/assets/src/components/blocks/rich-text.tsx +11 -0
- package/src/frameworks/react/add-ons/strapi/assets/src/components/blocks/slider.tsx +28 -0
- package/src/frameworks/react/add-ons/strapi/assets/src/components/markdown-content.tsx +74 -0
- package/src/frameworks/react/add-ons/strapi/assets/src/components/pagination.tsx +120 -0
- package/src/frameworks/react/add-ons/strapi/assets/src/components/search.tsx +35 -0
- package/src/frameworks/react/add-ons/strapi/assets/src/components/strapi-image.tsx +47 -0
- package/src/frameworks/react/add-ons/strapi/assets/src/data/loaders/articles.ts +106 -0
- package/src/frameworks/react/add-ons/strapi/assets/src/data/loaders/index.ts +28 -0
- package/src/frameworks/react/add-ons/strapi/assets/src/data/strapi-sdk.ts +9 -0
- package/src/frameworks/react/add-ons/strapi/assets/src/lib/strapi-utils.ts +25 -0
- package/src/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.$articleId.tsx +170 -0
- package/src/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi.tsx +269 -43
- package/src/frameworks/react/add-ons/strapi/assets/src/types/strapi.ts +90 -0
- package/src/frameworks/react/add-ons/strapi/info.json +3 -3
- package/src/frameworks/react/add-ons/strapi/package.json +5 -2
- package/src/frameworks.ts +1 -0
- package/src/index.ts +1 -1
- package/src/types.ts +14 -0
- package/tests/custom-add-ons/starter.test.ts +29 -0
- package/dist/frameworks/react/add-ons/strapi/assets/src/lib/strapiClient.ts +0 -7
- package/dist/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi_.$articleId.tsx +0 -78
- package/src/frameworks/react/add-ons/strapi/assets/src/lib/strapiClient.ts +0 -7
- package/src/frameworks/react/add-ons/strapi/assets/src/routes/demo/strapi_.$articleId.tsx +0 -78
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strapi type definitions
|
|
3
|
+
* These types match the Strapi Cloud Template Blog schema
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { Block } from "@/components/blocks";
|
|
7
|
+
|
|
8
|
+
// Base image type from Strapi media library
|
|
9
|
+
export type TImage = {
|
|
10
|
+
id: number;
|
|
11
|
+
documentId: string;
|
|
12
|
+
alternativeText: string | null;
|
|
13
|
+
url: string;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
// Author content type
|
|
17
|
+
export type TAuthor = {
|
|
18
|
+
id: number;
|
|
19
|
+
documentId: string;
|
|
20
|
+
name: string;
|
|
21
|
+
email?: string;
|
|
22
|
+
createdAt: string;
|
|
23
|
+
updatedAt: string;
|
|
24
|
+
publishedAt: string;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// Category content type
|
|
28
|
+
export type TCategory = {
|
|
29
|
+
id: number;
|
|
30
|
+
documentId: string;
|
|
31
|
+
name: string;
|
|
32
|
+
slug: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
createdAt: string;
|
|
35
|
+
updatedAt: string;
|
|
36
|
+
publishedAt: string;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// Article content type
|
|
40
|
+
export type TArticle = {
|
|
41
|
+
id: number;
|
|
42
|
+
documentId: string;
|
|
43
|
+
title: string;
|
|
44
|
+
description: string;
|
|
45
|
+
slug: string;
|
|
46
|
+
cover?: TImage;
|
|
47
|
+
author?: TAuthor;
|
|
48
|
+
category?: TCategory;
|
|
49
|
+
blocks?: Array<Block>;
|
|
50
|
+
createdAt: string;
|
|
51
|
+
updatedAt: string;
|
|
52
|
+
publishedAt: string;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// Strapi response wrappers
|
|
56
|
+
export type TStrapiResponseSingle<T> = {
|
|
57
|
+
data: T;
|
|
58
|
+
meta?: {
|
|
59
|
+
pagination?: TStrapiPagination;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export type TStrapiResponseCollection<T> = {
|
|
64
|
+
data: Array<T>;
|
|
65
|
+
meta?: {
|
|
66
|
+
pagination?: TStrapiPagination;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export type TStrapiPagination = {
|
|
71
|
+
page: number;
|
|
72
|
+
pageSize: number;
|
|
73
|
+
pageCount: number;
|
|
74
|
+
total: number;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export type TStrapiError = {
|
|
78
|
+
status: number;
|
|
79
|
+
name: string;
|
|
80
|
+
message: string;
|
|
81
|
+
details?: Record<string, Array<string>>;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export type TStrapiResponse<T = null> = {
|
|
85
|
+
data?: T;
|
|
86
|
+
error?: TStrapiError;
|
|
87
|
+
meta?: {
|
|
88
|
+
pagination?: TStrapiPagination;
|
|
89
|
+
};
|
|
90
|
+
};
|
package/src/frameworks.ts
CHANGED
package/src/index.ts
CHANGED
|
@@ -61,7 +61,7 @@ export {
|
|
|
61
61
|
export { formatCommand, handleSpecialURL } from './utils.js'
|
|
62
62
|
|
|
63
63
|
export { initStarter, compileStarter } from './custom-add-ons/starter.js'
|
|
64
|
-
export { initAddOn, compileAddOn } from './custom-add-ons/add-on.js'
|
|
64
|
+
export { initAddOn, compileAddOn, devAddOn } from './custom-add-ons/add-on.js'
|
|
65
65
|
export {
|
|
66
66
|
createAppOptionsFromPersisted,
|
|
67
67
|
createSerializedOptionsFromPersisted,
|
package/src/types.ts
CHANGED
|
@@ -92,6 +92,18 @@ export const AddOnBaseSchema = z.object({
|
|
|
92
92
|
createSpecialSteps: z.array(z.string()).optional(),
|
|
93
93
|
postInitSpecialSteps: z.array(z.string()).optional(),
|
|
94
94
|
options: AddOnOptionsSchema.optional(),
|
|
95
|
+
envVars: z
|
|
96
|
+
.array(
|
|
97
|
+
z.object({
|
|
98
|
+
name: z.string(),
|
|
99
|
+
description: z.string().optional(),
|
|
100
|
+
required: z.boolean().optional(),
|
|
101
|
+
default: z.string().optional(),
|
|
102
|
+
secret: z.boolean().optional(),
|
|
103
|
+
file: z.enum(['.env', '.env.local']).optional(),
|
|
104
|
+
}),
|
|
105
|
+
)
|
|
106
|
+
.optional(),
|
|
95
107
|
default: z.boolean().optional(),
|
|
96
108
|
})
|
|
97
109
|
|
|
@@ -207,6 +219,8 @@ export interface Options {
|
|
|
207
219
|
addOnOptions: Record<string, Record<string, any>>
|
|
208
220
|
starter?: Starter | undefined
|
|
209
221
|
routerOnly?: boolean
|
|
222
|
+
includeExamples?: boolean
|
|
223
|
+
envVarValues?: Record<string, string>
|
|
210
224
|
}
|
|
211
225
|
|
|
212
226
|
export type SerializedOptions = Omit<
|
|
@@ -55,4 +55,33 @@ describe('readOrGenerateStarterInfo', () => {
|
|
|
55
55
|
})
|
|
56
56
|
expect(starterInfo.name).toEqual('test-starter')
|
|
57
57
|
})
|
|
58
|
+
|
|
59
|
+
it('should backfill version when missing', async () => {
|
|
60
|
+
fs.mkdirSync(process.cwd(), { recursive: true })
|
|
61
|
+
fs.writeFileSync(
|
|
62
|
+
'starter-info.json',
|
|
63
|
+
JSON.stringify({
|
|
64
|
+
framework: 'test',
|
|
65
|
+
chosenAddOns: [],
|
|
66
|
+
starter: undefined,
|
|
67
|
+
name: 'test-starter',
|
|
68
|
+
mode: 'code-router',
|
|
69
|
+
typescript: true,
|
|
70
|
+
tailwind: true,
|
|
71
|
+
git: true,
|
|
72
|
+
}),
|
|
73
|
+
)
|
|
74
|
+
const starterInfo = await readOrGenerateStarterInfo({
|
|
75
|
+
framework: 'test',
|
|
76
|
+
version: 1,
|
|
77
|
+
chosenAddOns: [],
|
|
78
|
+
starter: undefined,
|
|
79
|
+
projectName: 'test',
|
|
80
|
+
mode: 'code-router',
|
|
81
|
+
typescript: true,
|
|
82
|
+
tailwind: true,
|
|
83
|
+
git: true,
|
|
84
|
+
})
|
|
85
|
+
expect(starterInfo.version).toEqual('0.0.1')
|
|
86
|
+
})
|
|
58
87
|
})
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { articles } from '#/lib/strapiClient'
|
|
2
|
-
import { createFileRoute, Link } from '@tanstack/react-router'
|
|
3
|
-
|
|
4
|
-
export const Route = createFileRoute('/demo/strapi_/$articleId')({
|
|
5
|
-
component: RouteComponent,
|
|
6
|
-
loader: async ({ params }) => {
|
|
7
|
-
const { data: article } = await articles.findOne(params.articleId)
|
|
8
|
-
return article
|
|
9
|
-
},
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
function RouteComponent() {
|
|
13
|
-
const article = Route.useLoaderData()
|
|
14
|
-
|
|
15
|
-
return (
|
|
16
|
-
<div className="min-h-screen bg-gradient-to-b from-slate-900 via-slate-800 to-slate-900 p-8">
|
|
17
|
-
<div className="max-w-4xl mx-auto">
|
|
18
|
-
<Link
|
|
19
|
-
to="/demo/strapi"
|
|
20
|
-
className="inline-flex items-center text-cyan-400 hover:text-cyan-300 mb-6 transition-colors"
|
|
21
|
-
>
|
|
22
|
-
<svg
|
|
23
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
24
|
-
className="h-5 w-5 mr-2"
|
|
25
|
-
viewBox="0 0 20 20"
|
|
26
|
-
fill="currentColor"
|
|
27
|
-
>
|
|
28
|
-
<path
|
|
29
|
-
fillRule="evenodd"
|
|
30
|
-
d="M9.707 16.707a1 1 0 01-1.414 0l-6-6a1 1 0 010-1.414l6-6a1 1 0 011.414 1.414L5.414 9H17a1 1 0 110 2H5.414l4.293 4.293a1 1 0 010 1.414z"
|
|
31
|
-
clipRule="evenodd"
|
|
32
|
-
/>
|
|
33
|
-
</svg>
|
|
34
|
-
Back to Articles
|
|
35
|
-
</Link>
|
|
36
|
-
|
|
37
|
-
<article className="bg-slate-800/50 backdrop-blur-sm border border-slate-700 rounded-xl p-8">
|
|
38
|
-
<h1 className="text-4xl font-bold text-white mb-4">
|
|
39
|
-
{article?.title || 'Untitled'}
|
|
40
|
-
</h1>
|
|
41
|
-
|
|
42
|
-
{article?.createdAt && (
|
|
43
|
-
<p className="text-sm text-cyan-400/70 mb-6">
|
|
44
|
-
Published on{' '}
|
|
45
|
-
{new Date(article?.createdAt).toLocaleDateString('en-US', {
|
|
46
|
-
year: 'numeric',
|
|
47
|
-
month: 'long',
|
|
48
|
-
day: 'numeric',
|
|
49
|
-
})}
|
|
50
|
-
</p>
|
|
51
|
-
)}
|
|
52
|
-
|
|
53
|
-
{article?.description && (
|
|
54
|
-
<div className="mb-6">
|
|
55
|
-
<h2 className="text-xl font-semibold text-gray-300 mb-3">
|
|
56
|
-
Description
|
|
57
|
-
</h2>
|
|
58
|
-
<p className="text-gray-400 leading-relaxed">
|
|
59
|
-
{article?.description}
|
|
60
|
-
</p>
|
|
61
|
-
</div>
|
|
62
|
-
)}
|
|
63
|
-
|
|
64
|
-
{article?.content && (
|
|
65
|
-
<div>
|
|
66
|
-
<h2 className="text-xl font-semibold text-gray-300 mb-3">
|
|
67
|
-
Content
|
|
68
|
-
</h2>
|
|
69
|
-
<div className="text-gray-400 leading-relaxed whitespace-pre-wrap">
|
|
70
|
-
{article?.content}
|
|
71
|
-
</div>
|
|
72
|
-
</div>
|
|
73
|
-
)}
|
|
74
|
-
</article>
|
|
75
|
-
</div>
|
|
76
|
-
</div>
|
|
77
|
-
)
|
|
78
|
-
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { articles } from '#/lib/strapiClient'
|
|
2
|
-
import { createFileRoute, Link } from '@tanstack/react-router'
|
|
3
|
-
|
|
4
|
-
export const Route = createFileRoute('/demo/strapi_/$articleId')({
|
|
5
|
-
component: RouteComponent,
|
|
6
|
-
loader: async ({ params }) => {
|
|
7
|
-
const { data: article } = await articles.findOne(params.articleId)
|
|
8
|
-
return article
|
|
9
|
-
},
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
function RouteComponent() {
|
|
13
|
-
const article = Route.useLoaderData()
|
|
14
|
-
|
|
15
|
-
return (
|
|
16
|
-
<div className="min-h-screen bg-gradient-to-b from-slate-900 via-slate-800 to-slate-900 p-8">
|
|
17
|
-
<div className="max-w-4xl mx-auto">
|
|
18
|
-
<Link
|
|
19
|
-
to="/demo/strapi"
|
|
20
|
-
className="inline-flex items-center text-cyan-400 hover:text-cyan-300 mb-6 transition-colors"
|
|
21
|
-
>
|
|
22
|
-
<svg
|
|
23
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
24
|
-
className="h-5 w-5 mr-2"
|
|
25
|
-
viewBox="0 0 20 20"
|
|
26
|
-
fill="currentColor"
|
|
27
|
-
>
|
|
28
|
-
<path
|
|
29
|
-
fillRule="evenodd"
|
|
30
|
-
d="M9.707 16.707a1 1 0 01-1.414 0l-6-6a1 1 0 010-1.414l6-6a1 1 0 011.414 1.414L5.414 9H17a1 1 0 110 2H5.414l4.293 4.293a1 1 0 010 1.414z"
|
|
31
|
-
clipRule="evenodd"
|
|
32
|
-
/>
|
|
33
|
-
</svg>
|
|
34
|
-
Back to Articles
|
|
35
|
-
</Link>
|
|
36
|
-
|
|
37
|
-
<article className="bg-slate-800/50 backdrop-blur-sm border border-slate-700 rounded-xl p-8">
|
|
38
|
-
<h1 className="text-4xl font-bold text-white mb-4">
|
|
39
|
-
{article?.title || 'Untitled'}
|
|
40
|
-
</h1>
|
|
41
|
-
|
|
42
|
-
{article?.createdAt && (
|
|
43
|
-
<p className="text-sm text-cyan-400/70 mb-6">
|
|
44
|
-
Published on{' '}
|
|
45
|
-
{new Date(article?.createdAt).toLocaleDateString('en-US', {
|
|
46
|
-
year: 'numeric',
|
|
47
|
-
month: 'long',
|
|
48
|
-
day: 'numeric',
|
|
49
|
-
})}
|
|
50
|
-
</p>
|
|
51
|
-
)}
|
|
52
|
-
|
|
53
|
-
{article?.description && (
|
|
54
|
-
<div className="mb-6">
|
|
55
|
-
<h2 className="text-xl font-semibold text-gray-300 mb-3">
|
|
56
|
-
Description
|
|
57
|
-
</h2>
|
|
58
|
-
<p className="text-gray-400 leading-relaxed">
|
|
59
|
-
{article?.description}
|
|
60
|
-
</p>
|
|
61
|
-
</div>
|
|
62
|
-
)}
|
|
63
|
-
|
|
64
|
-
{article?.content && (
|
|
65
|
-
<div>
|
|
66
|
-
<h2 className="text-xl font-semibold text-gray-300 mb-3">
|
|
67
|
-
Content
|
|
68
|
-
</h2>
|
|
69
|
-
<div className="text-gray-400 leading-relaxed whitespace-pre-wrap">
|
|
70
|
-
{article?.content}
|
|
71
|
-
</div>
|
|
72
|
-
</div>
|
|
73
|
-
)}
|
|
74
|
-
</article>
|
|
75
|
-
</div>
|
|
76
|
-
</div>
|
|
77
|
-
)
|
|
78
|
-
}
|