Compare commits

...

8 Commits

Author SHA1 Message Date
adueck dee417aa05 ci fix 2024-08-06 16:37:41 -04:00
adueck 9ee16463e8 fix build error that occurs with new node version 2024-08-06 16:30:59 -04:00
adueck a5735af4c1 update workflows 2024-08-06 16:21:00 -04:00
adueck f0a804cee4 ci update 2024-08-06 16:17:12 -04:00
adueck fb220a728f oops 2024-08-06 16:13:42 -04:00
adueck 185fe1ab07 fixed up a few things and made a script to start checking the inflections for all the words in the dictionary 2024-08-06 16:12:32 -04:00
adueck 62fcbbe4ce error handling for verbs erroring on render 2024-08-06 14:03:56 -04:00
adueck b2f3dfe93c fixed phonetics on inflection patterns 2024-08-06 13:29:50 -04:00
23 changed files with 929 additions and 519 deletions

26
.github/workflows/check-inflections.yml vendored Normal file
View File

@ -0,0 +1,26 @@
name: Check Inflections
on:
push:
branches: ["*"]
pull_request:
branches: ["*"]
workflow_dispatch:
jobs:
ci:
runs-on: ubuntu-latest
env:
LINGDOCS_DICTIONARY_URL: ${{ secrets.LINGDOCS_DICTIONARY_URL }}
LINGDOCS_NPM_TOKEN: ${{ secrets.LINGDOCS_NPM_TOKEN }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
- name: run script
run: |
yarn install-r
yarn check-all-inflections

View File

@ -15,12 +15,14 @@ jobs:
LINGDOCS_DICTIONARY_URL: ${{ secrets.LINGDOCS_DICTIONARY_URL }} LINGDOCS_DICTIONARY_URL: ${{ secrets.LINGDOCS_DICTIONARY_URL }}
LINGDOCS_NPM_TOKEN: ${{ secrets.LINGDOCS_NPM_TOKEN }} LINGDOCS_NPM_TOKEN: ${{ secrets.LINGDOCS_NPM_TOKEN }}
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- uses: actions/setup-node@v1 - uses: actions/setup-node@v4
with: with:
node-version: 16 node-version: 16
cache: "yarn"
- name: Install, build, test - name: Install, build, test
run: | run: |
yarn install-r yarn install-r
yarn build-library yarn build-library
yarn build-website
yarn test --silent yarn test --silent

View File

@ -13,13 +13,14 @@ jobs:
LINGDOCS_DICTIONARY_URL: ${{ secrets.LINGDOCS_DICTIONARY_URL }} LINGDOCS_DICTIONARY_URL: ${{ secrets.LINGDOCS_DICTIONARY_URL }}
LINGDOCS_NPM_TOKEN: ${{ secrets.LINGDOCS_NPM_TOKEN }} LINGDOCS_NPM_TOKEN: ${{ secrets.LINGDOCS_NPM_TOKEN }}
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- uses: actions/setup-node@v1 - uses: actions/setup-node@v4
with: with:
node-version: 16 node-version: 16
cache: "yarn"
- name: Check if version has been updated - name: Check if version has been updated
id: check id: check
uses: EndBug/version-check@v1 uses: EndBug/version-check@v2
with: with:
diff-search: true diff-search: true
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}

59
check-all-inflections.ts Normal file
View File

@ -0,0 +1,59 @@
import * as T from "./src/types";
import { inflectWord } from "./src/lib/src/pashto-inflector";
import * as tp from "./src/lib/src/type-predicates";
import { conjugateVerb } from "./src/lib/src/verb-conjugation";
// Script to try inflecting all the words in the dictionary and make sure that
// no errors are thrown in the process
type InflectionError = {
ts: number;
p: string;
f: string;
err: string;
};
async function checkAll() {
const res = await fetch(process.env.LINGDOCS_DICTIONARY_URL);
const { entries }: T.Dictionary = await res.json();
const errors: InflectionError[] = [];
entries.forEach((entry) => {
try {
inflectWord(entry);
} catch (e) {
errors.push({
ts: entry.ts,
p: entry.p,
f: entry.f,
err: e.toString(),
});
}
if (tp.isVerbEntry(entry)) {
const complement = entry.l
? entries.find((e) => e.ts === entry.l)
: undefined;
if (entry.l && !complement) {
errors.push({
ts: entry.ts,
p: entry.p,
f: entry.f,
err: "verb complement missing",
});
} else {
}
}
});
return errors;
}
checkAll().then((errors) => {
if (errors.length) {
console.log(
"The following errors occured while inflecting all dictionary words"
);
console.log(errors);
process.exit(1);
}
console.log("No errors occured while inflecting all dictionary words");
});

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "pashto-inflector", "name": "pashto-inflector",
"version": "7.3.2", "version": "7.4.0",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "pashto-inflector", "name": "pashto-inflector",
"version": "7.3.2", "version": "7.4.0",
"hasInstallScript": true, "hasInstallScript": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {

View File

@ -1,6 +1,6 @@
{ {
"name": "pashto-inflector", "name": "pashto-inflector",
"version": "7.3.2", "version": "7.4.0",
"author": "lingdocs.com", "author": "lingdocs.com",
"description": "A Pashto inflection and verb conjugation engine, inculding React components for displaying Pashto text, inflections, and conjugations", "description": "A Pashto inflection and verb conjugation engine, inculding React components for displaying Pashto text, inflections, and conjugations",
"homepage": "https://verbs.lingdocs.com", "homepage": "https://verbs.lingdocs.com",
@ -28,6 +28,7 @@
"react-bootstrap": "^1.5.1", "react-bootstrap": "^1.5.1",
"react-dom": "^17.0.1", "react-dom": "^17.0.1",
"react-scripts": "4.0.3", "react-scripts": "4.0.3",
"tsx": "^3.14.0",
"typescript": "^5.1.6", "typescript": "^5.1.6",
"web-vitals": "^1.0.1" "web-vitals": "^1.0.1"
}, },
@ -44,7 +45,8 @@
"build-website": "node get-words.js && npm run build", "build-website": "node get-words.js && npm run build",
"build-library": "cd src/components && rimraf dist && tsc --project lib-tsconfig.json && node post-build.cjs && cd ../lib && rimraf dist && tsc --project lib-tsconfig.json && node_modules/rollup/dist/bin/rollup -c", "build-library": "cd src/components && rimraf dist && tsc --project lib-tsconfig.json && node post-build.cjs && cd ../lib && rimraf dist && tsc --project lib-tsconfig.json && node_modules/rollup/dist/bin/rollup -c",
"test-ci": "npm run test -- --watchAll=false", "test-ci": "npm run test -- --watchAll=false",
"get-words": "node get-words.js" "get-words": "node get-words.js",
"check-all-inflections": "tsx check-all-inflections.ts"
}, },
"eslintConfig": { "eslintConfig": {
"extends": [ "extends": [

View File

@ -1,12 +1,12 @@
{ {
"name": "@lingdocs/ps-react", "name": "@lingdocs/ps-react",
"version": "7.3.2", "version": "7.4.0",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@lingdocs/ps-react", "name": "@lingdocs/ps-react",
"version": "7.3.2", "version": "7.4.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@formkit/auto-animate": "^1.0.0-beta.3", "@formkit/auto-animate": "^1.0.0-beta.3",

View File

@ -1,6 +1,6 @@
{ {
"name": "@lingdocs/ps-react", "name": "@lingdocs/ps-react",
"version": "7.3.2", "version": "7.4.0",
"description": "Pashto inflector library module with React components", "description": "Pashto inflector library module with React components",
"main": "dist/components/library.js", "main": "dist/components/library.js",
"module": "dist/components/library.js", "module": "dist/components/library.js",
@ -32,6 +32,7 @@
"lz-string": "^1.4.4", "lz-string": "^1.4.4",
"pbf": "^3.2.1", "pbf": "^3.2.1",
"rambda": "^7.3.0", "rambda": "^7.3.0",
"react-error-boundary": "^4.0.13",
"react-select": "^5.4.0" "react-select": "^5.4.0"
}, },
"devDependencies": { "devDependencies": {

View File

@ -1,18 +1,30 @@
import * as T from "../../types"; import * as T from "../../types";
import InlinePs from "./InlinePs"; import InlinePs from "./InlinePs";
export default function HumanReadableInflectionPattern(p: T.InflectionPattern, textOptions: T.TextOptions): JSX.Element | null { export default function HumanReadableInflectionPattern(
return p === 1 p: T.InflectionPattern,
? <span>#1 Basic</span> textOptions: T.TextOptions
: p === 2 ): JSX.Element | null {
? <span>#2 Unstressed <InlinePs opts={textOptions}>{{ p: "ی", f: "ey", e: "" }}</InlinePs></span> return p === 1 ? (
: p === 3 <span>#1 Basic</span>
? <span>#3 Stressed <InlinePs opts={textOptions}>{{ p: "ی", f: "éy", e: "" }}</InlinePs></span> ) : p === 2 ? (
: p === 4 <span>
? <span>#4 "Pashtoon"</span> #2 Unstressed{" "}
: p === 5 <InlinePs opts={textOptions}>{{ p: "ی", f: "ay", e: "" }}</InlinePs>
? <span>#5 Short Squish</span> </span>
: p === 6 ) : p === 3 ? (
? <span>#6 Fem. inan. <InlinePs opts={textOptions}>{{ p: "ي", f: "ee", e: "" }}</InlinePs></span> <span>
: null; #3 Stressed{" "}
<InlinePs opts={textOptions}>{{ p: "ی", f: "áy", e: "" }}</InlinePs>
</span>
) : p === 4 ? (
<span>#4 "Pashtoon"</span>
) : p === 5 ? (
<span>#5 Short Squish</span>
) : p === 6 ? (
<span>
#6 Fem. inan.{" "}
<InlinePs opts={textOptions}>{{ p: "ي", f: "ee", e: "" }}</InlinePs>
</span>
) : null;
} }

View File

@ -24,27 +24,32 @@ function ChartDisplay({
transitivity: T.Transitivity; transitivity: T.Transitivity;
objectNP: T.NPSelection | undefined; objectNP: T.NPSelection | undefined;
}) { }) {
const verbChart = buildVerbChart({ try {
verb, const verbChart = buildVerbChart({
tense, verb,
voice, tense,
negative, voice,
transitivity, negative,
imperative, transitivity,
objectNP, imperative,
}); objectNP,
return ( });
<div className="mb-4"> return (
<NewVerbFormDisplay <div className="mb-4">
imperative={imperative} <NewVerbFormDisplay
negative={negative} imperative={imperative}
chart={verbChart} negative={negative}
opts={opts} chart={verbChart}
transitivity={transitivity} opts={opts}
past={isPastTense(tense)} transitivity={transitivity}
/> past={isPastTense(tense)}
</div> />
); </div>
);
} catch (e) {
console.error(e);
return <h4>Error conjugating verb!</h4>;
}
} }
export default ChartDisplay; export default ChartDisplay;

View File

@ -1,72 +1,138 @@
import { compileVP } from "../../../lib/src/phrase-building/compile"; import { compileVP } from "../../../lib/src/phrase-building/compile";
import * as T from "../../../types"; import * as T from "../../../types";
import AbbreviationFormSelector from "./AbbreviationFormSelector"; import AbbreviationFormSelector from "./AbbreviationFormSelector";
import { getObjectSelection, getSubjectSelection } from "../../../lib/src/phrase-building/blocks-utils"; import {
getObjectSelection,
getSubjectSelection,
} from "../../../lib/src/phrase-building/blocks-utils";
import { completeVPSelection } from "../../../lib/src/phrase-building/vp-tools"; import { completeVPSelection } from "../../../lib/src/phrase-building/vp-tools";
import { renderVP } from "../../../lib/src/phrase-building/render-vp"; import { renderVP } from "../../../lib/src/phrase-building/render-vp";
import ModeSelect, { LengthSelect, Mode, ScriptSelect } from "../DisplayModeSelect"; import ModeSelect, {
LengthSelect,
Mode,
ScriptSelect,
} from "../DisplayModeSelect";
import { useState } from "react"; import { useState } from "react";
import CompiledPTextDisplay from "../CompiledPTextDisplay"; import CompiledPTextDisplay from "../CompiledPTextDisplay";
import RenderedBlocksDisplay from "../RenderedBlocksDisplay"; import RenderedBlocksDisplay from "../RenderedBlocksDisplay";
import useStickyState from "../useStickyState"; import useStickyState from "../useStickyState";
function VPDisplay({ VPS, opts, setForm, justify, onlyOne, length, mode: preferredMode, script: preferredScript, onLengthChange, inlineFormChoice }: { function VPDisplay({
VPS: T.VPSelectionState, VPS,
opts: T.TextOptions, opts,
setForm: "disable" | ((form: T.FormVersion) => void), setForm,
justify?: "left" | "right" | "center", justify,
onlyOne?: boolean | "concat", onlyOne,
length?: "long" | "short", length,
mode?: Mode, mode: preferredMode,
script?: "p" | "f", script: preferredScript,
onLengthChange?: (length: "long" | "short") => void, onLengthChange,
inlineFormChoice?: boolean, inlineFormChoice,
}: {
VPS: T.VPSelectionState;
opts: T.TextOptions;
setForm: "disable" | ((form: T.FormVersion) => void);
justify?: "left" | "right" | "center";
onlyOne?: boolean | "concat";
length?: "long" | "short";
mode?: Mode;
script?: "p" | "f";
onLengthChange?: (length: "long" | "short") => void;
inlineFormChoice?: boolean;
}) { }) {
const [mode, setMode] = useState<Mode>(preferredMode || "text"); const [mode, setMode] = useState<Mode>(preferredMode || "text");
const [script, setScript] = useStickyState<"p" | "f">(preferredScript || "f", "blockScriptChoice"); const [script, setScript] = useStickyState<"p" | "f">(
const VP = completeVPSelection(VPS); preferredScript || "f",
if (!VP) { "blockScriptChoice"
return <div className="lead text-muted text-center mt-4"> );
{(() => { const VP = completeVPSelection(VPS);
const subject = getSubjectSelection(VPS.blocks).selection; if (!VP) {
const object = getObjectSelection(VPS.blocks).selection; return (
if (subject === undefined || object === undefined) { <div className="lead text-muted text-center mt-4">
return `Choose NP${((subject === undefined) && (object === undefined)) ? "s " : ""} to make a phrase`; {(() => {
} const subject = getSubjectSelection(VPS.blocks).selection;
return `Choose/remove AP to complete the phrase`; const object = getObjectSelection(VPS.blocks).selection;
})()} if (subject === undefined || object === undefined) {
</div>; return `Choose NP${
} subject === undefined && object === undefined ? "s " : ""
} to make a phrase`;
}
return `Choose/remove AP to complete the phrase`;
})()}
</div>
);
}
try {
const rendered = renderVP(VP); const rendered = renderVP(VP);
const result = compileVP(rendered, rendered.form, true); const result = compileVP(rendered, rendered.form, true);
return <div className={`text-${justify ? justify : "center"} mt-1`}> return (
{typeof setForm === "function" && !inlineFormChoice && <AbbreviationFormSelector <div className={`text-${justify ? justify : "center"} mt-1`}>
{typeof setForm === "function" && !inlineFormChoice && (
<AbbreviationFormSelector
adjustable={rendered.whatsAdjustable} adjustable={rendered.whatsAdjustable}
form={rendered.form} form={rendered.form}
onChange={setForm} onChange={setForm}
/>} />
)}
<div className="d-flex flex-row mb-2"> <div className="d-flex flex-row mb-2">
<ModeSelect value={mode} onChange={setMode} /> <ModeSelect value={mode} onChange={setMode} />
{mode === "blocks" && <ScriptSelect value={script} onChange={setScript} />} {mode === "blocks" && (
{mode === "text" && length && "long" in result.ps && onLengthChange && <LengthSelect value={length} onChange={onLengthChange} />} <ScriptSelect value={script} onChange={setScript} />
{typeof setForm === "function" && inlineFormChoice && <AbbreviationFormSelector )}
adjustable={rendered.whatsAdjustable} {mode === "text" &&
form={rendered.form} length &&
onChange={setForm} "long" in result.ps &&
inline onLengthChange && (
/>} <LengthSelect value={length} onChange={onLengthChange} />
)}
{typeof setForm === "function" && inlineFormChoice && (
<AbbreviationFormSelector
adjustable={rendered.whatsAdjustable}
form={rendered.form}
onChange={setForm}
inline
/>
)}
</div> </div>
{mode === "text" {mode === "text" ? (
? <CompiledPTextDisplay opts={opts} compiled={result} justify={justify} onlyOne={!!onlyOne} length={length} /> <CompiledPTextDisplay
: <RenderedBlocksDisplay opts={opts} rendered={rendered} justify={justify} script={script} />} opts={opts}
{result.e && <div className={`text-muted mt-2 text-${justify === "left" ? "left" : justify === "right" ? "right" : "center"}`}> compiled={result}
justify={justify}
onlyOne={!!onlyOne}
length={length}
/>
) : (
<RenderedBlocksDisplay
opts={opts}
rendered={rendered}
justify={justify}
script={script}
/>
)}
{result.e && (
<div
className={`text-muted mt-2 text-${
justify === "left"
? "left"
: justify === "right"
? "right"
: "center"
}`}
>
{onlyOne === "concat" {onlyOne === "concat"
? result.e.join(" • ") ? result.e.join(" • ")
: onlyOne : onlyOne
? [result.e[0]] ? [result.e[0]]
: result.e.map((e, i) => <div key={i}>{e}</div>)} : result.e.map((e, i) => <div key={i}>{e}</div>)}
</div>} </div>
</div> )}
</div>
);
} catch (e) {
console.error(e);
return <h4>Error conjugating verb!</h4>;
}
} }
export default VPDisplay; export default VPDisplay;

View File

@ -144,186 +144,196 @@ function VPExplorerQuiz(props: {
}); });
} }
} }
const rendered = renderVP(quizState.vps); try {
const subject: T.Rendered<T.NPSelection> = getSubjectSelectionFromBlocks( const rendered = renderVP(quizState.vps);
rendered.blocks const subject: T.Rendered<T.NPSelection> = getSubjectSelectionFromBlocks(
).selection; rendered.blocks
const object = getObjectSelectionFromBlocks(rendered.blocks).selection; ).selection;
const { e } = compileVP(rendered, { const object = getObjectSelectionFromBlocks(rendered.blocks).selection;
removeKing: false, const { e } = compileVP(rendered, {
shrinkServant: false, removeKing: false,
}); shrinkServant: false,
return ( });
<div className="mt-4"> return (
<ProgressBar quizState={quizState} /> <div className="mt-4">
<div className="d-flex flex-row justify-content-around flex-wrap"> <ProgressBar quizState={quizState} />
<div className="my-2"> <div className="d-flex flex-row justify-content-around flex-wrap">
<div className="h5 text-center">Subject</div>
<QuizNPDisplay opts={props.opts} stage={quizState.stage}>
{subject}
</QuizNPDisplay>
</div>
{object !== "none" && (
<div className="my-2"> <div className="my-2">
<div className="h5 text-center">Object</div> <div className="h5 text-center">Subject</div>
<QuizNPDisplay opts={props.opts} stage={quizState.stage}> <QuizNPDisplay opts={props.opts} stage={quizState.stage}>
{object} {subject}
</QuizNPDisplay> </QuizNPDisplay>
</div> </div>
)} {object !== "none" && (
<div className="my-2"> <div className="my-2">
<TensePicker <div className="h5 text-center">Object</div>
vpsComplete={quizState.vps} <QuizNPDisplay opts={props.opts} stage={quizState.stage}>
onChange={() => null} {object}
mode={"quiz"} </QuizNPDisplay>
/>
</div>
</div>
{e && (
<div className="text-center text-muted">
{e.map((eLine) => (
<div key={eLine}>{eLine}</div>
))}
</div>
)}
<div className="text-center">
<div
style={
showCheck
? answerFeedback
: ({ ...answerFeedback, opacity: 0 } as any)
}
>
{currentCorrectEmoji}
</div>
{quizState.qNumber === stageLength ? (
<div className="mt-4" style={{ animation: "fade-in 0.5s" }}>
<h4>👏 Congratulations</h4>
<p className="lead">You finished the first two levels!</p>
<p>There may be other levels in the future...</p>
<button
type="button"
className="btn btn-primary"
onClick={handleRestart}
>
Restart
</button>
</div>
) : quizState.result === "waiting" ? (
quizState.stage === "multiple choice" ? (
<>
<div className="text-muted my-3">Choose a correct answer:</div>
{quizState.options.map((o) => (
<div
className="pb-3"
key={o.f}
style={{ animation: "fade-in 0.5s" }}
>
<button
className="btn btn-answer btn-outline-secondary"
onClick={() => checkAnswer(o)}
>
<InlinePs opts={props.opts}>{o}</InlinePs>
</button>
</div>
))}
</>
) : (
<div>
<div className="text-muted my-3">
Type the <strong>verb in Pashto script</strong> to finish the
phrase:
</div>
<form
onSubmit={(e) => {
if (!answerBlank) {
alert("Enter the verb in Pashto script");
}
e.preventDefault();
checkAnswer({ text: answerBlank, withBa });
}}
>
<div
className="mb-3"
style={{ maxWidth: "250px", margin: "0 auto" }}
>
<input
type="text"
dir="auto"
className="form-control"
placeholder="type verb here"
value={answerBlank}
onChange={(e) => setAnswerBlank(e.target.value)}
/>
</div>
<div className="form-check mb-4" style={{ fontSize: "large" }}>
<input
className="form-check-input"
type="checkbox"
checked={withBa}
onChange={(e) => setWithBa(e.target.checked)}
id="addBa"
/>
<label
className="form-check-label text-muted"
htmlFor="addBa"
>
add <InlinePs opts={props.opts}>{baParticle}</InlinePs> in
kids' section
</label>
</div>
<button type="submit" className="btn btn-primary">
Check
</button>
</form>
</div> </div>
) )}
) : ( <div className="my-2">
<div style={{ animation: "fade-in 0.5s" }}> <TensePicker
<div className="h4 mt-4"> Wrong 😭</div> vpsComplete={quizState.vps}
{quizState.stage === "multiple choice" ? ( onChange={() => null}
<div> mode={"quiz"}
<div className="my-4 lead">The correct answer was:</div> />
<InlinePs opts={props.opts}> </div>
{ </div>
quizState.options.find((x) => {e && (
isInAnswer(x, quizState.answer) <div className="text-center text-muted">
) as T.PsString {e.map((eLine) => (
} <div key={eLine}>{eLine}</div>
</InlinePs> ))}
</div> </div>
) : ( )}
<div> <div className="text-center">
<div className="my-4 lead">Possible correct answers were:</div> <div
{quizState.answer.ps.map((p, i) => ( style={
<div key={i}> showCheck
<InlinePs opts={props.opts}>{p}</InlinePs> ? answerFeedback
: ({ ...answerFeedback, opacity: 0 } as any)
}
>
{currentCorrectEmoji}
</div>
{quizState.qNumber === stageLength ? (
<div className="mt-4" style={{ animation: "fade-in 0.5s" }}>
<h4>👏 Congratulations</h4>
<p className="lead">You finished the first two levels!</p>
<p>There may be other levels in the future...</p>
<button
type="button"
className="btn btn-primary"
onClick={handleRestart}
>
Restart
</button>
</div>
) : quizState.result === "waiting" ? (
quizState.stage === "multiple choice" ? (
<>
<div className="text-muted my-3">Choose a correct answer:</div>
{quizState.options.map((o) => (
<div
className="pb-3"
key={o.f}
style={{ animation: "fade-in 0.5s" }}
>
<button
className="btn btn-answer btn-outline-secondary"
onClick={() => checkAnswer(o)}
>
<InlinePs opts={props.opts}>{o}</InlinePs>
</button>
</div> </div>
))} ))}
<div className="mt-2"> </>
<strong> ) : (
{"withBa" in quizState.answer && quizState.answer.withBa <div>
? "With" <div className="text-muted my-3">
: "without"} Type the <strong>verb in Pashto script</strong> to finish the
</strong> phrase:
{` `}a <InlinePs opts={props.opts}>{baParticle}</InlinePs> in
the phrase
</div> </div>
<form
onSubmit={(e) => {
if (!answerBlank) {
alert("Enter the verb in Pashto script");
}
e.preventDefault();
checkAnswer({ text: answerBlank, withBa });
}}
>
<div
className="mb-3"
style={{ maxWidth: "250px", margin: "0 auto" }}
>
<input
type="text"
dir="auto"
className="form-control"
placeholder="type verb here"
value={answerBlank}
onChange={(e) => setAnswerBlank(e.target.value)}
/>
</div>
<div
className="form-check mb-4"
style={{ fontSize: "large" }}
>
<input
className="form-check-input"
type="checkbox"
checked={withBa}
onChange={(e) => setWithBa(e.target.checked)}
id="addBa"
/>
<label
className="form-check-label text-muted"
htmlFor="addBa"
>
add <InlinePs opts={props.opts}>{baParticle}</InlinePs> in
kids' section
</label>
</div>
<button type="submit" className="btn btn-primary">
Check
</button>
</form>
</div> </div>
)} )
<button ) : (
type="button" <div style={{ animation: "fade-in 0.5s" }}>
className="btn btn-primary mt-4" <div className="h4 mt-4"> Wrong 😭</div>
onClick={handleRestart} {quizState.stage === "multiple choice" ? (
> <div>
Try Again <div className="my-4 lead">The correct answer was:</div>
</button> <InlinePs opts={props.opts}>
</div> {
)} quizState.options.find((x) =>
<Keyframes name="fade-in" from={{ opacity: 0 }} to={{ opacity: 1 }} /> isInAnswer(x, quizState.answer)
) as T.PsString
}
</InlinePs>
</div>
) : (
<div>
<div className="my-4 lead">
Possible correct answers were:
</div>
{quizState.answer.ps.map((p, i) => (
<div key={i}>
<InlinePs opts={props.opts}>{p}</InlinePs>
</div>
))}
<div className="mt-2">
<strong>
{"withBa" in quizState.answer && quizState.answer.withBa
? "With"
: "without"}
</strong>
{` `}a <InlinePs opts={props.opts}>{baParticle}</InlinePs>{" "}
in the phrase
</div>
</div>
)}
<button
type="button"
className="btn btn-primary mt-4"
onClick={handleRestart}
>
Try Again
</button>
</div>
)}
<Keyframes name="fade-in" from={{ opacity: 0 }} to={{ opacity: 1 }} />
</div>
</div> </div>
</div> );
); } catch (e) {
console.error(e);
return <h4>Error conjugating verb!</h4>;
}
} }
function blanksAnswerCorrect( function blanksAnswerCorrect(

View File

@ -72,7 +72,16 @@ function VPPicker({
const subject = getSubjectSelection(vps.blocks).selection; const subject = getSubjectSelection(vps.blocks).selection;
const VPS = completeVPSelection(vps); const VPS = completeVPSelection(vps);
const phraseIsComplete = !!VPS; const phraseIsComplete = !!VPS;
const rendered = VPS ? renderVP(VPS) : undefined; const rendered = VPS
? (() => {
try {
return renderVP(VPS);
} catch (e) {
console.error(e);
return undefined;
}
})()
: undefined;
const servantIsShrunk = includesShrunkenServant(rendered?.kids); const servantIsShrunk = includesShrunkenServant(rendered?.kids);
const isPast = isPastTense( const isPast = isPastTense(
vps.verb.tenseCategory === "perfect" vps.verb.tenseCategory === "perfect"

View File

@ -8236,6 +8236,13 @@ react-element-to-jsx-string@^14.3.4:
is-plain-object "5.0.0" is-plain-object "5.0.0"
react-is "17.0.2" react-is "17.0.2"
react-error-boundary@^4.0.13:
version "4.0.13"
resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-4.0.13.tgz#80386b7b27b1131c5fbb7368b8c0d983354c7947"
integrity sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ==
dependencies:
"@babel/runtime" "^7.12.5"
react-inspector@^5.1.0: react-inspector@^5.1.0:
version "5.1.1" version "5.1.1"
resolved "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz" resolved "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz"

View File

@ -1,6 +1,6 @@
{ {
"name": "@lingdocs/inflect", "name": "@lingdocs/inflect",
"version": "7.3.2", "version": "7.4.0",
"description": "Pashto inflector library", "description": "Pashto inflector library",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/lib/library.d.ts", "types": "dist/lib/library.d.ts",

View File

@ -66,6 +66,8 @@ export function getInfsAndVocative(
pattern === 0 && pattern === 0 &&
isFemNounEntry(entry) && isFemNounEntry(entry) &&
isAnimNounEntry(entry) && isAnimNounEntry(entry) &&
entry.ppp &&
entry.ppf &&
endsInConsonant(entry) endsInConsonant(entry)
) { ) {
return { return {
@ -114,8 +116,8 @@ const patternFuncs: Record<
Record<T.Gender, (inp: PatternInput) => InflectionsAndVocative> Record<T.Gender, (inp: PatternInput) => InflectionsAndVocative>
> = { > = {
1: { 1: {
masc: vocPattern1Masc, masc: pattern1Masc,
fem: vocPattern1Fem, fem: pattern1Fem,
}, },
2: { 2: {
masc: pattern2Masc, masc: pattern2Masc,
@ -130,7 +132,7 @@ const patternFuncs: Record<
fem: pattern4Fem, fem: pattern4Fem,
}, },
5: { 5: {
masc: vocPattern5Masc, masc: pattern5Masc,
fem: pattern5Fem, fem: pattern5Fem,
}, },
}; };
@ -191,7 +193,7 @@ function vocFemAnimException({
}; };
} }
function vocPattern1Masc({ function pattern1Masc({
entry, entry,
plurals, plurals,
}: PatternInput): InflectionsAndVocative { }: PatternInput): InflectionsAndVocative {
@ -236,10 +238,7 @@ function vocPattern1Masc({
} }
// TODO this is HUGELY repetitive refactor this! // TODO this is HUGELY repetitive refactor this!
function vocPattern1Fem({ function pattern1Fem({ entry, plurals }: PatternInput): InflectionsAndVocative {
entry,
plurals,
}: PatternInput): InflectionsAndVocative {
const shwaEnding = hasShwaEnding(entry); const shwaEnding = hasShwaEnding(entry);
const hasFemEnding = endsWith([{ p: "ه", f: "a" }], entry) || shwaEnding; const hasFemEnding = endsWith([{ p: "ه", f: "a" }], entry) || shwaEnding;
const endAccented = accentIsOnEnd(entry); const endAccented = accentIsOnEnd(entry);
@ -333,7 +332,7 @@ function vocPattern1Fem({
} }
if (isFemNounEntry(entry) && endsInConsonant(entry)) { if (isFemNounEntry(entry) && endsInConsonant(entry)) {
const baseForInf = const baseForInf =
countSyllables(entry) === 1 ? accentOnNFromEnd(entry, 0) : e; countSyllables(entry) === 1 ? accentOnNFromEnd(entry, 0) : entry;
const inflections: T.InflectionSet = [ const inflections: T.InflectionSet = [
[psStringFromEntry(entry)], [psStringFromEntry(entry)],
[concatPs(baseForInf, e)], [concatPs(baseForInf, e)],
@ -494,7 +493,7 @@ function pattern4Fem({ entry }: PatternInput): InflectionsAndVocative {
}; };
} }
function vocPattern5Masc({ function pattern5Masc({
entry, entry,
plurals, plurals,
}: PatternInput): InflectionsAndVocative { }: PatternInput): InflectionsAndVocative {

View File

@ -1794,6 +1794,33 @@ const nouns: {
}, },
}, },
}, },
{
in: {
ts: 1715165815298,
i: 17989,
p: "وریندار",
f: "wreendáar",
g: "wreendaar",
e: "brother's wife, sister-in-law (of male)",
r: 4,
c: "n. f. anim.",
},
out: {
inflections: {
fem: [
[{ p: "وریندار", f: "wreendáar" }],
[{ p: "وریندارې", f: "wreendáare" }],
[{ p: "وریندارو", f: "wreendáaro" }],
],
},
vocative: {
fem: [
[{ p: "وریندارې", f: "wreendáare" }],
[{ p: "وریندارو", f: "wreendáaro" }],
],
},
},
},
// Feminine regular inanimate ending in ي // Feminine regular inanimate ending in ي
{ {
in: { in: {

View File

@ -40,7 +40,8 @@ export function inflectWord(word: T.DictionaryEntry): T.InflectorOutput {
inflected[0].inflections, inflected[0].inflections,
inflected[1].inflections inflected[1].inflections
) as T.UnisexInflections, ) as T.UnisexInflections,
...(vocatives.length // in case there's only one vocative check to make sure we have both
...(vocatives.length === 2
? { vocative: concatPlurals(vocatives[0], vocatives[1]) } ? { vocative: concatPlurals(vocatives[0], vocatives[1]) }
: {}), : {}),
}; };

View File

@ -180,7 +180,7 @@ export function isPattern1Entry<T extends T.InflectableEntry>(
e e
) && ) &&
!e.p.endsWith("اع")) || !e.p.endsWith("اع")) ||
(endsWith({ p: pashtoConsonants }, e) && !e.c.includes("anim.")) (endsWith({ p: pashtoConsonants }, e) && !(e.ppp && e.ppf))
); );
} }
return endsInConsonant(e) || hasShwaEnding(e); return endsInConsonant(e) || hasShwaEnding(e);

View File

@ -1,103 +1,115 @@
module.exports = [ module.exports = [
{ ts: 1527812828, e: "house" }, // kor { ts: 1527812828, e: "house" }, // kor
{ ts: 1527812432, e: `sky, heaven` }, // آسمان - aasmaan { ts: 1527812432, e: `sky, heaven` }, // آسمان - aasmaan
{ ts: 1527812431, e: `mango` }, // آم - aam { ts: 1527812431, e: `mango` }, // آم - aam
{ ts: 1527812434, e: `sound, voice` }, // آواز - aawaaz { ts: 1527812434, e: `sound, voice` }, // آواز - aawaaz
{ ts: 1527816724, e: `room, chamber` }, // اتاق - Utaaq { ts: 1527816724, e: `room, chamber` }, // اتاق - Utaaq
{ ts: 1527811859, e: `union, alliance` }, // اتحاد - itihaad { ts: 1527811859, e: `union, alliance` }, // اتحاد - itihaad
{ ts: 1527822033, e: `joining, connection, contiguity, junction` }, // اتصال - ittisáal { ts: 1527822033, e: `joining, connection, contiguity, junction` }, // اتصال - ittisáal
{ ts: 1527811858, e: `unity, alliance, agreement, understanding, consent; coincidence` }, // اتفاق - itifaaq {
{ ts: 1527813560, e: `accusation, charge, indictment` }, // اتهام - itihaam ts: 1527811858,
{ ts: 1527812105, e: `respect, honor, esteem, deference` }, // احترام - ihtiraam e: `unity, alliance, agreement, understanding, consent; coincidence`,
{ ts: 1527819653, e: `possibility, probability, likelihood` }, // احتمال - ihtimaal }, // اتفاق - itifaaq
{ ts: 1527812689, e: `need, requirement` }, // احتیاج - ihtiyaaj { ts: 1527813560, e: `accusation, charge, indictment` }, // اتهام - itihaam
{ ts: 1527812690, e: `caution` }, // احتیاط - ihtiyaat { ts: 1527812105, e: `respect, honor, esteem, deference` }, // احترام - ihtiraam
{ ts: 1527813782, e: `feeling, sensation, emotion` }, // احساس - ahsaas { ts: 1527819653, e: `possibility, probability, likelihood` }, // احتمال - ihtimaal
{ ts: 1527817303, e: `objection, protest` }, // اعتراض - itiraaz { ts: 1527812689, e: `need, requirement` }, // احتیاج - ihtiyaaj
{ ts: 1527813418, e: `influence, effect, affect, action` }, // اغېز - aghez { ts: 1527812690, e: `caution` }, // احتیاط - ihtiyaat
{ ts: 1527816625, e: `disaster` }, // افت - afat { ts: 1527813782, e: `feeling, sensation, emotion` }, // احساس - ahsaas
{ ts: 1527813558, e: `accusation, charge, blame` }, // الزام - ilzaam { ts: 1527817303, e: `objection, protest` }, // اعتراض - itiraaz
{ ts: 1527815388, e: `hope, expectation` }, // امید - Umeed { ts: 1527813418, e: `influence, effect, affect, action` }, // اغېز - aghez
{ ts: 1527812453, e: `picture, painting, image` }, // انځور - andzoor { ts: 1527816625, e: `disaster` }, // افت - afat
{ ts: 1527813827, e: `fire, flame` }, // اور - or { ts: 1527813558, e: `accusation, charge, blame` }, // الزام - ilzaam
{ ts: 1527814787, e: `rain` }, // باران - baaraan { ts: 1527815388, e: `hope, expectation` }, // امید - Umeed
{ ts: 1527817293, e: `roof` }, // بام - baam { ts: 1527812453, e: `picture, painting, image` }, // انځور - andzoor
{ ts: 1527814849, e: `eggplant` }, // بانجن - baanjan { ts: 1527813827, e: `fire, flame` }, // اور - or
{ ts: 1527814106, e: `crisis` }, // بحران - bUhraan { ts: 1527814787, e: `rain` }, // باران - baaraan
{ ts: 1527814885, e: `fortune, luck, fate` }, // بخت - bakht { ts: 1527817293, e: `roof` }, // بام - baam
{ ts: 1527811281, e: `garden` }, // بڼ - baN { ts: 1527814849, e: `eggplant` }, // بانجن - baanjan
{ ts: 1624039195280, e: `scholarship` }, // بورس - boors { ts: 1527814106, e: `crisis` }, // بحران - bUhraan
{ ts: 1527816877, e: `flag` }, // بیرغ - beyragh { ts: 1527814885, e: `fortune, luck, fate` }, // بخت - bakht
{ ts: 1527820423, e: `passport` }, // پاسپورټ - paasporT { ts: 1527811281, e: `garden` }, // بڼ - baN
{ ts: 1527813224, e: `bridge` }, // پل - pUl { ts: 1624039195280, e: `scholarship` }, // بورس - boors
{ ts: 1527813480, e: `plan` }, // پلان - plaan { ts: 1527816877, e: `flag` }, // بیرغ - beyragh
{ ts: 1527815199, e: `central-asian/middle-eastern rice dish, pilaf` }, // پلاو - pulaaw { ts: 1527820423, e: `passport` }, // پاسپورټ - paasporT
{ ts: 1527815185, e: `loan, debt` }, // پور - por { ts: 1527813224, e: `bridge` }, // پل - pUl
{ ts: 1527815176, e: `onion` }, // پیاز - piyaaz { ts: 1527813480, e: `plan` }, // پلان - plaan
{ ts: 1527815171, e: `start` }, // پیل - peyl { ts: 1527815199, e: `central-asian/middle-eastern rice dish, pilaf` }, // پلاو - pulaaw
{ ts: 1527816610, e: `crown, crest` }, // تاج - taaj { ts: 1527815185, e: `loan, debt` }, // پور - por
{ ts: 1527822373, e: `vine; mouthful` }, // تاک - taak { ts: 1527815176, e: `onion` }, // پیاز - piyaaz
{ ts: 1527815326, e: `confirmation` }, // تایید - taayeed { ts: 1527815171, e: `start` }, // پیل - peyl
{ ts: 1527815357, e: `seed` }, // تخم - tUkhum { ts: 1527816610, e: `crown, crest` }, // تاج - taaj
{ ts: 1527821586, e: `pity, sympathy` }, // ترحم - tarahhÚm { ts: 1527822373, e: `vine; mouthful` }, // تاک - taak
{ ts: 1527811389, e: `picture` }, // تصویر - tasweer { ts: 1527815326, e: `confirmation` }, // تایید - taayeed
{ ts: 1527814679, e: `guarantee, insurance, security` }, // تضمین - tazmeen { ts: 1527815357, e: `seed` }, // تخم - tUkhum
{ ts: 1527814258, e: `speech, lecture` }, // تقریر - taqreer { ts: 1527821586, e: `pity, sympathy` }, // ترحم - tarahhÚm
{ ts: 1527821670, e: `cheating, deception, fraud, forgery` }, // تقلب - taqalÚb { ts: 1527811389, e: `picture` }, // تصویر - tasweer
{ ts: 1527811602, e: `attempt, aspiration, intention, effort` }, // تکل - takál { ts: 1527814679, e: `guarantee, insurance, security` }, // تضمین - tazmeen
{ ts: 1527813398, e: `movement, motion, going` }, // تګ - tug, tag { ts: 1702629785933, e: `speech, lecture` }, // تقریر - taqreer
{ ts: 1527822126, e: `anniversary` }, // تلین - tleen { ts: 1527821670, e: `cheating, deception, fraud, forgery` }, // تقلب - taqalÚb
{ ts: 1527811308, e: `contact, touch` }, // تماس - tamaas { ts: 1527811602, e: `attempt, aspiration, intention, effort` }, // تکل - takál
{ ts: 1527817900, e: `body, flesh` }, // تن - tan { ts: 1527813398, e: `movement, motion, going` }, // تګ - tug, tag
{ ts: 1527821061, e: `contrast, opposition, contradiction` }, // تناقض - tanaaqÚz { ts: 1527822126, e: `anniversary` }, // تلین - tleen
{ ts: 1527822387, e: `rope, cord; a measurement of ground or distances` }, // تناو - tanáaw { ts: 1527811308, e: `contact, touch` }, // تماس - tamaas
{ ts: 1527818995, e: `lightning` }, // تندر - tandúr { ts: 1527817900, e: `body, flesh` }, // تن - tan
{ ts: 1527815362, e: `ball; (cannon) ball` }, // توپ - top { ts: 1527821061, e: `contrast, opposition, contradiction` }, // تناقض - tanaaqÚz
{ ts: 1527816820, e: `spit` }, // توک - took { ts: 1527822387, e: `rope, cord; a measurement of ground or distances` }, // تناو - tanáaw
{ ts: 1527816520, e: `family, clan, tribe, people` }, // ټبر - Tabar { ts: 1527818995, e: `lightning` }, // تندر - tandúr
{ ts: 1527811348, e: `wound` }, // ټپ - Tap { ts: 1527815362, e: `ball; (cannon) ball` }, // توپ - top
{ ts: 1527819566, e: `piece, part; cloth, fabric` }, // ټکر - TUkúr { ts: 1527816820, e: `spit` }, // توک - took
{ ts: 1527812213, e: `mosque` }, // جمات - jUmaat { ts: 1527816520, e: `family, clan, tribe, people` }, // ټبر - Tabar
{ ts: 1527811705, e: `structure` }, // جوړښت - joRuxt { ts: 1527811348, e: `wound` }, // ټپ - Tap
{ ts: 1527814058, e: `answer, reply` }, // ځواب - dzawaab { ts: 1527819566, e: `piece, part; cloth, fabric` }, // ټکر - TUkúr
{ ts: 1527816887, e: `life, existence, energy, force` }, // ځواک - dzwaak { ts: 1527812213, e: `mosque` }, // جمات - jUmaat
{ ts: 1527814649, e: `market square, crossroads, paved area in front of entrance` }, // چوک - chok { ts: 1527811705, e: `structure` }, // جوړښت - joRuxt
{ ts: 1527815065, e: `hammer` }, // څټک - tsaTak, tsTuk { ts: 1527814058, e: `answer, reply` }, // ځواب - dzawaab
{ ts: 1527814589, e: `side` }, // څنګ - tsang { ts: 1527816887, e: `life, existence, energy, force` }, // ځواک - dzwaak
{ ts: 1527816228, e: `boundary, limit, extent` }, // حد - had {
{ ts: 1527813749, e: `government, reign, rule` }, // حکومت - hUkoomat ts: 1527814649,
{ ts: 1527814125, e: `solution` }, // حل - hal e: `market square, crossroads, paved area in front of entrance`,
{ ts: 1527818703, e: `shirt` }, // خت - khut }, // چوک - chok
{ ts: 1527813804, e: `sleep, dream` }, // خوب - khob { ts: 1527815065, e: `hammer` }, // څټک - tsaTak, tsTuk
{ ts: 1527812815, e: `safety, security` }, // خوندیتوب - khwundeetob { ts: 1527814589, e: `side` }, // څنګ - tsang
{ ts: 1527813763, e: `religion, faith` }, // دین - deen { ts: 1527816228, e: `boundary, limit, extent` }, // حد - had
{ ts: 1527811517, e: `journey, travel` }, // سفر - safar { ts: 1527813749, e: `government, reign, rule` }, // حکومت - hUkoomat
{ ts: 1527815389, e: `age, life` }, // عمر - Úmur { ts: 1527814125, e: `solution` }, // حل - hal
{ ts: 1527816746, e: `tooth` }, // غاښ - ghaax { ts: 1527818703, e: `shirt` }, // خت - khut
{ ts: 1527812631, e: `ear` }, // غوږ - ghwuG, ghwaG { ts: 1527813804, e: `sleep, dream` }, // خوب - khob
{ ts: 1527812265, e: `decree, order` }, // فرمان - farmaan { ts: 1527812815, e: `safety, security` }, // خوندیتوب - khwundeetob
{ ts: 1527817205, e: `film, movie` }, // فلم - film { ts: 1527813763, e: `religion, faith` }, // دین - deen
{ ts: 1527812727, e: `year` }, // کال - kaal { ts: 1527811517, e: `journey, travel` }, // سفر - safar
{ ts: 1527812817, e: `book` }, // کتاب - kitaab { ts: 1527815389, e: `age, life` }, // عمر - Úmur
{ ts: 1527812611, e: `step, move` }, // ګام - gaam { ts: 1527816746, e: `tooth` }, // غاښ - ghaax
{ ts: 1527812641, e: `rose, flower` }, // ګل - gUl { ts: 1527812631, e: `ear` }, // غوږ - ghwuG, ghwaG
{ ts: 1527812650, e: `threat, danger, challeng` }, // ګواښ - gwaax { ts: 1527812265, e: `decree, order` }, // فرمان - farmaan
{ ts: 1527813521, e: `mourning, grief, grieving, deep sorrow` }, // ماتم - maatam { ts: 1527817205, e: `film, movie` }, // فلم - film
{ ts: 1527812176, e: `evening` }, // ماښام - maaxaam { ts: 1527812727, e: `year` }, // کال - kaal
{ ts: 1527813601, e: `death` }, // مرګ - marg { ts: 1527812817, e: `book` }, // کتاب - kitaab
{ ts: 1527817691, e: `future` }, // مستقبل - mUstaqbil { ts: 1527812611, e: `step, move` }, // ګام - gaam
{ ts: 1527811866, e: `damage, defect, loss` }, // نقصان - nUqsaan { ts: 1527812641, e: `rose, flower` }, // ګل - gUl
{ ts: 1527815122, e: `name` }, // نوم - noom { ts: 1527812650, e: `threat, danger, challeng` }, // ګواښ - gwaax
{ ts: 1527812661, e: `boy, young lad` }, // هلک - halík, halúk { ts: 1527813521, e: `mourning, grief, grieving, deep sorrow` }, // ماتم - maatam
{ ts: 1566476070874, e: `street, road` }, // واټ - waaT { ts: 1527812176, e: `evening` }, // ماښام - maaxaam
{ ts: 1527816036, e: `authority, power` }, // واک - waak { ts: 1527813601, e: `death` }, // مرګ - marg
{ ts: 1527815400, e: `time` }, // وخت - wakht { ts: 1527817691, e: `future` }, // مستقبل - mUstaqbil
{ ts: 1527818582, e: `building, prosperity, habitable state` }, // ودانښت - wadaanuxt { ts: 1527811866, e: `damage, defect, loss` }, // نقصان - nUqsaan
{ ts: 1527811441, e: `door, gate, entrance` }, // ور - war { ts: 1527815122, e: `name` }, // نوم - noom
{ ts: 1527815406, e: `homeland, home country` }, // وطن - watán { ts: 1527812661, e: `boy, young lad` }, // هلک - halík, halúk
{ ts: 1573149648251, e: `fellow country-man` }, // وطن وال - watanwaal { ts: 1566476070874, e: `street, road` }, // واټ - waaT
{ ts: 1586428847646, e: `national (person), a citizen or person of that land` }, // وطنوال - watanwáal { ts: 1527816036, e: `authority, power` }, // واک - waak
{ ts: 1527822208, e: `bat, coward, pipsqueak, hesitant person` }, // وطواط - watwáat { ts: 1527815400, e: `time` }, // وخت - wakht
{ ts: 1527819571, e: `apprehension, anxiety, suspicion; imagination, whims, some problem made up in someones head` }, // وهم - wáhum, wahm { ts: 1527818582, e: `building, prosperity, habitable state` }, // ودانښت - wadaanuxt
{ ts: 1527816332, e: `pride, glory` }, // ویاړ - wyaaR { ts: 1527811441, e: `door, gate, entrance` }, // ور - war
{ ts: 1527815406, e: `homeland, home country` }, // وطن - watán
{ ts: 1573149648251, e: `fellow country-man` }, // وطن وال - watanwaal
{
ts: 1586428847646,
e: `national (person), a citizen or person of that land`,
}, // وطنوال - watanwáal
{ ts: 1527822208, e: `bat, coward, pipsqueak, hesitant person` }, // وطواط - watwáat
{
ts: 1527819571,
e: `apprehension, anxiety, suspicion; imagination, whims, some problem made up in someones head`,
}, // وهم - wáhum, wahm
{ ts: 1527816332, e: `pride, glory` }, // ویاړ - wyaaR
]; ];

View File

@ -7,134 +7,134 @@
*/ */
module.exports = [ module.exports = [
1658537932357, // لېونی کېدل 1658537932357, // لېونی کېدل
1588760879818, // احساسېدل - to feel, be sensed 1588760879818, // احساسېدل - to feel, be sensed
1577223176187, // ادا کېدل - to be set forth, given, rendered (service), performed, fulfilled, expressed, said, done 1577223176187, // ادا کېدل - to be set forth, given, rendered (service), performed, fulfilled, expressed, said, done
1527814793, // اړېدل - to need, to be forced, to have to, to experience a need 1527814793, // اړېدل - to need, to be forced, to have to, to experience a need
1527820761, // استعمالېدل - to be used, utilized, applied 1527820761, // استعمالېدل - to be used, utilized, applied
1527818887, // اموخته کېدل - to get used to, to get accustomed to, adjusted to, to become tame 1527818887, // اموخته کېدل - to get used to, to get accustomed to, adjusted to, to become tame
1527821797, // انتقال کېدل - to be transfered, to move; to die, to pass away 1527821797, // انتقال کېدل - to be transfered, to move; to die, to pass away
1527822931, // اوده کېدل - to sleep, to be asleep 1527822931, // اوده کېدل - to sleep, to be asleep
1588853804403, // اوږدېدل - to get long, to drag out, to get longer 1588853804403, // اوږدېدل - to get long, to drag out, to get longer
1527813033, // ایسارېدل - to wait, wait (for), to be delayed, detained, stopped 1527813033, // ایسارېدل - to wait, wait (for), to be delayed, detained, stopped
1527812404, // بچ کېدل - to be saved, spared; run off, escape, nip off 1527812404, // بچ کېدل - to be saved, spared; run off, escape, nip off
1527814231, // بدلېدل - to be changed, replaced, exchanged, to undergo a change 1527814231, // بدلېدل - to be changed, replaced, exchanged, to undergo a change
1527815729, // بلدېدل - to become familiar, acquainted, used to 1527815729, // بلدېدل - to become familiar, acquainted, used to
1527813842, // بلېدل - to burn, catch fire 1527813842, // بلېدل - to burn, catch fire
1527815032, // بندي کېدل - to become a prisoner, to get imprisoned 1527815032, // بندي کېدل - to become a prisoner, to get imprisoned
1588781671306, // بندېدل - to be closed, blocked, stopped 1588781671306, // بندېدل - to be closed, blocked, stopped
1527817582, // بېزارېدل - to be fed up with, tired of, repulsed by, dissatisfied with, done with, disgusted by 1527817582, // بېزارېدل - to be fed up with, tired of, repulsed by, dissatisfied with, done with, disgusted by
1527815844, // بېلېدل - to be separated 1527815844, // بېلېدل - to be separated
1588073731662, // پاکېدل - to be cleaned, become clean, to be cleansed, purified 1588073731662, // پاکېدل - to be cleaned, become clean, to be cleansed, purified
1527813895, // پټېدل - to hide, to be hidden 1715816590539, // پټېدل - to hide, to be hidden
1527812011, // پخلا کېدل - to be reconciled, brought to an agreement 1527812011, // پخلا کېدل - to be reconciled, brought to an agreement
1581906176268, // پخېدل - to be cooked, prepared, ripened, matured 1581906176268, // پخېدل - to be cooked, prepared, ripened, matured
1584689265872, // پستېدل - to become soft, tender, gentle, loosened 1584689265872, // پستېدل - to become soft, tender, gentle, loosened
1583269419054, // پورته کېدل - to be raised up, lifted up, brought up 1583269419054, // پورته کېدل - to be raised up, lifted up, brought up
1527814169, // پورې کېدل - to cross, traverse, go to the other side 1527814169, // پورې کېدل - to cross, traverse, go to the other side
1577394057681, // پوهېدل - to understand (to come to a state of understanding) 1577394057681, // پوهېدل - to understand (to come to a state of understanding)
1527815170, // پیدا کېدل - to be found, born 1527815170, // پیدا کېدل - to be found, born
1581189978440, // پېش کېدل - to be brought forward, presented, delivered 1581189978440, // پېش کېدل - to be brought forward, presented, delivered
1527815167, // پېښېدل - to happen, occur, come up 1527815167, // پېښېدل - to happen, occur, come up
1591872442272, // پیلېدل - to be started, begin 1591872442272, // پیلېدل - to be started, begin
1527815324, // تاوېدل - to turn, rotate (passive), to be wrapped, twisted 1527815324, // تاوېدل - to turn, rotate (passive), to be wrapped, twisted
1577398809240, // تباه کېدل - to be destroyed, ruined 1577398809240, // تباه کېدل - to be destroyed, ruined
1582391432928, // تبدیلېدل - to change, to undergo change, to be transformed 1582391432928, // تبدیلېدل - to change, to undergo change, to be transformed
1580755448566, // ترکېدل - to be abondoned, left, refused 1580755448566, // ترکېدل - to be abondoned, left, refused
1527821367, // تسلیمېدل - to surrender, capitulate; to be handed over, delivered, passed on 1527821367, // تسلیمېدل - to surrender, capitulate; to be handed over, delivered, passed on
1527814905, // تشېدل - to be emptied 1527814905, // تشېدل - to be emptied
1527821358, // تصدیق کېدل - to be confirmed, affirmed, attested 1527821358, // تصدیق کېدل - to be confirmed, affirmed, attested
1527823430, // تقسیمېدل - to be divided, partitioned, distributed 1527823430, // تقسیمېدل - to be divided, partitioned, distributed
1577501138221, // تکرار کېدل - to be repeated 1577501138221, // تکرار کېدل - to be repeated
1527814919, // تولیدېدل - to be produced, manufactured; to spring up, to be created, birthed 1527814919, // تولیدېدل - to be produced, manufactured; to spring up, to be created, birthed
1579644515886, // تویېدل - to be poured, shed, spilled, scattered, knocked down (fruit) 1579644515886, // تویېدل - to be poured, shed, spilled, scattered, knocked down (fruit)
1577571228633, // تیارېدل - to become ready, to become prepared, to get ready 1577571228633, // تیارېدل - to become ready, to become prepared, to get ready
1577571096956, // ټولېدل - to be gathered, collected 1577571096956, // ټولېدل - to be gathered, collected
1577571391494, // ټیټېدل - to bow, stoop, go down 1577571391494, // ټیټېدل - to bow, stoop, go down
1589019870271, // ټیک کېدل - to be corrected, made right 1589019870271, // ټیک کېدل - to be corrected, made right
1585310006948, // ثابتېدل - to be proven, established, made firm 1585310006948, // ثابتېدل - to be proven, established, made firm
1527816202, // ثبتېدل - to be entered, saved, recorded, registered 1527816202, // ثبتېدل - to be entered, saved, recorded, registered
1527821166, // جارېدل - to be sacrificed, to be offered/at someones service 1527821166, // جارېدل - to be sacrificed, to be offered/at someones service
1527816943, // جوتېدل - to become evident, clear, apparent, explained, established 1527816943, // جوتېدل - to become evident, clear, apparent, explained, established
1527812713, // جوړېدل - to be made, formed, build, mended, become 1527812713, // جوړېدل - to be made, formed, build, mended, become
1577905544406, // ځایېدل - to fit, to fit into a space, to be accomodated 1577905544406, // ځایېدل - to fit, to fit into a space, to be accomodated
1527812522, // چاپ کېدل - to be published, printed 1527812522, // چاپ کېدل - to be published, printed
1527811694, // چاغېدل - to put on weight, to get fat 1527811694, // چاغېدل - to put on weight, to get fat
1588783381414, // حاضرېدل - to show up, be present, appear; to be prepared, to get ready 1588783381414, // حاضرېدل - to show up, be present, appear; to be prepared, to get ready
1527814126, // حلېدل - to be solved, resolved 1527814126, // حلېدل - to be solved, resolved
1588426001132, // حیرانېدل - to be amazed, astonished, shocked, surprized 1588426001132, // حیرانېدل - to be amazed, astonished, shocked, surprized
1527819313, // خارجېدل - to be exiled, dismissed, fired, extracted, processed 1527819313, // خارجېدل - to be exiled, dismissed, fired, extracted, processed
1527816079, // خبرېدل - to be informed, to come to know 1527816079, // خبرېدل - to be informed, to come to know
1527811394, // خپرېدل - to be spread, dispersed, opened, unfolded, publicized, distributed 1527811394, // خپرېدل - to be spread, dispersed, opened, unfolded, publicized, distributed
1577900112011, // ختمېدل - to be finished, completed, ended, used up, killed, destroyed 1577900112011, // ختمېدل - to be finished, completed, ended, used up, killed, destroyed
1527814184, // خرڅېدل - to be sold, to be spent 1527814184, // خرڅېدل - to be sold, to be spent
1577898920635, // خفه کېدل - to be sad, grieved, annoyed, upset; to be choked, to suffocate 1577898920635, // خفه کېدل - to be sad, grieved, annoyed, upset; to be choked, to suffocate
1527818360, // خلاصېدل - to be freed, saved, rescued, opened 1527818360, // خلاصېدل - to be freed, saved, rescued, opened
1527814173, // خوږېدل - to hurt, to have pain 1527814173, // خوږېدل - to hurt, to have pain
1527817114, // خوشتېدل - to become damp, wet, moist 1527817114, // خوشتېدل - to become damp, wet, moist
1527812812, // خوښېدل - to be pleasing, happy, to be liked; to be chosen, selected 1527812812, // خوښېدل - to be pleasing, happy, to be liked; to be chosen, selected
1527816735, // داخلېدل - to enter, go in; to be included; to be enrolled 1527816735, // داخلېدل - to enter, go in; to be included; to be enrolled
1527815784, // درنېدل - to become heavier; to become more serious, respectable, reliable 1527815784, // درنېدل - to become heavier; to become more serious, respectable, reliable
1577059043220, // دفن کېدل - to be buried 1577059043220, // دفن کېدل - to be buried
1527817671, // ډکېدل - to fill up 1527817671, // ډکېدل - to fill up
1527817257, // ډوبېدل - to drown, sink, dissapear, be submerged 1527817257, // ډوبېدل - to drown, sink, dissapear, be submerged
1527816895, // ډېرېدل - to increase, to become more, to be increased, to rise 1527816895, // ډېرېدل - to increase, to become more, to be increased, to rise
1527818346, // راپورته کېدل - to be raised up, to rise 1527818346, // راپورته کېدل - to be raised up, to rise
1527815734, // راټولېدل - to be brought together, gathered, collected, assembled 1527815734, // راټولېدل - to be brought together, gathered, collected, assembled
1585474304911, // رغېدل - to become healthy, to heal, to get better, to recover, to be cured; to be built up; to be sewn, mended, repaired 1585474304911, // رغېدل - to become healthy, to heal, to get better, to recover, to be cured; to be built up; to be sewn, mended, repaired
1527823278, // رنګېدل - to be painted, colored 1527823278, // رنګېدل - to be painted, colored
1527812410, // روانېدل - to get under way, to get going, to depart 1527812410, // روانېدل - to get under way, to get going, to depart
1527815236, // ړنګېدل - to be demolished, ruined, dissolved, disbanded 1527815236, // ړنګېدل - to be demolished, ruined, dissolved, disbanded
1527817576, // زرغونېدل - to germinate, grow, flourish, develop 1527817576, // زرغونېدل - to germinate, grow, flourish, develop
1566120362058, // زړېدل - to get old, to age, to get worn out 1566120362058, // زړېدل - to get old, to age, to get worn out
1527817668, // زیاتېدل - to become more, to grow in number 1527817668, // زیاتېدل - to become more, to grow in number
1591033069786, // ستړی کېدل - to get tired, fatigued 1591033069786, // ستړی کېدل - to get tired, fatigued
1527816404, // ستنېدل - to return go back; to be delayed, to linger 1527816404, // ستنېدل - to return go back; to be delayed, to linger
1591782112190, // سمېدل - to become right, correct, get repaired, be fixed, be straightened out 1591782112190, // سمېدل - to become right, correct, get repaired, be fixed, be straightened out
1527811948, // شریکېدل - to be shared, held in common; to participate in something, share in something, be involved 1527811948, // شریکېدل - to be shared, held in common; to participate in something, share in something, be involved
1589883893191, // شړمېدل - to ba attached loosely, to become loose, lazy, flabby 1589883893191, // شړمېدل - to ba attached loosely, to become loose, lazy, flabby
1527820128, // ښخېدل - to be buried, entombed; to be pierced, plunged, thrust into 1527820128, // ښخېدل - to be buried, entombed; to be pierced, plunged, thrust into
1527814077, // ښکارېدل - to become clear, evident, obvious; to appear, to seem 1527814077, // ښکارېدل - to become clear, evident, obvious; to appear, to seem
1577057620783, // عادت کېدل - to get used to, to get accustomed to; to get addicted to 1577057620783, // عادت کېدل - to get used to, to get accustomed to; to get addicted to
1585475932743, // عذابېدل - to be tortured, tormented, punished, bothered, pained 1585475932743, // عذابېدل - to be tortured, tormented, punished, bothered, pained
1527814972, // غرقېدل - to be sunk, immersed, plunged, lost 1527814972, // غرقېدل - to be sunk, immersed, plunged, lost
1527821483, // غصه کېدل - to be angry, upset, distressed 1527821483, // غصه کېدل - to be angry, upset, distressed
1578607410634, // غلطېدل - to make a mistake, to err, to be decieved, to stray from, to miscalculate 1578607410634, // غلطېدل - to make a mistake, to err, to be decieved, to stray from, to miscalculate
1578683722262, // فارغېدل - to graduate; to become free from, finished from something, liberated 1578683722262, // فارغېدل - to graduate; to become free from, finished from something, liberated
1527823367, // قبلېدل - to be accepted, to be approved 1527823367, // قبلېدل - to be accepted, to be approved
1578705585960, // قربانېدل - to be sacrificed 1578705585960, // قربانېدل - to be sacrificed
1588074081731, // قرنطینېدل - to be quarentined 1588074081731, // قرنطینېدل - to be quarentined
1527811848, // کامیابېدل - to succed, to achieve success 1527811848, // کامیابېدل - to succed, to achieve success
1578769047886, // کلکېدل - to become firm, solid, to be hardened, to solidify; to became staunch, secured 1578769047886, // کلکېدل - to become firm, solid, to be hardened, to solidify; to became staunch, secured
1578769553469, // کمېدل - to decrease, become small, become less 1578769553469, // کمېدل - to decrease, become small, become less
1527811975, // کڼېدل - to become deaf 1527811975, // کڼېدل - to become deaf
1573149364576, // ګډېدل - to be mixed, combined, blended, to meet, rejoin 1573149364576, // ګډېدل - to be mixed, combined, blended, to meet, rejoin
1527814821, // ګرمېدل - to become warm, to warm up, heat up 1527814821, // ګرمېدل - to become warm, to warm up, heat up
1527819155, // ګمراه کېدل - to stray (from the path, the faith), to err 1527819155, // ګمراه کېدل - to stray (from the path, the faith), to err
1579034600343, // ګیرېدل - to be seized, caught, trapped, confined, imprisoned, beseiged, stuck 1579034600343, // ګیرېدل - to be seized, caught, trapped, confined, imprisoned, beseiged, stuck
1588152260378, // لرې کېدل - to be removed, put far away 1588152260378, // لرې کېدل - to be removed, put far away
1527817122, // لندېدل - to dampen, moisten, soak, get wet 1527817122, // لندېدل - to dampen, moisten, soak, get wet
1527817119, // لنډېدل - to be shortened, made short 1527817119, // لنډېدل - to be shortened, made short
1527813947, // لویېدل - to grow up, to be raised up, to get big 1527813947, // لویېدل - to grow up, to be raised up, to get big
1527811901, // ماتېدل - to be broken, break, hurt badle, crumble 1527811901, // ماتېدل - to be broken, break, hurt badle, crumble
1527814560, // مجبورېدل - to be compelled, forced, obligated 1527814560, // مجبورېدل - to be compelled, forced, obligated
1527820885, // مړېدل - to become full, to have ones fill; (fig.) to grow cold towards, lose interest in 1527820885, // مړېدل - to become full, to have ones fill; (fig.) to grow cold towards, lose interest in
1579295191646, // مقررېدل - to be appointed, assigned, delegated 1579295191646, // مقررېدل - to be appointed, assigned, delegated
1579295944312, // ملامتېدل - to be condemned, blamed, guilty 1579295944312, // ملامتېدل - to be condemned, blamed, guilty
1527812920, // ملاوېدل - to meet, to be met, to be found, to be available 1527812920, // ملاوېدل - to meet, to be met, to be found, to be available
1579387693725, // مینېدل - to fall in love 1579387693725, // مینېدل - to fall in love
1527815573, // نازلېدل - to befall, to come down, to be revealed, to be sent down 1527815573, // نازلېدل - to befall, to come down, to be revealed, to be sent down
1527811761, // ناکامېدل - to fail, to not succeed 1527811761, // ناکامېدل - to fail, to not succeed
1527820482, // نسکورېدل - to be toppled over, brought down, ruined, shot down (ie. a plane), stoop down 1527820482, // نسکورېدل - to be toppled over, brought down, ruined, shot down (ie. a plane), stoop down
1527817763, // هېرېدل - to be forgotten (ستا نوم ما نه هېر شو I forgot your name lit, Your name was forgotten from me) 1527817763, // هېرېدل - to be forgotten (ستا نوم ما نه هېر شو I forgot your name lit, Your name was forgotten from me)
1579721195157, // واردېدل - to be imported 1579721195157, // واردېدل - to be imported
1527817238, // وچېدل - to become dry 1527817238, // وچېدل - to become dry
1589640142987, // ورکېدل - to get lost, dissapear 1589640142987, // ورکېدل - to get lost, dissapear
1588153594269, // وړېدل - to become smaller, shrink 1588153594269, // وړېدل - to become smaller, shrink
1527812005, // وقفېدل - to be devoted, dedicated, given, donated, bequeathed 1527812005, // وقفېدل - to be devoted, dedicated, given, donated, bequeathed
1576947352743, // ویدېدل - to sleep 1576947352743, // ویدېدل - to sleep
1527819292, // ویښېدل - to awaken, become alert, wake up 1527819292, // ویښېدل - to awaken, become alert, wake up
1527812941, // یادېدل - to be remembered, to be missed 1527812941, // یادېدل - to be remembered, to be missed
1527814768, // یخېدل - to chill, cool down, freeze 1527814768, // یخېدل - to chill, cool down, freeze
1579824223049, // یو ځای کېدل - to be gathered, brought together, come together 1579824223049, // یو ځای کېدل - to be gathered, brought together, come together
] ];

View File

@ -43,8 +43,8 @@ module.exports = [
1527816945, // جوتول - to make clear, evident, apparent, explained, established 1527816945, // جوتول - to make clear, evident, apparent, explained, established
1527816947, // جوتول - to harness, hitch up 1527816947, // جوتول - to harness, hitch up
1527812712, // جوړول - to make, form, build, mend, fix 1527812712, // جوړول - to make, form, build, mend, fix
1527817455, // ځایول - to place, put, accommodate, make room for, to make fit 1718311465186, // ځایول - to place, put, accommodate, make room for, to make fit
1527815074, // چاپول - to print, publish 1718377727926, // چاپول - to print, publish
1527811693, // چاغول - to fatten up, to fatten, to make stout, plump 1527811693, // چاغول - to fatten up, to fatten, to make stout, plump
1527816239, // خبرول - to inform, communicate, make known, notify 1527816239, // خبرول - to inform, communicate, make known, notify
1527811395, // خپرول - to spread, disperse, open, unfold, publicize, distribute 1527811395, // خپرول - to spread, disperse, open, unfold, publicize, distribute

171
yarn.lock
View File

@ -1237,6 +1237,121 @@
resolved "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz" resolved "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz"
integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==
"@esbuild/aix-ppc64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f"
integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==
"@esbuild/android-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052"
integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==
"@esbuild/android-arm@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28"
integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==
"@esbuild/android-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e"
integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==
"@esbuild/darwin-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a"
integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
"@esbuild/darwin-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22"
integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==
"@esbuild/freebsd-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e"
integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==
"@esbuild/freebsd-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261"
integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==
"@esbuild/linux-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b"
integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==
"@esbuild/linux-arm@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9"
integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==
"@esbuild/linux-ia32@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2"
integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==
"@esbuild/linux-loong64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df"
integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==
"@esbuild/linux-mips64el@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe"
integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==
"@esbuild/linux-ppc64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4"
integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==
"@esbuild/linux-riscv64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc"
integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==
"@esbuild/linux-s390x@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de"
integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==
"@esbuild/linux-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0"
integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
"@esbuild/netbsd-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047"
integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==
"@esbuild/openbsd-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70"
integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==
"@esbuild/sunos-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b"
integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==
"@esbuild/win32-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d"
integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==
"@esbuild/win32-ia32@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b"
integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==
"@esbuild/win32-x64@0.21.5":
version "0.21.5"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c"
integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
"@eslint/eslintrc@^0.4.3": "@eslint/eslintrc@^0.4.3":
version "0.4.3" version "0.4.3"
resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz"
@ -4646,6 +4761,35 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3:
d "^1.0.1" d "^1.0.1"
ext "^1.1.2" ext "^1.1.2"
esbuild@~0.21.5:
version "0.21.5"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d"
integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==
optionalDependencies:
"@esbuild/aix-ppc64" "0.21.5"
"@esbuild/android-arm" "0.21.5"
"@esbuild/android-arm64" "0.21.5"
"@esbuild/android-x64" "0.21.5"
"@esbuild/darwin-arm64" "0.21.5"
"@esbuild/darwin-x64" "0.21.5"
"@esbuild/freebsd-arm64" "0.21.5"
"@esbuild/freebsd-x64" "0.21.5"
"@esbuild/linux-arm" "0.21.5"
"@esbuild/linux-arm64" "0.21.5"
"@esbuild/linux-ia32" "0.21.5"
"@esbuild/linux-loong64" "0.21.5"
"@esbuild/linux-mips64el" "0.21.5"
"@esbuild/linux-ppc64" "0.21.5"
"@esbuild/linux-riscv64" "0.21.5"
"@esbuild/linux-s390x" "0.21.5"
"@esbuild/linux-x64" "0.21.5"
"@esbuild/netbsd-x64" "0.21.5"
"@esbuild/openbsd-x64" "0.21.5"
"@esbuild/sunos-x64" "0.21.5"
"@esbuild/win32-arm64" "0.21.5"
"@esbuild/win32-ia32" "0.21.5"
"@esbuild/win32-x64" "0.21.5"
escalade@^3.0.2, escalade@^3.1.1: escalade@^3.0.2, escalade@^3.1.1:
version "3.1.1" version "3.1.1"
resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"
@ -5415,6 +5559,11 @@ fsevents@^2.1.2, fsevents@^2.1.3, fsevents@~2.3.2:
resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
fsevents@~2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
function-bind@^1.1.1: function-bind@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
@ -5476,6 +5625,13 @@ get-symbol-description@^1.0.0:
call-bind "^1.0.2" call-bind "^1.0.2"
get-intrinsic "^1.1.1" get-intrinsic "^1.1.1"
get-tsconfig@^4.7.5:
version "4.7.6"
resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.6.tgz#118fd5b7b9bae234cc7705a00cd771d7eb65d62a"
integrity sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==
dependencies:
resolve-pkg-maps "^1.0.0"
get-value@^2.0.3, get-value@^2.0.6: get-value@^2.0.3, get-value@^2.0.6:
version "2.0.6" version "2.0.6"
resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz"
@ -9806,6 +9962,11 @@ resolve-from@^5.0.0:
resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz"
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
resolve-pkg-maps@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
resolve-protobuf-schema@^2.1.0: resolve-protobuf-schema@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz" resolved "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz"
@ -11016,6 +11177,16 @@ tsutils@^3.17.1, tsutils@^3.21.0:
dependencies: dependencies:
tslib "^1.8.1" tslib "^1.8.1"
tsx@^4.16.5:
version "4.16.5"
resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.16.5.tgz#49c2a8f4d4d66bd7cf538e23e7368a1919a9a1ca"
integrity sha512-ArsiAQHEW2iGaqZ8fTA1nX0a+lN5mNTyuGRRO6OW3H/Yno1y9/t1f9YOI1Cfoqz63VAthn++ZYcbDP7jPflc+A==
dependencies:
esbuild "~0.21.5"
get-tsconfig "^4.7.5"
optionalDependencies:
fsevents "~2.3.3"
tty-browserify@0.0.0: tty-browserify@0.0.0:
version "0.0.0" version "0.0.0"
resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz" resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz"