@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.
- package/dist/index.js +435 -0
- package/package.json +25 -86
- package/LICENSE +0 -21
- package/README.md +0 -692
- package/config.d.ts +0 -3
- package/config.js +0 -4
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -340
- package/dist/cli.js.map +0 -1
- package/dist/commands/add-source.d.ts +0 -13
- package/dist/commands/add-source.d.ts.map +0 -1
- package/dist/commands/add-source.js +0 -273
- package/dist/commands/add-source.js.map +0 -1
- package/dist/commands/build.d.ts +0 -7
- package/dist/commands/build.d.ts.map +0 -1
- package/dist/commands/build.js +0 -127
- package/dist/commands/build.js.map +0 -1
- package/dist/commands/codegen.d.ts +0 -7
- package/dist/commands/codegen.d.ts.map +0 -1
- package/dist/commands/codegen.js +0 -150
- package/dist/commands/codegen.js.map +0 -1
- package/dist/commands/configure.d.ts +0 -6
- package/dist/commands/configure.d.ts.map +0 -1
- package/dist/commands/configure.js +0 -39
- package/dist/commands/configure.js.map +0 -1
- package/dist/commands/create.d.ts +0 -18
- package/dist/commands/create.d.ts.map +0 -1
- package/dist/commands/create.js +0 -403
- package/dist/commands/create.js.map +0 -1
- package/dist/commands/dev.d.ts +0 -6
- package/dist/commands/dev.d.ts.map +0 -1
- package/dist/commands/dev.js +0 -144
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -2
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -230
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/init.d.ts +0 -6
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -414
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/lib.d.ts +0 -17
- package/dist/commands/lib.d.ts.map +0 -1
- package/dist/commands/lib.js +0 -132
- package/dist/commands/lib.js.map +0 -1
- package/dist/commands/link.d.ts +0 -8
- package/dist/commands/link.d.ts.map +0 -1
- package/dist/commands/link.js +0 -116
- package/dist/commands/link.js.map +0 -1
- package/dist/commands/migrate.d.ts +0 -2
- package/dist/commands/migrate.d.ts.map +0 -1
- package/dist/commands/migrate.js +0 -231
- package/dist/commands/migrate.js.map +0 -1
- package/dist/commands/package.d.ts +0 -14
- package/dist/commands/package.d.ts.map +0 -1
- package/dist/commands/package.js +0 -137
- package/dist/commands/package.js.map +0 -1
- package/dist/commands/publish-block-buildtime.d.ts +0 -8
- package/dist/commands/publish-block-buildtime.d.ts.map +0 -1
- package/dist/commands/publish-block-buildtime.js +0 -290
- package/dist/commands/publish-block-buildtime.js.map +0 -1
- package/dist/commands/publish-template.d.ts +0 -22
- package/dist/commands/publish-template.d.ts.map +0 -1
- package/dist/commands/publish-template.js +0 -345
- package/dist/commands/publish-template.js.map +0 -1
- package/dist/commands/publish.d.ts +0 -15
- package/dist/commands/publish.d.ts.map +0 -1
- package/dist/commands/publish.js +0 -1003
- package/dist/commands/publish.js.map +0 -1
- package/dist/commands/skills.d.ts +0 -11
- package/dist/commands/skills.d.ts.map +0 -1
- package/dist/commands/skills.js +0 -178
- package/dist/commands/skills.js.map +0 -1
- package/dist/commands/sync.d.ts +0 -6
- package/dist/commands/sync.d.ts.map +0 -1
- package/dist/commands/sync.js +0 -208
- package/dist/commands/sync.js.map +0 -1
- package/dist/commands/test.d.ts +0 -8
- package/dist/commands/test.d.ts.map +0 -1
- package/dist/commands/test.js +0 -60
- package/dist/commands/test.js.map +0 -1
- package/dist/commands/upload.d.ts +0 -11
- package/dist/commands/upload.d.ts.map +0 -1
- package/dist/commands/upload.js +0 -128
- package/dist/commands/upload.js.map +0 -1
- package/dist/commands/workspaces.d.ts +0 -2
- package/dist/commands/workspaces.d.ts.map +0 -1
- package/dist/commands/workspaces.js +0 -62
- package/dist/commands/workspaces.js.map +0 -1
- package/dist/dev-ui/app.js +0 -1284
- package/dist/dev-ui/index.html +0 -1511
- package/dist/dev-ui-react/App.tsx +0 -164
- package/dist/dev-ui-react/__tests__/previewData.test.ts +0 -193
- package/dist/dev-ui-react/components/BlocksList.tsx +0 -232
- package/dist/dev-ui-react/components/Editor.tsx +0 -469
- package/dist/dev-ui-react/components/Preview.tsx +0 -146
- package/dist/dev-ui-react/hooks/useBlocks.ts +0 -80
- package/dist/dev-ui-react/index.html +0 -13
- package/dist/dev-ui-react/main.tsx +0 -8
- package/dist/dev-ui-react/styles.css +0 -856
- package/dist/dev-ui-react/types.ts +0 -45
- package/dist/skills/claude/cmssy-block.md +0 -454
- package/dist/skills/claude/cmssy-mcp-content.md +0 -235
- package/dist/test-helpers/index.d.ts +0 -23
- package/dist/test-helpers/index.d.ts.map +0 -1
- package/dist/test-helpers/index.js +0 -50
- package/dist/test-helpers/index.js.map +0 -1
- package/dist/types/block-config.d.ts +0 -6
- package/dist/types/block-config.d.ts.map +0 -1
- package/dist/types/block-config.js +0 -12
- package/dist/types/block-config.js.map +0 -1
- package/dist/types/publish-job.d.ts +0 -61
- package/dist/types/publish-job.d.ts.map +0 -1
- package/dist/types/publish-job.js +0 -13
- package/dist/types/publish-job.js.map +0 -1
- package/dist/utils/api-error.d.ts +0 -10
- package/dist/utils/api-error.d.ts.map +0 -1
- package/dist/utils/api-error.js +0 -55
- package/dist/utils/api-error.js.map +0 -1
- package/dist/utils/block-config.d.ts +0 -87
- package/dist/utils/block-config.d.ts.map +0 -1
- package/dist/utils/block-config.js +0 -214
- package/dist/utils/block-config.js.map +0 -1
- package/dist/utils/blocks-meta-cache.d.ts +0 -28
- package/dist/utils/blocks-meta-cache.d.ts.map +0 -1
- package/dist/utils/blocks-meta-cache.js +0 -72
- package/dist/utils/blocks-meta-cache.js.map +0 -1
- package/dist/utils/builder.d.ts +0 -34
- package/dist/utils/builder.d.ts.map +0 -1
- package/dist/utils/builder.js +0 -140
- package/dist/utils/builder.js.map +0 -1
- package/dist/utils/cmssy-config.d.ts +0 -16
- package/dist/utils/cmssy-config.d.ts.map +0 -1
- package/dist/utils/cmssy-config.js +0 -19
- package/dist/utils/cmssy-config.js.map +0 -1
- package/dist/utils/config.d.ts +0 -9
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -51
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/dependency-check.d.ts +0 -21
- package/dist/utils/dependency-check.d.ts.map +0 -1
- package/dist/utils/dependency-check.js +0 -56
- package/dist/utils/dependency-check.js.map +0 -1
- package/dist/utils/dev-generator/api-routes/blocks.d.ts +0 -3
- package/dist/utils/dev-generator/api-routes/blocks.d.ts.map +0 -1
- package/dist/utils/dev-generator/api-routes/blocks.js +0 -194
- package/dist/utils/dev-generator/api-routes/blocks.js.map +0 -1
- package/dist/utils/dev-generator/api-routes/config.d.ts +0 -2
- package/dist/utils/dev-generator/api-routes/config.d.ts.map +0 -1
- package/dist/utils/dev-generator/api-routes/config.js +0 -107
- package/dist/utils/dev-generator/api-routes/config.js.map +0 -1
- package/dist/utils/dev-generator/api-routes/preview.d.ts +0 -2
- package/dist/utils/dev-generator/api-routes/preview.d.ts.map +0 -1
- package/dist/utils/dev-generator/api-routes/preview.js +0 -50
- package/dist/utils/dev-generator/api-routes/preview.js.map +0 -1
- package/dist/utils/dev-generator/api-routes/workspaces.d.ts +0 -2
- package/dist/utils/dev-generator/api-routes/workspaces.d.ts.map +0 -1
- package/dist/utils/dev-generator/api-routes/workspaces.js +0 -128
- package/dist/utils/dev-generator/api-routes/workspaces.js.map +0 -1
- package/dist/utils/dev-generator/helpers.d.ts +0 -23
- package/dist/utils/dev-generator/helpers.d.ts.map +0 -1
- package/dist/utils/dev-generator/helpers.js +0 -128
- package/dist/utils/dev-generator/helpers.js.map +0 -1
- package/dist/utils/dev-generator/home-page.d.ts +0 -2
- package/dist/utils/dev-generator/home-page.d.ts.map +0 -1
- package/dist/utils/dev-generator/home-page.js +0 -643
- package/dist/utils/dev-generator/home-page.js.map +0 -1
- package/dist/utils/dev-generator/index.d.ts +0 -11
- package/dist/utils/dev-generator/index.d.ts.map +0 -1
- package/dist/utils/dev-generator/index.js +0 -85
- package/dist/utils/dev-generator/index.js.map +0 -1
- package/dist/utils/dev-generator/layout.d.ts +0 -3
- package/dist/utils/dev-generator/layout.d.ts.map +0 -1
- package/dist/utils/dev-generator/layout.js +0 -63
- package/dist/utils/dev-generator/layout.js.map +0 -1
- package/dist/utils/dev-generator/next-config.d.ts +0 -3
- package/dist/utils/dev-generator/next-config.d.ts.map +0 -1
- package/dist/utils/dev-generator/next-config.js +0 -111
- package/dist/utils/dev-generator/next-config.js.map +0 -1
- package/dist/utils/dev-generator/preview-pages.d.ts +0 -3
- package/dist/utils/dev-generator/preview-pages.d.ts.map +0 -1
- package/dist/utils/dev-generator/preview-pages.js +0 -833
- package/dist/utils/dev-generator/preview-pages.js.map +0 -1
- package/dist/utils/dev-generator.d.ts +0 -12
- package/dist/utils/dev-generator.d.ts.map +0 -1
- package/dist/utils/dev-generator.js +0 -1752
- package/dist/utils/dev-generator.js.map +0 -1
- package/dist/utils/field-schema.d.ts +0 -13
- package/dist/utils/field-schema.d.ts.map +0 -1
- package/dist/utils/field-schema.js +0 -182
- package/dist/utils/field-schema.js.map +0 -1
- package/dist/utils/graphql.d.ts +0 -39
- package/dist/utils/graphql.d.ts.map +0 -1
- package/dist/utils/graphql.js +0 -138
- package/dist/utils/graphql.js.map +0 -1
- package/dist/utils/lib-manifest.d.ts +0 -7
- package/dist/utils/lib-manifest.d.ts.map +0 -1
- package/dist/utils/lib-manifest.js +0 -59
- package/dist/utils/lib-manifest.js.map +0 -1
- package/dist/utils/publish-helpers.d.ts +0 -43
- package/dist/utils/publish-helpers.d.ts.map +0 -1
- package/dist/utils/publish-helpers.js +0 -215
- package/dist/utils/publish-helpers.js.map +0 -1
- package/dist/utils/publish-helpers.test.d.ts +0 -2
- package/dist/utils/publish-helpers.test.d.ts.map +0 -1
- package/dist/utils/publish-helpers.test.js +0 -24
- package/dist/utils/publish-helpers.test.js.map +0 -1
- package/dist/utils/resolve-workspace.d.ts +0 -6
- package/dist/utils/resolve-workspace.d.ts.map +0 -1
- package/dist/utils/resolve-workspace.js +0 -32
- package/dist/utils/resolve-workspace.js.map +0 -1
- package/dist/utils/scanner.d.ts +0 -42
- package/dist/utils/scanner.d.ts.map +0 -1
- package/dist/utils/scanner.js +0 -156
- package/dist/utils/scanner.js.map +0 -1
- package/dist/utils/schema-diff.d.ts +0 -22
- package/dist/utils/schema-diff.d.ts.map +0 -1
- package/dist/utils/schema-diff.js +0 -107
- package/dist/utils/schema-diff.js.map +0 -1
- package/dist/utils/source-collector.d.ts +0 -19
- package/dist/utils/source-collector.d.ts.map +0 -1
- package/dist/utils/source-collector.js +0 -565
- package/dist/utils/source-collector.js.map +0 -1
- package/dist/utils/theme-builder.d.ts +0 -12
- package/dist/utils/theme-builder.d.ts.map +0 -1
- package/dist/utils/theme-builder.js +0 -117
- package/dist/utils/theme-builder.js.map +0 -1
- package/dist/utils/type-generator.d.ts +0 -9
- package/dist/utils/type-generator.d.ts.map +0 -1
- package/dist/utils/type-generator.js +0 -86
- package/dist/utils/type-generator.js.map +0 -1
- package/dist/utils/version.d.ts +0 -10
- package/dist/utils/version.d.ts.map +0 -1
- package/dist/utils/version.js +0 -30
- package/dist/utils/version.js.map +0 -1
- package/dist/utils/versions.d.ts.map +0 -1
- package/dist/utils/versions.js.map +0 -1
- package/src/dev-app/app/api/blocks/[name]/config/route.ts +0 -140
- package/src/dev-app/app/api/blocks/route.ts +0 -61
- package/src/dev-app/app/api/config/route.ts +0 -98
- package/src/dev-app/app/api/context/route.ts +0 -126
- package/src/dev-app/app/api/preview/[name]/route.ts +0 -137
- package/src/dev-app/app/api/workspaces/route.ts +0 -124
- package/src/dev-app/app/layout.tsx +0 -18
- package/src/dev-app/app/page.tsx +0 -1785
- package/test.d.ts +0 -1
- 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"}
|