@cmssy/cli 0.22.3 → 1.0.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 (260) hide show
  1. package/README.md +49 -650
  2. package/dist/cli.js +706 -328
  3. package/package.json +26 -73
  4. package/templates/block/Component.module.css.tpl +12 -0
  5. package/templates/block/Component.tsx.tpl +15 -0
  6. package/templates/block/block.ts.tpl +11 -0
  7. package/templates/init/app/[[...path]]/page.tsx +19 -0
  8. package/templates/init/app/api/draft/route.ts +5 -0
  9. package/templates/init/blocks/hero/Hero.module.css +131 -0
  10. package/templates/init/blocks/hero/Hero.tsx +100 -0
  11. package/templates/init/blocks/hero/block.ts +21 -0
  12. package/templates/init/cmssy/blocks.ts +5 -0
  13. package/templates/init/cmssy/editor.tsx +10 -0
  14. package/templates/init/cmssy.config.ts +8 -0
  15. package/templates/init/env.example +4 -0
  16. package/templates/init/next.config.mjs +8 -0
  17. package/templates/init/proxy.ts +32 -0
  18. package/config.d.ts +0 -3
  19. package/config.js +0 -4
  20. package/dist/cli.d.ts +0 -3
  21. package/dist/cli.d.ts.map +0 -1
  22. package/dist/cli.js.map +0 -1
  23. package/dist/commands/add-source.d.ts +0 -13
  24. package/dist/commands/add-source.d.ts.map +0 -1
  25. package/dist/commands/add-source.js +0 -273
  26. package/dist/commands/add-source.js.map +0 -1
  27. package/dist/commands/build.d.ts +0 -7
  28. package/dist/commands/build.d.ts.map +0 -1
  29. package/dist/commands/build.js +0 -127
  30. package/dist/commands/build.js.map +0 -1
  31. package/dist/commands/codegen.d.ts +0 -7
  32. package/dist/commands/codegen.d.ts.map +0 -1
  33. package/dist/commands/codegen.js +0 -150
  34. package/dist/commands/codegen.js.map +0 -1
  35. package/dist/commands/configure.d.ts +0 -6
  36. package/dist/commands/configure.d.ts.map +0 -1
  37. package/dist/commands/configure.js +0 -39
  38. package/dist/commands/configure.js.map +0 -1
  39. package/dist/commands/create.d.ts +0 -18
  40. package/dist/commands/create.d.ts.map +0 -1
  41. package/dist/commands/create.js +0 -403
  42. package/dist/commands/create.js.map +0 -1
  43. package/dist/commands/dev.d.ts +0 -6
  44. package/dist/commands/dev.d.ts.map +0 -1
  45. package/dist/commands/dev.js +0 -144
  46. package/dist/commands/dev.js.map +0 -1
  47. package/dist/commands/doctor.d.ts +0 -2
  48. package/dist/commands/doctor.d.ts.map +0 -1
  49. package/dist/commands/doctor.js +0 -230
  50. package/dist/commands/doctor.js.map +0 -1
  51. package/dist/commands/init.d.ts +0 -6
  52. package/dist/commands/init.d.ts.map +0 -1
  53. package/dist/commands/init.js +0 -414
  54. package/dist/commands/init.js.map +0 -1
  55. package/dist/commands/lib.d.ts +0 -17
  56. package/dist/commands/lib.d.ts.map +0 -1
  57. package/dist/commands/lib.js +0 -132
  58. package/dist/commands/lib.js.map +0 -1
  59. package/dist/commands/link.d.ts +0 -8
  60. package/dist/commands/link.d.ts.map +0 -1
  61. package/dist/commands/link.js +0 -116
  62. package/dist/commands/link.js.map +0 -1
  63. package/dist/commands/migrate.d.ts +0 -2
  64. package/dist/commands/migrate.d.ts.map +0 -1
  65. package/dist/commands/migrate.js +0 -231
  66. package/dist/commands/migrate.js.map +0 -1
  67. package/dist/commands/package.d.ts +0 -14
  68. package/dist/commands/package.d.ts.map +0 -1
  69. package/dist/commands/package.js +0 -137
  70. package/dist/commands/package.js.map +0 -1
  71. package/dist/commands/publish-block-buildtime.d.ts +0 -8
  72. package/dist/commands/publish-block-buildtime.d.ts.map +0 -1
  73. package/dist/commands/publish-block-buildtime.js +0 -290
  74. package/dist/commands/publish-block-buildtime.js.map +0 -1
  75. package/dist/commands/publish-template.d.ts +0 -22
  76. package/dist/commands/publish-template.d.ts.map +0 -1
  77. package/dist/commands/publish-template.js +0 -345
  78. package/dist/commands/publish-template.js.map +0 -1
  79. package/dist/commands/publish.d.ts +0 -15
  80. package/dist/commands/publish.d.ts.map +0 -1
  81. package/dist/commands/publish.js +0 -1003
  82. package/dist/commands/publish.js.map +0 -1
  83. package/dist/commands/skills.d.ts +0 -11
  84. package/dist/commands/skills.d.ts.map +0 -1
  85. package/dist/commands/skills.js +0 -178
  86. package/dist/commands/skills.js.map +0 -1
  87. package/dist/commands/sync.d.ts +0 -6
  88. package/dist/commands/sync.d.ts.map +0 -1
  89. package/dist/commands/sync.js +0 -208
  90. package/dist/commands/sync.js.map +0 -1
  91. package/dist/commands/test.d.ts +0 -8
  92. package/dist/commands/test.d.ts.map +0 -1
  93. package/dist/commands/test.js +0 -60
  94. package/dist/commands/test.js.map +0 -1
  95. package/dist/commands/upload.d.ts +0 -11
  96. package/dist/commands/upload.d.ts.map +0 -1
  97. package/dist/commands/upload.js +0 -128
  98. package/dist/commands/upload.js.map +0 -1
  99. package/dist/commands/workspaces.d.ts +0 -2
  100. package/dist/commands/workspaces.d.ts.map +0 -1
  101. package/dist/commands/workspaces.js +0 -62
  102. package/dist/commands/workspaces.js.map +0 -1
  103. package/dist/dev-ui/app.js +0 -1284
  104. package/dist/dev-ui/index.html +0 -1511
  105. package/dist/dev-ui-react/App.tsx +0 -164
  106. package/dist/dev-ui-react/__tests__/previewData.test.ts +0 -193
  107. package/dist/dev-ui-react/components/BlocksList.tsx +0 -232
  108. package/dist/dev-ui-react/components/Editor.tsx +0 -469
  109. package/dist/dev-ui-react/components/Preview.tsx +0 -146
  110. package/dist/dev-ui-react/hooks/useBlocks.ts +0 -80
  111. package/dist/dev-ui-react/index.html +0 -13
  112. package/dist/dev-ui-react/main.tsx +0 -8
  113. package/dist/dev-ui-react/styles.css +0 -856
  114. package/dist/dev-ui-react/types.ts +0 -45
  115. package/dist/skills/claude/cmssy-block.md +0 -454
  116. package/dist/skills/claude/cmssy-mcp-content.md +0 -231
  117. package/dist/test-helpers/index.d.ts +0 -23
  118. package/dist/test-helpers/index.d.ts.map +0 -1
  119. package/dist/test-helpers/index.js +0 -50
  120. package/dist/test-helpers/index.js.map +0 -1
  121. package/dist/types/block-config.d.ts +0 -6
  122. package/dist/types/block-config.d.ts.map +0 -1
  123. package/dist/types/block-config.js +0 -12
  124. package/dist/types/block-config.js.map +0 -1
  125. package/dist/types/publish-job.d.ts +0 -61
  126. package/dist/types/publish-job.d.ts.map +0 -1
  127. package/dist/types/publish-job.js +0 -13
  128. package/dist/types/publish-job.js.map +0 -1
  129. package/dist/utils/api-error.d.ts +0 -10
  130. package/dist/utils/api-error.d.ts.map +0 -1
  131. package/dist/utils/api-error.js +0 -55
  132. package/dist/utils/api-error.js.map +0 -1
  133. package/dist/utils/block-config.d.ts +0 -87
  134. package/dist/utils/block-config.d.ts.map +0 -1
  135. package/dist/utils/block-config.js +0 -214
  136. package/dist/utils/block-config.js.map +0 -1
  137. package/dist/utils/blocks-meta-cache.d.ts +0 -28
  138. package/dist/utils/blocks-meta-cache.d.ts.map +0 -1
  139. package/dist/utils/blocks-meta-cache.js +0 -72
  140. package/dist/utils/blocks-meta-cache.js.map +0 -1
  141. package/dist/utils/builder.d.ts +0 -34
  142. package/dist/utils/builder.d.ts.map +0 -1
  143. package/dist/utils/builder.js +0 -140
  144. package/dist/utils/builder.js.map +0 -1
  145. package/dist/utils/cmssy-config.d.ts +0 -16
  146. package/dist/utils/cmssy-config.d.ts.map +0 -1
  147. package/dist/utils/cmssy-config.js +0 -19
  148. package/dist/utils/cmssy-config.js.map +0 -1
  149. package/dist/utils/config.d.ts +0 -9
  150. package/dist/utils/config.d.ts.map +0 -1
  151. package/dist/utils/config.js +0 -51
  152. package/dist/utils/config.js.map +0 -1
  153. package/dist/utils/dependency-check.d.ts +0 -21
  154. package/dist/utils/dependency-check.d.ts.map +0 -1
  155. package/dist/utils/dependency-check.js +0 -56
  156. package/dist/utils/dependency-check.js.map +0 -1
  157. package/dist/utils/dev-generator/api-routes/blocks.d.ts +0 -3
  158. package/dist/utils/dev-generator/api-routes/blocks.d.ts.map +0 -1
  159. package/dist/utils/dev-generator/api-routes/blocks.js +0 -194
  160. package/dist/utils/dev-generator/api-routes/blocks.js.map +0 -1
  161. package/dist/utils/dev-generator/api-routes/config.d.ts +0 -2
  162. package/dist/utils/dev-generator/api-routes/config.d.ts.map +0 -1
  163. package/dist/utils/dev-generator/api-routes/config.js +0 -107
  164. package/dist/utils/dev-generator/api-routes/config.js.map +0 -1
  165. package/dist/utils/dev-generator/api-routes/preview.d.ts +0 -2
  166. package/dist/utils/dev-generator/api-routes/preview.d.ts.map +0 -1
  167. package/dist/utils/dev-generator/api-routes/preview.js +0 -50
  168. package/dist/utils/dev-generator/api-routes/preview.js.map +0 -1
  169. package/dist/utils/dev-generator/api-routes/workspaces.d.ts +0 -2
  170. package/dist/utils/dev-generator/api-routes/workspaces.d.ts.map +0 -1
  171. package/dist/utils/dev-generator/api-routes/workspaces.js +0 -128
  172. package/dist/utils/dev-generator/api-routes/workspaces.js.map +0 -1
  173. package/dist/utils/dev-generator/helpers.d.ts +0 -23
  174. package/dist/utils/dev-generator/helpers.d.ts.map +0 -1
  175. package/dist/utils/dev-generator/helpers.js +0 -128
  176. package/dist/utils/dev-generator/helpers.js.map +0 -1
  177. package/dist/utils/dev-generator/home-page.d.ts +0 -2
  178. package/dist/utils/dev-generator/home-page.d.ts.map +0 -1
  179. package/dist/utils/dev-generator/home-page.js +0 -643
  180. package/dist/utils/dev-generator/home-page.js.map +0 -1
  181. package/dist/utils/dev-generator/index.d.ts +0 -11
  182. package/dist/utils/dev-generator/index.d.ts.map +0 -1
  183. package/dist/utils/dev-generator/index.js +0 -85
  184. package/dist/utils/dev-generator/index.js.map +0 -1
  185. package/dist/utils/dev-generator/layout.d.ts +0 -3
  186. package/dist/utils/dev-generator/layout.d.ts.map +0 -1
  187. package/dist/utils/dev-generator/layout.js +0 -63
  188. package/dist/utils/dev-generator/layout.js.map +0 -1
  189. package/dist/utils/dev-generator/next-config.d.ts +0 -3
  190. package/dist/utils/dev-generator/next-config.d.ts.map +0 -1
  191. package/dist/utils/dev-generator/next-config.js +0 -111
  192. package/dist/utils/dev-generator/next-config.js.map +0 -1
  193. package/dist/utils/dev-generator/preview-pages.d.ts +0 -3
  194. package/dist/utils/dev-generator/preview-pages.d.ts.map +0 -1
  195. package/dist/utils/dev-generator/preview-pages.js +0 -833
  196. package/dist/utils/dev-generator/preview-pages.js.map +0 -1
  197. package/dist/utils/dev-generator.d.ts +0 -12
  198. package/dist/utils/dev-generator.d.ts.map +0 -1
  199. package/dist/utils/dev-generator.js +0 -1752
  200. package/dist/utils/dev-generator.js.map +0 -1
  201. package/dist/utils/field-schema.d.ts +0 -13
  202. package/dist/utils/field-schema.d.ts.map +0 -1
  203. package/dist/utils/field-schema.js +0 -182
  204. package/dist/utils/field-schema.js.map +0 -1
  205. package/dist/utils/graphql.d.ts +0 -39
  206. package/dist/utils/graphql.d.ts.map +0 -1
  207. package/dist/utils/graphql.js +0 -138
  208. package/dist/utils/graphql.js.map +0 -1
  209. package/dist/utils/lib-manifest.d.ts +0 -7
  210. package/dist/utils/lib-manifest.d.ts.map +0 -1
  211. package/dist/utils/lib-manifest.js +0 -59
  212. package/dist/utils/lib-manifest.js.map +0 -1
  213. package/dist/utils/publish-helpers.d.ts +0 -43
  214. package/dist/utils/publish-helpers.d.ts.map +0 -1
  215. package/dist/utils/publish-helpers.js +0 -215
  216. package/dist/utils/publish-helpers.js.map +0 -1
  217. package/dist/utils/publish-helpers.test.d.ts +0 -2
  218. package/dist/utils/publish-helpers.test.d.ts.map +0 -1
  219. package/dist/utils/publish-helpers.test.js +0 -24
  220. package/dist/utils/publish-helpers.test.js.map +0 -1
  221. package/dist/utils/resolve-workspace.d.ts +0 -6
  222. package/dist/utils/resolve-workspace.d.ts.map +0 -1
  223. package/dist/utils/resolve-workspace.js +0 -32
  224. package/dist/utils/resolve-workspace.js.map +0 -1
  225. package/dist/utils/scanner.d.ts +0 -42
  226. package/dist/utils/scanner.d.ts.map +0 -1
  227. package/dist/utils/scanner.js +0 -156
  228. package/dist/utils/scanner.js.map +0 -1
  229. package/dist/utils/schema-diff.d.ts +0 -22
  230. package/dist/utils/schema-diff.d.ts.map +0 -1
  231. package/dist/utils/schema-diff.js +0 -107
  232. package/dist/utils/schema-diff.js.map +0 -1
  233. package/dist/utils/source-collector.d.ts +0 -19
  234. package/dist/utils/source-collector.d.ts.map +0 -1
  235. package/dist/utils/source-collector.js +0 -565
  236. package/dist/utils/source-collector.js.map +0 -1
  237. package/dist/utils/theme-builder.d.ts +0 -12
  238. package/dist/utils/theme-builder.d.ts.map +0 -1
  239. package/dist/utils/theme-builder.js +0 -117
  240. package/dist/utils/theme-builder.js.map +0 -1
  241. package/dist/utils/type-generator.d.ts +0 -9
  242. package/dist/utils/type-generator.d.ts.map +0 -1
  243. package/dist/utils/type-generator.js +0 -86
  244. package/dist/utils/type-generator.js.map +0 -1
  245. package/dist/utils/version.d.ts +0 -10
  246. package/dist/utils/version.d.ts.map +0 -1
  247. package/dist/utils/version.js +0 -30
  248. package/dist/utils/version.js.map +0 -1
  249. package/dist/utils/versions.d.ts.map +0 -1
  250. package/dist/utils/versions.js.map +0 -1
  251. package/src/dev-app/app/api/blocks/[name]/config/route.ts +0 -140
  252. package/src/dev-app/app/api/blocks/route.ts +0 -61
  253. package/src/dev-app/app/api/config/route.ts +0 -98
  254. package/src/dev-app/app/api/context/route.ts +0 -126
  255. package/src/dev-app/app/api/preview/[name]/route.ts +0 -137
  256. package/src/dev-app/app/api/workspaces/route.ts +0 -124
  257. package/src/dev-app/app/layout.tsx +0 -18
  258. package/src/dev-app/app/page.tsx +0 -1785
  259. package/test.d.ts +0 -1
  260. package/test.js +0 -2
