~repos /only-bible-app

#kotlin#android#ios

GIT_CONFIG_PARAMETERS="'http.version=HTTP/1.1'" git clone https://git.pyrossh.dev/only-bible-app.git
Discussions: https://groups.google.com/g/rust-embed-devs

The only bible app you will ever need. No ads. No in-app purchases. No distractions.


.gitignore CHANGED
@@ -11,4 +11,5 @@ ui
11
11
  .flutter-plugins-dependencies
12
12
  .env
13
13
  .idea
14
- test/failures
14
+ test/failures
15
+ scripts/node_modules
scripts/addBookNames.js ADDED
@@ -0,0 +1,33 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+
4
+ const d = JSON.parse(fs.readFileSync(path.join(import.meta.dirname, "headings.json"), "utf8"));
5
+ const filesDir = path.join(import.meta.dirname, "files");
6
+ const txtFiles = fs.readdirSync(filesDir).filter((f) => f.endsWith(".txt"));
7
+
8
+ // Build bookIndex -> bookName for each language
9
+ const langBookNames = {};
10
+ for (const f of txtFiles) {
11
+ const lang = f.replace(".txt", "");
12
+ const content = fs.readFileSync(path.join(filesDir, f), "utf8");
13
+ const names = {};
14
+ for (const line of content.split("\n")) {
15
+ if (!line.trim()) continue;
16
+ const parts = line.split("|");
17
+ const bookIdx = parseInt(parts[1]);
18
+ if (!(bookIdx in names)) names[bookIdx] = parts[0];
19
+ }
20
+ langBookNames[lang] = names;
21
+ }
22
+
23
+ // Update each book's bookName with all languages
24
+ for (let i = 0; i < d.length; i++) {
25
+ for (const [lang, names] of Object.entries(langBookNames)) {
26
+ if (names[i]) {
27
+ d[i].bookName[lang] = names[i];
28
+ }
29
+ }
30
+ }
31
+
32
+ fs.writeFileSync(path.join(import.meta.dirname, "headings.json"), JSON.stringify(d, null, 2) + "\n");
33
+ console.log(`Done — added book names from ${txtFiles.length} languages`);
scripts/main.js DELETED
@@ -1,37 +0,0 @@
1
- import fs from "node:fs";
2
- import { v2 } from '@google-cloud/translate';
3
-
4
- const translate = new v2.Translate({
5
- key: "AIzaSyAYS5LdP5_i2AxIJprVQFYzb-7Nk2iJfv8",
6
- });
7
-
8
- const filename = "Telugu"
9
- const code = "te"
10
- const outputLines = [];
11
- const data = fs.readFileSync(`../assets/bibles/${filename}.txt`, "utf8");
12
- const lines = data.split("\n");
13
- try {
14
- for (const line of lines) {
15
- if (line === "") {
16
- break;
17
- }
18
- const arr = line.split("|");
19
- const book = parseInt(arr[0]);
20
- const chapter = parseInt(arr[1]);
21
- const verseNo = parseInt(arr[2]);
22
- let heading = arr[3];
23
- const verseText = arr.slice(4, arr.length).join("|");
24
- if (heading) {
25
- const [translation] = await translate.translate(heading, code);
26
- heading = translation;
27
- console.log(book, chapter, heading);
28
- }
29
- outputLines.push(`${book}|${chapter}|${verseNo}|${heading}|${verseText}`);
30
- }
31
- } catch (err) {
32
- console.log("err", err);
33
- }
34
-
35
- const outputText = outputLines.join("\n")
36
-
37
- fs.writeFileSync(`../assets/bibles/${filename}2.txt`, outputText, "utf8")
scripts/main2.js DELETED
@@ -1,34 +0,0 @@
1
- import fs from 'node:fs/promises';
2
-
3
- const filename = 'English';
4
- const outputLines = [];
5
- const data = await fs.readFile(`../assets/bibles/${filename}.txt`, 'utf8');
6
- const lines = data.split('\n');
7
- const outputMap = {}
8
- try {
9
- for (const line of lines) {
10
- if (line === '') {
11
- break;
12
- }
13
- const arr = line.split('|');
14
- const book = parseInt(arr[0]);
15
- const chapter = parseInt(arr[1]);
16
- const verseNo = parseInt(arr[2]);
17
- const heading = arr[3];
18
- const verseText = arr.slice(4, arr.length).join("|");
19
- if (!outputMap[book]) {
20
- outputMap[book] = {}
21
- }
22
- if (!outputMap[book][chapter]) {
23
- outputMap[book][chapter] = {};
24
- }
25
- outputMap[book][chapter][verseNo] = 0
26
- // const data = await getVerses(book, chapter);
27
- // const verseText = data.verses.find((v) => v.chapter === chapter + 1 && v.verse === verseNo + 1).text;
28
- // outputLines.push(`${booksNames[book].trim()}|${book}|${chapter}|${verseNo}|${heading}|${verseText}`);
29
- }
30
- } catch (err) {
31
- console.log('err', err);
32
- }
33
-
34
- await fs.writeFile(`./outputMap.json`, JSON.stringify(outputMap, null, null), 'utf8');
scripts/package-lock.json DELETED
@@ -1,1076 +0,0 @@
1
- {
2
- "name": "scripts",
3
- "lockfileVersion": 3,
4
- "requires": true,
5
- "packages": {
6
- "": {
7
- "dependencies": {
8
- "@google-cloud/translate": "^8.3.0",
9
- "@vitalets/google-translate-api": "^9.2.0",
10
- "axios": "^1.7.2",
11
- "uuid": "^9.0.1"
12
- }
13
- },
14
- "node_modules/@google-cloud/common": {
15
- "version": "5.0.2",
16
- "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-5.0.2.tgz",
17
- "integrity": "sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA==",
18
- "dependencies": {
19
- "@google-cloud/projectify": "^4.0.0",
20
- "@google-cloud/promisify": "^4.0.0",
21
- "arrify": "^2.0.1",
22
- "duplexify": "^4.1.1",
23
- "extend": "^3.0.2",
24
- "google-auth-library": "^9.0.0",
25
- "html-entities": "^2.5.2",
26
- "retry-request": "^7.0.0",
27
- "teeny-request": "^9.0.0"
28
- },
29
- "engines": {
30
- "node": ">=14.0.0"
31
- }
32
- },
33
- "node_modules/@google-cloud/projectify": {
34
- "version": "4.0.0",
35
- "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz",
36
- "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==",
37
- "engines": {
38
- "node": ">=14.0.0"
39
- }
40
- },
41
- "node_modules/@google-cloud/promisify": {
42
- "version": "4.0.0",
43
- "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz",
44
- "integrity": "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==",
45
- "engines": {
46
- "node": ">=14"
47
- }
48
- },
49
- "node_modules/@google-cloud/translate": {
50
- "version": "8.3.0",
51
- "resolved": "https://registry.npmjs.org/@google-cloud/translate/-/translate-8.3.0.tgz",
52
- "integrity": "sha512-c9VXb0V/OzusaHMPh/hjAmaxPZXtNMEr1cRRHd2rRgsGZLSde7vU8rIsD9F959O7US4uFSkLxqjiyqYm1ConJA==",
53
- "dependencies": {
54
- "@google-cloud/common": "^5.0.0",
55
- "@google-cloud/promisify": "^4.0.0",
56
- "arrify": "^2.0.0",
57
- "extend": "^3.0.2",
58
- "google-gax": "^4.0.3",
59
- "is-html": "^2.0.0"
60
- },
61
- "engines": {
62
- "node": ">=14.0.0"
63
- }
64
- },
65
- "node_modules/@grpc/grpc-js": {
66
- "version": "1.10.8",
67
- "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.10.8.tgz",
68
- "integrity": "sha512-vYVqYzHicDqyKB+NQhAc54I1QWCBLCrYG6unqOIcBTHx+7x8C9lcoLj3KVJXs2VB4lUbpWY+Kk9NipcbXYWmvg==",
69
- "dependencies": {
70
- "@grpc/proto-loader": "^0.7.13",
71
- "@js-sdsl/ordered-map": "^4.4.2"
72
- },
73
- "engines": {
74
- "node": ">=12.10.0"
75
- }
76
- },
77
- "node_modules/@grpc/proto-loader": {
78
- "version": "0.7.13",
79
- "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz",
80
- "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==",
81
- "dependencies": {
82
- "lodash.camelcase": "^4.3.0",
83
- "long": "^5.0.0",
84
- "protobufjs": "^7.2.5",
85
- "yargs": "^17.7.2"
86
- },
87
- "bin": {
88
- "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js"
89
- },
90
- "engines": {
91
- "node": ">=6"
92
- }
93
- },
94
- "node_modules/@js-sdsl/ordered-map": {
95
- "version": "4.4.2",
96
- "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz",
97
- "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==",
98
- "funding": {
99
- "type": "opencollective",
100
- "url": "https://opencollective.com/js-sdsl"
101
- }
102
- },
103
- "node_modules/@protobufjs/aspromise": {
104
- "version": "1.1.2",
105
- "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
106
- "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="
107
- },
108
- "node_modules/@protobufjs/base64": {
109
- "version": "1.1.2",
110
- "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
111
- "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
112
- },
113
- "node_modules/@protobufjs/codegen": {
114
- "version": "2.0.4",
115
- "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
116
- "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
117
- },
118
- "node_modules/@protobufjs/eventemitter": {
119
- "version": "1.1.0",
120
- "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
121
- "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="
122
- },
123
- "node_modules/@protobufjs/fetch": {
124
- "version": "1.1.0",
125
- "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
126
- "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
127
- "dependencies": {
128
- "@protobufjs/aspromise": "^1.1.1",
129
- "@protobufjs/inquire": "^1.1.0"
130
- }
131
- },
132
- "node_modules/@protobufjs/float": {
133
- "version": "1.0.2",
134
- "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
135
- "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="
136
- },
137
- "node_modules/@protobufjs/inquire": {
138
- "version": "1.1.0",
139
- "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
140
- "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="
141
- },
142
- "node_modules/@protobufjs/path": {
143
- "version": "1.1.2",
144
- "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
145
- "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="
146
- },
147
- "node_modules/@protobufjs/pool": {
148
- "version": "1.1.0",
149
- "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
150
- "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="
151
- },
152
- "node_modules/@protobufjs/utf8": {
153
- "version": "1.1.0",
154
- "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
155
- "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
156
- },
157
- "node_modules/@tootallnate/once": {
158
- "version": "2.0.0",
159
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
160
- "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
161
- "engines": {
162
- "node": ">= 10"
163
- }
164
- },
165
- "node_modules/@types/caseless": {
166
- "version": "0.12.5",
167
- "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz",
168
- "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg=="
169
- },
170
- "node_modules/@types/http-errors": {
171
- "version": "1.8.2",
172
- "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.2.tgz",
173
- "integrity": "sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w=="
174
- },
175
- "node_modules/@types/long": {
176
- "version": "4.0.2",
177
- "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
178
- "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
179
- },
180
- "node_modules/@types/node": {
181
- "version": "20.14.0",
182
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.0.tgz",
183
- "integrity": "sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==",
184
- "dependencies": {
185
- "undici-types": "~5.26.4"
186
- }
187
- },
188
- "node_modules/@types/request": {
189
- "version": "2.48.12",
190
- "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz",
191
- "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==",
192
- "dependencies": {
193
- "@types/caseless": "*",
194
- "@types/node": "*",
195
- "@types/tough-cookie": "*",
196
- "form-data": "^2.5.0"
197
- }
198
- },
199
- "node_modules/@types/request/node_modules/form-data": {
200
- "version": "2.5.1",
201
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
202
- "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
203
- "dependencies": {
204
- "asynckit": "^0.4.0",
205
- "combined-stream": "^1.0.6",
206
- "mime-types": "^2.1.12"
207
- },
208
- "engines": {
209
- "node": ">= 0.12"
210
- }
211
- },
212
- "node_modules/@types/tough-cookie": {
213
- "version": "4.0.5",
214
- "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
215
- "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA=="
216
- },
217
- "node_modules/@vitalets/google-translate-api": {
218
- "version": "9.2.0",
219
- "resolved": "https://registry.npmjs.org/@vitalets/google-translate-api/-/google-translate-api-9.2.0.tgz",
220
- "integrity": "sha512-w98IPWGuexlGmh8Y19AxF6cgWT0U5JLevVNDKEuFpTWtBC9z3YtDWKTDxF3nPP1k9bWicuB1V7I7YfHoZiDScw==",
221
- "dependencies": {
222
- "@types/http-errors": "^1.8.2",
223
- "http-errors": "^2.0.0",
224
- "node-fetch": "^2.6.7"
225
- },
226
- "engines": {
227
- "node": ">=14"
228
- }
229
- },
230
- "node_modules/abort-controller": {
231
- "version": "3.0.0",
232
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
233
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
234
- "dependencies": {
235
- "event-target-shim": "^5.0.0"
236
- },
237
- "engines": {
238
- "node": ">=6.5"
239
- }
240
- },
241
- "node_modules/agent-base": {
242
- "version": "7.1.1",
243
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
244
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
245
- "dependencies": {
246
- "debug": "^4.3.4"
247
- },
248
- "engines": {
249
- "node": ">= 14"
250
- }
251
- },
252
- "node_modules/ansi-regex": {
253
- "version": "5.0.1",
254
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
255
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
256
- "engines": {
257
- "node": ">=8"
258
- }
259
- },
260
- "node_modules/ansi-styles": {
261
- "version": "4.3.0",
262
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
263
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
264
- "dependencies": {
265
- "color-convert": "^2.0.1"
266
- },
267
- "engines": {
268
- "node": ">=8"
269
- },
270
- "funding": {
271
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
272
- }
273
- },
274
- "node_modules/arrify": {
275
- "version": "2.0.1",
276
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
277
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
278
- "engines": {
279
- "node": ">=8"
280
- }
281
- },
282
- "node_modules/asynckit": {
283
- "version": "0.4.0",
284
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
285
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
286
- },
287
- "node_modules/axios": {
288
- "version": "1.7.2",
289
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
290
- "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
291
- "dependencies": {
292
- "follow-redirects": "^1.15.6",
293
- "form-data": "^4.0.0",
294
- "proxy-from-env": "^1.1.0"
295
- }
296
- },
297
- "node_modules/base64-js": {
298
- "version": "1.5.1",
299
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
300
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
301
- "funding": [
302
- {
303
- "type": "github",
304
- "url": "https://github.com/sponsors/feross"
305
- },
306
- {
307
- "type": "patreon",
308
- "url": "https://www.patreon.com/feross"
309
- },
310
- {
311
- "type": "consulting",
312
- "url": "https://feross.org/support"
313
- }
314
- ]
315
- },
316
- "node_modules/bignumber.js": {
317
- "version": "9.1.2",
318
- "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz",
319
- "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==",
320
- "engines": {
321
- "node": "*"
322
- }
323
- },
324
- "node_modules/buffer-equal-constant-time": {
325
- "version": "1.0.1",
326
- "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
327
- "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
328
- },
329
- "node_modules/cliui": {
330
- "version": "8.0.1",
331
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
332
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
333
- "dependencies": {
334
- "string-width": "^4.2.0",
335
- "strip-ansi": "^6.0.1",
336
- "wrap-ansi": "^7.0.0"
337
- },
338
- "engines": {
339
- "node": ">=12"
340
- }
341
- },
342
- "node_modules/color-convert": {
343
- "version": "2.0.1",
344
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
345
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
346
- "dependencies": {
347
- "color-name": "~1.1.4"
348
- },
349
- "engines": {
350
- "node": ">=7.0.0"
351
- }
352
- },
353
- "node_modules/color-name": {
354
- "version": "1.1.4",
355
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
356
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
357
- },
358
- "node_modules/combined-stream": {
359
- "version": "1.0.8",
360
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
361
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
362
- "dependencies": {
363
- "delayed-stream": "~1.0.0"
364
- },
365
- "engines": {
366
- "node": ">= 0.8"
367
- }
368
- },
369
- "node_modules/debug": {
370
- "version": "4.3.5",
371
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
372
- "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
373
- "dependencies": {
374
- "ms": "2.1.2"
375
- },
376
- "engines": {
377
- "node": ">=6.0"
378
- },
379
- "peerDependenciesMeta": {
380
- "supports-color": {
381
- "optional": true
382
- }
383
- }
384
- },
385
- "node_modules/delayed-stream": {
386
- "version": "1.0.0",
387
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
388
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
389
- "engines": {
390
- "node": ">=0.4.0"
391
- }
392
- },
393
- "node_modules/depd": {
394
- "version": "2.0.0",
395
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
396
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
397
- "engines": {
398
- "node": ">= 0.8"
399
- }
400
- },
401
- "node_modules/duplexify": {
402
- "version": "4.1.3",
403
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz",
404
- "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==",
405
- "dependencies": {
406
- "end-of-stream": "^1.4.1",
407
- "inherits": "^2.0.3",
408
- "readable-stream": "^3.1.1",
409
- "stream-shift": "^1.0.2"
410
- }
411
- },
412
- "node_modules/ecdsa-sig-formatter": {
413
- "version": "1.0.11",
414
- "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
415
- "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
416
- "dependencies": {
417
- "safe-buffer": "^5.0.1"
418
- }
419
- },
420
- "node_modules/emoji-regex": {
421
- "version": "8.0.0",
422
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
423
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
424
- },
425
- "node_modules/end-of-stream": {
426
- "version": "1.4.4",
427
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
428
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
429
- "dependencies": {
430
- "once": "^1.4.0"
431
- }
432
- },
433
- "node_modules/escalade": {
434
- "version": "3.1.2",
435
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
436
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
437
- "engines": {
438
- "node": ">=6"
439
- }
440
- },
441
- "node_modules/event-target-shim": {
442
- "version": "5.0.1",
443
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
444
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
445
- "engines": {
446
- "node": ">=6"
447
- }
448
- },
449
- "node_modules/extend": {
450
- "version": "3.0.2",
451
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
452
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
453
- },
454
- "node_modules/follow-redirects": {
455
- "version": "1.15.6",
456
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
457
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
458
- "funding": [
459
- {
460
- "type": "individual",
461
- "url": "https://github.com/sponsors/RubenVerborgh"
462
- }
463
- ],
464
- "engines": {
465
- "node": ">=4.0"
466
- },
467
- "peerDependenciesMeta": {
468
- "debug": {
469
- "optional": true
470
- }
471
- }
472
- },
473
- "node_modules/form-data": {
474
- "version": "4.0.0",
475
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
476
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
477
- "dependencies": {
478
- "asynckit": "^0.4.0",
479
- "combined-stream": "^1.0.8",
480
- "mime-types": "^2.1.12"
481
- },
482
- "engines": {
483
- "node": ">= 6"
484
- }
485
- },
486
- "node_modules/gaxios": {
487
- "version": "6.6.0",
488
- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.6.0.tgz",
489
- "integrity": "sha512-bpOZVQV5gthH/jVCSuYuokRo2bTKOcuBiVWpjmTn6C5Agl5zclGfTljuGsQZxwwDBkli+YhZhP4TdlqTnhOezQ==",
490
- "dependencies": {
491
- "extend": "^3.0.2",
492
- "https-proxy-agent": "^7.0.1",
493
- "is-stream": "^2.0.0",
494
- "node-fetch": "^2.6.9",
495
- "uuid": "^9.0.1"
496
- },
497
- "engines": {
498
- "node": ">=14"
499
- }
500
- },
501
- "node_modules/gcp-metadata": {
502
- "version": "6.1.0",
503
- "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz",
504
- "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==",
505
- "dependencies": {
506
- "gaxios": "^6.0.0",
507
- "json-bigint": "^1.0.0"
508
- },
509
- "engines": {
510
- "node": ">=14"
511
- }
512
- },
513
- "node_modules/get-caller-file": {
514
- "version": "2.0.5",
515
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
516
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
517
- "engines": {
518
- "node": "6.* || 8.* || >= 10.*"
519
- }
520
- },
521
- "node_modules/google-auth-library": {
522
- "version": "9.10.0",
523
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.10.0.tgz",
524
- "integrity": "sha512-ol+oSa5NbcGdDqA+gZ3G3mev59OHBZksBTxY/tYwjtcp1H/scAFwJfSQU9/1RALoyZ7FslNbke8j4i3ipwlyuQ==",
525
- "dependencies": {
526
- "base64-js": "^1.3.0",
527
- "ecdsa-sig-formatter": "^1.0.11",
528
- "gaxios": "^6.1.1",
529
- "gcp-metadata": "^6.1.0",
530
- "gtoken": "^7.0.0",
531
- "jws": "^4.0.0"
532
- },
533
- "engines": {
534
- "node": ">=14"
535
- }
536
- },
537
- "node_modules/google-gax": {
538
- "version": "4.3.5",
539
- "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-4.3.5.tgz",
540
- "integrity": "sha512-zXRSGgHp33ottCQMdYlKEFX/MhWkzKVX5P3Vpmx+DW6rtseLILzp3V0YV5Rh4oQzzkM0BH9+nJIyX01EUgmd3g==",
541
- "dependencies": {
542
- "@grpc/grpc-js": "~1.10.3",
543
- "@grpc/proto-loader": "^0.7.0",
544
- "@types/long": "^4.0.0",
545
- "abort-controller": "^3.0.0",
546
- "duplexify": "^4.0.0",
547
- "google-auth-library": "^9.3.0",
548
- "node-fetch": "^2.6.1",
549
- "object-hash": "^3.0.0",
550
- "proto3-json-serializer": "^2.0.0",
551
- "protobufjs": "7.3.0",
552
- "retry-request": "^7.0.0",
553
- "uuid": "^9.0.1"
554
- },
555
- "engines": {
556
- "node": ">=14"
557
- }
558
- },
559
- "node_modules/gtoken": {
560
- "version": "7.1.0",
561
- "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz",
562
- "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==",
563
- "dependencies": {
564
- "gaxios": "^6.0.0",
565
- "jws": "^4.0.0"
566
- },
567
- "engines": {
568
- "node": ">=14.0.0"
569
- }
570
- },
571
- "node_modules/html-entities": {
572
- "version": "2.5.2",
573
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
574
- "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==",
575
- "funding": [
576
- {
577
- "type": "github",
578
- "url": "https://github.com/sponsors/mdevils"
579
- },
580
- {
581
- "type": "patreon",
582
- "url": "https://patreon.com/mdevils"
583
- }
584
- ]
585
- },
586
- "node_modules/html-tags": {
587
- "version": "3.3.1",
588
- "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
589
- "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
590
- "engines": {
591
- "node": ">=8"
592
- },
593
- "funding": {
594
- "url": "https://github.com/sponsors/sindresorhus"
595
- }
596
- },
597
- "node_modules/http-errors": {
598
- "version": "2.0.0",
599
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
600
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
601
- "dependencies": {
602
- "depd": "2.0.0",
603
- "inherits": "2.0.4",
604
- "setprototypeof": "1.2.0",
605
- "statuses": "2.0.1",
606
- "toidentifier": "1.0.1"
607
- },
608
- "engines": {
609
- "node": ">= 0.8"
610
- }
611
- },
612
- "node_modules/http-proxy-agent": {
613
- "version": "5.0.0",
614
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
615
- "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
616
- "dependencies": {
617
- "@tootallnate/once": "2",
618
- "agent-base": "6",
619
- "debug": "4"
620
- },
621
- "engines": {
622
- "node": ">= 6"
623
- }
624
- },
625
- "node_modules/http-proxy-agent/node_modules/agent-base": {
626
- "version": "6.0.2",
627
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
628
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
629
- "dependencies": {
630
- "debug": "4"
631
- },
632
- "engines": {
633
- "node": ">= 6.0.0"
634
- }
635
- },
636
- "node_modules/https-proxy-agent": {
637
- "version": "7.0.4",
638
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
639
- "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
640
- "dependencies": {
641
- "agent-base": "^7.0.2",
642
- "debug": "4"
643
- },
644
- "engines": {
645
- "node": ">= 14"
646
- }
647
- },
648
- "node_modules/inherits": {
649
- "version": "2.0.4",
650
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
651
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
652
- },
653
- "node_modules/is-fullwidth-code-point": {
654
- "version": "3.0.0",
655
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
656
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
657
- "engines": {
658
- "node": ">=8"
659
- }
660
- },
661
- "node_modules/is-html": {
662
- "version": "2.0.0",
663
- "resolved": "https://registry.npmjs.org/is-html/-/is-html-2.0.0.tgz",
664
- "integrity": "sha512-S+OpgB5i7wzIue/YSE5hg0e5ZYfG3hhpNh9KGl6ayJ38p7ED6wxQLd1TV91xHpcTvw90KMJ9EwN3F/iNflHBVg==",
665
- "dependencies": {
666
- "html-tags": "^3.0.0"
667
- },
668
- "engines": {
669
- "node": ">=8"
670
- }
671
- },
672
- "node_modules/is-stream": {
673
- "version": "2.0.1",
674
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
675
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
676
- "engines": {
677
- "node": ">=8"
678
- },
679
- "funding": {
680
- "url": "https://github.com/sponsors/sindresorhus"
681
- }
682
- },
683
- "node_modules/json-bigint": {
684
- "version": "1.0.0",
685
- "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
686
- "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
687
- "dependencies": {
688
- "bignumber.js": "^9.0.0"
689
- }
690
- },
691
- "node_modules/jwa": {
692
- "version": "2.0.0",
693
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
694
- "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
695
- "dependencies": {
696
- "buffer-equal-constant-time": "1.0.1",
697
- "ecdsa-sig-formatter": "1.0.11",
698
- "safe-buffer": "^5.0.1"
699
- }
700
- },
701
- "node_modules/jws": {
702
- "version": "4.0.0",
703
- "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
704
- "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
705
- "dependencies": {
706
- "jwa": "^2.0.0",
707
- "safe-buffer": "^5.0.1"
708
- }
709
- },
710
- "node_modules/lodash.camelcase": {
711
- "version": "4.3.0",
712
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
713
- "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
714
- },
715
- "node_modules/long": {
716
- "version": "5.2.3",
717
- "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
718
- "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
719
- },
720
- "node_modules/mime-db": {
721
- "version": "1.52.0",
722
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
723
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
724
- "engines": {
725
- "node": ">= 0.6"
726
- }
727
- },
728
- "node_modules/mime-types": {
729
- "version": "2.1.35",
730
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
731
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
732
- "dependencies": {
733
- "mime-db": "1.52.0"
734
- },
735
- "engines": {
736
- "node": ">= 0.6"
737
- }
738
- },
739
- "node_modules/ms": {
740
- "version": "2.1.2",
741
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
742
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
743
- },
744
- "node_modules/node-fetch": {
745
- "version": "2.7.0",
746
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
747
- "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
748
- "dependencies": {
749
- "whatwg-url": "^5.0.0"
750
- },
751
- "engines": {
752
- "node": "4.x || >=6.0.0"
753
- },
754
- "peerDependencies": {
755
- "encoding": "^0.1.0"
756
- },
757
- "peerDependenciesMeta": {
758
- "encoding": {
759
- "optional": true
760
- }
761
- }
762
- },
763
- "node_modules/object-hash": {
764
- "version": "3.0.0",
765
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
766
- "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
767
- "engines": {
768
- "node": ">= 6"
769
- }
770
- },
771
- "node_modules/once": {
772
- "version": "1.4.0",
773
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
774
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
775
- "dependencies": {
776
- "wrappy": "1"
777
- }
778
- },
779
- "node_modules/proto3-json-serializer": {
780
- "version": "2.0.2",
781
- "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz",
782
- "integrity": "sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==",
783
- "dependencies": {
784
- "protobufjs": "^7.2.5"
785
- },
786
- "engines": {
787
- "node": ">=14.0.0"
788
- }
789
- },
790
- "node_modules/protobufjs": {
791
- "version": "7.3.0",
792
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.0.tgz",
793
- "integrity": "sha512-YWD03n3shzV9ImZRX3ccbjqLxj7NokGN0V/ESiBV5xWqrommYHYiihuIyavq03pWSGqlyvYUFmfoMKd+1rPA/g==",
794
- "hasInstallScript": true,
795
- "dependencies": {
796
- "@protobufjs/aspromise": "^1.1.2",
797
- "@protobufjs/base64": "^1.1.2",
798
- "@protobufjs/codegen": "^2.0.4",
799
- "@protobufjs/eventemitter": "^1.1.0",
800
- "@protobufjs/fetch": "^1.1.0",
801
- "@protobufjs/float": "^1.0.2",
802
- "@protobufjs/inquire": "^1.1.0",
803
- "@protobufjs/path": "^1.1.2",
804
- "@protobufjs/pool": "^1.1.0",
805
- "@protobufjs/utf8": "^1.1.0",
806
- "@types/node": ">=13.7.0",
807
- "long": "^5.0.0"
808
- },
809
- "engines": {
810
- "node": ">=12.0.0"
811
- }
812
- },
813
- "node_modules/proxy-from-env": {
814
- "version": "1.1.0",
815
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
816
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
817
- },
818
- "node_modules/readable-stream": {
819
- "version": "3.6.2",
820
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
821
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
822
- "dependencies": {
823
- "inherits": "^2.0.3",
824
- "string_decoder": "^1.1.1",
825
- "util-deprecate": "^1.0.1"
826
- },
827
- "engines": {
828
- "node": ">= 6"
829
- }
830
- },
831
- "node_modules/require-directory": {
832
- "version": "2.1.1",
833
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
834
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
835
- "engines": {
836
- "node": ">=0.10.0"
837
- }
838
- },
839
- "node_modules/retry-request": {
840
- "version": "7.0.2",
841
- "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz",
842
- "integrity": "sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==",
843
- "dependencies": {
844
- "@types/request": "^2.48.8",
845
- "extend": "^3.0.2",
846
- "teeny-request": "^9.0.0"
847
- },
848
- "engines": {
849
- "node": ">=14"
850
- }
851
- },
852
- "node_modules/safe-buffer": {
853
- "version": "5.2.1",
854
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
855
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
856
- "funding": [
857
- {
858
- "type": "github",
859
- "url": "https://github.com/sponsors/feross"
860
- },
861
- {
862
- "type": "patreon",
863
- "url": "https://www.patreon.com/feross"
864
- },
865
- {
866
- "type": "consulting",
867
- "url": "https://feross.org/support"
868
- }
869
- ]
870
- },
871
- "node_modules/setprototypeof": {
872
- "version": "1.2.0",
873
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
874
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
875
- },
876
- "node_modules/statuses": {
877
- "version": "2.0.1",
878
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
879
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
880
- "engines": {
881
- "node": ">= 0.8"
882
- }
883
- },
884
- "node_modules/stream-events": {
885
- "version": "1.0.5",
886
- "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz",
887
- "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==",
888
- "dependencies": {
889
- "stubs": "^3.0.0"
890
- }
891
- },
892
- "node_modules/stream-shift": {
893
- "version": "1.0.3",
894
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz",
895
- "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="
896
- },
897
- "node_modules/string_decoder": {
898
- "version": "1.3.0",
899
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
900
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
901
- "dependencies": {
902
- "safe-buffer": "~5.2.0"
903
- }
904
- },
905
- "node_modules/string-width": {
906
- "version": "4.2.3",
907
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
908
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
909
- "dependencies": {
910
- "emoji-regex": "^8.0.0",
911
- "is-fullwidth-code-point": "^3.0.0",
912
- "strip-ansi": "^6.0.1"
913
- },
914
- "engines": {
915
- "node": ">=8"
916
- }
917
- },
918
- "node_modules/strip-ansi": {
919
- "version": "6.0.1",
920
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
921
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
922
- "dependencies": {
923
- "ansi-regex": "^5.0.1"
924
- },
925
- "engines": {
926
- "node": ">=8"
927
- }
928
- },
929
- "node_modules/stubs": {
930
- "version": "3.0.0",
931
- "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz",
932
- "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw=="
933
- },
934
- "node_modules/teeny-request": {
935
- "version": "9.0.0",
936
- "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz",
937
- "integrity": "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==",
938
- "dependencies": {
939
- "http-proxy-agent": "^5.0.0",
940
- "https-proxy-agent": "^5.0.0",
941
- "node-fetch": "^2.6.9",
942
- "stream-events": "^1.0.5",
943
- "uuid": "^9.0.0"
944
- },
945
- "engines": {
946
- "node": ">=14"
947
- }
948
- },
949
- "node_modules/teeny-request/node_modules/agent-base": {
950
- "version": "6.0.2",
951
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
952
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
953
- "dependencies": {
954
- "debug": "4"
955
- },
956
- "engines": {
957
- "node": ">= 6.0.0"
958
- }
959
- },
960
- "node_modules/teeny-request/node_modules/https-proxy-agent": {
961
- "version": "5.0.1",
962
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
963
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
964
- "dependencies": {
965
- "agent-base": "6",
966
- "debug": "4"
967
- },
968
- "engines": {
969
- "node": ">= 6"
970
- }
971
- },
972
- "node_modules/toidentifier": {
973
- "version": "1.0.1",
974
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
975
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
976
- "engines": {
977
- "node": ">=0.6"
978
- }
979
- },
980
- "node_modules/tr46": {
981
- "version": "0.0.3",
982
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
983
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
984
- },
985
- "node_modules/undici-types": {
986
- "version": "5.26.5",
987
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
988
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
989
- },
990
- "node_modules/util-deprecate": {
991
- "version": "1.0.2",
992
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
993
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
994
- },
995
- "node_modules/uuid": {
996
- "version": "9.0.1",
997
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
998
- "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
999
- "funding": [
1000
- "https://github.com/sponsors/broofa",
1001
- "https://github.com/sponsors/ctavan"
1002
- ],
1003
- "bin": {
1004
- "uuid": "dist/bin/uuid"
1005
- }
1006
- },
1007
- "node_modules/webidl-conversions": {
1008
- "version": "3.0.1",
1009
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
1010
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
1011
- },
1012
- "node_modules/whatwg-url": {
1013
- "version": "5.0.0",
1014
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
1015
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
1016
- "dependencies": {
1017
- "tr46": "~0.0.3",
1018
- "webidl-conversions": "^3.0.0"
1019
- }
1020
- },
1021
- "node_modules/wrap-ansi": {
1022
- "version": "7.0.0",
1023
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
1024
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
1025
- "dependencies": {
1026
- "ansi-styles": "^4.0.0",
1027
- "string-width": "^4.1.0",
1028
- "strip-ansi": "^6.0.0"
1029
- },
1030
- "engines": {
1031
- "node": ">=10"
1032
- },
1033
- "funding": {
1034
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
1035
- }
1036
- },
1037
- "node_modules/wrappy": {
1038
- "version": "1.0.2",
1039
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1040
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
1041
- },
1042
- "node_modules/y18n": {
1043
- "version": "5.0.8",
1044
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
1045
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
1046
- "engines": {
1047
- "node": ">=10"
1048
- }
1049
- },
1050
- "node_modules/yargs": {
1051
- "version": "17.7.2",
1052
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
1053
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
1054
- "dependencies": {
1055
- "cliui": "^8.0.1",
1056
- "escalade": "^3.1.1",
1057
- "get-caller-file": "^2.0.5",
1058
- "require-directory": "^2.1.1",
1059
- "string-width": "^4.2.3",
1060
- "y18n": "^5.0.5",
1061
- "yargs-parser": "^21.1.1"
1062
- },
1063
- "engines": {
1064
- "node": ">=12"
1065
- }
1066
- },
1067
- "node_modules/yargs-parser": {
1068
- "version": "21.1.1",
1069
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
1070
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
1071
- "engines": {
1072
- "node": ">=12"
1073
- }
1074
- }
1075
- }
1076
- }
scripts/package.json CHANGED
@@ -2,7 +2,6 @@
2
2
  "type": "module",
