Fix typos, replace diff library, improve add translations file commit UI and improve OpenAI prompt

This commit is contained in:
Simon Prévost 2023-11-05 14:20:21 -05:00
parent 4fb0d20f61
commit 0298f9b754
12 changed files with 97 additions and 65 deletions

View File

@ -16,7 +16,7 @@ defmodule Accent.Prompts.Provider.OpenAI do
%{
"role" => "system",
"content" =>
~s{Following this instruction "#{prompt.content}", respond with the improved text in the users message format.}
~s{Following this instruction "#{prompt.content}", respond with the improved text in the users message format without repeating the instructions.}
},
%{
"role" => "user",

View File

@ -21,7 +21,7 @@ defmodule Accent.ErrorView do
%{error: "Not found", message: "-"}
iex> Accent.ErrorView.render("500.json", %{})
%{error: "Internal error", message: "An error occured, someone as been notified"}
%{error: "Internal error", message: "An error occurred, someone as been notified"}
iex> Accent.ErrorView.render("404.html", %{})
"Page not found"
@ -66,7 +66,7 @@ defmodule Accent.ErrorView do
def render("500.json", _assigns) do
%{
error: "Internal error",
message: "An error occured, someone as been notified"
message: "An error occurred, someone as been notified"
}
end

View File

@ -10,6 +10,7 @@ defmodule AccentTest.Movement.Builders.SlaveConflictSync do
alias Accent.Translation
alias Accent.User
alias Movement.Builders.SlaveConflictSync, as: SlaveConflictSyncBuilder
alias Movement.Context
@user %User{email: "test@test.com"}
@ -40,8 +41,8 @@ defmodule AccentTest.Movement.Builders.SlaveConflictSync do
Repo.insert!(%Translation{key: "a", proposed_text: "C", revision_id: other_revision.id, document_id: document.id})
context =
%Movement.Context{operations: [%{key: "a", action: "conflict_on_proposed"}]}
|> Movement.Context.assign(:revisions, [revision, other_revision])
%Context{operations: [%{key: "a", action: "conflict_on_proposed"}]}
|> Context.assign(:revisions, [revision, other_revision])
|> SlaveConflictSyncBuilder.build()
operations = Enum.map(context.operations, &Map.get(&1, :action))
@ -73,9 +74,9 @@ defmodule AccentTest.Movement.Builders.SlaveConflictSync do
})
context =
%Movement.Context{operations: [%{key: "a", action: "conflict_on_proposed"}]}
|> Movement.Context.assign(:revisions, [revision, other_revision])
|> Movement.Context.assign(:document, document)
%Context{operations: [%{key: "a", action: "conflict_on_proposed"}]}
|> Context.assign(:revisions, [revision, other_revision])
|> Context.assign(:document, document)
|> SlaveConflictSyncBuilder.build()
operations = Enum.map(context.operations, &Map.get(&1, :action))

View File