@@ -1,214 +0,0 @@
1
- import chalk from "chalk";
2
- import { execSync } from "child_process";
3
- import fs from "fs-extra";
4
- import path from "path";
5
- import { getFieldTypes, isValidFieldType } from "./field-schema.js";
6
- /**
7
- * Type-safe field config helper. Required for all schema fields.
8
- * Infers the field type from `type` and narrows `defaultValue` accordingly.
9
- *
10
- * @example
11
- * field({ type: "singleLine", label: "Title", defaultValue: "Hello" }) // ✓
12
- * field({ type: "singleLine", label: "Title", defaultValue: 123 }) // ✗ TS error
13
- */
14
- export function field(config) {
15
- return config;
16
- }
17
- // defineBlock requires branded FieldDef - enforces field() usage
18
- export function defineBlock(config) {
19
- return config;
20
- }
21
- // defineTemplate requires branded FieldDef in schema (if present)
22
- export function defineTemplate(config) {
23
- return config;
24
- }
25
- // defineTheme for theme/config.ts authoring
26
- export function defineTheme(config) {
27
- return config;
28
- }
29
- /**
30
- * Resolve the config file for a block or template.
31
- * Both use a unified `config.ts` file.
32
- */
33
- export function resolveConfigPath(resourcePath) {
34
- const candidate = path.join(resourcePath, "config.ts");
35
- return fs.existsSync(candidate) ? candidate : null;
36
- }
37
- // Load config.ts dynamically
38
- export async function loadBlockConfig(blockPath) {
39
- const configPath = resolveConfigPath(blockPath);
40
- if (!configPath) {
41
- return null;
42
- }
43
- try {
44
- // Find tsx binary - try multiple locations
45
- const cliPath = path.dirname(path.dirname(new URL(import.meta.url).pathname));
46
- // Possible locations for tsx binary
47
- const possibleTsxPaths = [
48
- path.join(cliPath, "..", "node_modules", ".bin", "tsx"), // CLI's node_modules (dist -> root)
49
- path.join(cliPath, "..", "..", "node_modules", ".bin", "tsx"), // If symlinked
50
- path.join(process.cwd(), "node_modules", ".bin", "tsx"), // Project's node_modules
51
- ];
52
- let tsxBinary = possibleTsxPaths.find((p) => fs.existsSync(p));
53
- // If not found, use npx as fallback
54
- if (!tsxBinary) {
55
- tsxBinary = "npx -y tsx"; // Use npx with -y to auto-install if needed
56
- }
57
- const cacheDir = path.join(process.cwd(), ".cmssy", "cache");
58
- fs.ensureDirSync(cacheDir);
59
- // Create a mock cmssy-cli/config module in cache
60
- const mockConfigPath = path.join(cacheDir, "cmssy-cli-config.mjs");
61
- const mockConfig = `export const defineBlock = (config) => config;\nexport const defineTemplate = (config) => config;\nexport const defineTheme = (config) => config;\nexport const field = (config) => config;`;
62
- fs.writeFileSync(mockConfigPath, mockConfig);
63
- // Read original config and replace import path to point to mock
64
- const configContent = fs.readFileSync(configPath, "utf-8");
65
- const modifiedConfig = configContent.replace(/from\s+['"](?:@cmssy\/cli\/config|cmssy-cli\/config)['"]/g, `from '${mockConfigPath.replace(/\\/g, "/")}'`);
66
- // Write modified config to temp file
67
- const tempConfigPath = path.join(cacheDir, `temp-${path.basename(configPath)}`);
68
- fs.writeFileSync(tempConfigPath, modifiedConfig);
69
- // Execute with tsx - use --eval to import and output
70
- const evalCode = `import cfg from '${tempConfigPath.replace(/\\/g, "/")}'; console.log(JSON.stringify(cfg.default || cfg));`;
71
- // Build command - handle both direct binary path and npx
72
- const command = tsxBinary.includes("npx")
73
- ? `${tsxBinary} --eval "${evalCode}"`
74
- : `"${tsxBinary}" --eval "${evalCode}"`;
75
- const output = execSync(command, {
76
- encoding: "utf-8",
77
- cwd: process.cwd(),
78
- env: {
79
- ...process.env,
80
- NODE_ENV: "development",
81
- },
82
- stdio: ["pipe", "pipe", "pipe"],
83
- });
84
- // Clean up
85
- fs.removeSync(tempConfigPath);
86
- fs.removeSync(mockConfigPath);
87
- // Parse JSON output
88
- const lines = output.trim().split("\n");
89
- const jsonLine = lines[lines.length - 1];
90
- const config = JSON.parse(jsonLine);
91
- return config;
92
- }
93
- catch (error) {
94
- throw new Error(`Failed to load config at ${configPath}: ${error.message}`);
95
- }
96
- }
97
- // Validate defaultValue types match field type expectations
98
- export function validateDefaultValues(schema) {
99
- const errors = [];
100
- function check(key, field, parentPath = "") {
101
- const fullPath = parentPath ? `${parentPath}.${key}` : key;
102
- if (field.defaultValue === undefined)
103
- return;
104
- const val = field.defaultValue;
105
- switch (field.type) {
106
- case "singleLine":
107
- case "multiLine":
108
- case "richText":
109
- case "date":
110
- case "media":
111
- case "link":
112
- case "select":
113
- case "color":
114
- case "form":
115
- if (typeof val !== "string") {
116
- errors.push(`"${fullPath}": type "${field.type}" expects string defaultValue, got ${typeof val}`);
117
- }
118
- break;
119
- case "numeric":
120
- if (typeof val !== "number") {
121
- errors.push(`"${fullPath}": type "numeric" expects number defaultValue, got ${typeof val}`);
122
- }
123
- break;
124
- case "boolean":
125
- if (typeof val !== "boolean") {
126
- errors.push(`"${fullPath}": type "boolean" expects boolean defaultValue, got ${typeof val}`);
127
- }
128
- break;
129
- case "multiselect":
130
- if (!Array.isArray(val) ||
131
- !val.every((v) => typeof v === "string")) {
132
- errors.push(`"${fullPath}": type "multiselect" expects string[] defaultValue`);
133
- }
134
- break;
135
- case "repeater":
136
- if (!Array.isArray(val) ||
137
- !val.every((item) => item !== null && typeof item === "object" && !Array.isArray(item))) {
138
- errors.push(`"${fullPath}": type "repeater" expects Record<string, unknown>[] defaultValue`);
139
- }
140
- break;
141
- case "pageSelector":
142
- if (!Array.isArray(val)) {
143
- errors.push(`"${fullPath}": type "pageSelector" expects PageRef[] defaultValue, got ${typeof val}`);
144
- }
145
- break;
146
- }
147
- // Recurse into repeater schema
148
- if (field.type === "repeater") {
149
- const repeater = field;
150
- if (repeater.schema) {
151
- Object.entries(repeater.schema).forEach(([k, f]) => check(k, f, fullPath));
152
- }
153
- }
154
- }
155
- Object.entries(schema).forEach(([key, field]) => check(key, field));
156
- return { valid: errors.length === 0, errors };
157
- }
158
- // Validate schema against backend field types
159
- export async function validateSchema(schema, blockPath) {
160
- const errors = [];
161
- const fieldTypes = await getFieldTypes();
162
- function validateField(key, field, parentPath = "") {
163
- const fullPath = parentPath ? `${parentPath}.${key}` : key;
164
- // Check if field type is valid
165
- if (!isValidFieldType(field.type, fieldTypes)) {
166
- errors.push(`Invalid field type "${field.type}" for field "${fullPath}". Valid types: ${fieldTypes
167
- .map((ft) => ft.type)
168
- .join(", ")}`);
169
- }
170
- // Validate repeater nested schema
171
- if (field.type === "repeater") {
172
- const repeaterField = field;
173
- if (!repeaterField.schema || typeof repeaterField.schema !== "object") {
174
- errors.push(`Repeater field "${fullPath}" must have a "schema" property`);
175
- }
176
- else {
177
- // Recursively validate nested schema
178
- Object.entries(repeaterField.schema).forEach(([nestedKey, nestedField]) => {
179
- validateField(nestedKey, nestedField, fullPath);
180
- });
181
- }
182
- // Validate minItems/maxItems
183
- if (repeaterField.minItems !== undefined && repeaterField.minItems < 0) {
184
- errors.push(`Repeater field "${fullPath}" has invalid minItems (must be >= 0)`);
185
- }
186
- if (repeaterField.maxItems !== undefined && repeaterField.maxItems < 1) {
187
- errors.push(`Repeater field "${fullPath}" has invalid maxItems (must be >= 1)`);
188
- }
189
- if (repeaterField.minItems &&
190
- repeaterField.maxItems &&
191
- repeaterField.minItems > repeaterField.maxItems) {
192
- errors.push(`Repeater field "${fullPath}" has minItems > maxItems`);
193
- }
194
- }
195
- // Validate select/multiselect options
196
- if (field.type === "select" || field.type === "multiselect") {
197
- const selectField = field;
198
- if (!selectField.options ||
199
- !Array.isArray(selectField.options) ||
200
- selectField.options.length === 0) {
201
- errors.push(`${field.type} field "${fullPath}" must have at least one option`);
202
- }
203
- }
204
- // Warn about required fields with default values
205
- if (field.required && field.defaultValue !== undefined) {
206
- console.warn(chalk.yellow(`Warning: Field "${fullPath}" is required but has a defaultValue. The defaultValue will be ignored.`));
207
- }
208
- }
209
- Object.entries(schema).forEach(([key, field]) => {
210
- validateField(key, field);
211
- });
212
- return { valid: errors.length === 0, errors };
213
- }
214
- //# sourceMappingURL=block-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"block-config.js","sourceRoot":"","sources":["../../src/utils/block-config.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- import { ResourceConfig } from "../types/block-config.js";
2
- export interface BlockMeta {
3
- type: "block" | "template";
4
- category?: string;
5
- tags?: string[];
6
- displayName?: string;
7
- description?: string;
8
- version?: string;
9
- updatedAt: string;
10
- }
11
- export interface BlocksMetaCache {
12
- version: 1;
13
- blocks: Record<string, BlockMeta>;
14
- }
15
- export declare function loadMetaCache(cwd?: string): BlocksMetaCache;
16
- export declare function saveMetaCache(cache: BlocksMetaCache, cwd?: string): void;
17
- export declare function updateBlockInCache(name: string, type: "block" | "template", config: ResourceConfig | null, version?: string, cwd?: string): void;
18
- export declare function removeBlockFromCache(name: string, cwd?: string): void;
19
- export declare function getBlockMeta(name: string, cwd?: string): BlockMeta | null;
20
- /**
21
- * Get all unique categories from cache
22
- */
23
- export declare function getCachedCategories(cwd?: string): string[];
24
- /**
25
- * Get all unique tags from cache
26
- */
27
- export declare function getCachedTags(cwd?: string): string[];
28
- //# sourceMappingURL=blocks-meta-cache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"blocks-meta-cache.d.ts","sourceRoot":"","sources":["../../src/utils/blocks-meta-cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI1D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACnC;AAMD,wBAAgB,aAAa,CAAC,GAAG,SAAgB,GAAG,eAAe,CAYlE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,SAAgB,GAAG,IAAI,CAI/E;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,GAAG,UAAU,EAC1B,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,OAAO,CAAC,EAAE,MAAM,EAChB,GAAG,SAAgB,GAClB,IAAI,CAcN;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAgB,GAAG,IAAI,CAI5E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAgB,GAAG,SAAS,GAAG,IAAI,CAGhF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,SAAgB,GAAG,MAAM,EAAE,CAWjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,SAAgB,GAAG,MAAM,EAAE,CAW3D"}
@@ -1,72 +0,0 @@
1
- import fs from "fs-extra";
2
- import path from "path";
3
- const CACHE_FILE = ".cmssy/blocks-meta.json";
4
- function getCachePath(cwd = process.cwd()) {
5
- return path.join(cwd, CACHE_FILE);
6
- }
7
- export function loadMetaCache(cwd = process.cwd()) {
8
- const cachePath = getCachePath(cwd);
9
- if (fs.existsSync(cachePath)) {
10
- try {
11
- return fs.readJsonSync(cachePath);
12
- }
13
- catch {
14
- // Corrupted cache, return empty
15
- }
16
- }
17
- return { version: 1, blocks: {} };
18
- }
19
- export function saveMetaCache(cache, cwd = process.cwd()) {
20
- const cachePath = getCachePath(cwd);
21
- fs.ensureDirSync(path.dirname(cachePath));
22
- fs.writeJsonSync(cachePath, cache, { spaces: 2 });
23
- }
24
- export function updateBlockInCache(name, type, config, version, cwd = process.cwd()) {
25
- const cache = loadMetaCache(cwd);
26
- cache.blocks[name] = {
27
- type,
28
- category: config?.category,
29
- tags: config?.tags,
30
- displayName: config?.name,
31
- description: config?.description,
32
- version,
33
- updatedAt: new Date().toISOString(),
34
- };
35
- saveMetaCache(cache, cwd);
36
- }
37
- export function removeBlockFromCache(name, cwd = process.cwd()) {
38
- const cache = loadMetaCache(cwd);
39
- delete cache.blocks[name];
40
- saveMetaCache(cache, cwd);
41
- }
42
- export function getBlockMeta(name, cwd = process.cwd()) {
43
- const cache = loadMetaCache(cwd);
44
- return cache.blocks[name] || null;
45
- }
46
- /**
47
- * Get all unique categories from cache
48
- */
49
- export function getCachedCategories(cwd = process.cwd()) {
50
- const cache = loadMetaCache(cwd);
51
- const categories = new Set();
52
- Object.values(cache.blocks).forEach((meta) => {
53
- if (meta.category) {
54
- categories.add(meta.category);
55
- }
56
- });
57
- return Array.from(categories).sort();
58
- }
59
- /**
60
- * Get all unique tags from cache
61
- */
62
- export function getCachedTags(cwd = process.cwd()) {
63
- const cache = loadMetaCache(cwd);
64
- const tags = new Set();
65
- Object.values(cache.blocks).forEach((meta) => {
66
- if (meta.tags) {
67
- meta.tags.forEach((tag) => tags.add(tag));
68
- }
69
- });
70
- return Array.from(tags).sort();
71
- }
72
- //# sourceMappingURL=blocks-meta-cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"blocks-meta-cache.js","sourceRoot":"","sources":["../../src/utils/blocks-meta-cache.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- import { FieldTypeDefinition } from "./field-schema.js";
2
- export interface BuildOptions {
3
- /** Framework (default: "react") */
4
- framework?: string;
5
- /** Enable minification (default: true for production, false for dev) */
6
- minify?: boolean;
7
- /** Enable sourcemaps (default: true) */
8
- sourcemap?: boolean;
9
- /** Output mode: "versioned" or "flat" (default: "versioned") */
10
- outputMode?: "versioned" | "flat";
11
- /** Generate package.json with cmssy metadata (default: true) */
12
- generatePackageJson?: boolean;
13
- /** Generate TypeScript types (default: true) */
14
- generateTypes?: boolean;
15
- /** Throw errors or warn (default: true for build, false for dev) */
16
- strict?: boolean;
17
- /** Field type definitions from backend (for type generation) */
18
- fieldTypes?: FieldTypeDefinition[];
19
- }
20
- export interface BuildableResource {
21
- type: "block" | "template";
22
- name: string;
23
- path: string;
24
- packageJson?: any;
25
- blockConfig?: any;
26
- }
27
- /**
28
- * Build a resource (block or template) with configurable options.
29
- * Supports 2 modes:
30
- * - Production mode (build): versioned output, minified, generates package.json
31
- * - Development mode (dev): flat output, not minified, no package.json
32
- */
33
- export declare function buildResource(resource: BuildableResource, outDir: string, options?: BuildOptions): Promise<void>;
34
- //# sourceMappingURL=builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/utils/builder.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxD,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gEAAgE;IAChE,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAClC,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gDAAgD;IAChD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,WAAW,CAAC,EAAE,GAAG,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAqHf"}
@@ -1,140 +0,0 @@
1
- import chalk from "chalk";
2
- import { build as esbuild } from "esbuild";
3
- import { execSync } from "child_process";
4
- import fs from "fs-extra";
5
- import path from "path";
6
- import { generateTypes } from "./type-generator.js";
7
- /**
8
- * Build a resource (block or template) with configurable options.
9
- * Supports 2 modes:
10
- * - Production mode (build): versioned output, minified, generates package.json
11
- * - Development mode (dev): flat output, not minified, no package.json
12
- */
13
- export async function buildResource(resource, outDir, options = {}) {
14
- const { framework = "react", minify = true, sourcemap = true, outputMode = "versioned", generatePackageJson = true, generateTypes: shouldGenerateTypes = true, strict = true, fieldTypes, } = options;
15
- const srcPath = path.join(resource.path, "src");
16
- const entryPoint = framework === "react"
17
- ? path.join(srcPath, "index.tsx")
18
- : path.join(srcPath, "index.ts");
19
- // Check entry point exists
20
- if (!fs.existsSync(entryPoint)) {
21
- const message = `Entry point not found: ${entryPoint}`;
22
- if (strict) {
23
- throw new Error(message);
24
- }
25
- else {
26
- console.warn(chalk.yellow(`Warning: ${message}`));
27
- return;
28
- }
29
- }
30
- // Determine output paths based on mode
31
- let destDir;
32
- let outFile;
33
- let outCssFile = null;
34
- if (outputMode === "versioned") {
35
- // Production: public/@vendor/blocks.hero/1.0.0/
36
- if (!resource.packageJson || !resource.packageJson.name || !resource.packageJson.version) {
37
- const message = `Resource "${resource.name}" requires package.json with name and version for versioned output`;
38
- if (strict) {
39
- throw new Error(message);
40
- }
41
- else {
42
- console.warn(chalk.yellow(`Warning: ${message}`));
43
- return;
44
- }
45
- }
46
- const packageName = resource.packageJson.name;
47
- const version = resource.packageJson.version;
48
- destDir = path.join(outDir, packageName, version);
49
- outFile = path.join(destDir, "index.js");
50
- outCssFile = path.join(destDir, "index.css");
51
- fs.mkdirSync(destDir, { recursive: true });
52
- }
53
- else {
54
- // Development: .cmssy/dev/block.hero.js
55
- destDir = outDir;
56
- outFile = path.join(outDir, `${resource.type}.${resource.name}.js`);
57
- outCssFile = path.join(outDir, `${resource.type}.${resource.name}.css`);
58
- fs.mkdirSync(destDir, { recursive: true });
59
- }
60
- // Build JavaScript with esbuild
61
- try {
62
- await esbuild({
63
- entryPoints: [entryPoint],
64
- bundle: true,
65
- format: "esm",
66
- outfile: outFile,
67
- jsx: "transform",
68
- minify,
69
- sourcemap,
70
- target: "es2020",
71
- loader: { ".css": "empty" }, // Ignore CSS imports (CSS is handled separately)
72
- // Note: React is bundled for dev because browser ES modules can't resolve bare imports
73
- // Production builds (publish.ts) externalize React since SSR/BlockRenderer provide it
74
- });
75
- }
76
- catch (error) {
77
- const message = `Build error for ${resource.name}`;
78
- if (strict) {
79
- throw error;
80
- }
81
- else {
82
- console.error(chalk.red(`${message}:`), error);
83
- return;
84
- }
85
- }
86
- // Process CSS if exists
87
- const cssPath = path.join(srcPath, "index.css");
88
- if (fs.existsSync(cssPath) && outCssFile) {
89
- await processCSS(cssPath, outCssFile, minify, resource.name, strict);
90
- }
91
- // Generate minimal package.json (production mode)
92
- if (generatePackageJson && outputMode === "versioned") {
93
- // Only include essential fields - metadata is sent during publish, not stored in build
94
- const outputPackageJson = {
95
- name: resource.packageJson?.name || "",
96
- version: resource.packageJson?.version || "1.0.0",
97
- description: resource.packageJson?.description || "",
98
- author: resource.packageJson?.author || { name: "", email: "" },
99
- };
100
- fs.writeFileSync(path.join(destDir, "package.json"), JSON.stringify(outputPackageJson, null, 2) + "\n");
101
- }
102
- // Generate TypeScript types (only for blocks with schema, not templates with pages)
103
- if (shouldGenerateTypes && resource.blockConfig?.schema) {
104
- await generateTypes({
105
- blockPath: resource.path,
106
- schema: resource.blockConfig.schema,
107
- fieldTypes,
108
- });
109
- }
110
- }
111
- /**
112
- * Process CSS with PostCSS (if config exists) or copy as-is
113
- */
114
- async function processCSS(cssPath, outCssFile, minify, resourceName, strict) {
115
- const postcssConfigPath = path.join(process.cwd(), "postcss.config.js");
116
- if (fs.existsSync(postcssConfigPath)) {
117
- // Use PostCSS to process CSS (includes Tailwind)
118
- try {
119
- const minifyFlag = minify ? " --no-map" : "";
120
- execSync(`npx postcss "${cssPath}" -o "${outCssFile}"${minifyFlag}`, {
121
- stdio: "pipe",
122
- cwd: process.cwd(),
123
- });
124
- }
125
- catch (error) {
126
- const message = `PostCSS processing failed for ${resourceName}: ${error.message}`;
127
- if (strict) {
128
- throw new Error(message);
129
- }
130
- console.warn(chalk.yellow(`Warning: ${message}`));
131
- console.log(chalk.gray("Copying CSS as-is..."));
132
- fs.copyFileSync(cssPath, outCssFile);
133
- }
134
- }
135
- else {
136
- // No PostCSS config - just copy CSS
137
- fs.copyFileSync(cssPath, outCssFile);
138
- }
139
- }
140
- //# sourceMappingURL=builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/utils/builder.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- export interface CmssyConfig {
2
- framework: string;
3
- projectName?: string;
4
- author?: {
5
- name: string;
6
- email: string;
7
- };
8
- build?: {
9
- outDir: string;
10
- minify: boolean;
11
- sourcemap: boolean;
12
- };
13
- }
14
- export declare function loadConfig(): Promise<CmssyConfig>;
15
- export declare function getPackageJson(packagePath: string): any;
16
- //# sourceMappingURL=cmssy-config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cmssy-config.d.ts","sourceRoot":"","sources":["../../src/utils/cmssy-config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAYvD;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,OAMjD"}
@@ -1,19 +0,0 @@
1
- import fs from "fs-extra";
2
- import path from "path";
3
- export async function loadConfig() {
4
- const configPath = path.join(process.cwd(), "cmssy.config.js");
5
- if (!fs.existsSync(configPath)) {
6
- throw new Error("cmssy.config.js not found. Run 'cmssy init' to create a project.");
7
- }
8
- // Dynamic import for ESM
9
- const configModule = await import(`file://${configPath}`);
10
- return configModule.default;
11
- }
12
- export function getPackageJson(packagePath) {
13
- const pkgPath = path.join(packagePath, "package.json");
14
- if (!fs.existsSync(pkgPath)) {
15
- return null;
16
- }
17
- return fs.readJsonSync(pkgPath);
18
- }
19
- //# sourceMappingURL=cmssy-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cmssy-config.js","sourceRoot":"","sources":["../../src/utils/cmssy-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAgBxB,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAE/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;IAC1D,OAAO,YAAY,CAAC,OAAO,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC"}
@@ -1,9 +0,0 @@
1
- export interface CmssyConfig {
2
- apiUrl: string;
3
- apiToken: string | null;
4
- workspaceId?: string | null;
5
- }
6
- export declare function loadConfig(): CmssyConfig;
7
- export declare function saveConfig(config: Partial<CmssyConfig>): void;
8
- export declare function hasConfig(): boolean;
9
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,UAAU,IAAI,WAAW,CAaxC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAiC7D;AAED,wBAAgB,SAAS,IAAI,OAAO,CAGnC"}
@@ -1,51 +0,0 @@
1
- import dotenv from "dotenv";
2
- import fs from "fs-extra";
3
- import path from "path";
4
- export function loadConfig() {
5
- // Load from .env in cwd
6
- const envPath = path.join(process.cwd(), ".env");
7
- if (fs.existsSync(envPath)) {
8
- dotenv.config({ path: envPath });
9
- }
10
- return {
11
- apiUrl: process.env.CMSSY_API_URL || "https://api.cmssy.io/graphql",
12
- apiToken: process.env.CMSSY_API_TOKEN || null,
13
- workspaceId: process.env.CMSSY_WORKSPACE_ID || null,
14
- };
15
- }
16
- export function saveConfig(config) {
17
- const envPath = path.join(process.cwd(), ".env");
18
- const existingEnv = fs.existsSync(envPath)
19
- ? fs.readFileSync(envPath, "utf8")
20
- : "";
21
- let newEnv = existingEnv;
22
- // Helper: append a key=value, ensuring a leading newline
23
- function appendKey(key, value) {
24
- const regex = new RegExp(`^${key}=.*$`, "m");
25
- if (regex.test(newEnv)) {
26
- newEnv = newEnv.replace(regex, `${key}=${value}`);
27
- }
28
- else {
29
- // Ensure newline before appending to avoid concatenation with last line
30
- if (newEnv.length > 0 && !newEnv.endsWith("\n")) {
31
- newEnv += "\n";
32
- }
33
- newEnv += `${key}=${value}\n`;
34
- }
35
- }
36
- if (config.apiToken !== undefined) {
37
- appendKey("CMSSY_API_TOKEN", config.apiToken ?? "");
38
- }
39
- if (config.apiUrl !== undefined) {
40
- appendKey("CMSSY_API_URL", config.apiUrl);
41
- }
42
- if (config.workspaceId !== undefined) {
43
- appendKey("CMSSY_WORKSPACE_ID", config.workspaceId ?? "");
44
- }
45
- fs.writeFileSync(envPath, newEnv.trim() + "\n");
46
- }
47
- export function hasConfig() {
48
- const config = loadConfig();
49
- return !!config.apiToken;
50
- }
51
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAQxB,MAAM,UAAU,UAAU;IACxB,wBAAwB;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAEjD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,8BAA8B;QACnE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI;QAC7C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI;KACpD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAA4B;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QACxC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;QAClC,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,MAAM,GAAG,WAAW,CAAC;IAEzB,yDAAyD;IACzD,SAAS,SAAS,CAAC,GAAW,EAAE,KAAa;QAC3C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,wEAAwE;YACxE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,IAAI,CAAC;YACjB,CAAC;YACD,MAAM,IAAI,GAAG,GAAG,IAAI,KAAK,IAAI,CAAC;QAChC,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACrC,SAAS,CAAC,oBAAoB,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3B,CAAC"}