146 lines
4.3 KiB
JavaScript
146 lines
4.3 KiB
JavaScript
/**
|
|
* Copyright (c) 2021 lingdocs.com
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
*/
|
|
import fs from "fs";
|
|
import fetch from "node-fetch";
|
|
import allVerbTsS from "./verbs/verbs.js";
|
|
import aFem from "./nouns-adjs/a-fem.js";
|
|
import aaFem from "./nouns-adjs/aa-fem.js";
|
|
import aanuUnisex from "./nouns-adjs/aanu-unisex.js";
|
|
import adverbs from "./nouns-adjs/adverbs.js";
|
|
import basicFem from "./nouns-adjs/basic-fem.js";
|
|
import basicUnisex from "./nouns-adjs/basic-unisex.js";
|
|
import eFem from "./nouns-adjs/e-fem.js";
|
|
import eeFem from "./nouns-adjs/ee-fem.js";
|
|
import exceptionPeopleFem from "./nouns-adjs/exception-people-fem.js";
|
|
import exceptionPeopleMasc from "./nouns-adjs/exception-people-masc.js";
|
|
import eyMasc from "./nouns-adjs/ey-masc.js";
|
|
import eyStressedUnisex from "./nouns-adjs/ey-stressed-unisex.js";
|
|
import eyUnstressedUnisex from "./nouns-adjs/ey-unstressed-unisex.js";
|
|
import locAdverbs from "./nouns-adjs/loc-adverbs.js";
|
|
import nonInflecting from "./nouns-adjs/non-inflecting.js";
|
|
import nounsUnisex from "./nouns-adjs/nouns-unisex.js";
|
|
import oFem from "./nouns-adjs/o-fem.js";
|
|
import shortIrregUnisex from "./nouns-adjs/short-irreg-unisex.js";
|
|
import uMasc from "./nouns-adjs/u-masc.js";
|
|
import uyFem from "./nouns-adjs/uy-fem.js";
|
|
import yMasc from "./nouns-adjs/y-masc.js";
|
|
|
|
import * as protoModels from "./src/lib/dictionary-models.js";
|
|
import Pbf from "pbf";
|
|
|
|
const allNounAdjTsS = [
|
|
...aFem,
|
|
...aaFem,
|
|
...aanuUnisex,
|
|
...adverbs,
|
|
...basicFem,
|
|
...basicUnisex,
|
|
...eFem,
|
|
...eeFem,
|
|
...exceptionPeopleFem,
|
|
...exceptionPeopleMasc,
|
|
...eyMasc,
|
|
...eyStressedUnisex,
|
|
...eyUnstressedUnisex,
|
|
...locAdverbs,
|
|
...nonInflecting,
|
|
...nounsUnisex,
|
|
...oFem,
|
|
...shortIrregUnisex,
|
|
...uMasc,
|
|
...uyFem,
|
|
...yMasc,
|
|
].map(x => x.ts);
|
|
|
|
fetch(process.env.LINGDOCS_DICTIONARY_URL).then(res => res.arrayBuffer()).then(buffer => {
|
|
const pbf = new Pbf(buffer);
|
|
const dictionary = protoModels.Dictionary.read(pbf);
|
|
const entries = dictionary.entries;
|
|
const allVerbs = getVerbsFromTsS(entries, allVerbTsS);
|
|
const verbsContent = `
|
|
/**
|
|
* Copyright (c) 2021 lingdocs.com
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
*/
|
|
|
|
import { DictionaryEntry, VerbEntry } from "./types";
|
|
|
|
const verbs: {
|
|
entry: DictionaryEntry,
|
|
complement?: DictionaryEntry,
|
|
}[] = ${JSON.stringify(allVerbs)};
|
|
export default verbs as VerbEntry[];`;
|
|
fs.writeFileSync("./src/verbs.ts", verbsContent);
|
|
const allNounsAdjs = getNounsAdjsFromTsS(entries, allNounAdjTsS);
|
|
const nounsAdjsContent = `
|
|
/**
|
|
* Copyright (c) 2021 lingdocs.com
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
*/
|
|
|
|
import { DictionaryEntry } from "./types";
|
|
|
|
const nounsAdjs: DictionaryEntry[] = ${JSON.stringify(allNounsAdjs)};
|
|
export default nounsAdjs;`;
|
|
fs.writeFileSync("./src/nouns-adjs.ts", nounsAdjsContent);
|
|
console.log("fetched words from dictionary");
|
|
});
|
|
|
|
function getNounsAdjsFromTsS(entries, tss) {
|
|
const missingEc = [];
|
|
const toReturn = tss.map(ts => {
|
|
const entry = entries.find(x => ts === x.ts);
|
|
if (!entry) {
|
|
console.log("couldn't find ts", ts);
|
|
return undefined;
|
|
}
|
|
if (ts.ec) {
|
|
missingEc.push(ts);
|
|
}
|
|
return entry;
|
|
}).filter(x => x);
|
|
if (missingEc.length !== 0) {
|
|
console.log("missingEc", missingEc);
|
|
}
|
|
return toReturn;
|
|
|
|
}
|
|
|
|
function getVerbsFromTsS(entries, tss) {
|
|
const missingEc = [];
|
|
const toReturn = tss.map(ts => {
|
|
const entry = entries.find(x => ts === x.ts);
|
|
if (!entry.ec) {
|
|
missingEc.push(entry.ts);
|
|
}
|
|
if (!entry) {
|
|
console.log("couldn't find ts", ts);
|
|
return undefined;
|
|
}
|
|
if (entry.c && entry.c.includes("comp.")) {
|
|
const complement = entries.find(x => entry.l === x.ts);
|
|
return {
|
|
entry,
|
|
complement,
|
|
};
|
|
}
|
|
return { entry };
|
|
}).filter(x => x);
|
|
if (missingEc.length !== 0) {
|
|
console.log("missingEc", missingEc);
|
|
}
|
|
return toReturn;
|
|
|
|
}
|