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