@cmssy/cli 0.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/LICENSE +21 -0
- package/README.md +649 -0
- package/config.d.ts +2 -0
- package/config.js +2 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +236 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add-source.d.ts +7 -0
- package/dist/commands/add-source.d.ts.map +1 -0
- package/dist/commands/add-source.js +238 -0
- package/dist/commands/add-source.js.map +1 -0
- package/dist/commands/build.d.ts +7 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +105 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/configure.d.ts +6 -0
- package/dist/commands/configure.d.ts.map +1 -0
- package/dist/commands/configure.js +42 -0
- package/dist/commands/configure.js.map +1 -0
- package/dist/commands/create.d.ts +18 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +444 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/dev.d.ts +6 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +962 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +362 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/migrate.d.ts +2 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +227 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/package.d.ts +7 -0
- package/dist/commands/package.d.ts.map +1 -0
- package/dist/commands/package.js +136 -0
- package/dist/commands/package.js.map +1 -0
- package/dist/commands/publish.d.ts +13 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +910 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/sync.d.ts +6 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +208 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/upload.d.ts +7 -0
- package/dist/commands/upload.d.ts.map +1 -0
- package/dist/commands/upload.js +126 -0
- package/dist/commands/upload.js.map +1 -0
- package/dist/commands/workspaces.d.ts +2 -0
- package/dist/commands/workspaces.d.ts.map +1 -0
- package/dist/commands/workspaces.js +67 -0
- package/dist/commands/workspaces.js.map +1 -0
- package/dist/dev-ui/app.js +1284 -0
- package/dist/dev-ui/index.html +1511 -0
- package/dist/dev-ui-react/App.tsx +164 -0
- package/dist/dev-ui-react/__tests__/previewData.test.ts +193 -0
- package/dist/dev-ui-react/components/BlocksList.tsx +232 -0
- package/dist/dev-ui-react/components/Editor.tsx +469 -0
- package/dist/dev-ui-react/components/Preview.tsx +146 -0
- package/dist/dev-ui-react/hooks/useBlocks.ts +80 -0
- package/dist/dev-ui-react/index.html +13 -0
- package/dist/dev-ui-react/main.tsx +8 -0
- package/dist/dev-ui-react/styles.css +856 -0
- package/dist/dev-ui-react/types.ts +45 -0
- package/dist/types/block-config.d.ts +315 -0
- package/dist/types/block-config.d.ts.map +1 -0
- package/dist/types/block-config.js +8 -0
- package/dist/types/block-config.js.map +1 -0
- package/dist/utils/block-config.d.ts +10 -0
- package/dist/utils/block-config.d.ts.map +1 -0
- package/dist/utils/block-config.js +199 -0
- package/dist/utils/block-config.js.map +1 -0
- package/dist/utils/blocks-meta-cache.d.ts +28 -0
- package/dist/utils/blocks-meta-cache.d.ts.map +1 -0
- package/dist/utils/blocks-meta-cache.js +72 -0
- package/dist/utils/blocks-meta-cache.js.map +1 -0
- package/dist/utils/builder.d.ts +34 -0
- package/dist/utils/builder.d.ts.map +1 -0
- package/dist/utils/builder.js +140 -0
- package/dist/utils/builder.js.map +1 -0
- package/dist/utils/cmssy-config.d.ts +16 -0
- package/dist/utils/cmssy-config.d.ts.map +1 -0
- package/dist/utils/cmssy-config.js +19 -0
- package/dist/utils/cmssy-config.js.map +1 -0
- package/dist/utils/config.d.ts +9 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +46 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/field-schema.d.ts +12 -0
- package/dist/utils/field-schema.d.ts.map +1 -0
- package/dist/utils/field-schema.js +202 -0
- package/dist/utils/field-schema.js.map +1 -0
- package/dist/utils/graphql.d.ts +8 -0
- package/dist/utils/graphql.d.ts.map +1 -0
- package/dist/utils/graphql.js +118 -0
- package/dist/utils/graphql.js.map +1 -0
- package/dist/utils/publish-helpers.d.ts +35 -0
- package/dist/utils/publish-helpers.d.ts.map +1 -0
- package/dist/utils/publish-helpers.js +141 -0
- package/dist/utils/publish-helpers.js.map +1 -0
- package/dist/utils/scanner.d.ts +36 -0
- package/dist/utils/scanner.d.ts.map +1 -0
- package/dist/utils/scanner.js +140 -0
- package/dist/utils/scanner.js.map +1 -0
- package/dist/utils/type-generator.d.ts +9 -0
- package/dist/utils/type-generator.d.ts.map +1 -0
- package/dist/utils/type-generator.js +85 -0
- package/dist/utils/type-generator.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import inquirer from "inquirer";
|
|
3
|
+
import { loadConfig, saveConfig } from "../utils/config.js";
|
|
4
|
+
export async function configureCommand(options) {
|
|
5
|
+
console.log(chalk.blue.bold("\n🔨 Cmssy - Configure\n"));
|
|
6
|
+
const existingConfig = loadConfig();
|
|
7
|
+
const answers = await inquirer.prompt([
|
|
8
|
+
{
|
|
9
|
+
type: "input",
|
|
10
|
+
name: "apiUrl",
|
|
11
|
+
message: "Cmssy API URL:",
|
|
12
|
+
default: options.apiUrl ||
|
|
13
|
+
existingConfig.apiUrl ||
|
|
14
|
+
"https://api.cmssy.io/graphql",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
type: "password",
|
|
18
|
+
name: "apiToken",
|
|
19
|
+
message: "Cmssy API Token (from /settings/tokens):",
|
|
20
|
+
default: existingConfig.apiToken || undefined,
|
|
21
|
+
validate: (input) => {
|
|
22
|
+
if (!input || input.length < 10) {
|
|
23
|
+
return "Please enter a valid API token";
|
|
24
|
+
}
|
|
25
|
+
if (!input.startsWith("bf_")) {
|
|
26
|
+
return 'Token should start with "bf_"';
|
|
27
|
+
}
|
|
28
|
+
return true;
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
]);
|
|
32
|
+
// Save to .env
|
|
33
|
+
saveConfig({
|
|
34
|
+
apiUrl: answers.apiUrl,
|
|
35
|
+
apiToken: answers.apiToken,
|
|
36
|
+
});
|
|
37
|
+
console.log(chalk.green("\n✓ Configuration saved to .env\n"));
|
|
38
|
+
console.log(chalk.cyan("Next steps:\n"));
|
|
39
|
+
console.log(chalk.white(" cmssy publish --all --marketplace # Publish to marketplace"));
|
|
40
|
+
console.log(chalk.white(" cmssy sync # Pull blocks from Cmssy\n"));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=configure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/commands/configure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAM5D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAyB;IAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEzD,MAAM,cAAc,GAAG,UAAU,EAAE,CAAC;IAEpC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACpC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,gBAAgB;YACzB,OAAO,EACL,OAAO,CAAC,MAAM;gBACd,cAAc,CAAC,MAAM;gBACrB,8BAA8B;SACjC;QACD;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,0CAA0C;YACnD,OAAO,EAAE,cAAc,CAAC,QAAQ,IAAI,SAAS;YAC7C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;oBAChC,OAAO,gCAAgC,CAAC;gBAC1C,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7B,OAAO,+BAA+B,CAAC;gBACzC,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;SACF;KACF,CAAC,CAAC;IAEH,eAAe;IACf,UAAU,CAAC;QACT,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAC9E,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAChF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface CreateBlockOptions {
|
|
2
|
+
yes?: boolean;
|
|
3
|
+
description?: string;
|
|
4
|
+
category?: string;
|
|
5
|
+
tags?: string;
|
|
6
|
+
}
|
|
7
|
+
declare function createBlock(name: string, options?: CreateBlockOptions): Promise<void>;
|
|
8
|
+
interface CreateTemplateOptions {
|
|
9
|
+
yes?: boolean;
|
|
10
|
+
description?: string;
|
|
11
|
+
}
|
|
12
|
+
declare function createPage(name: string, options?: CreateTemplateOptions): Promise<void>;
|
|
13
|
+
export declare const createCommand: {
|
|
14
|
+
block: typeof createBlock;
|
|
15
|
+
page: typeof createPage;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAqBA,UAAU,kBAAkB;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,iBAAe,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,iBAqQxE;AAED,UAAU,qBAAqB;IAC7B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,iBAAe,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,iBA4O1E;AAED,eAAO,MAAM,aAAa;;;CAGzB,CAAC"}
|
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import fs from "fs-extra";
|
|
3
|
+
import inquirer from "inquirer";
|
|
4
|
+
import ora from "ora";
|
|
5
|
+
import path from "path";
|
|
6
|
+
import { loadConfig } from "../utils/cmssy-config.js";
|
|
7
|
+
import { getFieldTypes } from "../utils/field-schema.js";
|
|
8
|
+
import { generateTypes } from "../utils/type-generator.js";
|
|
9
|
+
import { updateBlockInCache } from "../utils/blocks-meta-cache.js";
|
|
10
|
+
/**
|
|
11
|
+
* Convert kebab-case or snake_case to PascalCase.
|
|
12
|
+
* Examples: "marketing-site" → "MarketingSite", "my_block" → "MyBlock"
|
|
13
|
+
*/
|
|
14
|
+
function toPascalCase(str) {
|
|
15
|
+
return str
|
|
16
|
+
.split(/[-_\s]+/)
|
|
17
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
18
|
+
.join("");
|
|
19
|
+
}
|
|
20
|
+
async function createBlock(name, options = {}) {
|
|
21
|
+
const spinner = ora("Creating block...").start();
|
|
22
|
+
try {
|
|
23
|
+
// Load config
|
|
24
|
+
const config = await loadConfig();
|
|
25
|
+
const blockPath = path.join(process.cwd(), "blocks", name);
|
|
26
|
+
// Check if block already exists
|
|
27
|
+
if (fs.existsSync(blockPath)) {
|
|
28
|
+
spinner.fail(`Block "${name}" already exists`);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
let answers;
|
|
32
|
+
if (options.yes) {
|
|
33
|
+
// Use defaults or provided options
|
|
34
|
+
const defaultDisplayName = toPascalCase(name);
|
|
35
|
+
answers = {
|
|
36
|
+
displayName: defaultDisplayName,
|
|
37
|
+
description: options.description || "",
|
|
38
|
+
category: options.category || "marketing",
|
|
39
|
+
tags: options.tags
|
|
40
|
+
? options.tags.split(",").map((t) => t.trim()).filter(Boolean)
|
|
41
|
+
: [],
|
|
42
|
+
};
|
|
43
|
+
spinner.text = "Creating block files...";
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// Stop spinner before prompting (ora can interfere with inquirer stdin)
|
|
47
|
+
spinner.stop();
|
|
48
|
+
// Prompt for block details
|
|
49
|
+
answers = await inquirer.prompt([
|
|
50
|
+
{
|
|
51
|
+
type: "input",
|
|
52
|
+
name: "displayName",
|
|
53
|
+
message: "Display name:",
|
|
54
|
+
default: toPascalCase(name),
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
type: "input",
|
|
58
|
+
name: "description",
|
|
59
|
+
message: "Description:",
|
|
60
|
+
default: options.description || "",
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: "list",
|
|
64
|
+
name: "category",
|
|
65
|
+
message: "Category:",
|
|
66
|
+
choices: [
|
|
67
|
+
"marketing",
|
|
68
|
+
"typography",
|
|
69
|
+
"media",
|
|
70
|
+
"layout",
|
|
71
|
+
"forms",
|
|
72
|
+
"navigation",
|
|
73
|
+
"other",
|
|
74
|
+
],
|
|
75
|
+
default: options.category || "marketing",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
type: "input",
|
|
79
|
+
name: "tags",
|
|
80
|
+
message: "Tags (comma-separated):",
|
|
81
|
+
default: options.tags || "",
|
|
82
|
+
filter: (input) => input
|
|
83
|
+
.split(",")
|
|
84
|
+
.map((tag) => tag.trim())
|
|
85
|
+
.filter(Boolean),
|
|
86
|
+
},
|
|
87
|
+
]);
|
|
88
|
+
// Restart spinner for file creation
|
|
89
|
+
spinner.start("Creating block files...");
|
|
90
|
+
}
|
|
91
|
+
// Create directory structure
|
|
92
|
+
fs.mkdirSync(path.join(blockPath, "src"), { recursive: true });
|
|
93
|
+
// Create component file based on framework
|
|
94
|
+
if (config.framework === "react") {
|
|
95
|
+
// Strip spaces from displayName (already PascalCase from toPascalCase or user input)
|
|
96
|
+
const componentName = answers.displayName.replace(/\s+/g, "");
|
|
97
|
+
const componentFile = `import { BlockContent } from './block';
|
|
98
|
+
|
|
99
|
+
export default function ${componentName}({ content }: { content: BlockContent }) {
|
|
100
|
+
const {
|
|
101
|
+
heading = 'Heading',
|
|
102
|
+
description = 'Description',
|
|
103
|
+
} = content;
|
|
104
|
+
|
|
105
|
+
return (
|
|
106
|
+
<section className="${name}">
|
|
107
|
+
<h2>{heading}</h2>
|
|
108
|
+
<p>{description}</p>
|
|
109
|
+
</section>
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
`;
|
|
113
|
+
fs.writeFileSync(path.join(blockPath, "src", `${componentName}.tsx`), componentFile);
|
|
114
|
+
// Create index file with __component for SSR + mount/update/unmount for client
|
|
115
|
+
const indexFile = `import { createRoot, Root } from "react-dom/client";
|
|
116
|
+
import ${componentName} from "./${componentName}";
|
|
117
|
+
import "./index.css";
|
|
118
|
+
|
|
119
|
+
interface BlockContext {
|
|
120
|
+
root: Root;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export default {
|
|
124
|
+
__component: ${componentName},
|
|
125
|
+
|
|
126
|
+
mount(element: HTMLElement, props: any): BlockContext {
|
|
127
|
+
const root = createRoot(element);
|
|
128
|
+
root.render(<${componentName} content={props} />);
|
|
129
|
+
return { root };
|
|
130
|
+
},
|
|
131
|
+
|
|
132
|
+
update(_element: HTMLElement, props: any, ctx: BlockContext): void {
|
|
133
|
+
ctx.root.render(<${componentName} content={props} />);
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
unmount(_element: HTMLElement, ctx: BlockContext): void {
|
|
137
|
+
ctx.root.unmount();
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
`;
|
|
141
|
+
fs.writeFileSync(path.join(blockPath, "src", "index.tsx"), indexFile);
|
|
142
|
+
}
|
|
143
|
+
// Create CSS file (with main.css import if project uses Tailwind)
|
|
144
|
+
const hasTailwind = fs.existsSync(path.join(process.cwd(), "postcss.config.js"));
|
|
145
|
+
const cssFile = hasTailwind
|
|
146
|
+
? `@import "main.css";
|
|
147
|
+
`
|
|
148
|
+
: `.${name} {
|
|
149
|
+
padding: 2rem;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.${name} h2 {
|
|
153
|
+
font-size: 2rem;
|
|
154
|
+
margin-bottom: 1rem;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.${name} p {
|
|
158
|
+
font-size: 1rem;
|
|
159
|
+
color: #666;
|
|
160
|
+
}
|
|
161
|
+
`;
|
|
162
|
+
fs.writeFileSync(path.join(blockPath, "src", "index.css"), cssFile);
|
|
163
|
+
// Create minimal package.json
|
|
164
|
+
const packageJson = {
|
|
165
|
+
name: `@${config.projectName || "vendor"}/blocks.${name}`,
|
|
166
|
+
version: "1.0.0",
|
|
167
|
+
description: answers.description,
|
|
168
|
+
author: config.author,
|
|
169
|
+
};
|
|
170
|
+
fs.writeFileSync(path.join(blockPath, "package.json"), JSON.stringify(packageJson, null, 2) + "\n");
|
|
171
|
+
// Create block.config.ts
|
|
172
|
+
const blockConfigContent = `import { defineBlock } from 'cmssy-cli/config';
|
|
173
|
+
|
|
174
|
+
export default defineBlock({
|
|
175
|
+
name: '${answers.displayName}',
|
|
176
|
+
description: '${answers.description}',
|
|
177
|
+
category: '${answers.category}',
|
|
178
|
+
tags: ${JSON.stringify(answers.tags)},
|
|
179
|
+
|
|
180
|
+
schema: {
|
|
181
|
+
heading: {
|
|
182
|
+
type: 'singleLine',
|
|
183
|
+
label: 'Heading',
|
|
184
|
+
required: true,
|
|
185
|
+
defaultValue: 'Heading',
|
|
186
|
+
},
|
|
187
|
+
description: {
|
|
188
|
+
type: 'multiLine',
|
|
189
|
+
label: 'Description',
|
|
190
|
+
placeholder: 'Enter description',
|
|
191
|
+
defaultValue: 'Description',
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
|
|
195
|
+
pricing: { licenseType: 'free' },
|
|
196
|
+
});
|
|
197
|
+
`;
|
|
198
|
+
fs.writeFileSync(path.join(blockPath, "block.config.ts"), blockConfigContent);
|
|
199
|
+
// Create preview.json
|
|
200
|
+
const previewData = {
|
|
201
|
+
heading: "Preview Heading",
|
|
202
|
+
description: "This is how your block will look in the preview.",
|
|
203
|
+
};
|
|
204
|
+
fs.writeFileSync(path.join(blockPath, "preview.json"), JSON.stringify(previewData, null, 2) + "\n");
|
|
205
|
+
// Generate initial types
|
|
206
|
+
const initialSchema = {
|
|
207
|
+
heading: {
|
|
208
|
+
type: "singleLine",
|
|
209
|
+
label: "Heading",
|
|
210
|
+
required: true,
|
|
211
|
+
defaultValue: "Heading",
|
|
212
|
+
},
|
|
213
|
+
description: {
|
|
214
|
+
type: "multiLine",
|
|
215
|
+
label: "Description",
|
|
216
|
+
placeholder: "Enter description",
|
|
217
|
+
defaultValue: "Description",
|
|
218
|
+
},
|
|
219
|
+
};
|
|
220
|
+
const fieldTypes = await getFieldTypes();
|
|
221
|
+
await generateTypes({ blockPath, schema: initialSchema, fieldTypes });
|
|
222
|
+
// Add to metadata cache for instant filters
|
|
223
|
+
updateBlockInCache(name, "block", {
|
|
224
|
+
name: answers.displayName,
|
|
225
|
+
description: answers.description,
|
|
226
|
+
category: answers.category,
|
|
227
|
+
tags: answers.tags,
|
|
228
|
+
schema: initialSchema,
|
|
229
|
+
}, "1.0.0");
|
|
230
|
+
spinner.succeed(`Block "${name}" created successfully`);
|
|
231
|
+
console.log(chalk.cyan("\nNext steps:\n"));
|
|
232
|
+
console.log(chalk.white(" cmssy dev # Preview your block"));
|
|
233
|
+
console.log(chalk.white(" cmssy build # Build your block\n"));
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
spinner.fail("Failed to create block");
|
|
237
|
+
console.error(chalk.red("Error:"), error);
|
|
238
|
+
process.exit(1);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
async function createPage(name, options = {}) {
|
|
242
|
+
const spinner = ora("Creating page template...").start();
|
|
243
|
+
try {
|
|
244
|
+
const config = await loadConfig();
|
|
245
|
+
const pagePath = path.join(process.cwd(), "templates", name);
|
|
246
|
+
if (fs.existsSync(pagePath)) {
|
|
247
|
+
spinner.fail(`Page template "${name}" already exists`);
|
|
248
|
+
process.exit(1);
|
|
249
|
+
}
|
|
250
|
+
let answers;
|
|
251
|
+
if (options.yes) {
|
|
252
|
+
// Use defaults or provided options
|
|
253
|
+
const defaultDisplayName = toPascalCase(name);
|
|
254
|
+
answers = {
|
|
255
|
+
displayName: defaultDisplayName,
|
|
256
|
+
description: options.description || "",
|
|
257
|
+
};
|
|
258
|
+
spinner.text = "Creating page files...";
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
// Stop spinner before prompting (ora can interfere with inquirer stdin)
|
|
262
|
+
spinner.stop();
|
|
263
|
+
answers = await inquirer.prompt([
|
|
264
|
+
{
|
|
265
|
+
type: "input",
|
|
266
|
+
name: "displayName",
|
|
267
|
+
message: "Display name:",
|
|
268
|
+
default: toPascalCase(name),
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
type: "input",
|
|
272
|
+
name: "description",
|
|
273
|
+
message: "Description:",
|
|
274
|
+
default: options.description || "",
|
|
275
|
+
},
|
|
276
|
+
]);
|
|
277
|
+
// Restart spinner for file creation
|
|
278
|
+
spinner.start("Creating page files...");
|
|
279
|
+
}
|
|
280
|
+
fs.mkdirSync(path.join(pagePath, "src"), { recursive: true });
|
|
281
|
+
if (config.framework === "react") {
|
|
282
|
+
// Strip spaces from displayName (already PascalCase from toPascalCase or user input)
|
|
283
|
+
const componentName = answers.displayName.replace(/\s+/g, "");
|
|
284
|
+
const componentFile = `import { BlockContent } from './block';
|
|
285
|
+
|
|
286
|
+
export default function ${componentName}({ content }: { content: BlockContent }) {
|
|
287
|
+
const {
|
|
288
|
+
title = 'Page Title',
|
|
289
|
+
sections = [],
|
|
290
|
+
} = content;
|
|
291
|
+
|
|
292
|
+
return (
|
|
293
|
+
<div className="${name}-page">
|
|
294
|
+
<header>
|
|
295
|
+
<h1>{title}</h1>
|
|
296
|
+
</header>
|
|
297
|
+
<main>
|
|
298
|
+
{sections.map((section, index) => (
|
|
299
|
+
<div key={index} className="section">
|
|
300
|
+
{/* Render blocks here */}
|
|
301
|
+
</div>
|
|
302
|
+
))}
|
|
303
|
+
</main>
|
|
304
|
+
</div>
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
`;
|
|
308
|
+
fs.writeFileSync(path.join(pagePath, "src", `${componentName}.tsx`), componentFile);
|
|
309
|
+
const indexFile = `import React from 'react';
|
|
310
|
+
import { createRoot, Root } from 'react-dom/client';
|
|
311
|
+
import ${componentName} from './${componentName}';
|
|
312
|
+
import './index.css';
|
|
313
|
+
|
|
314
|
+
interface BlockContext {
|
|
315
|
+
root: Root;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
export default {
|
|
319
|
+
// React component for SSR (used by renderToString)
|
|
320
|
+
__component: ${componentName},
|
|
321
|
+
|
|
322
|
+
// Client-side lifecycle methods (for interactivity)
|
|
323
|
+
mount(element: HTMLElement, props: any): BlockContext {
|
|
324
|
+
const root = createRoot(element);
|
|
325
|
+
root.render(<${componentName} content={props} />);
|
|
326
|
+
return { root };
|
|
327
|
+
},
|
|
328
|
+
|
|
329
|
+
update(_element: HTMLElement, props: any, ctx: BlockContext): void {
|
|
330
|
+
// Re-render with new props (no unmount = no blink!)
|
|
331
|
+
ctx.root.render(<${componentName} content={props} />);
|
|
332
|
+
},
|
|
333
|
+
|
|
334
|
+
unmount(_element: HTMLElement, ctx: BlockContext): void {
|
|
335
|
+
ctx.root.unmount();
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
`;
|
|
339
|
+
fs.writeFileSync(path.join(pagePath, "src", "index.tsx"), indexFile);
|
|
340
|
+
}
|
|
341
|
+
const cssFile = `.${name}-page {
|
|
342
|
+
min-height: 100vh;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
.${name}-page header {
|
|
346
|
+
padding: 2rem;
|
|
347
|
+
background: #f5f5f5;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
.${name}-page h1 {
|
|
351
|
+
font-size: 2.5rem;
|
|
352
|
+
margin: 0;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
.${name}-page main {
|
|
356
|
+
padding: 2rem;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
.section {
|
|
360
|
+
margin-bottom: 2rem;
|
|
361
|
+
}
|
|
362
|
+
`;
|
|
363
|
+
fs.writeFileSync(path.join(pagePath, "src", "index.css"), cssFile);
|
|
364
|
+
// Create minimal package.json
|
|
365
|
+
const packageJson = {
|
|
366
|
+
name: `@${config.projectName || "vendor"}/templates.${name}`,
|
|
367
|
+
version: "1.0.0",
|
|
368
|
+
description: answers.description,
|
|
369
|
+
author: config.author,
|
|
370
|
+
};
|
|
371
|
+
fs.writeFileSync(path.join(pagePath, "package.json"), JSON.stringify(packageJson, null, 2) + "\n");
|
|
372
|
+
// Create block.config.ts (using defineTemplate)
|
|
373
|
+
const blockConfigContent = `import { defineTemplate } from 'cmssy-cli/config';
|
|
374
|
+
|
|
375
|
+
export default defineTemplate({
|
|
376
|
+
name: '${answers.displayName}',
|
|
377
|
+
description: '${answers.description}',
|
|
378
|
+
category: 'pages',
|
|
379
|
+
|
|
380
|
+
schema: {
|
|
381
|
+
title: {
|
|
382
|
+
type: 'singleLine',
|
|
383
|
+
label: 'Page Title',
|
|
384
|
+
required: true,
|
|
385
|
+
defaultValue: 'Page Title',
|
|
386
|
+
},
|
|
387
|
+
sections: {
|
|
388
|
+
type: 'repeater',
|
|
389
|
+
label: 'Page Sections',
|
|
390
|
+
schema: {
|
|
391
|
+
// Define section fields here
|
|
392
|
+
},
|
|
393
|
+
},
|
|
394
|
+
},
|
|
395
|
+
|
|
396
|
+
pricing: { licenseType: 'free' },
|
|
397
|
+
});
|
|
398
|
+
`;
|
|
399
|
+
fs.writeFileSync(path.join(pagePath, "block.config.ts"), blockConfigContent);
|
|
400
|
+
const previewData = {
|
|
401
|
+
title: "Preview Page",
|
|
402
|
+
sections: [],
|
|
403
|
+
};
|
|
404
|
+
fs.writeFileSync(path.join(pagePath, "preview.json"), JSON.stringify(previewData, null, 2) + "\n");
|
|
405
|
+
// Generate initial types
|
|
406
|
+
const initialSchema = {
|
|
407
|
+
title: {
|
|
408
|
+
type: "singleLine",
|
|
409
|
+
label: "Page Title",
|
|
410
|
+
required: true,
|
|
411
|
+
defaultValue: "Page Title",
|
|
412
|
+
},
|
|
413
|
+
sections: {
|
|
414
|
+
type: "repeater",
|
|
415
|
+
label: "Page Sections",
|
|
416
|
+
schema: {},
|
|
417
|
+
},
|
|
418
|
+
};
|
|
419
|
+
const fieldTypesTemplate = await getFieldTypes();
|
|
420
|
+
await generateTypes({ blockPath: pagePath, schema: initialSchema, fieldTypes: fieldTypesTemplate });
|
|
421
|
+
// Add to metadata cache for instant filters
|
|
422
|
+
updateBlockInCache(name, "template", {
|
|
423
|
+
name: answers.displayName,
|
|
424
|
+
description: answers.description,
|
|
425
|
+
category: "pages",
|
|
426
|
+
tags: [],
|
|
427
|
+
schema: initialSchema,
|
|
428
|
+
}, "1.0.0");
|
|
429
|
+
spinner.succeed(`Page template "${name}" created successfully`);
|
|
430
|
+
console.log(chalk.cyan("\nNext steps:\n"));
|
|
431
|
+
console.log(chalk.white(" cmssy dev # Preview your page"));
|
|
432
|
+
console.log(chalk.white(" cmssy build # Build your page\n"));
|
|
433
|
+
}
|
|
434
|
+
catch (error) {
|
|
435
|
+
spinner.fail("Failed to create page template");
|
|
436
|
+
console.error(chalk.red("Error:"), error);
|
|
437
|
+
process.exit(1);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
export const createCommand = {
|
|
441
|
+
block: createBlock,
|
|
442
|
+
page: createPage,
|
|
443
|
+
};
|
|
444
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAuGA,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,iBA+lBnD"}
|