@ -1,6 +1,7 @@
import {helper} from '@ember/component/helper';
import {htmlSafe} from '@ember/template';
import {diffWords} from 'diff';
import DiffMatchPatch from 'diff-match-patch';
const diffMatchPatch = new DiffMatchPatch();
const SIMILARITY_THRESHOLD = 0.4;
@ -82,14 +83,15 @@ const stringDiff = ([text1, text2]: [string, string]) => {
if (similarity < SIMILARITY_THRESHOLD)
return htmlSafe(UNDIFFABLE_TAG_TEMPLATE(text2));
const diff = diffWords(text2 || '', text1 || '');
const diff = diffMatchPatch.diff_main(text2 || '', text1 || '');
diffMatchPatch.diff_cleanupSemantic(diff);
return htmlSafe(
diff
.map((part: {value: string; removed: string; added: string}) => {
const value = escapeExpression(part.value);
if (part.removed) return REMOVED_TAG_TEMPLATE(value);
if (part.added) return ADDED_TAG_TEMPLATE(value);
.map(([op, text]: [number, string]) => {
const value = escapeExpression(text);
if (op === -1) return REMOVED_TAG_TEMPLATE(value);
if (op === 1) return ADDED_TAG_TEMPLATE(value);
return value;
})

View File

@ -48,7 +48,7 @@
},
"login_header": {
"text": "Login",
"subtext": "Only your email address, fullname and profile picture will be used for your Accent profile.",
"subtext": "Only your email address, full name and profile picture will be used for your Accent profile.",
"subtitle": "Your reliable, <em>simple</em>, developer-oriented translation tool",
"footer_open_source_link": "100% open-source",
"footer_mirego_link": "Mirego",
@ -92,7 +92,7 @@
"commit_file": {
"cancel_button": "Cancel",
"file_input_button": "Choose a file",
"commit_error": "An error occured while uploading the file",
"commit_error": "An error occurred while uploading the file",
"document_format": "Format of the file",
"document_path": "Name of the file",
"version_tag": "Version",
@ -105,7 +105,7 @@
"new_document_warning": "The changes will create a new file.",
"existing_document_warning": "The changes will be applied to the already existing file.",
"peek_button": "Preview sync",
"peek_error": "An error occured while previewing the file",
"peek_error": "An error occurred while previewing the file",
"peek_help": "This action will have no effects on your project.",
"sync_button": "Sync",
"upload_help": "After choosing a file you will be able to preview the changes on your project",
@ -151,7 +151,7 @@
"correct_all_button": "Mark all strings as reviewed for this language",
"no_translations": "No strings to review for: {query}",
"all_reviewed_title": "All reviewed",
"all_reviewed_subtitle": "Every strings have been marked as reviewed"
"all_reviewed_subtitle": "All strings have been marked as reviewed"
},
"dashboard_master_revision": {
"features": {
@ -382,26 +382,26 @@
"manage_languages": "Manage languages",
"manage_languages_text": "Add/remove languages translated in the project",
"jipt": "Just In Place Translations",
"jipt_text": "Live translation on any applications, with builtin Javascript library",
"jipt_text": "Live translation on any applications, with built-in JavaScript library",
"machine_translations": "Machine translations",
"machine_translations_text": "Configure an external service to translate languages automatically",
"prompts": "AI Assistant",
"prompts_text": "Configure your assistant to help you writing, improving, correcting your text"
"prompts_text": "Configure your assistant to help write, improve or correct your strings"
},
"machine_translations": {
"title": "Machine translations",
"text": "Add a valid configuration to enable translating directly in the Review page. You can also translate your projects file as well as arbirtary files that you upload on Accent.",
"enabled_actions_sync": "Automatically run on project sync",
"use_platform_label": "Use the platform config if available",
"config_key_help_present": "Config key has been set but the value will never be exposed via the API.",
"config_key_help_present": "Config key has been set, but the value will never be exposed via the API.",
"config_key_help_not_present": "Once saved, the config key will never be shown.",
"config_key_placeholder": "Paste the config key here…"
},
"prompts": {
"title": "AI Assistant",
"help": "Instructions will be available on every string inputs to help you improve your content. The clearer the instructions you give to the assistant, to better the output will be.",
"help": "Instructions will be available on all string inputs to help you improve your content. The clearer the instructions you give to the assistant, to better the output will be.",
"new_button": "Add a new instruction",
"config_key_help_present": "Config key has been set but the value will never be exposed via the API.",
"config_key_help_present": "Config key has been set, but the value will never be exposed via the API.",
"config_key_help_not_present": "Once saved, the config key will never be shown.",
"delete_confirm": "Are you sure you want to delete this instruction?"
},
@ -429,7 +429,7 @@
"script_title": "Add the script at the root of your app",
"add_language_title": "Add the pseudo language to your project",
"add_language_image_1": "Here is a language like you already have in your project:",
"add_language_image_2": "Here is the pseudo language named \"accent\" that act as a normal translsation in your project:",
"add_language_image_2": "Here is the pseudo language named \"accent\" that act as a normal translation in your project:",
"use_language_title": "Use the pseudo language",
"pseudo_language_text": "The Accent script parses the DOM for strings that match the Just In Place Translations export. Go in the \"Files\" section to export the file or use the CLI to add the pseudo language to your project.",
"use_language_text": "By switching to the Accent language using your favorite framework i18n tool, the page will display the strings in the pseudo language files and the Accent script will replace those by the strings in Accent. It will also bind click event on the elements so that you can select strings directly in your app and edit them via Accent."
@ -700,11 +700,11 @@
"project_manage_languages": {
"create_error": "Language can not be added right now. Try again later.",
"conflicts_explain_title": "On conflicts",
"conflicts_explain_text": "Every string addition or deletion will be reflected in the language. When a text changes in the main revision, the string in the language will be marked as in review.",
"conflicts_explain_text": "All string addition or deletion will be reflected in the language. When a text changes in the main revision, the string in the language will be marked as in review.",
"sync_explain_title": "On sync",
"sync_explain_text": "The main language will be the default source when syncing a file. The other languages are never \"synced\", they just follow the main language.",
"add_translations_explain_title": "On add translations",
"add_translations_explain_text": "Every languages can have strings \"merged\" into it by adding translations. Conflict resolution will work the same but will never add or remove strings.",
"add_translations_explain_text": "All languages can have strings \"merged\" into it by adding translations. Conflict resolution will work the same but will never add or remove strings.",
"main_text": "You can add a new language that will follow the main language.",
"title": "Manage languages"
},
@ -1017,9 +1017,9 @@
"loading_content": "Fetching dashboard…",
"flash_messages": {
"revision_correct_success": "All strings in the language have been marked as reviewed",
"revision_correct_error": "An error has occured when marking all the strings in that language as reviewed",
"revision_correct_error": "An error has occurred when marking all the strings in that language as reviewed",
"revision_uncorrect_success": "All strings in the language have been marked to be reviewed",
"revision_uncorrect_error": "An error has occured when marking all the strings in that language to be reviewed"
"revision_uncorrect_error": "An error has occurred when marking all the strings in that language to be reviewed"
}
},
"activities": {
@ -1039,7 +1039,7 @@
"loading_content": "Searching the strings in review…",
"flash_messages": {
"revision_correct_success": "All strings in the language have been marked as reviewed",
"revision_correct_error": "An error has occured when marking all the strings in that language as reviewed",
"revision_correct_error": "An error has occurred when marking all the strings in that language as reviewed",
"translate_provider_error": "The string could not be translated by: {provider}",
"translate_error": {
"unsupported_target": "The string could not be translated: Unsupported target {target}",

View File

@ -146,12 +146,12 @@
}
},
"conflict_item": {
"correct_error_text": "Impossible de corriger le conflit. Réessayez plus tard.",
"correct_error_text": "Impossible de réviser le conflit. Réessayez plus tard.",
"conflicted_label": "à réviser",
"in_review_tooltip": "Voir à réviser",
"translate_tooltip": "Traduire à partir de ce texte",
"translation_tooltip": "Afficher les détails de la chaîne",
"uncorrect_error_text": "Impossible de corriger le conflit. Réessayez plus tard."
"uncorrect_error_text": "Impossible de réviser le conflit. Réessayez plus tard."
},
"conflicts_actions": {
"reload_button": "Recharger"
@ -180,7 +180,7 @@
"title": "Exportation"
},
"review": {
"text": "Marquez les chaînes comme révisées, corrigez-les tout en voyant un diff textuel du contenu précédent. Vous pouvez même voir le texte dune autre langue pour la chaîne correspondante.",
"text": "Marquez les chaînes comme révisées, révisez-les tout en voyant un diff textuel du contenu précédent. Vous pouvez même voir le texte dune autre langue pour la chaîne correspondante.",
"title": "Révisions"
},
"sync": {
@ -294,7 +294,7 @@
"details_label": "Détails:",
"explanation_label": "Pourquoi est-ce arrivé?",
"rollback_confirm": "Voulez-vous vraiment annuler cette activité ? Vous ne pouvez pas annuler une restauration.",
"rollback": "Retour en arriere",
"rollback": "Retour en arrière",
"stats_label_text": "Activités réalisées :",
"stats_text": {
"merge_on_corrected": "Chaîne traduite",
@ -322,7 +322,7 @@
"create_version": "Lorsquun utilisateur fige létat de toutes les chaînes pour le marquer avec une version. Utilisé pour gérer plusieurs versions de la même application en parallèle.",
"conflict_on_corrected": "Lorsque le texte téléchargé est différent du dernier texte synchronisé et que le dernier texte synchronisé est différent du texte actuel. Cela se produit si le texte a été touché par un utilisateur dans Accent. Il est utile didentifier un conflit causé par une différence entre une synchronisation et la version modifiée dans Accent.",
"conflict_on_proposed": "Lorsque le texte téléchargé est différent du dernier texte téléchargé et que le dernier texte synchronisé est égal au texte actuel. Cela se produit si le texte na pas été touché par un utilisateur dans Accent. Il est utile didentifier un conflit causé uniquement par une synchronisation et non par une intervention humaine.",
"conflict_on_slave": "Lorsque lactivité \"conflit sur proposition\" ou \"conflit sur corrigé\" se produit sur une chaîne, les clés correspondantes dans dautres langues appliquent cette activité. Le but de cette activité est de signaler un changement de sens dans la langue principale dans les traductions. La chaîne sera signalée comme \"en révision\"",
"conflict_on_slave": "Lorsque lactivité \"conflit sur proposition\" ou \"conflit sur révisé\" se produit sur une chaîne, les clés correspondantes dans dautres langues appliquent cette activité. Le but de cette activité est de signaler un changement de sens dans la langue principale dans les traductions. La chaîne sera signalée comme \"en révision\"",
"correct_all": "Lorsque toutes les chaînes sont marquées manuellement comme révisées.",
"correct_conflict": "Lorsquune chaîne est marquée manuellement comme révisée.",
"batch_correct_conflict": "Lorsque plusieurs chaînes ont été marquées comme révisées dans un court laps de temps.",
@ -396,7 +396,7 @@
},
"links_list": {
"prompts": "Assistant IA",
"prompts_text": "Configurez votre assistant pour vous aider à rédiger, améliorer, corriger votre texte",
"prompts_text": "Configurez votre assistant pour vous aider à rédiger, améliorer, réviser votre texte",
"collaborators": "Collaborateurs",
"collaborators_text": "Gérer qui a accès à quelles fonctionnalités de ce projet",
"badges": "Insignes",
@ -408,7 +408,7 @@
"manage_languages": "Gérer les langues",
"manage_languages_text": "Ajouter/supprimer des langues traduites dans le projet",
"jipt": "Traductions JIPT",
"jipt_text": "Traduction en direct sur toutes les applications, avec bibliothèque Javascript intégrée",
"jipt_text": "Traduction en direct sur toutes les applications, avec bibliothèque JavaScript intégrée",
"machine_translations": "Traductions machines",
"machine_translations_text": "Configurer un service externe pour traduire automatiquement les langues"
},
@ -529,23 +529,23 @@
},
"project_activities_filter": {
"actions": {
"conflict_on_corrected": "Conflit sur corrigé",
"conflict_on_corrected": "Conflit sur révisé",
"conflict_on_proposed": "Conflit sur la proposition",
"conflict_on_slave": "Conflit sur lesclave",
"correct_all": "Corrigez tout",
"correct_conflict": "Corriger le conflit",
"batch_correct_conflict": "Corriger les conflits",
"correct_all": "Révisez tout",
"correct_conflict": "Réviser le conflit",
"batch_correct_conflict": "Réviser les conflits",
"document_delete": "Suppression de fichier",
"new": "Nouveau",
"renew": "Renouveler",
"new_comment": "Nouveau commentaire",
"remove": "Éliminer",
"rollback": "Retour en arriere",
"rollback": "Retour en arrière",
"batch_merge": "Ajouter des traductions aux fichiers",
"merge": "Ajouter des traductions au fichier",
"sync": "Synchroniser le fichier",
"batch_sync": "Synchroniser les fichiers",
"uncorrect_all": "Ne pas corriger tout",
"uncorrect_all": "Ne pas réviser tout",
"uncorrect_conflict": "Conflit incorrect",
"update": "Mettre à jour la chaîne",
"batch_update": "Mettre à jour les chaînes"
@ -678,7 +678,7 @@
"export_jipt": "Traduction JIPT"
},
"project_navigation": {
"back_to_projects": "Retour au projets",
"back_to_projects": "Retour aux projets",
"engage": "Engager",
"revise": "Réviser",
"manage": "Gérer",
@ -727,14 +727,14 @@
"related_translations_list": {
"comments_label": "{count, plural, =0 {Aucun commentaire} =1 {1 commentaire} other {# commentaires}}",
"conflicted_label": "à réviser",
"master_label": "Principale",
"master_label": "principale",
"save_button": "Sauver",
"last_updated_label": "Dernière mise à jour:",
"new_language_link": "Nouveau langage",
"no_related_translations": "Pas encore de traductions. Vous devez ajouter une autre langue à votre projet."
},
"removed_translation_edit": {
"cant_edit": "Cette chaîne ne peut pas être modifiée car elle a été supprimée."
"cant_edit": "Cette chaîne ne peut pas être modifiée, car elle a été supprimée."
},
"project_manage_languages_create_form": {
"default_null": "Initialiser le langage avec des chaînes vides",
@ -757,7 +757,7 @@
"default_version": "Version par défaut",
"orders": {
"az": "Ordre alphabétique",
"original": "Ordre originale"
"original": "Ordre original"
},
"advanced_filters_title": "Filtres de traduction",
"advanced_filters": {
@ -822,7 +822,7 @@
"correct_button": "Mettre à jour et marquer comme révisé",
"previous_text": "Texte précédent :",
"uncorrect_button": "Remettre à révisée",
"uneditable": "Le texte nest pas modifiable car il a été marqué comme révisé",
"uneditable": "Le texte nest pas modifiable, car il a été marqué comme révisé",
"update_text": "Mettre à jour le texte",
"form": {
"true_option": "vrai",
@ -832,7 +832,7 @@
"float_type_notice": "Le texte a été défini avec une valeur flottante.",
"empty_type_notice": "Le texte a été défini sur une chaîne vide",
"empty_type_placeholder": "Texte vide",
"null_type_notice": "Le texte a été défini sur null",
"null_type_notice": "Le texte a été défini sur nulle",
"file_comment": {
"title": "Commentaire de fichier"
},
@ -854,7 +854,7 @@
"FIRST_LETTER_CASE": "La casse de la première lettre ne concorde pas",
"THREE_DOTS_ELLIPSIS": "Trois points pour des points de suspension",
"SAME_TRAILING_CHARACTER": "Le caractère de fin ne concorde pas",
"SPELLING": "Ortographe",
"SPELLING": "Orthographe",
"URL_COUNT": "Le nombre dURL ne concorde pas"
},
"checks": {
@ -866,8 +866,8 @@
"FIRST_LETTER_CASE": "La première lettre de traduction ne correspond pas à la casse de la langue principal",
"THREE_DOTS_ELLIPSIS": "La chaîne contient trois points au lieu de points de suspension",
"SAME_TRAILING_CHARACTER": "La chaîne ne correspond pas au caractère de fin de la langue principal",
"SPELLING": "La chaîne contient une faute dortographe",
"URL_COUNT": "Le cnombre dURL ne correspond pas à la chaîne principale"
"SPELLING": "La chaîne contient une faute dorthographe",
"URL_COUNT": "Le nombre dURL ne correspond pas à la chaîne principale"
}
}
},
@ -881,7 +881,7 @@
"translation_splash_title": {
"plural_label": "pluriel",
"conflicted_label": "à réviser",
"master_label": "Principale",
"master_label": "principale",
"last_updated_label": "Dernière mise à jour:",
"removed_label": "Cette chaîne a été supprimée {removedAt}"
},
@ -930,7 +930,7 @@
"api_token": "Obtenir un jeton API",
"api_token_text": "Interagissez avec lAPI de votre projet",
"start_review": "Commencez à réviser et à traduire",
"export": "Exporter le fichier corrigé",
"export": "Exporter le fichier révisé",
"help": "Aider?"
}
},
@ -1057,14 +1057,14 @@
"machine_translations_config_remove_error": "La configuration des traductions automatiques na pas pu être supprimée",
"machine_translations_config_remove_success": "La configuration des traductions automatiques a été supprimée avec succès",
"prompts_update_success": "Linstruction a été mise à jour avec succès",
"prompts_update_error": "Linstruction n'a pas pu être mise à jour",
"prompts_update_error": "Linstruction na pas pu être mise à jour",
"prompts_create_success": "Linstruction a été créée avec succès",
"prompts_create_error": "Impossible de créer linstruction",
"prompts_remove_success": "Linstruction a été supprimée avec succès",
"prompts_remove_error": "Impossible de supprimer linstruction",
"prompts_config_error": "La configuration de lassistant AI n'a pas pu être enregistrée",
"prompts_config_error": "La configuration de lassistant AI na pas pu être enregistrée",
"prompts_config_success": "La configuration de lassistant AI a été enregistrée avec succès",
"prompts_config_remove_error": "La configuration de lassistant AI n'a pas pu être supprimée",
"prompts_config_remove_error": "La configuration de lassistant AI na pas pu être supprimée",
"prompts_config_remove_success": "La configuration de lassistant AI a été supprimée avec succès",
"collaborator_add_error": "Le collaborateur na pas pu être ajouté",
"collaborator_add_success": "Le collaborateur a été ajouté avec succès",

View File

@ -118,7 +118,9 @@ export default class CommitFile extends Component<Args> {
@tracked
revisionValue =
this.mappedRevisions.find(({value}) => value === this.revision) ||
this.mappedRevisions[0];
(this.args.commitAction === 'merge' && this.mappedRevisions[1])
? this.mappedRevisions[1]
: this.mappedRevisions[0];
@tracked
versionValue =
@ -127,7 +129,11 @@ export default class CommitFile extends Component<Args> {
) || this.mappedVersions[0];
@tracked
revision = this.args.revisions.find((revision: any) => revision.isMaster);
revision =
this.args.revisions.find((revision: any) => revision.isMaster) ||
(this.args.commitAction === 'merge' && this.args.revisions[1])
? this.args.revisions[1]
: this.args.revisions[0];
@tracked
version: {id: string; tag: string} | null = null;

View File

@ -274,7 +274,7 @@
.conflictedText-references-conflicted {
display: flex;
align-items: flex-start;
margin-top: 10px;
margin-top: 7px;
font-size: 12px;
color: var(--color-black);
}

View File

@ -428,7 +428,7 @@ input[type='radio'] {
}
:global(.added) {
padding: 0 3px;
padding: 0 1px;
background: hsl(
var(--color-green-hue),
var(--color-green-saturation),
@ -438,13 +438,13 @@ input[type='radio'] {
}
:global(.undiffable) {
padding: 0 3px;
padding: 0 1px;
background: var(--background-light-highlight);
color: var(--color-gray);
}
:global(.removed) {
padding: 0 3px;
padding: 0 1px;
background: hsl(
var(--color-error-hue),
var(--color-error-saturation),

View File

@ -19,7 +19,7 @@
"color": "4.2.1",
"cryptiles": "4.1.3",
"date-fns": "2.28.0",
"diff": "5.0.0",
"diff-match-patch": "1.0.5",
"ember-auto-import": "2.4.0",
"ember-autoresize-modifier": "0.5.0",
"ember-cli": "4.1.1",
@ -64,6 +64,7 @@
"@ember/test-helpers": "2.6.0",
"@glimmer/component": "1.0.4",
"@types/diff": "5.0.2",
"@types/diff-match-patch": "^1.0.35",
"@types/ember": "4.0.0",
"@types/ember__test-helpers": "2.6.1",
"@types/ember-mocha": "0.16.0",
@ -3067,6 +3068,12 @@
"integrity": "sha512-uw8eYMIReOwstQ0QKF0sICefSy8cNO/v7gOTiIy9SbwuHyEecJUm7qlgueOO5S1udZ5I/irVydHVwMchgzbKTg==",
"dev": true
},
"node_modules/@types/diff-match-patch": {
"version": "1.0.35",
"resolved": "https://registry.npmjs.org/@types/diff-match-patch/-/diff-match-patch-1.0.35.tgz",
"integrity": "sha512-+RpmGthShsToYni9Df1DBhFfPuMV1/VgDvedhSCgP5ll7QsNYcaxfqv4/8Vzbw7FtEscD80OCyycQuMtIVL07Q==",
"dev": true
},
"node_modules/@types/ember": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/ember/-/ember-4.0.0.tgz",
@ -10098,6 +10105,11 @@
"node": ">=0.3.1"
}
},
"node_modules/diff-match-patch": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz",
"integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw=="
},
"node_modules/diffie-hellman": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
@ -31506,6 +31518,12 @@
"integrity": "sha512-uw8eYMIReOwstQ0QKF0sICefSy8cNO/v7gOTiIy9SbwuHyEecJUm7qlgueOO5S1udZ5I/irVydHVwMchgzbKTg==",
"dev": true
},
"@types/diff-match-patch": {
"version": "1.0.35",
"resolved": "https://registry.npmjs.org/@types/diff-match-patch/-/diff-match-patch-1.0.35.tgz",
"integrity": "sha512-+RpmGthShsToYni9Df1DBhFfPuMV1/VgDvedhSCgP5ll7QsNYcaxfqv4/8Vzbw7FtEscD80OCyycQuMtIVL07Q==",
"dev": true
},
"@types/ember": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/ember/-/ember-4.0.0.tgz",
@ -37540,6 +37558,11 @@
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
"integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w=="
},
"diff-match-patch": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz",
"integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw=="
},
"diffie-hellman": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",

View File

@ -38,7 +38,7 @@
"color": "4.2.1",
"cryptiles": "4.1.3",
"date-fns": "2.28.0",
"diff": "5.0.0",
"diff-match-patch": "1.0.5",
"ember-auto-import": "2.4.0",
"ember-autoresize-modifier": "0.5.0",
"ember-cli": "4.1.1",
@ -83,6 +83,7 @@
"@ember/test-helpers": "2.6.0",
"@glimmer/component": "1.0.4",
"@types/diff": "5.0.2",
"@types/diff-match-patch": "^1.0.35",
"@types/ember": "4.0.0",
"@types/ember__test-helpers": "2.6.1",
"@types/ember-mocha": "0.16.0",

View File

@ -1 +0,0 @@
declare module 'diff';