This commit is contained in:
lingdocs 2021-10-07 13:19:38 -04:00
parent ddf9f33fb2
commit 1911e3c1af
4 changed files with 458 additions and 44 deletions

View File

@ -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",

View File

@ -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);
});
});
});
});

186
src/lib/equative-machine.ts Normal file
View File

@ -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<T.ArrayOneOrMore<T.PsString>>,
};
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<T.PsString> {
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<T.InflectionSet>, 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";
}

View File

@ -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: