@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.
Files changed (93) hide show
  1. package/dist/commands/add-sections-to-page.d.ts +3 -0
  2. package/dist/commands/add-sections-to-page.d.ts.map +1 -0
  3. package/dist/commands/add-sections-to-page.js +39 -0
  4. package/dist/commands/add-sections-to-page.js.map +1 -0
  5. package/dist/commands/build.d.ts.map +1 -1
  6. package/dist/commands/build.js +168 -5
  7. package/dist/commands/build.js.map +1 -1
  8. package/dist/commands/create-page.d.ts +3 -0
  9. package/dist/commands/create-page.d.ts.map +1 -0
  10. package/dist/commands/create-page.js +31 -0
  11. package/dist/commands/create-page.js.map +1 -0
  12. package/dist/commands/create.d.ts.map +1 -1
  13. package/dist/commands/create.js +118 -66
  14. package/dist/commands/create.js.map +1 -1
  15. package/dist/commands/get-available-values.d.ts +3 -0
  16. package/dist/commands/get-available-values.d.ts.map +1 -0
  17. package/dist/commands/get-available-values.js +49 -0
  18. package/dist/commands/get-available-values.js.map +1 -0
  19. package/dist/commands/get-component-props.d.ts +3 -0
  20. package/dist/commands/get-component-props.d.ts.map +1 -0
  21. package/dist/commands/get-component-props.js +32 -0
  22. package/dist/commands/get-component-props.js.map +1 -0
  23. package/dist/commands/get-page-by-type.d.ts +3 -0
  24. package/dist/commands/get-page-by-type.d.ts.map +1 -0
  25. package/dist/commands/get-page-by-type.js +25 -0
  26. package/dist/commands/get-page-by-type.js.map +1 -0
  27. package/dist/commands/get-section-values.d.ts +3 -0
  28. package/dist/commands/get-section-values.d.ts.map +1 -0
  29. package/dist/commands/get-section-values.js +39 -0
  30. package/dist/commands/get-section-values.js.map +1 -0
  31. package/dist/commands/list-entities.d.ts +3 -0
  32. package/dist/commands/list-entities.d.ts.map +1 -0
  33. package/dist/commands/list-entities.js +32 -0
  34. package/dist/commands/list-entities.js.map +1 -0
  35. package/dist/commands/list-page-sections.d.ts +3 -0
  36. package/dist/commands/list-page-sections.d.ts.map +1 -0
  37. package/dist/commands/list-page-sections.js +25 -0
  38. package/dist/commands/list-page-sections.js.map +1 -0
  39. package/dist/commands/proxy.d.ts +39 -0
  40. package/dist/commands/proxy.d.ts.map +1 -0
  41. package/dist/commands/proxy.js +210 -0
  42. package/dist/commands/proxy.js.map +1 -0
  43. package/dist/commands/publish-theme.d.ts +3 -0
  44. package/dist/commands/publish-theme.d.ts.map +1 -0
  45. package/dist/commands/publish-theme.js +29 -0
  46. package/dist/commands/publish-theme.js.map +1 -0
  47. package/dist/commands/search-products.d.ts +3 -0
  48. package/dist/commands/search-products.d.ts.map +1 -0
  49. package/dist/commands/search-products.js +40 -0
  50. package/dist/commands/search-products.js.map +1 -0
  51. package/dist/commands/set-dynamic-value.d.ts +3 -0
  52. package/dist/commands/set-dynamic-value.d.ts.map +1 -0
  53. package/dist/commands/set-dynamic-value.js +54 -0
  54. package/dist/commands/set-dynamic-value.js.map +1 -0
  55. package/dist/commands/update-page-sections.d.ts +3 -0
  56. package/dist/commands/update-page-sections.d.ts.map +1 -0
  57. package/dist/commands/update-page-sections.js +39 -0
  58. package/dist/commands/update-page-sections.js.map +1 -0
  59. package/dist/commands/update-section-prop.d.ts +3 -0
  60. package/dist/commands/update-section-prop.d.ts.map +1 -0
  61. package/dist/commands/update-section-prop.js +59 -0
  62. package/dist/commands/update-section-prop.js.map +1 -0
  63. package/dist/commands/update-section-props.d.ts +3 -0
  64. package/dist/commands/update-section-props.d.ts.map +1 -0
  65. package/dist/commands/update-section-props.js +43 -0
  66. package/dist/commands/update-section-props.js.map +1 -0
  67. package/dist/commands/upload-image.d.ts +3 -0
  68. package/dist/commands/upload-image.d.ts.map +1 -0
  69. package/dist/commands/upload-image.js +38 -0
  70. package/dist/commands/upload-image.js.map +1 -0
  71. package/dist/commands/upload-images.d.ts +3 -0
  72. package/dist/commands/upload-images.d.ts.map +1 -0
  73. package/dist/commands/upload-images.js +48 -0
  74. package/dist/commands/upload-images.js.map +1 -0
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +28 -0
  77. package/dist/index.js.map +1 -1
  78. package/dist/utils/compile.d.ts +1 -4
  79. package/dist/utils/compile.d.ts.map +1 -1
  80. package/dist/utils/compile.js +40 -500
  81. package/dist/utils/compile.js.map +1 -1
  82. package/dist/utils/editor-action-client.d.ts +1 -1
  83. package/dist/utils/editor-action-client.d.ts.map +1 -1
  84. package/dist/utils/editor-action-client.js +23 -8
  85. package/dist/utils/editor-action-client.js.map +1 -1
  86. package/dist/utils/load-image.d.ts +16 -0
  87. package/dist/utils/load-image.d.ts.map +1 -0
  88. package/dist/utils/load-image.js +50 -0
  89. package/dist/utils/load-image.js.map +1 -0
  90. package/dist/utils/websocket-server.d.ts +2 -2
  91. package/dist/utils/websocket-server.d.ts.map +1 -1
  92. package/dist/utils/websocket-server.js.map +1 -1
  93. package/package.json +1 -1
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function createAddSectionsToPageCommand(): Command;
3
+ //# sourceMappingURL=add-sections-to-page.d.ts.map
@@ -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;AAmIpC,wBAAgB,kBAAkB,IAAI,OAAO,CAK5C"}
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"}
@@ -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
- // Single-source the per-component compile pipeline (esbuild config, externals, CSS
8
- // scoping) from utils/compile.ts. This command previously carried its own copy, which
9
- // is how the CSS-scoping fix could land in one place and not the other — keep it shared.
10
- import { compileComponent } from "../utils/compile.js";
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.entry, component.styles, component.id);
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":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function createCreatePageCommand(): Command;
3
+ //# sourceMappingURL=create-page.d.ts.map
@@ -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;AA4IpC,wBAAgB,mBAAmB,IAAI,OAAO,CA4B7C;AAGD,wBAAsB,GAAG,kBAiCxB"}
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"}
@@ -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
- const PROP_TYPES = [
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
- // Create directory structure
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: exampleComponentId,
53
- EXAMPLE_SECTION_ID: exampleSectionId,
23
+ EXAMPLE_COMPONENT_ID: generateComponentId(projectId, "example-component"),
24
+ EXAMPLE_SECTION_ID: generateComponentId(projectId, "example-section"),
54
25
  };
55
- // Write all template files
56
- const files = [
57
- { template: "create/package.json", dest: "package.json", vars },
58
- { template: "create/tsconfig.json", dest: "tsconfig.json" },
59
- { template: "create/vite.config.ts", dest: "vite.config.ts" },
60
- { template: "create/ikas.config.json", dest: "ikas.config.json", vars },
61
- { template: "create/gitignore", dest: ".gitignore" },
62
- { template: "create/mcp.json", dest: ".mcp.json" },
63
- { template: "create/README.md", dest: "README.md", vars },
64
- { template: "create/claude-md", dest: "CLAUDE.md" },
65
- { template: "create/cursorrules", dest: ".cursorrules" },
66
- { template: "create/src/global.css", dest: "src/global.css" },
67
- { template: "create/src/global-types.ts", dest: "src/global-types.ts" },
68
- { template: "create/src/ikas-component-utils.d.ts", dest: "src/ikas-component-utils.d.ts" },
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
- .action(async (name) => {
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
- .action(async (name) => {
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
  }