feat: Crowdin integration scripts/actions (#40657)
This commit is contained in:
86
tools/crowdin/utils/dirs.js
Normal file
86
tools/crowdin/utils/dirs.js
Normal file
@@ -0,0 +1,86 @@
|
||||
const makeRequest = require('./make-request');
|
||||
const delay = require('./delay');
|
||||
const authHeader = require('./auth-header');
|
||||
|
||||
const getDirs = async projectId => {
|
||||
let headers = { ...authHeader };
|
||||
let done = false;
|
||||
let offset = 0;
|
||||
let files = [];
|
||||
while (!done) {
|
||||
const endPoint = `projects/${projectId}/directories?limit=500&offset=${offset}`;
|
||||
await delay(1000);
|
||||
const response = await makeRequest({
|
||||
method: 'get',
|
||||
endPoint,
|
||||
headers
|
||||
});
|
||||
if (response.data) {
|
||||
if (response.data.length) {
|
||||
files = [...files, ...response.data];
|
||||
offset += 500;
|
||||
} else {
|
||||
done = true;
|
||||
return files;
|
||||
}
|
||||
} else {
|
||||
const { error } = response;
|
||||
console.log(error.errorcode);
|
||||
console.log(error.messsage);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
const addDir = async (projectId, dirName, parentDirId) => {
|
||||
let headers = { ...authHeader };
|
||||
const endPoint = `projects/${projectId}/directories`;
|
||||
let body = {
|
||||
name: dirName
|
||||
};
|
||||
if (parentDirId) {
|
||||
body = { ...body, directoryId: parentDirId };
|
||||
}
|
||||
|
||||
const response = await makeRequest({
|
||||
method: 'post',
|
||||
endPoint,
|
||||
headers,
|
||||
body
|
||||
});
|
||||
return response;
|
||||
};
|
||||
|
||||
const createDirs = async (crowdinDirs, dirPath) => {
|
||||
// superParent is the top level directory on crowdin
|
||||
const superParent = crowdinDirs.find(dir => !dir.data.directoryId);
|
||||
let lastParentId = superParent.data.id;
|
||||
|
||||
const splitDirPath = dirPath.split('/');
|
||||
splitDirPath.shift();
|
||||
|
||||
// we are assuming that the first directory in 'newFile' is the same as the superParent
|
||||
// maybe throw a check in here to verify that's true
|
||||
const findCurrDir = (directory, crowdinDirs) => {
|
||||
return crowdinDirs.find(({ data: { name, directoryId } }) => {
|
||||
return name === directory && directoryId === lastParentId;
|
||||
});
|
||||
};
|
||||
|
||||
for (let directory of splitDirPath) {
|
||||
const currentDirectory = findCurrDir(directory, crowdinDirs);
|
||||
if (!currentDirectory) {
|
||||
const response = await addDir(10, directory, lastParentId);
|
||||
lastParentId = response.data.id;
|
||||
} else {
|
||||
lastParentId = currentDirectory.data.id;
|
||||
}
|
||||
}
|
||||
return lastParentId;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
addDir,
|
||||
getDirs,
|
||||
createDirs
|
||||
};
|
Reference in New Issue
Block a user