From 1911e3c1af9a441b6e5dcfe68334b30752006a03 Mon Sep 17 00:00:00 2001 From: lingdocs <71590811+lingdocs@users.noreply.github.com> Date: Thu, 7 Oct 2021 13:19:38 -0400 Subject: [PATCH] oops --- package.json | 6 +- src/lib/equative-machine.test.ts | 211 +++++++++++++++++++++++++++++++ src/lib/equative-machine.ts | 186 +++++++++++++++++++++++++++ yarn.lock | 99 +++++++++------ 4 files changed, 458 insertions(+), 44 deletions(-) create mode 100644 src/lib/equative-machine.test.ts create mode 100644 src/lib/equative-machine.ts diff --git a/package.json b/package.json index 7ed2f23..40b994c 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,12 @@ "private": true, "dependencies": { "@fortawesome/fontawesome-free": "^5.15.2", - "@lingdocs/lingdocs-main": "^0.1.3", - "@lingdocs/pashto-inflector": "^1.0.5", + "@lingdocs/lingdocs-main": "^0.1.4", + "@lingdocs/pashto-inflector": "^1.1.4", "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.3.2", "@testing-library/user-event": "^7.1.2", - "@types/jest": "^26.0.21", + "@types/jest": "^27.0.2", "@types/node": "^14.14.35", "@types/react": "^17.0.3", "@types/react-dom": "^17.0.2", diff --git a/src/lib/equative-machine.test.ts b/src/lib/equative-machine.test.ts new file mode 100644 index 0000000..f19daca --- /dev/null +++ b/src/lib/equative-machine.test.ts @@ -0,0 +1,211 @@ +import { + equativeMachine, + EquativeMachineOutput, + EquativeNounInput, +} from "./equative-machine"; +import { + Types as T, +} from "@lingdocs/pashto-inflector"; + +const abilities: { + label: string, + tests: { + in: { + subject: T.Person | EquativeNounInput | T.DictionaryEntry, + predicate: T.DictionaryEntry, + }, + out: EquativeMachineOutput, + }[], +}[] = [ + { + label: "handle person subjects with adjective predicates", + tests: [ + // -- inflecting adjectives + { + in: { + subject: T.Person.FirstSingMale, + predicate: {"ts":1527815306,"i":7530,"p":"ستړی","f":"stúRey","g":"stuRey","e":"tired","c":"adj."}, + }, + out: { + subject: [{ p: "زه", f: "zu", e: "I (m.)" }], + predicate: [{ p: "ستړی", f: "stúRey", e: "tired" }], + equative: [{ p: "یم", f: "yum", e: "am" }], + }, + }, + { + in: { + subject: T.Person.SecondPlurFemale, + predicate: {"ts":1527815306,"i":7530,"p":"ستړی","f":"stúRey","g":"stuRey","e":"tired","c":"adj."}, + }, + out: { + subject: [{ p: "تاسو", f: "táaso", e: "You (f. pl.)" }, { p: "تاسې", f: "táase", e: "You (f. pl.)"}], + predicate: [{ p: "ستړې", f: "stúRe", e: "tired" }], + equative: [{ p: "یئ", f: "yeyy", e: "are" }], + }, + }, + // -- non-inflecting adjectives + { + in: { + subject: T.Person.ThirdSingFemale, + predicate: {"ts":1527812798,"i":5595,"p":"خفه","f":"khufa","g":"khufa","e":"sad, upset, angry; choked, suffocated","c":"adj."}, + }, + out: { + subject: [{ p: "هغه", f: "haghá", e: "She/it (f.)" }], + predicate: [{ p: "خفه", f: "khufa", e: "sad" }], + equative: [{ p: "ده", f: "da", e: "is" }], + }, + }, + ], + }, + { + label: "handle person subjects with unisex noun predicate", + tests: [ + { + in: { + subject: T.Person.FirstSingFemale, + predicate: {"ts":1591872915426,"i":696,"p":"افغانی","f":"afghaanéy","g":"afghaaney","e":"Afghan (person)","c":"n. m. unisex"}, + }, + out: { + subject: [{ p: "زه", f: "zu", e: "I (f.)" }], + predicate: [{ p: "افغانۍ", f: "afghaanúy", e: "Afghan" }], + equative: [{ p: "یم", f: "yum", e: "am" }], + } + }, + { + in: { + subject: T.Person.FirstPlurFemale, + predicate: {"ts":1527814779,"i":935,"p":"انسان","f":"insaan","g":"insaan","e":"human, person","c":"n. m. anim. unisex"}, + }, + out: { + subject: [{ p: "مونږ", f: "moonG", e: "We (f. pl.)" }, { p: "موږ", f: "mooG", e: "We (f. pl.)" }], + predicate: [{ p: "انسانانې", f: "insaanáane", e: "humans" }], + equative: [{ p: "یو", f: "yoo", e: "are" }], + }, + }, + { + in: { + subject: T.Person.SecondSingFemale, + predicate: {"ts":1527814779,"i":935,"p":"انسان","f":"insaan","g":"insaan","e":"human, person","c":"n. m. anim. unisex"}, + }, + out: { + subject: [{ p: "ته", f: "tu", e: "You (f.)" }], + predicate: [{ p: "انسانه", f: "insaana", e: "human" }], + equative: [{ p: "یې", f: "ye", e: "are" }], + }, + }, + ], + }, + { + label: "Handle noun subjects with adjective predicates", + tests: [ + { + in: { + subject: { + entry: { "ts":1527812817,"i":9921,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m." }, + plural: false, + }, + predicate: {"ts":1527815451,"i":7193,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"}, + }, + out: { + subject: [{ p: "کتاب", f: "kitáab", e: "(A/The) book" }], + predicate: [{ p: "زوړ", f: "zoR", e: "old" }], + equative: [{ p: "دی", f: "dey", e: "is" }], + }, + }, + { + in: { + subject: { + entry: { "ts":1527812817,"i":9921,"p":"کتاب","f":"kitáab","g":"kitaab","e":"book","c":"n. m." }, + plural: true, + }, + predicate: {"ts":1527815451,"i":7193,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"}, + }, + out: { + subject: [{ p: "کتابونه", f: "kitaabóona", e: "(The) books" }], + predicate: [{ p: "زاړه", f: "zaaRu", e: "old" }], + equative: [{ p: "دي", f: "dee", e: "are" }], + }, + }, + { + in: { + subject: { + entry: {"ts":1527812797,"i":8542,"p":"ښځه","f":"xúdza","g":"xudza","e":"woman, wife","c":"n. f. anim.","ec":"woman","ep":"women"}, + plural: false, + }, + predicate: {"ts":1527815451,"i":7193,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"}, + }, + out: { + subject: [{ p: "ښځه", f: "xúdza", e: "(A/The) woman" }], + predicate: [{ p: "زړه", f: "zaRa", e: "old" }], + equative: [{ p: "ده", f: "da", e: "is" }], + }, + }, + { + in: { + subject: { + entry: {"ts":1527812797,"i":8542,"p":"ښځه","f":"xúdza","g":"xudza","e":"woman, wife","c":"n. f. anim.","ec":"woman","ep":"women"}, + plural: true, + }, + predicate: {"ts":1527815451,"i":7193,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"}, + }, + out: { + subject: [{ p: "ښځې", f: "xúdze", e: "(The) women" }], + predicate: [{ p: "زړې", f: "zaRe", e: "old" }], + equative: [{ p: "دي", f: "dee", e: "are" }], + }, + }, + // non-inflecting adjective as predicate + { + in: { + subject: { + entry: {"ts":1527812797,"i":8542,"p":"ښځه","f":"xúdza","g":"xudza","e":"woman, wife","c":"n. f. anim.","ec":"woman","ep":"women"}, + plural: true, + }, + predicate: {"ts":1527812798,"i":5595,"p":"خفه","f":"khufa","g":"khufa","e":"sad, upset, angry; choked, suffocated","c":"adj."}, + }, + out: { + subject: [{ p: "ښځې", f: "xúdze", e: "(The) women" }], + predicate: [{ p: "خفه", f: "khufa", e: "sad" }], + equative: [{ p: "دي", f: "dee", e: "are" }], + }, + }, + ], + }, + { + label: "handle participle subjects with adjective predicates", + tests: [ + { + in: { + subject: {"ts":1527812790,"i":5747,"p":"خوړل","f":"khoRul","g":"khoRul","e":"to eat, to bite","c":"v. trans.","psp":"خور","psf":"khor","tppp":"خوړ","tppf":"khoR","ec":"eat"}, + predicate: {"ts":1527812796,"i":8578,"p":"ښه","f":"xu","g":"xu","e":"good","c":"adj."}, + }, + out: { + subject: [{ p: "خوړل", f: "khoRul", e: "eating" }], + predicate: [{ p: "ښه", f: "xu", e: "good" }], + equative: [{ p: "دي", f: "dee", e: "is" }], + }, + }, + { + in: { + subject: {"ts":1527817298,"i":310,"p":"اخیستل","f":"akheestul","g":"akheestul","e":"to take, buy, purchase, receive; to shave, cut with scissors","c":"v. trans.","psp":"اخل","psf":"akhl","ec":"take,takes,taking,took,taken"}, + predicate: {"ts":1527815451,"i":7193,"p":"زوړ","f":"zoR","g":"zoR","e":"old","c":"adj. irreg.","infap":"زاړه","infaf":"zaaRu","infbp":"زړ","infbf":"zaR"}, + }, + out: { + subject: [{ p: "اخیستل", f: "akheestul", e: "taking" }], + predicate: [{ p: "زاړه", f: "zaaRu", e: "old" }], + equative: [{ p: "دي", f: "dee", e: "is" }], + }, + } + ], + }, +]; + +describe("equativeMachine", () => { + abilities.forEach((a) => { + test(a.label, () => { + a.tests.forEach((t) => { + expect(equativeMachine(t.in.subject, t.in.predicate)).toEqual(t.out); + }); + }); + }); +}); \ No newline at end of file diff --git a/src/lib/equative-machine.ts b/src/lib/equative-machine.ts new file mode 100644 index 0000000..f767a15 --- /dev/null +++ b/src/lib/equative-machine.ts @@ -0,0 +1,186 @@ +import { + getPersonFromVerbForm, + Types as T, + getEnglishWord, + grammarUnits, + inflectWord, + personIsPlural, + removeFVarients, + isUnisexSet, + personGender, + getVerbBlockPosFromPerson, + addEnglish, +} from "@lingdocs/pashto-inflector"; + +export type EquativeMachineOutput = { + subject: T.PsString[], + predicate: T.PsString[], + equative: T.SingleOrLengthOpts>, +}; + +export type EquativeNounInput = { + entry: T.DictionaryEntry, + plural: boolean, +}; + +export function equativeMachine(sub: T.Person | EquativeNounInput | T.DictionaryEntry, pred: T.DictionaryEntry): EquativeMachineOutput { + const subjPerson = getSubPerson(sub); + const isParticiple = !!(typeof sub !== "number" && "ts" in sub && sub.c?.startsWith("v.")); + if (!isParticiple && (typeof sub !== "number" && "ts" in sub)) { + throw new Error("non participle subject should be in this form: { entry: T.Dictionary, plural: boolean }"); + } + const subject = typeof sub === "number" + ? makePronounSubject(sub) + : "entry" in sub + ? makeNounSubject(sub) + : makeParticipleSub(sub); + const predicate = makePredicate(pred, subjPerson); + const equative = makeEquative(subjPerson, isParticiple); + + return { + subject, + predicate, + equative, + }; +} + +function makePronounSubject(sub: T.Person): T.PsString[] { + const [row, col] = getVerbBlockPosFromPerson(sub); + return addEnglish( + grammarUnits.persons[sub].label.subject, + grammarUnits.pronouns.far.plain[row][col], + ); +} + +function makeNounSubject(sub: EquativeNounInput): T.PsString[] { + function makeEnglish(): string { + const e = getEnglishWord(sub.entry); + if (!e) { + throw new Error(`unable to get english from subject ${sub.entry.f} - ${sub.entry.ts}`); + } + if (typeof e === "string") return `(A/The) ${e}`; + if (sub.plural) { + return `(The) ${e.plural}`; + } + if (!e.singular) { + throw new Error(`unable to get english from subject ${sub.entry.f} - ${sub.entry.ts}`); + } + return `(A/The) ${e.singular}`; + } + function getPashto(): T.ArrayOneOrMore { + const infs = inflectWord(sub.entry); + const gender = sub.entry.c?.includes("n. f.") ? "fem" : "masc"; + try { + if (!infs || !sub.plural) { + return [psStringFromEntry(sub.entry, english)]; + } + if (!("plural" in infs)) { + // @ts-ignore + return infs.inflections[gender][sub.plural ? 1 : 0]; + } + // @ts-ignore + return infs.plural[gender][0] + } catch (e) { + throw new Error(`error making noun subject for ${sub.entry.f} ${sub.entry.ts}`); + } + } + const english = makeEnglish(); + return addEnglish( + english, + getPashto(), + ); +} + +function makeParticipleSub(sub: T.DictionaryEntry): T.PsString[] { + return [ + psStringFromEntry(sub, getEnglishParticiple(sub)), + ]; +} + +function makeEquative(pers: T.Person, isParticiple: boolean): T.SentenceForm { + const [row, col] = getVerbBlockPosFromPerson(pers); + return addEnglish( + isParticiple + ? grammarUnits.englishEquative.present[4][0] + : grammarUnits.englishEquative.present[row][col], + getPersonFromVerbForm(grammarUnits.equativeEndings.present, pers), + ); +} + +function getSubPerson(sub: T.Person | EquativeNounInput | T.DictionaryEntry): T.Person { + if (typeof sub === "number") { + return sub; + } + if ("entry" in sub) { + const gender = sub.entry.c?.includes("n. f.") ? "fem" : "masc"; + if (gender === "masc" && !sub.plural) { + return T.Person.ThirdSingMale; + } + if (gender === "masc" && sub.plural) { + return T.Person.ThirdPlurMale; + } + if (gender === "fem" && !sub.plural) { + return T.Person.ThirdSingFemale; + } + //if (gender === "fem" && sub.plural) { + return T.Person.ThirdPlurFemale; + // } + } + if (!sub.c || !sub.c.startsWith("v.")) { + throw new Error("subject should be a participle/verb"); + } + return T.Person.ThirdPlurMale; +} + +function makePredicate(pred: T.DictionaryEntry, pers: T.Person): T.PsString[] { + const infs = inflectWord(pred); + const e = retrieveEnglishPredicate(pred, pers); + if (!e) { + throw new Error(`unable to get english from predicate ${pred.f} - ${pred.ts}`); + } + const plural = personIsPlural(pers); + const gender = personGender(pers); + const makePlainPred = () => ([psStringFromEntry(pred, e)]); + if (!infs || !infs.inflections || !isUnisexSet(infs.inflections)) { + return makePlainPred(); + } + if (plural && "plural" in infs && infs.plural) { + const ps = gender in infs.plural + // @ts-ignore + ? infs.plural[gender][0] as T.PsString[] + : makePlainPred(); + return ps.map((p) => ({ ...p, e })); + } + // if (infs.inflections) { + const inflection = chooseInflection(infs.inflections, pers); + return inflection.map((i) => ({ ...i, e })); + // } +} + +function chooseInflection(inflections: T.UnisexSet, pers: T.Person): T.PsString[] { + return inflections[personGender(pers)][personIsPlural(pers) ? 1 : 0]; +} + +function retrieveEnglishPredicate(pred: T.DictionaryEntry, pers: T.Person): string | undefined { + const english = getEnglishWord(pred); + const plurSing = personIsPlural(pers) ? "plural" : "singular"; + return typeof english === "string" + ? english + : english === undefined + ? undefined + : english[plurSing] + ? english[plurSing] + : undefined; +} + +function psStringFromEntry(entry: T.DictionaryEntry, e: string): T.PsString { + return { + p: entry.p, + f: removeFVarients(entry.f), + e, + }; +} + +function getEnglishParticiple(entry: T.DictionaryEntry): string { + return "doing"; +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 037ef6b..a366742 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1562,31 +1562,31 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== +"@jest/types@^27.2.4": + version "27.2.4" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.2.4.tgz#2430042a66e00dc5b140c3636f4474d464c21ee8" + integrity sha512-IDO2ezTxeMvQAHxzG/ZvEyA47q0aVfzT95rGFl7bZs/Go0aIucvfDbS2rmnoEdXxlLQhcolmoG/wvL/uKx4tKA== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" - "@types/yargs" "^15.0.0" + "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@lingdocs/lingdocs-main@^0.1.3": - version "0.1.3" - resolved "https://npm.lingdocs.com/@lingdocs%2flingdocs-main/-/lingdocs-main-0.1.3.tgz#631b468eb235aa852395e390925ac118847a4b1c" - integrity sha512-AnNDTxqr779POzGbsv/lfGcEFKX+6Q71TUzLY4t/dA8MbsTEp66WGD04gIXSdw7JjojnWA0w9ui/O2nQI6nj5g== +"@lingdocs/lingdocs-main@^0.1.4": + version "0.1.6" + resolved "https://npm.lingdocs.com/@lingdocs%2flingdocs-main/-/lingdocs-main-0.1.6.tgz#b79c95d68e200eb7f323e8144fd3a3cea0ceb805" + integrity sha512-xVwBg01eJng9d+LMvaNtAjUGJhUt3yRmKAsCGlvJPQp8Ud4zpmJ5gotOTLUOEWTsjXzW0H/PjQXG767reuX3aA== dependencies: nano "^9.0.5" passport-github2 "^0.1.12" passport-google-oauth "^2.0.0" passport-twitter "^1.0.4" -"@lingdocs/pashto-inflector@^1.0.5": - version "1.0.6" - resolved "https://npm.lingdocs.com/@lingdocs%2fpashto-inflector/-/pashto-inflector-1.0.6.tgz#b61262c04916442a1023002bd7426ee39d77635f" - integrity sha512-yhijpCx1nBHnwykydOPOWzZlA388EioLr/SftNcYgRilxOjHVzXzEHL9dMNxciAiCNKFcNic2UVp+Tha4WEbSA== +"@lingdocs/pashto-inflector@^1.1.3": + version "1.1.3" + resolved "https://npm.lingdocs.com/@lingdocs%2fpashto-inflector/-/pashto-inflector-1.1.3.tgz#e908b1933bd9dd3962d9757ad9eb270184d9914c" + integrity sha512-kez2oSZOK1RQm4VssyRBeGehtfT8iS3ROqiOjxgFZj0S8gGw4/A8TsfACGuqh1D0/3EaCI7JjBlj/O5tsHZ2DQ== dependencies: classnames "^2.2.6" pbf "^3.2.1" @@ -1973,13 +1973,13 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^26.0.21": - version "26.0.21" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.21.tgz#3a73c2731e7e4f0fbaea56ce7ff8c79cf812bd24" - integrity sha512-ab9TyM/69yg7eew9eOwKMUmvIZAKEGZYlq/dhe5/0IMUd/QLJv5ldRMdddSn+u22N13FP3s5jYyktxuBwY0kDA== +"@types/jest@^27.0.2": + version "27.0.2" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.0.2.tgz#ac383c4d4aaddd29bbf2b916d8d105c304a5fcd7" + integrity sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA== dependencies: - jest-diff "^26.0.0" - pretty-format "^26.0.0" + jest-diff "^27.0.0" + pretty-format "^27.0.0" "@types/json-schema@^7.0.3": version "7.0.4" @@ -2160,6 +2160,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^16.0.0": + version "16.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" + integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + dependencies: + "@types/yargs-parser" "*" + "@typescript-eslint/eslint-plugin@^2.10.0": version "2.24.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.24.0.tgz#a86cf618c965a462cddf3601f594544b134d6d68" @@ -2506,6 +2513,11 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -2526,6 +2538,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -4356,10 +4373,10 @@ diff-sequences@^24.9.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== +diff-sequences@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723" + integrity sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ== diffie-hellman@^5.0.0: version "5.0.3" @@ -6754,15 +6771,15 @@ jest-diff@^24.0.0, jest-diff@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-diff@^26.0.0: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== +jest-diff@^27.0.0: + version "27.2.4" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.2.4.tgz#171c51d3d2c105c457100fee6e7bf7cee51c8d8c" + integrity sha512-bLAVlDSCR3gqUPGv+4nzVpEXGsHh98HjUL7Vb2hVyyuBDoQmja8eJb0imUABsuxBeUVmf47taJSAd9nDrwWKEg== dependencies: chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + diff-sequences "^27.0.6" + jest-get-type "^27.0.6" + pretty-format "^27.2.4" jest-docblock@^24.3.0: version "24.9.0" @@ -6822,10 +6839,10 @@ jest-get-type@^24.9.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== +jest-get-type@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" + integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg== jest-haste-map@^24.9.0: version "24.9.0" @@ -9690,14 +9707,14 @@ pretty-format@^25.1.0, pretty-format@^25.5.0: ansi-styles "^4.0.0" react-is "^16.12.0" -pretty-format@^26.0.0, pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== +pretty-format@^27.0.0, pretty-format@^27.2.4: + version "27.2.4" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.2.4.tgz#08ea39c5eab41b082852d7093059a091f6ddc748" + integrity sha512-NUjw22WJHldzxyps2YjLZkUj6q1HvjqFezkB9Y2cklN8NtVZN/kZEXGZdFw4uny3oENzV5EEMESrkI0YDUH8vg== dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" + "@jest/types" "^27.2.4" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" react-is "^17.0.1" prismjs@^1.15.0: