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,137 @@
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.handleZedPublish = handleZedPublish;
37
+ const fs = __importStar(require("fs/promises"));
38
+ const path = __importStar(require("path"));
39
+ const readline = __importStar(require("readline"));
40
+ const logger_1 = require("../utils/logger");
41
+ async function promptForCredentials() {
42
+ const rl = readline.createInterface({
43
+ input: process.stdin,
44
+ output: process.stdout,
45
+ });
46
+ return new Promise((resolve) => {
47
+ rl.question("\n👤 Zed username: ", (username) => {
48
+ rl.question("🔑 Zed API token (from https://zed.dev/account): ", (token) => {
49
+ rl.close();
50
+ resolve({ username: username.trim(), token: token.trim() });
51
+ });
52
+ });
53
+ });
54
+ }
55
+ async function publishToZedRegistry(themeData, username, token) {
56
+ try {
57
+ // Build Zed API endpoint
58
+ const endpoint = `https://zed.dev/api/themes`;
59
+ // Prepare request
60
+ const body = JSON.stringify(themeData);
61
+ const authHeader = Buffer.from(`${username}:${token}`).toString("base64");
62
+ // Make POST request using native fetch
63
+ const response = await fetch(endpoint, {
64
+ method: "POST",
65
+ headers: {
66
+ "Content-Type": "application/json",
67
+ Authorization: `Basic ${authHeader}`,
68
+ },
69
+ body,
70
+ });
71
+ if (!response.ok) {
72
+ const errorText = await response.text();
73
+ if (response.status === 401) {
74
+ throw new Error("Invalid Zed credentials");
75
+ }
76
+ if (response.status === 409) {
77
+ throw new Error("Theme already exists. Update version and try again.");
78
+ }
79
+ throw new Error(`Zed API error (${response.status}): ${errorText}`);
80
+ }
81
+ const result = await response.json();
82
+ const themeId = result.id || themeData.id;
83
+ return {
84
+ success: true,
85
+ themeId,
86
+ registryUrl: `https://zed.dev/extensions/themes/${username}/${themeData.id}`,
87
+ };
88
+ }
89
+ catch (error) {
90
+ if (error instanceof Error) {
91
+ throw error;
92
+ }
93
+ throw new Error(`Failed to publish to Zed: ${error}`);
94
+ }
95
+ }
96
+ async function handleZedPublish(themePackagePath, themeName, manifest) {
97
+ logger_1.logger.title("Zed Theme Registry Publishing");
98
+ logger_1.logger.info("");
99
+ // Find theme file
100
+ const themeFile = path.join(themePackagePath, `zed-${themeName}.json`);
101
+ try {
102
+ await fs.access(themeFile);
103
+ }
104
+ catch {
105
+ throw new Error(`Zed theme file not found: ${themeFile}`);
106
+ }
107
+ // Read theme data
108
+ const themeContent = JSON.parse(await fs.readFile(themeFile, "utf-8"));
109
+ logger_1.logger.info("ℹ Publishing to Zed Theme Registry");
110
+ logger_1.logger.info(` Theme: ${themeName}`);
111
+ logger_1.logger.info(` Author: ${manifest.author || "unknown"}`);
112
+ logger_1.logger.info("");
113
+ logger_1.logger.info("Get your API token at: https://zed.dev/account");
114
+ logger_1.logger.info("");
115
+ // Get credentials
116
+ const { username, token } = await promptForCredentials();
117
+ if (!username || !token) {
118
+ throw new Error("Zed credentials required");
119
+ }
120
+ // Prepare payload
121
+ const payload = {
122
+ id: themeName,
123
+ name: manifest.name || themeName,
124
+ description: manifest.description || "A custom theme",
125
+ author: manifest.author || "Unknown",
126
+ version: manifest.version || "1.0.0",
127
+ theme: themeContent,
128
+ };
129
+ // Publish
130
+ logger_1.logger.info("📦 Publishing to Zed registry...");
131
+ const result = await publishToZedRegistry(payload, username, token);
132
+ logger_1.logger.success("");
133
+ logger_1.logger.success("✓ Published to Zed Theme Registry!");
134
+ logger_1.logger.success(`Registry URL: ${result.registryUrl}`);
135
+ logger_1.logger.success(`Theme ID: ${result.themeId}`);
136
+ }
137
+ //# sourceMappingURL=zed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zed.js","sourceRoot":"","sources":["../../src/publish/zed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ {
2
+ "$schema": "https://themebooth.dev/schema/manifest.json",
3
+ "name": "Dark Theme",
4
+ "description": "A beautiful dark syntax theme with cool blues and high contrast",
5
+ "author": "Your Name",
6
+ "version": "1.0.0",
7
+ "_comments": {
8
+ "design": "Professional dark theme optimized for extended coding sessions",
9
+ "background": "#1e1e1e (dark gray) for reduced eye strain",
10
+ "contrast_tested": "WCAG AAA for foreground/background (#d4d4d4 on #1e1e1e = 13:1 ratio)",
11
+ "token_colors": "Cool blue accent (#569cd6) for keywords, warm orange (#ce9178) for strings"
12
+ },
13
+ "variables": {
14
+ "background": "#1e1e1e",
15
+ "foreground": "#d4d4d4",
16
+ "accent": "#007acc",
17
+ "keyword": "#569cd6",
18
+ "string": "#ce9178",
19
+ "comment": "#6a9955",
20
+ "number": "#b5cea8",
21
+ "builtin": "#4ec9b0",
22
+ "error": "#f48771"
23
+ },
24
+ "colors": {
25
+ "editor.background": "$background",
26
+ "editor.foreground": "$foreground",
27
+ "editor.lineNumberActiveForeground": "$accent",
28
+ "editor.selectionBackground": "#264f78",
29
+ "editor.wordHighlightBackground": "#575757",
30
+ "editorCursor.foreground": "$accent",
31
+ "editorWhitespace.foreground": "#464646"
32
+ },
33
+ "tokens": {
34
+ "keyword": {
35
+ "foreground": "$keyword",
36
+ "fontStyle": "bold"
37
+ },
38
+ "string": {
39
+ "foreground": "$string"
40
+ },
41
+ "comment": {
42
+ "foreground": "$comment",
43
+ "fontStyle": "italic"
44
+ },
45
+ "number": {
46
+ "foreground": "$number"
47
+ },
48
+ "constant.builtin": {
49
+ "foreground": "$builtin"
50
+ }
51
+ },
52
+ "presets": []
53
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "$schema": "https://themebooth.dev/schema/manifest.json",
3
+ "name": "High Contrast Theme",
4
+ "description": "Accessibility-focused theme with maximum contrast ratios for visual impairment",
5
+ "author": "Your Name",
6
+ "version": "1.0.0",
7
+ "_comments": {
8
+ "design": "High contrast theme for users with low vision or color blindness",
9
+ "background": "#000000 (black) with #ffffff (white) text for perfect 21:1 contrast",
10
+ "contrast_tested": "WCAG AAA extreme - all text on background meets 7:1 minimum, most reach 10:1+",
11
+ "token_colors": "Bright saturated colors (#00ffff cyan, #00ff00 lime, #ffff00 yellow) for clear token distinction",
12
+ "note": "Designed for accessibility but still visually distinct tokens for syntax highlighting"
13
+ },
14
+ "variables": {
15
+ "background": "#000000",
16
+ "foreground": "#ffffff",
17
+ "accent": "#ffff00",
18
+ "keyword": "#00ffff",
19
+ "string": "#00ff00",
20
+ "comment": "#cccccc",
21
+ "number": "#ff00ff",
22
+ "builtin": "#ffff00",
23
+ "error": "#ff0000"
24
+ },
25
+ "colors": {
26
+ "editor.background": "$background",
27
+ "editor.foreground": "$foreground",
28
+ "editor.lineNumberActiveForeground": "$accent",
29
+ "editor.selectionBackground": "#0066cc",
30
+ "editor.wordHighlightBackground": "#663300",
31
+ "editorCursor.foreground": "$accent",
32
+ "editorWhitespace.foreground": "#666666"
33
+ },
34
+ "tokens": {
35
+ "keyword": {
36
+ "foreground": "$keyword",
37
+ "fontStyle": "bold"
38
+ },
39
+ "string": {
40
+ "foreground": "$string"
41
+ },
42
+ "comment": {
43
+ "foreground": "$comment",
44
+ "fontStyle": "italic"
45
+ },
46
+ "number": {
47
+ "foreground": "$number"
48
+ },
49
+ "constant.builtin": {
50
+ "foreground": "$builtin"
51
+ }
52
+ },
53
+ "presets": []
54
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "$schema": "https://themebooth.dev/schema/manifest.json",
3
+ "name": "Light Theme",
4
+ "description": "A clean light syntax theme with warm tones and WCAG AA minimum contrast",
5
+ "author": "Your Name",
6
+ "version": "1.0.0",
7
+ "_comments": {
8
+ "design": "Light theme ideal for daytime coding and printed output",
9
+ "background": "#ffffff (white) for maximum readability in bright environments",
10
+ "contrast_tested": "WCAG AAA for foreground/background (#333333 on #ffffff = 12.6:1 ratio)",
11
+ "token_colors": "Blue keywords (#0066cc), orange/amber strings (#d97706) for warm appearance, green numbers (#16a34a)"
12
+ },
13
+ "variables": {
14
+ "background": "#ffffff",
15
+ "foreground": "#333333",
16
+ "accent": "#0066cc",
17
+ "keyword": "#0066cc",
18
+ "string": "#d97706",
19
+ "comment": "#6b7280",
20
+ "number": "#16a34a",
21
+ "builtin": "#0891b2",
22
+ "error": "#dc2626"
23
+ },
24
+ "colors": {
25
+ "editor.background": "$background",
26
+ "editor.foreground": "$foreground",
27
+ "editor.lineNumberActiveForeground": "$accent",
28
+ "editor.selectionBackground": "#e0e7ff",
29
+ "editor.wordHighlightBackground": "#fef3c7",
30
+ "editorCursor.foreground": "$accent",
31
+ "editorWhitespace.foreground": "#d1d5db"
32
+ },
33
+ "tokens": {
34
+ "keyword": {
35
+ "foreground": "$keyword",
36
+ "fontStyle": "bold"
37
+ },
38
+ "string": {
39
+ "foreground": "$string"
40
+ },
41
+ "comment": {
42
+ "foreground": "$comment",
43
+ "fontStyle": "italic"
44
+ },
45
+ "number": {
46
+ "foreground": "$number"
47
+ },
48
+ "constant.builtin": {
49
+ "foreground": "$builtin"
50
+ }
51
+ },
52
+ "presets": []
53
+ }
@@ -0,0 +1,18 @@
1
+ export declare enum LogLevel {
2
+ DEBUG = 0,
3
+ INFO = 1,
4
+ WARN = 2,
5
+ ERROR = 3
6
+ }
7
+ export declare function setLogLevel(level: LogLevel): void;
8
+ export declare const logger: {
9
+ debug: (message: string) => void;
10
+ info: (message: string) => void;
11
+ warn: (message: string) => void;
12
+ error: (message: string) => void;
13
+ success: (message: string) => void;
14
+ title: (message: string) => void;
15
+ table: (data: unknown[]) => void;
16
+ divider: (char?: string) => void;
17
+ };
18
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAID,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAED,eAAO,MAAM,MAAM;qBACA,MAAM;oBAKP,MAAM;oBAKN,MAAM;qBAKL,MAAM;uBAKJ,MAAM;qBAGR,MAAM;kBAIT,OAAO,EAAE;qBAGP,MAAM;CAIvB,CAAC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.logger = exports.LogLevel = void 0;
7
+ exports.setLogLevel = setLogLevel;
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ var LogLevel;
10
+ (function (LogLevel) {
11
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
12
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
13
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
14
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
15
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
16
+ let currentLevel = LogLevel.INFO;
17
+ function setLogLevel(level) {
18
+ currentLevel = level;
19
+ }
20
+ exports.logger = {
21
+ debug: (message) => {
22
+ if (currentLevel <= LogLevel.DEBUG) {
23
+ console.log(chalk_1.default.gray(`[DEBUG] ${message}`));
24
+ }
25
+ },
26
+ info: (message) => {
27
+ if (currentLevel <= LogLevel.INFO) {
28
+ console.log(chalk_1.default.cyan(`ℹ ${message}`));
29
+ }
30
+ },
31
+ warn: (message) => {
32
+ if (currentLevel <= LogLevel.WARN) {
33
+ console.warn(chalk_1.default.yellow(`⚠ ${message}`));
34
+ }
35
+ },
36
+ error: (message) => {
37
+ if (currentLevel <= LogLevel.ERROR) {
38
+ console.error(chalk_1.default.red(`✕ ${message}`));
39
+ }
40
+ },
41
+ success: (message) => {
42
+ console.log(chalk_1.default.green(`✓ ${message}`));
43
+ },
44
+ title: (message) => {
45
+ const line = "═".repeat(50);
46
+ console.log(chalk_1.default.cyan(`\n${line}\n${message}\n${line}\n`));
47
+ },
48
+ table: (data) => {
49
+ console.table(data);
50
+ },
51
+ divider: (char = ".oOo.") => {
52
+ const padding = Math.floor((process.stdout.columns || 80) / char.length);
53
+ console.log(chalk_1.default.magenta(char.repeat(padding)));
54
+ },
55
+ };
56
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;;;;AAWA,kCAEC;AAbD,kDAA0B;AAE1B,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;AACX,CAAC,EALW,QAAQ,wBAAR,QAAQ,QAKnB;AAED,IAAI,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;AAEjC,SAAgB,WAAW,CAAC,KAAe;IACzC,YAAY,GAAG,KAAK,CAAC;AACvB,CAAC;AAEY,QAAA,MAAM,GAAG;IACpB,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE;QACzB,IAAI,YAAY,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,OAAe,EAAE,EAAE;QACxB,IAAI,YAAY,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,OAAe,EAAE,EAAE;QACxB,IAAI,YAAY,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE;QACzB,IAAI,YAAY,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE;QACzB,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,KAAK,EAAE,CAAC,IAAe,EAAE,EAAE;QACzB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,CAAC,OAAe,OAAO,EAAE,EAAE;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;CACF,CAAC"}
@@ -0,0 +1,32 @@
1
+ export interface ThemeProjectPaths {
2
+ root: string;
3
+ manifest: string;
4
+ preview: string;
5
+ cache: string;
6
+ output: string;
7
+ }
8
+ /**
9
+ * Gets all important paths for a theme project
10
+ */
11
+ export declare function getThemeProjectPaths(themeDir: string): ThemeProjectPaths;
12
+ /**
13
+ * Ensures theme project directory structure exists
14
+ */
15
+ export declare function ensureThemeProjectStructure(paths: ThemeProjectPaths): Promise<void>;
16
+ /**
17
+ * Checks if a manifest file exists at a location
18
+ */
19
+ export declare function manifestExists(manifestPath: string): Promise<boolean>;
20
+ /**
21
+ * Reads a manifest file
22
+ */
23
+ export declare function readManifest(manifestPath: string): Promise<Record<string, unknown>>;
24
+ /**
25
+ * Writes a manifest file
26
+ */
27
+ export declare function writeManifest(manifestPath: string, manifest: Record<string, unknown>): Promise<void>;
28
+ /**
29
+ * Ensures a directory is empty or doesn't exist
30
+ */
31
+ export declare function ensureEmptyDirectory(dirPath: string): Promise<void>;
32
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CASxE;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO3E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAGzF;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAezE"}
@@ -0,0 +1,111 @@
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.getThemeProjectPaths = getThemeProjectPaths;
37
+ exports.ensureThemeProjectStructure = ensureThemeProjectStructure;
38
+ exports.manifestExists = manifestExists;
39
+ exports.readManifest = readManifest;
40
+ exports.writeManifest = writeManifest;
41
+ exports.ensureEmptyDirectory = ensureEmptyDirectory;
42
+ const path = __importStar(require("path"));
43
+ const fs = __importStar(require("fs/promises"));
44
+ /**
45
+ * Gets all important paths for a theme project
46
+ */
47
+ function getThemeProjectPaths(themeDir) {
48
+ const root = path.resolve(themeDir);
49
+ return {
50
+ root,
51
+ manifest: path.join(root, "manifest.json"),
52
+ preview: path.join(root, "preview.html"),
53
+ cache: path.join(root, ".themebooth", "cache"),
54
+ output: path.join(root, ".themebooth", "output"),
55
+ };
56
+ }
57
+ /**
58
+ * Ensures theme project directory structure exists
59
+ */
60
+ async function ensureThemeProjectStructure(paths) {
61
+ await fs.mkdir(paths.root, { recursive: true });
62
+ await fs.mkdir(paths.cache, { recursive: true });
63
+ await fs.mkdir(paths.output, { recursive: true });
64
+ }
65
+ /**
66
+ * Checks if a manifest file exists at a location
67
+ */
68
+ async function manifestExists(manifestPath) {
69
+ try {
70
+ await fs.access(manifestPath);
71
+ return true;
72
+ }
73
+ catch {
74
+ return false;
75
+ }
76
+ }
77
+ /**
78
+ * Reads a manifest file
79
+ */
80
+ async function readManifest(manifestPath) {
81
+ const content = await fs.readFile(manifestPath, "utf-8");
82
+ return JSON.parse(content);
83
+ }
84
+ /**
85
+ * Writes a manifest file
86
+ */
87
+ async function writeManifest(manifestPath, manifest) {
88
+ const content = JSON.stringify(manifest, null, 2);
89
+ await fs.writeFile(manifestPath, content, "utf-8");
90
+ }
91
+ /**
92
+ * Ensures a directory is empty or doesn't exist
93
+ */
94
+ async function ensureEmptyDirectory(dirPath) {
95
+ try {
96
+ const stat = await fs.stat(dirPath);
97
+ if (stat.isDirectory()) {
98
+ const files = await fs.readdir(dirPath);
99
+ if (files.length > 0) {
100
+ throw new Error(`Directory ${dirPath} is not empty`);
101
+ }
102
+ }
103
+ }
104
+ catch (error) {
105
+ if (error.code !== "ENOENT") {
106
+ throw error;
107
+ }
108
+ }
109
+ await fs.mkdir(dirPath, { recursive: true });
110
+ }
111
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,oDASC;AAKD,kEAIC;AAKD,wCAOC;AAKD,oCAGC;AAKD,sCAMC;AAKD,oDAeC;AAnFD,2CAA6B;AAC7B,gDAAkC;AAUlC;;GAEG;AACH,SAAgB,oBAAoB,CAAC,QAAgB;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO;QACL,IAAI;QACJ,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC;QAC1C,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;QACxC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC;QAC9C,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,CAAC;KACjD,CAAC;AACJ,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,2BAA2B,CAAC,KAAwB;IACxE,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,cAAc,CAAC,YAAoB;IACvD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,YAAoB;IACrD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CACjC,YAAoB,EACpB,QAAiC;IAEjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,oBAAoB,CAAC,OAAe;IACxD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,aAAa,OAAO,eAAe,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Returns schema reference for manifest.json ($schema field)
3
+ */
4
+ export declare function getSchemaRef(): string;
5
+ /**
6
+ * Creates manifest with schema reference for IDE support
7
+ */
8
+ export declare function addSchemaToManifest(manifest: Record<string, unknown>): Record<string, unknown>;
9
+ /**
10
+ * Loads the full JSON schema (for validation or reference)
11
+ */
12
+ export declare function getFullSchema(): Promise<Record<string, unknown>>;
13
+ /**
14
+ * Formats manifest for output with schema reference
15
+ */
16
+ export declare function formatManifestForOutput(manifest: Record<string, unknown>): string;
17
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAK9F;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAEtE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAGjF"}
@@ -0,0 +1,80 @@
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.getSchemaRef = getSchemaRef;
37
+ exports.addSchemaToManifest = addSchemaToManifest;
38
+ exports.getFullSchema = getFullSchema;
39
+ exports.formatManifestForOutput = formatManifestForOutput;
40
+ const fs = __importStar(require("fs/promises"));
41
+ const path = __importStar(require("path"));
42
+ let cachedSchema;
43
+ async function loadSchema() {
44
+ if (cachedSchema) {
45
+ return cachedSchema;
46
+ }
47
+ const schemaPath = path.join(__dirname, "../templates/manifest.schema.json");
48
+ const content = await fs.readFile(schemaPath, "utf-8");
49
+ cachedSchema = JSON.parse(content);
50
+ return cachedSchema;
51
+ }
52
+ /**
53
+ * Returns schema reference for manifest.json ($schema field)
54
+ */
55
+ function getSchemaRef() {
56
+ return "https://themebooth.dev/schema/manifest.json";
57
+ }
58
+ /**
59
+ * Creates manifest with schema reference for IDE support
60
+ */
61
+ function addSchemaToManifest(manifest) {
62
+ return {
63
+ $schema: getSchemaRef(),
64
+ ...manifest,
65
+ };
66
+ }
67
+ /**
68
+ * Loads the full JSON schema (for validation or reference)
69
+ */
70
+ async function getFullSchema() {
71
+ return loadSchema();
72
+ }
73
+ /**
74
+ * Formats manifest for output with schema reference
75
+ */
76
+ function formatManifestForOutput(manifest) {
77
+ const withSchema = addSchemaToManifest(manifest);
78
+ return JSON.stringify(withSchema, null, 2);
79
+ }
80
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,oCAEC;AAKD,kDAKC;AAKD,sCAEC;AAKD,0DAGC;AA9CD,gDAAkC;AAClC,2CAA6B;AAE7B,IAAI,YAAiD,CAAC;AAEtD,KAAK,UAAU,UAAU;IACvB,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACvD,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;IAC9D,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY;IAC1B,OAAO,6CAA6C,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,QAAiC;IACnE,OAAO;QACL,OAAO,EAAE,YAAY,EAAE;QACvB,GAAG,QAAQ;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa;IACjC,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CAAC,QAAiC;IACvE,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC"}