UNPKG

@gftdcojp/weblate-nextjs-sdk

Version:

A Next.js SDK for integrating with Weblate translation management system

96 lines (95 loc) 3.92 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.WeblateApiError = exports.WeblateClient = void 0; const axios_1 = __importDefault(require("axios")); class WeblateClient { constructor(config) { this.config = config; this.axios = axios_1.default.create({ baseURL: `${config.baseUrl}/api/`, timeout: config.timeout || 10000, headers: { 'Authorization': `Token ${config.apiKey}`, 'Content-Type': 'application/json', }, }); // Add request interceptor for retries this.axios.interceptors.response.use((response) => response, async (error) => { const retries = config.retries || 3; const shouldRetry = error.response?.status >= 500 && error.config.retryCount < retries; if (shouldRetry) { error.config.retryCount = error.config.retryCount || 0; error.config.retryCount++; await new Promise(resolve => setTimeout(resolve, 1000 * error.config.retryCount)); return this.axios(error.config); } return Promise.reject(error); }); } async handleRequest(request) { try { const response = await request; return response.data; } catch (error) { if (error.response) { throw new WeblateApiError(error.response.data.error || 'API Error', error.response.data.message || error.message, error.response.status); } throw new WeblateApiError('Network Error', error.message); } } async getProjects() { const response = await this.handleRequest(this.axios.get('projects/')); return response.data || response; } async getProject(slug) { return this.handleRequest(this.axios.get(`projects/${slug}/`)); } async getComponents(projectSlug) { const response = await this.handleRequest(this.axios.get(`projects/${projectSlug}/components/`)); return response.data || response; } async getTranslations(componentSlug) { const response = await this.handleRequest(this.axios.get(`components/${componentSlug}/translations/`)); return response.data || response; } async getTranslation(componentSlug, languageCode) { return this.handleRequest(this.axios.get(`translations/${componentSlug}/${languageCode}/`)); } async getUnits(translationId) { const response = await this.handleRequest(this.axios.get(`translations/${translationId}/units/`)); return response.data || response; } async updateUnit(unitId, target) { return this.handleRequest(this.axios.patch(`units/${unitId}/`, { target })); } async getStatistics(componentSlug, languageCode) { return this.handleRequest(this.axios.get(`translations/${componentSlug}/${languageCode}/statistics/`)); } async searchUnits(query, component, language) { const params = { q: query }; if (component) params.component = component; if (language) params.language = language; const response = await this.handleRequest(this.axios.get('units/', { params })); return response.data || response; } async getLanguages() { const response = await this.handleRequest(this.axios.get('languages/')); return response.data || response; } } exports.WeblateClient = WeblateClient; class WeblateApiError extends Error { constructor(error, message, code) { super(message); this.error = error; this.code = code; this.name = 'WeblateApiError'; } } exports.WeblateApiError = WeblateApiError;