@ikas/component-cli 1.4.0-beta.40 → 1.4.0-beta.43
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/commands/add-sections-to-page.d.ts +3 -0
- package/dist/commands/add-sections-to-page.d.ts.map +1 -0
- package/dist/commands/add-sections-to-page.js +39 -0
- package/dist/commands/add-sections-to-page.js.map +1 -0
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +168 -5
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/create-page.d.ts +3 -0
- package/dist/commands/create-page.d.ts.map +1 -0
- package/dist/commands/create-page.js +31 -0
- package/dist/commands/create-page.js.map +1 -0
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +118 -66
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/get-available-values.d.ts +3 -0
- package/dist/commands/get-available-values.d.ts.map +1 -0
- package/dist/commands/get-available-values.js +49 -0
- package/dist/commands/get-available-values.js.map +1 -0
- package/dist/commands/get-component-props.d.ts +3 -0
- package/dist/commands/get-component-props.d.ts.map +1 -0
- package/dist/commands/get-component-props.js +32 -0
- package/dist/commands/get-component-props.js.map +1 -0
- package/dist/commands/get-page-by-type.d.ts +3 -0
- package/dist/commands/get-page-by-type.d.ts.map +1 -0
- package/dist/commands/get-page-by-type.js +25 -0
- package/dist/commands/get-page-by-type.js.map +1 -0
- package/dist/commands/get-section-values.d.ts +3 -0
- package/dist/commands/get-section-values.d.ts.map +1 -0
- package/dist/commands/get-section-values.js +39 -0
- package/dist/commands/get-section-values.js.map +1 -0
- package/dist/commands/list-entities.d.ts +3 -0
- package/dist/commands/list-entities.d.ts.map +1 -0
- package/dist/commands/list-entities.js +32 -0
- package/dist/commands/list-entities.js.map +1 -0
- package/dist/commands/list-page-sections.d.ts +3 -0
- package/dist/commands/list-page-sections.d.ts.map +1 -0
- package/dist/commands/list-page-sections.js +25 -0
- package/dist/commands/list-page-sections.js.map +1 -0
- package/dist/commands/proxy.d.ts +39 -0
- package/dist/commands/proxy.d.ts.map +1 -0
- package/dist/commands/proxy.js +210 -0
- package/dist/commands/proxy.js.map +1 -0
- package/dist/commands/publish-theme.d.ts +3 -0
- package/dist/commands/publish-theme.d.ts.map +1 -0
- package/dist/commands/publish-theme.js +29 -0
- package/dist/commands/publish-theme.js.map +1 -0
- package/dist/commands/search-products.d.ts +3 -0
- package/dist/commands/search-products.d.ts.map +1 -0
- package/dist/commands/search-products.js +40 -0
- package/dist/commands/search-products.js.map +1 -0
- package/dist/commands/set-dynamic-value.d.ts +3 -0
- package/dist/commands/set-dynamic-value.d.ts.map +1 -0
- package/dist/commands/set-dynamic-value.js +54 -0
- package/dist/commands/set-dynamic-value.js.map +1 -0
- package/dist/commands/update-page-sections.d.ts +3 -0
- package/dist/commands/update-page-sections.d.ts.map +1 -0
- package/dist/commands/update-page-sections.js +39 -0
- package/dist/commands/update-page-sections.js.map +1 -0
- package/dist/commands/update-section-prop.d.ts +3 -0
- package/dist/commands/update-section-prop.d.ts.map +1 -0
- package/dist/commands/update-section-prop.js +59 -0
- package/dist/commands/update-section-prop.js.map +1 -0
- package/dist/commands/update-section-props.d.ts +3 -0
- package/dist/commands/update-section-props.d.ts.map +1 -0
- package/dist/commands/update-section-props.js +43 -0
- package/dist/commands/update-section-props.js.map +1 -0
- package/dist/commands/upload-image.d.ts +3 -0
- package/dist/commands/upload-image.d.ts.map +1 -0
- package/dist/commands/upload-image.js +38 -0
- package/dist/commands/upload-image.js.map +1 -0
- package/dist/commands/upload-images.d.ts +3 -0
- package/dist/commands/upload-images.d.ts.map +1 -0
- package/dist/commands/upload-images.js +48 -0
- package/dist/commands/upload-images.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/compile.d.ts +1 -4
- package/dist/utils/compile.d.ts.map +1 -1
- package/dist/utils/compile.js +40 -500
- package/dist/utils/compile.js.map +1 -1
- package/dist/utils/editor-action-client.d.ts +1 -1
- package/dist/utils/editor-action-client.d.ts.map +1 -1
- package/dist/utils/editor-action-client.js +23 -8
- package/dist/utils/editor-action-client.js.map +1 -1
- package/dist/utils/load-image.d.ts +16 -0
- package/dist/utils/load-image.d.ts.map +1 -0
- package/dist/utils/load-image.js +50 -0
- package/dist/utils/load-image.js.map +1 -0
- package/dist/utils/websocket-server.d.ts +2 -2
- package/dist/utils/websocket-server.d.ts.map +1 -1
- package/dist/utils/websocket-server.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-sections-to-page.d.ts","sourceRoot":"","sources":["../../src/commands/add-sections-to-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+CpC,wBAAgB,8BAA8B,IAAI,OAAO,CAcxD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { printErrorAndExit, printResultAndExit, runEditorAction, } from "../utils/editor-action-client.js";
|
|
3
|
+
async function runAddSectionsToPage(options) {
|
|
4
|
+
if (!options.pageId || typeof options.pageId !== "string") {
|
|
5
|
+
printErrorAndExit(new Error("--page-id is required (use `ikas-component list-pages`)"));
|
|
6
|
+
}
|
|
7
|
+
if (options.sections === undefined) {
|
|
8
|
+
printErrorAndExit(new Error('--sections is required: a JSON array, e.g. \'[{"componentId":"<id>","updates":[{"propName":"heading","value":{"value":"Hi"}}]}]\''));
|
|
9
|
+
}
|
|
10
|
+
let sections;
|
|
11
|
+
try {
|
|
12
|
+
sections = JSON.parse(options.sections);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
printErrorAndExit(new Error(`--sections must be valid JSON. Received: ${options.sections}`));
|
|
16
|
+
}
|
|
17
|
+
if (!Array.isArray(sections) || sections.length === 0) {
|
|
18
|
+
printErrorAndExit(new Error("--sections must be a non-empty JSON array of { componentId, index?, updates? } objects."));
|
|
19
|
+
}
|
|
20
|
+
const port = options.port ? parseInt(options.port, 10) : undefined;
|
|
21
|
+
try {
|
|
22
|
+
const result = await runEditorAction("add-sections-to-page", { pageId: options.pageId, sections }, { ...(port ? { port } : {}), timeoutMs: 30_000 });
|
|
23
|
+
printResultAndExit(result);
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
printErrorAndExit(e);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function createAddSectionsToPageCommand() {
|
|
30
|
+
const cmd = new Command("add-sections-to-page");
|
|
31
|
+
cmd
|
|
32
|
+
.description("Place MANY sections on a page in one call, each optionally with its prop values set at placement time. --sections is a JSON array of { componentId, index?, updates?: [{ propId|propName, value }] }. Returns the new elementId for each placement. Built-but-unimported section/child components are auto-imported.")
|
|
33
|
+
.requiredOption("--page-id <id>", "Page id (from `ikas-component list-pages`)")
|
|
34
|
+
.requiredOption("--sections <json>", 'JSON array, e.g. \'[{"componentId":"<id>","updates":[{"propName":"heading","value":{"value":"Hi"}}]}]\'')
|
|
35
|
+
.option("--port <port>", "Dev server WebSocket port", "5201")
|
|
36
|
+
.action(runAddSectionsToPage);
|
|
37
|
+
return cmd;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=add-sections-to-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-sections-to-page.js","sourceRoot":"","sources":["../../src/commands/add-sections-to-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAQ1C,KAAK,UAAU,oBAAoB,CAAC,OAAiC;IACnE,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1D,iBAAiB,CAAC,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,iBAAiB,CACf,IAAI,KAAK,CACP,mIAAmI,CACpI,CACF,CAAC;IACJ,CAAC;IACD,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB,CAAC,IAAI,KAAK,CAAC,4CAA4C,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,iBAAiB,CAAC,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC,CAAC;IAC1H,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,sBAAsB,EACtB,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,EACpC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CACjD,CAAC;QACF,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,8BAA8B;IAC5C,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAChD,GAAG;SACA,WAAW,CACV,sTAAsT,CACvT;SACA,cAAc,CAAC,gBAAgB,EAAE,4CAA4C,CAAC;SAC9E,cAAc,CACb,mBAAmB,EACnB,yGAAyG,CAC1G;SACA,MAAM,CAAC,eAAe,EAAE,2BAA2B,EAAE,MAAM,CAAC;SAC5D,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwTpC,wBAAgB,kBAAkB,IAAI,OAAO,CAK5C"}
|
package/dist/commands/build.js
CHANGED
|
@@ -2,12 +2,175 @@ import { Command } from "commander";
|
|
|
2
2
|
import chalk from "chalk";
|
|
3
3
|
import ora from "ora";
|
|
4
4
|
import * as fs from "fs";
|
|
5
|
+
import * as os from "os";
|
|
5
6
|
import * as path from "path";
|
|
7
|
+
import * as esbuild from "esbuild";
|
|
6
8
|
import { execSync } from "child_process";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
//
|
|
10
|
-
|
|
9
|
+
import { resolveCssImports } from "../utils/css-import-resolver.js";
|
|
10
|
+
import { ikasComponentUtilsPlugin } from "../utils/observer-runtime.js";
|
|
11
|
+
// JSX factory/fragment provided under collision-proof names so a user-authored
|
|
12
|
+
// local named `h`/`Fragment` (e.g. a `.map` callback param) can't shadow the
|
|
13
|
+
// pragma and break rendering. See utils/compile.ts for the full rationale.
|
|
14
|
+
const PREACT_JSX_SHIM = path.join(os.tmpdir(), "ikas-preact-jsx-shim.mjs");
|
|
15
|
+
fs.writeFileSync(PREACT_JSX_SHIM, 'export{h as __ikas_h,Fragment as __ikas_Fragment}from"preact";\n');
|
|
16
|
+
async function compileComponent(componentId, entryPath, stylesPath) {
|
|
17
|
+
const componentDir = path.dirname(path.resolve(process.cwd(), entryPath));
|
|
18
|
+
try {
|
|
19
|
+
// Build server bundle (for SSR with preact-render-to-string)
|
|
20
|
+
const serverResult = await esbuild.build({
|
|
21
|
+
entryPoints: [path.resolve(process.cwd(), entryPath)],
|
|
22
|
+
bundle: true,
|
|
23
|
+
format: "esm",
|
|
24
|
+
platform: "node",
|
|
25
|
+
target: "node18",
|
|
26
|
+
write: false,
|
|
27
|
+
external: [
|
|
28
|
+
"preact",
|
|
29
|
+
"preact/hooks",
|
|
30
|
+
"preact-render-to-string",
|
|
31
|
+
"mobx",
|
|
32
|
+
"@ikas/bp-storefront",
|
|
33
|
+
"@ikas/bp-storefront-models",
|
|
34
|
+
"@ikas/bp-storefront-config",
|
|
35
|
+
"@ikas/bp-storefront-api"
|
|
36
|
+
],
|
|
37
|
+
plugins: [ikasComponentUtilsPlugin()],
|
|
38
|
+
jsx: "transform",
|
|
39
|
+
jsxFactory: "__ikas_h",
|
|
40
|
+
jsxFragment: "__ikas_Fragment",
|
|
41
|
+
inject: [PREACT_JSX_SHIM],
|
|
42
|
+
tsconfigRaw: {
|
|
43
|
+
compilerOptions: {
|
|
44
|
+
jsx: "react",
|
|
45
|
+
jsxFactory: "__ikas_h",
|
|
46
|
+
jsxFragmentFactory: "__ikas_Fragment"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
minify: true,
|
|
50
|
+
sourcemap: false,
|
|
51
|
+
});
|
|
52
|
+
// Build client bundle (for hydration)
|
|
53
|
+
const clientResult = await esbuild.build({
|
|
54
|
+
entryPoints: [path.resolve(process.cwd(), entryPath)],
|
|
55
|
+
bundle: true,
|
|
56
|
+
format: "esm",
|
|
57
|
+
platform: "browser",
|
|
58
|
+
target: "es2020",
|
|
59
|
+
write: false,
|
|
60
|
+
external: [
|
|
61
|
+
"preact",
|
|
62
|
+
"preact/hooks",
|
|
63
|
+
"mobx",
|
|
64
|
+
"@ikas/bp-storefront",
|
|
65
|
+
"@ikas/bp-storefront-models",
|
|
66
|
+
"@ikas/bp-storefront-config"
|
|
67
|
+
],
|
|
68
|
+
plugins: [ikasComponentUtilsPlugin()],
|
|
69
|
+
jsx: "transform",
|
|
70
|
+
jsxFactory: "__ikas_h",
|
|
71
|
+
jsxFragment: "__ikas_Fragment",
|
|
72
|
+
inject: [PREACT_JSX_SHIM],
|
|
73
|
+
tsconfigRaw: {
|
|
74
|
+
compilerOptions: {
|
|
75
|
+
jsx: "react",
|
|
76
|
+
jsxFactory: "__ikas_h",
|
|
77
|
+
jsxFragmentFactory: "__ikas_Fragment"
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
minify: true,
|
|
81
|
+
sourcemap: false,
|
|
82
|
+
});
|
|
83
|
+
// Read and scope CSS (with import resolution)
|
|
84
|
+
const cssPath = path.resolve(process.cwd(), stylesPath);
|
|
85
|
+
let css = "";
|
|
86
|
+
if (fs.existsSync(cssPath)) {
|
|
87
|
+
const rawCss = fs.readFileSync(cssPath, "utf-8");
|
|
88
|
+
css = resolveCssImports(rawCss, cssPath);
|
|
89
|
+
}
|
|
90
|
+
// Scope CSS with component ID prefix
|
|
91
|
+
const scopedCss = scopeCSS(css, componentId);
|
|
92
|
+
return {
|
|
93
|
+
success: true,
|
|
94
|
+
serverJs: serverResult.outputFiles[0]?.text || "",
|
|
95
|
+
clientJs: clientResult.outputFiles[0]?.text || "",
|
|
96
|
+
scopedCss
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
return {
|
|
101
|
+
success: false,
|
|
102
|
+
serverJs: "",
|
|
103
|
+
clientJs: "",
|
|
104
|
+
scopedCss: "",
|
|
105
|
+
error: error instanceof Error ? error.message : String(error)
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function scopeCSS(css, componentId) {
|
|
110
|
+
// Add a scoping class to all selectors
|
|
111
|
+
const scopeClass = `cc_${componentId.replace(/[^a-zA-Z0-9]/g, "_")}`;
|
|
112
|
+
// Simple CSS scoping - prepend scope class to each rule
|
|
113
|
+
// This is a basic implementation; a production version would use a proper CSS parser
|
|
114
|
+
const lines = css.split("\n");
|
|
115
|
+
const scopedLines = [];
|
|
116
|
+
let inMediaQuery = false;
|
|
117
|
+
let keyframesDepth = 0;
|
|
118
|
+
for (const line of lines) {
|
|
119
|
+
const trimmed = line.trim();
|
|
120
|
+
// Skip empty lines
|
|
121
|
+
if (!trimmed) {
|
|
122
|
+
scopedLines.push(line);
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
// Handle @media queries
|
|
126
|
+
if (trimmed.startsWith("@media")) {
|
|
127
|
+
inMediaQuery = true;
|
|
128
|
+
scopedLines.push(line);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
// Handle @keyframes
|
|
132
|
+
if (trimmed.startsWith("@keyframes") || trimmed.startsWith("@-webkit-keyframes")) {
|
|
133
|
+
keyframesDepth = 1;
|
|
134
|
+
scopedLines.push(line);
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
// Inside @keyframes: track brace depth, pass lines through unscoped
|
|
138
|
+
if (keyframesDepth > 0) {
|
|
139
|
+
for (const ch of trimmed) {
|
|
140
|
+
if (ch === "{")
|
|
141
|
+
keyframesDepth++;
|
|
142
|
+
else if (ch === "}")
|
|
143
|
+
keyframesDepth--;
|
|
144
|
+
}
|
|
145
|
+
scopedLines.push(line);
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
// Handle closing braces for @media
|
|
149
|
+
if (trimmed === "}" && inMediaQuery) {
|
|
150
|
+
inMediaQuery = false;
|
|
151
|
+
scopedLines.push(line);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
// Skip lines that don't contain selectors
|
|
155
|
+
if (!trimmed.includes("{") || trimmed.startsWith("@")) {
|
|
156
|
+
scopedLines.push(line);
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
// Scope the selector
|
|
160
|
+
const [selector, rest] = line.split("{");
|
|
161
|
+
if (selector && rest !== undefined) {
|
|
162
|
+
const scopedSelector = selector
|
|
163
|
+
.split(",")
|
|
164
|
+
.map((s) => `.${scopeClass} ${s.trim()}`)
|
|
165
|
+
.join(", ");
|
|
166
|
+
scopedLines.push(`${scopedSelector} {${rest}`);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
scopedLines.push(line);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return scopedLines.join("\n");
|
|
173
|
+
}
|
|
11
174
|
function runTypeCheck() {
|
|
12
175
|
const spinner = ora("Type checking with TypeScript...").start();
|
|
13
176
|
try {
|
|
@@ -53,7 +216,7 @@ async function buildComponents(options) {
|
|
|
53
216
|
// Build each component
|
|
54
217
|
for (const component of config.components) {
|
|
55
218
|
const spinner = ora(`Building ${component.name}...`).start();
|
|
56
|
-
const result = await compileComponent(component.
|
|
219
|
+
const result = await compileComponent(component.id, component.entry, component.styles);
|
|
57
220
|
if (result.success) {
|
|
58
221
|
// Write output files
|
|
59
222
|
const componentOutDir = path.join(outputPath, component.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-page.d.ts","sourceRoot":"","sources":["../../src/commands/create-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC,wBAAgB,uBAAuB,IAAI,OAAO,CAYjD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { printErrorAndExit, printResultAndExit, runEditorAction, } from "../utils/editor-action-client.js";
|
|
3
|
+
async function runCreatePage(options) {
|
|
4
|
+
if (!options.pageType || typeof options.pageType !== "string") {
|
|
5
|
+
printErrorAndExit(new Error("--page-type is required (e.g. CATEGORY, PRODUCT, BRAND, BLOG, BLOG_CATEGORY, CUSTOM)"));
|
|
6
|
+
}
|
|
7
|
+
const port = options.port ? parseInt(options.port, 10) : undefined;
|
|
8
|
+
try {
|
|
9
|
+
const result = await runEditorAction("create-page", {
|
|
10
|
+
pageType: options.pageType,
|
|
11
|
+
...(options.name ? { name: options.name } : {}),
|
|
12
|
+
...(options.slug ? { slug: options.slug } : {}),
|
|
13
|
+
}, port ? { port } : {});
|
|
14
|
+
printResultAndExit(result);
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
printErrorAndExit(e);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export function createCreatePageCommand() {
|
|
21
|
+
const cmd = new Command("create-page");
|
|
22
|
+
cmd
|
|
23
|
+
.description("Create a theme page of the given pageType (CATEGORY, PRODUCT, BRAND, BLOG, BLOG_CATEGORY, INDEX, CUSTOM, …), so you can build a real PAGE link to its entities instead of guessing a slug/URL. Non-CUSTOM types are unique per theme — if one already exists it is returned as-is (alreadyExisted: true). CUSTOM requires --name and a unique --slug. Returns the page id.")
|
|
24
|
+
.requiredOption("--page-type <type>", "Page type to create (e.g. CATEGORY)")
|
|
25
|
+
.option("--name <name>", "Page name (required for CUSTOM pages)")
|
|
26
|
+
.option("--slug <slug>", "Page slug (required for CUSTOM pages)")
|
|
27
|
+
.option("--port <port>", "Dev server WebSocket port", "5201")
|
|
28
|
+
.action(runCreatePage);
|
|
29
|
+
return cmd;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=create-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-page.js","sourceRoot":"","sources":["../../src/commands/create-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAS1C,KAAK,UAAU,aAAa,CAAC,OAA0B;IACrD,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9D,iBAAiB,CACf,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAClG,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,aAAa,EACb;YACE,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,EACD,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CACrB,CAAC;QACF,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IACvC,GAAG;SACA,WAAW,CACV,4WAA4W,CAC7W;SACA,cAAc,CAAC,oBAAoB,EAAE,qCAAqC,CAAC;SAC3E,MAAM,CAAC,eAAe,EAAE,uCAAuC,CAAC;SAChE,MAAM,CAAC,eAAe,EAAE,uCAAuC,CAAC;SAChE,MAAM,CAAC,eAAe,EAAE,2BAA2B,EAAE,MAAM,CAAC;SAC5D,MAAM,CAAC,aAAa,CAAC,CAAC;IACzB,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsKpC,wBAAgB,mBAAmB,IAAI,OAAO,CA+C7C;AAGD,wBAAsB,GAAG,kBAoDxB"}
|
package/dist/commands/create.js
CHANGED
|
@@ -4,32 +4,9 @@ import * as fs from "fs";
|
|
|
4
4
|
import inquirer from "inquirer";
|
|
5
5
|
import ora from "ora";
|
|
6
6
|
import * as path from "path";
|
|
7
|
-
import { generateComponentId, generateProjectId } from "../utils/component-helpers.js";
|
|
8
|
-
import { readTemplate } from "../utils/template.js";
|
|
9
|
-
|
|
10
|
-
"TEXT",
|
|
11
|
-
"NUMBER",
|
|
12
|
-
"BOOLEAN",
|
|
13
|
-
"IMAGE",
|
|
14
|
-
"LINK",
|
|
15
|
-
"LIST_OF_LINK",
|
|
16
|
-
"COLOR",
|
|
17
|
-
"PRODUCT",
|
|
18
|
-
"PRODUCT_LIST",
|
|
19
|
-
"CATEGORY",
|
|
20
|
-
"CATEGORY_LIST",
|
|
21
|
-
"BRAND",
|
|
22
|
-
"BRAND_LIST",
|
|
23
|
-
"BLOG",
|
|
24
|
-
"BLOG_LIST",
|
|
25
|
-
"BLOG_CATEGORY",
|
|
26
|
-
"BLOG_CATEGORY_LIST",
|
|
27
|
-
"TYPE",
|
|
28
|
-
"ENUM",
|
|
29
|
-
"COMPONENT",
|
|
30
|
-
"COMPONENT_LIST",
|
|
31
|
-
];
|
|
32
|
-
async function createProject(projectName) {
|
|
7
|
+
import { generateComponentId, generateProjectId, generateUniqueId } from "../utils/component-helpers.js";
|
|
8
|
+
import { readTemplate, readTemplateDirectory } from "../utils/template.js";
|
|
9
|
+
async function createProject(projectName, template = "blank") {
|
|
33
10
|
const spinner = ora("Creating project...").start();
|
|
34
11
|
try {
|
|
35
12
|
const projectPath = path.resolve(process.cwd(), projectName);
|
|
@@ -38,48 +15,30 @@ async function createProject(projectName) {
|
|
|
38
15
|
spinner.fail(`Directory "${projectName}" already exists`);
|
|
39
16
|
process.exit(1);
|
|
40
17
|
}
|
|
41
|
-
//
|
|
42
|
-
fs.mkdirSync(projectPath, { recursive: true });
|
|
43
|
-
fs.mkdirSync(path.join(projectPath, "src/components/ExampleComponent"), { recursive: true });
|
|
44
|
-
fs.mkdirSync(path.join(projectPath, "src/components/ExampleSection"), { recursive: true });
|
|
45
|
-
// Generate IDs for the example config
|
|
18
|
+
// Generate project ID
|
|
46
19
|
const projectId = generateProjectId();
|
|
47
|
-
const exampleComponentId = generateComponentId(projectId, "example-component");
|
|
48
|
-
const exampleSectionId = generateComponentId(projectId, "example-section");
|
|
49
20
|
const vars = {
|
|
50
21
|
PROJECT_NAME: projectName,
|
|
51
22
|
PROJECT_ID: projectId,
|
|
52
|
-
EXAMPLE_COMPONENT_ID:
|
|
53
|
-
EXAMPLE_SECTION_ID:
|
|
23
|
+
EXAMPLE_COMPONENT_ID: generateComponentId(projectId, "example-component"),
|
|
24
|
+
EXAMPLE_SECTION_ID: generateComponentId(projectId, "example-section"),
|
|
54
25
|
};
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
{ template: "create/src/components/index.ts", dest: "src/components/index.ts" },
|
|
70
|
-
{ template: "create/src/components/ExampleComponent/index.tsx", dest: "src/components/ExampleComponent/index.tsx" },
|
|
71
|
-
{ template: "create/src/components/ExampleComponent/types.ts", dest: "src/components/ExampleComponent/types.ts" },
|
|
72
|
-
{ template: "create/src/components/ExampleComponent/styles.css", dest: "src/components/ExampleComponent/styles.css" },
|
|
73
|
-
{ template: "create/src/components/ExampleSection/index.tsx", dest: "src/components/ExampleSection/index.tsx" },
|
|
74
|
-
{ template: "create/src/components/ExampleSection/types.ts", dest: "src/components/ExampleSection/types.ts" },
|
|
75
|
-
{ template: "create/src/components/ExampleSection/styles.css", dest: "src/components/ExampleSection/styles.css" },
|
|
76
|
-
];
|
|
77
|
-
for (const file of files) {
|
|
78
|
-
fs.writeFileSync(path.join(projectPath, file.dest), readTemplate(file.template, file.vars));
|
|
26
|
+
if (template === "full") {
|
|
27
|
+
// Generate unique IDs for custom enum types and privateVarMap entries
|
|
28
|
+
vars.ENUM_COLUMNS_ID = generateUniqueId();
|
|
29
|
+
vars.ENUM_ASPECT_RATIO_ID = generateUniqueId();
|
|
30
|
+
vars.ENUM_OBJECT_FIT_ID = generateUniqueId();
|
|
31
|
+
vars.ENUM_VERTICAL_ALIGN_ID = generateUniqueId();
|
|
32
|
+
vars.PVM_ID_1 = `pvm_${Date.now()}_1`;
|
|
33
|
+
vars.PVM_ID_2 = `pvm_${Date.now()}_2`;
|
|
34
|
+
vars.PVM_ID_3 = `pvm_${Date.now()}_3`;
|
|
35
|
+
vars.PVM_ID_4 = `pvm_${Date.now()}_4`;
|
|
36
|
+
await createFullProject(projectPath, vars, spinner);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
await createBlankProject(projectPath, vars, spinner);
|
|
79
40
|
}
|
|
80
41
|
// Create or merge .cursor/mcp.json for Cursor editor
|
|
81
|
-
// Uses node + ${workspaceFolder} instead of npx because Cursor
|
|
82
|
-
// doesn't reliably inherit the shell PATH.
|
|
83
42
|
const cursorDir = path.join(projectPath, ".cursor");
|
|
84
43
|
const cursorMcpPath = path.join(cursorDir, "mcp.json");
|
|
85
44
|
fs.mkdirSync(cursorDir, { recursive: true });
|
|
@@ -100,11 +59,15 @@ async function createProject(projectName) {
|
|
|
100
59
|
args: ["${workspaceFolder}/node_modules/@ikas/code-components-mcp/dist/index.js"]
|
|
101
60
|
};
|
|
102
61
|
fs.writeFileSync(cursorMcpPath, JSON.stringify(cursorMcpConfig, null, 2));
|
|
103
|
-
spinner.succeed(chalk.green(`Project "${projectName}" created successfully
|
|
62
|
+
spinner.succeed(chalk.green(`Project "${projectName}" created successfully! (template: ${template})`));
|
|
104
63
|
console.log("\n" + chalk.cyan("Next steps:"));
|
|
105
64
|
console.log(chalk.white(` cd ${projectName}`));
|
|
106
65
|
console.log(chalk.white(" npm install"));
|
|
107
66
|
console.log(chalk.white(" npm run dev"));
|
|
67
|
+
if (template === "full") {
|
|
68
|
+
console.log("\n" + chalk.yellow("This is a complete theme with 20 sections and 30+ components."));
|
|
69
|
+
console.log(chalk.yellow("See README.md for the full project structure."));
|
|
70
|
+
}
|
|
108
71
|
console.log("\n" + chalk.gray("Happy coding! 🚀"));
|
|
109
72
|
}
|
|
110
73
|
catch (error) {
|
|
@@ -113,12 +76,82 @@ async function createProject(projectName) {
|
|
|
113
76
|
process.exit(1);
|
|
114
77
|
}
|
|
115
78
|
}
|
|
79
|
+
async function createBlankProject(projectPath, vars, spinner) {
|
|
80
|
+
// Create directory structure
|
|
81
|
+
fs.mkdirSync(projectPath, { recursive: true });
|
|
82
|
+
fs.mkdirSync(path.join(projectPath, "src/components/ExampleComponent"), { recursive: true });
|
|
83
|
+
fs.mkdirSync(path.join(projectPath, "src/components/ExampleSection"), { recursive: true });
|
|
84
|
+
// Write all template files
|
|
85
|
+
const files = [
|
|
86
|
+
{ template: "create/package.json", dest: "package.json", vars },
|
|
87
|
+
{ template: "create/tsconfig.json", dest: "tsconfig.json" },
|
|
88
|
+
{ template: "create/vite.config.ts", dest: "vite.config.ts" },
|
|
89
|
+
{ template: "create/ikas.config.json", dest: "ikas.config.json", vars },
|
|
90
|
+
{ template: "create/gitignore", dest: ".gitignore" },
|
|
91
|
+
{ template: "create/mcp.json", dest: ".mcp.json" },
|
|
92
|
+
{ template: "create/README.md", dest: "README.md", vars },
|
|
93
|
+
{ template: "create/claude-md", dest: "CLAUDE.md" },
|
|
94
|
+
{ template: "create/cursorrules", dest: ".cursorrules" },
|
|
95
|
+
{ template: "create/src/global.css", dest: "src/global.css" },
|
|
96
|
+
{ template: "create/src/global-types.ts", dest: "src/global-types.ts" },
|
|
97
|
+
{ template: "create/src/ikas-component-utils.d.ts", dest: "src/ikas-component-utils.d.ts" },
|
|
98
|
+
{ template: "create/src/components/index.ts", dest: "src/components/index.ts" },
|
|
99
|
+
{ template: "create/src/components/ExampleComponent/index.tsx", dest: "src/components/ExampleComponent/index.tsx" },
|
|
100
|
+
{ template: "create/src/components/ExampleComponent/types.ts", dest: "src/components/ExampleComponent/types.ts" },
|
|
101
|
+
{ template: "create/src/components/ExampleComponent/styles.css", dest: "src/components/ExampleComponent/styles.css" },
|
|
102
|
+
{ template: "create/src/components/ExampleSection/index.tsx", dest: "src/components/ExampleSection/index.tsx" },
|
|
103
|
+
{ template: "create/src/components/ExampleSection/types.ts", dest: "src/components/ExampleSection/types.ts" },
|
|
104
|
+
{ template: "create/src/components/ExampleSection/styles.css", dest: "src/components/ExampleSection/styles.css" },
|
|
105
|
+
];
|
|
106
|
+
for (const file of files) {
|
|
107
|
+
fs.writeFileSync(path.join(projectPath, file.dest), readTemplate(file.template, file.vars));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async function createFullProject(projectPath, vars, spinner) {
|
|
111
|
+
fs.mkdirSync(projectPath, { recursive: true });
|
|
112
|
+
spinner.text = "Creating full theme project (350+ files)...";
|
|
113
|
+
const templateFiles = readTemplateDirectory("create-full", vars);
|
|
114
|
+
for (const file of templateFiles) {
|
|
115
|
+
// Map template filenames to actual filenames
|
|
116
|
+
let destPath = file.relativePath;
|
|
117
|
+
if (destPath === "gitignore")
|
|
118
|
+
destPath = ".gitignore";
|
|
119
|
+
else if (destPath === "claude-md")
|
|
120
|
+
destPath = "CLAUDE.md";
|
|
121
|
+
else if (destPath === "cursorrules")
|
|
122
|
+
destPath = ".cursorrules";
|
|
123
|
+
else if (destPath === "mcp.json")
|
|
124
|
+
destPath = ".mcp.json";
|
|
125
|
+
const fullDest = path.join(projectPath, destPath);
|
|
126
|
+
fs.mkdirSync(path.dirname(fullDest), { recursive: true });
|
|
127
|
+
fs.writeFileSync(fullDest, file.content);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
116
130
|
export function createCreateCommand() {
|
|
117
131
|
return new Command("create")
|
|
118
132
|
.description("Create a new ikas component project")
|
|
119
133
|
.argument("[name]", "Project name")
|
|
120
|
-
.
|
|
134
|
+
.option("-t, --template <template>", "Template to use: blank or full (complete theme)")
|
|
135
|
+
.action(async (name, opts) => {
|
|
121
136
|
let projectName = name;
|
|
137
|
+
let template;
|
|
138
|
+
if (opts.template) {
|
|
139
|
+
template = opts.template === "full" ? "full" : "blank";
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
const answers = await inquirer.prompt([
|
|
143
|
+
{
|
|
144
|
+
type: "list",
|
|
145
|
+
name: "template",
|
|
146
|
+
message: "Which template would you like to use?",
|
|
147
|
+
choices: [
|
|
148
|
+
{ name: "Blank — minimal project with example component and section", value: "blank" },
|
|
149
|
+
{ name: "Full — complete storefront theme with 20 sections and 30+ components", value: "full" },
|
|
150
|
+
],
|
|
151
|
+
}
|
|
152
|
+
]);
|
|
153
|
+
template = answers.template;
|
|
154
|
+
}
|
|
122
155
|
if (!projectName) {
|
|
123
156
|
const answers = await inquirer.prompt([
|
|
124
157
|
{
|
|
@@ -138,7 +171,7 @@ export function createCreateCommand() {
|
|
|
138
171
|
]);
|
|
139
172
|
projectName = answers.projectName;
|
|
140
173
|
}
|
|
141
|
-
await createProject(projectName);
|
|
174
|
+
await createProject(projectName, template);
|
|
142
175
|
});
|
|
143
176
|
}
|
|
144
177
|
// Standalone runner for create-ikas-component command
|
|
@@ -148,8 +181,27 @@ export async function run() {
|
|
|
148
181
|
.name("create-ikas-component")
|
|
149
182
|
.description("Create a new ikas component project")
|
|
150
183
|
.argument("[name]", "Project name")
|
|
151
|
-
.
|
|
184
|
+
.option("-t, --template <template>", "Template to use: blank or full (complete theme)")
|
|
185
|
+
.action(async (name, opts) => {
|
|
152
186
|
let projectName = name;
|
|
187
|
+
let template;
|
|
188
|
+
if (opts.template) {
|
|
189
|
+
template = opts.template === "full" ? "full" : "blank";
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
const answers = await inquirer.prompt([
|
|
193
|
+
{
|
|
194
|
+
type: "list",
|
|
195
|
+
name: "template",
|
|
196
|
+
message: "Which template would you like to use?",
|
|
197
|
+
choices: [
|
|
198
|
+
{ name: "Blank — minimal project with example component and section", value: "blank" },
|
|
199
|
+
{ name: "Full — complete storefront theme with 20 sections and 30+ components", value: "full" },
|
|
200
|
+
],
|
|
201
|
+
}
|
|
202
|
+
]);
|
|
203
|
+
template = answers.template;
|
|
204
|
+
}
|
|
153
205
|
if (!projectName) {
|
|
154
206
|
const answers = await inquirer.prompt([
|
|
155
207
|
{
|
|
@@ -169,7 +221,7 @@ export async function run() {
|
|
|
169
221
|
]);
|
|
170
222
|
projectName = answers.projectName;
|
|
171
223
|
}
|
|
172
|
-
await createProject(projectName);
|
|
224
|
+
await createProject(projectName, template);
|
|
173
225
|
});
|
|
174
226
|
program.parse(process.argv);
|
|
175
227
|
}
|