@el-j/google-sheet-translations 1.0.2 → 1.2.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 +129 -1
- package/dist/getSpreadSheetData.d.ts.map +1 -1
- package/dist/getSpreadSheetData.js +124 -75
- package/dist/getSpreadSheetData.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/auth.js +1 -1
- package/dist/utils/auth.js.map +1 -1
- package/dist/utils/configurationHandler.d.ts +44 -0
- package/dist/utils/configurationHandler.d.ts.map +1 -1
- package/dist/utils/configurationHandler.js +8 -2
- package/dist/utils/configurationHandler.js.map +1 -1
- package/dist/utils/publicSheetReader.d.ts +17 -0
- package/dist/utils/publicSheetReader.d.ts.map +1 -0
- package/dist/utils/publicSheetReader.js +106 -0
- package/dist/utils/publicSheetReader.js.map +1 -0
- package/dist/utils/rateLimiter.d.ts +15 -0
- package/dist/utils/rateLimiter.d.ts.map +1 -0
- package/dist/utils/rateLimiter.js +55 -0
- package/dist/utils/rateLimiter.js.map +1 -0
- package/dist/utils/sheetProcessor.d.ts +20 -6
- package/dist/utils/sheetProcessor.d.ts.map +1 -1
- package/dist/utils/sheetProcessor.js +54 -19
- package/dist/utils/sheetProcessor.js.map +1 -1
- package/dist/utils/spreadsheetCreator.d.ts +23 -0
- package/dist/utils/spreadsheetCreator.d.ts.map +1 -0
- package/dist/utils/spreadsheetCreator.js +121 -0
- package/dist/utils/spreadsheetCreator.js.map +1 -0
- package/dist/utils/spreadsheetUpdater.d.ts +1 -1
- package/dist/utils/spreadsheetUpdater.d.ts.map +1 -1
- package/dist/utils/spreadsheetUpdater.js +8 -14
- package/dist/utils/spreadsheetUpdater.js.map +1 -1
- package/dist/utils/validateEnv.d.ts +7 -3
- package/dist/utils/validateEnv.d.ts.map +1 -1
- package/dist/utils/validateEnv.js +22 -10
- package/dist/utils/validateEnv.js.map +1 -1
- package/dist/utils/wait.d.ts +5 -2
- package/dist/utils/wait.d.ts.map +1 -1
- package/dist/utils/wait.js +8 -10
- package/dist/utils/wait.js.map +1 -1
- package/package.json +92 -91
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.updateSpreadsheetWithLocalChanges = updateSpreadsheetWithLocalChanges;
|
|
4
|
-
const
|
|
4
|
+
const rateLimiter_1 = require("./rateLimiter");
|
|
5
5
|
const localeNormalizer_1 = require("./localeNormalizer");
|
|
6
6
|
/** Converts a 0-based column index to a spreadsheet column letter (A, B, ..., Z, AA, AB, ...) */
|
|
7
7
|
function columnIndexToLetter(index) {
|
|
@@ -29,13 +29,14 @@ function columnIndexToLetter(index) {
|
|
|
29
29
|
*
|
|
30
30
|
* @param doc - The Google Spreadsheet instance
|
|
31
31
|
* @param changes - Object containing new keys to add to the spreadsheet
|
|
32
|
-
* @param waitSeconds -
|
|
32
|
+
* @param waitSeconds - Base back-off delay in seconds for retrying rate-limited API calls
|
|
33
33
|
* @param autoTranslate - Whether to add Google Translate formulas for missing translations (default: false)
|
|
34
34
|
* @param localeMapping - Mapping from normalized locale codes to original spreadsheet headers
|
|
35
35
|
* @returns Promise that resolves when the update is complete
|
|
36
36
|
*/
|
|
37
37
|
async function updateSpreadsheetWithLocalChanges(doc, changes, waitSeconds, autoTranslate = false, localeMapping = {}) {
|
|
38
38
|
console.log("Updating spreadsheet with local changes...");
|
|
39
|
+
const baseDelayMs = waitSeconds * 1000;
|
|
39
40
|
// Process each sheet in the changes object
|
|
40
41
|
for (const sheetTitle of new Set(Object.values(changes).flatMap(locale => Object.keys(locale)))) {
|
|
41
42
|
console.log(`Processing sheet: ${sheetTitle}`);
|
|
@@ -44,9 +45,8 @@ async function updateSpreadsheetWithLocalChanges(doc, changes, waitSeconds, auto
|
|
|
44
45
|
console.warn(`Sheet "${sheetTitle}" not found in the document, cannot update`);
|
|
45
46
|
continue;
|
|
46
47
|
}
|
|
47
|
-
// Get all rows from the sheet
|
|
48
|
-
await (0,
|
|
49
|
-
const rows = await sheet.getRows();
|
|
48
|
+
// Get all rows from the sheet (retries automatically on rate-limit)
|
|
49
|
+
const rows = await (0, rateLimiter_1.withRetry)(() => sheet.getRows(), `getRows: ${sheetTitle}`, baseDelayMs);
|
|
50
50
|
if (!rows || rows.length === 0) {
|
|
51
51
|
console.warn(`No rows found in sheet "${sheetTitle}", cannot update`);
|
|
52
52
|
continue;
|
|
@@ -119,9 +119,8 @@ async function updateSpreadsheetWithLocalChanges(doc, changes, waitSeconds, auto
|
|
|
119
119
|
if (localeHeader) {
|
|
120
120
|
// Use set() method instead of direct property assignment to avoid TS errors
|
|
121
121
|
row.set(localeHeader, String(localeData[key]));
|
|
122
|
-
await (0, wait_1.wait)(waitSeconds / 2, `before updating row ${rowIndex}`);
|
|
123
122
|
try {
|
|
124
|
-
await row.save();
|
|
123
|
+
await (0, rateLimiter_1.withRetry)(() => row.save(), `save row ${rowIndex} in ${sheetTitle}`, baseDelayMs);
|
|
125
124
|
}
|
|
126
125
|
catch (err) {
|
|
127
126
|
console.error(`Failed to save row for key "${keyLower}" in sheet "${sheetTitle}":`, err);
|
|
@@ -178,18 +177,13 @@ async function updateSpreadsheetWithLocalChanges(doc, changes, waitSeconds, auto
|
|
|
178
177
|
}
|
|
179
178
|
}
|
|
180
179
|
const newRows = Array.from(newKeys.values());
|
|
181
|
-
|
|
182
|
-
// Add new rows in chunks to avoid rate limiting
|
|
180
|
+
// Add new rows in chunks to keep individual requests manageable
|
|
183
181
|
const CHUNK_SIZE = 5;
|
|
184
182
|
for (let i = 0; i < newRows.length; i += CHUNK_SIZE) {
|
|
185
183
|
const chunk = newRows.slice(i, i + CHUNK_SIZE);
|
|
186
|
-
await sheet.addRows(chunk);
|
|
187
|
-
if (i + CHUNK_SIZE < newRows.length) {
|
|
188
|
-
await (0, wait_1.wait)(waitSeconds, `after adding ${chunk.length} rows (chunk ${i / CHUNK_SIZE + 1})`);
|
|
189
|
-
}
|
|
184
|
+
await (0, rateLimiter_1.withRetry)(() => sheet.addRows(chunk), `addRows chunk ${Math.floor(i / CHUNK_SIZE) + 1} in ${sheetTitle}`, baseDelayMs);
|
|
190
185
|
}
|
|
191
186
|
}
|
|
192
|
-
await (0, wait_1.wait)(waitSeconds, `after updating sheet: ${sheetTitle}`);
|
|
193
187
|
}
|
|
194
188
|
console.log("Finished updating spreadsheet with local changes.");
|
|
195
189
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spreadsheetUpdater.js","sourceRoot":"","sources":["../../src/utils/spreadsheetUpdater.ts"],"names":[],"mappings":";;AAqCA,
|
|
1
|
+
{"version":3,"file":"spreadsheetUpdater.js","sourceRoot":"","sources":["../../src/utils/spreadsheetUpdater.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import type { GoogleEnvVars } from "../types";
|
|
2
2
|
/**
|
|
3
|
-
* Validates
|
|
4
|
-
*
|
|
5
|
-
|
|
3
|
+
* Validates that the Google service-account credentials are present.
|
|
4
|
+
* Does NOT require GOOGLE_SPREADSHEET_ID — the caller may create one on first run.
|
|
5
|
+
*/
|
|
6
|
+
export declare function validateCredentials(): Pick<GoogleEnvVars, 'GOOGLE_CLIENT_EMAIL' | 'GOOGLE_PRIVATE_KEY'>;
|
|
7
|
+
/**
|
|
8
|
+
* Validates all three required Google Sheets environment variables.
|
|
9
|
+
* Throws if any are missing.
|
|
6
10
|
*/
|
|
7
11
|
export declare function validateEnv(): GoogleEnvVars;
|
|
8
12
|
export default validateEnv;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateEnv.d.ts","sourceRoot":"","sources":["../../src/utils/validateEnv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C
|
|
1
|
+
{"version":3,"file":"validateEnv.d.ts","sourceRoot":"","sources":["../../src/utils/validateEnv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAAC,aAAa,EAAE,qBAAqB,GAAG,oBAAoB,CAAC,CAYvG;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,aAAa,CAiB3C;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -1,24 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateCredentials = validateCredentials;
|
|
3
4
|
exports.validateEnv = validateEnv;
|
|
4
5
|
/**
|
|
5
|
-
* Validates
|
|
6
|
-
*
|
|
7
|
-
|
|
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.
|
|
8
23
|
*/
|
|
9
24
|
function validateEnv() {
|
|
10
|
-
// Check for required environment variables
|
|
11
25
|
const requiredVars = [
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
26
|
+
'GOOGLE_CLIENT_EMAIL',
|
|
27
|
+
'GOOGLE_PRIVATE_KEY',
|
|
28
|
+
'GOOGLE_SPREADSHEET_ID',
|
|
15
29
|
];
|
|
16
30
|
const missingVars = requiredVars.filter((varName) => !process.env[varName]);
|
|
17
31
|
if (missingVars.length > 0) {
|
|
18
|
-
throw new Error(`Missing required environment variables: ${missingVars.join(
|
|
19
|
-
\nMake sure these are set in your .env file or environment.`);
|
|
32
|
+
throw new Error(`Missing required environment variables: ${missingVars.join(', ')}\n\nMake sure these are set in your .env file or environment.`);
|
|
20
33
|
}
|
|
21
|
-
// Return validated environment variables
|
|
22
34
|
return {
|
|
23
35
|
GOOGLE_CLIENT_EMAIL: process.env.GOOGLE_CLIENT_EMAIL,
|
|
24
36
|
GOOGLE_PRIVATE_KEY: process.env.GOOGLE_PRIVATE_KEY,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateEnv.js","sourceRoot":"","sources":["../../src/utils/validateEnv.ts"],"names":[],"mappings":";;
|
|
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.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Creates a promise that resolves after a specified number of seconds
|
|
2
|
+
* Creates a promise that resolves after a specified number of seconds.
|
|
3
|
+
* Uses the built-in `node:timers/promises` API which is designed for
|
|
4
|
+
* use with `await` and keeps the event loop alive until the delay expires.
|
|
5
|
+
*
|
|
3
6
|
* @param seconds - The number of seconds to wait
|
|
4
|
-
* @param reason
|
|
7
|
+
* @param reason - A description of why we are waiting (for logging)
|
|
5
8
|
* @returns A promise that resolves after the specified delay
|
|
6
9
|
*/
|
|
7
10
|
export declare function wait(seconds: number, reason: string): Promise<void>;
|
package/dist/utils/wait.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../src/utils/wait.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../src/utils/wait.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE;AAED,eAAe,IAAI,CAAC"}
|
package/dist/utils/wait.js
CHANGED
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.wait = wait;
|
|
4
|
+
const promises_1 = require("node:timers/promises");
|
|
4
5
|
/**
|
|
5
|
-
* Creates a promise that resolves after a specified number of seconds
|
|
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
|
+
*
|
|
6
10
|
* @param seconds - The number of seconds to wait
|
|
7
|
-
* @param reason
|
|
11
|
+
* @param reason - A description of why we are waiting (for logging)
|
|
8
12
|
* @returns A promise that resolves after the specified delay
|
|
9
13
|
*/
|
|
10
14
|
function wait(seconds, reason) {
|
|
11
|
-
console.log(
|
|
12
|
-
return
|
|
13
|
-
const timeoutId = setTimeout(() => {
|
|
14
|
-
resolve();
|
|
15
|
-
}, seconds * 1000);
|
|
16
|
-
// This ensures the timeout is properly cleared if the promise is garbage collected
|
|
17
|
-
timeoutId.unref?.();
|
|
18
|
-
});
|
|
15
|
+
console.log('wait', seconds, reason);
|
|
16
|
+
return (0, promises_1.setTimeout)(seconds * 1000);
|
|
19
17
|
}
|
|
20
18
|
exports.default = wait;
|
|
21
19
|
//# sourceMappingURL=wait.js.map
|
package/dist/utils/wait.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../src/utils/wait.ts"],"names":[],"mappings":";;
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,93 +1,94 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
2
|
+
"name": "@el-j/google-sheet-translations",
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "A package to manage translations stored in Google Spreadsheets",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"require": "./dist/index.js",
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"LICENSE",
|
|
21
|
+
"README.md"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc",
|
|
25
|
+
"clean": "rimraf dist",
|
|
26
|
+
"prebuild": "npm run clean",
|
|
27
|
+
"prepare": "npm run build",
|
|
28
|
+
"test": "jest",
|
|
29
|
+
"lint": "eslint src/ --ext .ts --max-warnings 0",
|
|
30
|
+
"dev": "tsc --watch",
|
|
31
|
+
"release": "semantic-release",
|
|
32
|
+
"release:dry-run": "semantic-release --dry-run",
|
|
33
|
+
"docs:dev": "vitepress dev website",
|
|
34
|
+
"docs:build": "vitepress build website",
|
|
35
|
+
"docs:preview": "vitepress preview website",
|
|
36
|
+
"test:integration": "INTEGRATION=true jest --testPathPatterns=integration --testTimeout=60000 --coverage=false"
|
|
37
|
+
},
|
|
38
|
+
"keywords": [
|
|
39
|
+
"google-sheets",
|
|
40
|
+
"translations",
|
|
41
|
+
"i18n",
|
|
42
|
+
"nextjs",
|
|
43
|
+
"typescript",
|
|
44
|
+
"auto-translation",
|
|
45
|
+
"machine-translation",
|
|
46
|
+
"google-translate",
|
|
47
|
+
"localization",
|
|
48
|
+
"internationalization",
|
|
49
|
+
"spreadsheet",
|
|
50
|
+
"google-api",
|
|
51
|
+
"google-spreadsheet"
|
|
52
|
+
],
|
|
53
|
+
"author": "el-j",
|
|
54
|
+
"license": "MIT",
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"google-auth-library": "^10.1.0",
|
|
57
|
+
"google-spreadsheet": "^4.1.5"
|
|
58
|
+
},
|
|
59
|
+
"peerDependencies": {
|
|
60
|
+
"typescript": ">=4.0.0"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@eslint/js": "^10.0.1",
|
|
64
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
65
|
+
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
66
|
+
"@semantic-release/git": "^10.0.1",
|
|
67
|
+
"@semantic-release/github": "^12.0.6",
|
|
68
|
+
"@semantic-release/npm": "^13.1.5",
|
|
69
|
+
"@semantic-release/release-notes-generator": "^14.1.0",
|
|
70
|
+
"@types/jest": "^30.0.0",
|
|
71
|
+
"@types/node": "^24.0.15",
|
|
72
|
+
"@typescript-eslint/eslint-plugin": "^8.56.1",
|
|
73
|
+
"@typescript-eslint/parser": "^8.56.1",
|
|
74
|
+
"conventional-changelog-conventionalcommits": "^9.3.0",
|
|
75
|
+
"dotenv": "17.2.0",
|
|
76
|
+
"eslint": "^10.0.3",
|
|
77
|
+
"jest": "^30.0.4",
|
|
78
|
+
"jest-mock-extended": "^4.0.0",
|
|
79
|
+
"rimraf": "^6.0.1",
|
|
80
|
+
"semantic-release": "^25.0.3",
|
|
81
|
+
"ts-jest": "^29.4.0",
|
|
82
|
+
"ts-node": "^10.9.2",
|
|
83
|
+
"typescript": "^5.8.3",
|
|
84
|
+
"vitepress": "^1.6.4"
|
|
85
|
+
},
|
|
86
|
+
"engines": {
|
|
87
|
+
"node": ">=18.0.0"
|
|
88
|
+
},
|
|
89
|
+
"overrides": {
|
|
90
|
+
"google-spreadsheet": {
|
|
91
|
+
"google-auth-library": "^10.1.0"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
93
94
|
}
|