@cmssy/cli 0.22.4 → 9.1.0

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.
Files changed (248) hide show
  1. package/dist/index.js +435 -0
  2. package/package.json +25 -86
  3. package/LICENSE +0 -21
  4. package/README.md +0 -692
  5. package/config.d.ts +0 -3
  6. package/config.js +0 -4
  7. package/dist/cli.d.ts +0 -3
  8. package/dist/cli.d.ts.map +0 -1
  9. package/dist/cli.js +0 -340
  10. package/dist/cli.js.map +0 -1
  11. package/dist/commands/add-source.d.ts +0 -13
  12. package/dist/commands/add-source.d.ts.map +0 -1
  13. package/dist/commands/add-source.js +0 -273
  14. package/dist/commands/add-source.js.map +0 -1
  15. package/dist/commands/build.d.ts +0 -7
  16. package/dist/commands/build.d.ts.map +0 -1
  17. package/dist/commands/build.js +0 -127
  18. package/dist/commands/build.js.map +0 -1
  19. package/dist/commands/codegen.d.ts +0 -7
  20. package/dist/commands/codegen.d.ts.map +0 -1
  21. package/dist/commands/codegen.js +0 -150
  22. package/dist/commands/codegen.js.map +0 -1
  23. package/dist/commands/configure.d.ts +0 -6
  24. package/dist/commands/configure.d.ts.map +0 -1
  25. package/dist/commands/configure.js +0 -39
  26. package/dist/commands/configure.js.map +0 -1
  27. package/dist/commands/create.d.ts +0 -18
  28. package/dist/commands/create.d.ts.map +0 -1
  29. package/dist/commands/create.js +0 -403
  30. package/dist/commands/create.js.map +0 -1
  31. package/dist/commands/dev.d.ts +0 -6
  32. package/dist/commands/dev.d.ts.map +0 -1
  33. package/dist/commands/dev.js +0 -144
  34. package/dist/commands/dev.js.map +0 -1
  35. package/dist/commands/doctor.d.ts +0 -2
  36. package/dist/commands/doctor.d.ts.map +0 -1
  37. package/dist/commands/doctor.js +0 -230
  38. package/dist/commands/doctor.js.map +0 -1
  39. package/dist/commands/init.d.ts +0 -6
  40. package/dist/commands/init.d.ts.map +0 -1
  41. package/dist/commands/init.js +0 -414
  42. package/dist/commands/init.js.map +0 -1
  43. package/dist/commands/lib.d.ts +0 -17
  44. package/dist/commands/lib.d.ts.map +0 -1
  45. package/dist/commands/lib.js +0 -132
  46. package/dist/commands/lib.js.map +0 -1
  47. package/dist/commands/link.d.ts +0 -8
  48. package/dist/commands/link.d.ts.map +0 -1
  49. package/dist/commands/link.js +0 -116
  50. package/dist/commands/link.js.map +0 -1
  51. package/dist/commands/migrate.d.ts +0 -2
  52. package/dist/commands/migrate.d.ts.map +0 -1
  53. package/dist/commands/migrate.js +0 -231
  54. package/dist/commands/migrate.js.map +0 -1
  55. package/dist/commands/package.d.ts +0 -14
  56. package/dist/commands/package.d.ts.map +0 -1
  57. package/dist/commands/package.js +0 -137
  58. package/dist/commands/package.js.map +0 -1
  59. package/dist/commands/publish-block-buildtime.d.ts +0 -8
  60. package/dist/commands/publish-block-buildtime.d.ts.map +0 -1
  61. package/dist/commands/publish-block-buildtime.js +0 -290
  62. package/dist/commands/publish-block-buildtime.js.map +0 -1
  63. package/dist/commands/publish-template.d.ts +0 -22
  64. package/dist/commands/publish-template.d.ts.map +0 -1
  65. package/dist/commands/publish-template.js +0 -345
  66. package/dist/commands/publish-template.js.map +0 -1
  67. package/dist/commands/publish.d.ts +0 -15
  68. package/dist/commands/publish.d.ts.map +0 -1
  69. package/dist/commands/publish.js +0 -1003
  70. package/dist/commands/publish.js.map +0 -1
  71. package/dist/commands/skills.d.ts +0 -11
  72. package/dist/commands/skills.d.ts.map +0 -1
  73. package/dist/commands/skills.js +0 -178
  74. package/dist/commands/skills.js.map +0 -1
  75. package/dist/commands/sync.d.ts +0 -6
  76. package/dist/commands/sync.d.ts.map +0 -1
  77. package/dist/commands/sync.js +0 -208
  78. package/dist/commands/sync.js.map +0 -1
  79. package/dist/commands/test.d.ts +0 -8
  80. package/dist/commands/test.d.ts.map +0 -1
  81. package/dist/commands/test.js +0 -60
  82. package/dist/commands/test.js.map +0 -1
  83. package/dist/commands/upload.d.ts +0 -11
  84. package/dist/commands/upload.d.ts.map +0 -1
  85. package/dist/commands/upload.js +0 -128
  86. package/dist/commands/upload.js.map +0 -1
  87. package/dist/commands/workspaces.d.ts +0 -2
  88. package/dist/commands/workspaces.d.ts.map +0 -1
  89. package/dist/commands/workspaces.js +0 -62
  90. package/dist/commands/workspaces.js.map +0 -1
  91. package/dist/dev-ui/app.js +0 -1284
  92. package/dist/dev-ui/index.html +0 -1511
  93. package/dist/dev-ui-react/App.tsx +0 -164
  94. package/dist/dev-ui-react/__tests__/previewData.test.ts +0 -193
  95. package/dist/dev-ui-react/components/BlocksList.tsx +0 -232
  96. package/dist/dev-ui-react/components/Editor.tsx +0 -469
  97. package/dist/dev-ui-react/components/Preview.tsx +0 -146
  98. package/dist/dev-ui-react/hooks/useBlocks.ts +0 -80
  99. package/dist/dev-ui-react/index.html +0 -13
  100. package/dist/dev-ui-react/main.tsx +0 -8
  101. package/dist/dev-ui-react/styles.css +0 -856
  102. package/dist/dev-ui-react/types.ts +0 -45
  103. package/dist/skills/claude/cmssy-block.md +0 -454
  104. package/dist/skills/claude/cmssy-mcp-content.md +0 -235
  105. package/dist/test-helpers/index.d.ts +0 -23
  106. package/dist/test-helpers/index.d.ts.map +0 -1
  107. package/dist/test-helpers/index.js +0 -50
  108. package/dist/test-helpers/index.js.map +0 -1
  109. package/dist/types/block-config.d.ts +0 -6
  110. package/dist/types/block-config.d.ts.map +0 -1
  111. package/dist/types/block-config.js +0 -12
  112. package/dist/types/block-config.js.map +0 -1
  113. package/dist/types/publish-job.d.ts +0 -61
  114. package/dist/types/publish-job.d.ts.map +0 -1
  115. package/dist/types/publish-job.js +0 -13
  116. package/dist/types/publish-job.js.map +0 -1
  117. package/dist/utils/api-error.d.ts +0 -10
  118. package/dist/utils/api-error.d.ts.map +0 -1
  119. package/dist/utils/api-error.js +0 -55
  120. package/dist/utils/api-error.js.map +0 -1
  121. package/dist/utils/block-config.d.ts +0 -87
  122. package/dist/utils/block-config.d.ts.map +0 -1
  123. package/dist/utils/block-config.js +0 -214
  124. package/dist/utils/block-config.js.map +0 -1
  125. package/dist/utils/blocks-meta-cache.d.ts +0 -28
  126. package/dist/utils/blocks-meta-cache.d.ts.map +0 -1
  127. package/dist/utils/blocks-meta-cache.js +0 -72
  128. package/dist/utils/blocks-meta-cache.js.map +0 -1
  129. package/dist/utils/builder.d.ts +0 -34
  130. package/dist/utils/builder.d.ts.map +0 -1
  131. package/dist/utils/builder.js +0 -140
  132. package/dist/utils/builder.js.map +0 -1
  133. package/dist/utils/cmssy-config.d.ts +0 -16
  134. package/dist/utils/cmssy-config.d.ts.map +0 -1
  135. package/dist/utils/cmssy-config.js +0 -19
  136. package/dist/utils/cmssy-config.js.map +0 -1
  137. package/dist/utils/config.d.ts +0 -9
  138. package/dist/utils/config.d.ts.map +0 -1
  139. package/dist/utils/config.js +0 -51
  140. package/dist/utils/config.js.map +0 -1
  141. package/dist/utils/dependency-check.d.ts +0 -21
  142. package/dist/utils/dependency-check.d.ts.map +0 -1
  143. package/dist/utils/dependency-check.js +0 -56
  144. package/dist/utils/dependency-check.js.map +0 -1
  145. package/dist/utils/dev-generator/api-routes/blocks.d.ts +0 -3
  146. package/dist/utils/dev-generator/api-routes/blocks.d.ts.map +0 -1
  147. package/dist/utils/dev-generator/api-routes/blocks.js +0 -194
  148. package/dist/utils/dev-generator/api-routes/blocks.js.map +0 -1
  149. package/dist/utils/dev-generator/api-routes/config.d.ts +0 -2
  150. package/dist/utils/dev-generator/api-routes/config.d.ts.map +0 -1
  151. package/dist/utils/dev-generator/api-routes/config.js +0 -107
  152. package/dist/utils/dev-generator/api-routes/config.js.map +0 -1
  153. package/dist/utils/dev-generator/api-routes/preview.d.ts +0 -2
  154. package/dist/utils/dev-generator/api-routes/preview.d.ts.map +0 -1
  155. package/dist/utils/dev-generator/api-routes/preview.js +0 -50
  156. package/dist/utils/dev-generator/api-routes/preview.js.map +0 -1
  157. package/dist/utils/dev-generator/api-routes/workspaces.d.ts +0 -2
  158. package/dist/utils/dev-generator/api-routes/workspaces.d.ts.map +0 -1
  159. package/dist/utils/dev-generator/api-routes/workspaces.js +0 -128
  160. package/dist/utils/dev-generator/api-routes/workspaces.js.map +0 -1
  161. package/dist/utils/dev-generator/helpers.d.ts +0 -23
  162. package/dist/utils/dev-generator/helpers.d.ts.map +0 -1
  163. package/dist/utils/dev-generator/helpers.js +0 -128
  164. package/dist/utils/dev-generator/helpers.js.map +0 -1
  165. package/dist/utils/dev-generator/home-page.d.ts +0 -2
  166. package/dist/utils/dev-generator/home-page.d.ts.map +0 -1
  167. package/dist/utils/dev-generator/home-page.js +0 -643
  168. package/dist/utils/dev-generator/home-page.js.map +0 -1
  169. package/dist/utils/dev-generator/index.d.ts +0 -11
  170. package/dist/utils/dev-generator/index.d.ts.map +0 -1
  171. package/dist/utils/dev-generator/index.js +0 -85
  172. package/dist/utils/dev-generator/index.js.map +0 -1
  173. package/dist/utils/dev-generator/layout.d.ts +0 -3
  174. package/dist/utils/dev-generator/layout.d.ts.map +0 -1
  175. package/dist/utils/dev-generator/layout.js +0 -63
  176. package/dist/utils/dev-generator/layout.js.map +0 -1
  177. package/dist/utils/dev-generator/next-config.d.ts +0 -3
  178. package/dist/utils/dev-generator/next-config.d.ts.map +0 -1
  179. package/dist/utils/dev-generator/next-config.js +0 -111
  180. package/dist/utils/dev-generator/next-config.js.map +0 -1
  181. package/dist/utils/dev-generator/preview-pages.d.ts +0 -3
  182. package/dist/utils/dev-generator/preview-pages.d.ts.map +0 -1
  183. package/dist/utils/dev-generator/preview-pages.js +0 -833
  184. package/dist/utils/dev-generator/preview-pages.js.map +0 -1
  185. package/dist/utils/dev-generator.d.ts +0 -12
  186. package/dist/utils/dev-generator.d.ts.map +0 -1
  187. package/dist/utils/dev-generator.js +0 -1752
  188. package/dist/utils/dev-generator.js.map +0 -1
  189. package/dist/utils/field-schema.d.ts +0 -13
  190. package/dist/utils/field-schema.d.ts.map +0 -1
  191. package/dist/utils/field-schema.js +0 -182
  192. package/dist/utils/field-schema.js.map +0 -1
  193. package/dist/utils/graphql.d.ts +0 -39
  194. package/dist/utils/graphql.d.ts.map +0 -1
  195. package/dist/utils/graphql.js +0 -138
  196. package/dist/utils/graphql.js.map +0 -1
  197. package/dist/utils/lib-manifest.d.ts +0 -7
  198. package/dist/utils/lib-manifest.d.ts.map +0 -1
  199. package/dist/utils/lib-manifest.js +0 -59
  200. package/dist/utils/lib-manifest.js.map +0 -1
  201. package/dist/utils/publish-helpers.d.ts +0 -43
  202. package/dist/utils/publish-helpers.d.ts.map +0 -1
  203. package/dist/utils/publish-helpers.js +0 -215
  204. package/dist/utils/publish-helpers.js.map +0 -1
  205. package/dist/utils/publish-helpers.test.d.ts +0 -2
  206. package/dist/utils/publish-helpers.test.d.ts.map +0 -1
  207. package/dist/utils/publish-helpers.test.js +0 -24
  208. package/dist/utils/publish-helpers.test.js.map +0 -1
  209. package/dist/utils/resolve-workspace.d.ts +0 -6
  210. package/dist/utils/resolve-workspace.d.ts.map +0 -1
  211. package/dist/utils/resolve-workspace.js +0 -32
  212. package/dist/utils/resolve-workspace.js.map +0 -1
  213. package/dist/utils/scanner.d.ts +0 -42
  214. package/dist/utils/scanner.d.ts.map +0 -1
  215. package/dist/utils/scanner.js +0 -156
  216. package/dist/utils/scanner.js.map +0 -1
  217. package/dist/utils/schema-diff.d.ts +0 -22
  218. package/dist/utils/schema-diff.d.ts.map +0 -1
  219. package/dist/utils/schema-diff.js +0 -107
  220. package/dist/utils/schema-diff.js.map +0 -1
  221. package/dist/utils/source-collector.d.ts +0 -19
  222. package/dist/utils/source-collector.d.ts.map +0 -1
  223. package/dist/utils/source-collector.js +0 -565
  224. package/dist/utils/source-collector.js.map +0 -1
  225. package/dist/utils/theme-builder.d.ts +0 -12
  226. package/dist/utils/theme-builder.d.ts.map +0 -1
  227. package/dist/utils/theme-builder.js +0 -117
  228. package/dist/utils/theme-builder.js.map +0 -1
  229. package/dist/utils/type-generator.d.ts +0 -9
  230. package/dist/utils/type-generator.d.ts.map +0 -1
  231. package/dist/utils/type-generator.js +0 -86
  232. package/dist/utils/type-generator.js.map +0 -1
  233. package/dist/utils/version.d.ts +0 -10
  234. package/dist/utils/version.d.ts.map +0 -1
  235. package/dist/utils/version.js +0 -30
  236. package/dist/utils/version.js.map +0 -1
  237. package/dist/utils/versions.d.ts.map +0 -1
  238. package/dist/utils/versions.js.map +0 -1
  239. package/src/dev-app/app/api/blocks/[name]/config/route.ts +0 -140
  240. package/src/dev-app/app/api/blocks/route.ts +0 -61
  241. package/src/dev-app/app/api/config/route.ts +0 -98
  242. package/src/dev-app/app/api/context/route.ts +0 -126
  243. package/src/dev-app/app/api/preview/[name]/route.ts +0 -137
  244. package/src/dev-app/app/api/workspaces/route.ts +0 -124
  245. package/src/dev-app/app/layout.tsx +0 -18
  246. package/src/dev-app/app/page.tsx +0 -1785
  247. package/test.d.ts +0 -1
  248. package/test.js +0 -2
@@ -1,117 +0,0 @@
1
- const BORDER_RADIUS_MAP = {
2
- none: "0",
3
- sm: "0.25rem",
4
- md: "0.5rem",
5
- lg: "0.625rem",
6
- full: "9999px",
7
- };
8
- const COLOR_MAP = {
9
- primary: "primary",
10
- primaryForeground: "primary-foreground",
11
- secondary: "secondary",
12
- secondaryForeground: "secondary-foreground",
13
- accent: "accent",
14
- accentForeground: "accent-foreground",
15
- background: "background",
16
- foreground: "foreground",
17
- muted: "muted",
18
- mutedForeground: "muted-foreground",
19
- card: "card",
20
- cardForeground: "card-foreground",
21
- border: "border",
22
- input: "input",
23
- ring: "ring",
24
- destructive: "destructive",
25
- };
26
- const TYPO_MAP = {
27
- h1: "font-size-h1",
28
- h2: "font-size-h2",
29
- h3: "font-size-h3",
30
- h4: "font-size-h4",
31
- h5: "font-size-h5",
32
- h6: "font-size-h6",
33
- body: "font-size-body",
34
- small: "font-size-small",
35
- };
36
- /**
37
- * Build CSS from a DefineThemeConfig.
38
- * Returns a complete stylesheet string.
39
- */
40
- export function buildThemeCSS(theme) {
41
- const lines = [];
42
- lines.push(`/* Cmssy Theme: ${theme.name} */`);
43
- // Font variables
44
- const vars = [];
45
- if (theme.fonts?.heading) {
46
- vars.push(`--font-heading: "${theme.fonts.heading.family}", serif`);
47
- }
48
- if (theme.fonts?.body) {
49
- vars.push(`--font-body: "${theme.fonts.body.family}", sans-serif`);
50
- }
51
- // Color variables
52
- if (theme.colors) {
53
- for (const [key, cssVar] of Object.entries(COLOR_MAP)) {
54
- const value = theme.colors[key];
55
- if (value)
56
- vars.push(`--${cssVar}: ${value}`);
57
- }
58
- }
59
- // Typography variables
60
- if (theme.typography) {
61
- for (const [key, cssVar] of Object.entries(TYPO_MAP)) {
62
- const value = theme.typography[key];
63
- if (value)
64
- vars.push(`--${cssVar}: ${value}`);
65
- }
66
- }
67
- // Spacing + border radius
68
- if (theme.spacing != null) {
69
- vars.push(`--theme-spacing: ${theme.spacing}`);
70
- }
71
- if (theme.borderRadius) {
72
- vars.push(`--radius: ${BORDER_RADIUS_MAP[theme.borderRadius] ?? "0.625rem"}`);
73
- }
74
- // Custom variables
75
- if (theme.customVariables) {
76
- for (const [key, value] of Object.entries(theme.customVariables)) {
77
- vars.push(`${key}: ${value}`);
78
- }
79
- }
80
- if (vars.length > 0) {
81
- lines.push(`:root {\n ${vars.join(";\n ")};\n}`);
82
- }
83
- // Typography tag styles
84
- if (theme.typography) {
85
- const tags = ["h1", "h2", "h3", "h4", "h5", "h6"];
86
- for (const tag of tags) {
87
- const val = theme.typography[tag];
88
- if (val) {
89
- lines.push(`${tag} { font-size: var(--font-size-${tag}, ${val}); }`);
90
- }
91
- }
92
- if (theme.typography.body) {
93
- lines.push(`body { font-size: var(--font-size-body, ${theme.typography.body}); }`);
94
- }
95
- if (theme.typography.small) {
96
- lines.push(`small { font-size: var(--font-size-small, ${theme.typography.small}); }`);
97
- }
98
- }
99
- // Dark mode overrides
100
- if (theme.darkColors) {
101
- const darkVars = [];
102
- for (const [key, cssVar] of Object.entries(COLOR_MAP)) {
103
- const value = theme.darkColors[key];
104
- if (value)
105
- darkVars.push(`--${cssVar}: ${value}`);
106
- }
107
- if (darkVars.length > 0) {
108
- lines.push(`.dark {\n ${darkVars.join(";\n ")};\n}`);
109
- }
110
- }
111
- // Custom CSS
112
- if (theme.customCSS) {
113
- lines.push(theme.customCSS);
114
- }
115
- return lines.join("\n\n");
116
- }
117
- //# sourceMappingURL=theme-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"theme-builder.js","sourceRoot":"","sources":["../../src/utils/theme-builder.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { FieldConfig } from "../types/block-config.js";
2
- import { FieldTypeDefinition } from "./field-schema.js";
3
- export interface GenerateTypesOptions {
4
- blockPath: string;
5
- schema: Record<string, FieldConfig>;
6
- fieldTypes?: FieldTypeDefinition[];
7
- }
8
- export declare function generateTypes(options: GenerateTypesOptions): Promise<void>;
9
- //# sourceMappingURL=type-generator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"type-generator.d.ts","sourceRoot":"","sources":["../../src/utils/type-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EAGZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAmBxD,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACpC;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkBf"}
@@ -1,86 +0,0 @@
1
- import fs from "fs-extra";
2
- import path from "path";
3
- // Default value type mappings (used when field types are not provided)
4
- const DEFAULT_VALUE_TYPES = {
5
- singleLine: "string",
6
- multiLine: "string",
7
- richText: "string",
8
- numeric: "number",
9
- date: "string",
10
- media: "string",
11
- link: "string",
12
- select: "string",
13
- multiselect: "string[]",
14
- boolean: "boolean",
15
- color: "string",
16
- repeater: "Record<string, unknown>[]",
17
- form: "string",
18
- };
19
- export async function generateTypes(options) {
20
- const { blockPath, schema, fieldTypes } = options;
21
- const typeDefinition = generateTypeDefinition({
22
- schema,
23
- fieldTypes,
24
- indent: " ",
25
- });
26
- const outputPath = path.join(blockPath, "src", "block.d.ts");
27
- const fileContent = `// Auto-generated from config.ts
28
- // DO NOT EDIT - This file is automatically regenerated
29
-
30
- export interface BlockContent {
31
- ${typeDefinition}
32
- }
33
- `;
34
- await fs.writeFile(outputPath, fileContent);
35
- }
36
- function generateTypeDefinition(options) {
37
- const { schema, fieldTypes, indent = " " } = options;
38
- const lines = [];
39
- Object.entries(schema).forEach(([key, field]) => {
40
- const optional = field.required ? "" : "?";
41
- const tsType = mapFieldTypeToTypeScript({ field, fieldTypes, indent });
42
- if (field.helpText) {
43
- lines.push(`${indent}/** ${field.helpText} */`);
44
- }
45
- lines.push(`${indent}${key}${optional}: ${tsType};`);
46
- });
47
- return lines.join("\n");
48
- }
49
- function mapFieldTypeToTypeScript(options) {
50
- const { field, fieldTypes, indent = " " } = options;
51
- // Special handling for select (generate union type from options)
52
- if (field.type === "select") {
53
- const selectField = field;
54
- if (selectField.options && selectField.options.length > 0) {
55
- const unionTypes = selectField.options
56
- .map((opt) => `"${opt.value}"`)
57
- .join(" | ");
58
- return unionTypes;
59
- }
60
- return "string";
61
- }
62
- // Special handling for repeater (generate nested type from schema)
63
- if (field.type === "repeater") {
64
- const repeaterField = field;
65
- if (repeaterField.schema) {
66
- const nestedIndent = indent + " ";
67
- const nestedType = `{\n${generateTypeDefinition({
68
- schema: repeaterField.schema,
69
- fieldTypes,
70
- indent: nestedIndent,
71
- })}\n${indent}}`;
72
- return `Array<${nestedType}>`;
73
- }
74
- return "any[]";
75
- }
76
- // Look up valueType from backend field types
77
- if (fieldTypes) {
78
- const fieldTypeDef = fieldTypes.find((ft) => ft.type === field.type);
79
- if (fieldTypeDef?.valueType) {
80
- return fieldTypeDef.valueType;
81
- }
82
- }
83
- // Fall back to default mappings
84
- return DEFAULT_VALUE_TYPES[field.type] || "any";
85
- }
86
- //# sourceMappingURL=type-generator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"type-generator.js","sourceRoot":"","sources":["../../src/utils/type-generator.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /** This CLI's package name, e.g. "@cmssy/cli". */
2
- export declare const CLI_NAME: string;
3
- /** This CLI's semver version, e.g. "0.22.2". */
4
- export declare const CLI_VERSION: string;
5
- /**
6
- * Headers every request should carry so the API can identify the client and,
7
- * in the future, warn/reject on incompatible versions.
8
- */
9
- export declare function clientHeaders(): Record<string, string>;
10
- //# sourceMappingURL=version.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"AAoBA,kDAAkD;AAClD,eAAO,MAAM,QAAQ,QAA2B,CAAC;AAEjD,gDAAgD;AAChD,eAAO,MAAM,WAAW,QAAyB,CAAC;AAElD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKtD"}
@@ -1,30 +0,0 @@
1
- import { readFileSync } from "fs";
2
- import { fileURLToPath } from "url";
3
- import { dirname, join } from "path";
4
- const __dirname = dirname(fileURLToPath(import.meta.url));
5
- function readPkg() {
6
- // Works for both src/utils/version.ts and dist/utils/version.js
7
- // (package.json is two levels up in both layouts).
8
- try {
9
- return JSON.parse(readFileSync(join(__dirname, "../../package.json"), "utf-8"));
10
- }
11
- catch {
12
- return {};
13
- }
14
- }
15
- const pkg = readPkg();
16
- /** This CLI's package name, e.g. "@cmssy/cli". */
17
- export const CLI_NAME = pkg.name ?? "@cmssy/cli";
18
- /** This CLI's semver version, e.g. "0.22.2". */
19
- export const CLI_VERSION = pkg.version ?? "0.0.0";
20
- /**
21
- * Headers every request should carry so the API can identify the client and,
22
- * in the future, warn/reject on incompatible versions.
23
- */
24
- export function clientHeaders() {
25
- return {
26
- "x-client-name": CLI_NAME,
27
- "x-client-version": CLI_VERSION,
28
- };
29
- }
30
- //# sourceMappingURL=version.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,SAAS,OAAO;IACd,gEAAgE;IAChE,mDAAmD;IACnD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CACf,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CAC7D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AAEtB,kDAAkD;AAClD,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,IAAI,YAAY,CAAC;AAEjD,gDAAgD;AAChD,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;AAElD;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,eAAe,EAAE,QAAQ;QACzB,kBAAkB,EAAE,WAAW;KAChC,CAAC;AACJ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../../src/utils/versions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;CAUX,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/utils/versions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,UAAU;IAChB,UAAU,EAAE,QAAQ;IACpB,WAAW,EAAE,SAAS;IACtB,eAAe,EAAE,SAAS;IAC1B,UAAU,EAAE,SAAS;IACrB,aAAa,EAAE,SAAS;IACxB,SAAS,EAAE,SAAS;CACZ,CAAC"}
@@ -1,140 +0,0 @@
1
- import { NextResponse } from "next/server";
2
- import fs from "fs";
3
- import path from "path";
4
- import { execSync } from "child_process";
5
-
6
- const projectRoot = process.env.CMSSY_PROJECT_ROOT || process.cwd();
7
- const SAFE_NAME_RE = /^[a-zA-Z0-9_-]+$/;
8
-
9
- function loadBlockConfig(blockPath: string): Record<string, unknown> | null {
10
- const configPath = path.join(blockPath, "config.ts");
11
- if (!fs.existsSync(configPath)) return null;
12
-
13
- try {
14
- const tsxPaths = [
15
- path.join(projectRoot, "node_modules", ".bin", "tsx"),
16
- path.join(
17
- projectRoot,
18
- "node_modules",
19
- "cmssy-cli",
20
- "node_modules",
21
- ".bin",
22
- "tsx",
23
- ),
24
- ];
25
- const tsxBinary = tsxPaths.find((p) => fs.existsSync(p)) || "npx -y tsx";
26
-
27
- const cacheDir = path.join(projectRoot, ".cmssy", "cache");
28
- fs.mkdirSync(cacheDir, { recursive: true });
29
-
30
- const tempDir = fs.mkdtempSync(path.join(cacheDir, "block-config-"));
31
- try {
32
- const mockConfigPath = path.join(tempDir, "cmssy-cli-config.mjs");
33
- fs.writeFileSync(
34
- mockConfigPath,
35
- "export const defineBlock = (config) => config;\nexport const defineTemplate = (config) => config;\nexport const field = (config) => config;",
36
- );
37
-
38
- const configContent = fs.readFileSync(configPath, "utf-8");
39
- const modified = configContent.replace(
40
- /from\s+['"](?:@cmssy\/cli\/config|cmssy-cli\/config)['"]/g,
41
- `from '${mockConfigPath.replace(/\\\\/g, "/")}'`,
42
- );
43
-
44
- const tempPath = path.join(tempDir, "temp-block-config.ts");
45
- fs.writeFileSync(tempPath, modified);
46
-
47
- const evalCode = `import cfg from '${tempPath.replace(/\\\\/g, "/")}'; console.log(JSON.stringify(cfg.default || cfg));`;
48
- const cmd = tsxBinary.includes("npx")
49
- ? `${tsxBinary} --eval "${evalCode}"`
50
- : `"${tsxBinary}" --eval "${evalCode}"`;
51
-
52
- const output = execSync(cmd, {
53
- encoding: "utf-8",
54
- cwd: projectRoot,
55
- stdio: ["pipe", "pipe", "pipe"],
56
- });
57
-
58
- const lines = output.trim().split("\n");
59
- return JSON.parse(lines[lines.length - 1]);
60
- } finally {
61
- try {
62
- fs.rmSync(tempDir, { recursive: true });
63
- } catch {}
64
- }
65
- } catch {
66
- return null;
67
- }
68
- }
69
-
70
- export async function GET(
71
- _request: Request,
72
- { params }: { params: Promise<{ name: string }> },
73
- ) {
74
- const { name } = await params;
75
- if (!SAFE_NAME_RE.test(name)) {
76
- return NextResponse.json({ error: "Invalid name" }, { status: 400 });
77
- }
78
-
79
- let blockPath = path.join(projectRoot, "blocks", name);
80
- if (!fs.existsSync(blockPath)) {
81
- blockPath = path.join(projectRoot, "templates", name);
82
- }
83
-
84
- if (!fs.existsSync(blockPath)) {
85
- return NextResponse.json({ error: "Block not found" }, { status: 404 });
86
- }
87
-
88
- const previewPath = path.join(blockPath, "preview.json");
89
- const previewData = fs.existsSync(previewPath)
90
- ? JSON.parse(fs.readFileSync(previewPath, "utf-8"))
91
- : {};
92
-
93
- const config = loadBlockConfig(blockPath);
94
-
95
- const pagesJsonPath = path.join(blockPath, "pages.json");
96
- let pagesData = fs.existsSync(pagesJsonPath)
97
- ? JSON.parse(fs.readFileSync(pagesJsonPath, "utf-8"))
98
- : null;
99
-
100
- if (!pagesData && config && (config.pages || config.layoutPositions)) {
101
- const layoutPositions: Record<string, any> = {};
102
- if (Array.isArray(config.layoutPositions)) {
103
- for (const lp of config.layoutPositions as any[]) {
104
- layoutPositions[lp.position] = {
105
- type: lp.type,
106
- content: lp.content || {},
107
- };
108
- }
109
- } else if (
110
- config.layoutPositions &&
111
- typeof config.layoutPositions === "object"
112
- ) {
113
- Object.assign(layoutPositions, config.layoutPositions);
114
- }
115
-
116
- const pages = ((config.pages || []) as any[]).map(
117
- (page: any, index: number) => ({
118
- name: page.name,
119
- slug:
120
- page.slug === "home" || page.slug === "/" || index === 0
121
- ? "/"
122
- : page.slug.startsWith("/")
123
- ? page.slug
124
- : "/" + page.slug,
125
- blocks: page.blocks || [],
126
- }),
127
- );
128
-
129
- pagesData = { layoutPositions, pages };
130
- }
131
-
132
- return NextResponse.json({
133
- name,
134
- schema: config?.schema || {},
135
- previewData,
136
- pages: config?.pages,
137
- layoutPositions: config?.layoutPositions,
138
- pagesData,
139
- });
140
- }
@@ -1,61 +0,0 @@
1
- import { NextResponse } from "next/server";
2
- import fs from "fs";
3
- import path from "path";
4
-
5
- const projectRoot = process.env.CMSSY_PROJECT_ROOT || process.cwd();
6
-
7
- export async function GET() {
8
- const blocks: any[] = [];
9
-
10
- const blocksDir = path.join(projectRoot, "blocks");
11
- if (fs.existsSync(blocksDir)) {
12
- const dirs = fs
13
- .readdirSync(blocksDir, { withFileTypes: true })
14
- .filter((d) => d.isDirectory());
15
-
16
- for (const dir of dirs) {
17
- const pkgPath = path.join(blocksDir, dir.name, "package.json");
18
- const pkg = fs.existsSync(pkgPath)
19
- ? JSON.parse(fs.readFileSync(pkgPath, "utf-8"))
20
- : {};
21
- blocks.push({
22
- type: "block",
23
- name: dir.name,
24
- displayName: pkg.cmssy?.displayName || dir.name,
25
- version: pkg.version || "1.0.0",
26
- category: pkg.cmssy?.category || "other",
27
- tags: pkg.cmssy?.tags || [],
28
- description: pkg.description || "",
29
- hasConfig: fs.existsSync(path.join(blocksDir, dir.name, "config.ts")),
30
- });
31
- }
32
- }
33
-
34
- const templatesDir = path.join(projectRoot, "templates");
35
- if (fs.existsSync(templatesDir)) {
36
- const dirs = fs
37
- .readdirSync(templatesDir, { withFileTypes: true })
38
- .filter((d) => d.isDirectory());
39
-
40
- for (const dir of dirs) {
41
- const pkgPath = path.join(templatesDir, dir.name, "package.json");
42
- const pkg = fs.existsSync(pkgPath)
43
- ? JSON.parse(fs.readFileSync(pkgPath, "utf-8"))
44
- : {};
45
- blocks.push({
46
- type: "template",
47
- name: dir.name,
48
- displayName: pkg.cmssy?.displayName || dir.name,
49
- version: pkg.version || "1.0.0",
50
- category: pkg.cmssy?.category || "pages",
51
- tags: pkg.cmssy?.tags || [],
52
- description: pkg.description || "",
53
- hasConfig: fs.existsSync(
54
- path.join(templatesDir, dir.name, "config.ts"),
55
- ),
56
- });
57
- }
58
- }
59
-
60
- return NextResponse.json(blocks);
61
- }
@@ -1,98 +0,0 @@
1
- import { NextResponse } from "next/server";
2
- import fs from "fs";
3
- import path from "path";
4
-
5
- const projectRoot = process.env.CMSSY_PROJECT_ROOT || process.cwd();
6
-
7
- function getEnvPath() {
8
- return path.join(projectRoot, ".env");
9
- }
10
-
11
- function readEnv(): Record<string, string> {
12
- const envPath = getEnvPath();
13
- const result: Record<string, string> = {};
14
- if (!fs.existsSync(envPath)) return result;
15
- const content = fs.readFileSync(envPath, "utf-8");
16
- for (const line of content.split("\n")) {
17
- const match = line.match(/^([A-Z_]+)=(.*)$/);
18
- if (match) result[match[1]] = match[2].trim();
19
- }
20
- return result;
21
- }
22
-
23
- function writeEnv(updates: Record<string, string>) {
24
- const envPath = getEnvPath();
25
- let content = fs.existsSync(envPath) ? fs.readFileSync(envPath, "utf-8") : "";
26
-
27
- for (const [key, value] of Object.entries(updates)) {
28
- const regex = new RegExp(`^(${key})=.*$`, "m");
29
- if (regex.test(content)) {
30
- content = content.replace(regex, `${key}=${value}`);
31
- } else {
32
- content = content.trimEnd() + "\n" + `${key}=${value}` + "\n";
33
- }
34
- }
35
-
36
- fs.writeFileSync(envPath, content);
37
- }
38
-
39
- function maskToken(token: string | undefined): string | null {
40
- if (!token || token.length < 8) return token ? "***" : null;
41
- return token.substring(0, 3) + "***" + token.substring(token.length - 3);
42
- }
43
-
44
- function readCmssyConfig(): Record<string, any> | null {
45
- const configPath = path.join(projectRoot, "cmssy.config.js");
46
- if (!fs.existsSync(configPath)) return null;
47
- try {
48
- const content = fs.readFileSync(configPath, "utf-8");
49
- const match = content.match(/export\s+default\s+({[\s\S]*});?/);
50
- if (match)
51
- return JSON.parse(match[1].replace(/,\s*}/g, "}").replace(/'/g, '"'));
52
- } catch {}
53
- return null;
54
- }
55
-
56
- export async function GET() {
57
- const env = readEnv();
58
- const cmssyConfig = readCmssyConfig();
59
-
60
- return NextResponse.json({
61
- env: {
62
- apiUrl: env.CMSSY_API_URL || "https://api.cmssy.io/graphql",
63
- hasToken: !!env.CMSSY_API_TOKEN,
64
- maskedToken: maskToken(env.CMSSY_API_TOKEN),
65
- workspaceId: env.CMSSY_WORKSPACE_ID || null,
66
- },
67
- project: cmssyConfig,
68
- });
69
- }
70
-
71
- export async function PUT(request: Request) {
72
- try {
73
- const body = await request.json();
74
- const updates: Record<string, string> = {};
75
-
76
- if (body.apiUrl !== undefined) {
77
- updates.CMSSY_API_URL = body.apiUrl;
78
- }
79
- if (body.apiToken !== undefined) {
80
- updates.CMSSY_API_TOKEN = body.apiToken;
81
- }
82
- if (body.workspaceId !== undefined) {
83
- updates.CMSSY_WORKSPACE_ID = body.workspaceId;
84
- }
85
-
86
- if (Object.keys(updates).length === 0) {
87
- return NextResponse.json(
88
- { error: "No values to update" },
89
- { status: 400 },
90
- );
91
- }
92
-
93
- writeEnv(updates);
94
- return NextResponse.json({ success: true });
95
- } catch (error: any) {
96
- return NextResponse.json({ error: error.message }, { status: 500 });
97
- }
98
- }