convex-cms 0.0.5-alpha.3 → 0.0.5-alpha.5
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/README.md +47 -12
- package/admin/src/components/BulkActionBar.tsx +4 -4
- package/admin/src/components/ContentEntryEditor.tsx +8 -28
- package/admin/src/components/ContentTypeFormModal.tsx +2 -2
- package/admin/src/components/Sidebar.tsx +150 -58
- package/admin/src/components/TaxonomyEditor.tsx +2 -2
- package/admin/src/components/TermTree.tsx +5 -5
- package/admin/src/components/VersionCompare.tsx +1 -1
- package/admin/src/components/VersionHistory.tsx +2 -2
- package/admin/src/components/fields/CategoryField.tsx +1 -1
- package/admin/src/components/fields/MediaField.tsx +4 -4
- package/admin/src/components/fields/ReferenceField.tsx +4 -4
- package/admin/src/components/fields/TagField.tsx +3 -3
- package/admin/src/components/filters/TaxonomyFilter.tsx +2 -2
- package/admin/src/components/media/MediaAssetEditDialog.tsx +2 -2
- package/admin/src/components/media/MediaFolderEditDialog.tsx +1 -1
- package/admin/src/components/media/MediaMoveModal.tsx +2 -2
- package/admin/src/components/media/MediaTaxonomyPicker.tsx +4 -4
- package/admin/src/components/ui/collapsible.tsx +7 -0
- package/admin/src/contexts/SettingsConfigContext.tsx +2 -2
- package/admin/src/embed/components/EmbedSidebar.tsx +163 -68
- package/admin/src/pages/MediaPage.tsx +1102 -8
- package/admin/src/pages/SettingsPage.tsx +171 -108
- package/admin/src/routes/entries/$entryId.tsx +2 -2
- package/admin/src/routes/entries/new.$contentTypeId.tsx +1 -1
- package/admin/src/routes/entries/type/$contentTypeId.tsx +6 -6
- package/admin/src/routes/media.tsx +23 -1094
- package/admin-dist/nitro.json +1 -1
- package/admin-dist/public/assets/{CmsEmptyState-CkqBIab3.js → CmsEmptyState-Do_erIgn.js} +1 -1
- package/admin-dist/public/assets/{CmsPageHeader-CUtl5MMG.js → CmsPageHeader-qDwPGi48.js} +1 -1
- package/admin-dist/public/assets/{CmsStatusBadge-CUYFgEe-.js → CmsStatusBadge-Dd9uToHE.js} +1 -1
- package/admin-dist/public/assets/{CmsSurface-CsJfAVa3.js → CmsSurface-DBy5Lumx.js} +1 -1
- package/admin-dist/public/assets/{CmsToolbar-CnfbcxeP.js → CmsToolbar-D1-Y-7SK.js} +1 -1
- package/admin-dist/public/assets/ContentEntryEditor-CWBiIx52.js +4 -0
- package/admin-dist/public/assets/{TaxonomyFilter-CWCxC5HZ.js → TaxonomyFilter-CdYQawxb.js} +1 -1
- package/admin-dist/public/assets/_contentTypeId-D9VMP6Gs.js +1 -0
- package/admin-dist/public/assets/_entryId-2FlCfqE7.js +1 -0
- package/admin-dist/public/assets/{alert-CF1BSzGR.js → alert-GxZx0y5c.js} +1 -1
- package/admin-dist/public/assets/{badge-CmuOIVKp.js → badge-BAlGIjop.js} +1 -1
- package/admin-dist/public/assets/{circle-check-big-BKDVG6DU.js → circle-check-big-CpLxAvEj.js} +1 -1
- package/admin-dist/public/assets/{command-XJxnF2Sd.js → command-di7XCqcv.js} +1 -1
- package/admin-dist/public/assets/content-D8zELsDG.js +1 -0
- package/admin-dist/public/assets/{content-types-CrNEm8Hf.js → content-types-BmzD0krT.js} +2 -2
- package/admin-dist/public/assets/globals-BvFfH-v9.css +1 -0
- package/admin-dist/public/assets/{index-C7xOwudI.js → index-zqfj4T_v.js} +1 -1
- package/admin-dist/public/assets/{label-CHCnXeBk.js → label-B6PPtKR5.js} +1 -1
- package/admin-dist/public/assets/{link-2-Bb34judH.js → link-2-W2fVnVOf.js} +1 -1
- package/admin-dist/public/assets/{list-9Pzt48ld.js → list-F8O0lZXC.js} +1 -1
- package/admin-dist/public/assets/main-dZT72bAG.js +97 -0
- package/admin-dist/public/assets/media-CETueFbV.js +1 -0
- package/admin-dist/public/assets/new._contentTypeId-BV2-TyyR.js +1 -0
- package/admin-dist/public/assets/{plus-Ceef7DHk.js → plus-AABQIF0N.js} +1 -1
- package/admin-dist/public/assets/{rotate-ccw-7k7-4VUq.js → rotate-ccw-BZpZtw0N.js} +1 -1
- package/admin-dist/public/assets/{scroll-area-CC6wujnp.js → scroll-area-CDfk-zrz.js} +1 -1
- package/admin-dist/public/assets/{search-DwoUV2pv.js → search-BvgYr-c9.js} +1 -1
- package/admin-dist/public/assets/{select-hOZTp8aC.js → select-BuiHcMzS.js} +1 -1
- package/admin-dist/public/assets/settings-DBxbYDvn.js +1 -0
- package/admin-dist/public/assets/{switch-jX2pDaNU.js → switch-DiJvolcs.js} +1 -1
- package/admin-dist/public/assets/tabs-Cgz6G_Xy.js +1 -0
- package/admin-dist/public/assets/{tanstack-adapter-B-Glm4kH.js → tanstack-adapter-BknsSgra.js} +1 -1
- package/admin-dist/public/assets/taxonomies-DOErsLl5.js +1 -0
- package/admin-dist/public/assets/{textarea-B6SfBmr0.js → textarea-CgggMxUX.js} +1 -1
- package/admin-dist/public/assets/{trash-BOCnIznD.js → trash-BU4ANuaW.js} +1 -1
- package/admin-dist/public/assets/{triangle-alert-CXFIO_Gu.js → triangle-alert-lvCbwp0s.js} +1 -1
- package/admin-dist/public/assets/{useBreadcrumbLabel-_6qBagc3.js → useBreadcrumbLabel-D00rvqjw.js} +1 -1
- package/admin-dist/public/assets/{usePermissions-M1ijZ7a6.js → usePermissions-D7tQowaF.js} +1 -1
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-collapsible.mjs +144 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-slot.mjs +21 -21
- package/admin-dist/server/_libs/lucide-react.mjs +131 -124
- package/admin-dist/server/_ssr/{CmsButton-DOiTVKQq.mjs → CmsButton-DbzfJru_.mjs} +1 -1
- package/admin-dist/server/_ssr/{CmsEmptyState-fbnGt3LD.mjs → CmsEmptyState-CuvcXr3Z.mjs} +3 -3
- package/admin-dist/server/_ssr/{CmsPageHeader-DHRrdOZa.mjs → CmsPageHeader-ClNPU7Up.mjs} +1 -1
- package/admin-dist/server/_ssr/{CmsStatusBadge-s7obWbKZ.mjs → CmsStatusBadge-CojMbrY7.mjs} +2 -2
- package/admin-dist/server/_ssr/{CmsSurface-rFoYjb62.mjs → CmsSurface-Dcv440rp.mjs} +1 -1
- package/admin-dist/server/_ssr/{CmsToolbar-zTE45z2q.mjs → CmsToolbar-BKv1nL6u.mjs} +2 -2
- package/admin-dist/server/_ssr/{ContentEntryEditor-BLoEjT_m.mjs → ContentEntryEditor-weiXSBdZ.mjs} +35 -51
- package/admin-dist/server/_ssr/{TaxonomyFilter-XAtaJC2z.mjs → TaxonomyFilter-BPQ57Mwk.mjs} +7 -7
- package/admin-dist/server/_ssr/{_contentTypeId-Csl4822C.mjs → _contentTypeId-DyyauLOs.mjs} +24 -23
- package/admin-dist/server/_ssr/{_entryId-D8alLFBx.mjs → _entryId-9Cafwxmw.mjs} +22 -21
- package/admin-dist/server/_ssr/_tanstack-start-manifest_v-Dk-FIYPN.mjs +4 -0
- package/admin-dist/server/_ssr/{command-C0Di14--.mjs → command-CEf8YBxY.mjs} +1 -1
- package/admin-dist/server/_ssr/{content-CT-FPsmV.mjs → content-ZFWVzO25.mjs} +20 -19
- package/admin-dist/server/_ssr/{content-types-C8cBFdzE.mjs → content-types-D25lUE-j.mjs} +18 -17
- package/admin-dist/server/_ssr/{index-BJtcrEc-.mjs → index-BlSIlH4Z.mjs} +10 -9
- package/admin-dist/server/_ssr/index.mjs +2 -2
- package/admin-dist/server/_ssr/{label-qn2Afwl4.mjs → label-PblVvdRv.mjs} +1 -1
- package/admin-dist/server/_ssr/{media-qv5IAsMZ.mjs → media-CD2_NUMw.mjs} +683 -314
- package/admin-dist/server/_ssr/{new._contentTypeId-DdGyrhqs.mjs → new._contentTypeId-dmZy6PBX.mjs} +20 -19
- package/admin-dist/server/_ssr/{router-nSVkxb6Y.mjs → router-x6Ab8T4s.mjs} +109 -43
- package/admin-dist/server/_ssr/{scroll-area-BCinP455.mjs → scroll-area-BH_1K-WT.mjs} +1 -1
- package/admin-dist/server/_ssr/{select-BKQlQScw.mjs → select-CrfEkFJw.mjs} +2 -2
- package/admin-dist/server/_ssr/{settings-BCr2KQlk.mjs → settings-DVdsoWoh.mjs} +158 -105
- package/admin-dist/server/_ssr/{switch-BaOi42fE.mjs → switch-DX_X8vZl.mjs} +1 -1
- package/admin-dist/server/_ssr/{tabs-DYXEi9kq.mjs → tabs-4FWM0sn8.mjs} +3 -3
- package/admin-dist/server/_ssr/{tanstack-adapter-Bsz8kha-.mjs → tanstack-adapter-D3ZcKtbY.mjs} +1 -1
- package/admin-dist/server/_ssr/{taxonomies-CueMHTbE.mjs → taxonomies-BHFfO9Yr.mjs} +21 -20
- package/admin-dist/server/_ssr/{textarea-CI0Jqx2x.mjs → textarea-CZVaroMc.mjs} +1 -1
- package/admin-dist/server/_ssr/{trash-DE6W8GoX.mjs → trash-9tUB2KwI.mjs} +14 -13
- package/admin-dist/server/_ssr/{useBreadcrumbLabel-B5Yi72lM.mjs → useBreadcrumbLabel-DVme3DSb.mjs} +1 -1
- package/admin-dist/server/_ssr/{usePermissions-C3nZ-Izm.mjs → usePermissions-zAQj-ruE.mjs} +1 -1
- package/admin-dist/server/index.mjs +188 -188
- package/dist/cli/commands/init.d.ts +12 -2
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +136 -138
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/index.js +2 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/templates/admin.d.ts +10 -0
- package/dist/cli/templates/admin.d.ts.map +1 -0
- package/dist/cli/templates/admin.js +212 -0
- package/dist/cli/templates/admin.js.map +1 -0
- package/dist/cli/templates/cmsClient.d.ts +7 -0
- package/dist/cli/templates/cmsClient.d.ts.map +1 -0
- package/dist/cli/templates/cmsClient.js +36 -0
- package/dist/cli/templates/cmsClient.js.map +1 -0
- package/dist/cli/templates/cmsConfig.d.ts +7 -0
- package/dist/cli/templates/cmsConfig.d.ts.map +1 -0
- package/dist/cli/templates/cmsConfig.js +86 -0
- package/dist/cli/templates/cmsConfig.js.map +1 -0
- package/dist/cli/templates/index.d.ts +10 -0
- package/dist/cli/templates/index.d.ts.map +1 -0
- package/dist/cli/templates/index.js +10 -0
- package/dist/cli/templates/index.js.map +1 -0
- package/dist/cli/templates/schemas/blog.d.ts +8 -0
- package/dist/cli/templates/schemas/blog.d.ts.map +1 -0
- package/dist/cli/templates/schemas/blog.js +103 -0
- package/dist/cli/templates/schemas/blog.js.map +1 -0
- package/dist/cli/templates/schemas/docs.d.ts +8 -0
- package/dist/cli/templates/schemas/docs.d.ts.map +1 -0
- package/dist/cli/templates/schemas/docs.js +110 -0
- package/dist/cli/templates/schemas/docs.js.map +1 -0
- package/dist/cli/templates/schemas/index.d.ts +11 -0
- package/dist/cli/templates/schemas/index.d.ts.map +1 -0
- package/dist/cli/templates/schemas/index.js +13 -0
- package/dist/cli/templates/schemas/index.js.map +1 -0
- package/dist/cli/templates/schemas/landing.d.ts +8 -0
- package/dist/cli/templates/schemas/landing.d.ts.map +1 -0
- package/dist/cli/templates/schemas/landing.js +135 -0
- package/dist/cli/templates/schemas/landing.js.map +1 -0
- package/dist/cli/utils/fileUtils.d.ts +21 -0
- package/dist/cli/utils/fileUtils.d.ts.map +1 -0
- package/dist/cli/utils/fileUtils.js +95 -0
- package/dist/cli/utils/fileUtils.js.map +1 -0
- package/dist/cli/utils/prompts.d.ts +25 -0
- package/dist/cli/utils/prompts.d.ts.map +1 -0
- package/dist/cli/utils/prompts.js +87 -0
- package/dist/cli/utils/prompts.js.map +1 -0
- package/dist/client/admin/index.d.ts +75 -2
- package/dist/client/admin/index.d.ts.map +1 -1
- package/dist/client/admin/index.js +17 -1
- package/dist/client/admin/index.js.map +1 -1
- package/dist/client/admin/media.d.ts.map +1 -1
- package/dist/client/admin/media.js +3 -3
- package/dist/client/admin/media.js.map +1 -1
- package/dist/client/admin/settings.d.ts +50 -0
- package/dist/client/admin/settings.d.ts.map +1 -0
- package/dist/client/admin/settings.js +89 -0
- package/dist/client/admin/settings.js.map +1 -0
- package/dist/client/admin/taxonomies.d.ts.map +1 -1
- package/dist/client/admin/trash.d.ts.map +1 -1
- package/dist/client/admin/types.d.ts +40 -0
- package/dist/client/admin/types.d.ts.map +1 -1
- package/dist/client/admin/validators.d.ts +243 -3
- package/dist/client/admin/validators.d.ts.map +1 -1
- package/dist/client/admin/validators.js +18 -0
- package/dist/client/admin/validators.js.map +1 -1
- package/dist/client/adminConfig.d.ts +1 -1
- package/dist/client/agentTools.d.ts +1 -1427
- package/dist/client/agentTools.d.ts.map +1 -1
- package/dist/client/config.d.ts +145 -0
- package/dist/client/config.d.ts.map +1 -0
- package/dist/client/config.js +132 -0
- package/dist/client/config.js.map +1 -0
- package/dist/client/index.d.ts +3 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +13 -6
- package/dist/client/index.js.map +1 -1
- package/dist/client/schema/defineContentType.js +1 -1
- package/dist/client/schema/defineContentType.js.map +1 -1
- package/dist/client/wrapper.d.ts.map +1 -1
- package/dist/client/wrapper.js +0 -4
- package/dist/client/wrapper.js.map +1 -1
- package/dist/component/_generated/api.d.ts +2 -0
- package/dist/component/_generated/api.d.ts.map +1 -1
- package/dist/component/_generated/api.js.map +1 -1
- package/dist/component/_generated/component.d.ts +42 -0
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/contentEntries.d.ts.map +1 -1
- package/dist/component/contentEntries.js +0 -2
- package/dist/component/contentEntries.js.map +1 -1
- package/dist/component/contentEntryMutations.d.ts.map +1 -1
- package/dist/component/contentEntryMutations.js +0 -1
- package/dist/component/contentEntryMutations.js.map +1 -1
- package/dist/component/contentLock.d.ts.map +1 -1
- package/dist/component/contentLock.js +0 -2
- package/dist/component/contentLock.js.map +1 -1
- package/dist/component/contentTypeMutations.d.ts +1 -1
- package/dist/component/index.d.ts +2 -1
- package/dist/component/index.d.ts.map +1 -1
- package/dist/component/index.js +3 -1
- package/dist/component/index.js.map +1 -1
- package/dist/component/schema.d.ts +18 -1
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/schema.js +6 -1
- package/dist/component/schema.js.map +1 -1
- package/dist/component/settings.d.ts +60 -0
- package/dist/component/settings.d.ts.map +1 -0
- package/dist/component/settings.js +126 -0
- package/dist/component/settings.js.map +1 -0
- package/dist/component/validators.d.ts +36 -0
- package/dist/component/validators.d.ts.map +1 -1
- package/dist/component/validators.js +15 -0
- package/dist/component/validators.js.map +1 -1
- package/dist/test.d.ts +16 -2
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +2 -6
- package/dist/test.js.map +1 -1
- package/package.json +31 -22
- package/admin/README.md +0 -99
- package/admin-dist/public/assets/ContentEntryEditor-BU220CCy.js +0 -4
- package/admin-dist/public/assets/_contentTypeId-DK8cskRt.js +0 -1
- package/admin-dist/public/assets/_entryId-CuVMExbb.js +0 -1
- package/admin-dist/public/assets/content-QBUxdxbS.js +0 -1
- package/admin-dist/public/assets/globals-B7Wsfh_v.css +0 -1
- package/admin-dist/public/assets/main-CjQ2VI9L.js +0 -97
- package/admin-dist/public/assets/media-Dc5PWt2Q.js +0 -1
- package/admin-dist/public/assets/new._contentTypeId-C_I4YxIa.js +0 -1
- package/admin-dist/public/assets/settings-t2PbCZh4.js +0 -1
- package/admin-dist/public/assets/tabs-q4EbZk7c.js +0 -1
- package/admin-dist/public/assets/taxonomies-kyk5P4ZW.js +0 -1
- package/admin-dist/server/_ssr/_tanstack-start-manifest_v-BffZedId.mjs +0 -4
|
@@ -1,156 +1,154 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const ADMIN_TEMPLATE = `/**
|
|
4
|
-
* Admin API for CMS Admin UI
|
|
5
|
-
*
|
|
6
|
-
* This file exports Convex functions that the admin UI calls.
|
|
7
|
-
* Generated by: npx convex-cms init
|
|
1
|
+
/**
|
|
2
|
+
* Init Command
|
|
8
3
|
*
|
|
9
|
-
*
|
|
10
|
-
* \`\`\`tsx
|
|
11
|
-
* import { CmsAdmin } from "convex-cms-admin";
|
|
4
|
+
* Sets up Convex CMS in a project with interactive template selection.
|
|
12
5
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* auth={{
|
|
18
|
-
* getUser: () => yourAuth.getUser(),
|
|
19
|
-
* getUserRole: (id) => yourAuth.getRole(id),
|
|
20
|
-
* }}
|
|
21
|
-
* />
|
|
22
|
-
* );
|
|
23
|
-
* }
|
|
24
|
-
* \`\`\`
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx convex-cms init # Interactive mode
|
|
8
|
+
* npx convex-cms init --template blog # Use blog template
|
|
9
|
+
* npx convex-cms init --force # Overwrite existing files
|
|
25
10
|
*/
|
|
26
|
-
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
moveMediaAssets,
|
|
59
|
-
|
|
60
|
-
// Media Folders
|
|
61
|
-
listMediaFolders,
|
|
62
|
-
getMediaFolder,
|
|
63
|
-
getMediaFolderTree,
|
|
64
|
-
createMediaFolder,
|
|
65
|
-
updateMediaFolder,
|
|
66
|
-
moveMediaFolder,
|
|
67
|
-
deleteMediaFolder,
|
|
68
|
-
restoreMediaFolder,
|
|
69
|
-
|
|
70
|
-
// Upload
|
|
71
|
-
generateUploadUrl,
|
|
72
|
-
|
|
73
|
-
// Stats
|
|
74
|
-
getDashboardStats,
|
|
75
|
-
} = defineAdminAPI(components.convexCms, {
|
|
76
|
-
// Optional: Add auth callback to validate access
|
|
77
|
-
// auth: async (ctx, operation) => {
|
|
78
|
-
// const identity = await ctx.auth.getUserIdentity();
|
|
79
|
-
// if (!identity) {
|
|
80
|
-
// throw new Error("Unauthorized: Please sign in");
|
|
81
|
-
// }
|
|
82
|
-
// // Optionally check operation.type for fine-grained access control
|
|
83
|
-
// return identity.subject;
|
|
84
|
-
// },
|
|
85
|
-
});
|
|
86
|
-
`;
|
|
11
|
+
import path from "path";
|
|
12
|
+
import { promptForTemplate, showIntro, showOutro, logStep, logSuccess, logWarning, logError, logInfo, note, } from "../utils/prompts.js";
|
|
13
|
+
import { fileExists, writeFile, updateConvexConfig, } from "../utils/fileUtils.js";
|
|
14
|
+
import { ADMIN_TEMPLATE } from "../templates/admin.js";
|
|
15
|
+
import { CMS_CONFIG_TEMPLATE } from "../templates/cmsConfig.js";
|
|
16
|
+
import { CMS_CLIENT_TEMPLATE } from "../templates/cmsClient.js";
|
|
17
|
+
import { BLOG_SCHEMA_TEMPLATE } from "../templates/schemas/blog.js";
|
|
18
|
+
import { DOCS_SCHEMA_TEMPLATE } from "../templates/schemas/docs.js";
|
|
19
|
+
import { LANDING_SCHEMA_TEMPLATE } from "../templates/schemas/landing.js";
|
|
20
|
+
const TEMPLATE_DESCRIPTIONS = {
|
|
21
|
+
blog: "Blog content types",
|
|
22
|
+
docs: "Documentation content types",
|
|
23
|
+
landing: "Landing page content types",
|
|
24
|
+
blank: "No schemas",
|
|
25
|
+
};
|
|
26
|
+
function getSchemaTemplate(template) {
|
|
27
|
+
switch (template) {
|
|
28
|
+
case "blog":
|
|
29
|
+
return BLOG_SCHEMA_TEMPLATE;
|
|
30
|
+
case "docs":
|
|
31
|
+
return DOCS_SCHEMA_TEMPLATE;
|
|
32
|
+
case "landing":
|
|
33
|
+
return LANDING_SCHEMA_TEMPLATE;
|
|
34
|
+
case "blank":
|
|
35
|
+
return null;
|
|
36
|
+
default:
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function validateTemplate(template) {
|
|
41
|
+
return ["blog", "docs", "landing", "blank"].includes(template);
|
|
42
|
+
}
|
|
87
43
|
export async function initCommand(options) {
|
|
88
44
|
const cwd = process.cwd();
|
|
89
45
|
const convexDir = path.join(cwd, "convex");
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
if (!fs.existsSync(convexDir)) {
|
|
97
|
-
console.error(" Error: No convex/ directory found.");
|
|
98
|
-
console.error("");
|
|
99
|
-
console.error(" Please run this command from a Convex project root,");
|
|
100
|
-
console.error(" or initialize Convex first with: npx convex dev");
|
|
101
|
-
process.exit(1);
|
|
102
|
-
}
|
|
103
|
-
// Check if admin.ts already exists
|
|
104
|
-
if (fs.existsSync(adminPath) && !options.force) {
|
|
105
|
-
console.error(" Error: convex/admin.ts already exists.");
|
|
106
|
-
console.error("");
|
|
107
|
-
console.error(" Use --force to overwrite the existing file.");
|
|
46
|
+
if (!fileExists(convexDir)) {
|
|
47
|
+
console.log("");
|
|
48
|
+
logError("No convex/ directory found.");
|
|
49
|
+
console.log("");
|
|
50
|
+
logInfo("Please run this command from a Convex project root,");
|
|
51
|
+
logInfo("or initialize Convex first with: npx convex dev");
|
|
108
52
|
process.exit(1);
|
|
109
53
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
54
|
+
let template;
|
|
55
|
+
if (options.template) {
|
|
56
|
+
if (!validateTemplate(options.template)) {
|
|
57
|
+
logError(`Invalid template: ${options.template}`);
|
|
58
|
+
logInfo("Valid templates: blog, docs, landing, blank");
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
template = options.template;
|
|
62
|
+
showIntro();
|
|
63
|
+
logStep(`Using template: ${template}`);
|
|
114
64
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
65
|
+
else {
|
|
66
|
+
const result = await promptForTemplate();
|
|
67
|
+
if (result.cancelled) {
|
|
68
|
+
process.exit(0);
|
|
69
|
+
}
|
|
70
|
+
template = result.template;
|
|
118
71
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
72
|
+
const files = [
|
|
73
|
+
{
|
|
74
|
+
name: "convex/admin.ts",
|
|
75
|
+
path: path.join(convexDir, "admin.ts"),
|
|
76
|
+
content: ADMIN_TEMPLATE,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: "convex/cms.config.ts",
|
|
80
|
+
path: path.join(convexDir, "cms.config.ts"),
|
|
81
|
+
content: CMS_CONFIG_TEMPLATE,
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: "convex/cms.ts",
|
|
85
|
+
path: path.join(convexDir, "cms.ts"),
|
|
86
|
+
content: CMS_CLIENT_TEMPLATE,
|
|
87
|
+
},
|
|
88
|
+
];
|
|
89
|
+
const schemaContent = getSchemaTemplate(template);
|
|
90
|
+
if (schemaContent) {
|
|
91
|
+
files.push({
|
|
92
|
+
name: "convex/schemas.ts",
|
|
93
|
+
path: path.join(convexDir, "schemas.ts"),
|
|
94
|
+
content: schemaContent,
|
|
95
|
+
});
|
|
125
96
|
}
|
|
126
97
|
console.log("");
|
|
127
|
-
|
|
98
|
+
logStep("Creating files...");
|
|
99
|
+
const results = [];
|
|
100
|
+
const createdFiles = [];
|
|
101
|
+
const modifiedFiles = [];
|
|
102
|
+
const skippedFiles = [];
|
|
103
|
+
for (const file of files) {
|
|
104
|
+
try {
|
|
105
|
+
const result = writeFile(file.path, file.content, {
|
|
106
|
+
force: options.force,
|
|
107
|
+
});
|
|
108
|
+
results.push(result);
|
|
109
|
+
if (result.created) {
|
|
110
|
+
createdFiles.push(file.name);
|
|
111
|
+
logSuccess(`${file.name}`);
|
|
112
|
+
}
|
|
113
|
+
else if (result.modified) {
|
|
114
|
+
modifiedFiles.push(file.name);
|
|
115
|
+
logSuccess(`${file.name} (updated)`);
|
|
116
|
+
}
|
|
117
|
+
else if (result.skipped) {
|
|
118
|
+
skippedFiles.push(file.name);
|
|
119
|
+
logWarning(`${file.name} (skipped - already exists)`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
logError(`Failed to write ${file.name}: ${error}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const configPath = path.join(convexDir, "convex.config.ts");
|
|
127
|
+
const configResult = updateConvexConfig(configPath, { force: options.force });
|
|
128
128
|
console.log("");
|
|
129
|
-
if (
|
|
130
|
-
|
|
131
|
-
console.log("");
|
|
132
|
-
console.log(' import convexCms from "convex-cms/convex.config";');
|
|
133
|
-
console.log("");
|
|
134
|
-
console.log(" const app = defineApp();");
|
|
135
|
-
console.log(" app.use(convexCms);");
|
|
136
|
-
console.log(" export default app;");
|
|
137
|
-
console.log("");
|
|
138
|
-
console.log(" 2. Run Convex dev server:");
|
|
139
|
-
console.log(" npx convex dev");
|
|
140
|
-
console.log("");
|
|
141
|
-
console.log(" 3. Access admin (development):");
|
|
142
|
-
console.log(" npx convex-cms admin");
|
|
129
|
+
if (configResult.created) {
|
|
130
|
+
logSuccess("convex/convex.config.ts (created)");
|
|
143
131
|
}
|
|
144
|
-
else {
|
|
145
|
-
|
|
146
|
-
|
|
132
|
+
else if (configResult.modified) {
|
|
133
|
+
logSuccess("convex/convex.config.ts (added CMS component)");
|
|
134
|
+
}
|
|
135
|
+
else if (configResult.skipped) {
|
|
136
|
+
logInfo("convex/convex.config.ts (CMS already configured)");
|
|
137
|
+
}
|
|
138
|
+
if (skippedFiles.length > 0 && !options.force) {
|
|
147
139
|
console.log("");
|
|
148
|
-
|
|
149
|
-
console.log(" npx convex-cms admin");
|
|
140
|
+
logWarning("Some files were skipped. Use --force to overwrite.");
|
|
150
141
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
142
|
+
const nextSteps = `
|
|
143
|
+
1. Start Convex:
|
|
144
|
+
npx convex dev
|
|
145
|
+
|
|
146
|
+
2. Launch admin UI (development):
|
|
147
|
+
npx convex-cms admin
|
|
148
|
+
|
|
149
|
+
Documentation: https://github.com/obkaro/convex-cms`;
|
|
150
|
+
note(nextSteps, "Next steps");
|
|
151
|
+
const templateDesc = TEMPLATE_DESCRIPTIONS[template];
|
|
152
|
+
showOutro(`Setup complete! Template: ${templateDesc}`);
|
|
155
153
|
}
|
|
156
154
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -10,7 +10,8 @@ program
|
|
|
10
10
|
program
|
|
11
11
|
.command("init")
|
|
12
12
|
.description("Initialize CMS admin API in your Convex project")
|
|
13
|
-
.option("-f, --force", "Overwrite existing
|
|
13
|
+
.option("-f, --force", "Overwrite existing files")
|
|
14
|
+
.option("-t, --template <template>", "Schema template (blog, docs, landing, blank)")
|
|
14
15
|
.action(initCommand);
|
|
15
16
|
program
|
|
16
17
|
.command("admin")
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACjD,MAAM,CACL,2BAA2B,EAC3B,8CAA8C,CAC/C;KACA,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,aAAa,EAAE,uBAAuB,CAAC;KAC9C,MAAM,CAAC,eAAe,EAAE,wBAAwB,EAAE,MAAM,CAAC;KACzD,MAAM,CAAC,QAAQ,EAAE,2CAA2C,CAAC;KAC7D,MAAM,CAAC,WAAW,EAAE,mCAAmC,CAAC;KACxD,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin API template for CMS Admin UI
|
|
3
|
+
*
|
|
4
|
+
* Generated by: npx convex-cms init
|
|
5
|
+
*
|
|
6
|
+
* This file exports all 87 Convex functions required by the admin UI.
|
|
7
|
+
* All exports are required - removing any will break the admin interface.
|
|
8
|
+
*/
|
|
9
|
+
export declare const ADMIN_TEMPLATE = "/**\n * Admin API for CMS Admin UI\n *\n * Uses the unified config pattern - all CMS settings are defined\n * once in cms.config.ts and shared with the client API.\n *\n * Usage:\n * 1. Run your Convex dev server: `npx convex dev`\n * 2. Launch the admin UI: `npx convex-cms admin`\n * 3. Or embed in your app: `<CmsAdmin convexUrl={...} />`\n */\n\nimport { defineAdminAPI } from \"convex-cms\";\nimport { components } from \"./_generated/api\";\nimport cmsConfig from \"./cms.config\";\n\nconst admin = defineAdminAPI(components.convexCms, cmsConfig);\n\n// =============================================================================\n// Dashboard\n// =============================================================================\n\nexport const getDashboardStats = admin.getDashboardStats;\n\n// =============================================================================\n// Content Types\n// =============================================================================\n\nexport const listContentTypes = admin.listContentTypes;\nexport const getContentType = admin.getContentType;\nexport const createContentType = admin.createContentType;\nexport const updateContentType = admin.updateContentType;\nexport const deleteContentType = admin.deleteContentType;\n\n// =============================================================================\n// Content Entries\n// =============================================================================\n\nexport const listEntries = admin.listEntries;\nexport const getEntry = admin.getEntry;\nexport const createEntry = admin.createEntry;\nexport const updateEntry = admin.updateEntry;\nexport const publishEntry = admin.publishEntry;\nexport const unpublishEntry = admin.unpublishEntry;\nexport const deleteEntry = admin.deleteEntry;\nexport const duplicateEntry = admin.duplicateEntry;\nexport const scheduleEntry = admin.scheduleEntry;\nexport const cancelScheduledEntry = admin.cancelScheduledEntry;\nexport const getScheduledEntries = admin.getScheduledEntries;\nexport const restoreEntry = admin.restoreEntry;\nexport const getEntryBySlug = admin.getEntryBySlug;\nexport const getEntryBySlugAndTypeName = admin.getEntryBySlugAndTypeName;\n\n// =============================================================================\n// Bulk Operations\n// =============================================================================\n\nexport const bulkPublish = admin.bulkPublish;\nexport const bulkUnpublish = admin.bulkUnpublish;\nexport const bulkDelete = admin.bulkDelete;\nexport const bulkUpdate = admin.bulkUpdate;\nexport const bulkRestore = admin.bulkRestore;\n\n// =============================================================================\n// Trash\n// =============================================================================\n\nexport const getTrashConfig = admin.getTrashConfig;\nexport const listTrash = admin.listTrash;\nexport const getTrashStats = admin.getTrashStats;\nexport const updateTrashConfig = admin.updateTrashConfig;\nexport const emptyTrash = admin.emptyTrash;\nexport const runTrashCleanup = admin.runTrashCleanup;\n\n// =============================================================================\n// Content Lock\n// =============================================================================\n\nexport const checkContentLock = admin.checkContentLock;\nexport const listLockedContent = admin.listLockedContent;\nexport const acquireContentLock = admin.acquireContentLock;\nexport const releaseContentLock = admin.releaseContentLock;\nexport const renewContentLock = admin.renewContentLock;\nexport const forceReleaseContentLock = admin.forceReleaseContentLock;\n\n// =============================================================================\n// Versions\n// =============================================================================\n\nexport const getVersionHistory = admin.getVersionHistory;\nexport const getVersion = admin.getVersion;\nexport const compareVersions = admin.compareVersions;\nexport const rollbackVersion = admin.rollbackVersion;\n\n// =============================================================================\n// Media Assets\n// =============================================================================\n\nexport const listMediaAssets = admin.listMediaAssets;\nexport const getMediaAsset = admin.getMediaAsset;\nexport const createMediaAsset = admin.createMediaAsset;\nexport const updateMediaAsset = admin.updateMediaAsset;\nexport const deleteMediaAsset = admin.deleteMediaAsset;\nexport const restoreMediaAsset = admin.restoreMediaAsset;\nexport const permanentDeleteMediaAsset = admin.permanentDeleteMediaAsset;\nexport const bulkPermanentDeleteMediaAssets =\n admin.bulkPermanentDeleteMediaAssets;\nexport const moveMediaAssets = admin.moveMediaAssets;\nexport const getMediaTrashCount = admin.getMediaTrashCount;\n\n// =============================================================================\n// Media Folders\n// =============================================================================\n\nexport const listMediaFolders = admin.listMediaFolders;\nexport const getMediaFolder = admin.getMediaFolder;\nexport const getMediaFolderTree = admin.getMediaFolderTree;\nexport const createMediaFolder = admin.createMediaFolder;\nexport const updateMediaFolder = admin.updateMediaFolder;\nexport const moveMediaFolder = admin.moveMediaFolder;\nexport const deleteMediaFolder = admin.deleteMediaFolder;\nexport const restoreMediaFolder = admin.restoreMediaFolder;\n\n// =============================================================================\n// Media Variants\n// =============================================================================\n\nexport const listMediaVariants = admin.listMediaVariants;\nexport const getMediaVariant = admin.getMediaVariant;\nexport const getBestMediaVariant = admin.getBestMediaVariant;\nexport const getMediaResponsiveSrcset = admin.getMediaResponsiveSrcset;\nexport const getMediaVariantPresets = admin.getMediaVariantPresets;\nexport const getMediaAssetWithVariants = admin.getMediaAssetWithVariants;\nexport const createMediaVariant = admin.createMediaVariant;\nexport const requestMediaVariantGeneration =\n admin.requestMediaVariantGeneration;\nexport const deleteMediaVariant = admin.deleteMediaVariant;\nexport const deleteMediaAssetVariants = admin.deleteMediaAssetVariants;\nexport const generateMediaVariantsFromPresets =\n admin.generateMediaVariantsFromPresets;\nexport const restoreMediaVariant = admin.restoreMediaVariant;\n\n// =============================================================================\n// Upload\n// =============================================================================\n\nexport const generateUploadUrl = admin.generateUploadUrl;\n\n// =============================================================================\n// Taxonomies\n// =============================================================================\n\nexport const getTaxonomy = admin.getTaxonomy;\nexport const listTaxonomies = admin.listTaxonomies;\nexport const createTaxonomy = admin.createTaxonomy;\nexport const updateTaxonomy = admin.updateTaxonomy;\nexport const deleteTaxonomy = admin.deleteTaxonomy;\nexport const restoreTaxonomy = admin.restoreTaxonomy;\n\n// =============================================================================\n// Terms\n// =============================================================================\n\nexport const getTerm = admin.getTerm;\nexport const listTerms = admin.listTerms;\nexport const getTermsHierarchy = admin.getTermsHierarchy;\nexport const suggestTerms = admin.suggestTerms;\nexport const countTerms = admin.countTerms;\nexport const createTerm = admin.createTerm;\nexport const updateTerm = admin.updateTerm;\nexport const deleteTerm = admin.deleteTerm;\nexport const restoreTerm = admin.restoreTerm;\n\n// =============================================================================\n// Entry-Term Relations\n// =============================================================================\n\nexport const getTermsByEntry = admin.getTermsByEntry;\nexport const getEntriesByTerm = admin.getEntriesByTerm;\nexport const setEntryTerms = admin.setEntryTerms;\nexport const addTermToEntry = admin.addTermToEntry;\nexport const removeTermFromEntry = admin.removeTermFromEntry;\nexport const createTermAndAddToEntry = admin.createTermAndAddToEntry;\n\n// =============================================================================\n// Media-Term Relations\n// =============================================================================\n\nexport const getTermsByMedia = admin.getTermsByMedia;\nexport const getMediaByTerm = admin.getMediaByTerm;\nexport const setMediaTerms = admin.setMediaTerms;\nexport const addTermToMedia = admin.addTermToMedia;\nexport const removeTermFromMedia = admin.removeTermFromMedia;\nexport const createTermAndAddToMedia = admin.createTermAndAddToMedia;\n\n// =============================================================================\n// Settings\n// =============================================================================\n\nexport const getSettings = admin.getSettings;\nexport const updateSettings = admin.updateSettings;\nexport const resetSettings = admin.resetSettings;\n";
|
|
10
|
+
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/admin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,cAAc,kjSA0M1B,CAAC"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin API template for CMS Admin UI
|
|
3
|
+
*
|
|
4
|
+
* Generated by: npx convex-cms init
|
|
5
|
+
*
|
|
6
|
+
* This file exports all 87 Convex functions required by the admin UI.
|
|
7
|
+
* All exports are required - removing any will break the admin interface.
|
|
8
|
+
*/
|
|
9
|
+
export const ADMIN_TEMPLATE = `/**
|
|
10
|
+
* Admin API for CMS Admin UI
|
|
11
|
+
*
|
|
12
|
+
* Uses the unified config pattern - all CMS settings are defined
|
|
13
|
+
* once in cms.config.ts and shared with the client API.
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* 1. Run your Convex dev server: \`npx convex dev\`
|
|
17
|
+
* 2. Launch the admin UI: \`npx convex-cms admin\`
|
|
18
|
+
* 3. Or embed in your app: \`<CmsAdmin convexUrl={...} />\`
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { defineAdminAPI } from "convex-cms";
|
|
22
|
+
import { components } from "./_generated/api";
|
|
23
|
+
import cmsConfig from "./cms.config";
|
|
24
|
+
|
|
25
|
+
const admin = defineAdminAPI(components.convexCms, cmsConfig);
|
|
26
|
+
|
|
27
|
+
// =============================================================================
|
|
28
|
+
// Dashboard
|
|
29
|
+
// =============================================================================
|
|
30
|
+
|
|
31
|
+
export const getDashboardStats = admin.getDashboardStats;
|
|
32
|
+
|
|
33
|
+
// =============================================================================
|
|
34
|
+
// Content Types
|
|
35
|
+
// =============================================================================
|
|
36
|
+
|
|
37
|
+
export const listContentTypes = admin.listContentTypes;
|
|
38
|
+
export const getContentType = admin.getContentType;
|
|
39
|
+
export const createContentType = admin.createContentType;
|
|
40
|
+
export const updateContentType = admin.updateContentType;
|
|
41
|
+
export const deleteContentType = admin.deleteContentType;
|
|
42
|
+
|
|
43
|
+
// =============================================================================
|
|
44
|
+
// Content Entries
|
|
45
|
+
// =============================================================================
|
|
46
|
+
|
|
47
|
+
export const listEntries = admin.listEntries;
|
|
48
|
+
export const getEntry = admin.getEntry;
|
|
49
|
+
export const createEntry = admin.createEntry;
|
|
50
|
+
export const updateEntry = admin.updateEntry;
|
|
51
|
+
export const publishEntry = admin.publishEntry;
|
|
52
|
+
export const unpublishEntry = admin.unpublishEntry;
|
|
53
|
+
export const deleteEntry = admin.deleteEntry;
|
|
54
|
+
export const duplicateEntry = admin.duplicateEntry;
|
|
55
|
+
export const scheduleEntry = admin.scheduleEntry;
|
|
56
|
+
export const cancelScheduledEntry = admin.cancelScheduledEntry;
|
|
57
|
+
export const getScheduledEntries = admin.getScheduledEntries;
|
|
58
|
+
export const restoreEntry = admin.restoreEntry;
|
|
59
|
+
export const getEntryBySlug = admin.getEntryBySlug;
|
|
60
|
+
export const getEntryBySlugAndTypeName = admin.getEntryBySlugAndTypeName;
|
|
61
|
+
|
|
62
|
+
// =============================================================================
|
|
63
|
+
// Bulk Operations
|
|
64
|
+
// =============================================================================
|
|
65
|
+
|
|
66
|
+
export const bulkPublish = admin.bulkPublish;
|
|
67
|
+
export const bulkUnpublish = admin.bulkUnpublish;
|
|
68
|
+
export const bulkDelete = admin.bulkDelete;
|
|
69
|
+
export const bulkUpdate = admin.bulkUpdate;
|
|
70
|
+
export const bulkRestore = admin.bulkRestore;
|
|
71
|
+
|
|
72
|
+
// =============================================================================
|
|
73
|
+
// Trash
|
|
74
|
+
// =============================================================================
|
|
75
|
+
|
|
76
|
+
export const getTrashConfig = admin.getTrashConfig;
|
|
77
|
+
export const listTrash = admin.listTrash;
|
|
78
|
+
export const getTrashStats = admin.getTrashStats;
|
|
79
|
+
export const updateTrashConfig = admin.updateTrashConfig;
|
|
80
|
+
export const emptyTrash = admin.emptyTrash;
|
|
81
|
+
export const runTrashCleanup = admin.runTrashCleanup;
|
|
82
|
+
|
|
83
|
+
// =============================================================================
|
|
84
|
+
// Content Lock
|
|
85
|
+
// =============================================================================
|
|
86
|
+
|
|
87
|
+
export const checkContentLock = admin.checkContentLock;
|
|
88
|
+
export const listLockedContent = admin.listLockedContent;
|
|
89
|
+
export const acquireContentLock = admin.acquireContentLock;
|
|
90
|
+
export const releaseContentLock = admin.releaseContentLock;
|
|
91
|
+
export const renewContentLock = admin.renewContentLock;
|
|
92
|
+
export const forceReleaseContentLock = admin.forceReleaseContentLock;
|
|
93
|
+
|
|
94
|
+
// =============================================================================
|
|
95
|
+
// Versions
|
|
96
|
+
// =============================================================================
|
|
97
|
+
|
|
98
|
+
export const getVersionHistory = admin.getVersionHistory;
|
|
99
|
+
export const getVersion = admin.getVersion;
|
|
100
|
+
export const compareVersions = admin.compareVersions;
|
|
101
|
+
export const rollbackVersion = admin.rollbackVersion;
|
|
102
|
+
|
|
103
|
+
// =============================================================================
|
|
104
|
+
// Media Assets
|
|
105
|
+
// =============================================================================
|
|
106
|
+
|
|
107
|
+
export const listMediaAssets = admin.listMediaAssets;
|
|
108
|
+
export const getMediaAsset = admin.getMediaAsset;
|
|
109
|
+
export const createMediaAsset = admin.createMediaAsset;
|
|
110
|
+
export const updateMediaAsset = admin.updateMediaAsset;
|
|
111
|
+
export const deleteMediaAsset = admin.deleteMediaAsset;
|
|
112
|
+
export const restoreMediaAsset = admin.restoreMediaAsset;
|
|
113
|
+
export const permanentDeleteMediaAsset = admin.permanentDeleteMediaAsset;
|
|
114
|
+
export const bulkPermanentDeleteMediaAssets =
|
|
115
|
+
admin.bulkPermanentDeleteMediaAssets;
|
|
116
|
+
export const moveMediaAssets = admin.moveMediaAssets;
|
|
117
|
+
export const getMediaTrashCount = admin.getMediaTrashCount;
|
|
118
|
+
|
|
119
|
+
// =============================================================================
|
|
120
|
+
// Media Folders
|
|
121
|
+
// =============================================================================
|
|
122
|
+
|
|
123
|
+
export const listMediaFolders = admin.listMediaFolders;
|
|
124
|
+
export const getMediaFolder = admin.getMediaFolder;
|
|
125
|
+
export const getMediaFolderTree = admin.getMediaFolderTree;
|
|
126
|
+
export const createMediaFolder = admin.createMediaFolder;
|
|
127
|
+
export const updateMediaFolder = admin.updateMediaFolder;
|
|
128
|
+
export const moveMediaFolder = admin.moveMediaFolder;
|
|
129
|
+
export const deleteMediaFolder = admin.deleteMediaFolder;
|
|
130
|
+
export const restoreMediaFolder = admin.restoreMediaFolder;
|
|
131
|
+
|
|
132
|
+
// =============================================================================
|
|
133
|
+
// Media Variants
|
|
134
|
+
// =============================================================================
|
|
135
|
+
|
|
136
|
+
export const listMediaVariants = admin.listMediaVariants;
|
|
137
|
+
export const getMediaVariant = admin.getMediaVariant;
|
|
138
|
+
export const getBestMediaVariant = admin.getBestMediaVariant;
|
|
139
|
+
export const getMediaResponsiveSrcset = admin.getMediaResponsiveSrcset;
|
|
140
|
+
export const getMediaVariantPresets = admin.getMediaVariantPresets;
|
|
141
|
+
export const getMediaAssetWithVariants = admin.getMediaAssetWithVariants;
|
|
142
|
+
export const createMediaVariant = admin.createMediaVariant;
|
|
143
|
+
export const requestMediaVariantGeneration =
|
|
144
|
+
admin.requestMediaVariantGeneration;
|
|
145
|
+
export const deleteMediaVariant = admin.deleteMediaVariant;
|
|
146
|
+
export const deleteMediaAssetVariants = admin.deleteMediaAssetVariants;
|
|
147
|
+
export const generateMediaVariantsFromPresets =
|
|
148
|
+
admin.generateMediaVariantsFromPresets;
|
|
149
|
+
export const restoreMediaVariant = admin.restoreMediaVariant;
|
|
150
|
+
|
|
151
|
+
// =============================================================================
|
|
152
|
+
// Upload
|
|
153
|
+
// =============================================================================
|
|
154
|
+
|
|
155
|
+
export const generateUploadUrl = admin.generateUploadUrl;
|
|
156
|
+
|
|
157
|
+
// =============================================================================
|
|
158
|
+
// Taxonomies
|
|
159
|
+
// =============================================================================
|
|
160
|
+
|
|
161
|
+
export const getTaxonomy = admin.getTaxonomy;
|
|
162
|
+
export const listTaxonomies = admin.listTaxonomies;
|
|
163
|
+
export const createTaxonomy = admin.createTaxonomy;
|
|
164
|
+
export const updateTaxonomy = admin.updateTaxonomy;
|
|
165
|
+
export const deleteTaxonomy = admin.deleteTaxonomy;
|
|
166
|
+
export const restoreTaxonomy = admin.restoreTaxonomy;
|
|
167
|
+
|
|
168
|
+
// =============================================================================
|
|
169
|
+
// Terms
|
|
170
|
+
// =============================================================================
|
|
171
|
+
|
|
172
|
+
export const getTerm = admin.getTerm;
|
|
173
|
+
export const listTerms = admin.listTerms;
|
|
174
|
+
export const getTermsHierarchy = admin.getTermsHierarchy;
|
|
175
|
+
export const suggestTerms = admin.suggestTerms;
|
|
176
|
+
export const countTerms = admin.countTerms;
|
|
177
|
+
export const createTerm = admin.createTerm;
|
|
178
|
+
export const updateTerm = admin.updateTerm;
|
|
179
|
+
export const deleteTerm = admin.deleteTerm;
|
|
180
|
+
export const restoreTerm = admin.restoreTerm;
|
|
181
|
+
|
|
182
|
+
// =============================================================================
|
|
183
|
+
// Entry-Term Relations
|
|
184
|
+
// =============================================================================
|
|
185
|
+
|
|
186
|
+
export const getTermsByEntry = admin.getTermsByEntry;
|
|
187
|
+
export const getEntriesByTerm = admin.getEntriesByTerm;
|
|
188
|
+
export const setEntryTerms = admin.setEntryTerms;
|
|
189
|
+
export const addTermToEntry = admin.addTermToEntry;
|
|
190
|
+
export const removeTermFromEntry = admin.removeTermFromEntry;
|
|
191
|
+
export const createTermAndAddToEntry = admin.createTermAndAddToEntry;
|
|
192
|
+
|
|
193
|
+
// =============================================================================
|
|
194
|
+
// Media-Term Relations
|
|
195
|
+
// =============================================================================
|
|
196
|
+
|
|
197
|
+
export const getTermsByMedia = admin.getTermsByMedia;
|
|
198
|
+
export const getMediaByTerm = admin.getMediaByTerm;
|
|
199
|
+
export const setMediaTerms = admin.setMediaTerms;
|
|
200
|
+
export const addTermToMedia = admin.addTermToMedia;
|
|
201
|
+
export const removeTermFromMedia = admin.removeTermFromMedia;
|
|
202
|
+
export const createTermAndAddToMedia = admin.createTermAndAddToMedia;
|
|
203
|
+
|
|
204
|
+
// =============================================================================
|
|
205
|
+
// Settings
|
|
206
|
+
// =============================================================================
|
|
207
|
+
|
|
208
|
+
export const getSettings = admin.getSettings;
|
|
209
|
+
export const updateSettings = admin.updateSettings;
|
|
210
|
+
export const resetSettings = admin.resetSettings;
|
|
211
|
+
`;
|
|
212
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../../src/cli/templates/admin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0M7B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMS Client template
|
|
3
|
+
*
|
|
4
|
+
* Generated by: npx convex-cms init
|
|
5
|
+
*/
|
|
6
|
+
export declare const CMS_CLIENT_TEMPLATE = "/**\n * CMS Client\n *\n * Uses the unified config pattern - all CMS settings are defined\n * once in cms.config.ts and shared with the admin API.\n *\n * @example\n * ```typescript\n * import { cms } from \"./cms\";\n *\n * // Use in a mutation\n * export const createPost = mutation({\n * args: { title: v.string(), createdBy: v.string() },\n * handler: async (ctx, args) => {\n * return await cms.contentEntries.create(ctx, {\n * contentTypeId,\n * data: { title: args.title },\n * createdBy: args.createdBy,\n * });\n * },\n * });\n * ```\n */\n\nimport { createCmsClient } from \"convex-cms\";\nimport { components } from \"./_generated/api\";\nimport cmsConfig from \"./cms.config\";\n\nexport const cms = createCmsClient(components.convexCms, cmsConfig);\n";
|
|
7
|
+
//# sourceMappingURL=cmsClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmsClient.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/cmsClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,mBAAmB,gyBA6B/B,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMS Client template
|
|
3
|
+
*
|
|
4
|
+
* Generated by: npx convex-cms init
|
|
5
|
+
*/
|
|
6
|
+
export const CMS_CLIENT_TEMPLATE = `/**
|
|
7
|
+
* CMS Client
|
|
8
|
+
*
|
|
9
|
+
* Uses the unified config pattern - all CMS settings are defined
|
|
10
|
+
* once in cms.config.ts and shared with the admin API.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* \`\`\`typescript
|
|
14
|
+
* import { cms } from "./cms";
|
|
15
|
+
*
|
|
16
|
+
* // Use in a mutation
|
|
17
|
+
* export const createPost = mutation({
|
|
18
|
+
* args: { title: v.string(), createdBy: v.string() },
|
|
19
|
+
* handler: async (ctx, args) => {
|
|
20
|
+
* return await cms.contentEntries.create(ctx, {
|
|
21
|
+
* contentTypeId,
|
|
22
|
+
* data: { title: args.title },
|
|
23
|
+
* createdBy: args.createdBy,
|
|
24
|
+
* });
|
|
25
|
+
* },
|
|
26
|
+
* });
|
|
27
|
+
* \`\`\`
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import { createCmsClient } from "convex-cms";
|
|
31
|
+
import { components } from "./_generated/api";
|
|
32
|
+
import cmsConfig from "./cms.config";
|
|
33
|
+
|
|
34
|
+
export const cms = createCmsClient(components.convexCms, cmsConfig);
|
|
35
|
+
`;
|
|
36
|
+
//# sourceMappingURL=cmsClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmsClient.js","sourceRoot":"","sources":["../../../src/cli/templates/cmsClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BlC,CAAC"}
|