From bf127a2d897a1d212efc622159cd12ac0b562d2c Mon Sep 17 00:00:00 2001 From: Pacharapol Withayasakpunt Date: Tue, 5 Oct 2021 23:40:24 +0700 Subject: [PATCH] make git npm installable --- .gitignore | 2 - lib/index.d.ts | 44 +++++++++++++++++++ lib/index.d.ts.map | 1 + lib/index.js | 102 +++++++++++++++++++++++++++++++++++++++++++++ lib/index.js.map | 1 + 5 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 lib/index.d.ts create mode 100644 lib/index.d.ts.map create mode 100644 lib/index.js create mode 100644 lib/index.js.map diff --git a/.gitignore b/.gitignore index c7f98ee..5871fca 100644 --- a/.gitignore +++ b/.gitignore @@ -115,5 +115,3 @@ dist .yarn/build-state.yml .yarn/install-state.gz .pnp.* - -/lib/ diff --git a/lib/index.d.ts b/lib/index.d.ts new file mode 100644 index 0000000..43f30b9 --- /dev/null +++ b/lib/index.d.ts @@ -0,0 +1,44 @@ +export declare function makeWanikani(apiKey?: string): import("axios-rate-limit").RateLimitedAxiosInstance & { + getKanji(): Promise<{ + id: number; + level: number; + characters: string; + }[]>; + getVocab(): Promise<{ + id: number; + level: number; + characters: string; + sentences: { + ja: string; + en: string; + }[]; + }[]>; + getLearnt(): Promise<{ + id: number; + srsLevel: number; + }[]>; +}; +export declare type WaniKaniAxiosInstance = ReturnType; +export interface IResource { + id: number; + url: string; + data_updated_at: string; + data: T; +} +export interface ICollection { + object: string; + url: string; + pages: { + next_url?: string; + previous_url?: string; + per_page: number; + }; + total_count: number; + data_updated_at: string; + data: T[]; +} +export interface IError { + error: string; + code: number; +} +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/lib/index.d.ts.map b/lib/index.d.ts.map new file mode 100644 index 0000000..c762c72 --- /dev/null +++ b/lib/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,MAAM,SAAmC;;YA2B1D,MAAM;eACH,MAAM;oBACD,MAAM;;;YAsCd,MAAM;eACH,MAAM;oBACD,MAAM;mBACP;YACT,EAAE,EAAE,MAAM,CAAA;YACV,EAAE,EAAE,MAAM,CAAA;SACX,EAAE;;;YA2CC,MAAM;kBACA,MAAM;;EAoCvB;AAED,oBAAY,qBAAqB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;AAEnE,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,GAAG;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;CACR;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,CAAC,EAAE,CAAA;CACV;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb"} \ No newline at end of file diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..77e8781 --- /dev/null +++ b/lib/index.js @@ -0,0 +1,102 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.makeWanikani = void 0; +const axios_1 = __importDefault(require("axios")); +const axios_rate_limit_1 = __importDefault(require("axios-rate-limit")); +function makeWanikani(apiKey = process.env['WANIKANI_API_KEY']) { + const wkApi = (0, axios_rate_limit_1.default)(axios_1.default.create({ + baseURL: 'https://api.wanikani.com/v2/', + headers: { + Authorization: `Bearer ${apiKey}`, + }, + validateStatus: function () { + return true; + }, + }), + /** + * https://docs.api.wanikani.com/20170710/#rate-limit + * Requests per minute 60 + */ + { + /** + * Per second + */ + maxRequests: 1, + perMilliseconds: 1000, + }); + return Object.assign(wkApi, { + async getKanji() { + const allData = []; + let nextUrl = '/subjects'; + while (true) { + const r = await wkApi.get(nextUrl, { + params: { + types: 'kanji', + }, + }); + allData.push(...r.data.data.map((d) => ({ + 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; + } + } + return allData; + }, + async getVocab() { + const allData = []; + let nextUrl = '/subjects'; + while (true) { + const r = await wkApi.get(nextUrl, { + params: { + types: 'vocabulary', + }, + }); + allData.push(...r.data.data.map((d) => ({ + 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; + } + } + return allData; + }, + async getLearnt() { + const allData = []; + let nextUrl = '/assignments'; + while (true) { + const r = await wkApi.get(nextUrl, { + params: { + unlocked: 'true', + }, + }); + console.error(r.data.url); + r.data.data.map((d) => { + allData.push({ + id: d.data.subject_id, + srsLevel: d.data.srs_stage, + }); + }); + nextUrl = r.data.pages.next_url || ''; + if (!nextUrl) { + break; + } + } + return allData; + } + }); +} +exports.makeWanikani = makeWanikani; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/index.js.map b/lib/index.js.map new file mode 100644 index 0000000..e09b232 --- /dev/null +++ b/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file