@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.
Files changed (113) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +649 -0
  3. package/config.d.ts +2 -0
  4. package/config.js +2 -0
  5. package/dist/cli.d.ts +3 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +236 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/commands/add-source.d.ts +7 -0
  10. package/dist/commands/add-source.d.ts.map +1 -0
  11. package/dist/commands/add-source.js +238 -0
  12. package/dist/commands/add-source.js.map +1 -0
  13. package/dist/commands/build.d.ts +7 -0
  14. package/dist/commands/build.d.ts.map +1 -0
  15. package/dist/commands/build.js +105 -0
  16. package/dist/commands/build.js.map +1 -0
  17. package/dist/commands/configure.d.ts +6 -0
  18. package/dist/commands/configure.d.ts.map +1 -0
  19. package/dist/commands/configure.js +42 -0
  20. package/dist/commands/configure.js.map +1 -0
  21. package/dist/commands/create.d.ts +18 -0
  22. package/dist/commands/create.d.ts.map +1 -0
  23. package/dist/commands/create.js +444 -0
  24. package/dist/commands/create.js.map +1 -0
  25. package/dist/commands/dev.d.ts +6 -0
  26. package/dist/commands/dev.d.ts.map +1 -0
  27. package/dist/commands/dev.js +962 -0
  28. package/dist/commands/dev.js.map +1 -0
  29. package/dist/commands/init.d.ts +2 -0
  30. package/dist/commands/init.d.ts.map +1 -0
  31. package/dist/commands/init.js +362 -0
  32. package/dist/commands/init.js.map +1 -0
  33. package/dist/commands/migrate.d.ts +2 -0
  34. package/dist/commands/migrate.d.ts.map +1 -0
  35. package/dist/commands/migrate.js +227 -0
  36. package/dist/commands/migrate.js.map +1 -0
  37. package/dist/commands/package.d.ts +7 -0
  38. package/dist/commands/package.d.ts.map +1 -0
  39. package/dist/commands/package.js +136 -0
  40. package/dist/commands/package.js.map +1 -0
  41. package/dist/commands/publish.d.ts +13 -0
  42. package/dist/commands/publish.d.ts.map +1 -0
  43. package/dist/commands/publish.js +910 -0
  44. package/dist/commands/publish.js.map +1 -0
  45. package/dist/commands/sync.d.ts +6 -0
  46. package/dist/commands/sync.d.ts.map +1 -0
  47. package/dist/commands/sync.js +208 -0
  48. package/dist/commands/sync.js.map +1 -0
  49. package/dist/commands/upload.d.ts +7 -0
  50. package/dist/commands/upload.d.ts.map +1 -0
  51. package/dist/commands/upload.js +126 -0
  52. package/dist/commands/upload.js.map +1 -0
  53. package/dist/commands/workspaces.d.ts +2 -0
  54. package/dist/commands/workspaces.d.ts.map +1 -0
  55. package/dist/commands/workspaces.js +67 -0
  56. package/dist/commands/workspaces.js.map +1 -0
  57. package/dist/dev-ui/app.js +1284 -0
  58. package/dist/dev-ui/index.html +1511 -0
  59. package/dist/dev-ui-react/App.tsx +164 -0
  60. package/dist/dev-ui-react/__tests__/previewData.test.ts +193 -0
  61. package/dist/dev-ui-react/components/BlocksList.tsx +232 -0
  62. package/dist/dev-ui-react/components/Editor.tsx +469 -0
  63. package/dist/dev-ui-react/components/Preview.tsx +146 -0
  64. package/dist/dev-ui-react/hooks/useBlocks.ts +80 -0
  65. package/dist/dev-ui-react/index.html +13 -0
  66. package/dist/dev-ui-react/main.tsx +8 -0
  67. package/dist/dev-ui-react/styles.css +856 -0
  68. package/dist/dev-ui-react/types.ts +45 -0
  69. package/dist/types/block-config.d.ts +315 -0
  70. package/dist/types/block-config.d.ts.map +1 -0
  71. package/dist/types/block-config.js +8 -0
  72. package/dist/types/block-config.js.map +1 -0
  73. package/dist/utils/block-config.d.ts +10 -0
  74. package/dist/utils/block-config.d.ts.map +1 -0
  75. package/dist/utils/block-config.js +199 -0
  76. package/dist/utils/block-config.js.map +1 -0
  77. package/dist/utils/blocks-meta-cache.d.ts +28 -0
  78. package/dist/utils/blocks-meta-cache.d.ts.map +1 -0
  79. package/dist/utils/blocks-meta-cache.js +72 -0
  80. package/dist/utils/blocks-meta-cache.js.map +1 -0
  81. package/dist/utils/builder.d.ts +34 -0
  82. package/dist/utils/builder.d.ts.map +1 -0
  83. package/dist/utils/builder.js +140 -0
  84. package/dist/utils/builder.js.map +1 -0
  85. package/dist/utils/cmssy-config.d.ts +16 -0
  86. package/dist/utils/cmssy-config.d.ts.map +1 -0
  87. package/dist/utils/cmssy-config.js +19 -0
  88. package/dist/utils/cmssy-config.js.map +1 -0
  89. package/dist/utils/config.d.ts +9 -0
  90. package/dist/utils/config.d.ts.map +1 -0
  91. package/dist/utils/config.js +46 -0
  92. package/dist/utils/config.js.map +1 -0
  93. package/dist/utils/field-schema.d.ts +12 -0
  94. package/dist/utils/field-schema.d.ts.map +1 -0
  95. package/dist/utils/field-schema.js +202 -0
  96. package/dist/utils/field-schema.js.map +1 -0
  97. package/dist/utils/graphql.d.ts +8 -0
  98. package/dist/utils/graphql.d.ts.map +1 -0
  99. package/dist/utils/graphql.js +118 -0
  100. package/dist/utils/graphql.js.map +1 -0
  101. package/dist/utils/publish-helpers.d.ts +35 -0
  102. package/dist/utils/publish-helpers.d.ts.map +1 -0
  103. package/dist/utils/publish-helpers.js +141 -0
  104. package/dist/utils/publish-helpers.js.map +1 -0
  105. package/dist/utils/scanner.d.ts +36 -0
  106. package/dist/utils/scanner.d.ts.map +1 -0
  107. package/dist/utils/scanner.js +140 -0
  108. package/dist/utils/scanner.js.map +1 -0
  109. package/dist/utils/type-generator.d.ts +9 -0
  110. package/dist/utils/type-generator.d.ts.map +1 -0
  111. package/dist/utils/type-generator.js +85 -0
  112. package/dist/utils/type-generator.js.map +1 -0
  113. package/package.json +88 -0
@@ -0,0 +1,72 @@
1
+ import fs from "fs-extra";
2
+ import path from "path";
3
+ const CACHE_FILE = ".cmssy/blocks-meta.json";
4
+ function getCachePath(cwd = process.cwd()) {
5
+ return path.join(cwd, CACHE_FILE);
6
+ }
7
+ export function loadMetaCache(cwd = process.cwd()) {
8
+ const cachePath = getCachePath(cwd);
9
+ if (fs.existsSync(cachePath)) {
10
+ try {
11
+ return fs.readJsonSync(cachePath);
12
+ }
13
+ catch {
14
+ // Corrupted cache, return empty
15
+ }
16
+ }
17
+ return { version: 1, blocks: {} };
18
+ }
19
+ export function saveMetaCache(cache, cwd = process.cwd()) {
20
+ const cachePath = getCachePath(cwd);
21
+ fs.ensureDirSync(path.dirname(cachePath));
22
+ fs.writeJsonSync(cachePath, cache, { spaces: 2 });
23
+ }
24
+ export function updateBlockInCache(name, type, config, version, cwd = process.cwd()) {
25
+ const cache = loadMetaCache(cwd);
26
+ cache.blocks[name] = {
27
+ type,
28
+ category: config?.category,
29
+ tags: config?.tags,
30
+ displayName: config?.name,
31
+ description: config?.description,
32
+ version,
33
+ updatedAt: new Date().toISOString(),
34
+ };
35
+ saveMetaCache(cache, cwd);
36
+ }
37
+ export function removeBlockFromCache(name, cwd = process.cwd()) {
38
+ const cache = loadMetaCache(cwd);
39
+ delete cache.blocks[name];
40
+ saveMetaCache(cache, cwd);
41
+ }
42
+ export function getBlockMeta(name, cwd = process.cwd()) {
43
+ const cache = loadMetaCache(cwd);
44
+ return cache.blocks[name] || null;
45
+ }
46
+ /**
47
+ * Get all unique categories from cache
48
+ */
49
+ export function getCachedCategories(cwd = process.cwd()) {
50
+ const cache = loadMetaCache(cwd);
51
+ const categories = new Set();
52
+ Object.values(cache.blocks).forEach((meta) => {
53
+ if (meta.category) {
54
+ categories.add(meta.category);
55
+ }
56
+ });
57
+ return Array.from(categories).sort();
58
+ }
59
+ /**
60
+ * Get all unique tags from cache
61
+ */
62
+ export function getCachedTags(cwd = process.cwd()) {
63
+ const cache = loadMetaCache(cwd);
64
+ const tags = new Set();
65
+ Object.values(cache.blocks).forEach((meta) => {
66
+ if (meta.tags) {
67
+ meta.tags.forEach((tag) => tags.add(tag));
68
+ }
69
+ });
70
+ return Array.from(tags).sort();
71
+ }
72
+ //# sourceMappingURL=blocks-meta-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks-meta-cache.js","sourceRoot":"","sources":["../../src/utils/blocks-meta-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { FieldTypeDefinition } from "./field-schema.js";
2
+ export interface BuildOptions {
3
+ /** Framework (default: "react") */
4
+ framework?: string;
5
+ /** Enable minification (default: true for production, false for dev) */
6
+ minify?: boolean;
7
+ /** Enable sourcemaps (default: true) */
8
+ sourcemap?: boolean;
9
+ /** Output mode: "versioned" or "flat" (default: "versioned") */
10
+ outputMode?: "versioned" | "flat";
11
+ /** Generate package.json with cmssy metadata (default: true) */
12
+ generatePackageJson?: boolean;
13
+ /** Generate TypeScript types (default: true) */
14
+ generateTypes?: boolean;
15
+ /** Throw errors or warn (default: true for build, false for dev) */
16
+ strict?: boolean;
17
+ /** Field type definitions from backend (for type generation) */
18
+ fieldTypes?: FieldTypeDefinition[];
19
+ }
20
+ export interface BuildableResource {
21
+ type: "block" | "template";
22
+ name: string;
23
+ path: string;
24
+ packageJson?: any;
25
+ blockConfig?: any;
26
+ }
27
+ /**
28
+ * Build a resource (block or template) with configurable options.
29
+ * Supports 2 modes:
30
+ * - Production mode (build): versioned output, minified, generates package.json
31
+ * - Development mode (dev): flat output, not minified, no package.json
32
+ */
33
+ export declare function buildResource(resource: BuildableResource, outDir: string, options?: BuildOptions): Promise<void>;
34
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/utils/builder.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxD,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gEAAgE;IAChE,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAClC,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gDAAgD;IAChD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,WAAW,CAAC,EAAE,GAAG,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAqHf"}
@@ -0,0 +1,140 @@
1
+ import chalk from "chalk";
2
+ import { build as esbuild } from "esbuild";
3
+ import { execSync } from "child_process";
4
+ import fs from "fs-extra";
5
+ import path from "path";
6
+ import { generateTypes } from "./type-generator.js";
7
+ /**
8
+ * Build a resource (block or template) with configurable options.
9
+ * Supports 2 modes:
10
+ * - Production mode (build): versioned output, minified, generates package.json
11
+ * - Development mode (dev): flat output, not minified, no package.json
12
+ */
13
+ export async function buildResource(resource, outDir, options = {}) {
14
+ const { framework = "react", minify = true, sourcemap = true, outputMode = "versioned", generatePackageJson = true, generateTypes: shouldGenerateTypes = true, strict = true, fieldTypes, } = options;
15
+ const srcPath = path.join(resource.path, "src");
16
+ const entryPoint = framework === "react"
17
+ ? path.join(srcPath, "index.tsx")
18
+ : path.join(srcPath, "index.ts");
19
+ // Check entry point exists
20
+ if (!fs.existsSync(entryPoint)) {
21
+ const message = `Entry point not found: ${entryPoint}`;
22
+ if (strict) {
23
+ throw new Error(message);
24
+ }
25
+ else {
26
+ console.warn(chalk.yellow(`Warning: ${message}`));
27
+ return;
28
+ }
29
+ }
30
+ // Determine output paths based on mode
31
+ let destDir;
32
+ let outFile;
33
+ let outCssFile = null;
34
+ if (outputMode === "versioned") {
35
+ // Production: public/@vendor/blocks.hero/1.0.0/
36
+ if (!resource.packageJson || !resource.packageJson.name || !resource.packageJson.version) {
37
+ const message = `Resource "${resource.name}" requires package.json with name and version for versioned output`;
38
+ if (strict) {
39
+ throw new Error(message);
40
+ }
41
+ else {
42
+ console.warn(chalk.yellow(`Warning: ${message}`));
43
+ return;
44
+ }
45
+ }
46
+ const packageName = resource.packageJson.name;
47
+ const version = resource.packageJson.version;
48
+ destDir = path.join(outDir, packageName, version);
49
+ outFile = path.join(destDir, "index.js");
50
+ outCssFile = path.join(destDir, "index.css");
51
+ fs.mkdirSync(destDir, { recursive: true });
52
+ }
53
+ else {
54
+ // Development: .cmssy/dev/block.hero.js
55
+ destDir = outDir;
56
+ outFile = path.join(outDir, `${resource.type}.${resource.name}.js`);
57
+ outCssFile = path.join(outDir, `${resource.type}.${resource.name}.css`);
58
+ fs.mkdirSync(destDir, { recursive: true });
59
+ }
60
+ // Build JavaScript with esbuild
61
+ try {
62
+ await esbuild({
63
+ entryPoints: [entryPoint],
64
+ bundle: true,
65
+ format: "esm",
66
+ outfile: outFile,
67
+ jsx: "transform",
68
+ minify,
69
+ sourcemap,
70
+ target: "es2020",
71
+ loader: { ".css": "empty" }, // Ignore CSS imports (CSS is handled separately)
72
+ // Note: React is bundled for dev because browser ES modules can't resolve bare imports
73
+ // Production builds (publish.ts) externalize React since SSR/BlockRenderer provide it
74
+ });
75
+ }
76
+ catch (error) {
77
+ const message = `Build error for ${resource.name}`;
78
+ if (strict) {
79
+ throw error;
80
+ }
81
+ else {
82
+ console.error(chalk.red(`${message}:`), error);
83
+ return;
84
+ }
85
+ }
86
+ // Process CSS if exists
87
+ const cssPath = path.join(srcPath, "index.css");
88
+ if (fs.existsSync(cssPath) && outCssFile) {
89
+ await processCSS(cssPath, outCssFile, minify, resource.name, strict);
90
+ }
91
+ // Generate minimal package.json (production mode)
92
+ if (generatePackageJson && outputMode === "versioned") {
93
+ // Only include essential fields - metadata is sent during publish, not stored in build
94
+ const outputPackageJson = {
95
+ name: resource.packageJson?.name || "",
96
+ version: resource.packageJson?.version || "1.0.0",
97
+ description: resource.packageJson?.description || "",
98
+ author: resource.packageJson?.author || { name: "", email: "" },
99
+ };
100
+ fs.writeFileSync(path.join(destDir, "package.json"), JSON.stringify(outputPackageJson, null, 2) + "\n");
101
+ }
102
+ // Generate TypeScript types (only for blocks with schema, not templates with pages)
103
+ if (shouldGenerateTypes && resource.blockConfig?.schema) {
104
+ await generateTypes({
105
+ blockPath: resource.path,
106
+ schema: resource.blockConfig.schema,
107
+ fieldTypes,
108
+ });
109
+ }
110
+ }
111
+ /**
112
+ * Process CSS with PostCSS (if config exists) or copy as-is
113
+ */
114
+ async function processCSS(cssPath, outCssFile, minify, resourceName, strict) {
115
+ const postcssConfigPath = path.join(process.cwd(), "postcss.config.js");
116
+ if (fs.existsSync(postcssConfigPath)) {
117
+ // Use PostCSS to process CSS (includes Tailwind)
118
+ try {
119
+ const minifyFlag = minify ? " --no-map" : "";
120
+ execSync(`npx postcss "${cssPath}" -o "${outCssFile}"${minifyFlag}`, {
121
+ stdio: "pipe",
122
+ cwd: process.cwd(),
123
+ });
124
+ }
125
+ catch (error) {
126
+ const message = `PostCSS processing failed for ${resourceName}: ${error.message}`;
127
+ if (strict) {
128
+ throw new Error(message);
129
+ }
130
+ console.warn(chalk.yellow(`Warning: ${message}`));
131
+ console.log(chalk.gray("Copying CSS as-is..."));
132
+ fs.copyFileSync(cssPath, outCssFile);
133
+ }
134
+ }
135
+ else {
136
+ // No PostCSS config - just copy CSS
137
+ fs.copyFileSync(cssPath, outCssFile);
138
+ }
139
+ }
140
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/utils/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface CmssyConfig {
2
+ framework: string;
3
+ projectName?: string;
4
+ author?: {
5
+ name: string;
6
+ email: string;
7
+ };
8
+ build?: {
9
+ outDir: string;
10
+ minify: boolean;
11
+ sourcemap: boolean;
12
+ };
13
+ }
14
+ export declare function loadConfig(): Promise<CmssyConfig>;
15
+ export declare function getPackageJson(packagePath: string): any;
16
+ //# sourceMappingURL=cmssy-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmssy-config.d.ts","sourceRoot":"","sources":["../../src/utils/cmssy-config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAYvD;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,OAMjD"}
@@ -0,0 +1,19 @@
1
+ import fs from "fs-extra";
2
+ import path from "path";
3
+ export async function loadConfig() {
4
+ const configPath = path.join(process.cwd(), "cmssy.config.js");
5
+ if (!fs.existsSync(configPath)) {
6
+ throw new Error("cmssy.config.js not found. Run 'cmssy init' to create a project.");
7
+ }
8
+ // Dynamic import for ESM
9
+ const configModule = await import(`file://${configPath}`);
10
+ return configModule.default;
11
+ }
12
+ export function getPackageJson(packagePath) {
13
+ const pkgPath = path.join(packagePath, "package.json");
14
+ if (!fs.existsSync(pkgPath)) {
15
+ return null;
16
+ }
17
+ return fs.readJsonSync(pkgPath);
18
+ }
19
+ //# sourceMappingURL=cmssy-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmssy-config.js","sourceRoot":"","sources":["../../src/utils/cmssy-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAgBxB,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAE/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,UAAU,UAAU,EAAE,CAAC,CAAC;IAC1D,OAAO,YAAY,CAAC,OAAO,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface CmssyConfig {
2
+ apiUrl: string;
3
+ apiToken: string | null;
4
+ workspaceId?: string | null;
5
+ }
6
+ export declare function loadConfig(): CmssyConfig;
7
+ export declare function saveConfig(config: Partial<CmssyConfig>): void;
8
+ export declare function hasConfig(): boolean;
9
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,UAAU,IAAI,WAAW,CAaxC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAiC7D;AAED,wBAAgB,SAAS,IAAI,OAAO,CAGnC"}
@@ -0,0 +1,46 @@
1
+ import dotenv from "dotenv";
2
+ import fs from "fs-extra";
3
+ import path from "path";
4
+ export function loadConfig() {
5
+ // Load from .env in cwd
6
+ const envPath = path.join(process.cwd(), ".env");
7
+ if (fs.existsSync(envPath)) {
8
+ dotenv.config({ path: envPath });
9
+ }
10
+ return {
11
+ apiUrl: process.env.CMSSY_API_URL || "https://api.cmssy.io/graphql",
12
+ apiToken: process.env.CMSSY_API_TOKEN || null,
13
+ workspaceId: process.env.CMSSY_WORKSPACE_ID || null,
14
+ };
15
+ }
16
+ export function saveConfig(config) {
17
+ const envPath = path.join(process.cwd(), ".env");
18
+ const existingEnv = fs.existsSync(envPath)
19
+ ? fs.readFileSync(envPath, "utf8")
20
+ : "";
21
+ let newEnv = existingEnv;
22
+ // Update or add CMSSY_API_TOKEN
23
+ if (config.apiToken !== undefined) {
24
+ if (existingEnv.includes("CMSSY_API_TOKEN=")) {
25
+ newEnv = newEnv.replace(/CMSSY_API_TOKEN=.*/, `CMSSY_API_TOKEN=${config.apiToken}`);
26
+ }
27
+ else {
28
+ newEnv += `\nCMSSY_API_TOKEN=${config.apiToken}\n`;
29
+ }
30
+ }
31
+ // Update or add CMSSY_API_URL
32
+ if (config.apiUrl !== undefined) {
33
+ if (existingEnv.includes("CMSSY_API_URL=")) {
34
+ newEnv = newEnv.replace(/CMSSY_API_URL=.*/, `CMSSY_API_URL=${config.apiUrl}`);
35
+ }
36
+ else {
37
+ newEnv += `CMSSY_API_URL=${config.apiUrl}\n`;
38
+ }
39
+ }
40
+ fs.writeFileSync(envPath, newEnv.trim() + "\n");
41
+ }
42
+ export function hasConfig() {
43
+ const config = loadConfig();
44
+ return !!config.apiToken;
45
+ }
46
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAQxB,MAAM,UAAU,UAAU;IACxB,wBAAwB;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAEjD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,8BAA8B;QACnE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI;QAC7C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI;KACpD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAA4B;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QACxC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;QAClC,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,MAAM,GAAG,WAAW,CAAC;IAEzB,gCAAgC;IAChC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,oBAAoB,EACpB,mBAAmB,MAAM,CAAC,QAAQ,EAAE,CACrC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,qBAAqB,MAAM,CAAC,QAAQ,IAAI,CAAC;QACrD,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC3C,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,kBAAkB,EAClB,iBAAiB,MAAM,CAAC,MAAM,EAAE,CACjC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,iBAAiB,MAAM,CAAC,MAAM,IAAI,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface FieldTypeDefinition {
2
+ type: string;
3
+ label: string;
4
+ description: string;
5
+ /** TypeScript type for the field value (e.g., "string", "number", "boolean") */
6
+ valueType: string;
7
+ allowsDefaultValue: boolean;
8
+ supportsValidation: boolean;
9
+ }
10
+ export declare function getFieldTypes(): Promise<FieldTypeDefinition[]>;
11
+ export declare function isValidFieldType(type: string, fieldTypes: FieldTypeDefinition[]): boolean;
12
+ //# sourceMappingURL=field-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-schema.d.ts","sourceRoot":"","sources":["../../src/utils/field-schema.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAyID,wBAAsB,aAAa,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAsCpE;AA8BD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,mBAAmB,EAAE,GAChC,OAAO,CAET"}
@@ -0,0 +1,202 @@
1
+ import fs from "fs-extra";
2
+ import path from "path";
3
+ import { GraphQLClient } from "graphql-request";
4
+ import { hasConfig, loadConfig } from "./config.js";
5
+ const CACHE_FILE = ".cmssy/field-types.json";
6
+ const CACHE_DURATION_MS = 24 * 60 * 60 * 1000; // 24 hours
7
+ // Fallback field types if backend is unreachable
8
+ const FALLBACK_FIELD_TYPES = [
9
+ {
10
+ type: "singleLine",
11
+ label: "Single Line Text",
12
+ description: "Short text input",
13
+ valueType: "string",
14
+ allowsDefaultValue: true,
15
+ supportsValidation: true,
16
+ },
17
+ {
18
+ type: "multiLine",
19
+ label: "Multi-line Text",
20
+ description: "Text area",
21
+ valueType: "string",
22
+ allowsDefaultValue: true,
23
+ supportsValidation: true,
24
+ },
25
+ {
26
+ type: "richText",
27
+ label: "Rich Text",
28
+ description: "WYSIWYG editor",
29
+ valueType: "string",
30
+ allowsDefaultValue: true,
31
+ supportsValidation: false,
32
+ },
33
+ {
34
+ type: "numeric",
35
+ label: "Numeric",
36
+ description: "Numeric input",
37
+ valueType: "number",
38
+ allowsDefaultValue: true,
39
+ supportsValidation: true,
40
+ },
41
+ {
42
+ type: "boolean",
43
+ label: "Boolean",
44
+ description: "True/false boolean",
45
+ valueType: "boolean",
46
+ allowsDefaultValue: true,
47
+ supportsValidation: false,
48
+ },
49
+ {
50
+ type: "date",
51
+ label: "Date",
52
+ description: "Date picker",
53
+ valueType: "string",
54
+ allowsDefaultValue: true,
55
+ supportsValidation: true,
56
+ },
57
+ {
58
+ type: "media",
59
+ label: "Media",
60
+ description: "Image/video upload",
61
+ valueType: "string",
62
+ allowsDefaultValue: true,
63
+ supportsValidation: false,
64
+ },
65
+ {
66
+ type: "link",
67
+ label: "Link",
68
+ description: "URL input",
69
+ valueType: "string",
70
+ allowsDefaultValue: true,
71
+ supportsValidation: true,
72
+ },
73
+ {
74
+ type: "select",
75
+ label: "Select",
76
+ description: "Dropdown selection",
77
+ valueType: "string",
78
+ allowsDefaultValue: true,
79
+ supportsValidation: true,
80
+ },
81
+ {
82
+ type: "multiselect",
83
+ label: "Multi-select",
84
+ description: "Multiple selection",
85
+ valueType: "string[]",
86
+ allowsDefaultValue: true,
87
+ supportsValidation: true,
88
+ },
89
+ {
90
+ type: "color",
91
+ label: "Color",
92
+ description: "Color picker",
93
+ valueType: "string",
94
+ allowsDefaultValue: true,
95
+ supportsValidation: false,
96
+ },
97
+ {
98
+ type: "slider",
99
+ label: "Slider",
100
+ description: "Range slider",
101
+ valueType: "number",
102
+ allowsDefaultValue: true,
103
+ supportsValidation: true,
104
+ },
105
+ {
106
+ type: "repeater",
107
+ label: "Repeater",
108
+ description: "Repeatable nested fields",
109
+ valueType: "Record<string, unknown>[]",
110
+ allowsDefaultValue: true,
111
+ supportsValidation: false,
112
+ },
113
+ {
114
+ type: "form",
115
+ label: "Form",
116
+ description: "Form picker",
117
+ valueType: "string",
118
+ allowsDefaultValue: true,
119
+ supportsValidation: false,
120
+ },
121
+ {
122
+ type: "emailTemplate",
123
+ label: "Email Template",
124
+ description: "Email template picker",
125
+ valueType: "string",
126
+ allowsDefaultValue: true,
127
+ supportsValidation: false,
128
+ },
129
+ {
130
+ type: "emailConfiguration",
131
+ label: "Email Configuration",
132
+ description: "Email configuration picker",
133
+ valueType: "string",
134
+ allowsDefaultValue: true,
135
+ supportsValidation: false,
136
+ },
137
+ ];
138
+ export async function getFieldTypes() {
139
+ // Check cache first
140
+ const cached = await loadCachedFieldTypes();
141
+ if (cached)
142
+ return cached;
143
+ // Try to fetch from backend via GraphQL if configured
144
+ if (hasConfig()) {
145
+ try {
146
+ const config = loadConfig();
147
+ const client = new GraphQLClient(config.apiUrl, {
148
+ headers: config.apiToken
149
+ ? { Authorization: `Bearer ${config.apiToken}` }
150
+ : {},
151
+ });
152
+ const query = `
153
+ query GetFieldTypes {
154
+ fieldTypes {
155
+ type
156
+ label
157
+ description
158
+ valueType
159
+ allowsDefaultValue
160
+ supportsValidation
161
+ }
162
+ }
163
+ `;
164
+ const data = await client.request(query);
165
+ const fieldTypes = data.fieldTypes;
166
+ await cacheFieldTypes(fieldTypes);
167
+ return fieldTypes;
168
+ }
169
+ catch (error) {
170
+ // Backend unreachable, use fallback
171
+ }
172
+ }
173
+ return FALLBACK_FIELD_TYPES;
174
+ }
175
+ async function loadCachedFieldTypes() {
176
+ const cachePath = path.join(process.cwd(), CACHE_FILE);
177
+ if (!fs.existsSync(cachePath))
178
+ return null;
179
+ try {
180
+ const cached = await fs.readJson(cachePath);
181
+ const age = Date.now() - cached.timestamp;
182
+ if (age < CACHE_DURATION_MS) {
183
+ return cached.fieldTypes;
184
+ }
185
+ }
186
+ catch {
187
+ // Invalid cache
188
+ }
189
+ return null;
190
+ }
191
+ async function cacheFieldTypes(fieldTypes) {
192
+ const cachePath = path.join(process.cwd(), CACHE_FILE);
193
+ fs.ensureDirSync(path.dirname(cachePath));
194
+ await fs.writeJson(cachePath, {
195
+ timestamp: Date.now(),
196
+ fieldTypes,
197
+ });
198
+ }
199
+ export function isValidFieldType(type, fieldTypes) {
200
+ return fieldTypes.some((ft) => ft.type === type);
201
+ }
202
+ //# sourceMappingURL=field-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-schema.js","sourceRoot":"","sources":["../../src/utils/field-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAYpD,MAAM,UAAU,GAAG,yBAAyB,CAAC;AAC7C,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AAE1D,iDAAiD;AACjD,MAAM,oBAAoB,GAA0B;IAClD;QACE,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,kBAAkB;QAC/B,SAAS,EAAE,QAAQ;QACnB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,IAAI;KACzB;IACD;QACE,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,WAAW;QACxB,SAAS,EAAE,QAAQ;QACnB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,IAAI;KACzB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,gBAAgB;QAC7B,SAAS,EAAE,QAAQ;QACnB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,KAAK;KAC1B;IACD;QACE,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,eAAe;QAC5B,SAAS,EAAE,QAAQ;QACnB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,IAAI;KACzB;IACD;QACE,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,SAAS;QACpB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,KAAK;KAC1B;IACD;QACE,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,QAAQ;QACnB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,IAAI;KACzB;IACD;QACE,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,QAAQ;QACnB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,KAAK;KAC1B;IACD;QACE,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,WAAW;QACxB,SAAS,EAAE,QAAQ;QACnB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,IAAI;KACzB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,QAAQ;QACnB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,IAAI;KACzB;IACD;QACE,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,UAAU;QACrB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,IAAI;KACzB;IACD;QACE,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,cAAc;QAC3B,SAAS,EAAE,QAAQ;QACnB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,KAAK;KAC1B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,cAAc;QAC3B,SAAS,EAAE,QAAQ;QACnB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,IAAI;KACzB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,0BAA0B;QACvC,SAAS,EAAE,2BAA2B;QACtC,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,KAAK;KAC1B;IACD;QACE,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,QAAQ;QACnB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,KAAK;KAC1B;IACD;QACE,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,uBAAuB;QACpC,SAAS,EAAE,QAAQ;QACnB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,KAAK;KAC1B;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,4BAA4B;QACzC,SAAS,EAAE,QAAQ;QACnB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,KAAK;KAC1B;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,oBAAoB;IACpB,MAAM,MAAM,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAC5C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,sDAAsD;IACtD,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE;gBAC9C,OAAO,EAAE,MAAM,CAAC,QAAQ;oBACtB,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,QAAQ,EAAE,EAAE;oBAChD,CAAC,CAAC,EAAE;aACP,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG;;;;;;;;;;;OAWb,CAAC;YAEF,MAAM,IAAI,GAAQ,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAmC,CAAC;YAC5D,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;YAClC,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oCAAoC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,oBAAoB;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;QAC1C,IAAI,GAAG,GAAG,iBAAiB,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC,UAAU,CAAC;QAC3B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,UAAiC;IAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IACvD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1C,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE;QAC5B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,UAAiC;IAEjC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { GraphQLClient } from "graphql-request";
2
+ export declare function createClient(): GraphQLClient;
3
+ export declare const PUBLISH_PACKAGE_MUTATION = "\n mutation PublishPackage($token: String!, $input: PublishPackageInput!) {\n publishPackage(token: $token, input: $input) {\n success\n message\n packageId\n status\n }\n }\n";
4
+ export declare const IMPORT_BLOCK_MUTATION = "\n mutation ImportBlock($input: ImportBlockInput!) {\n importBlock(input: $input) {\n id\n blockType\n name\n description\n icon\n category\n layoutSlot\n schemaFields {\n key\n type\n label\n defaultValue\n placeholder\n required\n helperText\n options\n minValue\n maxValue\n group\n showWhen {\n field\n equals\n notEquals\n notEmpty\n isEmpty\n }\n validation {\n minLength\n maxLength\n min\n max\n pattern\n message\n }\n }\n defaultContent\n requires {\n auth\n language\n workspace\n modules\n permissions\n features\n }\n version\n createdAt\n }\n }\n";
5
+ export declare const IMPORT_TEMPLATE_MUTATION = "\n mutation ImportTemplate($input: ImportTemplateInput!) {\n importTemplate(input: $input) {\n success\n block {\n id\n blockType\n name\n version\n }\n pagesCreated\n pagesUpdated\n layoutSlotsCreated\n layoutSlotsUpdated\n message\n }\n }\n";
6
+ export declare const ADD_BLOCK_SOURCE_CODE_MUTATION = "\n mutation AddBlockSourceCode($input: AddBlockSourceCodeInput!) {\n addBlockSourceCode(input: $input) {\n id\n blockType\n name\n sourceUrl\n sourceCssUrl\n dependenciesUrl\n }\n }\n";
7
+ export declare const GET_WORKSPACE_BLOCKS_QUERY = "\n query GetWorkspaceBlocks {\n workspaceBlocks {\n id\n blockType\n name\n sourceUrl\n }\n }\n";
8
+ //# sourceMappingURL=graphql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../src/utils/graphql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,wBAAgB,YAAY,IAAI,aAAa,CAe5C;AAGD,eAAO,MAAM,wBAAwB,gNASpC,CAAC;AAEF,eAAO,MAAM,qBAAqB,y3BAmDjC,CAAC;AAEF,eAAO,MAAM,wBAAwB,mUAiBpC,CAAC;AAEF,eAAO,MAAM,8BAA8B,kOAW1C,CAAC;AAEF,eAAO,MAAM,0BAA0B,gIAStC,CAAC"}