🌐Translations for the latest features (#78)

* 🌐Translations for the latest features
Also:
  - Rename “Home” to Shared drive
  - Hide banner with suggestion of downloading desktop app
  - Fix Upload button on main screen
  - Add separate buttons for the manage access and share by link
This commit is contained in:
Anton Shepilov
2023-06-16 14:15:48 +02:00
committed by GitHub
parent 312e08d301
commit fddd3b4ebd
50 changed files with 1312 additions and 13609 deletions
+6
View File
@@ -0,0 +1,6 @@
{
"hello": "Hello",
"virtual-folder.shared-drive": "Shared Drive",
"virtual-folder.my-drive": "My Drive",
"virtual-folder.trash": "Trash"
}
+6
View File
@@ -0,0 +1,6 @@
{
"hello": "Bonjour",
"virtual-folder.shared-drive": "Общий Диск",
"virtual-folder.my-drive": "Мой Диск",
"virtual-folder.trash": "Корзина"
}
+6
View File
@@ -0,0 +1,6 @@
{
"hello": "Привет",
"virtual-folder.shared-drive": "Общий Диск",
"virtual-folder.my-drive": "Мой Диск",
"virtual-folder.trash": "Корзина"
}
+107
View File
@@ -18,6 +18,7 @@
"@sentry/tracing": "^6.19.7",
"@socket.io/redis-adapter": "^7.2.0",
"@types/http-proxy": "^1.17.11",
"@types/i18n": "^0.13.6",
"@types/pdf-parse": "^1.1.1",
"@types/redis": "^4.0.11",
"@types/sharp": "^0.29.5",
@@ -53,6 +54,7 @@
"get-website-favicon": "^0.0.7",
"html-metadata-parser": "^2.0.4",
"html-to-text": "^8.2.1",
"i18n": "^0.15.1",
"idtoken-verifier": "^2.2.3",
"jsonwebtoken": "^9.0.0",
"jwks-rsa": "^3.0.1",
@@ -1551,6 +1553,45 @@
"node-pre-gyp": "bin/node-pre-gyp"
}
},
"node_modules/@messageformat/core": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@messageformat/core/-/core-3.2.0.tgz",
"integrity": "sha512-ppbb/7OYqg/t4WdFk8VAfZEV2sNUq3+7VeBAo5sKFhmF786sh6gB7fUeXa2qLTDIcTHS49HivTBN7QNOU5OFTg==",
"dependencies": {
"@messageformat/date-skeleton": "^1.0.0",
"@messageformat/number-skeleton": "^1.0.0",
"@messageformat/parser": "^5.1.0",
"@messageformat/runtime": "^3.0.1",
"make-plural": "^7.0.0",
"safe-identifier": "^0.4.1"
}
},
"node_modules/@messageformat/date-skeleton": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@messageformat/date-skeleton/-/date-skeleton-1.0.1.tgz",
"integrity": "sha512-jPXy8fg+WMPIgmGjxSlnGJn68h/2InfT0TNSkVx0IGXgp4ynnvYkbZ51dGWmGySEK+pBiYUttbQdu5XEqX5CRg=="
},
"node_modules/@messageformat/number-skeleton": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@messageformat/number-skeleton/-/number-skeleton-1.2.0.tgz",
"integrity": "sha512-xsgwcL7J7WhlHJ3RNbaVgssaIwcEyFkBqxHdcdaiJzwTZAWEOD8BuUFxnxV9k5S0qHN3v/KzUpq0IUpjH1seRg=="
},
"node_modules/@messageformat/parser": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/@messageformat/parser/-/parser-5.1.0.tgz",
"integrity": "sha512-jKlkls3Gewgw6qMjKZ9SFfHUpdzEVdovKFtW1qRhJ3WI4FW5R/NnGDqr8SDGz+krWDO3ki94boMmQvGke1HwUQ==",
"dependencies": {
"moo": "^0.5.1"
}
},
"node_modules/@messageformat/runtime": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@messageformat/runtime/-/runtime-3.0.1.tgz",
"integrity": "sha512-6RU5ol2lDtO8bD9Yxe6CZkl0DArdv0qkuoZC+ZwowU+cdRlVE1157wjCmlA5Rsf1Xc/brACnsZa5PZpEDfTFFg==",
"dependencies": {
"make-plural": "^7.0.0"
}
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -1996,6 +2037,11 @@
"@types/node": "*"
}
},
"node_modules/@types/i18n": {
"version": "0.13.6",
"resolved": "https://registry.npmjs.org/@types/i18n/-/i18n-0.13.6.tgz",
"integrity": "sha512-LLbimAA0oQilgP4PJBFH7sRdBUjWLo6R1rf46SUgVzsUZeXH3PT1piXj4LNX5ECDi0bLg9RmQMmY1K2qawqJqA=="
},
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
@@ -3216,6 +3262,11 @@
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
},
"node_modules/boolean": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz",
"integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw=="
},
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -5126,6 +5177,17 @@
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
"node_modules/fast-printf": {
"version": "1.6.9",
"resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.9.tgz",
"integrity": "sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==",
"dependencies": {
"boolean": "^3.1.4"
},
"engines": {
"node": ">=10.0"
}
},
"node_modules/fast-redact": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz",
@@ -6329,6 +6391,25 @@
"node": ">=10.17.0"
}
},
"node_modules/i18n": {
"version": "0.15.1",
"resolved": "https://registry.npmjs.org/i18n/-/i18n-0.15.1.tgz",
"integrity": "sha512-yue187t8MqUPMHdKjiZGrX+L+xcUsDClGO0Cz4loaKUOK9WrGw5pgan4bv130utOwX7fHE9w2iUeHFalVQWkXA==",
"dependencies": {
"@messageformat/core": "^3.0.0",
"debug": "^4.3.3",
"fast-printf": "^1.6.9",
"make-plural": "^7.0.0",
"math-interval-parser": "^2.0.1",
"mustache": "^4.2.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/mashpie"
}
},
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -7944,6 +8025,11 @@
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"dev": true
},
"node_modules/make-plural": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/make-plural/-/make-plural-7.3.0.tgz",
"integrity": "sha512-/K3BC0KIsO+WK2i94LkMPv3wslMrazrQhfi5We9fMbLlLjzoOSJWr7TAdupLlDWaJcWxwoNosBkhFDejiu5VDw=="
},
"node_modules/makeerror": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
@@ -7979,6 +8065,14 @@
"integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==",
"dev": true
},
"node_modules/math-interval-parser": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-2.0.1.tgz",
"integrity": "sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/md5": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
@@ -8378,6 +8472,14 @@
"readable-stream": "^3.6.0"
}
},
"node_modules/mustache": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
"integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
"bin": {
"mustache": "bin/mustache"
}
},
"node_modules/napi-build-utils": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
@@ -10155,6 +10257,11 @@
}
]
},
"node_modules/safe-identifier": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz",
"integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w=="
},
"node_modules/safe-regex2": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz",
+2
View File
@@ -110,6 +110,7 @@
"@sentry/tracing": "^6.19.7",
"@socket.io/redis-adapter": "^7.2.0",
"@types/http-proxy": "^1.17.11",
"@types/i18n": "^0.13.6",
"@types/pdf-parse": "^1.1.1",
"@types/redis": "^4.0.11",
"@types/sharp": "^0.29.5",
@@ -145,6 +146,7 @@
"get-website-favicon": "^0.0.7",
"html-metadata-parser": "^2.0.4",
"html-to-text": "^8.2.1",
"i18n": "^0.15.1",
"idtoken-verifier": "^2.2.3",
"jsonwebtoken": "^9.0.0",
"jwks-rsa": "^3.0.1",
@@ -181,7 +181,7 @@ export class DocumentsService {
({
id,
parent_id: null,
name: getVirtualFoldersNames(id),
name: await getVirtualFoldersNames(id, context),
size: await calculateItemSize(
{ id, is_directory: true, size: 0 },
this.repository,
@@ -12,7 +12,7 @@ import {
writeToTemporaryFile,
} from "../../utils/files";
import mimes from "../../utils/mime";
import globalResolver from "../global-resolver";
import gr from "../global-resolver";
import { stopWords } from "./const";
import { DriveFile } from "./entities/drive-file";
import { DriveFileMetadata, FileVersion } from "./entities/file-version";
@@ -26,12 +26,19 @@ export const isVirtualFolder = (id: string) => {
return id === ROOT || id === TRASH || id.startsWith("user_");
};
export const getVirtualFoldersNames = (id: string) => {
export const getVirtualFoldersNames = async (id: string, context: DriveExecutionContext) => {
const user = await gr.services.users.get({ id: context.user?.id });
const locale = user?.preferences?.locale || "en";
if (id.startsWith("user_")) {
return "My Drive";
return gr.services.i18n.translate("virtual-folder.my-drive", locale);
}
return id === ROOT ? "Home" : id === TRASH ? "Trash" : "Unknown";
return id === ROOT
? gr.services.i18n.translate("virtual-folder.shared-drive", locale)
: id === TRASH
? gr.services.i18n.translate("virtual-folder.trash", locale)
: "Unknown";
};
/**
@@ -232,11 +239,10 @@ export const getPath = async (
? [
{
id,
name: getVirtualFoldersNames(id),
name: await getVirtualFoldersNames(id, context),
} as DriveFile,
]
: [];
const item = await repository.findOne({
id,
company_id: context.company.id,
@@ -276,7 +282,7 @@ export const addDriveItemToArchive = async (
if (!item.is_directory) {
const file_id = item.last_version_cache.file_metadata.external_id;
const file = await globalResolver.services.files.download(file_id, context);
const file = await gr.services.files.download(file_id, context);
if (!file) {
throw Error("file not found");
@@ -398,7 +404,7 @@ export const getFileMetadata = async (
fileId: string,
context: CompanyExecutionContext,
): Promise<DriveFileMetadata> => {
const file = await globalResolver.services.files.getFile(
const file = await gr.services.files.getFile(
{
id: fileId,
company_id: context.company.id,
@@ -35,6 +35,7 @@ import { UserServiceImpl } from "./user/services/users/service";
import { WorkspaceServiceImpl } from "./workspaces/services/workspace";
import { PreviewEngine } from "./previews/services/files/engine";
import { I18nService } from "./i18n";
type PlatformServices = {
auth: AuthServiceAPI;
@@ -73,6 +74,7 @@ type TdriveServices = {
engine: DocumentsEngine;
};
tags: TagsService;
i18n: I18nService;
};
class GlobalResolver {
@@ -136,6 +138,7 @@ class GlobalResolver {
engine: await new DocumentsEngine().init(),
},
tags: await new TagsService().init(),
i18n: await new I18nService().init(),
};
Object.keys(this.services).forEach((key: keyof TdriveServices) => {
@@ -0,0 +1,24 @@
import i18n from "i18n";
import path from "path";
import { logger } from "../../core/platform/framework/logger";
import { Initializable, TdriveServiceProvider } from "../../core/platform/framework";
export class I18nService implements TdriveServiceProvider, Initializable {
version = "0";
public translate(str: string, locale: string): string {
return i18n.__({ phrase: str, locale: locale });
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
async init(): Promise<this> {
i18n.configure({
locales: ["en", "ru", "fr"],
defaultLocale: "en",
directory: path.resolve("./locales/"),
logWarnFn: msg => logger.warn(msg),
logErrorFn: msg => logger.error(msg),
});
return this;
}
}
@@ -0,0 +1 @@
export * from "./i18n-service";
@@ -87,7 +87,7 @@ describe("the Drive feature", () => {
const result = deserialize<DriveItemDetailsMockClass>(DriveItemDetailsMockClass, response.body);
expect(result.item.id).toEqual("root");
expect(result.item.name).toEqual("Home");
expect(result.item.name).toEqual("Shared Drive");
});
it("did fetch the trash", async () => {
@@ -0,0 +1,30 @@
import "reflect-metadata";
import {describe, it} from "@jest/globals";
import { I18nService } from "../../../../../src/services/i18n";
describe("i18n service", () => {
let subj: I18nService;
beforeAll(async () => {
subj = await (new I18nService()).init();
});
it("'Should translate \"Hello\" to FR", async () => {
//given
const msg = "hello";
//expect
expect(subj.translate(msg, "fr")).toEqual("Bonjour");
});
it("'Should translate \"Hello\" to RU", async () => {
//given
const msg = "hello";
//expect
expect(subj.translate(msg, "ru")).toEqual("Привет");
});
});
+86 -1
View File
@@ -694,6 +694,42 @@
semver "^7.3.5"
tar "^6.1.11"
"@messageformat/core@^3.0.0":
version "3.2.0"
resolved "https://registry.npmjs.org/@messageformat/core/-/core-3.2.0.tgz"
integrity sha512-ppbb/7OYqg/t4WdFk8VAfZEV2sNUq3+7VeBAo5sKFhmF786sh6gB7fUeXa2qLTDIcTHS49HivTBN7QNOU5OFTg==
dependencies:
"@messageformat/date-skeleton" "^1.0.0"
"@messageformat/number-skeleton" "^1.0.0"
"@messageformat/parser" "^5.1.0"
"@messageformat/runtime" "^3.0.1"
make-plural "^7.0.0"
safe-identifier "^0.4.1"
"@messageformat/date-skeleton@^1.0.0":
version "1.0.1"
resolved "https://registry.npmjs.org/@messageformat/date-skeleton/-/date-skeleton-1.0.1.tgz"
integrity sha512-jPXy8fg+WMPIgmGjxSlnGJn68h/2InfT0TNSkVx0IGXgp4ynnvYkbZ51dGWmGySEK+pBiYUttbQdu5XEqX5CRg==
"@messageformat/number-skeleton@^1.0.0":
version "1.2.0"
resolved "https://registry.npmjs.org/@messageformat/number-skeleton/-/number-skeleton-1.2.0.tgz"
integrity sha512-xsgwcL7J7WhlHJ3RNbaVgssaIwcEyFkBqxHdcdaiJzwTZAWEOD8BuUFxnxV9k5S0qHN3v/KzUpq0IUpjH1seRg==
"@messageformat/parser@^5.1.0":
version "5.1.0"
resolved "https://registry.npmjs.org/@messageformat/parser/-/parser-5.1.0.tgz"
integrity sha512-jKlkls3Gewgw6qMjKZ9SFfHUpdzEVdovKFtW1qRhJ3WI4FW5R/NnGDqr8SDGz+krWDO3ki94boMmQvGke1HwUQ==
dependencies:
moo "^0.5.1"
"@messageformat/runtime@^3.0.1":
version "3.0.1"
resolved "https://registry.npmjs.org/@messageformat/runtime/-/runtime-3.0.1.tgz"
integrity sha512-6RU5ol2lDtO8bD9Yxe6CZkl0DArdv0qkuoZC+ZwowU+cdRlVE1157wjCmlA5Rsf1Xc/brACnsZa5PZpEDfTFFg==
dependencies:
make-plural "^7.0.0"
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
@@ -1026,6 +1062,11 @@
dependencies:
"@types/node" "*"
"@types/i18n@^0.13.6":
version "0.13.6"
resolved "https://registry.npmjs.org/@types/i18n/-/i18n-0.13.6.tgz"
integrity sha512-LLbimAA0oQilgP4PJBFH7sRdBUjWLo6R1rf46SUgVzsUZeXH3PT1piXj4LNX5ECDi0bLg9RmQMmY1K2qawqJqA==
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
version "2.0.4"
resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz"
@@ -1826,6 +1867,11 @@ boolbase@^1.0.0:
resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"
integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
boolean@^3.1.4:
version "3.2.0"
resolved "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz"
integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
@@ -2438,7 +2484,7 @@ debug@^3.2.7:
dependencies:
ms "^2.1.1"
debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@4:
debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@4:
version "4.3.4"
resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -3109,6 +3155,13 @@ fast-levenshtein@^2.0.6:
resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
fast-printf@^1.6.9:
version "1.6.9"
resolved "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.9.tgz"
integrity sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==
dependencies:
boolean "^3.1.4"
fast-redact@^3.0.0:
version "3.2.0"
resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz"
@@ -3828,6 +3881,18 @@ human-signals@^2.1.0:
resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
i18n@^0.15.1:
version "0.15.1"
resolved "https://registry.npmjs.org/i18n/-/i18n-0.15.1.tgz"
integrity sha512-yue187t8MqUPMHdKjiZGrX+L+xcUsDClGO0Cz4loaKUOK9WrGw5pgan4bv130utOwX7fHE9w2iUeHFalVQWkXA==
dependencies:
"@messageformat/core" "^3.0.0"
debug "^4.3.3"
fast-printf "^1.6.9"
make-plural "^7.0.0"
math-interval-parser "^2.0.1"
mustache "^4.2.0"
iconv-lite@^0.4.4:
version "0.4.24"
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
@@ -4873,6 +4938,11 @@ make-error@^1.1.1, make-error@1.x:
resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz"
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
make-plural@^7.0.0:
version "7.3.0"
resolved "https://registry.npmjs.org/make-plural/-/make-plural-7.3.0.tgz"
integrity sha512-/K3BC0KIsO+WK2i94LkMPv3wslMrazrQhfi5We9fMbLlLjzoOSJWr7TAdupLlDWaJcWxwoNosBkhFDejiu5VDw==
makeerror@1.0.12:
version "1.0.12"
resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz"
@@ -4902,6 +4972,11 @@ map-stream@~0.1.0:
resolved "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz"
integrity sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==
math-interval-parser@^2.0.1:
version "2.0.1"
resolved "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-2.0.1.tgz"
integrity sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==
md5@^2.2.1:
version "2.3.0"
resolved "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz"
@@ -5172,6 +5247,11 @@ multistream@^4.1.0:
once "^1.4.0"
readable-stream "^3.6.0"
mustache@^4.2.0:
version "4.2.0"
resolved "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz"
integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==
napi-build-utils@^1.0.1:
version "1.0.2"
resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz"
@@ -6188,6 +6268,11 @@ safe-buffer@~5.1.2:
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
safe-identifier@^0.4.1:
version "0.4.2"
resolved "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz"
integrity sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==
safe-regex2@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz"