From 5e732ee5712bc3faac1b121f555ddbc15c6c958a Mon Sep 17 00:00:00 2001 From: Bruce McLean Date: Tue, 20 Aug 2024 19:46:46 -0400 Subject: [PATCH] bugfix/fix for \qs* end tag (#19) * added tests to ensure functions are not modifying objects * update dependencies * bump version * fix dependencies --------- Co-authored-by: PhotoNomad0 --- package.json | 5 +++-- .../fixtures/alignments/simpleEditsTests.json | 10 ++++++++++ src/__tests__/testUpdateAlignments.test.js | 16 ++++++++++++++-- yarn.lock | 8 ++++---- 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 55d85d7..aabca56 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "word-aligner-rcl", - "version": "1.1.2", + "version": "1.1.3", "main": "dist/index.cjs.js", "module": "dist/index.es.js", "repository": "https://github.com/unfoldingWord/word-aligner-rcl.git", @@ -42,6 +42,7 @@ "cross-env": "^7.0.3", "fs-extra": "^11.1.0", "jest": "^29.5.0", + "lodash.clonedeep": "^4.5.0", "ospath": "1.2.2", "path-extra": "^4.3.0", "prettier": "^2.8.4", @@ -58,7 +59,7 @@ "file-loader": "^6.2.0", "lodash.clonedeep": "^4.5.0", "string-punctuation-tokenizer": "2.2.0", - "usfm-js": "3.4.2", + "usfm-js": "3.4.3", "word-aligner": "1.0.2", "wordmap-lexer": "^0.3.6" }, diff --git a/src/__tests__/fixtures/alignments/simpleEditsTests.json b/src/__tests__/fixtures/alignments/simpleEditsTests.json index b0a0fdd..8f7c4e1 100644 --- a/src/__tests__/fixtures/alignments/simpleEditsTests.json +++ b/src/__tests__/fixtures/alignments/simpleEditsTests.json @@ -1,4 +1,14 @@ { + "edit Selah unchanged": { + "initialAlignedUsfm": "\\zaln-s |x-strong=\"H3068\" x-lemma=\"יְהֹוָה\" x-morph=\"He,Np\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"יְ֭הוָה\"\\*\\w Yahweh|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*,\n\\zaln-s |x-strong=\"H5414\" x-lemma=\"נָתַן\" x-morph=\"He,Vqj2ms\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"תִּתֵּ֣ן\"\\*\\w do|x-occurrence=\"1\" x-occurrences=\"2\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"H0408\" x-lemma=\"אַל\" x-morph=\"He,Tn\" x-occurrence=\"1\" x-occurrences=\"2\" x-content=\"אַל\"\\*\\w not|x-occurrence=\"1\" x-occurrences=\"2\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"H5414\" x-lemma=\"נָתַן\" x-morph=\"He,Vqj2ms\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"תִּתֵּ֣ן\"\\*\\w grant|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"H3970\" x-lemma=\"מַאֲוַי\" x-morph=\"He,Ncmpc\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"מַאֲוַיֵּ֣י\"\\*\\w the|x-occurrence=\"1\" x-occurrences=\"2\"\\w*\n\\w desires|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w of|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"H7563\" x-lemma=\"רָשָׁע\" x-morph=\"He,Aamsa\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"רָשָׁ֑ע\"\\*\\w the|x-occurrence=\"2\" x-occurrences=\"2\"\\w*\n\\w wicked|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*;\n\\q \\zaln-s |x-strong=\"H6329\" x-lemma=\"פּוּק\" x-morph=\"He,Vhj2ms\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"תָּ֝פֵ֗ק\"\\*\\w do|x-occurrence=\"2\" x-occurrences=\"2\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"H0408\" x-lemma=\"אַל\" x-morph=\"He,Tn\" x-occurrence=\"2\" x-occurrences=\"2\" x-content=\"אַל\"\\*\\w not|x-occurrence=\"2\" x-occurrences=\"2\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"H6329\" x-lemma=\"פּוּק\" x-morph=\"He,Vhj2ms\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"תָּ֝פֵ֗ק\"\\*\\w promote|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"H2162\" x-lemma=\"זָמָם\" x-morph=\"He,Ncmsc:Sp3ms\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"זְמָמ֥\u2060וֹ\"\\*\\w their|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w plots|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*,\n\\zaln-s |x-strong=\"H7311a\" x-lemma=\"רוּם\" x-morph=\"He,Vqi3mp\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"יָר֥וּמוּ\"\\*\\w they|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w rise|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w up|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\qs\n\\zaln-s |x-strong=\"H5542\" x-lemma=\"סֶלָה\" x-morph=\"He,Tj\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"סֶֽלָה\"\\*\\w Selah|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\qs*\n\\ts\\*", + "initialEditText": "Yahweh, do not grant the desires of the wicked;\n\\q do not promote their plots, they rise up\n\\qs\nSelah\n\\qs*\n\\ts\\*", + "steps": [ + { + "newEditText": "Yahweh, do not grant the desires of the wicked;\n\\q do not promote their plots, they rise up\n\\qs\nSelah\n\\qs*\n\\ts\\*", + "expectedFinalUsfm": "\\zaln-s |x-strong=\"H3068\" x-lemma=\"יְהֹוָה\" x-morph=\"He,Np\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"יְ֭הוָה\"\\*\\w Yahweh|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*,\n\\zaln-s |x-strong=\"H5414\" x-lemma=\"נָתַן\" x-morph=\"He,Vqj2ms\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"תִּתֵּ֣ן\"\\*\\w do|x-occurrence=\"1\" x-occurrences=\"2\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"H0408\" x-lemma=\"אַל\" x-morph=\"He,Tn\" x-occurrence=\"1\" x-occurrences=\"2\" x-content=\"אַל\"\\*\\w not|x-occurrence=\"1\" x-occurrences=\"2\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"H5414\" x-lemma=\"נָתַן\" x-morph=\"He,Vqj2ms\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"תִּתֵּ֣ן\"\\*\\w grant|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"H3970\" x-lemma=\"מַאֲוַי\" x-morph=\"He,Ncmpc\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"מַאֲוַיֵּ֣י\"\\*\\w the|x-occurrence=\"1\" x-occurrences=\"2\"\\w*\n\\w desires|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w of|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"H7563\" x-lemma=\"רָשָׁע\" x-morph=\"He,Aamsa\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"רָשָׁ֑ע\"\\*\\w the|x-occurrence=\"2\" x-occurrences=\"2\"\\w*\n\\w wicked|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*;\n\\q \\zaln-s |x-strong=\"H6329\" x-lemma=\"פּוּק\" x-morph=\"He,Vhj2ms\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"תָּ֝פֵ֗ק\"\\*\\w do|x-occurrence=\"2\" x-occurrences=\"2\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"H0408\" x-lemma=\"אַל\" x-morph=\"He,Tn\" x-occurrence=\"2\" x-occurrences=\"2\" x-content=\"אַל\"\\*\\w not|x-occurrence=\"2\" x-occurrences=\"2\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"H6329\" x-lemma=\"פּוּק\" x-morph=\"He,Vhj2ms\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"תָּ֝פֵ֗ק\"\\*\\w promote|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"H2162\" x-lemma=\"זָמָם\" x-morph=\"He,Ncmsc:Sp3ms\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"זְמָמ֥\u2060וֹ\"\\*\\w their|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w plots|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*,\n\\zaln-s |x-strong=\"H7311a\" x-lemma=\"רוּם\" x-morph=\"He,Vqi3mp\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"יָר֥וּמוּ\"\\*\\w they|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w rise|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w up|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\qs\n\\zaln-s |x-strong=\"H5542\" x-lemma=\"סֶלָה\" x-morph=\"He,Tj\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"סֶֽלָה\"\\*\\w Selah|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\qs*\n\\ts\\*" + } + ] + }, "edit text unchanged": { "initialAlignedUsfm": "\\zaln-s |x-strong=\"G51030\" x-lemma=\"Τίτος\" x-morph=\"Gr,N,,,,,DMS,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"Τίτῳ\"\\*\\w I|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w am|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w writing|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w to|x-occurrence=\"1\" x-occurrences=\"5\"\\w*\n\\w you|x-occurrence=\"1\" x-occurrences=\"4\"\\w*,\n\\w Titus|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*;\n\\zaln-s |x-strong=\"G11030\" x-lemma=\"γνήσιος\" x-morph=\"Gr,AA,,,,DNS,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"γνησίῳ\"\\*\\w you|x-occurrence=\"2\" x-occurrences=\"4\"\\w*\n\\w have|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w become|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w like|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w a|x-occurrence=\"1\" x-occurrences=\"2\"\\w*\n\\w real|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"G50430\" x-lemma=\"τέκνον\" x-morph=\"Gr,N,,,,,DNS,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"τέκνῳ\"\\*\\w son|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w to|x-occurrence=\"2\" x-occurrences=\"5\"\\w*\n\\w me|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"G25960\" x-lemma=\"κατά\" x-morph=\"Gr,P,,,,,A,,,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"κατὰ\"\\*\\w because|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"G28390\" x-lemma=\"κοινός\" x-morph=\"Gr,AA,,,,AFS,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"κοινὴν\"\\*\\w we|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w both|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w now|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"G41020\" x-lemma=\"πίστις\" x-morph=\"Gr,N,,,,,AFS,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"πίστιν\"\\*\\w believe|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w in|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w Jesus|x-occurrence=\"1\" x-occurrences=\"2\"\\w*\n\\w the|x-occurrence=\"1\" x-occurrences=\"3\"\\w*\n\\w Messiah|x-occurrence=\"1\" x-occurrences=\"2\"\\w*\\zaln-e\\*.\n\\zaln-s |x-strong=\"G05750\" x-lemma=\"ἀπό\" x-morph=\"Gr,P,,,,,G,,,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"ἀπὸ\"\\*\\zaln-s |x-strong=\"G23160\" x-lemma=\"θεός\" x-morph=\"Gr,N,,,,,GMS,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"Θεοῦ\"\\*\\w May|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w God|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\\zaln-e\\*\n\\zaln-s |x-strong=\"G39620\" x-lemma=\"πατήρ\" x-morph=\"Gr,N,,,,,GMS,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"Πατρὸς\"\\*\\w the|x-occurrence=\"2\" x-occurrences=\"3\"\\w*\n\\w Father|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"G25320\" x-lemma=\"καί\" x-morph=\"Gr,CC,,,,,,,,\" x-occurrence=\"1\" x-occurrences=\"2\" x-content=\"καὶ\"\\*\\w and|x-occurrence=\"1\" x-occurrences=\"2\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"G55470\" x-lemma=\"χριστός\" x-morph=\"Gr,N,,,,,GMS,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"Χριστοῦ\"\\*\\w the|x-occurrence=\"3\" x-occurrences=\"3\"\\w*\n\\w Messiah|x-occurrence=\"2\" x-occurrences=\"2\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"G24240\" x-lemma=\"Ἰησοῦς\" x-morph=\"Gr,N,,,,,GMS,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"Ἰησοῦ\"\\*\\w Jesus|x-occurrence=\"2\" x-occurrences=\"2\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"G35880\" x-lemma=\"ὁ\" x-morph=\"Gr,EA,,,,GMS,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"τοῦ\"\\*\\w who|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"G49900\" x-lemma=\"σωτήρ\" x-morph=\"Gr,N,,,,,GMS,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"Σωτῆρος\"\\*\\w saves|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"G14730\" x-lemma=\"ἐγώ\" x-morph=\"Gr,RP,,,1G,P,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"ἡμῶν\"\\*\\w us|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"G54850\" x-lemma=\"χάρις\" x-morph=\"Gr,N,,,,,NFS,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"χάρις\"\\*\\w continue|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w to|x-occurrence=\"3\" x-occurrences=\"5\"\\w*\n\\w be|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w kind|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w to|x-occurrence=\"4\" x-occurrences=\"5\"\\w*\n\\w you|x-occurrence=\"3\" x-occurrences=\"4\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"G25320\" x-lemma=\"καί\" x-morph=\"Gr,CC,,,,,,,,\" x-occurrence=\"2\" x-occurrences=\"2\" x-content=\"καὶ\"\\*\\w and|x-occurrence=\"2\" x-occurrences=\"2\"\\w*\\zaln-e\\*\n\\zaln-s |x-strong=\"G15150\" x-lemma=\"εἰρήνη\" x-morph=\"Gr,N,,,,,NFS,\" x-occurrence=\"1\" x-occurrences=\"1\" x-content=\"εἰρήνη\"\\*\\w to|x-occurrence=\"5\" x-occurrences=\"5\"\\w*\n\\w give|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w you|x-occurrence=\"4\" x-occurrences=\"4\"\\w*\n\\w a|x-occurrence=\"2\" x-occurrences=\"2\"\\w*\n\\w peaceful|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\n\\w spirit|x-occurrence=\"1\" x-occurrences=\"1\"\\w*\\zaln-e\\*.\n\\p\n", "initialEditText": "I am writing to you, Titus; you have become like a real son to me because we both now believe in Jesus the Messiah. May God the Father and the Messiah Jesus who saves us continue to be kind to you and to give you a peaceful spirit.\n\\p\n", diff --git a/src/__tests__/testUpdateAlignments.test.js b/src/__tests__/testUpdateAlignments.test.js index 48ce641..543b450 100644 --- a/src/__tests__/testUpdateAlignments.test.js +++ b/src/__tests__/testUpdateAlignments.test.js @@ -13,6 +13,7 @@ import {migrateTargetAlignmentsToOriginal} from "../utils/migrateOriginalLanguag import {convertVerseDataToUSFM, getUsfmForVerseContent} from "../utils/UsfmFileConversionHelpers"; import path from "path-extra"; import fs from 'fs-extra'; +import cloneDeep from "lodash.clonedeep"; jest.unmock('fs-extra'); @@ -34,15 +35,18 @@ describe('testing edit of aligned target text', () => { steps, } = test_ - let currentVerseObjects = usfmVerseToJson(initialAlignedUsfm); // set initial test conditions + const initialVerseObjects = usfmVerseToJson(initialAlignedUsfm); + let currentVerseObjects = cloneDeep(initialVerseObjects); // set initial test conditions const expectedInitialEditText = getUsfmForVerseContent({ verseObjects: currentVerseObjects }) expect(initialEditText).toEqual(expectedInitialEditText) + expect(currentVerseObjects).toEqual(initialVerseObjects) // check for object mod for (const step of steps) { //////////// // Given const {newEditText, expectedFinalUsfm} = step + const startingVerseObjects = cloneDeep(currentVerseObjects); // save initial object //////////// // When @@ -57,6 +61,7 @@ describe('testing edit of aligned target text', () => { const initialWords = Lexer.tokenize(removeUsfmMarkers(newEditText)) const { targetWords: targetWords } = parseUsfmToWordAlignerData(results.targetVerseText, null) expect(targetWords.length).toEqual(initialWords.length) + expect(currentVerseObjects).toEqual(startingVerseObjects) // check for object mod // final conditions of step become initial conditions for next step currentVerseObjects = results.targetVerseObjects @@ -97,10 +102,12 @@ describe('testing alignment operations', () => { steps, } = test_ - let currentVerseObjects = usfmVerseToJson(initialAlignedUsfm); // set initial test conditions + const initialVerseObjects = usfmVerseToJson(initialAlignedUsfm); + let currentVerseObjects = cloneDeep(initialVerseObjects); // set initial test conditions // make sure initial text matches the expected const expectedInitialEditText = getUsfmForVerseContent({ verseObjects: currentVerseObjects }) expect(initialEditText).toEqual(expectedInitialEditText) + expect(currentVerseObjects).toEqual(initialVerseObjects) // check for object mod const originalLanguageVerseObjects = usfmVerseToJson(originalLanguageUsfm); // set initial test conditions for (const step of steps) { @@ -109,6 +116,7 @@ describe('testing alignment operations', () => { // Given const {newEditText, expectedFinalUsfm} = step + const startingVerseObjects = cloneDeep(currentVerseObjects); // save initial object //////////// // when @@ -120,6 +128,10 @@ describe('testing alignment operations', () => { // then expect(results.targetVerseText).toEqual(expectedFinalUsfm) + expect(currentVerseObjects).toEqual(startingVerseObjects) // check for object mod + + // final conditions of step become initial conditions for next step + currentVerseObjects = results.targetVerseObjects } }) } diff --git a/yarn.lock b/yarn.lock index 25dfd60..b1a0916 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6936,10 +6936,10 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -usfm-js@3.4.2: - version "3.4.2" - resolved "https://registry.yarnpkg.com/usfm-js/-/usfm-js-3.4.2.tgz#a4232cffe38c9f521246b007a4045648cbcf419a" - integrity sha512-i5nGxGwFhkOWd7xgfVWQ6GTkCpksfy5AUIwNJcwanTn3ua5J1nwl3pjApCDA6x1B++8ICkcQMUt0FB/bkKdE2g== +usfm-js@3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/usfm-js/-/usfm-js-3.4.3.tgz#dffa5a00cdbf7c02df89f6e876136df6aa532361" + integrity sha512-c5d2dzmSnEfFSPfMXnnycIPwdw8ryBsb2r2CUEwiXpsUMm+gDmhFz5GGOufYP5rGGVwAssHdSM8oOkcaHz+Hwg== dependencies: lodash.clonedeep "^4.5.0"