lezu 0.0.40 → 0.0.42
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/bin/lezu.js +1 -5
- package/package.json +23 -31
- package/README.md +0 -458
- package/dist/api-ITNPB7RZ.js +0 -7
- package/dist/api-ITNPB7RZ.js.map +0 -1
- package/dist/chunk-5N5URMOC.js +0 -217
- package/dist/chunk-5N5URMOC.js.map +0 -1
- package/dist/chunk-EDQCBUBB.js +0 -96
- package/dist/chunk-EDQCBUBB.js.map +0 -1
- package/dist/chunk-HORO6WMJ.js +0 -300
- package/dist/chunk-HORO6WMJ.js.map +0 -1
- package/dist/chunk-V2UO7VTR.js +0 -189
- package/dist/chunk-V2UO7VTR.js.map +0 -1
- package/dist/get-I2MEWR6X.js +0 -9
- package/dist/get-I2MEWR6X.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -784
- package/dist/index.js.map +0 -1
- package/dist/load-6HKXQ75E.js +0 -11
- package/dist/load-6HKXQ75E.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/load.ts","../src/writer.ts"],"sourcesContent":["import { Command } from 'commander'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport { confirm, isCancel, text } from '@clack/prompts'\nimport { loadConfig, validateConfig } from '../config.js'\nimport { LezuApiClient } from '../api.js'\nimport { TranslationWriter } from '../writer.js'\nimport type { Config } from '../types.js'\n\nexport function createLoadCommand() {\n const command = new Command('load')\n .description('Download translation files from Lezu')\n .option('-p, --project <id>', 'Project ID')\n .option('-k, --api-key <key>', 'API key')\n .option('-d, --dest <path>', 'Destination folder', './src/i18n')\n .option('-f, --format <format>', 'Output format (json, js, ts, yaml, po)', 'json')\n .option('-l, --languages <languages>', 'Comma-separated list of languages to download')\n .option('-r, --release <id>', 'Specific release ID')\n .option('-e, --environment <env>', 'Environment', 'production')\n .option('--api-url <url>', 'API URL', 'https://api.lezu.app')\n .option('--flatten', 'Flatten nested keys')\n .option('--namespace', 'Use namespace folder structure')\n .option('--include-empty', 'Include empty translations')\n .option('-w, --watch', 'Watch for changes')\n .option('--watch-interval <ms>', 'Watch interval in milliseconds', '5000')\n .action(async (options) => {\n try {\n // Parse languages from comma-separated string\n if (options.languages) {\n options.languages = options.languages.split(',').map((l: string) => l.trim())\n }\n\n // Convert watch interval to number\n if (options.watchInterval) {\n options.watchInterval = parseInt(options.watchInterval, 10)\n }\n\n // Load configuration\n const config = loadConfig(options)\n\n // Validate configuration\n const errors = validateConfig(config)\n if (errors.length > 0) {\n console.error(chalk.red('Configuration errors:'))\n errors.forEach(error => console.error(chalk.red(` - ${error}`)))\n process.exit(1)\n }\n\n // Run the sync\n await syncTranslations(config)\n\n // Watch mode\n if (config.watch) {\n console.log(chalk.cyan(`\\n[Watching] Monitoring for changes every ${config.watchInterval}ms...`))\n console.log(chalk.gray('Press Ctrl+C to stop'))\n \n setInterval(async () => {\n console.log(chalk.gray('\\n[Checking] Looking for updates...'))\n await syncTranslations(config)\n }, config.watchInterval)\n }\n } catch (error) {\n console.error(chalk.red('\\n[Error]'), error instanceof Error ? error.message : error)\n process.exit(1)\n }\n })\n\n return command\n}\n\nexport async function syncTranslations(config: Config) {\n const spinner = ora('Connecting to Lezu API...').start()\n\n try {\n // Create API client\n const client = new LezuApiClient(config)\n \n // If no languages specified, fetch project languages\n if (!config.languages || config.languages.length === 0) {\n spinner.text = 'Fetching project languages...'\n try {\n const projectData = await client.getProject()\n \n // Extract language codes from project\n const projectLanguages = projectData.project.languages || ['en']\n config.languages = Array.isArray(projectLanguages) \n ? projectLanguages.map((lang: any) => typeof lang === 'string' ? lang : lang.code)\n : ['en']\n \n spinner.info(`Using project languages: ${config.languages.join(', ')}`)\n spinner.start('Connecting to Lezu API...')\n } catch (error) {\n spinner.warn('Could not fetch project languages, defaulting to \"en\"')\n config.languages = ['en']\n spinner.start('Connecting to Lezu API...')\n }\n }\n\n // Release is required - either specified or use latest\n if (!config.release) {\n spinner.text = 'Fetching latest release...'\n const latestRelease = await client.getLatestRelease()\n if (latestRelease) {\n config.release = latestRelease\n spinner.succeed(`Using latest release: ${latestRelease}`)\n spinner.start('Fetching translations...')\n } else {\n spinner.fail('No releases found')\n console.log(chalk.yellow('\\n⚠️ No releases found for this project.'))\n console.log(chalk.gray('Releases provide cached, versioned snapshots that are fast and efficient.'))\n \n const shouldCreateRelease = await confirm({\n message: 'Would you like to create a release now?',\n initialValue: true\n })\n \n if (isCancel(shouldCreateRelease) || !shouldCreateRelease) {\n console.log(chalk.red('\\n✖ A release is required to download translations'))\n console.log(chalk.gray('\\nOptions:'))\n console.log(chalk.gray(' 1. Create a release through the Lezu dashboard'))\n console.log(chalk.gray(' 2. Use: npx lezu release create'))\n process.exit(1)\n }\n \n // Prompt for version\n const version = await text({\n message: 'Version',\n placeholder: new Date().toISOString().split('T')[0].replace(/-/g, '.'),\n initialValue: new Date().toISOString().split('T')[0].replace(/-/g, '.')\n })\n \n if (isCancel(version)) {\n console.log(chalk.yellow('\\nOperation cancelled'))\n process.exit(0)\n }\n \n spinner.start('Creating release...')\n \n try {\n const release = await client.createRelease({\n version: version as string,\n name: 'Initial Release',\n description: 'Created by Lezu CLI'\n })\n config.release = release.release.id\n spinner.succeed(`Created release v${release.release.version}`)\n spinner.start('Fetching translations...')\n } catch (error) {\n spinner.fail('Failed to create release')\n console.log(chalk.red('\\n✖ Cannot continue without a release'))\n console.log(chalk.gray('Please check your permissions or try again later.'))\n process.exit(1)\n }\n }\n }\n\n // Fetch translations\n spinner.text = 'Fetching translations...'\n const response = await client.getTranslations()\n\n if (!response.translations || Object.keys(response.translations).length === 0) {\n spinner.fail('No translations found')\n return\n }\n\n spinner.succeed(`Fetched translations for ${Object.keys(response.translations).length} languages`)\n\n // Write translations\n const writer = new TranslationWriter(config)\n writer.write(response.translations)\n\n console.log(chalk.green('\\n[Success] Translations synced successfully!'))\n\n // Show summary\n console.log(chalk.gray('\\nSummary:'))\n console.log(chalk.gray(` - Project: ${config.projectId}`))\n console.log(chalk.gray(` - Languages: ${Object.keys(response.translations).join(', ')}`))\n console.log(chalk.gray(` - Destination: ${config.dest}`))\n console.log(chalk.gray(` - Format: ${config.format}`))\n \n if (response.meta?.version) {\n console.log(chalk.gray(` - Version: ${response.meta.version}`))\n }\n\n } catch (error) {\n spinner.fail('Failed to sync translations')\n throw error\n }\n}","import { writeFileSync, mkdirSync } from 'fs'\nimport { resolve, dirname, join } from 'path'\nimport type { Config, TranslationBundle } from './types.js'\n\nexport class TranslationWriter {\n private config: Config\n\n constructor(config: Config) {\n this.config = config\n }\n\n write(translations: Record<string, any>): void {\n // Ensure destination directory exists\n mkdirSync(this.config.dest, { recursive: true })\n\n // Write each language to its own file\n for (const [language, content] of Object.entries(translations)) {\n const processedContent = this.processContent(content)\n const filePath = this.getFilePath(language)\n \n mkdirSync(dirname(filePath), { recursive: true })\n \n const fileContent = this.formatContent(processedContent, language)\n writeFileSync(filePath, fileContent, 'utf-8')\n \n console.log(`[Written] ${language} translations to ${filePath}`)\n }\n }\n\n private processContent(content: any): any {\n if (this.config.flatten) {\n return this.flattenObject(content)\n }\n \n if (!this.config.includeEmpty) {\n return this.removeEmptyValues(content)\n }\n \n return content\n }\n\n private flattenObject(obj: any, prefix = ''): Record<string, string> {\n const result: Record<string, string> = {}\n \n for (const [key, value] of Object.entries(obj)) {\n const newKey = prefix ? `${prefix}.${key}` : key\n \n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n Object.assign(result, this.flattenObject(value, newKey))\n } else {\n result[newKey] = value as string\n }\n }\n \n return result\n }\n\n private removeEmptyValues(obj: any): any {\n if (typeof obj !== 'object' || obj === null) {\n return obj\n }\n \n const result: any = {}\n \n for (const [key, value] of Object.entries(obj)) {\n if (typeof value === 'object' && value !== null) {\n const cleaned = this.removeEmptyValues(value)\n if (Object.keys(cleaned).length > 0) {\n result[key] = cleaned\n }\n } else if (value !== '' && value !== null && value !== undefined) {\n result[key] = value\n }\n }\n \n return result\n }\n\n private getFilePath(language: string): string {\n const extension = this.getFileExtension()\n \n if (this.config.namespace) {\n // Use namespace structure: dest/locales/en.json\n return join(this.config.dest, 'locales', `${language}.${extension}`)\n } else {\n // Use flat structure: dest/en.json\n return join(this.config.dest, `${language}.${extension}`)\n }\n }\n\n private getFileExtension(): string {\n switch (this.config.format) {\n case 'json':\n return 'json'\n case 'js':\n return 'js'\n case 'ts':\n return 'ts'\n case 'yaml':\n return 'yaml'\n case 'po':\n return 'po'\n default:\n return 'json'\n }\n }\n\n private formatContent(content: any, language: string): string {\n switch (this.config.format) {\n case 'json':\n return JSON.stringify(content, null, 2)\n \n case 'js':\n return `export default ${JSON.stringify(content, null, 2)}`\n \n case 'ts':\n return `const translations = ${JSON.stringify(content, null, 2)} as const\\n\\nexport default translations`\n \n case 'yaml':\n return this.toYaml(content)\n \n case 'po':\n return this.toPo(content, language)\n \n default:\n return JSON.stringify(content, null, 2)\n }\n }\n\n private toYaml(obj: any, indent = 0): string {\n let result = ''\n const spaces = ' '.repeat(indent)\n \n for (const [key, value] of Object.entries(obj)) {\n if (typeof value === 'object' && value !== null) {\n result += `${spaces}${key}:\\n${this.toYaml(value, indent + 2)}`\n } else {\n const escapedValue = String(value).includes(':') || String(value).includes('#') \n ? `\"${String(value).replace(/\"/g, '\\\\\"')}\"` \n : value\n result += `${spaces}${key}: ${escapedValue}\\n`\n }\n }\n \n return result\n }\n\n private toPo(obj: any, language: string): string {\n const now = new Date().toISOString()\n let result = `# Translation file for ${language}\n# Generated by Lezu CLI on ${now}\nmsgid \"\"\nmsgstr \"\"\n\"Language: ${language}\\\\n\"\n\"MIME-Version: 1.0\\\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\\\n\"\n\"Content-Transfer-Encoding: 8bit\\\\n\"\n\"Generated-By: Lezu CLI\\\\n\"\n\n`\n\n const flatEntries = this.flattenForPo(obj)\n \n for (const [key, value] of Object.entries(flatEntries)) {\n const escapedKey = this.escapePoString(key)\n const escapedValue = this.escapePoString(String(value))\n \n result += `msgid \"${escapedKey}\"\\n`\n result += `msgstr \"${escapedValue}\"\\n\\n`\n }\n \n return result\n }\n\n private flattenForPo(obj: any, prefix = ''): Record<string, string> {\n const result: Record<string, string> = {}\n \n for (const [key, value] of Object.entries(obj)) {\n const fullKey = prefix ? `${prefix}.${key}` : key\n \n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n Object.assign(result, this.flattenForPo(value, fullKey))\n } else {\n result[fullKey] = String(value)\n }\n }\n \n return result\n }\n\n private escapePoString(str: string): string {\n return str\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/\\t/g, '\\\\t')\n }\n}"],"mappings":"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","names":[]}
|
package/dist/chunk-V2UO7VTR.js
DELETED
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
// src/api.ts
|
|
2
|
-
import fetch from "node-fetch";
|
|
3
|
-
var LezuApiClient = class {
|
|
4
|
-
config;
|
|
5
|
-
constructor(config) {
|
|
6
|
-
this.config = config;
|
|
7
|
-
}
|
|
8
|
-
async validateCredentials() {
|
|
9
|
-
try {
|
|
10
|
-
await this.request("/v1/projects");
|
|
11
|
-
return true;
|
|
12
|
-
} catch (error) {
|
|
13
|
-
throw error;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
async request(endpoint, options = {}) {
|
|
17
|
-
const url = `${this.config.apiUrl}${endpoint}`;
|
|
18
|
-
if (process.env.DEBUG === "true" || this.config.debug) {
|
|
19
|
-
console.error(`
|
|
20
|
-
[Lezu CLI] Request Details:`);
|
|
21
|
-
console.error(` URL: ${url}`);
|
|
22
|
-
console.error(` Method: ${options.method || "GET"}`);
|
|
23
|
-
console.error(` Headers:`);
|
|
24
|
-
console.error(` Authorization: Bearer ${this.config.apiKey?.substring(0, 10)}...`);
|
|
25
|
-
console.error(` Content-Type: application/json`);
|
|
26
|
-
if (options.body) {
|
|
27
|
-
console.error(` Body: ${options.body}`);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
try {
|
|
31
|
-
const response = await fetch(url, {
|
|
32
|
-
...options,
|
|
33
|
-
headers: {
|
|
34
|
-
"Authorization": `Bearer ${this.config.apiKey}`,
|
|
35
|
-
"Content-Type": "application/json",
|
|
36
|
-
...options.headers
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
if (!response.ok) {
|
|
40
|
-
let errorMessage = "";
|
|
41
|
-
try {
|
|
42
|
-
const errorText = await response.text();
|
|
43
|
-
try {
|
|
44
|
-
const errorData = JSON.parse(errorText);
|
|
45
|
-
errorMessage = errorData.error || errorData.message || errorText;
|
|
46
|
-
} catch {
|
|
47
|
-
errorMessage = errorText;
|
|
48
|
-
}
|
|
49
|
-
} catch {
|
|
50
|
-
errorMessage = response.statusText;
|
|
51
|
-
}
|
|
52
|
-
const errorDetails = `
|
|
53
|
-
|
|
54
|
-
Request failed:
|
|
55
|
-
Endpoint: ${options.method || "GET"} ${url}
|
|
56
|
-
Status: ${response.status} ${response.statusText}
|
|
57
|
-
Response: ${errorMessage || "No error details provided"}
|
|
58
|
-
|
|
59
|
-
Try running with DEBUG=true for more details.`;
|
|
60
|
-
if (response.status === 401) {
|
|
61
|
-
throw new Error(`Authentication failed. Please check your API key.${errorDetails}`);
|
|
62
|
-
} else if (response.status === 403) {
|
|
63
|
-
throw new Error(`Access denied. Your API key may not have permission for this action.${errorDetails}`);
|
|
64
|
-
} else if (response.status === 404) {
|
|
65
|
-
throw new Error(`Resource not found. Please check your project ID and configuration.${errorDetails}`);
|
|
66
|
-
} else if (response.status === 500) {
|
|
67
|
-
if (errorMessage.includes("project") || errorMessage.includes("not found")) {
|
|
68
|
-
throw new Error(`Project not found. Please verify your project ID is correct.${errorDetails}`);
|
|
69
|
-
} else if (errorMessage.includes("invalid") || errorMessage.includes("malformed")) {
|
|
70
|
-
throw new Error(`Invalid project ID format. Please check your configuration.${errorDetails}`);
|
|
71
|
-
}
|
|
72
|
-
throw new Error(`Server error: ${errorMessage || "Internal server error"}${errorDetails}`);
|
|
73
|
-
} else {
|
|
74
|
-
throw new Error(`API error: ${errorMessage || response.statusText}${errorDetails}`);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return response.json();
|
|
78
|
-
} catch (error) {
|
|
79
|
-
if (error instanceof Error) {
|
|
80
|
-
if (error.message.includes("ENOTFOUND") || error.message.includes("ECONNREFUSED")) {
|
|
81
|
-
throw new Error(`Cannot connect to Lezu API at ${this.config.apiUrl}. Please check your internet connection and API URL.`);
|
|
82
|
-
}
|
|
83
|
-
throw error;
|
|
84
|
-
}
|
|
85
|
-
throw new Error("An unexpected error occurred");
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
async getTranslations() {
|
|
89
|
-
let endpoint = `/v1/projects/${this.config.projectId}/translations?environment=${this.config.environment}`;
|
|
90
|
-
if (this.config.release) {
|
|
91
|
-
endpoint = `/v1/releases/${this.config.release}/bundle`;
|
|
92
|
-
}
|
|
93
|
-
if (this.config.languages && this.config.languages.length > 0) {
|
|
94
|
-
const params = new URLSearchParams();
|
|
95
|
-
this.config.languages.forEach((lang) => params.append("languages", lang));
|
|
96
|
-
endpoint += `&${params.toString()}`;
|
|
97
|
-
}
|
|
98
|
-
const response = await this.request(endpoint);
|
|
99
|
-
return {
|
|
100
|
-
translations: response.translations || response,
|
|
101
|
-
meta: {
|
|
102
|
-
version: response.version,
|
|
103
|
-
timestamp: response.timestamp || (/* @__PURE__ */ new Date()).toISOString(),
|
|
104
|
-
languages: response.languages || Object.keys(response.translations || response)
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
async getReleases() {
|
|
109
|
-
return this.request(
|
|
110
|
-
`/v1/releases?environment=${this.config.environment}`
|
|
111
|
-
);
|
|
112
|
-
}
|
|
113
|
-
async getLatestRelease() {
|
|
114
|
-
try {
|
|
115
|
-
const releases = await this.getReleases();
|
|
116
|
-
if (releases.releases && releases.releases.length > 0) {
|
|
117
|
-
return releases.releases[0].id;
|
|
118
|
-
}
|
|
119
|
-
return null;
|
|
120
|
-
} catch (error) {
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
async getLanguages() {
|
|
125
|
-
const projectData = await this.getProject();
|
|
126
|
-
return {
|
|
127
|
-
languages: projectData.project.languages?.map((lang) => ({
|
|
128
|
-
language_code: typeof lang === "string" ? lang : lang.code,
|
|
129
|
-
name: typeof lang === "string" ? lang : lang.name,
|
|
130
|
-
enabled: true
|
|
131
|
-
})) || []
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
async addTranslationKey(key, translations) {
|
|
135
|
-
return this.request(
|
|
136
|
-
`/v1/keys`,
|
|
137
|
-
{
|
|
138
|
-
method: "POST",
|
|
139
|
-
body: JSON.stringify({ key, translations })
|
|
140
|
-
}
|
|
141
|
-
);
|
|
142
|
-
}
|
|
143
|
-
async translateKey(text, sourceLanguage, targetLanguages) {
|
|
144
|
-
const response = await this.request("/v1/translations/translate/batch", {
|
|
145
|
-
method: "POST",
|
|
146
|
-
body: JSON.stringify({
|
|
147
|
-
texts: [text],
|
|
148
|
-
sourceLanguage,
|
|
149
|
-
targetLanguages
|
|
150
|
-
})
|
|
151
|
-
});
|
|
152
|
-
return response.translations[text] || {};
|
|
153
|
-
}
|
|
154
|
-
async createRelease(data = {}) {
|
|
155
|
-
let environmentId = data.environmentId;
|
|
156
|
-
if (!environmentId) {
|
|
157
|
-
const projectData = await this.getProject();
|
|
158
|
-
const project = projectData.project;
|
|
159
|
-
const envName = this.config.environment || "production";
|
|
160
|
-
const environment = project.environments?.find((env) => env.name === envName);
|
|
161
|
-
if (!environment) {
|
|
162
|
-
throw new Error(`Environment '${envName}' not found for project`);
|
|
163
|
-
}
|
|
164
|
-
environmentId = environment.id;
|
|
165
|
-
}
|
|
166
|
-
return this.request(
|
|
167
|
-
`/v1/projects/${this.config.projectId}/releases`,
|
|
168
|
-
{
|
|
169
|
-
method: "POST",
|
|
170
|
-
body: JSON.stringify({
|
|
171
|
-
environmentId,
|
|
172
|
-
version: data.version || (/* @__PURE__ */ new Date()).toISOString().split("T")[0],
|
|
173
|
-
name: data.name,
|
|
174
|
-
description: data.description,
|
|
175
|
-
reviewedOnly: data.reviewedOnly || false,
|
|
176
|
-
setAsCurrent: true
|
|
177
|
-
})
|
|
178
|
-
}
|
|
179
|
-
);
|
|
180
|
-
}
|
|
181
|
-
async getProject() {
|
|
182
|
-
return this.request(`/v1/projects/${this.config.projectId}`);
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
export {
|
|
187
|
-
LezuApiClient
|
|
188
|
-
};
|
|
189
|
-
//# sourceMappingURL=chunk-V2UO7VTR.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api.ts"],"sourcesContent":["import fetch from 'node-fetch'\nimport type { Config, ApiResponse, ReleaseResponse } from './types.js'\n\nexport class LezuApiClient {\n private config: Config\n\n constructor(config: Config) {\n this.config = config\n }\n \n async validateCredentials(): Promise<boolean> {\n try {\n // Try to list projects - this works with both API keys and JWT tokens\n await this.request<any>('/v1/projects')\n return true\n } catch (error) {\n throw error\n }\n }\n\n private async request<T>(endpoint: string, options: any = {}): Promise<T> {\n const url = `${this.config.apiUrl}${endpoint}`\n \n // Log request details for debugging (only when DEBUG=true)\n if (process.env.DEBUG === 'true' || this.config.debug) {\n console.error(`\\n[Lezu CLI] Request Details:`)\n console.error(` URL: ${url}`)\n console.error(` Method: ${options.method || 'GET'}`)\n console.error(` Headers:`)\n console.error(` Authorization: Bearer ${this.config.apiKey?.substring(0, 10)}...`)\n console.error(` Content-Type: application/json`)\n if (options.body) {\n console.error(` Body: ${options.body}`)\n }\n }\n \n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Authorization': `Bearer ${this.config.apiKey}`,\n 'Content-Type': 'application/json',\n ...options.headers\n }\n })\n\n if (!response.ok) {\n let errorMessage = ''\n \n try {\n const errorText = await response.text()\n try {\n const errorData = JSON.parse(errorText)\n errorMessage = errorData.error || errorData.message || errorText\n } catch {\n errorMessage = errorText\n }\n } catch {\n errorMessage = response.statusText\n }\n\n // Provide user-friendly error messages with details\n const errorDetails = `\\n\\nRequest failed:\n Endpoint: ${options.method || 'GET'} ${url}\n Status: ${response.status} ${response.statusText}\n Response: ${errorMessage || 'No error details provided'}\n \nTry running with DEBUG=true for more details.`\n\n if (response.status === 401) {\n throw new Error(`Authentication failed. Please check your API key.${errorDetails}`)\n } else if (response.status === 403) {\n throw new Error(`Access denied. Your API key may not have permission for this action.${errorDetails}`)\n } else if (response.status === 404) {\n throw new Error(`Resource not found. Please check your project ID and configuration.${errorDetails}`)\n } else if (response.status === 500) {\n // Check for common 500 errors\n if (errorMessage.includes('project') || errorMessage.includes('not found')) {\n throw new Error(`Project not found. Please verify your project ID is correct.${errorDetails}`)\n } else if (errorMessage.includes('invalid') || errorMessage.includes('malformed')) {\n throw new Error(`Invalid project ID format. Please check your configuration.${errorDetails}`)\n }\n throw new Error(`Server error: ${errorMessage || 'Internal server error'}${errorDetails}`)\n } else {\n throw new Error(`API error: ${errorMessage || response.statusText}${errorDetails}`)\n }\n }\n\n return response.json() as Promise<T>\n } catch (error) {\n if (error instanceof Error) {\n // Check for network errors\n if (error.message.includes('ENOTFOUND') || error.message.includes('ECONNREFUSED')) {\n throw new Error(`Cannot connect to Lezu API at ${this.config.apiUrl}. Please check your internet connection and API URL.`)\n }\n throw error\n }\n throw new Error('An unexpected error occurred')\n }\n }\n\n async getTranslations(): Promise<ApiResponse> {\n let endpoint = `/v1/projects/${this.config.projectId}/translations?environment=${this.config.environment}`\n \n if (this.config.release) {\n endpoint = `/v1/releases/${this.config.release}/bundle`\n }\n\n // Add language filter if specified\n if (this.config.languages && this.config.languages.length > 0) {\n const params = new URLSearchParams()\n this.config.languages.forEach(lang => params.append('languages', lang))\n endpoint += `&${params.toString()}`\n }\n\n const response = await this.request<any>(endpoint)\n \n // Transform the response to match our expected format\n return {\n translations: response.translations || response,\n meta: {\n version: response.version,\n timestamp: response.timestamp || new Date().toISOString(),\n languages: response.languages || Object.keys(response.translations || response)\n }\n }\n }\n\n async getReleases(): Promise<ReleaseResponse> {\n return this.request<ReleaseResponse>(\n `/v1/releases?environment=${this.config.environment}`\n )\n }\n\n async getLatestRelease(): Promise<string | null> {\n try {\n const releases = await this.getReleases()\n if (releases.releases && releases.releases.length > 0) {\n // Releases are ordered by created_at desc, so first one is latest\n return releases.releases[0].id\n }\n return null\n } catch (error) {\n // Silently return null - the calling code will handle no releases\n return null\n }\n }\n\n async getLanguages(): Promise<any> {\n // Get project details to extract languages\n const projectData = await this.getProject()\n return {\n languages: projectData.project.languages?.map((lang: any) => ({\n language_code: typeof lang === 'string' ? lang : lang.code,\n name: typeof lang === 'string' ? lang : lang.name,\n enabled: true\n })) || []\n }\n }\n\n async addTranslationKey(key: string, translations: Record<string, string>): Promise<any> {\n return this.request<any>(\n `/v1/keys`,\n {\n method: 'POST',\n body: JSON.stringify({ key, translations })\n }\n )\n }\n\n async translateKey(text: string, sourceLanguage: string, targetLanguages: string[]): Promise<Record<string, string>> {\n // Use batch translate for efficiency\n const response = await this.request<any>('/v1/translations/translate/batch', {\n method: 'POST',\n body: JSON.stringify({\n texts: [text],\n sourceLanguage,\n targetLanguages\n })\n })\n \n return response.translations[text] || {}\n }\n\n async createRelease(data: {\n version?: string\n name?: string\n description?: string\n reviewedOnly?: boolean\n environmentId?: string\n } = {}): Promise<any> {\n // If no environmentId provided, we need to fetch it\n let environmentId = data.environmentId\n \n if (!environmentId) {\n // First, get the project to find environments\n const projectData = await this.getProject()\n const project = projectData.project\n \n // Find the environment ID for the specified environment name\n const envName = this.config.environment || 'production'\n const environment = project.environments?.find((env: any) => env.name === envName)\n \n if (!environment) {\n throw new Error(`Environment '${envName}' not found for project`)\n }\n \n environmentId = environment.id\n }\n \n return this.request<any>(\n `/v1/projects/${this.config.projectId}/releases`,\n {\n method: 'POST',\n body: JSON.stringify({\n environmentId,\n version: data.version || new Date().toISOString().split('T')[0],\n name: data.name,\n description: data.description,\n reviewedOnly: data.reviewedOnly || false,\n setAsCurrent: true\n })\n }\n )\n }\n\n async getProject(): Promise<any> {\n return this.request<any>(`/v1/projects/${this.config.projectId}`)\n }\n}"],"mappings":"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","names":[]}
|
package/dist/get-I2MEWR6X.js
DELETED
package/dist/get-I2MEWR6X.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/index.d.ts
DELETED