@el-j/google-sheet-translations 1.3.3 → 2.0.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 +58 -55
- package/dist/action-entrypoint.d.ts +2 -0
- package/dist/action-entrypoint.d.ts.map +1 -0
- package/dist/esm/index.js +1226 -0
- package/dist/esm/package.json +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1288 -41
- package/dist/utils/dataConverter/findLocalChanges.d.ts +2 -1
- package/dist/utils/dataConverter/findLocalChanges.d.ts.map +1 -1
- package/dist/utils/localeNormalizer.d.ts +31 -0
- package/dist/utils/localeNormalizer.d.ts.map +1 -1
- package/dist/utils/translationHelpers.d.ts +107 -0
- package/dist/utils/translationHelpers.d.ts.map +1 -0
- package/package.json +21 -14
- package/dist/constants.js +0 -9
- package/dist/constants.js.map +0 -1
- package/dist/getSpreadSheetData.js +0 -170
- package/dist/getSpreadSheetData.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
- package/dist/utils/auth.js +0 -23
- package/dist/utils/auth.js.map +0 -1
- package/dist/utils/configurationHandler.js +0 -29
- package/dist/utils/configurationHandler.js.map +0 -1
- package/dist/utils/dataConverter/convertFromDataJsonFormat.js +0 -47
- package/dist/utils/dataConverter/convertFromDataJsonFormat.js.map +0 -1
- package/dist/utils/dataConverter/convertToDataJsonFormat.js +0 -51
- package/dist/utils/dataConverter/convertToDataJsonFormat.js.map +0 -1
- package/dist/utils/dataConverter/findLocalChanges.js +0 -70
- package/dist/utils/dataConverter/findLocalChanges.js.map +0 -1
- package/dist/utils/fileWriter.js +0 -119
- package/dist/utils/fileWriter.js.map +0 -1
- package/dist/utils/getFileLastModified.js +0 -23
- package/dist/utils/getFileLastModified.js.map +0 -1
- package/dist/utils/isDataJsonNewer.js +0 -40
- package/dist/utils/isDataJsonNewer.js.map +0 -1
- package/dist/utils/localeFilter.js +0 -49
- package/dist/utils/localeFilter.js.map +0 -1
- package/dist/utils/localeNormalizer.js +0 -176
- package/dist/utils/localeNormalizer.js.map +0 -1
- package/dist/utils/publicSheetReader.js +0 -109
- package/dist/utils/publicSheetReader.js.map +0 -1
- package/dist/utils/rateLimiter.js +0 -55
- package/dist/utils/rateLimiter.js.map +0 -1
- package/dist/utils/readDataJson.js +0 -29
- package/dist/utils/readDataJson.js.map +0 -1
- package/dist/utils/sheetProcessor.js +0 -121
- package/dist/utils/sheetProcessor.js.map +0 -1
- package/dist/utils/spreadsheetCreator.js +0 -121
- package/dist/utils/spreadsheetCreator.js.map +0 -1
- package/dist/utils/spreadsheetUpdater.js +0 -227
- package/dist/utils/spreadsheetUpdater.js.map +0 -1
- package/dist/utils/syncManager.js +0 -62
- package/dist/utils/syncManager.js.map +0 -1
- package/dist/utils/validateEnv.js +0 -41
- package/dist/utils/validateEnv.js.map +0 -1
- package/dist/utils/wait.js +0 -19
- package/dist/utils/wait.js.map +0 -1
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleBidirectionalSync = handleBidirectionalSync;
|
|
4
|
-
const findLocalChanges_1 = require("./dataConverter/findLocalChanges");
|
|
5
|
-
const spreadsheetUpdater_1 = require("./spreadsheetUpdater");
|
|
6
|
-
const isDataJsonNewer_1 = require("./isDataJsonNewer");
|
|
7
|
-
const readDataJson_1 = require("./readDataJson");
|
|
8
|
-
/**
|
|
9
|
-
* Checks if local changes need to be synced to the spreadsheet and performs the sync if needed
|
|
10
|
-
* @param doc Google Spreadsheet document
|
|
11
|
-
* @param dataJsonPath Path to the languageData.json file
|
|
12
|
-
* @param translationsOutputDir Directory containing translation output files
|
|
13
|
-
* @param syncLocalChanges Whether sync is enabled
|
|
14
|
-
* @param autoTranslate Whether to auto-generate Google Translate formulas
|
|
15
|
-
* @param spreadsheetData Current data from the spreadsheet
|
|
16
|
-
* @param waitSeconds Time to wait between API calls
|
|
17
|
-
* @param localeMapping Mapping from normalized locale codes to original spreadsheet headers
|
|
18
|
-
* @returns Sync operation result
|
|
19
|
-
*/
|
|
20
|
-
async function handleBidirectionalSync(doc, dataJsonPath, translationsOutputDir, syncLocalChanges, autoTranslate, spreadsheetData, waitSeconds, localeMapping = {}) {
|
|
21
|
-
const result = {
|
|
22
|
-
shouldRefresh: false,
|
|
23
|
-
hasChanges: false
|
|
24
|
-
};
|
|
25
|
-
// Check if languageData.json exists and read it
|
|
26
|
-
const localData = (0, readDataJson_1.readDataJson)(dataJsonPath);
|
|
27
|
-
const dataJsonExists = localData !== null;
|
|
28
|
-
// Check if we need to sync local changes to the spreadsheet
|
|
29
|
-
const shouldSyncToSheet = syncLocalChanges &&
|
|
30
|
-
dataJsonExists &&
|
|
31
|
-
(0, isDataJsonNewer_1.isDataJsonNewer)(dataJsonPath, translationsOutputDir);
|
|
32
|
-
if (!shouldSyncToSheet || !localData) {
|
|
33
|
-
return result;
|
|
34
|
-
}
|
|
35
|
-
console.log("Local languageData.json is newer than translation files. Checking for changes...");
|
|
36
|
-
// Find differences between local data and spreadsheet data
|
|
37
|
-
const changes = (0, findLocalChanges_1.findLocalChanges)(localData, spreadsheetData);
|
|
38
|
-
// Check if there are any actual changes
|
|
39
|
-
const hasChanges = Object.keys(changes).length > 0 &&
|
|
40
|
-
Object.keys(changes).some(locale => Object.keys(changes[locale]).length > 0);
|
|
41
|
-
if (!hasChanges) {
|
|
42
|
-
console.log("No local changes found that need to be synced to the spreadsheet.");
|
|
43
|
-
return result;
|
|
44
|
-
}
|
|
45
|
-
const localesCount = Object.keys(changes).length;
|
|
46
|
-
const keysCount = Object.values(changes)
|
|
47
|
-
.flatMap(l => Object.values(l))
|
|
48
|
-
.flatMap(s => Object.keys(s)).length;
|
|
49
|
-
console.log(`Found local changes: ${localesCount} locale(s), ~${keysCount} key(s) to sync to the spreadsheet.`);
|
|
50
|
-
// Update the spreadsheet with the changes, passing the autoTranslate option and locale mapping
|
|
51
|
-
try {
|
|
52
|
-
await (0, spreadsheetUpdater_1.updateSpreadsheetWithLocalChanges)(doc, changes, waitSeconds, autoTranslate, localeMapping);
|
|
53
|
-
result.shouldRefresh = true;
|
|
54
|
-
result.hasChanges = true;
|
|
55
|
-
}
|
|
56
|
-
catch (err) {
|
|
57
|
-
console.error("Failed to sync local changes to spreadsheet:", err);
|
|
58
|
-
// Do not set shouldRefresh; return unchanged result to avoid stale refresh loop
|
|
59
|
-
}
|
|
60
|
-
return result;
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=syncManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"syncManager.js","sourceRoot":"","sources":["../../src/utils/syncManager.ts"],"names":[],"mappings":";;AA2BA,0DA6DC;AAtFD,uEAAoE;AACpE,6DAAyE;AACzE,uDAAoD;AACpD,iDAA8C;AAU9C;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,uBAAuB,CAC5C,GAAsB,EACtB,YAAoB,EACpB,qBAA6B,EAC7B,gBAAyB,EACzB,aAAsB,EACtB,eAAgC,EAChC,WAAmB,EACnB,gBAAwC,EAAE;IAE1C,MAAM,MAAM,GAAe;QAC1B,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,KAAK;KACjB,CAAC;IAEF,gDAAgD;IAChD,MAAM,SAAS,GAAG,IAAA,2BAAY,EAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,cAAc,GAAG,SAAS,KAAK,IAAI,CAAC;IAE1C,4DAA4D;IAC5D,MAAM,iBAAiB,GAAG,gBAAgB;QACzC,cAAc;QACd,IAAA,iCAAe,EAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;IAEtD,IAAI,CAAC,iBAAiB,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC;IACf,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAEhG,2DAA2D;IAC3D,MAAM,OAAO,GAAG,IAAA,mCAAgB,EAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAE7D,wCAAwC;IACxC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAClC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CACvC,CAAC;IAEH,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;QACjF,OAAO,MAAM,CAAC;IACf,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;SACtC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC9B,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,wBAAwB,YAAY,gBAAgB,SAAS,qCAAqC,CAAC,CAAC;IAEhH,+FAA+F;IAC/F,IAAI,CAAC;QACJ,MAAM,IAAA,sDAAiC,EAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;QACjG,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,GAAG,CAAC,CAAC;QACnE,gFAAgF;IACjF,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateCredentials = validateCredentials;
|
|
4
|
-
exports.validateEnv = validateEnv;
|
|
5
|
-
/**
|
|
6
|
-
* Validates that the Google service-account credentials are present.
|
|
7
|
-
* Does NOT require GOOGLE_SPREADSHEET_ID — the caller may create one on first run.
|
|
8
|
-
*/
|
|
9
|
-
function validateCredentials() {
|
|
10
|
-
const requiredVars = ['GOOGLE_CLIENT_EMAIL', 'GOOGLE_PRIVATE_KEY'];
|
|
11
|
-
const missing = requiredVars.filter((v) => !process.env[v]);
|
|
12
|
-
if (missing.length > 0) {
|
|
13
|
-
throw new Error(`Missing required environment variables: ${missing.join(', ')}\n\nMake sure these are set in your .env file or environment.`);
|
|
14
|
-
}
|
|
15
|
-
return {
|
|
16
|
-
GOOGLE_CLIENT_EMAIL: process.env.GOOGLE_CLIENT_EMAIL,
|
|
17
|
-
GOOGLE_PRIVATE_KEY: process.env.GOOGLE_PRIVATE_KEY,
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Validates all three required Google Sheets environment variables.
|
|
22
|
-
* Throws if any are missing.
|
|
23
|
-
*/
|
|
24
|
-
function validateEnv() {
|
|
25
|
-
const requiredVars = [
|
|
26
|
-
'GOOGLE_CLIENT_EMAIL',
|
|
27
|
-
'GOOGLE_PRIVATE_KEY',
|
|
28
|
-
'GOOGLE_SPREADSHEET_ID',
|
|
29
|
-
];
|
|
30
|
-
const missingVars = requiredVars.filter((varName) => !process.env[varName]);
|
|
31
|
-
if (missingVars.length > 0) {
|
|
32
|
-
throw new Error(`Missing required environment variables: ${missingVars.join(', ')}\n\nMake sure these are set in your .env file or environment.`);
|
|
33
|
-
}
|
|
34
|
-
return {
|
|
35
|
-
GOOGLE_CLIENT_EMAIL: process.env.GOOGLE_CLIENT_EMAIL,
|
|
36
|
-
GOOGLE_PRIVATE_KEY: process.env.GOOGLE_PRIVATE_KEY,
|
|
37
|
-
GOOGLE_SPREADSHEET_ID: process.env.GOOGLE_SPREADSHEET_ID,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
exports.default = validateEnv;
|
|
41
|
-
//# sourceMappingURL=validateEnv.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateEnv.js","sourceRoot":"","sources":["../../src/utils/validateEnv.ts"],"names":[],"mappings":";;AAMA,kDAYC;AAMD,kCAiBC;AAvCD;;;GAGG;AACH,SAAgB,mBAAmB;IAClC,MAAM,YAAY,GAAG,CAAC,qBAAqB,EAAE,oBAAoB,CAAU,CAAC;IAC5E,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACd,2CAA2C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,+DAA+D,CAC5H,CAAC;IACH,CAAC;IACD,OAAO;QACN,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAA6B;QAC9D,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAA4B;KAC5D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW;IAC1B,MAAM,YAAY,GAA+B;QAChD,qBAAqB;QACrB,oBAAoB;QACpB,uBAAuB;KACvB,CAAC;IACF,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACd,2CAA2C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,+DAA+D,CAChI,CAAC;IACH,CAAC;IACD,OAAO;QACN,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAA6B;QAC9D,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAA4B;QAC5D,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAA+B;KAClE,CAAC;AACH,CAAC;AAED,kBAAe,WAAW,CAAC"}
|
package/dist/utils/wait.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.wait = wait;
|
|
4
|
-
const promises_1 = require("node:timers/promises");
|
|
5
|
-
/**
|
|
6
|
-
* Creates a promise that resolves after a specified number of seconds.
|
|
7
|
-
* Uses the built-in `node:timers/promises` API which is designed for
|
|
8
|
-
* use with `await` and keeps the event loop alive until the delay expires.
|
|
9
|
-
*
|
|
10
|
-
* @param seconds - The number of seconds to wait
|
|
11
|
-
* @param reason - A description of why we are waiting (for logging)
|
|
12
|
-
* @returns A promise that resolves after the specified delay
|
|
13
|
-
*/
|
|
14
|
-
function wait(seconds, reason) {
|
|
15
|
-
console.log('wait', seconds, reason);
|
|
16
|
-
return (0, promises_1.setTimeout)(seconds * 1000);
|
|
17
|
-
}
|
|
18
|
-
exports.default = wait;
|
|
19
|
-
//# sourceMappingURL=wait.js.map
|
package/dist/utils/wait.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../src/utils/wait.ts"],"names":[],"mappings":";;AAWA,oBAGC;AAdD,mDAA2D;AAE3D;;;;;;;;GAQG;AACH,SAAgB,IAAI,CAAC,OAAe,EAAE,MAAc;IACnD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,IAAA,qBAAK,EAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,kBAAe,IAAI,CAAC"}
|