@cmssy/cli 0.22.4 ā 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -650
- package/dist/cli.js +706 -328
- package/package.json +26 -73
- package/templates/block/Component.module.css.tpl +12 -0
- package/templates/block/Component.tsx.tpl +15 -0
- package/templates/block/block.ts.tpl +11 -0
- package/templates/init/app/[[...path]]/page.tsx +19 -0
- package/templates/init/app/api/draft/route.ts +5 -0
- package/templates/init/blocks/hero/Hero.module.css +131 -0
- package/templates/init/blocks/hero/Hero.tsx +100 -0
- package/templates/init/blocks/hero/block.ts +21 -0
- package/templates/init/cmssy/blocks.ts +5 -0
- package/templates/init/cmssy/editor.tsx +10 -0
- package/templates/init/cmssy.config.ts +8 -0
- package/templates/init/env.example +4 -0
- package/templates/init/next.config.mjs +8 -0
- package/templates/init/proxy.ts +32 -0
- 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.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
package/dist/commands/doctor.js
DELETED
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
|
-
import { execSync } from "child_process";
|
|
3
|
-
import fs from "fs-extra";
|
|
4
|
-
import path from "path";
|
|
5
|
-
import { loadConfig } from "../utils/config.js";
|
|
6
|
-
import { CLI_VERSION } from "../utils/version.js";
|
|
7
|
-
import { buildClient } from "../utils/graphql.js";
|
|
8
|
-
import { friendlyApiError, isVersionSkewError } from "../utils/api-error.js";
|
|
9
|
-
function getVersion(cmd) {
|
|
10
|
-
try {
|
|
11
|
-
return execSync(cmd, { encoding: "utf-8" }).trim();
|
|
12
|
-
}
|
|
13
|
-
catch {
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
function getPackageVersion(name) {
|
|
18
|
-
const pkgPath = path.join(process.cwd(), "node_modules", name, "package.json");
|
|
19
|
-
if (fs.existsSync(pkgPath)) {
|
|
20
|
-
return fs.readJsonSync(pkgPath).version;
|
|
21
|
-
}
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
export async function doctorCommand() {
|
|
25
|
-
let errors = 0;
|
|
26
|
-
let warnings = 0;
|
|
27
|
-
let passed = 0;
|
|
28
|
-
function pass(msg) {
|
|
29
|
-
console.log(chalk.green(` ā ${msg}`));
|
|
30
|
-
passed++;
|
|
31
|
-
}
|
|
32
|
-
function fail(msg) {
|
|
33
|
-
console.log(chalk.red(` ā ${msg}`));
|
|
34
|
-
errors++;
|
|
35
|
-
}
|
|
36
|
-
function warn(msg) {
|
|
37
|
-
console.log(chalk.yellow(` ā ${msg}`));
|
|
38
|
-
warnings++;
|
|
39
|
-
}
|
|
40
|
-
function skip(msg) {
|
|
41
|
-
console.log(chalk.gray(` - ${msg} (skipped)`));
|
|
42
|
-
}
|
|
43
|
-
console.log(chalk.blue.bold("\n𩺠Cmssy Doctor\n"));
|
|
44
|
-
// --- Environment ---
|
|
45
|
-
console.log(chalk.bold(" Environment"));
|
|
46
|
-
const nodeVersion = process.version;
|
|
47
|
-
const nodeMajor = parseInt(nodeVersion.slice(1));
|
|
48
|
-
if (nodeMajor >= 18) {
|
|
49
|
-
pass(`Node.js ${nodeVersion} (requires >=18)`);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
fail(`Node.js ${nodeVersion} (requires >=18)`);
|
|
53
|
-
}
|
|
54
|
-
const npmVersion = getVersion("npm --version");
|
|
55
|
-
if (npmVersion) {
|
|
56
|
-
pass(`npm v${npmVersion}`);
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
warn("npm not found");
|
|
60
|
-
}
|
|
61
|
-
const nextVersion = getPackageVersion("next");
|
|
62
|
-
if (nextVersion) {
|
|
63
|
-
pass(`next v${nextVersion}`);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
warn("next not installed (peer dependency)");
|
|
67
|
-
}
|
|
68
|
-
const reactVersion = getPackageVersion("react");
|
|
69
|
-
if (reactVersion) {
|
|
70
|
-
pass(`react v${reactVersion}`);
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
warn("react not installed (peer dependency)");
|
|
74
|
-
}
|
|
75
|
-
console.log();
|
|
76
|
-
// --- Configuration ---
|
|
77
|
-
console.log(chalk.bold(" Configuration"));
|
|
78
|
-
const cwd = process.cwd();
|
|
79
|
-
const configPath = path.join(cwd, "cmssy.config.js");
|
|
80
|
-
if (fs.existsSync(configPath)) {
|
|
81
|
-
pass("cmssy.config.js found");
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
fail("cmssy.config.js not found");
|
|
85
|
-
}
|
|
86
|
-
const envPath = path.join(cwd, ".env");
|
|
87
|
-
if (fs.existsSync(envPath)) {
|
|
88
|
-
pass(".env file exists");
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
warn(".env file not found (run: cmssy link)");
|
|
92
|
-
}
|
|
93
|
-
const config = loadConfig();
|
|
94
|
-
if (process.env.CMSSY_API_URL) {
|
|
95
|
-
pass(`CMSSY_API_URL set (${config.apiUrl})`);
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
warn(`CMSSY_API_URL not set, using default (${config.apiUrl})`);
|
|
99
|
-
}
|
|
100
|
-
if (config.apiToken) {
|
|
101
|
-
const masked = config.apiToken.slice(0, 4) + "..." + config.apiToken.slice(-4);
|
|
102
|
-
pass(`CMSSY_API_TOKEN set (${masked})`);
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
fail("CMSSY_API_TOKEN not set (run: cmssy link)");
|
|
106
|
-
}
|
|
107
|
-
if (config.workspaceId) {
|
|
108
|
-
pass(`CMSSY_WORKSPACE_ID set`);
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
warn("CMSSY_WORKSPACE_ID not set (run: cmssy link)");
|
|
112
|
-
}
|
|
113
|
-
console.log();
|
|
114
|
-
// --- API Connection ---
|
|
115
|
-
console.log(chalk.bold(" API Connection"));
|
|
116
|
-
if (config.apiToken) {
|
|
117
|
-
try {
|
|
118
|
-
// wrapErrors:false ā keep the raw error so we can classify it below.
|
|
119
|
-
const client = buildClient(config.apiUrl, config.apiToken, {
|
|
120
|
-
wrapErrors: false,
|
|
121
|
-
});
|
|
122
|
-
const data = await client.request(`
|
|
123
|
-
query { version myWorkspaces { id name } }
|
|
124
|
-
`);
|
|
125
|
-
pass("API reachable");
|
|
126
|
-
pass("Token valid");
|
|
127
|
-
const apiVersion = data.version ?? "unknown";
|
|
128
|
-
pass(`Compatibility (CLI v${CLI_VERSION} ā API v${apiVersion})`);
|
|
129
|
-
const workspaces = data.myWorkspaces || [];
|
|
130
|
-
if (config.workspaceId) {
|
|
131
|
-
const ws = workspaces.find((w) => w.id === config.workspaceId);
|
|
132
|
-
if (ws) {
|
|
133
|
-
pass(`Workspace accessible (${ws.name})`);
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
fail(`Workspace ${config.workspaceId} not accessible`);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
skip("Workspace check (no CMSSY_WORKSPACE_ID)");
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
catch (error) {
|
|
144
|
-
if (isVersionSkewError(error)) {
|
|
145
|
-
fail("CLI/API version mismatch");
|
|
146
|
-
const hint = friendlyApiError(error).message;
|
|
147
|
-
console.log(chalk.yellow(` ${hint.split("\n").join("\n ")}`));
|
|
148
|
-
}
|
|
149
|
-
else if (error.response?.errors) {
|
|
150
|
-
fail("API reachable but token invalid");
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
fail(`API unreachable: ${error.message}`);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
skip("API connection (no token configured)");
|
|
159
|
-
}
|
|
160
|
-
console.log();
|
|
161
|
-
// --- Project ---
|
|
162
|
-
console.log(chalk.bold(" Project"));
|
|
163
|
-
const blocksDir = path.join(cwd, "blocks");
|
|
164
|
-
const templatesDir = path.join(cwd, "templates");
|
|
165
|
-
if (fs.existsSync(blocksDir)) {
|
|
166
|
-
const blockDirs = fs
|
|
167
|
-
.readdirSync(blocksDir, { withFileTypes: true })
|
|
168
|
-
.filter((d) => d.isDirectory());
|
|
169
|
-
pass(`${blockDirs.length} block(s) found in blocks/`);
|
|
170
|
-
for (const dir of blockDirs) {
|
|
171
|
-
const blockPath = path.join(blocksDir, dir.name);
|
|
172
|
-
const hasIndex = fs.existsSync(path.join(blockPath, "src", "index.tsx")) ||
|
|
173
|
-
fs.existsSync(path.join(blockPath, "src", "index.ts"));
|
|
174
|
-
const hasConfig = fs.existsSync(path.join(blockPath, "config.ts")) ||
|
|
175
|
-
fs.existsSync(path.join(blockPath, "config.js"));
|
|
176
|
-
const hasPkg = fs.existsSync(path.join(blockPath, "package.json"));
|
|
177
|
-
const hasPreview = fs.existsSync(path.join(blockPath, "preview.json"));
|
|
178
|
-
if (!hasIndex)
|
|
179
|
-
fail(`Block "${dir.name}" missing src/index.ts(x)`);
|
|
180
|
-
if (!hasConfig)
|
|
181
|
-
fail(`Block "${dir.name}" missing config.ts/js`);
|
|
182
|
-
if (!hasPkg)
|
|
183
|
-
fail(`Block "${dir.name}" missing package.json`);
|
|
184
|
-
if (!hasPreview)
|
|
185
|
-
warn(`Block "${dir.name}" has no preview.json`);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
warn("No blocks/ directory found");
|
|
190
|
-
}
|
|
191
|
-
if (fs.existsSync(templatesDir)) {
|
|
192
|
-
const templateDirs = fs
|
|
193
|
-
.readdirSync(templatesDir, { withFileTypes: true })
|
|
194
|
-
.filter((d) => d.isDirectory());
|
|
195
|
-
if (templateDirs.length > 0) {
|
|
196
|
-
pass(`${templateDirs.length} template(s) found in templates/`);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
console.log();
|
|
200
|
-
// --- Dependencies ---
|
|
201
|
-
console.log(chalk.bold(" Dependencies"));
|
|
202
|
-
const cliVersion = getPackageVersion("@cmssy/cli");
|
|
203
|
-
if (cliVersion) {
|
|
204
|
-
pass(`@cmssy/cli v${cliVersion}`);
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
warn("@cmssy/cli not in node_modules");
|
|
208
|
-
}
|
|
209
|
-
const typesVersion = getPackageVersion("@cmssy/types");
|
|
210
|
-
if (typesVersion) {
|
|
211
|
-
pass(`@cmssy/types v${typesVersion}`);
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
warn("@cmssy/types not in node_modules");
|
|
215
|
-
}
|
|
216
|
-
// --- Summary ---
|
|
217
|
-
console.log();
|
|
218
|
-
const parts = [];
|
|
219
|
-
if (passed > 0)
|
|
220
|
-
parts.push(chalk.green(`${passed} passed`));
|
|
221
|
-
if (warnings > 0)
|
|
222
|
-
parts.push(chalk.yellow(`${warnings} warning(s)`));
|
|
223
|
-
if (errors > 0)
|
|
224
|
-
parts.push(chalk.red(`${errors} error(s)`));
|
|
225
|
-
console.log(` ${parts.join(", ")}\n`);
|
|
226
|
-
if (errors > 0) {
|
|
227
|
-
process.exit(1);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
//# sourceMappingURL=doctor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAeA,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AA+eD,wBAAsB,WAAW,CAC/B,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|
package/dist/commands/init.js
DELETED
|
@@ -1,414 +0,0 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
|
-
import { execSync } from "child_process";
|
|
3
|
-
import fs from "fs-extra";
|
|
4
|
-
import inquirer from "inquirer";
|
|
5
|
-
import ora from "ora";
|
|
6
|
-
import path from "path";
|
|
7
|
-
import { getFieldTypes } from "../utils/field-schema.js";
|
|
8
|
-
import { generateTypes } from "../utils/type-generator.js";
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
10
|
-
// Detect existing Next.js project in cwd
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
function detectNextProject(cwd) {
|
|
13
|
-
return ["next.config.js", "next.config.mjs", "next.config.ts"].some((f) => fs.existsSync(path.join(cwd, f)));
|
|
14
|
-
}
|
|
15
|
-
function detectCmssyProject(cwd) {
|
|
16
|
-
return fs.existsSync(path.join(cwd, "cmssy.config.js"));
|
|
17
|
-
}
|
|
18
|
-
// ---------------------------------------------------------------------------
|
|
19
|
-
// Scaffold example hero block (shared between both modes)
|
|
20
|
-
// ---------------------------------------------------------------------------
|
|
21
|
-
async function scaffoldExampleBlock(projectPath, answers) {
|
|
22
|
-
const heroBlockPath = path.join(projectPath, "blocks", "hero");
|
|
23
|
-
fs.mkdirSync(path.join(heroBlockPath, "src"), { recursive: true });
|
|
24
|
-
// Hero.tsx
|
|
25
|
-
fs.writeFileSync(path.join(heroBlockPath, "src", "Hero.tsx"), `import { BlockContent } from "./block";
|
|
26
|
-
|
|
27
|
-
export default function Hero({ content }: { content: BlockContent }) {
|
|
28
|
-
const {
|
|
29
|
-
heading = "Welcome to Cmssy",
|
|
30
|
-
subheading = "Build reusable UI blocks with React & Tailwind",
|
|
31
|
-
ctaText = "Get Started",
|
|
32
|
-
ctaUrl = "#",
|
|
33
|
-
} = content;
|
|
34
|
-
|
|
35
|
-
return (
|
|
36
|
-
<section className="flex items-center justify-center min-h-[400px] p-8 bg-gradient-to-br from-purple-600 to-purple-900 text-white text-center">
|
|
37
|
-
<div className="max-w-3xl">
|
|
38
|
-
<h1 className="text-5xl font-bold mb-4">{heading}</h1>
|
|
39
|
-
<p className="text-xl mb-8 opacity-90">{subheading}</p>
|
|
40
|
-
<a
|
|
41
|
-
href={ctaUrl}
|
|
42
|
-
className="inline-block px-8 py-4 bg-white text-purple-600 rounded-lg font-semibold hover:scale-105 transition-transform"
|
|
43
|
-
>
|
|
44
|
-
{ctaText}
|
|
45
|
-
</a>
|
|
46
|
-
</div>
|
|
47
|
-
</section>
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
`);
|
|
51
|
-
// index.tsx
|
|
52
|
-
fs.writeFileSync(path.join(heroBlockPath, "src", "index.tsx"), `export { default } from "./Hero";
|
|
53
|
-
import "./index.css";
|
|
54
|
-
`);
|
|
55
|
-
// index.css
|
|
56
|
-
fs.writeFileSync(path.join(heroBlockPath, "src", "index.css"), `@import "../../../styles/main.css";\n`);
|
|
57
|
-
// package.json
|
|
58
|
-
fs.writeFileSync(path.join(heroBlockPath, "package.json"), JSON.stringify({
|
|
59
|
-
name: `@${answers.projectName}/blocks.hero`,
|
|
60
|
-
version: "1.0.0",
|
|
61
|
-
description: "Hero section block",
|
|
62
|
-
author: { name: answers.authorName, email: answers.authorEmail },
|
|
63
|
-
}, null, 2) + "\n");
|
|
64
|
-
// config.ts
|
|
65
|
-
fs.writeFileSync(path.join(heroBlockPath, "config.ts"), `import { defineBlock, field } from "@cmssy/cli/config";
|
|
66
|
-
|
|
67
|
-
export default defineBlock({
|
|
68
|
-
name: "Hero Section",
|
|
69
|
-
description: "Hero section with heading and CTA",
|
|
70
|
-
category: "marketing",
|
|
71
|
-
tags: ["hero", "landing", "cta"],
|
|
72
|
-
|
|
73
|
-
schema: {
|
|
74
|
-
heading: field({
|
|
75
|
-
type: "singleLine",
|
|
76
|
-
label: "Heading",
|
|
77
|
-
defaultValue: "Welcome to Cmssy",
|
|
78
|
-
}),
|
|
79
|
-
subheading: field({
|
|
80
|
-
type: "singleLine",
|
|
81
|
-
label: "Subheading",
|
|
82
|
-
defaultValue: "Build reusable UI blocks with React & Tailwind",
|
|
83
|
-
}),
|
|
84
|
-
ctaText: field({
|
|
85
|
-
type: "singleLine",
|
|
86
|
-
label: "CTA Text",
|
|
87
|
-
defaultValue: "Get Started",
|
|
88
|
-
}),
|
|
89
|
-
ctaUrl: field({
|
|
90
|
-
type: "link",
|
|
91
|
-
label: "CTA URL",
|
|
92
|
-
defaultValue: "#",
|
|
93
|
-
}),
|
|
94
|
-
},
|
|
95
|
-
});
|
|
96
|
-
`);
|
|
97
|
-
// preview.json
|
|
98
|
-
fs.writeFileSync(path.join(heroBlockPath, "preview.json"), JSON.stringify({
|
|
99
|
-
heading: "Welcome to Cmssy",
|
|
100
|
-
subheading: "Build reusable UI blocks with React & Tailwind",
|
|
101
|
-
ctaText: "Get Started",
|
|
102
|
-
ctaUrl: "#",
|
|
103
|
-
}, null, 2) + "\n");
|
|
104
|
-
// Generate types
|
|
105
|
-
const heroSchema = {
|
|
106
|
-
heading: {
|
|
107
|
-
type: "singleLine",
|
|
108
|
-
label: "Heading",
|
|
109
|
-
defaultValue: "Welcome to Cmssy",
|
|
110
|
-
},
|
|
111
|
-
subheading: {
|
|
112
|
-
type: "singleLine",
|
|
113
|
-
label: "Subheading",
|
|
114
|
-
defaultValue: "Build reusable UI blocks",
|
|
115
|
-
},
|
|
116
|
-
ctaText: {
|
|
117
|
-
type: "singleLine",
|
|
118
|
-
label: "CTA Text",
|
|
119
|
-
defaultValue: "Get Started",
|
|
120
|
-
},
|
|
121
|
-
ctaUrl: { type: "link", label: "CTA URL", defaultValue: "#" },
|
|
122
|
-
};
|
|
123
|
-
const fieldTypes = await getFieldTypes();
|
|
124
|
-
await generateTypes({
|
|
125
|
-
blockPath: heroBlockPath,
|
|
126
|
-
schema: heroSchema,
|
|
127
|
-
fieldTypes,
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
// ---------------------------------------------------------------------------
|
|
131
|
-
// Write cmssy.config.js
|
|
132
|
-
// ---------------------------------------------------------------------------
|
|
133
|
-
function writeCmssyConfig(projectPath, answers) {
|
|
134
|
-
const config = {
|
|
135
|
-
framework: "react",
|
|
136
|
-
projectName: answers.projectName,
|
|
137
|
-
author: { name: answers.authorName, email: answers.authorEmail },
|
|
138
|
-
build: { outDir: "public", minify: true, sourcemap: true },
|
|
139
|
-
};
|
|
140
|
-
fs.writeFileSync(path.join(projectPath, "cmssy.config.js"), `export default ${JSON.stringify(config, null, 2)};\n`);
|
|
141
|
-
}
|
|
142
|
-
// ---------------------------------------------------------------------------
|
|
143
|
-
// Write styles/main.css
|
|
144
|
-
// ---------------------------------------------------------------------------
|
|
145
|
-
function writeMainCss(projectPath) {
|
|
146
|
-
const stylesDir = path.join(projectPath, "styles");
|
|
147
|
-
fs.mkdirSync(stylesDir, { recursive: true });
|
|
148
|
-
fs.writeFileSync(path.join(stylesDir, "main.css"), `@import "tailwindcss";
|
|
149
|
-
@source "../blocks";
|
|
150
|
-
@source "../templates";
|
|
151
|
-
@source "../components";
|
|
152
|
-
|
|
153
|
-
/* Set default border color (Tailwind v4 reset uses currentColor) */
|
|
154
|
-
@layer base {
|
|
155
|
-
*,
|
|
156
|
-
::after,
|
|
157
|
-
::before {
|
|
158
|
-
border-color: var(--border, currentColor);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
`);
|
|
162
|
-
}
|
|
163
|
-
// ---------------------------------------------------------------------------
|
|
164
|
-
// Write .env.example
|
|
165
|
-
// ---------------------------------------------------------------------------
|
|
166
|
-
function writeEnvExample(projectPath) {
|
|
167
|
-
fs.writeFileSync(path.join(projectPath, ".env.example"), `# Cmssy API Configuration
|
|
168
|
-
# Run 'cmssy link' to set these values
|
|
169
|
-
|
|
170
|
-
# Cmssy GraphQL API URL
|
|
171
|
-
CMSSY_API_URL=https://api.cmssy.io/graphql
|
|
172
|
-
|
|
173
|
-
# Cmssy API Token (get from Dashboard ā API Tokens)
|
|
174
|
-
CMSSY_API_TOKEN=
|
|
175
|
-
|
|
176
|
-
# Workspace ID (for workspace publish)
|
|
177
|
-
CMSSY_WORKSPACE_ID=
|
|
178
|
-
`);
|
|
179
|
-
}
|
|
180
|
-
// ---------------------------------------------------------------------------
|
|
181
|
-
// Merge cmssy scripts into existing package.json
|
|
182
|
-
// ---------------------------------------------------------------------------
|
|
183
|
-
function mergeCmssyScripts(projectPath) {
|
|
184
|
-
const pkgPath = path.join(projectPath, "package.json");
|
|
185
|
-
if (!fs.existsSync(pkgPath))
|
|
186
|
-
return;
|
|
187
|
-
const pkg = fs.readJsonSync(pkgPath);
|
|
188
|
-
pkg.scripts = pkg.scripts || {};
|
|
189
|
-
if (!pkg.scripts["cmssy:dev"]) {
|
|
190
|
-
pkg.scripts["cmssy:dev"] = "cmssy dev";
|
|
191
|
-
}
|
|
192
|
-
if (!pkg.scripts["cmssy:build"]) {
|
|
193
|
-
pkg.scripts["cmssy:build"] = "cmssy build";
|
|
194
|
-
}
|
|
195
|
-
if (typeof pkg.scripts["cmssy:publish"] === "string" &&
|
|
196
|
-
/^cmssy publish(\s|$)/.test(pkg.scripts["cmssy:publish"])) {
|
|
197
|
-
delete pkg.scripts["cmssy:publish"];
|
|
198
|
-
}
|
|
199
|
-
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n");
|
|
200
|
-
}
|
|
201
|
-
// ---------------------------------------------------------------------------
|
|
202
|
-
// New project mode: create-next-app + cmssy layer
|
|
203
|
-
// ---------------------------------------------------------------------------
|
|
204
|
-
async function initNewProject(name, options) {
|
|
205
|
-
console.log(chalk.blue.bold("\nšØ Cmssy - Create New Project\n"));
|
|
206
|
-
let answers;
|
|
207
|
-
if (options.yes) {
|
|
208
|
-
answers = { projectName: name, authorName: "", authorEmail: "" };
|
|
209
|
-
console.log(chalk.gray(`Using defaults: ${name}\n`));
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
answers = await inquirer.prompt([
|
|
213
|
-
{
|
|
214
|
-
type: "input",
|
|
215
|
-
name: "projectName",
|
|
216
|
-
message: "Project name:",
|
|
217
|
-
default: name,
|
|
218
|
-
validate: (input) => {
|
|
219
|
-
if (/^[a-z0-9-_]+$/.test(input))
|
|
220
|
-
return true;
|
|
221
|
-
return "Must contain only lowercase letters, numbers, hyphens, underscores";
|
|
222
|
-
},
|
|
223
|
-
},
|
|
224
|
-
{
|
|
225
|
-
type: "input",
|
|
226
|
-
name: "authorName",
|
|
227
|
-
message: "Author name:",
|
|
228
|
-
default: "",
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
type: "input",
|
|
232
|
-
name: "authorEmail",
|
|
233
|
-
message: "Author email:",
|
|
234
|
-
default: "",
|
|
235
|
-
},
|
|
236
|
-
]);
|
|
237
|
-
name = answers.projectName;
|
|
238
|
-
}
|
|
239
|
-
const projectPath = path.join(process.cwd(), name);
|
|
240
|
-
if (fs.existsSync(projectPath)) {
|
|
241
|
-
console.error(chalk.red(`\nā Directory "${name}" already exists\n`));
|
|
242
|
-
process.exit(1);
|
|
243
|
-
}
|
|
244
|
-
// Step 1: Run create-next-app
|
|
245
|
-
const spinner = ora("Running create-next-app...").start();
|
|
246
|
-
try {
|
|
247
|
-
execSync(`npx create-next-app@latest ${name} --typescript --tailwind --app --src-dir --no-eslint --import-alias "@/*"`, { cwd: process.cwd(), stdio: "pipe" });
|
|
248
|
-
spinner.succeed("Next.js project created");
|
|
249
|
-
}
|
|
250
|
-
catch (error) {
|
|
251
|
-
spinner.fail("Failed to run create-next-app");
|
|
252
|
-
console.error(chalk.red("\nMake sure npx is available and you have internet access.\n"));
|
|
253
|
-
process.exit(1);
|
|
254
|
-
}
|
|
255
|
-
// Step 2: Add cmssy layer
|
|
256
|
-
spinner.start("Adding Cmssy configuration...");
|
|
257
|
-
try {
|
|
258
|
-
// Create directories
|
|
259
|
-
fs.mkdirSync(path.join(projectPath, "blocks"), { recursive: true });
|
|
260
|
-
fs.mkdirSync(path.join(projectPath, "templates"), { recursive: true });
|
|
261
|
-
fs.mkdirSync(path.join(projectPath, ".cmssy"), { recursive: true });
|
|
262
|
-
writeCmssyConfig(projectPath, answers);
|
|
263
|
-
writeMainCss(projectPath);
|
|
264
|
-
writeEnvExample(projectPath);
|
|
265
|
-
mergeCmssyScripts(projectPath);
|
|
266
|
-
// Add .cmssy/ to gitignore
|
|
267
|
-
const gitignorePath = path.join(projectPath, ".gitignore");
|
|
268
|
-
if (fs.existsSync(gitignorePath)) {
|
|
269
|
-
const content = fs.readFileSync(gitignorePath, "utf-8");
|
|
270
|
-
if (!content.includes(".cmssy")) {
|
|
271
|
-
fs.appendFileSync(gitignorePath, "\n# Cmssy\n.cmssy/\npublic/\n");
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
spinner.succeed("Cmssy configuration added");
|
|
275
|
-
// Step 3: Install @cmssy/types
|
|
276
|
-
spinner.start("Installing @cmssy/types...");
|
|
277
|
-
execSync("npm install --save-dev @cmssy/types @cmssy/cli", {
|
|
278
|
-
cwd: projectPath,
|
|
279
|
-
stdio: "pipe",
|
|
280
|
-
});
|
|
281
|
-
spinner.succeed("Dependencies installed");
|
|
282
|
-
// Step 4: Create example block
|
|
283
|
-
spinner.start("Creating example hero block...");
|
|
284
|
-
await scaffoldExampleBlock(projectPath, answers);
|
|
285
|
-
spinner.succeed("Example hero block created");
|
|
286
|
-
console.log(chalk.green.bold("\nā Project created successfully!\n"));
|
|
287
|
-
console.log(chalk.cyan("Next steps:\n"));
|
|
288
|
-
console.log(chalk.white(` cd ${name}`));
|
|
289
|
-
console.log(chalk.white(" cmssy link Connect to your workspace"));
|
|
290
|
-
console.log(chalk.white(" cmssy dev Start developing\n"));
|
|
291
|
-
}
|
|
292
|
-
catch (error) {
|
|
293
|
-
spinner.fail("Failed to set up Cmssy");
|
|
294
|
-
console.error(chalk.red("\nError:"), error);
|
|
295
|
-
process.exit(1);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
// ---------------------------------------------------------------------------
|
|
299
|
-
// Existing project mode: add cmssy to current Next.js project
|
|
300
|
-
// ---------------------------------------------------------------------------
|
|
301
|
-
async function initExistingProject(options) {
|
|
302
|
-
const cwd = process.cwd();
|
|
303
|
-
console.log(chalk.blue.bold("\nšØ Cmssy - Initialize in Existing Project\n"));
|
|
304
|
-
console.log(chalk.gray(`Detected Next.js project in ${path.basename(cwd)}\n`));
|
|
305
|
-
if (detectCmssyProject(cwd)) {
|
|
306
|
-
console.error(chalk.red("ā This project already has cmssy.config.js. Nothing to do.\n"));
|
|
307
|
-
process.exit(1);
|
|
308
|
-
}
|
|
309
|
-
// Read project name from existing package.json
|
|
310
|
-
const pkgPath = path.join(cwd, "package.json");
|
|
311
|
-
const pkg = fs.existsSync(pkgPath) ? fs.readJsonSync(pkgPath) : {};
|
|
312
|
-
const defaultName = pkg.name || path.basename(cwd);
|
|
313
|
-
let answers;
|
|
314
|
-
if (options.yes) {
|
|
315
|
-
answers = { projectName: defaultName, authorName: "", authorEmail: "" };
|
|
316
|
-
console.log(chalk.gray(`Using defaults: ${defaultName}\n`));
|
|
317
|
-
}
|
|
318
|
-
else {
|
|
319
|
-
answers = await inquirer.prompt([
|
|
320
|
-
{
|
|
321
|
-
type: "input",
|
|
322
|
-
name: "projectName",
|
|
323
|
-
message: "Cmssy project name:",
|
|
324
|
-
default: defaultName,
|
|
325
|
-
},
|
|
326
|
-
{
|
|
327
|
-
type: "input",
|
|
328
|
-
name: "authorName",
|
|
329
|
-
message: "Author name:",
|
|
330
|
-
default: pkg.author?.name || "",
|
|
331
|
-
},
|
|
332
|
-
{
|
|
333
|
-
type: "input",
|
|
334
|
-
name: "authorEmail",
|
|
335
|
-
message: "Author email:",
|
|
336
|
-
default: pkg.author?.email || "",
|
|
337
|
-
},
|
|
338
|
-
]);
|
|
339
|
-
}
|
|
340
|
-
const spinner = ora("Adding Cmssy configuration...").start();
|
|
341
|
-
try {
|
|
342
|
-
// Create directories
|
|
343
|
-
fs.mkdirSync(path.join(cwd, "blocks"), { recursive: true });
|
|
344
|
-
fs.mkdirSync(path.join(cwd, "templates"), { recursive: true });
|
|
345
|
-
fs.mkdirSync(path.join(cwd, ".cmssy"), { recursive: true });
|
|
346
|
-
writeCmssyConfig(cwd, answers);
|
|
347
|
-
writeMainCss(cwd);
|
|
348
|
-
writeEnvExample(cwd);
|
|
349
|
-
mergeCmssyScripts(cwd);
|
|
350
|
-
// Add .cmssy/ to gitignore
|
|
351
|
-
const gitignorePath = path.join(cwd, ".gitignore");
|
|
352
|
-
if (fs.existsSync(gitignorePath)) {
|
|
353
|
-
const content = fs.readFileSync(gitignorePath, "utf-8");
|
|
354
|
-
if (!content.includes(".cmssy")) {
|
|
355
|
-
fs.appendFileSync(gitignorePath, "\n# Cmssy\n.cmssy/\n");
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
spinner.succeed("Cmssy configuration added");
|
|
359
|
-
// Install dependencies
|
|
360
|
-
spinner.start("Installing @cmssy/types...");
|
|
361
|
-
const packageManager = detectPackageManager(cwd);
|
|
362
|
-
const installCmd = packageManager === "pnpm"
|
|
363
|
-
? "pnpm add -D @cmssy/types @cmssy/cli"
|
|
364
|
-
: packageManager === "yarn"
|
|
365
|
-
? "yarn add -D @cmssy/types @cmssy/cli"
|
|
366
|
-
: "npm install --save-dev @cmssy/types @cmssy/cli";
|
|
367
|
-
execSync(installCmd, { cwd, stdio: "pipe" });
|
|
368
|
-
spinner.succeed("Dependencies installed");
|
|
369
|
-
// Create example block
|
|
370
|
-
spinner.start("Creating example hero block...");
|
|
371
|
-
await scaffoldExampleBlock(cwd, answers);
|
|
372
|
-
spinner.succeed("Example hero block created");
|
|
373
|
-
console.log(chalk.green.bold("\nā Cmssy initialized successfully!\n"));
|
|
374
|
-
console.log(chalk.cyan("Next steps:\n"));
|
|
375
|
-
console.log(chalk.white(" cmssy link Connect to your workspace"));
|
|
376
|
-
console.log(chalk.white(" cmssy dev Start developing\n"));
|
|
377
|
-
}
|
|
378
|
-
catch (error) {
|
|
379
|
-
spinner.fail("Failed to initialize Cmssy");
|
|
380
|
-
console.error(chalk.red("\nError:"), error);
|
|
381
|
-
process.exit(1);
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
// ---------------------------------------------------------------------------
|
|
385
|
-
// Detect package manager from lockfile
|
|
386
|
-
// ---------------------------------------------------------------------------
|
|
387
|
-
function detectPackageManager(cwd) {
|
|
388
|
-
if (fs.existsSync(path.join(cwd, "pnpm-lock.yaml")))
|
|
389
|
-
return "pnpm";
|
|
390
|
-
if (fs.existsSync(path.join(cwd, "yarn.lock")))
|
|
391
|
-
return "yarn";
|
|
392
|
-
return "npm";
|
|
393
|
-
}
|
|
394
|
-
// ---------------------------------------------------------------------------
|
|
395
|
-
// Main entry point
|
|
396
|
-
// ---------------------------------------------------------------------------
|
|
397
|
-
export async function initCommand(name, options = {}) {
|
|
398
|
-
if (name) {
|
|
399
|
-
// Explicit name ā create new project
|
|
400
|
-
await initNewProject(name, options);
|
|
401
|
-
}
|
|
402
|
-
else if (detectNextProject(process.cwd())) {
|
|
403
|
-
// No name, but in Next.js project ā existing mode
|
|
404
|
-
await initExistingProject(options);
|
|
405
|
-
}
|
|
406
|
-
else {
|
|
407
|
-
console.error(chalk.red("\nā No project name provided and no Next.js project detected.\n"));
|
|
408
|
-
console.log(chalk.cyan("Usage:\n"));
|
|
409
|
-
console.log(chalk.white(" cmssy init my-blocks Create a new project"));
|
|
410
|
-
console.log(chalk.white(" cmssy init Initialize in existing Next.js project\n"));
|
|
411
|
-
process.exit(1);
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
//# sourceMappingURL=init.js.map
|