48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
export class Poeditor {
|
|
private static readonly baseUrl = 'https://api.poeditor.com/v2/'
|
|
private static readonly projectId = '316051'
|
|
private static readonly apiKey = process.env.API_KEY ?? throwError('API_KEY is required')
|
|
|
|
static async downloadTerms(): Promise<Term[]> {
|
|
return await Poeditor.makeCall('terms/list', [])
|
|
.then(response => response.result.terms)
|
|
}
|
|
|
|
static async updateTerms(terms: Term[]): Promise<any> {
|
|
return await Poeditor.makeCall('terms/update', [['data', JSON.stringify(terms)]])
|
|
}
|
|
|
|
static async addTerms(terms: Term[]): Promise<any> {
|
|
return await Poeditor.makeCall('terms/add', [['data', JSON.stringify(terms)]])
|
|
}
|
|
|
|
private static async makeCall(apiPath: string, params: [string, any][]): Promise<any> {
|
|
const body = new FormData()
|
|
body.append('api_token', Poeditor.apiKey)
|
|
body.append('id', Poeditor.projectId)
|
|
for (const param of params) {
|
|
body.append(param[0], param[1])
|
|
}
|
|
return await fetch(Poeditor.baseUrl + apiPath, {
|
|
method: 'POST',
|
|
body: body,
|
|
})
|
|
.then(async (response) => {
|
|
let json = await response.json();
|
|
// console.log(json)
|
|
return json;
|
|
})
|
|
}
|
|
}
|
|
|
|
export interface Term {
|
|
term: string
|
|
context?: string
|
|
new_context?: string
|
|
tags?: string[]
|
|
}
|
|
|
|
function throwError(message: string): never {
|
|
throw new Error(message)
|
|
}
|