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.
- package/README.md +172 -0
- package/dist/bin/themebooth.d.ts +3 -0
- package/dist/bin/themebooth.d.ts.map +1 -0
- package/dist/bin/themebooth.js +103 -0
- package/dist/bin/themebooth.js.map +1 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +433 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/package.d.ts +2 -0
- package/dist/cli/package.d.ts.map +1 -0
- package/dist/cli/package.js +194 -0
- package/dist/cli/package.js.map +1 -0
- package/dist/cli/preview.d.ts +2 -0
- package/dist/cli/preview.d.ts.map +1 -0
- package/dist/cli/preview.js +93 -0
- package/dist/cli/preview.js.map +1 -0
- package/dist/cli/publish.d.ts +2 -0
- package/dist/cli/publish.d.ts.map +1 -0
- package/dist/cli/publish.js +126 -0
- package/dist/cli/publish.js.map +1 -0
- package/dist/core/manifest.d.ts +44 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +101 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/transpiler.d.ts +13 -0
- package/dist/core/transpiler.d.ts.map +1 -0
- package/dist/core/transpiler.js +139 -0
- package/dist/core/transpiler.js.map +1 -0
- package/dist/core/variables.d.ts +33 -0
- package/dist/core/variables.d.ts.map +1 -0
- package/dist/core/variables.js +155 -0
- package/dist/core/variables.js.map +1 -0
- package/dist/exporters/notepad-plus.d.ts +3 -0
- package/dist/exporters/notepad-plus.d.ts.map +1 -0
- package/dist/exporters/notepad-plus.js +90 -0
- package/dist/exporters/notepad-plus.js.map +1 -0
- package/dist/exporters/vscode.d.ts +11 -0
- package/dist/exporters/vscode.d.ts.map +1 -0
- package/dist/exporters/vscode.js +34 -0
- package/dist/exporters/vscode.js.map +1 -0
- package/dist/exporters/zed.d.ts +12 -0
- package/dist/exporters/zed.d.ts.map +1 -0
- package/dist/exporters/zed.js +48 -0
- package/dist/exporters/zed.js.map +1 -0
- package/dist/preview/renderer.d.ts +3 -0
- package/dist/preview/renderer.d.ts.map +1 -0
- package/dist/preview/renderer.js +257 -0
- package/dist/preview/renderer.js.map +1 -0
- package/dist/preview/server.d.ts +24 -0
- package/dist/preview/server.d.ts.map +1 -0
- package/dist/preview/server.js +166 -0
- package/dist/preview/server.js.map +1 -0
- package/dist/preview/watcher.d.ts +9 -0
- package/dist/preview/watcher.d.ts.map +1 -0
- package/dist/preview/watcher.js +81 -0
- package/dist/preview/watcher.js.map +1 -0
- package/dist/publish/notepad-plus.d.ts +2 -0
- package/dist/publish/notepad-plus.d.ts.map +1 -0
- package/dist/publish/notepad-plus.js +151 -0
- package/dist/publish/notepad-plus.js.map +1 -0
- package/dist/publish/vscode.d.ts +2 -0
- package/dist/publish/vscode.d.ts.map +1 -0
- package/dist/publish/vscode.js +144 -0
- package/dist/publish/vscode.js.map +1 -0
- package/dist/publish/zed.d.ts +2 -0
- package/dist/publish/zed.d.ts.map +1 -0
- package/dist/publish/zed.js +137 -0
- package/dist/publish/zed.js.map +1 -0
- package/dist/templates/presets/dark.json +53 -0
- package/dist/templates/presets/high-contrast.json +54 -0
- package/dist/templates/presets/light.json +53 -0
- package/dist/utils/logger.d.ts +18 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +56 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.d.ts +32 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +111 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/schema.d.ts +17 -0
- package/dist/utils/schema.d.ts.map +1 -0
- package/dist/utils/schema.js +80 -0
- package/dist/utils/schema.js.map +1 -0
- package/dist/utils/validation.d.ts +59 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +323 -0
- package/dist/utils/validation.js.map +1 -0
- 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"}
|