Browse Source

compile from wk

main
parent
commit
693b742c9e
12 changed files with 888 additions and 0 deletions
  1. +6
    -0
      .prettierrc.json
  2. +16
    -0
      .vscode/settings.json
  3. +4
    -0
      __scripts__/node/.gitignore
  4. +30
    -0
      __scripts__/node/package.json
  5. +154
    -0
      __scripts__/node/scripts/beautify-radicals.ts
  6. +39
    -0
      __scripts__/node/scripts/build-radicals.ts
  7. +53
    -0
      __scripts__/node/scripts/dump-subjects.ts
  8. +49
    -0
      __scripts__/node/scripts/shared.ts
  9. +232
    -0
      __scripts__/node/src/index.ts
  10. +10
    -0
      __scripts__/node/src/tsconfig.json
  11. +103
    -0
      __scripts__/node/tsconfig.json
  12. +192
    -0
      __scripts__/node/yarn.lock

+ 6
- 0
.prettierrc.json View File

@ -0,0 +1,6 @@
{
"semi": false,
"arrowParens": "always",
"singleQuote": true,
"trailingComma": "none"
}

+ 16
- 0
.vscode/settings.json View File

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

+ 4
- 0
__scripts__/node/.gitignore View File

@ -0,0 +1,4 @@
node_modules/
/wanikani.json
/wanikani.yaml
/radicals.yaml

+ 30
- 0
__scripts__/node/package.json View File

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

+ 154
- 0
__scripts__/node/scripts/beautify-radicals.ts View File

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

+ 39
- 0
__scripts__/node/scripts/build-radicals.ts View File

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

+ 53
- 0
__scripts__/node/scripts/dump-subjects.ts View File

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

+ 49
- 0
__scripts__/node/scripts/shared.ts View File

@ -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[]
}
}

+ 232
- 0
__scripts__/node/src/index.ts View File

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

+ 10
- 0
__scripts__/node/src/tsconfig.json View File

@ -0,0 +1,10 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"rootDir": ".",
"outDir": "../lib",
"sourceMap": true,
"declaration": true,
"declarationMap": true
}
}

+ 103
- 0
__scripts__/node/tsconfig.json View File

@ -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. */
}
}

+ 192
- 0
__scripts__/node/yarn.lock View File

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

Loading…
Cancel
Save