themebooth 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 (89) hide show
  1. package/README.md +172 -0
  2. package/dist/bin/themebooth.d.ts +3 -0
  3. package/dist/bin/themebooth.d.ts.map +1 -0
  4. package/dist/bin/themebooth.js +103 -0
  5. package/dist/bin/themebooth.js.map +1 -0
  6. package/dist/cli/init.d.ts +2 -0
  7. package/dist/cli/init.d.ts.map +1 -0
  8. package/dist/cli/init.js +433 -0
  9. package/dist/cli/init.js.map +1 -0
  10. package/dist/cli/package.d.ts +2 -0
  11. package/dist/cli/package.d.ts.map +1 -0
  12. package/dist/cli/package.js +194 -0
  13. package/dist/cli/package.js.map +1 -0
  14. package/dist/cli/preview.d.ts +2 -0
  15. package/dist/cli/preview.d.ts.map +1 -0
  16. package/dist/cli/preview.js +93 -0
  17. package/dist/cli/preview.js.map +1 -0
  18. package/dist/cli/publish.d.ts +2 -0
  19. package/dist/cli/publish.d.ts.map +1 -0
  20. package/dist/cli/publish.js +126 -0
  21. package/dist/cli/publish.js.map +1 -0
  22. package/dist/core/manifest.d.ts +44 -0
  23. package/dist/core/manifest.d.ts.map +1 -0
  24. package/dist/core/manifest.js +101 -0
  25. package/dist/core/manifest.js.map +1 -0
  26. package/dist/core/transpiler.d.ts +13 -0
  27. package/dist/core/transpiler.d.ts.map +1 -0
  28. package/dist/core/transpiler.js +139 -0
  29. package/dist/core/transpiler.js.map +1 -0
  30. package/dist/core/variables.d.ts +33 -0
  31. package/dist/core/variables.d.ts.map +1 -0
  32. package/dist/core/variables.js +155 -0
  33. package/dist/core/variables.js.map +1 -0
  34. package/dist/exporters/notepad-plus.d.ts +3 -0
  35. package/dist/exporters/notepad-plus.d.ts.map +1 -0
  36. package/dist/exporters/notepad-plus.js +90 -0
  37. package/dist/exporters/notepad-plus.js.map +1 -0
  38. package/dist/exporters/vscode.d.ts +11 -0
  39. package/dist/exporters/vscode.d.ts.map +1 -0
  40. package/dist/exporters/vscode.js +34 -0
  41. package/dist/exporters/vscode.js.map +1 -0
  42. package/dist/exporters/zed.d.ts +12 -0
  43. package/dist/exporters/zed.d.ts.map +1 -0
  44. package/dist/exporters/zed.js +48 -0
  45. package/dist/exporters/zed.js.map +1 -0
  46. package/dist/preview/renderer.d.ts +3 -0
  47. package/dist/preview/renderer.d.ts.map +1 -0
  48. package/dist/preview/renderer.js +257 -0
  49. package/dist/preview/renderer.js.map +1 -0
  50. package/dist/preview/server.d.ts +24 -0
  51. package/dist/preview/server.d.ts.map +1 -0
  52. package/dist/preview/server.js +166 -0
  53. package/dist/preview/server.js.map +1 -0
  54. package/dist/preview/watcher.d.ts +9 -0
  55. package/dist/preview/watcher.d.ts.map +1 -0
  56. package/dist/preview/watcher.js +81 -0
  57. package/dist/preview/watcher.js.map +1 -0
  58. package/dist/publish/notepad-plus.d.ts +2 -0
  59. package/dist/publish/notepad-plus.d.ts.map +1 -0
  60. package/dist/publish/notepad-plus.js +151 -0
  61. package/dist/publish/notepad-plus.js.map +1 -0
  62. package/dist/publish/vscode.d.ts +2 -0
  63. package/dist/publish/vscode.d.ts.map +1 -0
  64. package/dist/publish/vscode.js +144 -0
  65. package/dist/publish/vscode.js.map +1 -0
  66. package/dist/publish/zed.d.ts +2 -0
  67. package/dist/publish/zed.d.ts.map +1 -0
  68. package/dist/publish/zed.js +137 -0
  69. package/dist/publish/zed.js.map +1 -0
  70. package/dist/templates/presets/dark.json +53 -0
  71. package/dist/templates/presets/high-contrast.json +54 -0
  72. package/dist/templates/presets/light.json +53 -0
  73. package/dist/utils/logger.d.ts +18 -0
  74. package/dist/utils/logger.d.ts.map +1 -0
  75. package/dist/utils/logger.js +56 -0
  76. package/dist/utils/logger.js.map +1 -0
  77. package/dist/utils/paths.d.ts +32 -0
  78. package/dist/utils/paths.d.ts.map +1 -0
  79. package/dist/utils/paths.js +111 -0
  80. package/dist/utils/paths.js.map +1 -0
  81. package/dist/utils/schema.d.ts +17 -0
  82. package/dist/utils/schema.d.ts.map +1 -0
  83. package/dist/utils/schema.js +80 -0
  84. package/dist/utils/schema.js.map +1 -0
  85. package/dist/utils/validation.d.ts +59 -0
  86. package/dist/utils/validation.d.ts.map +1 -0
  87. package/dist/utils/validation.js +323 -0
  88. package/dist/utils/validation.js.map +1 -0
  89. package/package.json +59 -0
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.previewCommand = previewCommand;
4
+ const child_process_1 = require("child_process");
5
+ const logger_1 = require("../utils/logger");
6
+ const paths_1 = require("../utils/paths");
7
+ const server_1 = require("../preview/server");
8
+ const validation_1 = require("../utils/validation");
9
+ async function previewCommand() {
10
+ try {
11
+ const themeDir = process.cwd();
12
+ const paths = (0, paths_1.getThemeProjectPaths)(themeDir);
13
+ // Check manifest exists
14
+ const exists = await (0, paths_1.manifestExists)(paths.manifest);
15
+ if (!exists) {
16
+ logger_1.logger.error("No manifest.json found in current directory");
17
+ logger_1.logger.info("Run 'themebooth init' to create a theme project");
18
+ throw new Error("Manifest not found");
19
+ }
20
+ // Validate manifest syntax (live validation of logic happens in server)
21
+ logger_1.logger.info("Validating manifest.json...");
22
+ const validation = await (0, validation_1.validateManifestComprehensive)(paths.manifest);
23
+ if (!validation.isValid) {
24
+ logger_1.logger.error("Manifest has errors:");
25
+ for (const err of validation.errors) {
26
+ const locationStr = err.line ? ` (line ${err.line}${err.column ? `, col ${err.column}` : ""})` : "";
27
+ logger_1.logger.error(` • ${err.field}${locationStr}: ${err.message}`);
28
+ if (err.suggestion) {
29
+ logger_1.logger.info(` → ${err.suggestion}`);
30
+ }
31
+ }
32
+ throw new Error("Invalid manifest");
33
+ }
34
+ const themeName = validation.manifest?.name || "Unknown Theme";
35
+ // Start server
36
+ const server = new server_1.PreviewServer({
37
+ manifestPath: paths.manifest,
38
+ previewPath: paths.preview,
39
+ themeName,
40
+ });
41
+ await server.start();
42
+ const port = server.getPort();
43
+ const previewUrl = `http://localhost:${port}`;
44
+ logger_1.logger.info("");
45
+ logger_1.logger.info("✨ Live preview ready!");
46
+ logger_1.logger.info(`📝 Edit manifest.json to see changes`);
47
+ logger_1.logger.info(`💾 Changes reload automatically`);
48
+ logger_1.logger.info(`🌐 Opening browser...`);
49
+ logger_1.logger.info("");
50
+ logger_1.logger.info(`Press Ctrl+C to stop the server`);
51
+ // Try to open browser
52
+ openBrowser(previewUrl).catch(() => {
53
+ logger_1.logger.info(`Open in browser: ${previewUrl}`);
54
+ });
55
+ // Handle graceful shutdown
56
+ process.on("SIGINT", async () => {
57
+ logger_1.logger.info("\nShutting down preview server...");
58
+ await server.stop();
59
+ process.exit(0);
60
+ });
61
+ process.on("SIGTERM", async () => {
62
+ await server.stop();
63
+ process.exit(0);
64
+ });
65
+ }
66
+ catch (error) {
67
+ logger_1.logger.error(`Failed to start preview: ${error instanceof Error ? error.message : String(error)}`);
68
+ throw error;
69
+ }
70
+ }
71
+ function openBrowser(url) {
72
+ return new Promise((resolve, reject) => {
73
+ let cmd;
74
+ if (process.platform === "darwin") {
75
+ cmd = `open "${url}"`;
76
+ }
77
+ else if (process.platform === "win32") {
78
+ cmd = `start "${url}"`;
79
+ }
80
+ else {
81
+ cmd = `xdg-open "${url}"`;
82
+ }
83
+ (0, child_process_1.exec)(cmd, (error) => {
84
+ if (error) {
85
+ reject(error);
86
+ }
87
+ else {
88
+ resolve();
89
+ }
90
+ });
91
+ });
92
+ }
93
+ //# sourceMappingURL=preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/cli/preview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function publishCommand(platform?: string): Promise<void>;
2
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/cli/publish.ts"],"names":[],"mappings":"AAUA,wBAAsB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFrE"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.publishCommand = publishCommand;
37
+ const path = __importStar(require("path"));
38
+ const fs = __importStar(require("fs/promises"));
39
+ const logger_1 = require("../utils/logger");
40
+ const paths_1 = require("../utils/paths");
41
+ const validation_1 = require("../utils/validation");
42
+ const vscode_1 = require("../publish/vscode");
43
+ const zed_1 = require("../publish/zed");
44
+ const notepad_plus_1 = require("../publish/notepad-plus");
45
+ async function publishCommand(platform) {
46
+ try {
47
+ const themeDir = process.cwd();
48
+ const paths = (0, paths_1.getThemeProjectPaths)(themeDir);
49
+ // Check manifest exists
50
+ const exists = await (0, paths_1.manifestExists)(paths.manifest);
51
+ if (!exists) {
52
+ logger_1.logger.error("No manifest.json found in current directory");
53
+ throw new Error("Manifest not found. Run 'themebooth init' first.");
54
+ }
55
+ // Validate manifest comprehensively
56
+ logger_1.logger.info("Validating manifest.json...");
57
+ const validation = await (0, validation_1.validateManifestComprehensive)(paths.manifest);
58
+ if (!validation.isValid) {
59
+ logger_1.logger.error("Manifest validation failed:");
60
+ for (const err of validation.errors) {
61
+ const locationStr = err.line ? ` (line ${err.line}${err.column ? `, col ${err.column}` : ""})` : "";
62
+ logger_1.logger.error(` • ${err.field}${locationStr}: ${err.message}`);
63
+ if (err.suggestion) {
64
+ logger_1.logger.info(` → ${err.suggestion}`);
65
+ }
66
+ }
67
+ throw new Error("Invalid manifest");
68
+ }
69
+ if (!validation.manifest) {
70
+ throw new Error("Failed to load validated manifest");
71
+ }
72
+ const manifest = validation.manifest;
73
+ // Check if package exists
74
+ const packageDir = path.join(paths.output, manifest.name);
75
+ try {
76
+ const files = await fs.readdir(packageDir);
77
+ if (files.length === 0) {
78
+ logger_1.logger.error(`Theme package directory is empty at ${packageDir}`);
79
+ logger_1.logger.info("Run 'themebooth package' to generate theme files");
80
+ throw new Error("Package not found");
81
+ }
82
+ }
83
+ catch (error) {
84
+ if (error?.code === "ENOENT") {
85
+ logger_1.logger.error(`Theme package not found at ${packageDir}`);
86
+ logger_1.logger.info("Run 'themebooth package' to generate theme files");
87
+ throw new Error("Package not found");
88
+ }
89
+ throw error;
90
+ }
91
+ // Route to platform publisher
92
+ const platformLower = (platform || "").toLowerCase();
93
+ if (platformLower === "vscode" || platformLower === "vs-code") {
94
+ await (0, vscode_1.handleVSCodePublish)(packageDir, manifest.name);
95
+ }
96
+ else if (platformLower === "notepad++" || platformLower === "notepad-plus" || platformLower === "notepadplusplus") {
97
+ await (0, notepad_plus_1.handleNotepadPublish)(packageDir, manifest.name, manifest);
98
+ }
99
+ else if (platformLower === "zed") {
100
+ await (0, zed_1.handleZedPublish)(packageDir, manifest.name, manifest);
101
+ }
102
+ else {
103
+ if (!platform) {
104
+ logger_1.logger.error("Platform required");
105
+ }
106
+ else {
107
+ logger_1.logger.error(`Unknown platform: ${platform}`);
108
+ }
109
+ logger_1.logger.info("");
110
+ logger_1.logger.info("Available platforms:");
111
+ logger_1.logger.info(" • vscode - VS Code Marketplace");
112
+ logger_1.logger.info(" • notepad++ - Notepad++ Package Control");
113
+ logger_1.logger.info(" • zed - Zed Registry");
114
+ logger_1.logger.info("");
115
+ logger_1.logger.info("Usage: themebooth publish <platform>");
116
+ throw new Error("Invalid platform");
117
+ }
118
+ logger_1.logger.info("");
119
+ logger_1.logger.success("Next steps: Follow the instructions above to publish your theme");
120
+ }
121
+ catch (error) {
122
+ logger_1.logger.error(`Failed to publish theme: ${error instanceof Error ? error.message : String(error)}`);
123
+ throw error;
124
+ }
125
+ }
126
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/cli/publish.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,wCAkFC;AA5FD,2CAA6B;AAC7B,gDAAkC;AAClC,4CAAyC;AACzC,0CAAoF;AAEpF,oDAAoE;AACpE,8CAAwD;AACxD,wCAAkD;AAClD,0DAA+D;AAExD,KAAK,UAAU,cAAc,CAAC,QAAiB;IACpD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAA,4BAAoB,EAAC,QAAQ,CAAC,CAAC;QAE7C,wBAAwB;QACxB,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAc,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,eAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,oCAAoC;QACpC,eAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,MAAM,IAAA,0CAA6B,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,eAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC5C,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACpC,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpG,eAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,GAAG,WAAW,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/D,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;oBACnB,eAAM,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;QAErC,0BAA0B;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,eAAM,CAAC,KAAK,CAAC,uCAAuC,UAAU,EAAE,CAAC,CAAC;gBAClE,eAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;gBAChE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,eAAM,CAAC,KAAK,CAAC,8BAA8B,UAAU,EAAE,CAAC,CAAC;gBACzD,eAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;gBAChE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,8BAA8B;QAC9B,MAAM,aAAa,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAErD,IAAI,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAC9D,MAAM,IAAA,4BAAmB,EAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;aAAM,IAAI,aAAa,KAAK,WAAW,IAAI,aAAa,KAAK,cAAc,IAAI,aAAa,KAAK,iBAAiB,EAAE,CAAC;YACpH,MAAM,IAAA,mCAAoB,EAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;YACnC,MAAM,IAAA,sBAAgB,EAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,eAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,eAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACpC,eAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACrD,eAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAC3D,eAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC9C,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QAED,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAM,CAAC,OAAO,CAAC,iEAAiE,CAAC,CAAC;IACpF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAM,CAAC,KAAK,CAAC,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnG,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { z } from "zod";
2
+ export declare const ManifestSchema: z.ZodObject<{
3
+ name: z.ZodString;
4
+ description: z.ZodDefault<z.ZodOptional<z.ZodString>>;
5
+ author: z.ZodString;
6
+ version: z.ZodString;
7
+ variables: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
8
+ colors: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>, Record<string, string>, Record<string, string> | undefined>;
9
+ tokens: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodString, z.ZodNumber]>>, Record<string, string | number>, Record<string, string | number>>>>>, Record<string, Record<string, string | number>>, Record<string, Record<string, string | number>> | undefined>;
10
+ presets: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodEnum<["dark", "light", "high-contrast"]>, "many">>>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ name: string;
13
+ description: string;
14
+ author: string;
15
+ version: string;
16
+ variables: Record<string, string>;
17
+ colors: Record<string, string>;
18
+ tokens: Record<string, Record<string, string | number>>;
19
+ presets: ("dark" | "light" | "high-contrast")[];
20
+ }, {
21
+ name: string;
22
+ author: string;
23
+ version: string;
24
+ description?: string | undefined;
25
+ variables?: Record<string, string> | undefined;
26
+ colors?: Record<string, string> | undefined;
27
+ tokens?: Record<string, Record<string, string | number>> | undefined;
28
+ presets?: ("dark" | "light" | "high-contrast")[] | undefined;
29
+ }>;
30
+ export type Manifest = z.infer<typeof ManifestSchema>;
31
+ export interface ValidationError {
32
+ field: string;
33
+ message: string;
34
+ line?: number;
35
+ }
36
+ export declare function validateManifest(data: unknown): {
37
+ success: true;
38
+ data: Manifest;
39
+ } | {
40
+ success: false;
41
+ errors: ValidationError[];
42
+ };
43
+ export declare function formatValidationErrors(errors: ValidationError[]): string;
44
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/core/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0BxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4DzB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAiBjI;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAIxE"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ManifestSchema = void 0;
4
+ exports.validateManifest = validateManifest;
5
+ exports.formatValidationErrors = formatValidationErrors;
6
+ const zod_1 = require("zod");
7
+ const HexColorRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;
8
+ const ColorOrVariableRegex = /^(#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})|\$\w+)$/;
9
+ const hexColorSchema = zod_1.z
10
+ .string()
11
+ .regex(HexColorRegex, "Invalid hex color format. Use #RRGGBB or #RGB");
12
+ const colorOrVariableSchema = zod_1.z
13
+ .string()
14
+ .regex(ColorOrVariableRegex, "Invalid color format. Use #RRGGBB, #RGB, or $variableName");
15
+ const validTokenProperties = ["foreground", "background", "fontStyle", "fontWeight", "opacity"];
16
+ const tokenSettingsSchema = zod_1.z
17
+ .record(zod_1.z.union([hexColorSchema, zod_1.z.string(), zod_1.z.number()]))
18
+ .refine((settings) => {
19
+ return Object.keys(settings).every((key) => validTokenProperties.includes(key));
20
+ }, (settings) => ({
21
+ message: `Invalid token properties. Valid properties: ${validTokenProperties.join(", ")}. Got: ${Object.keys(settings).join(", ")}`,
22
+ }));
23
+ exports.ManifestSchema = zod_1.z.object({
24
+ name: zod_1.z.string().min(1, "Theme name is required"),
25
+ description: zod_1.z.string().optional().default(""),
26
+ author: zod_1.z.string().min(1, "Author is required"),
27
+ version: zod_1.z.string().regex(/^\d+\.\d+\.\d+/, "Version must follow semver (e.g., 1.0.0)"),
28
+ variables: zod_1.z.record(colorOrVariableSchema).optional().default({}),
29
+ colors: zod_1.z
30
+ .record(zod_1.z.string())
31
+ .optional()
32
+ .default({})
33
+ .superRefine((colors, ctx) => {
34
+ Object.entries(colors).forEach(([key, value]) => {
35
+ if (typeof value !== "string") {
36
+ ctx.addIssue({
37
+ code: zod_1.z.ZodIssueCode.invalid_type,
38
+ expected: "string",
39
+ received: typeof value,
40
+ path: [key],
41
+ message: "Color value must be a string",
42
+ });
43
+ return;
44
+ }
45
+ if (!value.startsWith("$") && !HexColorRegex.test(value)) {
46
+ ctx.addIssue({
47
+ code: zod_1.z.ZodIssueCode.custom,
48
+ path: [key],
49
+ message: `Invalid color value "${value}". Use #RRGGBB, #RGB, or $variableName`,
50
+ });
51
+ }
52
+ });
53
+ }),
54
+ tokens: zod_1.z
55
+ .record(tokenSettingsSchema)
56
+ .optional()
57
+ .default({})
58
+ .superRefine((tokens, ctx) => {
59
+ Object.entries(tokens).forEach(([scope, settings]) => {
60
+ Object.entries(settings).forEach(([prop, value]) => {
61
+ if (prop === "foreground" ||
62
+ prop === "background") {
63
+ const strVal = String(value);
64
+ if (!strVal.startsWith("$") && !HexColorRegex.test(strVal)) {
65
+ ctx.addIssue({
66
+ code: zod_1.z.ZodIssueCode.custom,
67
+ path: [scope, prop],
68
+ message: `Invalid color value "${value}" for ${prop}`,
69
+ });
70
+ }
71
+ }
72
+ });
73
+ });
74
+ }),
75
+ presets: zod_1.z.array(zod_1.z.enum(["dark", "light", "high-contrast"])).optional().default([]),
76
+ });
77
+ function validateManifest(data) {
78
+ try {
79
+ const result = exports.ManifestSchema.parse(data);
80
+ return { success: true, data: result };
81
+ }
82
+ catch (error) {
83
+ if (error instanceof zod_1.z.ZodError) {
84
+ const errors = error.issues.map((issue) => ({
85
+ field: issue.path.join(".") || "root",
86
+ message: issue.message,
87
+ }));
88
+ return { success: false, errors };
89
+ }
90
+ return {
91
+ success: false,
92
+ errors: [{ field: "unknown", message: String(error) }],
93
+ };
94
+ }
95
+ }
96
+ function formatValidationErrors(errors) {
97
+ return errors
98
+ .map((err) => ` • ${err.field}: ${err.message}`)
99
+ .join("\n");
100
+ }
101
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/core/manifest.ts"],"names":[],"mappings":";;;AAgGA,4CAiBC;AAED,wDAIC;AAvHD,6BAAwB;AAExB,MAAM,aAAa,GAAG,oCAAoC,CAAC;AAC3D,MAAM,oBAAoB,GAAG,4CAA4C,CAAC;AAE1E,MAAM,cAAc,GAAG,OAAC;KACrB,MAAM,EAAE;KACR,KAAK,CAAC,aAAa,EAAE,+CAA+C,CAAC,CAAC;AAEzE,MAAM,qBAAqB,GAAG,OAAC;KAC5B,MAAM,EAAE;KACR,KAAK,CAAC,oBAAoB,EAAE,2DAA2D,CAAC,CAAC;AAE5F,MAAM,oBAAoB,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,CAAU,CAAC;AAEzG,MAAM,mBAAmB,GAAG,OAAC;KAC1B,MAAM,CAAC,OAAC,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;KACzD,MAAM,CACL,CAAC,QAAQ,EAAE,EAAE;IACX,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC,GAAU,CAAC,CAAC,CAAC;AACzF,CAAC,EACD,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACb,OAAO,EAAE,+CAA+C,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;CACpI,CAAC,CACH,CAAC;AAES,QAAA,cAAc,GAAG,OAAC,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC;IACjD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9C,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC;IAC/C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,0CAA0C,CAAC;IAEvF,SAAS,EAAE,OAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAEjE,MAAM,EAAE,OAAC;SACN,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC;SAClB,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,WAAW,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,GAAG,CAAC,QAAQ,CAAC;oBACX,IAAI,EAAE,OAAC,CAAC,YAAY,CAAC,YAAY;oBACjC,QAAQ,EAAE,QAAQ;oBAClB,QAAQ,EAAE,OAAO,KAAK;oBACtB,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,OAAO,EAAE,8BAA8B;iBACxC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,QAAQ,CAAC;oBACX,IAAI,EAAE,OAAC,CAAC,YAAY,CAAC,MAAM;oBAC3B,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,OAAO,EAAE,wBAAwB,KAAK,wCAAwC;iBAC/E,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEJ,MAAM,EAAE,OAAC;SACN,MAAM,CAAC,mBAAmB,CAAC;SAC3B,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,WAAW,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE;YACnD,MAAM,CAAC,OAAO,CAAC,QAAmC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC5E,IACE,IAAI,KAAK,YAAY;oBACrB,IAAI,KAAK,YAAY,EACrB,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC7B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC3D,GAAG,CAAC,QAAQ,CAAC;4BACX,IAAI,EAAE,OAAC,CAAC,YAAY,CAAC,MAAM;4BAC3B,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;4BACnB,OAAO,EAAE,wBAAwB,KAAK,SAAS,IAAI,EAAE;yBACtD,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEJ,OAAO,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACpF,CAAC,CAAC;AAUH,SAAgB,gBAAgB,CAAC,IAAa;IAC5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,sBAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,OAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,MAAM,GAAsB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC7D,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM;gBACrC,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC,CAAC;YACJ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACpC,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;SACvD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,sBAAsB,CAAC,MAAyB;IAC9D,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;SAChD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Manifest } from "./manifest";
2
+ export interface TranspilationResult {
3
+ success: boolean;
4
+ platform: string;
5
+ path?: string;
6
+ error?: string;
7
+ }
8
+ export interface TranspilationResults {
9
+ manifest: Manifest;
10
+ results: TranspilationResult[];
11
+ }
12
+ export declare function transpileTheme(manifestPath: string, outputDir: string): Promise<TranspilationResults>;
13
+ //# sourceMappingURL=transpiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transpiler.d.ts","sourceRoot":"","sources":["../../src/core/transpiler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAOxD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,wBAAsB,cAAc,CAClC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,oBAAoB,CAAC,CAsG/B"}
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.transpileTheme = transpileTheme;
37
+ const fs = __importStar(require("fs/promises"));
38
+ const path = __importStar(require("path"));
39
+ const manifest_1 = require("./manifest");
40
+ const variables_1 = require("./variables");
41
+ const vscode_1 = require("../exporters/vscode");
42
+ const notepad_plus_1 = require("../exporters/notepad-plus");
43
+ const zed_1 = require("../exporters/zed");
44
+ async function transpileTheme(manifestPath, outputDir) {
45
+ // Read and parse manifest
46
+ const manifestContent = await fs.readFile(manifestPath, "utf-8");
47
+ let manifestData;
48
+ try {
49
+ manifestData = JSON.parse(manifestContent);
50
+ }
51
+ catch (error) {
52
+ throw new Error(`Invalid JSON in manifest: ${error instanceof Error ? error.message : String(error)}`);
53
+ }
54
+ // Validate manifest
55
+ const validation = (0, manifest_1.validateManifest)(manifestData);
56
+ if (!validation.success) {
57
+ const errors = validation.errors.map((e) => `${e.field}: ${e.message}`).join("\n");
58
+ throw new Error(`Manifest validation failed:\n${errors}`);
59
+ }
60
+ const manifest = validation.data;
61
+ // Validate variable references
62
+ const varRefErrors = (0, variables_1.validateVariableReferences)(manifest);
63
+ if (varRefErrors.length > 0) {
64
+ const errors = varRefErrors.map((e) => `${e.location}: ${e.message}`).join("\n");
65
+ throw new Error(`Variable validation failed:\n${errors}`);
66
+ }
67
+ // Resolve variables
68
+ const variableResolution = (0, variables_1.resolveVariables)(manifest);
69
+ if (!variableResolution.success) {
70
+ throw new Error(`Variable resolution failed: ${variableResolution.error.message}`);
71
+ }
72
+ // Interpolate manifest
73
+ const interpolated = (0, variables_1.interpolateManifest)(manifest, variableResolution.variables);
74
+ // Create output directory
75
+ await fs.mkdir(outputDir, { recursive: true });
76
+ const results = [];
77
+ // Export to VS Code
78
+ try {
79
+ const vscodeTheme = (0, vscode_1.exportVSCode)(interpolated);
80
+ const vscodeOutputPath = path.join(outputDir, `${manifest.name}.json`);
81
+ await fs.writeFile(vscodeOutputPath, JSON.stringify(vscodeTheme, null, 2), "utf-8");
82
+ results.push({
83
+ success: true,
84
+ platform: "VS Code",
85
+ path: vscodeOutputPath,
86
+ });
87
+ }
88
+ catch (error) {
89
+ results.push({
90
+ success: false,
91
+ platform: "VS Code",
92
+ error: error instanceof Error ? error.message : String(error),
93
+ });
94
+ }
95
+ // Export to Notepad++
96
+ try {
97
+ const notepadXml = (0, notepad_plus_1.exportNotepadPlus)(interpolated);
98
+ const notepadOutputPath = path.join(outputDir, `${manifest.name}.xml`);
99
+ await fs.writeFile(notepadOutputPath, notepadXml, "utf-8");
100
+ results.push({
101
+ success: true,
102
+ platform: "Notepad++",
103
+ path: notepadOutputPath,
104
+ });
105
+ }
106
+ catch (error) {
107
+ results.push({
108
+ success: false,
109
+ platform: "Notepad++",
110
+ error: error instanceof Error ? error.message : String(error),
111
+ });
112
+ }
113
+ // Export to Zed
114
+ try {
115
+ const zedTheme = (0, zed_1.exportZed)(interpolated);
116
+ const zedOutputPath = path.join(outputDir, `zed-${manifest.name}.json`);
117
+ await fs.writeFile(zedOutputPath, JSON.stringify(zedTheme, null, 2), "utf-8");
118
+ results.push({
119
+ success: true,
120
+ platform: "Zed",
121
+ path: zedOutputPath,
122
+ });
123
+ }
124
+ catch (error) {
125
+ results.push({
126
+ success: false,
127
+ platform: "Zed",
128
+ error: error instanceof Error ? error.message : String(error),
129
+ });
130
+ }
131
+ // Copy manifest to output
132
+ const manifestOutputPath = path.join(outputDir, "manifest.json");
133
+ await fs.writeFile(manifestOutputPath, JSON.stringify(interpolated, null, 2), "utf-8");
134
+ return {
135
+ manifest: interpolated,
136
+ results,
137
+ };
138
+ }
139
+ //# sourceMappingURL=transpiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transpiler.js","sourceRoot":"","sources":["../../src/core/transpiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { Manifest } from "./manifest";
2
+ export interface VariableResolutionError {
3
+ variable: string;
4
+ reason: "undefined" | "circular";
5
+ chain?: string[];
6
+ message: string;
7
+ }
8
+ export type ResolutionResult = {
9
+ success: true;
10
+ variables: Record<string, string>;
11
+ } | {
12
+ success: false;
13
+ error: VariableResolutionError;
14
+ };
15
+ /**
16
+ * Resolves all variable references in manifest.
17
+ * Detects circular dependencies and undefined variables.
18
+ */
19
+ export declare function resolveVariables(manifest: Manifest): ResolutionResult;
20
+ /**
21
+ * Replaces all $variableName references in colors and tokens with resolved values.
22
+ */
23
+ export declare function interpolateManifest(manifest: Manifest, resolvedVariables: Record<string, string>): Manifest;
24
+ /**
25
+ * Validates that all $variableName references point to existing variables.
26
+ */
27
+ export declare function validateVariableReferences(manifest: Manifest): ValidationError[];
28
+ export interface ValidationError {
29
+ location: string;
30
+ variable: string;
31
+ message: string;
32
+ }
33
+ //# sourceMappingURL=variables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../src/core/variables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,GAAG,UAAU,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,GACxB;IACE,OAAO,EAAE,IAAI,CAAC;IACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,GACD;IACE,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,uBAAuB,CAAC;CAChC,CAAC;AAEN;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,gBAAgB,CAarE;AA+DD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,QAAQ,CAMV;AAqCD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,EAAE,CAuChF;AAYD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB"}