add helper calls to sort translations and list missing translations

This commit is contained in:
Michael Schramm 2020-06-05 17:57:40 +02:00
parent fd227b1884
commit 1726d83f88
45 changed files with 821 additions and 342 deletions

View File

@ -11,6 +11,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
- `SPA` env variable to have static page with loading spinner before redirect
- `de`, `fr`, `es`, `it`, `cn` base folders for translations
- finish translating `de` and `en`
- add `yarn translation:sort` to order translations (to ensure the same order
when we add / change translations)
- add `yarn translation:missing <lang>` to print a list of missing translations
for the given language (this takes `en` as a baseline)
### Changed

View File

@ -2,6 +2,7 @@ import {useQuery} from '@apollo/react-hooks'
import {AxiosRequestConfig} from 'axios'
import {useRouter} from 'next/router'
import React, {useEffect, useState} from 'react'
import {useTranslation} from 'react-i18next'
import {ME_QUERY, MeQueryData} from '../graphql/query/me.query'
import {LoadingPage} from './loading.page'
@ -38,6 +39,7 @@ export const authConfig = async (config: AxiosRequestConfig = {}): Promise<Axios
export const withAuth = (Component, roles: string[] = []): React.FC => {
return props => {
const { t } = useTranslation()
const router = useRouter()
const [access, setAccess] = useState(false)
const {loading, data, error} = useQuery<MeQueryData>(ME_QUERY)
@ -78,11 +80,11 @@ export const withAuth = (Component, roles: string[] = []): React.FC => {
}, [data])
if (loading) {
return <LoadingPage message={'Loading Credentials'} />
return <LoadingPage message={t('loadingCredentials')} />
}
if (!access) {
return <LoadingPage message={'Checking Credentials'} />
return <LoadingPage message={t('checkingCredentials')} />
}
return <Component me={data && data.me} {...props} />

View File

@ -1,8 +1,8 @@
{
"home": "Home",
"users": "Benutzer",
"forms": "Formulare",
"submissions": "Eingaben",
"home": "Home",
"profile": "Profil",
"username": "Benutzername"
"submissions": "Eingaben",
"username": "Benutzername",
"users": "Benutzer"
}

View File

@ -1,7 +1,9 @@
{
"logout": "Abmelden",
"admin": "Administration",
"checkingCredentials": "Zugangsdaten werden geprüft",
"loadingCredentials": "Lade Zugangsdaten",
"login": "Anmelden",
"register": "Benutzer erstellen",
"logout": "Abmelden",
"recover": "Passwort vergessen",
"admin": "Administration"
"register": "Benutzer erstellen"
}

View File

@ -1,97 +1,97 @@
{
"baseData": {
"isLive": "Öffentlich",
"language": "Sprache",
"showFooter": "Fußzeile anzeigen",
"title": "Titel"
},
"baseDataTab": "Basis Daten",
"building": "Formular wird aufgebaut",
"submitted": "Vielen dank für ihre Eingaben!",
"restart": "Formular neu starten",
"confirmDelete": "Wollen sie dieses Formular mit allen Eintragungen löschen?",
"create": "Neues Formular erstellen",
"createNow": "Jetzt Anlegen",
"created": "Formular Erstellt",
"creationError": "Formular konnte nicht erstellt werden",
"deleteError": "Formular konnte nicht gelöscht werden",
"deleteNow": "Jetzt löschen!",
"deleted": "Formular gelöscht",
"design": {
"answerColor": "Antworten Farbe",
"backgroundColor": "Hintergrund Farbe",
"buttonActiveColor": "Aktive Aktion Farbe",
"buttonColor": "Aktions Farbe",
"buttonTextColor": "Aktion Schrift Farbe",
"font": "Schriftart",
"questionColor": "Fragen Farbe"
},
"designTab": "Design",
"endPage": {
"action": "Aktion",
"activeColor": "Aktive Farbe",
"addButton": "Aktion hinzufügen",
"bgColor": "Hintergrund Farbe",
"buttons": "Aktionen",
"color": "Text Farbe",
"continueButtonText": "Weiter Text",
"paragraph": "Paragraf",
"show": "Anzeigen",
"text": "Text",
"title": "Titel",
"url": "Url"
},
"endPageTab": "Abschluss Seite",
"loading": "Formular wird geladen",
"mange": "Formular \"{{title}}\" bearbeiten",
"new": "Neues Formular",
"created": "Formular Erstellt",
"creationError": "Formular konnte nicht erstellt werden",
"create": "Neues Formular erstellen",
"createNow": "Jetzt Anlegen",
"baseDataTab": "Basis Daten",
"selfNotificationsTab": "Benachrichtigungen für Verwalter",
"respondentNotificationsTab": "Benarichtigungen für Nutzer",
"updated": "Formular aktualisiert",
"updateError": "Formular konnte nicht aktualisiert werden",
"updateNow": "Speichern",
"designTab": "Design",
"startPageTab": "Eröffnungs Seite",
"endPageTab": "Abschluss Seite",
"confirmDelete": "Wollen sie dieses Formular mit allen Eintragungen löschen?",
"deleted": "Formular gelöscht",
"deleteError": "Formular konnte nicht gelöscht werden",
"deleteNow": "Jetzt löschen!",
"row": {
"isLive": "Öffentlich",
"title": "Titel",
"admin": "Verwalter",
"language": "Sprache",
"created": "Erstellt",
"lastModified": "Letzte Änderung",
"menu": ""
},
"baseData": {
"isLive": "Öffentlich",
"title": "Titel",
"language": "Sprache",
"showFooter": "Fußzeile anzeigen"
},
"design": {
"font": "Schriftart",
"backgroundColor": "Hintergrund Farbe",
"questionColor": "Fragen Farbe",
"answerColor": "Antworten Farbe",
"buttonColor": "Aktions Farbe",
"buttonActiveColor": "Aktive Aktion Farbe",
"buttonTextColor": "Aktion Schrift Farbe"
},
"endPage": {
"show": "Anzeigen",
"continueButtonText": "Weiter Text",
"paragraph": "Paragraf",
"title": "Titel",
"buttons": "Aktionen",
"url": "Url",
"text": "Text",
"action": "Aktion",
"bgColor": "Hintergrund Farbe",
"activeColor": "Aktive Farbe",
"color": "Text Farbe",
"addButton": "Aktion hinzufügen"
},
"startPage": {
"show": "Anzeigen",
"continueButtonText": "Weiter Text",
"paragraph": "Paragraf",
"title": "Titel",
"buttons": "Aktionen",
"url": "Url",
"text": "Text",
"action": "Aktion",
"bgColor": "Hintergrund Farbe",
"activeColor": "Aktive Farbe",
"color": "Text Farbe",
"addButton": "Aktion hinzufügen"
},
"respondentNotifications": {
"enabled": "Aktiv",
"subject": "Betreff",
"htmlTemplate": "HTML Template",
"htmlTemplateInfo": "Sie können auch <u>MJML<\/u> verwenden um das Template zu gestalten",
"toField": "Empfänger E-Mail",
"toFieldInfo": "Formular E-Mail Feld für Benachrichtigung",
"fromEmail": "Absender E-Mail",
"fromEmailInfo": "Der E-Mail Server muss den versand von dieser E-Mail zulassen"
"fromEmailInfo": "Der E-Mail Server muss den versand von dieser E-Mail zulassen",
"htmlTemplate": "HTML Template",
"htmlTemplateInfo": "Sie können auch <u>MJML</u> verwenden um das Template zu gestalten",
"subject": "Betreff",
"toField": "Empfänger E-Mail",
"toFieldInfo": "Formular E-Mail Feld für Benachrichtigung"
},
"respondentNotificationsTab": "Benarichtigungen für Nutzer",
"restart": "Formular neu starten",
"row": {
"admin": "Verwalter",
"created": "Erstellt",
"isLive": "Öffentlich",
"language": "Sprache",
"lastModified": "Letzte Änderung",
"menu": "",
"title": "Titel"
},
"selfNotifications": {
"enabled": "Aktiv",
"subject": "Betreff",
"htmlTemplate": "HTML Template",
"htmlTemplateInfo": "Sie können auch <u>MJML<\/u> verwenden um das Template zu gestalten",
"toEmail": "Empfänger E-Mail",
"toEmailInfo": "Als Standard wird die E-Mail des Verwalters verwendet",
"fromField": "Absender E-Mail",
"fromFieldInfo": "Formular E-Mail Feld für Benachrichtigung, wird as Reply-To gesetzt"
}
"fromFieldInfo": "Formular E-Mail Feld für Benachrichtigung, wird as Reply-To gesetzt",
"htmlTemplate": "HTML Template",
"htmlTemplateInfo": "Sie können auch <u>MJML</u> verwenden um das Template zu gestalten",
"subject": "Betreff",
"toEmail": "Empfänger E-Mail",
"toEmailInfo": "Als Standard wird die E-Mail des Verwalters verwendet"
},
"selfNotificationsTab": "Benachrichtigungen für Verwalter",
"startPage": {
"action": "Aktion",
"activeColor": "Aktive Farbe",
"addButton": "Aktion hinzufügen",
"bgColor": "Hintergrund Farbe",
"buttons": "Aktionen",
"color": "Text Farbe",
"continueButtonText": "Weiter Text",
"paragraph": "Paragraf",
"show": "Anzeigen",
"text": "Text",
"title": "Titel",
"url": "Url"
},
"startPageTab": "Eröffnungs Seite",
"submitted": "Vielen dank für ihre Eingaben!",
"updateError": "Formular konnte nicht aktualisiert werden",
"updateNow": "Speichern",
"updated": "Formular aktualisiert"
}

View File

@ -1,7 +1,7 @@
{
"en": "English",
"de": "Deutsch",
"cn": "繁體中文",
"de": "Deutsch",
"en": "English",
"es": "Español",
"fr": "Français",
"it": "Italiano"

View File

@ -1,7 +1,7 @@
{
"welcomeBack": "Willkomen zurück!",
"invalidLoginCredentials": "Benutzername oder Passwort ist falsch",
"usernamePlaceholder": "Benutzername",
"loginNow": "Jetzt Anmelden",
"passwordPlaceholder": "Passwort",
"loginNow": "Jetzt Anmelden"
"usernamePlaceholder": "Benutzername",
"welcomeBack": "Willkomen zurück!"
}

View File

@ -1,10 +1,10 @@
{
"updated": "Profil Aktualisieren",
"email": "E-Mail",
"firstName": "Vorname",
"language": "Sprache",
"lastName": "Nachname",
"updateError": "Profil konnte nicht aktualisiert werden",
"updateNow": "Speichern",
"language": "Sprache",
"email": "E-Mail",
"username": "Benutzername",
"firstName": "Vorname",
"lastName": "Nachname"
"updated": "Profil Aktualisieren",
"username": "Benutzername"
}

View File

@ -1,6 +1,6 @@
{
"welcome": "Willkommen, bitte bestätige noch deine E-Mail",
"credentialsAlreadyInUse": "Deine Daten werden bereits verwendet!",
"gotoLogin": "Sie haben schon einen Account? Weiter zur Anmeldung",
"registerNow": "Jetzt Registrieren",
"gotoLogin": "Sie haben schon einen Account? Weiter zur Anmeldung"
"welcome": "Willkommen, bitte bestätige noch deine E-Mail"
}

View File

@ -1,5 +1,5 @@
{
"totalForms": "Anzahl der Formulare",
"totalUsers": "Anzahl der Benutzer",
"totalSubmissions": "Anzahl der Eingaben"
"totalSubmissions": "Anzahl der Eingaben",
"totalUsers": "Anzahl der Benutzer"
}

View File

@ -1,16 +1,16 @@
{
"progress": "Fortschritt",
"created": "Erstellt",
"lastModified": "Letzte Änderung",
"submission": "Eingabe",
"add": "Neue Eingabe starten",
"city": "Stadt",
"country": "Land",
"created": "Erstellt",
"device": {
"name": "Geräte Name",
"type": "Geräte Typ"
},
"edit": "Formular bearbeiten",
"field": "Feld",
"value": "Wert",
"country": "Land",
"city": "Stadt",
"device": {
"type": "Geräte Typ",
"name": "Geräte Name"
}
"lastModified": "Letzte Änderung",
"progress": "Fortschritt",
"submission": "Eingabe",
"value": "Wert"
}

View File

@ -1,65 +1,65 @@
{
"deleteNow": "Feld löschen",
"confirmDelete": "Wollen sie das Feld wirklich löschen? Bitte beachten sie das es keine Referenzen auf das Feld gibt!",
"title": "Titel",
"description": "Beschreibung",
"required": "Pflichtfeld",
"requiredInfo": "Falls verpflichtend sollte ein Standard Wert gesetzt sein damit Nutzer fortfahren können!",
"date": {
"name": "Datum",
"default": "Standard Dateum",
"max": "Neuest mögliche Datum",
"min": "Ältest mögliche Datum",
"max": "Neuest mögliche Datum"
"name": "Datum"
},
"deleteNow": "Feld löschen",
"description": "Beschreibung",
"dropdown": {
"name": "Auswahl Liste",
"addOption": "Auswahl hinzufügen",
"default": "Standard Wert",
"name": "Auswahl Liste",
"options": "Auswahl",
"titlePlaceholder": "Titel",
"valuePlaceholder": "Wert",
"removeOption": "Entfernen",
"addOption": "Auswahl hinzufügen"
"titlePlaceholder": "Titel",
"valuePlaceholder": "Wert"
},
"email": {
"name": "E-Mail",
"default": "Standard E-Mail"
"default": "Standard E-Mail",
"name": "E-Mail"
},
"hidden": {
"name": "Versteckt",
"default": "Standard Wert"
"default": "Standard Wert",
"name": "Versteckt"
},
"link": {
"name": "URL",
"default": "Standard Url"
"default": "Standard Url",
"name": "URL"
},
"number": {
"name": "Zahl",
"default": "Standard Zahl"
"default": "Standard Zahl",
"name": "Zahl"
},
"radio": {
"name": "Knopf Auswahl Liste",
"addOption": "Auswahl hinzufügen",
"default": "Standard Wert",
"name": "Knopf Auswahl Liste",
"options": "Auswahl",
"titlePlaceholder": "Titel",
"valuePlaceholder": "Wert",
"removeOption": "Entfernen",
"addOption": "Auswahl hinzufügen"
"titlePlaceholder": "Titel",
"valuePlaceholder": "Wert"
},
"rating": {
"name": "Bewertung",
"clearNote": "Erneut klicken um Auswahl aufzuheben",
"default": "Standard Bewertung",
"clearNote": "Erneut klicken um Auswahl aufzuheben"
"name": "Bewertung"
},
"required": "Pflichtfeld",
"requiredInfo": "Falls verpflichtend sollte ein Standard Wert gesetzt sein damit Nutzer fortfahren können!",
"textarea": {
"default": "Standard Wert",
"name": "Mehrzeiliger Text"
},
"textfield": {
"name": "Einzeiliger Text",
"default": "Standard Wert"
},
"textarea": {
"name": "Mehrzeiliger Text",
"default": "Standard Wert"
"default": "Standard Wert",
"name": "Einzeiliger Text"
},
"title": "Titel",
"yes_no": {
"name": "Ja / Nein",
"default": "Standard Wert"
"default": "Standard Wert",
"name": "Ja / Nein"
}
}

View File

@ -1,18 +1,18 @@
{
"baseData": "Basis Daten",
"confirmDelete": "Wollen sie diesen Benutzer wirklich löschen?",
"deleted": "Benutzer gelöscht",
"deleteError": "Benutzer konnte nicht gelöscht werden",
"deleteNow": "Jetzt löschen!",
"deleted": "Benutzer gelöscht",
"loading": "Benutzer wird geladen",
"mange": "Benutzer \"{{email}}\" bearbeiten",
"row": {
"roles": "Rolle",
"email": "E-Mail",
"created": "Erstellt",
"menu": ""
"email": "E-Mail",
"menu": "",
"roles": "Rolle"
},
"updated": "Benutzer aktualisiert updated",
"updateError": "Konnte Benutzer nicht aktualisieren",
"updateNow": "Speichern",
"baseData": "Basis Daten"
"updated": "Benutzer aktualisiert updated"
}

View File

@ -1,15 +1,15 @@
{
"invalidEmail": "ungültige E-Mail!",
"mandatoryFieldsMissing": "Nicht alle Pflichfelder befüllt",
"usernameRequired": "Bitte einen Benutzernamen angeben",
"emailRequired": "Bitte eine E-Mail angeben",
"emailFieldRequired": "Bitte ein E-Mail Feld auswählen",
"languageRequired": "Bitte eine Sprache angeben",
"valueRequired": "Bitte einen Wert angeben",
"emailRequired": "Bitte eine E-Mail angeben",
"invalidEmail": "ungültige E-Mail!",
"invalidUrl": "ungültige Url",
"titleRequired": "Bitte einen Titel angeben",
"templateRequired": "Bitte ein Template angeben",
"subjectRequired": "Bitte einen Betreff angeben",
"languageRequired": "Bitte eine Sprache angeben",
"mandatoryFieldsMissing": "Nicht alle Pflichfelder befüllt",
"passwordMinLength": "Passwort muss mindestens 5 Zeichen haben!",
"passwordRequired": "Bitte ein Passwort angeben",
"passwordMinLength": "Passwort muss mindestens 5 Zeichen haben!"
"subjectRequired": "Bitte einen Betreff angeben",
"templateRequired": "Bitte ein Template angeben",
"titleRequired": "Bitte einen Titel angeben",
"usernameRequired": "Bitte einen Benutzernamen angeben",
"valueRequired": "Bitte einen Wert angeben"
}

View File

@ -1,8 +1,8 @@
{
"home": "Home",
"users": "Users",
"forms": "Forms",
"submissions": "Submissions",
"home": "Home",
"profile": "Profile",
"username": "Username"
"submissions": "Submissions",
"username": "Username",
"users": "Users"
}

View File

@ -1,7 +1,9 @@
{
"logout": "Logout",
"admin": "Admin",
"checkingCredentials": "Checking Credentials",
"loadingCredentials": "Loading Credentials",
"login": "Login",
"register": "Create Account",
"logout": "Logout",
"recover": "Lost Password",
"admin": "Admin"
"register": "Create Account"
}

View File

@ -1,97 +1,97 @@
{
"baseData": {
"isLive": "Is Live",
"language": "Language",
"showFooter": "Show Footer",
"title": "Title"
},
"baseDataTab": "Base Data",
"building": "Building Form",
"submitted": "Thank you for your submission!",
"restart": "Restart Form",
"confirmDelete": "Are you sure delete this form with all submissions?",
"create": "Create new form",
"createNow": "Save",
"created": "Form Created",
"creationError": "Could not create form",
"deleteError": "could not delete form",
"deleteNow": "Delete Now!",
"deleted": "Form deleted",
"design": {
"answerColor": "Answer Color",
"backgroundColor": "Background Color",
"buttonActiveColor": "Button Active Color",
"buttonColor": "Button Color",
"buttonTextColor": "Button Text Color",
"font": "Font",
"questionColor": "Question Color"
},
"designTab": "Design",
"endPage": {
"action": "Action",
"activeColor": "Active Color",
"addButton": "Add Button",
"bgColor": "Background Color",
"buttons": "Buttons",
"color": "Color",
"continueButtonText": "Continue Button Text",
"paragraph": "Paragraph",
"show": "Show",
"text": "Text",
"title": "Title",
"url": "Url"
},
"endPageTab": "End Page",
"loading": "Loading Form",
"mange": "Edit Form \"{{title}}\"",
"new": "New Form",
"created": "Form Created",
"creationError": "Could not create form",
"create": "Create new form",
"createNow": "Save",
"baseDataTab": "Base Data",
"selfNotificationsTab": "Self Notifications",
"respondentNotificationsTab": "Respondent Notifications",
"updated": "Form updated",
"updateError": "Could not update form",
"updateNow": "Save",
"designTab": "Design",
"startPageTab": "Start Page",
"endPageTab": "End Page",
"confirmDelete": "Are you sure delete this form with all submissions?",
"deleted": "Form deleted",
"deleteError": "could not delete form",
"deleteNow": "Delete Now!",
"row": {
"isLive": "Live",
"title": "Title",
"admin": "Owner",
"language": "Language",
"created": "Created",
"lastModified": "Last Modified",
"menu": ""
},
"baseData": {
"isLive": "Is Live",
"title": "Title",
"language": "Language",
"showFooter": "Show Footer"
},
"design": {
"font": "Font",
"backgroundColor": "Background Color",
"questionColor": "Question Color",
"answerColor": "Answer Color",
"buttonColor": "Button Color",
"buttonActiveColor": "Button Active Color",
"buttonTextColor": "Button Text Color"
},
"endPage": {
"show": "Show",
"continueButtonText": "Continue Button Text",
"paragraph": "Paragraph",
"title": "Title",
"buttons": "Buttons",
"url": "Url",
"text": "Text",
"action": "Action",
"bgColor": "Background Color",
"activeColor": "Active Color",
"color": "Color",
"removeButton": "Add Button"
},
"startPage": {
"show": "Show",
"continueButtonText": "Continue Button Text",
"paragraph": "Paragraph",
"title": "Title",
"buttons": "Buttons",
"url": "Url",
"text": "Text",
"action": "Action",
"bgColor": "Background Color",
"activeColor": "Active Color",
"color": "Color",
"addButton": "Add Button"
},
"respondentNotifications": {
"enabled": "Enabled",
"subject": "Subject",
"htmlTemplate": "HTML Template",
"htmlTemplateInfo": "You can also use <u>MJML<\/u> to create your email templates",
"toField": "Email Field",
"toFieldInfo": "Field with Email for receipt",
"fromEmail": "Sender Email",
"fromEmailInfo": "Make sure your mailserver can send from this email"
"fromEmailInfo": "Make sure your mailserver can send from this email",
"htmlTemplate": "HTML Template",
"htmlTemplateInfo": "You can also use <u>MJML</u> to create your email templates",
"subject": "Subject",
"toField": "Email Field",
"toFieldInfo": "Field with Email for receipt"
},
"respondentNotificationsTab": "Respondent Notifications",
"restart": "Restart Form",
"row": {
"admin": "Owner",
"created": "Created",
"isLive": "Live",
"language": "Language",
"lastModified": "Last Modified",
"menu": "",
"title": "Title"
},
"selfNotifications": {
"enabled": "Enabled",
"subject": "Subject",
"htmlTemplate": "HTML Template",
"htmlTemplateInfo": "You can also use <strong>MJML<\/strong> to create your email templates",
"toEmail": "Your Email",
"toEmailInfo": "If not set will send to the admin of the form",
"fromField": "Sender Email",
"fromFieldInfo": "Field with Email, will set the Reply-To header"
}
"fromFieldInfo": "Field with Email, will set the Reply-To header",
"htmlTemplate": "HTML Template",
"htmlTemplateInfo": "You can also use <strong>MJML</strong> to create your email templates",
"subject": "Subject",
"toEmail": "Your Email",
"toEmailInfo": "If not set will send to the admin of the form"
},
"selfNotificationsTab": "Self Notifications",
"startPage": {
"action": "Action",
"activeColor": "Active Color",
"addButton": "Add Button",
"bgColor": "Background Color",
"buttons": "Buttons",
"color": "Color",
"continueButtonText": "Continue Button Text",
"paragraph": "Paragraph",
"show": "Show",
"text": "Text",
"title": "Title",
"url": "Url"
},
"startPageTab": "Start Page",
"submitted": "Thank you for your submission!",
"updateError": "Could not update form",
"updateNow": "Save",
"updated": "Form updated"
}

View File

@ -1,7 +1,7 @@
{
"en": "English",
"de": "Deutsch",
"cn": "繁體中文",
"de": "Deutsch",
"en": "English",
"es": "Español",
"fr": "Français",
"it": "Italiano"

View File

@ -1,7 +1,7 @@
{
"welcomeBack": "Welcome back!",
"invalidLoginCredentials": "username / password are invalid",
"usernamePlaceholder": "Username",
"loginNow": "Login Now",
"passwordPlaceholder": "Password",
"loginNow": "Login Now"
"usernamePlaceholder": "Username",
"welcomeBack": "Welcome back!"
}

View File

@ -1,10 +1,10 @@
{
"updated": "Profile updated",
"email": "Email",
"firstName": "First Name",
"language": "Language",
"lastName": "Last Name",
"updateError": "Could not update Profile",
"updateNow": "Save",
"language": "Language",
"email": "Email",
"username": "Username",
"firstName": "First Name",
"lastName": "Last Name"
"updated": "Profile updated",
"username": "Username"
}

View File

@ -1,6 +1,6 @@
{
"welcome": "Welcome, please also confirm your email",
"credentialsAlreadyInUse": "Some data already in use!",
"gotoLogin": "Have an account? Go to login",
"registerNow": "Register Now",
"gotoLogin": "Have an account? Go to login"
"welcome": "Welcome, please also confirm your email"
}

View File

@ -1,5 +1,5 @@
{
"totalForms": "Total Forms",
"totalUsers": "Total Users",
"totalSubmissions": "Total Submissions"
"totalSubmissions": "Total Submissions",
"totalUsers": "Total Users"
}

View File

@ -1,16 +1,16 @@
{
"progress": "Progress",
"created": "Created",
"lastModified": "Last Change",
"submission": "Submission",
"add": "Add Submission",
"city": "City",
"country": "Country",
"created": "Created",
"device": {
"name": "Device Name",
"type": "Device Type"
},
"edit": "Edit",
"field": "Field",
"value": "Value",
"country": "Country",
"city": "City",
"device": {
"type": "Device Type",
"name": "Device Name"
}
"lastModified": "Last Change",
"progress": "Progress",
"submission": "Submission",
"value": "Value"
}

View File

@ -1,65 +1,65 @@
{
"deleteNow": "Delete Field",
"confirmDelete": "Really remove this field? Check that it is not referenced anywhere!",
"title": "Title",
"description": "Description",
"required": "Required",
"requiredInfo": "If required, default value must be set to enable users to submit form!",
"date": {
"name": "Date",
"default": "Default Date",
"max": "Max Date",
"min": "Min Date",
"max": "Max Date"
"name": "Date"
},
"deleteNow": "Delete Field",
"description": "Description",
"dropdown": {
"name": "Dropdown",
"addOption": "Add Option",
"default": "Default Value",
"name": "Dropdown",
"options": "Options",
"titlePlaceholder": "Title",
"valuePlaceholder": "Value",
"removeOption": "Remove",
"addOption": "Add Option"
"titlePlaceholder": "Title",
"valuePlaceholder": "Value"
},
"email": {
"name": "Email",
"default": "Default Email"
"default": "Default Email",
"name": "Email"
},
"hidden": {
"name": "Hidden",
"default": "Default Value"
"default": "Default Value",
"name": "Hidden"
},
"link": {
"name": "URL",
"default": "Default Link"
"default": "Default Link",
"name": "URL"
},
"number": {
"name": "Number",
"default": "Default Number"
"default": "Default Number",
"name": "Number"
},
"radio": {
"name": "Radio Switch",
"addOption": "Add Option",
"default": "Default Value",
"name": "Radio Switch",
"options": "Options",
"titlePlaceholder": "Title",
"valuePlaceholder": "Value",
"removeOption": "Remove",
"addOption": "Add Option"
"titlePlaceholder": "Title",
"valuePlaceholder": "Value"
},
"rating": {
"name": "Rating",
"clearNote": "Click again to remove the default value",
"default": "Default Value",
"clearNote": "Click again to remove the default value"
"name": "Rating"
},
"required": "Required",
"requiredInfo": "If required, default value must be set to enable users to submit form!",
"textarea": {
"default": "Default Value",
"name": "Text Area"
},
"textfield": {
"name": "Text Line",
"default": "Default Value"
},
"textarea": {
"name": "Text Area",
"default": "Default Value"
"default": "Default Value",
"name": "Text Line"
},
"title": "Title",
"yes_no": {
"name": "Yes / No",
"default": "Default Value"
"default": "Default Value",
"name": "Yes / No"
}
}

View File

@ -1,18 +1,18 @@
{
"baseData": "Base Data",
"confirmDelete": "Are you sure delete this user?",
"deleted": "User deleted",
"deleteError": "could not delete user",
"deleteNow": "Delete Now!",
"deleted": "User deleted",
"loading": "Loading User",
"mange": "Edit User \"{{email}}\"",
"row": {
"roles": "Role",
"email": "Email",
"created": "Created",
"menu": ""
"email": "Email",
"menu": "",
"roles": "Role"
},
"updated": "User updated",
"updateError": "Could not update user",
"updateNow": "Save",
"baseData": "Base Data"
"updated": "User updated"
}

View File

@ -1,15 +1,15 @@
{
"invalidEmail": "Must be a valid email!",
"mandatoryFieldsMissing": "Mandatory fields missing",
"usernameRequired": "Please provide a Username",
"emailRequired": "Please provide an Email",
"emailFieldRequired": "Please select an Email Field",
"languageRequired": "Please select a Language",
"valueRequired": "Please provide a Value",
"emailRequired": "Please provide an Email",
"invalidEmail": "Must be a valid email!",
"invalidUrl": "Must be a valid URL",
"titleRequired": "Please provide a title",
"templateRequired": "Please provide a template",
"subjectRequired": "Please provide a subject",
"languageRequired": "Please select a Language",
"mandatoryFieldsMissing": "Mandatory fields missing",
"passwordMinLength": "Must be longer than or equal to 5 characters!",
"passwordRequired": "Please input your password!",
"passwordMinLength": "Must be longer than or equal to 5 characters!"
"subjectRequired": "Please provide a subject",
"templateRequired": "Please provide a template",
"titleRequired": "Please provide a title",
"usernameRequired": "Please provide a Username",
"valueRequired": "Please provide a Value"
}

8
locales/it/admin.json Normal file
View File

@ -0,0 +1,8 @@
{
"forms": "Moduli",
"home": "casa",
"profile": "Profilo",
"submissions": "proposte",
"username": "nome utente",
"users": "Utenti"
}

9
locales/it/common.json Normal file
View File

@ -0,0 +1,9 @@
{
"admin": "Admin",
"checkingCredentials": "Verifica delle credenziali",
"loadingCredentials": "Caricamento delle credenziali",
"login": "Entra",
"logout": "Logout",
"recover": "Password dimenticata",
"register": "Crea account"
}

97
locales/it/form.json Normal file
View File

@ -0,0 +1,97 @@
{
"baseData": {
"isLive": "Is Live",
"language": "Language",
"showFooter": "Show Footer",
"title": "Title"
},
"baseDataTab": "Base Data",
"building": "Building Form",
"confirmDelete": "Are you sure delete this form with all submissions?",
"create": "Create new form",
"createNow": "Save",
"created": "Form Created",
"creationError": "Could not create form",
"deleteError": "could not delete form",
"deleteNow": "Delete Now!",
"deleted": "Form deleted",
"design": {
"answerColor": "Answer Color",
"backgroundColor": "Background Color",
"buttonActiveColor": "Button Active Color",
"buttonColor": "Button Color",
"buttonTextColor": "Button Text Color",
"font": "Font",
"questionColor": "Question Color"
},
"designTab": "Design",
"endPage": {
"action": "Action",
"activeColor": "Active Color",
"addButton": "Add Button",
"bgColor": "Background Color",
"buttons": "Buttons",
"color": "Color",
"continueButtonText": "Continue Button Text",
"paragraph": "Paragraph",
"show": "Show",
"text": "Text",
"title": "Title",
"url": "Url"
},
"endPageTab": "End Page",
"loading": "Loading Form",
"mange": "Edit Form \"{{title}}\"",
"new": "New Form",
"respondentNotifications": {
"enabled": "Enabled",
"fromEmail": "Sender Email",
"fromEmailInfo": "Make sure your mailserver can send from this email",
"htmlTemplate": "HTML Template",
"htmlTemplateInfo": "You can also use <u>MJML</u> to create your email templates",
"subject": "Subject",
"toField": "Email Field",
"toFieldInfo": "Field with Email for receipt"
},
"respondentNotificationsTab": "Respondent Notifications",
"restart": "Restart Form",
"row": {
"admin": "Owner",
"created": "Created",
"isLive": "Live",
"language": "Language",
"lastModified": "Last Modified",
"menu": "",
"title": "Title"
},
"selfNotifications": {
"enabled": "Enabled",
"fromField": "Sender Email",
"fromFieldInfo": "Field with Email, will set the Reply-To header",
"htmlTemplate": "HTML Template",
"htmlTemplateInfo": "You can also use <strong>MJML</strong> to create your email templates",
"subject": "Subject",
"toEmail": "Your Email",
"toEmailInfo": "If not set will send to the admin of the form"
},
"selfNotificationsTab": "Self Notifications",
"startPage": {
"action": "Action",
"activeColor": "Active Color",
"addButton": "Add Button",
"bgColor": "Background Color",
"buttons": "Buttons",
"color": "Color",
"continueButtonText": "Continue Button Text",
"paragraph": "Paragraph",
"show": "Show",
"text": "Text",
"title": "Title",
"url": "Url"
},
"startPageTab": "Start Page",
"submitted": "Thank you for your submission!",
"updateError": "Could not update form",
"updateNow": "Save",
"updated": "Form updated"
}

View File

@ -1 +1,27 @@
export const it = {}
import admin from './admin.json'
import common from './common.json'
import form from './form.json'
import language from './language.json'
import login from './login.json'
import profile from './profile.json'
import register from './register.json'
import statistic from './statistic.json'
import submission from './submission.json'
import type from './type.json'
import user from './user.json'
import validation from './validation.json'
export const it = {
admin,
common,
form,
language,
login,
profile,
register,
statistic,
submission,
type,
user,
validation,
}

8
locales/it/language.json Normal file
View File

@ -0,0 +1,8 @@
{
"cn": "繁體中文",
"de": "Deutsch",
"en": "English",
"es": "Español",
"fr": "Français",
"it": "Italiano"
}

7
locales/it/login.json Normal file
View File

@ -0,0 +1,7 @@
{
"invalidLoginCredentials": "username / password are invalid",
"loginNow": "Login Now",
"passwordPlaceholder": "Password",
"usernamePlaceholder": "Username",
"welcomeBack": "Welcome back!"
}

10
locales/it/profile.json Normal file
View File

@ -0,0 +1,10 @@
{
"email": "Email",
"firstName": "First Name",
"language": "Language",
"lastName": "Last Name",
"updateError": "Could not update Profile",
"updateNow": "Save",
"updated": "Profile updated",
"username": "Username"
}

6
locales/it/register.json Normal file
View File

@ -0,0 +1,6 @@
{
"credentialsAlreadyInUse": "Some data already in use!",
"gotoLogin": "Have an account? Go to login",
"registerNow": "Register Now",
"welcome": "Welcome, please also confirm your email"
}

View File

@ -0,0 +1,5 @@
{
"totalForms": "Total Forms",
"totalSubmissions": "Total Submissions",
"totalUsers": "Total Users"
}

View File

@ -0,0 +1,16 @@
{
"add": "Add Submission",
"city": "City",
"country": "Country",
"created": "Created",
"device": {
"name": "Device Name",
"type": "Device Type"
},
"edit": "Edit",
"field": "Field",
"lastModified": "Last Change",
"progress": "Progress",
"submission": "Submission",
"value": "Value"
}

65
locales/it/type.json Normal file
View File

@ -0,0 +1,65 @@
{
"confirmDelete": "Really remove this field? Check that it is not referenced anywhere!",
"date": {
"default": "Default Date",
"max": "Max Date",
"min": "Min Date",
"name": "Date"
},
"deleteNow": "Delete Field",
"description": "Description",
"dropdown": {
"addOption": "Add Option",
"default": "Default Value",
"name": "Dropdown",
"options": "Options",
"removeOption": "Remove",
"titlePlaceholder": "Title",
"valuePlaceholder": "Value"
},
"email": {
"default": "Default Email",
"name": "Email"
},
"hidden": {
"default": "Default Value",
"name": "Hidden"
},
"link": {
"default": "Default Link",
"name": "URL"
},
"number": {
"default": "Default Number",
"name": "Number"
},
"radio": {
"addOption": "Add Option",
"default": "Default Value",
"name": "Radio Switch",
"options": "Options",
"removeOption": "Remove",
"titlePlaceholder": "Title",
"valuePlaceholder": "Value"
},
"rating": {
"clearNote": "Click again to remove the default value",
"default": "Default Value",
"name": "Rating"
},
"required": "Required",
"requiredInfo": "If required, default value must be set to enable users to submit form!",
"textarea": {
"default": "Default Value",
"name": "Text Area"
},
"textfield": {
"default": "Default Value",
"name": "Text Line"
},
"title": "Title",
"yes_no": {
"default": "Default Value",
"name": "Yes / No"
}
}

18
locales/it/user.json Normal file
View File

@ -0,0 +1,18 @@
{
"baseData": "Base Data",
"confirmDelete": "Are you sure delete this user?",
"deleteError": "could not delete user",
"deleteNow": "Delete Now!",
"deleted": "User deleted",
"loading": "Loading User",
"mange": "Edit User \"{{email}}\"",
"row": {
"created": "Created",
"email": "Email",
"menu": "",
"roles": "Role"
},
"updateError": "Could not update user",
"updateNow": "Save",
"updated": "User updated"
}

View File

@ -0,0 +1,15 @@
{
"emailFieldRequired": "Please select an Email Field",
"emailRequired": "Please provide an Email",
"invalidEmail": "Must be a valid email!",
"invalidUrl": "Must be a valid URL",
"languageRequired": "Please select a Language",
"mandatoryFieldsMissing": "Mandatory fields missing",
"passwordMinLength": "Must be longer than or equal to 5 characters!",
"passwordRequired": "Please input your password!",
"subjectRequired": "Please provide a subject",
"templateRequired": "Please provide a template",
"titleRequired": "Please provide a title",
"usernameRequired": "Please provide a Username",
"valueRequired": "Please provide a Value"
}

78
locales/missing.ts Normal file
View File

@ -0,0 +1,78 @@
const fs = require('fs');
const glob = require('glob');
const { program } = require('commander');
const merge = require('lodash.merge');
const dirs: string[] = []
program.version('1.0.0');
program
.arguments('<limit>')
.action((limit) => {
dirs.push(
...limit
.split(',')
.map(l => `locales/${l}/`)
)
})
.option('-l, --limit <limit>', 'check only given languages')
.parse(process.argv);
let all = {}
glob.sync('locales/**/*.json').forEach(file => {
try {
const original = JSON.parse(fs.readFileSync(file))
all = merge(
all,
{
[file.replace(/^.*\/([a-z]+)\.json$/, '$1')]: original
}
)
} catch (e) {
console.error('could not process file', file, e)
}
})
const compare = (original, compareTo, path, file) => {
const oKeys = Object.keys(original)
const aKeys = Object.keys(compareTo)
const missing = aKeys.filter(k => !oKeys.includes(k))
missing.forEach(k => {
console.log(`MISSING ${file} > ${[...path, k].join('.')}`)
})
oKeys.forEach(k => {
if (typeof original[k] === 'object') {
compare(original[k], compareTo[k], [...path, k], file)
}
})
}
dirs.forEach(dir => {
const files: string[] = glob.sync(`${dir}*.json`)
const existingFiles = files.map(file => file.replace(/^.*\/([a-z]+)\.json$/, '$1'))
Object
.keys(all)
.filter(file => !existingFiles.includes(file))
.forEach(file => {
console.log(`MISSING ${dir}${file}.json`)
})
files.forEach(file => {
try {
compare(
JSON.parse(fs.readFileSync(file)),
all[file.replace(/^.*\/([a-z]+)\.json$/, '$1')],
[],
file
)
} catch (e) {
console.error('could not process file', file, e)
}
})
})

52
locales/sort.ts Normal file
View File

@ -0,0 +1,52 @@
const fs = require('fs');
const glob = require('glob');
const { program } = require('commander');
program.version('1.0.0');
program
.option('-f, --force', 'force write to existing files')
program.parse(process.argv);
const sort = obj => {
if (typeof obj !== 'object') {
return obj
}
const result = {}
Object
.keys(obj)
.sort()
.map(key => {
result[key] = sort(obj[key])
})
return result
}
glob.sync('locales/*/').forEach(dir => {
const files: string[] = glob.sync(`${dir}*.json`)
files.forEach(file => {
try {
const raw = fs.readFileSync(file)
const original = JSON.parse(raw)
const sorted = sort(original)
const next = JSON.stringify(sorted, null, 2) + "\n"
if (raw != next) {
if (!program.force) {
console.log('changes found, but skipped', file)
return
}
console.log('updated', file)
fs.writeFileSync(file, next)
}
} catch (e) {
console.error('could not process file', file, e)
}
})
})

View File

@ -7,7 +7,8 @@
"build": "next build",
"export": "cross-env SPA=1 next build && next export",
"start": "next start -p $PORT",
"server": "node server.js"
"translation:sort": "cross-env TS_NODE_TRANSPILE_ONLY=true ts-node-script locales/sort.ts",
"translation:missing": "cross-env TS_NODE_TRANSPILE_ONLY=true ts-node locales/missing.ts"
},
"dependencies": {
"@ant-design/icons": "^4.1.0",
@ -42,6 +43,10 @@
"devDependencies": {
"@types/node": "^14.0.1",
"@types/react": "^16.9.35",
"commander": "^5.1.0",
"glob": "^7.1.6",
"lodash.merge": "^4.6.2",
"ts-node": "^8.10.2",
"typescript": "^3.9.2"
}
}

View File

@ -23,15 +23,15 @@ const Index: NextPage = () => {
>
<Row gutter={16}>
<Col span={8}>
<Statistic title={t('statistic:total-forms')} value={data && data.forms.total} />
<Statistic title={t('statistic:totalForms')} value={data && data.forms.total} />
</Col>
<Col span={8}>
<Statistic title={t('statistic:total-users')} value={data && data.users.total} />
<Statistic title={t('statistic:totalUsers')} value={data && data.users.total} />
</Col>
<Col span={8}>
<Statistic title={t('statistic:total-submissions')} value={data && data.submissions.total} />
<Statistic title={t('statistic:totalSubmissions')} value={data && data.submissions.total} />
</Col>
</Row>
</Structure>

View File

@ -4,12 +4,14 @@ import {NextPage} from 'next'
import getConfig from 'next/config'
import {useRouter} from 'next/router'
import React, {useEffect} from 'react'
import {useTranslation} from 'react-i18next'
import {LoadingPage} from '../components/loading.page'
const { publicRuntimeConfig } = getConfig()
const Index: NextPage = () => {
const router = useRouter()
const { t } = useTranslation()
useEffect(() => {
if (router.pathname !== window.location.pathname) {
@ -32,7 +34,7 @@ const Index: NextPage = () => {
if (publicRuntimeConfig.spa || (process.browser && router.pathname !== window.location.pathname)) {
return (
<LoadingPage message={'loading'} />
<LoadingPage message={t('loading')} />
)
}

View File

@ -1634,6 +1634,11 @@ aproba@^1.1.1:
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
arg@^4.1.0:
version "4.1.3"
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
argparse@^1.0.7:
version "1.0.10"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
@ -2264,6 +2269,11 @@ commander@^2.20.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
commander@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
@ -2722,6 +2732,11 @@ des.js@^1.0.0:
inherits "^2.0.1"
minimalistic-assert "^1.0.0"
diff@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
diffie-hellman@^5.0.0:
version "5.0.3"
resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
@ -3241,7 +3256,7 @@ glob-to-regexp@^0.4.1:
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
glob@^7.1.3, glob@^7.1.4:
glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
@ -3905,6 +3920,11 @@ lodash.memoize@^4.1.2:
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
lodash.merge@^4.6.2:
version "4.6.2"
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
lodash.sortby@^4.7.0:
version "4.7.0"
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
@ -3949,6 +3969,11 @@ make-dir@^3.0.2:
dependencies:
semver "^6.0.0"
make-error@^1.1.1:
version "1.3.6"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
map-cache@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
@ -5987,7 +6012,7 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
source-map-url "^0.4.0"
urix "^0.1.0"
source-map-support@~0.5.12:
source-map-support@^0.5.17, source-map-support@~0.5.12:
version "0.5.19"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
@ -6427,6 +6452,17 @@ ts-invariant@^0.4.0, ts-invariant@^0.4.4:
dependencies:
tslib "^1.9.3"
ts-node@^8.10.2:
version "8.10.2"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d"
integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==
dependencies:
arg "^4.1.0"
diff "^4.0.1"
make-error "^1.1.1"
source-map-support "^0.5.17"
yn "3.1.1"
ts-pnp@^1.1.6:
version "1.2.0"
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
@ -6767,6 +6803,11 @@ yallist@^4.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yn@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
zen-observable-ts@^0.8.21:
version "0.8.21"
resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz#85d0031fbbde1eba3cd07d3ba90da241215f421d"