@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,565 +0,0 @@
1
- import fs from "fs-extra";
2
- import path from "path";
3
- const SEGMENT_REGEX = /^[a-zA-Z0-9_.-][a-zA-Z0-9._-]*$/;
4
- const DEFAULT_INCLUDE_EXT = new Set([
5
- ".ts",
6
- ".tsx",
7
- ".js",
8
- ".jsx",
9
- ".mjs",
10
- ".cjs",
11
- ".css",
12
- ".json",
13
- ".md",
14
- ".svg",
15
- ]);
16
- const DEFAULT_IGNORE_DIRS = new Set([
17
- "node_modules",
18
- "dist",
19
- "build",
20
- ".next",
21
- ".turbo",
22
- "coverage",
23
- ".git",
24
- ".cache",
25
- ".vercel",
26
- "__snapshots__",
27
- "__tests__",
28
- ]);
29
- const DEFAULT_IGNORE_FILES = new Set([
30
- ".DS_Store",
31
- "Thumbs.db",
32
- "tsconfig.tsbuildinfo",
33
- ]);
34
- const TEST_FILE_REGEX = /\.(test|spec|stories|story)\.(ts|tsx|js|jsx|mjs|cjs)$/i;
35
- // Match esbuild's default `resolveExtensions` exactly so the collector
36
- // archives the same file the sandbox build will bundle. esbuild's
37
- // default is `.tsx, .ts, .jsx, .js, .css, .json` - it does NOT try
38
- // `.mjs` / `.cjs` for extensionless imports, so listing them here
39
- // would let the collector pick e.g. `foo.mjs` while the sandbox
40
- // bundle resolved `foo.css` instead. Files with explicit `.mjs` /
41
- // `.cjs` extensions still walk and bundle normally.
42
- const RESOLVE_EXTS = [".tsx", ".ts", ".jsx", ".js", ".css", ".json"];
43
- const SCANNABLE_EXTS = new Set([
44
- ".ts",
45
- ".tsx",
46
- ".js",
47
- ".jsx",
48
- ".mjs",
49
- ".cjs",
50
- ".css",
51
- ]);
52
- export const MAX_FILES = 200;
53
- export const MAX_TOTAL_BYTES = 10 * 1024 * 1024;
54
- export async function collectBlockSources(options) {
55
- const { blockDir } = options;
56
- const includeExt = options.includeExt ?? DEFAULT_INCLUDE_EXT;
57
- const ignoreDirs = options.ignoreDirs ?? DEFAULT_IGNORE_DIRS;
58
- const entryRel = normalizeEntryPath(options.entryRel ?? "src/index.tsx");
59
- if (!(await fs.pathExists(blockDir))) {
60
- throw new Error(`block directory not found: ${blockDir}`);
61
- }
62
- const stat = await fs.stat(blockDir);
63
- if (!stat.isDirectory()) {
64
- throw new Error(`block path is not a directory: ${blockDir}`);
65
- }
66
- const projectRoot = await findProjectRoot(blockDir);
67
- const relFromRoot = toForwardSlash(path.relative(projectRoot, blockDir));
68
- // Empty `relFromRoot` is legal: it means blockDir IS the project
69
- // root (`findProjectRoot` fell back to blockDir's own package.json).
70
- // In that layout block files live at their natural relative paths
71
- // (no `blocks/<name>/` prefix). `..` segments still indicate the
72
- // block sits outside the resolved root.
73
- if (relFromRoot.startsWith("..")) {
74
- throw new Error(`block directory ${blockDir} is not inside project root ${projectRoot}`);
75
- }
76
- const blockProjectRel = relFromRoot;
77
- const tsconfig = await loadTsConfigPaths(projectRoot);
78
- const collected = new Map();
79
- const collectedAbs = new Set();
80
- let totalBytes = 0;
81
- function addFile(absPath, relPath, buf) {
82
- let content = buf;
83
- if (relPath.toLowerCase().endsWith(".css")) {
84
- // Strip unresolvable bare-specifier `@import` at-rules that no
85
- // pipeline consumes. Preserve:
86
- // - `tailwindcss` (and `tailwindcss/...`) - the build sandbox
87
- // compiles block CSS through @tailwindcss/postcss, which needs
88
- // this import to emit the utility/theme/base layers
89
- // - relative imports (`./`, `../`) - block-local CSS
90
- // - root-relative URLs (`/theme.css`) - consumer site asset
91
- // - absolute URLs (`http(s)://`, protocol-relative `//`) - web
92
- // fonts and CDN stylesheets
93
- // - any tsconfig path alias (`@/...`, `components/...`, ...) -
94
- // imported file lands in the archive via the import scanner;
95
- // dropping the @import would orphan it
96
- // Match the FULL at-rule (including condition lists like
97
- // `layer(base)`, `supports(...)`, media queries) up to the
98
- // terminating `;` so we never leave a dangling `layer(base);`
99
- // behind.
100
- const text = buf.toString("utf8");
101
- const stripped = text.replace(/@import\s+(?:url\(\s*)?["']([^"']+)["'](?:\s*\))?[^;]*;[ \t]*\n?/g, (match, spec) => {
102
- if (/^(?:\.\.?\/|\/|https?:\/\/)/.test(spec))
103
- return match;
104
- if (spec === "tailwindcss" || spec.startsWith("tailwindcss/"))
105
- return match;
106
- if (specMatchesAnyAlias(spec, tsconfig.paths))
107
- return match;
108
- return "";
109
- });
110
- if (stripped !== text) {
111
- content = Buffer.from(stripped);
112
- }
113
- }
114
- if (totalBytes + content.byteLength > MAX_TOTAL_BYTES) {
115
- throw new Error(`block sources exceed ${MAX_TOTAL_BYTES} bytes (would-be ${totalBytes + content.byteLength} after "${relPath}") - prune large assets or split the block`);
116
- }
117
- const lower = relPath.toLowerCase();
118
- const existing = collected.get(lower);
119
- if (existing) {
120
- // Same case-folded path already collected. Tolerate the exact
121
- // same path (e.g. an import resolver landing on a file already
122
- // walked from blockDir); refuse a case-only collision so we
123
- // don't silently drop a file on case-sensitive filesystems.
124
- if (existing.relPath !== relPath) {
125
- throw new Error(`duplicate path "${relPath}" collides case-insensitively with "${existing.relPath}" - paths must be unique`);
126
- }
127
- return;
128
- }
129
- collected.set(lower, {
130
- relPath,
131
- contentBase64: content.toString("base64"),
132
- });
133
- collectedAbs.add(absPath);
134
- totalBytes += content.byteLength;
135
- if (collected.size > MAX_FILES) {
136
- throw new Error(`block has more than ${MAX_FILES} source files - prune the tree before publishing`);
137
- }
138
- }
139
- async function walkBlockDir(dir, relParent) {
140
- const entries = await fs.readdir(dir, { withFileTypes: true });
141
- for (const entry of entries) {
142
- const name = entry.name;
143
- if (entry.isSymbolicLink())
144
- continue;
145
- if (entry.isDirectory()) {
146
- if (ignoreDirs.has(name))
147
- continue;
148
- if (name.startsWith("."))
149
- continue;
150
- if (!SEGMENT_REGEX.test(name))
151
- continue;
152
- const nextRel = relParent ? `${relParent}/${name}` : name;
153
- await walkBlockDir(path.join(dir, name), nextRel);
154
- continue;
155
- }
156
- if (!entry.isFile())
157
- continue;
158
- if (DEFAULT_IGNORE_FILES.has(name))
159
- continue;
160
- if (name.startsWith("."))
161
- continue;
162
- if (TEST_FILE_REGEX.test(name))
163
- continue;
164
- if (!SEGMENT_REGEX.test(name))
165
- continue;
166
- const ext = path.extname(name).toLowerCase();
167
- const isPkg = name === "package.json";
168
- const isCfg = name === "config.ts" || name === "config.js";
169
- const isPreview = name === "preview.json";
170
- if (!isPkg && !isCfg && !isPreview && !includeExt.has(ext)) {
171
- continue;
172
- }
173
- const absPath = path.join(dir, name);
174
- // Stat-then-read so a single malicious or accidentally-huge
175
- // file (e.g. a stray screenshot in src/) can't blow past the
176
- // archive budget before we fail the publish. addFile applies
177
- // the cumulative cap; this catches per-file outliers up front
178
- // without ever allocating their content into memory.
179
- const fileStat = await fs.stat(absPath);
180
- const relForError = relParent ? `${relParent}/${name}` : name;
181
- if (totalBytes + fileStat.size > MAX_TOTAL_BYTES) {
182
- throw new Error(`block sources exceed ${MAX_TOTAL_BYTES} bytes (would-be ${totalBytes + fileStat.size} after "${relForError}") - prune large assets or split the block`);
183
- }
184
- const buf = await fs.readFile(absPath);
185
- const relInBlock = relParent ? `${relParent}/${name}` : name;
186
- const projectRel = blockProjectRel
187
- ? `${blockProjectRel}/${relInBlock}`
188
- : relInBlock;
189
- addFile(absPath, projectRel, buf);
190
- }
191
- }
192
- await walkBlockDir(blockDir, "");
193
- const entryLookup = blockProjectRel
194
- ? `${blockProjectRel}/${entryRel}`
195
- : entryRel;
196
- const entryHit = collected.get(entryLookup.toLowerCase());
197
- if (!entryHit) {
198
- throw new Error(`entry path "${entryRel}" not found in block source tree (${blockDir})`);
199
- }
200
- // Use the on-disk casing rather than the caller-supplied entryRel
201
- // so the backend's `entryPath` check matches what's in `files[]`.
202
- const entryProjectRel = entryHit.relPath;
203
- const queue = [];
204
- for (const absPath of collectedAbs) {
205
- const ext = path.extname(absPath).toLowerCase();
206
- if (SCANNABLE_EXTS.has(ext))
207
- queue.push(absPath);
208
- }
209
- const scanned = new Set();
210
- while (queue.length > 0) {
211
- const importerAbs = queue.shift();
212
- if (scanned.has(importerAbs))
213
- continue;
214
- scanned.add(importerAbs);
215
- let source;
216
- try {
217
- source = await fs.readFile(importerAbs, "utf8");
218
- }
219
- catch {
220
- continue;
221
- }
222
- const importerExt = path.extname(importerAbs).toLowerCase();
223
- const specs = extractImportSpecifiers(source, importerExt);
224
- for (const spec of specs) {
225
- const resolved = await resolveImportSpecifier(spec, importerAbs, projectRoot, tsconfig);
226
- if (!resolved)
227
- continue;
228
- if (collectedAbs.has(resolved))
229
- continue;
230
- const externalProjectRel = toForwardSlash(path.relative(projectRoot, resolved));
231
- if (!externalProjectRel || externalProjectRel.startsWith("..")) {
232
- // Outside project root - silently skip (e.g., monorepo workspace dep).
233
- continue;
234
- }
235
- // `path.relative` doesn't follow symlinks - it works on the
236
- // unresolved string. An in-project symlinked ancestor (e.g.
237
- // `vendor -> /etc`) would slip through above. Resolve realpath
238
- // for both paths and re-check the parent relationship.
239
- if (!(await isWithinRealProjectRoot(resolved, projectRoot))) {
240
- continue;
241
- }
242
- const segments = externalProjectRel.split("/");
243
- if (segments.some((seg) => !SEGMENT_REGEX.test(seg))) {
244
- continue;
245
- }
246
- // Match the block-walk dotfile exclusion. `import "../.env"` or
247
- // `import "../.generated/foo"` would otherwise smuggle hidden
248
- // files into the archive even though the walker treats them as
249
- // out of scope - a workspace publishing a block could leak
250
- // local secrets that way.
251
- if (segments.some((seg) => seg.startsWith("."))) {
252
- continue;
253
- }
254
- // Match the block-walk `ignoreDirs` exclusion too. A transitive
255
- // import like `../../node_modules/pkg/index.js` resolves to a
256
- // path technically inside the project root (so the
257
- // `startsWith("..")` filter doesn't fire), but the walker would
258
- // have skipped that directory entirely. Without this guard the
259
- // collector silently archives `node_modules` / `dist` / `.next`
260
- // content the caller never intended to ship.
261
- if (segments.some((seg) => ignoreDirs.has(seg))) {
262
- continue;
263
- }
264
- const ext = path.extname(resolved).toLowerCase();
265
- if (!includeExt.has(ext))
266
- continue;
267
- // Stat-then-read so a single oversize import (e.g. a stray
268
- // PDF/binary asset) fails fast instead of allocating GB into
269
- // memory before the cumulative cap fires. Unlike the block
270
- // walk, transitive imports tolerate missing/unreadable files
271
- // (silently skipped) - we never throw at the user for a flaky
272
- // node_modules layout we didn't ask them to publish.
273
- const fileStat = await fs.stat(resolved).catch(() => null);
274
- if (!fileStat)
275
- continue;
276
- if (totalBytes + fileStat.size > MAX_TOTAL_BYTES) {
277
- throw new Error(`block sources exceed ${MAX_TOTAL_BYTES} bytes (would-be ${totalBytes + fileStat.size} after "${externalProjectRel}") - prune large assets or split the block`);
278
- }
279
- try {
280
- const buf = await fs.readFile(resolved);
281
- addFile(resolved, externalProjectRel, buf);
282
- }
283
- catch {
284
- continue;
285
- }
286
- if (SCANNABLE_EXTS.has(ext)) {
287
- queue.push(resolved);
288
- }
289
- }
290
- }
291
- // Only emit a synthetic tsconfig when the project actually carries
292
- // path aliases that the sandbox esbuild needs to resolve. Without
293
- // this, every legacy single-block fixture (no parent tsconfig)
294
- // would get an extra file in the archive even though it has no
295
- // aliases to resolve.
296
- const hasAliases = Object.keys(tsconfig.paths).length > 0;
297
- if (hasAliases && !hasProjectRootTsconfig(collected)) {
298
- const synthetic = buildSyntheticTsconfig(tsconfig);
299
- const buf = Buffer.from(synthetic);
300
- addFile(path.join(projectRoot, "tsconfig.json"), "tsconfig.json", buf);
301
- }
302
- const files = [...collected.values()].sort((a, b) => a.relPath.localeCompare(b.relPath));
303
- return { files, entryPath: entryProjectRel };
304
- }
305
- async function findProjectRoot(blockDir) {
306
- // Prefer an ancestor with package.json (the real cmssy-marketing
307
- // layout: blockDir is `blocks/<name>` whose own package.json is the
308
- // block manifest, not the project root). Fall back to blockDir
309
- // itself when no ancestor has a manifest - covers test fixtures and
310
- // legacy single-block trees where the block is the project.
311
- const resolved = path.resolve(blockDir);
312
- let dir = resolved;
313
- for (let i = 0; i < 16; i++) {
314
- const parent = path.dirname(dir);
315
- if (parent === dir)
316
- break;
317
- if (await fs.pathExists(path.join(parent, "package.json"))) {
318
- return parent;
319
- }
320
- dir = parent;
321
- }
322
- if (await fs.pathExists(path.join(resolved, "package.json"))) {
323
- return resolved;
324
- }
325
- throw new Error(`Could not find a directory with package.json at or above "${blockDir}" - publish requires a project root`);
326
- }
327
- async function loadTsConfigPaths(projectRoot) {
328
- const tsconfigPath = path.join(projectRoot, "tsconfig.json");
329
- if (!(await fs.pathExists(tsconfigPath))) {
330
- return { baseUrl: ".", paths: {} };
331
- }
332
- try {
333
- const raw = await fs.readFile(tsconfigPath, "utf8");
334
- // Tolerant JSONC: strip line + block comments + trailing commas
335
- // string-aware so we don't truncate paths like `"blocks/**/*"`
336
- // (whose `*/` would close a fake block comment opened by an
337
- // earlier `@/*` in the same file).
338
- const cleaned = stripJsoncCommentsAndTrailingCommas(raw);
339
- const parsed = JSON.parse(cleaned);
340
- return {
341
- baseUrl: parsed.compilerOptions?.baseUrl ?? ".",
342
- paths: parsed.compilerOptions?.paths ?? {},
343
- };
344
- }
345
- catch {
346
- return { baseUrl: ".", paths: {} };
347
- }
348
- }
349
- const IMPORT_FROM_RE = /(?:^|[\s;{}()])(?:import|export)\s+(?:type\s+)?[\s\S]+?\s+from\s+["']([^"']+)["']/g;
350
- const IMPORT_SIDE_RE = /(?:^|[\s;{}()])import\s+["']([^"']+)["']/g;
351
- const IMPORT_DYN_RE = /\bimport\s*\(\s*["']([^"']+)["']/g;
352
- const REQUIRE_RE = /\brequire\s*\(\s*["']([^"']+)["']/g;
353
- const CSS_IMPORT_RE = /@import\s+(?:url\(\s*)?["']([^"']+)["']/g;
354
- const CSS_URL_RE = /\burl\(\s*["']?([^"')]+)["']?\s*\)/g;
355
- function extractImportSpecifiers(code, fileExt) {
356
- const all = new Set();
357
- const isCss = fileExt === ".css";
358
- const regexes = isCss
359
- ? [CSS_IMPORT_RE, CSS_URL_RE]
360
- : [IMPORT_FROM_RE, IMPORT_SIDE_RE, IMPORT_DYN_RE, REQUIRE_RE];
361
- for (const re of regexes) {
362
- re.lastIndex = 0;
363
- let m;
364
- while ((m = re.exec(code)) !== null) {
365
- all.add(m[1]);
366
- }
367
- }
368
- return [...all];
369
- }
370
- async function resolveImportSpecifier(spec, importerAbs, projectRoot, tsconfig) {
371
- if (!spec)
372
- return null;
373
- if (spec.startsWith(".")) {
374
- return resolveTarget(path.resolve(path.dirname(importerAbs), spec));
375
- }
376
- for (const [pattern, mappings] of Object.entries(tsconfig.paths)) {
377
- const matched = matchTsPath(spec, pattern, mappings);
378
- if (!matched)
379
- continue;
380
- for (const candidate of matched) {
381
- const target = path.resolve(projectRoot, tsconfig.baseUrl, candidate);
382
- const found = await resolveTarget(target);
383
- if (found)
384
- return found;
385
- }
386
- return null;
387
- }
388
- return null;
389
- }
390
- function matchTsPath(spec, pattern, mappings) {
391
- if (pattern.endsWith("/*")) {
392
- const prefix = pattern.slice(0, -1);
393
- if (!spec.startsWith(prefix))
394
- return null;
395
- const rest = spec.slice(prefix.length);
396
- return mappings.map((m) => m.replace(/\*$/, rest));
397
- }
398
- if (spec === pattern)
399
- return mappings;
400
- return null;
401
- }
402
- async function resolveTarget(target) {
403
- // If the import already names an explicit, known extension
404
- // (`@/styles/main.css`, `./foo.js`), an exact match wins outright -
405
- // never start probing `main.css.tsx` / `foo.js.tsx`, which would
406
- // archive the wrong file when both exist in a project.
407
- const targetExt = path.extname(target).toLowerCase();
408
- if (targetExt && RESOLVE_EXTS.includes(targetExt)) {
409
- const exactLstat = await fs.lstat(target).catch(() => null);
410
- if (exactLstat?.isFile())
411
- return target;
412
- }
413
- // Otherwise extensionless: try extension-suffixed candidates BEFORE
414
- // directory-index lookup to match Node + TS + esbuild semantics.
415
- // Reversing this order produced a real mismatch with esbuild when
416
- // a workspace had both `components/button.tsx` (file) AND
417
- // `components/button/index.tsx` (directory) - esbuild bundles the
418
- // file; the collector was archiving the directory's index.
419
- for (const ext of RESOLVE_EXTS) {
420
- const candidate = `${target}${ext}`;
421
- const candLstat = await fs.lstat(candidate).catch(() => null);
422
- if (candLstat?.isFile())
423
- return candidate;
424
- }
425
- // `lstat` so we refuse to follow a symlink. The block-dir walk
426
- // already skips symbolic links; mirroring that here stops an
427
- // imported in-project symlink from sneaking a file from outside
428
- // the project root into the archive under an in-project path.
429
- const lstat = await fs.lstat(target).catch(() => null);
430
- if (lstat?.isFile())
431
- return target;
432
- if (lstat?.isDirectory()) {
433
- for (const ext of RESOLVE_EXTS) {
434
- const candidate = path.join(target, `index${ext}`);
435
- const candLstat = await fs.lstat(candidate).catch(() => null);
436
- if (candLstat?.isFile())
437
- return candidate;
438
- }
439
- }
440
- return null;
441
- }
442
- // Defense against symlinked ancestor segments. `lstat(final)` only
443
- // checks the leaf; an in-project symlink directory imported as
444
- // `./linked-vendor/foo` would let esbuild collect a file whose real
445
- // location is outside projectRoot. `realpath` resolves the entire
446
- // chain, after which a startsWith(projectRoot-realpath) check is
447
- // authoritative.
448
- async function isWithinRealProjectRoot(resolvedPath, projectRoot) {
449
- try {
450
- const [realFile, realRoot] = await Promise.all([
451
- fs.realpath(resolvedPath),
452
- fs.realpath(projectRoot),
453
- ]);
454
- const rootWithSep = realRoot.endsWith(path.sep)
455
- ? realRoot
456
- : realRoot + path.sep;
457
- return realFile === realRoot || realFile.startsWith(rootWithSep);
458
- }
459
- catch {
460
- return false;
461
- }
462
- }
463
- function hasProjectRootTsconfig(collected) {
464
- return collected.has("tsconfig.json");
465
- }
466
- function buildSyntheticTsconfig(tsconfig) {
467
- // Preserve the original baseUrl so projects that point paths at a
468
- // non-root directory (e.g. `baseUrl: "src", paths: { "@/*": ["*"] }`)
469
- // keep resolving the same way inside the sandbox. We default to "."
470
- // only when the source tsconfig didn't specify one - matches TS's
471
- // default behavior when baseUrl is omitted.
472
- return `${JSON.stringify({
473
- compilerOptions: {
474
- baseUrl: tsconfig.baseUrl || ".",
475
- paths: tsconfig.paths,
476
- jsx: "preserve",
477
- moduleResolution: "bundler",
478
- },
479
- }, null, 2)}\n`;
480
- }
481
- function toForwardSlash(p) {
482
- return p.split(path.sep).join("/");
483
- }
484
- // Does this CSS @import specifier match ANY configured tsconfig path
485
- // alias? Used to keep `@import "@/styles/x.css"` or `@import
486
- // "components/tokens.css"` in the archive when the project declares
487
- // those aliases - the imported file is collected via the import
488
- // scanner; stripping the at-rule would orphan it.
489
- function specMatchesAnyAlias(spec, paths) {
490
- for (const pattern of Object.keys(paths)) {
491
- if (pattern.endsWith("/*")) {
492
- const prefix = pattern.slice(0, -1);
493
- if (spec.startsWith(prefix))
494
- return true;
495
- }
496
- else if (spec === pattern) {
497
- return true;
498
- }
499
- }
500
- return false;
501
- }
502
- function stripJsoncCommentsAndTrailingCommas(input) {
503
- let out = "";
504
- let i = 0;
505
- while (i < input.length) {
506
- const ch = input[i];
507
- // String literal: copy verbatim, including any `//` or `/*` inside.
508
- if (ch === '"') {
509
- out += ch;
510
- i++;
511
- while (i < input.length) {
512
- const c = input[i];
513
- out += c;
514
- if (c === "\\") {
515
- if (i + 1 < input.length) {
516
- out += input[i + 1];
517
- i += 2;
518
- continue;
519
- }
520
- }
521
- i++;
522
- if (c === '"')
523
- break;
524
- }
525
- continue;
526
- }
527
- // Line comment.
528
- if (ch === "/" && input[i + 1] === "/") {
529
- i += 2;
530
- while (i < input.length && input[i] !== "\n")
531
- i++;
532
- continue;
533
- }
534
- // Block comment.
535
- if (ch === "/" && input[i + 1] === "*") {
536
- i += 2;
537
- while (i < input.length && !(input[i] === "*" && input[i + 1] === "/"))
538
- i++;
539
- i += 2;
540
- continue;
541
- }
542
- out += ch;
543
- i++;
544
- }
545
- // Trailing commas.
546
- return out.replace(/,(\s*[}\]])/g, "$1");
547
- }
548
- export function normalizeEntryPath(input) {
549
- const trimmed = input.trim();
550
- if (path.isAbsolute(trimmed) || path.win32.isAbsolute(trimmed)) {
551
- throw new Error(`entry path must be relative to the block directory, got "${input}"`);
552
- }
553
- let p = trimmed.replace(/\\/g, "/");
554
- while (p.startsWith("./")) {
555
- p = p.slice(2);
556
- }
557
- if (p.startsWith("/")) {
558
- throw new Error(`entry path must be relative to the block directory, got "${input}"`);
559
- }
560
- if (p.length === 0) {
561
- throw new Error(`entry path is empty after normalization (input: "${input}")`);
562
- }
563
- return p;
564
- }
565
- //# sourceMappingURL=source-collector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"source-collector.js","sourceRoot":"","sources":["../../src/utils/source-collector.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Theme CSS builder.
3
- * Compiles a DefineThemeConfig into CSS custom properties + tag styles.
4
- * Output mirrors the frontend's renderThemeStyles() for local dev preview.
5
- */
6
- import type { DefineThemeConfig } from "@cmssy/types";
7
- /**
8
- * Build CSS from a DefineThemeConfig.
9
- * Returns a complete stylesheet string.
10
- */
11
- export declare function buildThemeCSS(theme: DefineThemeConfig): string;
12
- //# sourceMappingURL=theme-builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"theme-builder.d.ts","sourceRoot":"","sources":["../../src/utils/theme-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAwCtD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CA0F9D"}