3
3
  "dependencies": {
4
4
  "@google-cloud/translate": "^8.3.0",
5
- "@vitalets/google-translate-api": "^9.2.0",
6
5
  "axios": "^1.7.2",
7
6
  "uuid": "^9.0.1"
8
7
  }
scripts/translateHeadings.js ADDED
@@ -0,0 +1,60 @@
1
+ import fs from "fs";
2
+ import { v2 } from "@google-cloud/translate";
3
+
4
+ const translate = new v2.Translate({
5
+ key: import.meta.env.CLOUD_TRANSLATE_API_KEY,
6
+ });
7
+
8
+ const headingsPath = new URL("./headings.json", import.meta.url);
9
+ const headings = JSON.parse(fs.readFileSync(headingsPath, "utf8"));
10
+
11
+ const languages = ["bn", "gu", "hi", "ja", "kn", "ml", "ne", "or", "pa", "ta", "te"];
12
+
13
+ const delay = (ms) => new Promise((r) => setTimeout(r, ms));
14
+
15
+ function save() {
16
+ fs.writeFileSync(headingsPath, JSON.stringify(headings, null, 2) + "\n");
17
+ }
18
+
19
+ let translated = 0;
20
+ let skipped = 0;
21
+
22
+ for (const lang of languages) {
23
+ console.log(`Translating to ${lang}...`);
24
+
25
+ for (const book of headings) {
26
+ for (const [, chapterHeadings] of Object.entries(book.chapters)) {
27
+ for (const h of chapterHeadings) {
28
+ if (!h.heading?.en) continue;
29
+ if (h.heading[lang]) {
30
+ skipped++;
31
+ continue;
32
+ }
33
+ try {
34
+ const [translation] = await translate.translate(h.heading.en, lang);
35
+ h.heading[lang] = translation;
36
+ } catch (err) {
37
+ console.error(` Error translating "${h.heading.en}" to ${lang}:`, err.message);
38
+ await delay(500);
39
+ try {
40
+ const [translation] = await translate.translate(h.heading.en, lang);
41
+ h.heading[lang] = translation;
42
+ } catch (err2) {
43
+ console.error(` Failed retry for "${h.heading.en}" to ${lang}:`, err2.message);
44
+ continue;
45
+ }
46
+ }
47
+ translated++;
48
+ save();
49
+ if (translated % 50 === 0) {
50
+ console.log(` ${lang}: ${translated} translated, ${skipped} skipped`);
51
+ }
52
+ await delay(100);
53
+ }
54
+ }
55
+ }
56
+ console.log(` ${lang} done. ${translated} translated, ${skipped} skipped`);
57
+ }
58
+
59
+ save();
60
+ console.log(`Done! ${translated} translated, ${skipped} skipped`);