@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.
Files changed (60) hide show
  1. package/README.md +58 -55
  2. package/dist/action-entrypoint.d.ts +2 -0
  3. package/dist/action-entrypoint.d.ts.map +1 -0
  4. package/dist/esm/index.js +1226 -0
  5. package/dist/esm/package.json +1 -0
  6. package/dist/index.d.ts +8 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1288 -41
  9. package/dist/utils/dataConverter/findLocalChanges.d.ts +2 -1
  10. package/dist/utils/dataConverter/findLocalChanges.d.ts.map +1 -1
  11. package/dist/utils/localeNormalizer.d.ts +31 -0
  12. package/dist/utils/localeNormalizer.d.ts.map +1 -1
  13. package/dist/utils/translationHelpers.d.ts +107 -0
  14. package/dist/utils/translationHelpers.d.ts.map +1 -0
  15. package/package.json +21 -14
  16. package/dist/constants.js +0 -9
  17. package/dist/constants.js.map +0 -1
  18. package/dist/getSpreadSheetData.js +0 -170
  19. package/dist/getSpreadSheetData.js.map +0 -1
  20. package/dist/index.js.map +0 -1
  21. package/dist/types.js +0 -3
  22. package/dist/types.js.map +0 -1
  23. package/dist/utils/auth.js +0 -23
  24. package/dist/utils/auth.js.map +0 -1
  25. package/dist/utils/configurationHandler.js +0 -29
  26. package/dist/utils/configurationHandler.js.map +0 -1
  27. package/dist/utils/dataConverter/convertFromDataJsonFormat.js +0 -47
  28. package/dist/utils/dataConverter/convertFromDataJsonFormat.js.map +0 -1
  29. package/dist/utils/dataConverter/convertToDataJsonFormat.js +0 -51
  30. package/dist/utils/dataConverter/convertToDataJsonFormat.js.map +0 -1
  31. package/dist/utils/dataConverter/findLocalChanges.js +0 -70
  32. package/dist/utils/dataConverter/findLocalChanges.js.map +0 -1
  33. package/dist/utils/fileWriter.js +0 -119
  34. package/dist/utils/fileWriter.js.map +0 -1
  35. package/dist/utils/getFileLastModified.js +0 -23
  36. package/dist/utils/getFileLastModified.js.map +0 -1
  37. package/dist/utils/isDataJsonNewer.js +0 -40
  38. package/dist/utils/isDataJsonNewer.js.map +0 -1
  39. package/dist/utils/localeFilter.js +0 -49
  40. package/dist/utils/localeFilter.js.map +0 -1
  41. package/dist/utils/localeNormalizer.js +0 -176
  42. package/dist/utils/localeNormalizer.js.map +0 -1
  43. package/dist/utils/publicSheetReader.js +0 -109
  44. package/dist/utils/publicSheetReader.js.map +0 -1
  45. package/dist/utils/rateLimiter.js +0 -55
  46. package/dist/utils/rateLimiter.js.map +0 -1
  47. package/dist/utils/readDataJson.js +0 -29
  48. package/dist/utils/readDataJson.js.map +0 -1
  49. package/dist/utils/sheetProcessor.js +0 -121
  50. package/dist/utils/sheetProcessor.js.map +0 -1
  51. package/dist/utils/spreadsheetCreator.js +0 -121
  52. package/dist/utils/spreadsheetCreator.js.map +0 -1
  53. package/dist/utils/spreadsheetUpdater.js +0 -227
  54. package/dist/utils/spreadsheetUpdater.js.map +0 -1
  55. package/dist/utils/syncManager.js +0 -62
  56. package/dist/utils/syncManager.js.map +0 -1
  57. package/dist/utils/validateEnv.js +0 -41
  58. package/dist/utils/validateEnv.js.map +0 -1
  59. package/dist/utils/wait.js +0 -19
  60. 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"}
@@ -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
@@ -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"}