compile from wk
This commit is contained in:
1 parent
14c722c529
commit
693b742c9e
12 files changed
+888
No files matched your search
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"semi": false,
|
||||
"arrowParens": "always",
|
||||
"singleQuote": true,
|
||||
"trailingComma": "none"
|
||||
}
|
||||
Vendored
+16
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"editor.tabSize": 2,
|
||||
"[javascript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.formatOnSave": true
|
||||
},
|
||||
"[typescript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.formatOnSave": true
|
||||
},
|
||||
"[html]": {
|
||||
"editor.defaultFormatter": "vscode.html-language-features",
|
||||
"editor.formatOnSave": true
|
||||
},
|
||||
"sort-imports.on-save": true
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
node_modules/
|
||||
/wanikani.json
|
||||
/wanikani.yaml
|
||||
/radicals.yaml
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"name": "@polv/wk-extra",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"ts": "ts-node -r tsconfig-paths/register"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^0.26.1",
|
||||
"axios-rate-limit": "^1.3.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"wanakana": "^4.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/js-yaml": "^4.0.5",
|
||||
"@types/node": "^17.0.23",
|
||||
"@types/wanakana": "^4.0.3",
|
||||
"import-sort-parser-typescript": "^6.0.0",
|
||||
"ts-node": "^10.7.0",
|
||||
"tsconfig-paths": "^3.14.1",
|
||||
"typescript": "^4.6.3"
|
||||
},
|
||||
"importSort": {
|
||||
".js, .ts": {
|
||||
"parser": "typescript",
|
||||
"style": "module"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
import fs from 'fs'
|
||||
|
||||
import yaml from 'js-yaml'
|
||||
import { toKatakana } from 'wanakana'
|
||||
|
||||
import { subjects } from './dump-subjects'
|
||||
import { IKanji, IRadical } from './shared'
|
||||
|
||||
interface IItem {
|
||||
document_url: string
|
||||
level: number
|
||||
meaning: string
|
||||
reading?: string
|
||||
components: {
|
||||
[source: string]: string[]
|
||||
}
|
||||
similar: string[]
|
||||
image?: {
|
||||
src: string
|
||||
content_type: string
|
||||
width: string | undefined
|
||||
height: string | undefined
|
||||
}
|
||||
}
|
||||
|
||||
interface IBeautifiedRadicals {
|
||||
[id: string]: IItem
|
||||
}
|
||||
|
||||
export const radicals = {
|
||||
data: {} as IBeautifiedRadicals,
|
||||
filename: 'radicals.yaml',
|
||||
load() {
|
||||
this.data = yaml.load(
|
||||
fs.readFileSync(this.filename, 'utf-8')
|
||||
) as IBeautifiedRadicals
|
||||
return this.data
|
||||
},
|
||||
dump(d: IBeautifiedRadicals) {
|
||||
this.data = d
|
||||
this.finalize()
|
||||
},
|
||||
finalize() {
|
||||
fs.writeFileSync(
|
||||
this.filename,
|
||||
yaml.dump(this.data, {
|
||||
skipInvalid: true
|
||||
})
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const rs = subjects.load()
|
||||
|
||||
const idMap = new Map<number, string>()
|
||||
radicals.data = {}
|
||||
|
||||
rs.filter((r) => r.object === 'radical').map((r0) => {
|
||||
const r = r0 as IRadical
|
||||
const d = {
|
||||
document_url: r.data.document_url,
|
||||
level: r.data.level,
|
||||
meaning: r.data.meanings.filter((m) => m.primary)[0]!.meaning,
|
||||
components: {},
|
||||
sup: r.data.amalgamation_subject_ids.map((it) => it.toString()),
|
||||
similar: []
|
||||
}
|
||||
|
||||
let id = r.data.characters
|
||||
|
||||
if (id) {
|
||||
radicals.data[id] = d
|
||||
} else {
|
||||
id = d.meaning
|
||||
|
||||
const st = (im: {
|
||||
content_type: string
|
||||
metadata: { dimensions?: string }
|
||||
}) =>
|
||||
im.content_type === 'image/svg+xml'
|
||||
? 5000
|
||||
: im.metadata.dimensions
|
||||
? Math.min(...im.metadata.dimensions.split('x').map(Number))
|
||||
: 0
|
||||
const im = r.data.character_images.sort((a, b) => st(a) - st(b))[0]!
|
||||
const dim = im.metadata.dimensions?.split('x') || []
|
||||
|
||||
radicals.data[id] = {
|
||||
...d,
|
||||
image: {
|
||||
src: im.url,
|
||||
content_type: im.content_type,
|
||||
width: dim[0],
|
||||
height: dim[1]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
idMap.set(r.id, id)
|
||||
})
|
||||
|
||||
rs.filter((r) => r.object === 'kanji').map((r0) => {
|
||||
const r = r0 as IKanji
|
||||
const reading = r.data.readings.filter((m) => m.primary)[0]!
|
||||
const d = {
|
||||
document_url: r.data.document_url,
|
||||
level: r.data.level,
|
||||
meaning: r.data.meanings.filter((m) => m.primary)[0]!.meaning,
|
||||
reading:
|
||||
reading.type === 'onyomi'
|
||||
? toKatakana(reading.reading)
|
||||
: reading.reading,
|
||||
components: {
|
||||
wanikani: r.data.component_subject_ids.map((it) => it.toString())
|
||||
},
|
||||
similar: r.data.visually_similar_subject_ids.map((it) => it.toString())
|
||||
}
|
||||
|
||||
const id = r.data.characters
|
||||
idMap.set(r.id, id)
|
||||
// const prev = radicals.data[id]
|
||||
|
||||
// if (prev) {
|
||||
// radicals.data[id] = {
|
||||
// ...d,
|
||||
// sup: prev.sup
|
||||
// }
|
||||
// } else {
|
||||
// radicals.data[id] = {
|
||||
// ...d,
|
||||
// sup: []
|
||||
// }
|
||||
// }
|
||||
|
||||
radicals.data[id] = d
|
||||
})
|
||||
|
||||
for (const [k, v] of Object.entries(radicals.data)) {
|
||||
if (v.components?.['wanikani']) {
|
||||
v.components['wanikani'] = v.components['wanikani']
|
||||
.map((s) => idMap.get(Number(s)) || s)
|
||||
.filter((s) => s !== k)
|
||||
}
|
||||
v.similar = v.similar.map((s) => idMap.get(Number(s)) || s)
|
||||
// v.sup = v.sup.map((s) => idMap.get(Number(s)) || s)
|
||||
}
|
||||
|
||||
radicals.finalize()
|
||||
}
|
||||
|
||||
if (require.main === module) {
|
||||
main()
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
import fs from 'fs'
|
||||
|
||||
import { radicals } from './beautify-radicals'
|
||||
|
||||
async function main() {
|
||||
const map = radicals.load()
|
||||
|
||||
fs.writeFileSync(
|
||||
'../../_radicals.md',
|
||||
Object.entries(map)
|
||||
.map(([k, v]) => {
|
||||
const headers = [k]
|
||||
if (v.meaning !== k) {
|
||||
headers.push(v.meaning)
|
||||
}
|
||||
if (v.reading) {
|
||||
headers.push(v.reading)
|
||||
}
|
||||
headers.push(String(v.level))
|
||||
|
||||
const rows = [`## ${headers.join(', ')}`, '']
|
||||
if (v.image) {
|
||||
rows.push(
|
||||
`<img src="${v.image.src}" alt="${k}"${
|
||||
v.image.width ? ` width="${v.image.width}"` : ''
|
||||
}${v.image.height ? ` height="${v.image.height}"` : ''} />`,
|
||||
''
|
||||
)
|
||||
}
|
||||
|
||||
return rows.join('\n')
|
||||
})
|
||||
.join('\n\n')
|
||||
)
|
||||
}
|
||||
|
||||
if (require.main === module) {
|
||||
main()
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
import fs from 'fs'
|
||||
|
||||
import axios from 'axios'
|
||||
|
||||
import { IKanji, IRadical } from './shared'
|
||||
|
||||
export const subjects = {
|
||||
data: [] as (IKanji | IRadical)[],
|
||||
filename: 'wanikani.json',
|
||||
load() {
|
||||
this.data = JSON.parse(fs.readFileSync(this.filename, 'utf-8'))
|
||||
return this.data
|
||||
},
|
||||
dump(d: (IKanji | IRadical)[]) {
|
||||
this.data = d
|
||||
this.finalize()
|
||||
},
|
||||
finalize() {
|
||||
fs.writeFileSync(this.filename, JSON.stringify(this.data))
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const wk = axios.create({
|
||||
baseURL: 'https://api.wanikani.com/v2/',
|
||||
headers: {
|
||||
Authorization: `Bearer ${process.env['WANIKANI_API_KEY']}`
|
||||
}
|
||||
})
|
||||
|
||||
const data: (IKanji | IRadical)[] = []
|
||||
|
||||
let nextURL = '/subjects?types=radical,kanji'
|
||||
while (nextURL) {
|
||||
const r = await wk
|
||||
.get<{
|
||||
pages: {
|
||||
next_url?: string
|
||||
}
|
||||
data: (IKanji | IRadical)[]
|
||||
}>(nextURL)
|
||||
.then((r) => r.data)
|
||||
data.push(...r.data)
|
||||
console.info(r.pages.next_url)
|
||||
nextURL = r.pages.next_url || ''
|
||||
}
|
||||
|
||||
subjects.dump(data)
|
||||
}
|
||||
|
||||
if (require.main === module) {
|
||||
main()
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
export interface IKanji {
|
||||
id: number
|
||||
/** Actual type */
|
||||
object: 'kanji'
|
||||
url: string
|
||||
data_updated_at: string
|
||||
data: {
|
||||
level: number
|
||||
document_url: string
|
||||
characters: string
|
||||
meanings: {
|
||||
meaning: string
|
||||
primary: boolean
|
||||
}[]
|
||||
readings: {
|
||||
reading: string
|
||||
primary: boolean
|
||||
type: 'kunyomi' | 'onyomi'
|
||||
}[]
|
||||
component_subject_ids: number[]
|
||||
visually_similar_subject_ids: number[]
|
||||
}
|
||||
}
|
||||
|
||||
export interface IRadical {
|
||||
id: number
|
||||
/** Actual type */
|
||||
object: 'radical'
|
||||
url: string
|
||||
data_updated_at: string
|
||||
data: {
|
||||
level: number
|
||||
document_url: string
|
||||
characters: string | null
|
||||
character_images: {
|
||||
url: string
|
||||
metadata: {
|
||||
inline_styles?: boolean
|
||||
dimensions?: string
|
||||
}
|
||||
content_type: string
|
||||
}[]
|
||||
meanings: {
|
||||
meaning: string
|
||||
primary: boolean
|
||||
}[]
|
||||
amalgamation_subject_ids: number[]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,232 @@
|
||||
import axios from 'axios'
|
||||
import rateLimit, { RateLimitedAxiosInstance } from 'axios-rate-limit'
|
||||
|
||||
/**
|
||||
* https://docs.api.wanikani.com/20170710/#rate-limit
|
||||
*
|
||||
* Requests per minute 60
|
||||
*
|
||||
* @param apiKey @default process.env['WANIKANI_API_KEY']
|
||||
* @returns
|
||||
*/
|
||||
export function makeWanikani(
|
||||
apiKey = process.env['WANIKANI_API_KEY']!
|
||||
): WaniKaniAxiosInstance {
|
||||
const wkApi = rateLimit(
|
||||
axios.create({
|
||||
baseURL: 'https://api.wanikani.com/v2/',
|
||||
headers: {
|
||||
Authorization: `Bearer ${apiKey}`
|
||||
},
|
||||
validateStatus: function () {
|
||||
return true
|
||||
}
|
||||
}),
|
||||
{
|
||||
/**
|
||||
* Per second
|
||||
*/
|
||||
maxRequests: 1,
|
||||
perMilliseconds: 1000
|
||||
}
|
||||
)
|
||||
|
||||
return Object.assign(wkApi, {
|
||||
async *kanji(params = {}) {
|
||||
let nextUrl = '/subjects'
|
||||
|
||||
while (true) {
|
||||
const r = await wkApi.get<
|
||||
ICollection<
|
||||
IResource<{
|
||||
characters: string
|
||||
level: number
|
||||
}>
|
||||
>
|
||||
>(nextUrl, {
|
||||
params: {
|
||||
...params,
|
||||
types: 'kanji'
|
||||
}
|
||||
})
|
||||
|
||||
for (const d of r.data.data) {
|
||||
yield {
|
||||
id: d.id,
|
||||
level: d.data.level,
|
||||
characters: d.data.characters
|
||||
}
|
||||
}
|
||||
|
||||
console.error(r.data.url)
|
||||
|
||||
nextUrl = r.data.pages.next_url || ''
|
||||
if (!nextUrl) {
|
||||
break
|
||||
}
|
||||
}
|
||||
},
|
||||
async *vocabulary(params = {}) {
|
||||
let nextUrl = '/subjects'
|
||||
|
||||
while (true) {
|
||||
const r = await wkApi.get<
|
||||
ICollection<
|
||||
IResource<{
|
||||
characters: string
|
||||
level: number
|
||||
context_sentences: {
|
||||
ja: string
|
||||
en: string
|
||||
}[]
|
||||
}>
|
||||
>
|
||||
>(nextUrl, {
|
||||
params: {
|
||||
...params,
|
||||
types: 'vocabulary'
|
||||
}
|
||||
})
|
||||
|
||||
for (const d of r.data.data) {
|
||||
yield {
|
||||
id: d.id,
|
||||
level: d.data.level,
|
||||
characters: d.data.characters,
|
||||
sentences: d.data.context_sentences
|
||||
}
|
||||
}
|
||||
|
||||
console.error(r.data.url)
|
||||
|
||||
nextUrl = r.data.pages.next_url || ''
|
||||
if (!nextUrl) {
|
||||
break
|
||||
}
|
||||
}
|
||||
},
|
||||
async *subjects<T = any>(params = {}) {
|
||||
let nextUrl = '/subjects'
|
||||
|
||||
while (true) {
|
||||
const r = await wkApi.get<
|
||||
ICollection<
|
||||
IResource<any> & {
|
||||
id: number
|
||||
object: string
|
||||
data_updated_at: string
|
||||
url: string
|
||||
data: T
|
||||
}
|
||||
>
|
||||
>(nextUrl, { params })
|
||||
|
||||
for (const d of r.data.data) {
|
||||
yield {
|
||||
id: d.id,
|
||||
data_updated_at: d.data_updated_at,
|
||||
object: d.object,
|
||||
url: d.url,
|
||||
data: d.data
|
||||
}
|
||||
}
|
||||
|
||||
console.error(r.data.url)
|
||||
|
||||
nextUrl = r.data.pages.next_url || ''
|
||||
if (!nextUrl) {
|
||||
break
|
||||
}
|
||||
}
|
||||
},
|
||||
async *assignments(
|
||||
params = {
|
||||
unlocked: 'true'
|
||||
}
|
||||
) {
|
||||
let nextUrl = '/assignments'
|
||||
|
||||
while (true) {
|
||||
const r = await wkApi.get<
|
||||
ICollection<
|
||||
IResource<{
|
||||
subject_id: number
|
||||
srs_stage: number
|
||||
}>
|
||||
>
|
||||
>(nextUrl, {
|
||||
params
|
||||
})
|
||||
|
||||
console.error(r.data.url)
|
||||
|
||||
for (const d of r.data.data) {
|
||||
yield {
|
||||
id: d.data.subject_id,
|
||||
srsLevel: d.data.srs_stage
|
||||
}
|
||||
}
|
||||
|
||||
nextUrl = r.data.pages.next_url || ''
|
||||
if (!nextUrl) {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export interface WaniKaniAxiosInstance extends RateLimitedAxiosInstance {
|
||||
kanji(params?: any): AsyncGenerator<{
|
||||
id: number
|
||||
level: number
|
||||
characters: string
|
||||
}>
|
||||
vocabulary(params?: any): AsyncGenerator<{
|
||||
id: number
|
||||
level: number
|
||||
characters: string
|
||||
sentences: {
|
||||
ja: string
|
||||
en: string
|
||||
}[]
|
||||
}>
|
||||
subjects<T = any>(
|
||||
params?: any
|
||||
): AsyncGenerator<{
|
||||
id: number
|
||||
object: string
|
||||
data_updated_at: string
|
||||
url: string
|
||||
data: T
|
||||
}>
|
||||
assignments(params?: any): AsyncGenerator<{
|
||||
id: number
|
||||
srsLevel: number
|
||||
}>
|
||||
}
|
||||
|
||||
export interface IResource<T = any> {
|
||||
id: number
|
||||
url: string
|
||||
data_updated_at: string // Date
|
||||
data: T
|
||||
}
|
||||
|
||||
export interface ICollection<T = any> {
|
||||
object: string
|
||||
url: string
|
||||
pages: {
|
||||
next_url?: string
|
||||
previous_url?: string
|
||||
per_page: number
|
||||
}
|
||||
total_count: number
|
||||
data_updated_at: string // Date
|
||||
data: T[]
|
||||
}
|
||||
|
||||
export interface IError {
|
||||
error: string
|
||||
code: number
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"extends": "../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"rootDir": ".",
|
||||
"outDir": "../lib",
|
||||
"sourceMap": true,
|
||||
"declaration": true,
|
||||
"declarationMap": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
/* Visit https://aka.ms/tsconfig.json to read more about this file */
|
||||
|
||||
/* Projects */
|
||||
// "incremental": true, /* Enable incremental compilation */
|
||||
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
|
||||
// "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
|
||||
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
|
||||
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
||||
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
||||
|
||||
/* Language and Environment */
|
||||
"target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
|
||||
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
||||
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
||||
// "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
|
||||
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
||||
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
|
||||
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
||||
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
|
||||
// "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
|
||||
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
||||
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
||||
|
||||
/* Modules */
|
||||
"module": "commonjs", /* Specify what module code is generated. */
|
||||
// "rootDir": "./", /* Specify the root folder within your source files. */
|
||||
// "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
|
||||
"baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
||||
"paths": {
|
||||
"@/*": ["src/*"]
|
||||
}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
||||
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
||||
// "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
|
||||
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
|
||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||
// "resolveJsonModule": true, /* Enable importing .json files */
|
||||
// "noResolve": true, /* Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project. */
|
||||
|
||||
/* JavaScript Support */
|
||||
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
|
||||
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
||||
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
|
||||
|
||||
/* Emit */
|
||||
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
||||
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
|
||||
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
||||
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
|
||||
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
|
||||
// "outDir": "./", /* Specify an output folder for all emitted files. */
|
||||
// "removeComments": true, /* Disable emitting comments. */
|
||||
// "noEmit": true, /* Disable emitting files from a compilation. */
|
||||
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
||||
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
|
||||
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
||||
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
||||
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
||||
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
||||
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
||||
// "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
|
||||
// "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
|
||||
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
||||
// "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
|
||||
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
||||
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
|
||||
|
||||
/* Interop Constraints */
|
||||
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
||||
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
||||
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */
|
||||
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
||||
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
|
||||
|
||||
/* Type Checking */
|
||||
"strict": true, /* Enable all strict type-checking options. */
|
||||
"noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
|
||||
"strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
|
||||
"strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
|
||||
"strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
|
||||
"strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
||||
"noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
|
||||
"useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
|
||||
"alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
||||
"noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
|
||||
"noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
|
||||
"exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
||||
"noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
||||
"noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
||||
"noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
|
||||
"noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
||||
"noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
|
||||
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
||||
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
||||
|
||||
/* Completeness */
|
||||
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
||||
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@cspotcode/source-map-consumer@0.8.0":
|
||||
version "0.8.0"
|
||||
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b"
|
||||
integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==
|
||||
|
||||
"@cspotcode/source-map-support@0.7.0":
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5"
|
||||
integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==
|
||||
dependencies:
|
||||
"@cspotcode/source-map-consumer" "0.8.0"
|
||||
|
||||
"@tsconfig/node10@^1.0.7":
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9"
|
||||
integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==
|
||||
|
||||
"@tsconfig/node12@^1.0.7":
|
||||
version "1.0.9"
|
||||
resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c"
|
||||
integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==
|
||||
|
||||
"@tsconfig/node14@^1.0.0":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2"
|
||||
integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==
|
||||
|
||||
"@tsconfig/node16@^1.0.2":
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e"
|
||||
integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==
|
||||
|
||||
"@types/js-yaml@^4.0.5":
|
||||
version "4.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.5.tgz#738dd390a6ecc5442f35e7f03fa1431353f7e138"
|
||||
integrity sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==
|
||||
|
||||
"@types/json5@^0.0.29":
|
||||
version "0.0.29"
|
||||
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
|
||||
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
|
||||
|
||||
"@types/node@^17.0.23":
|
||||
version "17.0.23"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da"
|
||||
integrity sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==
|
||||
|
||||
"@types/wanakana@^4.0.3":
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/wanakana/-/wanakana-4.0.3.tgz#b67b133b223facbf28aba0338b79f523e92cf97a"
|
||||
integrity sha512-AibaWzahBKizxmsAy8rEWSIqqcT0v9KZTS8S6zPLmStGBFdccYfXydhgwYOV+6lGqQ890MpA4h2MPET3uPk9Zg==
|
||||
|
||||
acorn-walk@^8.1.1:
|
||||
version "8.2.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
|
||||
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
|
||||
|
||||
acorn@^8.4.1:
|
||||
version "8.7.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf"
|
||||
integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
|
||||
|
||||
arg@^4.1.0:
|
||||
version "4.1.3"
|
||||
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
|
||||
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
|
||||
|
||||
argparse@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
|
||||
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
|
||||
|
||||
axios-rate-limit@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/axios-rate-limit/-/axios-rate-limit-1.3.0.tgz#03241d24c231c47432dab6e8234cfde819253c2e"
|
||||
integrity sha512-cKR5wTbU/CeeyF1xVl5hl6FlYsmzDVqxlN4rGtfO5x7J83UxKDckudsW0yW21/ZJRcO0Qrfm3fUFbhEbWTLayw==
|
||||
|
||||
axios@^0.26.1:
|
||||
version "0.26.1"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9"
|
||||
integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==
|
||||
dependencies:
|
||||
follow-redirects "^1.14.8"
|
||||
|
||||
create-require@^1.1.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
|
||||
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
|
||||
|
||||
diff@^4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
|
||||
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
|
||||
|
||||
follow-redirects@^1.14.8:
|
||||
version "1.14.9"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7"
|
||||
integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==
|
||||
|
||||
import-sort-parser-typescript@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/import-sort-parser-typescript/-/import-sort-parser-typescript-6.0.0.tgz#98e73cef9e077d073e798722ed59e215b51c17e2"
|
||||
integrity sha512-pgxnr3I156DonupQriNsgDb2zJN9TxrqCCIN1rwT/6SDO1rkJb+a0fjqshCjlgacTSA92oPAp1eAwmQUeZi3dw==
|
||||
dependencies:
|
||||
typescript "^3.2.4"
|
||||
|
||||
js-yaml@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
|
||||
integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
|
||||
dependencies:
|
||||
argparse "^2.0.1"
|
||||
|
||||
json5@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
|
||||
integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
|
||||
dependencies:
|
||||
minimist "^1.2.0"
|
||||
|
||||
make-error@^1.1.1:
|
||||
version "1.3.6"
|
||||
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
|
||||
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
|
||||
|
||||
minimist@^1.2.0, minimist@^1.2.6:
|
||||
version "1.2.6"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
|
||||
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
|
||||
|
||||
strip-bom@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
|
||||
integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
|
||||
|
||||
ts-node@^10.7.0:
|
||||
version "10.7.0"
|
||||
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.7.0.tgz#35d503d0fab3e2baa672a0e94f4b40653c2463f5"
|
||||
integrity sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==
|
||||
dependencies:
|
||||
"@cspotcode/source-map-support" "0.7.0"
|
||||
"@tsconfig/node10" "^1.0.7"
|
||||
"@tsconfig/node12" "^1.0.7"
|
||||
"@tsconfig/node14" "^1.0.0"
|
||||
"@tsconfig/node16" "^1.0.2"
|
||||
acorn "^8.4.1"
|
||||
acorn-walk "^8.1.1"
|
||||
arg "^4.1.0"
|
||||
create-require "^1.1.0"
|
||||
diff "^4.0.1"
|
||||
make-error "^1.1.1"
|
||||
v8-compile-cache-lib "^3.0.0"
|
||||
yn "3.1.1"
|
||||
|
||||
tsconfig-paths@^3.14.1:
|
||||
version "3.14.1"
|
||||
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
|
||||
integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
|
||||
dependencies:
|
||||
"@types/json5" "^0.0.29"
|
||||
json5 "^1.0.1"
|
||||
minimist "^1.2.6"
|
||||
strip-bom "^3.0.0"
|
||||
|
||||
typescript@^3.2.4:
|
||||
version "3.9.10"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"
|
||||
integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==
|
||||
|
||||
typescript@^4.6.3:
|
||||
version "4.6.3"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c"
|
||||
integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==
|
||||
|
||||
v8-compile-cache-lib@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz#0582bcb1c74f3a2ee46487ceecf372e46bce53e8"
|
||||
integrity sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==
|
||||
|
||||
wanakana@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wanakana/-/wanakana-4.0.2.tgz#a7d60186724a56fd50e6e9c224628c09294901d8"
|
||||
integrity sha512-lBFtnLJhTpp5wQBdH7TrOHhLxqmUabAfL86plNN8+iffyhosjZyx+kkO8KEBGR8zWH5nxSQ67oyx3W/lcEC8sg==
|
||||
|
||||
yn@3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
|
||||
integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
|
||||
Reference in new issue
Block a user