narou 0.9.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/dist/{chunk-2TJKGCQW.js → chunk-6RIDVTFQ.js} +1 -1
- package/dist/chunk-6RIDVTFQ.js.map +1 -0
- package/dist/{chunk-OEGZ4BDA.js → chunk-DBCAWGIX.js} +2 -2
- package/dist/chunk-DBCAWGIX.js.map +1 -0
- package/dist/{chunk-KBODTMQO.js → chunk-GAEL5UWA.js} +2 -2
- package/dist/chunk-GAEL5UWA.js.map +1 -0
- package/dist/chunk-NP5NZV5Q.js +41 -0
- package/dist/chunk-NP5NZV5Q.js.map +1 -0
- package/dist/{chunk-M5KIO5VI.js → chunk-OJGRUQEQ.js} +2 -2
- package/dist/chunk-OJGRUQEQ.js.map +1 -0
- package/dist/{chunk-S34T2KHH.js → chunk-QQYQ4GQF.js} +3 -3
- package/dist/chunk-QQYQ4GQF.js.map +1 -0
- package/dist/{chunk-46PF37IP.js → chunk-RITMMCZE.js} +1 -1
- package/dist/chunk-RITMMCZE.js.map +1 -0
- package/dist/{chunk-YDUSIGMU.js → chunk-UN3W2CT3.js} +2 -2
- package/dist/chunk-UN3W2CT3.js.map +1 -0
- package/dist/{chunk-XNC7KL3A.js → chunk-XAUB42TO.js} +1 -1
- package/dist/chunk-XAUB42TO.js.map +1 -0
- package/dist/{chunk-XLD5A2I7.js → chunk-YJQXIVFD.js} +2 -2
- package/dist/chunk-YJQXIVFD.js.map +1 -0
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.d.cts +4 -4
- package/dist/index.browser.d.ts +4 -4
- package/dist/index.browser.js +9 -10
- package/dist/index.browser.js.map +1 -1
- package/dist/index.cjs +6 -3038
- package/dist/index.cjs.map +1 -1
- package/dist/index.common.cjs.map +1 -1
- package/dist/index.common.d.cts +2 -2
- package/dist/index.common.d.ts +2 -2
- package/dist/index.common.js +8 -9
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +10 -11
- package/dist/index.js.map +1 -1
- package/dist/{narou-98ededc8.d.ts → narou-CosGR0J9.d.cts} +2 -2
- package/dist/{narou-61329eea.d.ts → narou-CutsOEgk.d.ts} +2 -2
- package/dist/narou-fetch.cjs +6 -3038
- package/dist/narou-fetch.cjs.map +1 -1
- package/dist/narou-fetch.d.cts +8 -5
- package/dist/narou-fetch.d.ts +8 -5
- package/dist/narou-fetch.js +3 -4
- package/dist/narou-jsonp.cjs.map +1 -1
- package/dist/narou-jsonp.d.cts +2 -2
- package/dist/narou-jsonp.d.ts +2 -2
- package/dist/narou-jsonp.js +3 -4
- package/dist/narou-ranking-results.cjs.map +1 -1
- package/dist/narou-ranking-results.d.cts +2 -2
- package/dist/narou-ranking-results.d.ts +2 -2
- package/dist/{narou-search-results-b7c10db0.d.ts → narou-search-results-CvMcnYqe.d.ts} +1 -1
- package/dist/{narou-search-results-6727b1ce.d.ts → narou-search-results-D_vbjc_I.d.cts} +1 -1
- package/dist/narou-search-results.cjs.map +1 -1
- package/dist/narou-search-results.d.cts +1 -1
- package/dist/narou-search-results.d.ts +1 -1
- package/dist/narou-search-results.js +1 -2
- package/dist/narou.cjs.map +1 -1
- package/dist/narou.d.cts +2 -2
- package/dist/narou.d.ts +2 -2
- package/dist/narou.js +2 -3
- package/dist/params.cjs.map +1 -1
- package/dist/params.d.cts +1 -1
- package/dist/params.d.ts +1 -1
- package/dist/params.js +1 -2
- package/dist/ranking-history.cjs.map +1 -1
- package/dist/ranking-history.d.cts +2 -2
- package/dist/ranking-history.d.ts +2 -2
- package/dist/ranking-history.js +1 -2
- package/dist/ranking.cjs.map +1 -1
- package/dist/ranking.d.cts +2 -2
- package/dist/ranking.d.ts +2 -2
- package/dist/ranking.js +3 -4
- package/dist/search-builder-r18.cjs.map +1 -1
- package/dist/search-builder-r18.d.cts +3 -3
- package/dist/search-builder-r18.d.ts +3 -3
- package/dist/search-builder-r18.js +3 -4
- package/dist/search-builder.cjs.map +1 -1
- package/dist/search-builder.d.cts +2 -2
- package/dist/search-builder.d.ts +2 -2
- package/dist/search-builder.js +2 -3
- package/dist/user-search.cjs.map +1 -1
- package/dist/user-search.d.cts +2 -2
- package/dist/user-search.d.ts +2 -2
- package/dist/user-search.js +3 -4
- package/dist/util/jsonp.d.cts +1 -1
- package/dist/util/jsonp.d.ts +1 -1
- package/dist/util/jsonp.js +0 -1
- package/dist/util/type.d.cts +1 -1
- package/dist/util/type.d.ts +1 -1
- package/dist/util/unzipp.js +0 -1
- package/package.json +86 -92
- package/src/index.browser.ts +8 -8
- package/src/index.common.ts +13 -13
- package/src/index.ts +9 -9
- package/src/narou-fetch.ts +9 -5
- package/src/narou-jsonp.ts +3 -3
- package/src/narou-ranking-results.ts +3 -3
- package/src/narou-search-results.ts +1 -1
- package/src/narou.ts +5 -5
- package/src/params.ts +2 -2
- package/src/ranking-history.ts +1 -1
- package/src/ranking.ts +7 -7
- package/src/search-builder-r18.ts +4 -4
- package/src/search-builder.ts +6 -6
- package/src/user-search.ts +4 -4
- package/dist/chunk-2TJKGCQW.js.map +0 -1
- package/dist/chunk-46PF37IP.js.map +0 -1
- package/dist/chunk-AUZ3RYOM.js +0 -50
- package/dist/chunk-AUZ3RYOM.js.map +0 -1
- package/dist/chunk-JDISC7YB.js +0 -3065
- package/dist/chunk-JDISC7YB.js.map +0 -1
- package/dist/chunk-KBODTMQO.js.map +0 -1
- package/dist/chunk-M5KIO5VI.js.map +0 -1
- package/dist/chunk-OEGZ4BDA.js.map +0 -1
- package/dist/chunk-S34T2KHH.js.map +0 -1
- package/dist/chunk-XLD5A2I7.js.map +0 -1
- package/dist/chunk-XNC7KL3A.js.map +0 -1
- package/dist/chunk-YDUSIGMU.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/narou-jsonp.ts"],"sourcesContent":["import NarouNovel from \"./narou\";\nimport type { NarouParams } from \"./narou\";\nimport { jsonp } from \"./util/jsonp\";\n\n/**\n * なろう小説APIへのリクエストを実行する\n */\nexport default class NarouNovelJsonp extends NarouNovel {\n protected async execute<T>(\n params: NarouParams,\n endpoint: string\n ): Promise<T> {\n const query = { ...params, out: \"jsonp\" };\n query.gzip = 0;\n\n const url = new URL(endpoint);\n\n Object.entries(query).forEach(([key, value]) => {\n if (value) {\n url.searchParams.append(key, value.toString());\n }\n });\n\n return await jsonp(url.toString());\n }\n}\n"],"mappings":";;;;;;;;AAOA,IAAqB,kBAArB,cAA6C,WAAW;AAAA,EACtD,MAAgB,QACd,QACA,UACY;AACZ,UAAM,QAAQ,EAAE,GAAG,QAAQ,KAAK,QAAQ;AACxC,UAAM,OAAO;AAEb,UAAM,MAAM,IAAI,IAAI,QAAQ;AAE5B,WAAO,QAAQ,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC9C,UAAI,OAAO;AACT,YAAI,aAAa,OAAO,KAAK,MAAM,SAAS,CAAC;AAAA,MAC/C;AAAA,IACF,CAAC;AAED,WAAO,MAAM,MAAM,IAAI,SAAS,CAAC;AAAA,EACnC;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/search-builder.ts"],"sourcesContent":["import type NarouNovel from \"./narou\";\nimport type {\n NarouSearchResult,\n SearchResultFields,\n SearchResultOptionalFields,\n} from \"./narou-search-results\";\nimport type NarouSearchResults from \"./narou-search-results\";\nimport type {\n BigGenre,\n SearchResultFieldNames,\n Genre,\n SearchParams,\n Fields,\n Order,\n BuntaiParam,\n NovelTypeParam,\n GzipLevel,\n OptionalFields,\n ParamsBaseWithOrder,\n} from \"./params\";\nimport { BooleanNumber, StopParam } from \"./params\";\nimport type { Join } from \"./util/type\";\n\nexport type DefaultSearchResultFields = keyof Omit<\n NarouSearchResult,\n \"weekly_unique\" | \"noveltype\" | \"nocgenre\" | \"xid\"\n>;\n\nexport abstract class SearchBuilderBase<\n TParams extends ParamsBaseWithOrder<TOrder>,\n TOrder extends string\n> {\n /**\n * constructor\n * @private\n */\n constructor(\n protected params: TParams = {} as TParams,\n protected api: NarouNovel\n ) { }\n\n protected static distinct<T>(array: readonly T[]): T[] {\n return Array.from(new Set(array));\n }\n\n protected static array2string<T extends string | number>(\n n: T | readonly T[]\n ): Join<T> {\n if (Array.isArray(n)) {\n return this.distinct(n).join(\"-\") as Join<T>;\n } else {\n return n.toString() as Join<T>;\n }\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n limit(num: number): this {\n this.set({ lim: num } as TParams);\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n start(num: number): this {\n this.set({ st: num } as TParams);\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n page(no: number, count = 20): this {\n return this.limit(count).start(no * count);\n }\n\n /**\n * 出力順序を指定する。指定しない場合は新着順となります。\n * old\t古い順\n * @param {TOrder} order 出力順序\n * @return {SearchBuilder} this\n */\n order(order: TOrder): this {\n this.set({ order: order } as TParams);\n return this;\n }\n\n /**\n * gzip圧縮する。\n *\n * 転送量上限を減らすためにも推奨\n * @param {GzipLevel} level gzip圧縮レベル(1~5)\n * @return {SearchBuilder} this\n */\n gzip(level: GzipLevel): this {\n this.set({ gzip: level } as TParams);\n return this;\n }\n\n /**\n * クエリパラメータをセットする\n * @private\n * @return {SearchBuilder} this\n */\n protected set(obj: TParams): this {\n this.params = { ...this.params, ...obj };\n return this;\n }\n\n /**\n * クエリパラメータを削除する\n */\n protected unset(key: keyof TParams): this {\n delete this.params[key];\n return this;\n }\n}\n\nexport abstract class NovelSearchBuilderBase<\n T extends SearchResultFieldNames\n> extends SearchBuilderBase<SearchParams, Order> {\n /**\n * a\n * @return {SearchBuilder} this\n */\n word(word: string): this {\n this.set({ word: word });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n notWord(word: string): this {\n this.set({ notword: word });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n byTitle(bool = true): this {\n this.set({ title: bool ? BooleanNumber.True : BooleanNumber.False });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n byOutline(bool = true): this {\n this.set({ ex: bool ? BooleanNumber.True : BooleanNumber.False });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n byKeyword(bool = true): this {\n this.set({ keyword: bool ? BooleanNumber.True : BooleanNumber.False });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n byAuthor(bool = true): this {\n this.set({ wname: bool ? BooleanNumber.True : BooleanNumber.False });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n isBL(bool = true): this {\n if (bool) {\n this.set({ isbl: BooleanNumber.True });\n } else {\n this.set({ notbl: BooleanNumber.True });\n }\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n isGL(bool = true): this {\n if (bool) {\n this.set({ isgl: BooleanNumber.True });\n } else {\n this.set({ notgl: BooleanNumber.True });\n }\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n isZankoku(bool = true): this {\n if (bool) {\n this.set({ iszankoku: BooleanNumber.True });\n } else {\n this.set({ notzankoku: BooleanNumber.True });\n }\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n isTensei(bool = true): this {\n if (bool) {\n this.set({ istensei: BooleanNumber.True });\n } else {\n this.set({ nottensei: BooleanNumber.True });\n }\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n isTenni(bool = true): this {\n if (bool) {\n this.set({ istenni: BooleanNumber.True });\n } else {\n this.set({ nottenni: BooleanNumber.True });\n }\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n isTT(): this {\n this.set({ istt: BooleanNumber.True });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n length(length: number | readonly number[]): this {\n this.set({ length: NovelSearchBuilderBase.array2string(length) });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n kaiwaritu(num: number): this;\n kaiwaritu(min: number, max: number): this;\n\n kaiwaritu(min: number, max?: number): this {\n let n: number | string;\n if (max != null) {\n n = `${min}-${max}`;\n } else {\n n = min;\n }\n this.set({ kaiwaritu: n });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n sasie(num: number | readonly number[]): this {\n this.set({ sasie: NovelSearchBuilderBase.array2string(num) });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n time(num: number | readonly number[]): this {\n this.set({ time: NovelSearchBuilderBase.array2string(num) });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n ncode(ncodes: string | readonly string[]): this {\n this.set({ ncode: NovelSearchBuilderBase.array2string(ncodes) });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n type(type: NovelTypeParam): this {\n this.set({ type });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n buntai(buntai: BuntaiParam | readonly BuntaiParam[]): this {\n this.set({ buntai: NovelSearchBuilderBase.array2string(buntai) });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n isStop(bool = true): this {\n this.set({ stop: bool ? StopParam.Stopping : StopParam.NoStopping });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n isPickup(bool = true): this {\n this.set({ ispickup: bool ? BooleanNumber.True : BooleanNumber.False });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n lastUpdate(date: string): this;\n lastUpdate(from: number, to: number): this;\n lastUpdate(from: Date, to: Date): this;\n\n lastUpdate(x: string | number | Date, y?: number | Date): this {\n let date: string;\n if (typeof x == \"string\") {\n date = x;\n } else if (x instanceof Date && y instanceof Date) {\n date = `${Math.floor(x.getTime() / 1000)}-${Math.floor(\n x.getTime() / 1000\n )}`;\n } else {\n date = `${x}-${y}`;\n }\n\n this.set({ lastup: date });\n return this;\n }\n\n /**\n * なろう小説APIへの検索リクエストを実行する\n * @returns {Promise<NarouSearchResults>} 検索結果\n */\n execute(): Promise<NarouSearchResults<NarouSearchResult, T>> {\n return this.api.executeNovel(this.params);\n }\n}\n\n/**\n * 検索ヘルパー\n * @class SearchBuilder\n */\nexport default class SearchBuilder<\n T extends keyof NarouSearchResult = DefaultSearchResultFields,\n TOpt extends keyof NarouSearchResult = never\n> extends NovelSearchBuilderBase<T | TOpt> {\n /**\n *\n * @return {SearchBuilder} this\n */\n bigGenre(genre: BigGenre | readonly BigGenre[]): this {\n this.set({ biggenre: SearchBuilder.array2string(genre) });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n notBigGenre(genre: BigGenre | readonly BigGenre[]): this {\n this.set({ notbiggenre: SearchBuilder.array2string(genre) });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n genre(genre: Genre | readonly Genre[]): this {\n this.set({ genre: SearchBuilder.array2string(genre) });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n notGenre(genre: Genre | readonly Genre[]): this {\n this.set({ notgenre: SearchBuilder.array2string(genre) });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n userId(ids: number | readonly number[]): this {\n this.set({ userid: SearchBuilder.array2string(ids) });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n isR15(bool = true): this {\n if (bool) {\n this.set({ isr15: 1 });\n } else {\n this.set({ notr15: 1 });\n }\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n fields<TFields extends Fields>(\n fields: TFields | readonly TFields[]\n ): SearchBuilder<SearchResultFields<TFields>, TOpt> {\n this.set({ of: SearchBuilder.array2string(fields) });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this as any;\n }\n\n opt<TFields extends OptionalFields>(\n option: TFields | readonly TFields[]\n ): SearchBuilder<T, SearchResultOptionalFields<TFields>> {\n this.set({ opt: SearchBuilder.array2string(option) });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this as any;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/user-search.ts"],"sourcesContent":["import NarouSearchResults from \"./narou-search-results\";\nimport type {\n UserSearchResult,\n UserSearchResultFields,\n} from \"./narou-search-results\";\nimport type { UserFields, UserOrder, UserSearchParams } from \"./params\";\nimport { SearchBuilderBase } from \"./search-builder\";\n\n/**\n * なろうユーザ検索API\n * @class UserSearch\n */\nexport default class UserSearchBuilder<\n TField extends keyof UserSearchResult = keyof UserSearchResult\n> extends SearchBuilderBase<UserSearchParams, UserOrder> {\n /**\n * 単語を指定できます。\n * 半角または全角スペースで区切るとAND抽出になります。\n * 部分一致でHITします。検索の対象はユーザ名とユーザ名のフリガナです。\n */\n word(word: string) {\n this.set({ word });\n return this;\n }\n\n /**\n * 含みたくない単語を指定できます。\n * スペースで区切ることにより含ませない単語を増やせます。部分一致で除外されます。\n * 除外の対象はユーザ名とユーザ名のフリガナです。\n */\n notWord(notword: string) {\n this.set({ notword });\n return this;\n }\n\n /**\n * ユーザIDで抽出可能。\n */\n userId(userid: number) {\n this.set({ userid });\n return this;\n }\n\n /**\n * 抽出するユーザのユーザ名のフリガナの頭文字を指定できます。\n * 頭文字はユーザ名のフリガナをひらがなに変換し、最初の1文字が「ぁ」~「ん」の場合に対象となります。\n * 「ぱ」や「ば」等の半濁音や濁音は清音として扱われます。\n * 漢字や英数字が頭文字のユーザは対象外です。\n */\n name1st(name1st: string) {\n this.set({ name1st });\n return this;\n }\n\n /**\n * 抽出するユーザの小説投稿数の下限を指定できます。\n * 小説投稿件数が指定された数値以上のユーザを抽出します。\n */\n minNovel(minnovel: number) {\n this.set({ minnovel });\n return this;\n }\n\n /**\n * 抽出するユーザの小説投稿数の上限を指定できます。\n * 小説投稿件数が指定された数値以下のユーザを抽出します。\n */\n maxNovel(maxnovel: number) {\n this.set({ maxnovel });\n return this;\n }\n\n /**\n * 抽出するユーザのレビュー投稿数の下限を指定できます。\n * レビュー投稿件数が指定された数値以上のユーザを抽出します。\n */\n minReview(minreview: number) {\n this.set({ minreview });\n return this;\n }\n\n /**\n * 抽出するユーザのレビュー投稿数の上限を指定できます。\n * レビュー投稿件数が指定された数値以下のユーザを抽出します。\n */\n maxReview(maxreview: number) {\n this.set({ maxreview });\n return this;\n }\n\n /**\n * 出力する項目を個別に指定できます。未指定時は全項目出力されます。転送量軽減のため、このパラメータの使用が推奨されます。\n * @return {SearchBuilder} this\n */\n fields<TFields extends UserFields>(\n fields: TFields | readonly TFields[]\n ): UserSearchBuilder<UserSearchResultFields<TFields>> {\n this.set({ of: UserSearchBuilder.array2string(fields) });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this as any;\n }\n\n /**\n * なろう小説APIへのリクエストを実行する\n * @returns ランキング\n */\n execute(): Promise<NarouSearchResults<UserSearchResult, TField>> {\n return this.api.executeUserSearch(this.params as UserSearchParams);\n }\n}\n"],"mappings":";;;;;AAYA,IAAqB,oBAArB,MAAqB,2BAEX,kBAA+C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvD,KAAK,MAAc;AACjB,SAAK,IAAI,EAAE,KAAK,CAAC;AACjB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,SAAiB;AACvB,SAAK,IAAI,EAAE,QAAQ,CAAC;AACpB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAAgB;AACrB,SAAK,IAAI,EAAE,OAAO,CAAC;AACnB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,SAAiB;AACvB,SAAK,IAAI,EAAE,QAAQ,CAAC;AACpB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,UAAkB;AACzB,SAAK,IAAI,EAAE,SAAS,CAAC;AACrB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,UAAkB;AACzB,SAAK,IAAI,EAAE,SAAS,CAAC;AACrB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,WAAmB;AAC3B,SAAK,IAAI,EAAE,UAAU,CAAC;AACtB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,WAAmB;AAC3B,SAAK,IAAI,EAAE,UAAU,CAAC;AACtB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OACE,QACoD;AACpD,SAAK,IAAI,EAAE,IAAI,mBAAkB,aAAa,MAAM,EAAE,CAAC;AAEvD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAiE;AAC/D,WAAO,KAAK,IAAI,kBAAkB,KAAK,MAA0B;AAAA,EACnE;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ranking.ts"],"sourcesContent":["import type { NarouRankingResult, RankingResult } from \"./narou-ranking-results\";\nimport SearchBuilder from \"./search-builder\";\nimport type { DefaultSearchResultFields } from \"./search-builder\";\nimport { addDays, format } from \"date-fns\";\nimport type {\n GzipLevel,\n OptionalFields,\n} from \"./params\";\nimport {\n RankingParams,\n RankingType,\n Fields,\n} from \"./params\";\nimport type NarouNovel from \"./narou\";\nimport type { SearchResultFields } from \"./narou-search-results\";\n\nconst dateFormat = \"yyyyMMdd\";\n\n/**\n * ランキングヘルパー\n * @class Ranking\n */\nexport default class RankingBuilder {\n protected date$: Date;\n protected type$: RankingType;\n\n /**\n * constructor\n * @private\n */\n constructor(\n protected params: Partial<RankingParams> = {},\n protected api: NarouNovel\n ) {\n /**\n * クエリパラメータ\n * @protected\n */\n this.date$ = addDays(Date.now(), -1);\n this.type$ = RankingType.Daily;\n }\n\n date(date: Date) {\n this.date$ = date;\n return this;\n }\n\n type(type: RankingType) {\n this.type$ = type;\n return this;\n }\n\n /**\n * gzip圧縮する。\n *\n * 転送量上限を減らすためにも推奨\n * @param {GzipLevel} level gzip圧縮レベル(1~5)\n * @return {RankingBuilder} this\n */\n gzip(level: GzipLevel) {\n this.set({ gzip: level });\n return this;\n }\n\n /**\n * クエリパラメータをセットする\n * @private\n * @return {RankingBuilder} this\n */\n protected set(obj: Partial<RankingParams>) {\n Object.assign(this.params, obj);\n return this;\n }\n\n /**\n * なろう小説APIへのリクエストを実行する\n * @returns ランキング\n */\n execute(): Promise<NarouRankingResult[]> {\n const date = format(this.date$, dateFormat);\n this.set({ rtype: `${date}-${this.type$}` });\n return this.api.executeRanking(this.params as RankingParams);\n }\n\n async executeWithFields(): Promise<\n RankingResult<DefaultSearchResultFields>[]\n >;\n\n async executeWithFields<TFields extends Fields>(\n fields: TFields | TFields[]\n ): Promise<RankingResult<SearchResultFields<TFields>>[]>;\n\n async executeWithFields(\n fields: never[],\n opt: OptionalFields | OptionalFields[]\n ): Promise<RankingResult<DefaultSearchResultFields | \"weekly_unique\">[]>;\n\n async executeWithFields<TFields extends Fields>(\n fields: TFields | TFields[],\n opt: OptionalFields | OptionalFields[]\n ): Promise<RankingResult<SearchResultFields<TFields> | \"weekly_unique\">[]>;\n\n async executeWithFields<\n TFields extends Fields,\n TOpt extends OptionalFields | undefined = undefined\n >(\n fields: TFields | TFields[] = [],\n opt?: TOpt\n ): Promise<RankingResult<SearchResultFields<TFields>>[]> {\n const ranking = await this.execute();\n const fields$ = Array.isArray(fields)\n ? fields.length == 0\n ? []\n : ([...fields, Fields.ncode] as const)\n : ([fields, Fields.ncode] as const);\n\n const rankingNcodes = ranking.map(({ ncode }) => ncode);\n const builder = new SearchBuilder({}, this.api);\n builder.fields(fields$);\n if (opt) {\n builder.opt(opt);\n }\n builder.ncode(rankingNcodes);\n builder.limit(ranking.length);\n const result = await builder.execute();\n\n return ranking.map<\n RankingResult<\n | SearchResultFields<TFields>\n | (TOpt extends \"weekly\" ? \"weekly_unique\" : never)\n >\n >((r) => ({\n ...r,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...(result.values.find((novel) => novel.ncode == r.ncode) as any),\n }));\n }\n}\n"],"mappings":";;;;;;;;;AAGA,SAAS,SAAS,cAAc;AAahC,IAAM,aAAa;AAMnB,IAAqB,iBAArB,MAAoC;AAAA;AAAA;AAAA;AAAA;AAAA,EAQlC,YACY,SAAiC,CAAC,GAClC,KACV;AAFU;AACA;AAMV,SAAK,QAAQ,QAAQ,KAAK,IAAI,GAAG,EAAE;AACnC,SAAK,QAAQ,YAAY;AAAA,EAC3B;AAAA,EAEA,KAAK,MAAY;AACf,SAAK,QAAQ;AACb,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,MAAmB;AACtB,SAAK,QAAQ;AACb,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,KAAK,OAAkB;AACrB,SAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AACxB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,IAAI,KAA6B;AACzC,WAAO,OAAO,KAAK,QAAQ,GAAG;AAC9B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAyC;AACvC,UAAM,OAAO,OAAO,KAAK,OAAO,UAAU;AAC1C,SAAK,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,KAAK,KAAK,GAAG,CAAC;AAC3C,WAAO,KAAK,IAAI,eAAe,KAAK,MAAuB;AAAA,EAC7D;AAAA,EAoBA,MAAM,kBAIJ,SAA8B,CAAC,GAC/B,KACuD;AACvD,UAAM,UAAU,MAAM,KAAK,QAAQ;AACnC,UAAM,UAAU,MAAM,QAAQ,MAAM,IAChC,OAAO,UAAU,IACf,CAAC,IACA,CAAC,GAAG,QAAQ,OAAO,KAAK,IAC1B,CAAC,QAAQ,OAAO,KAAK;AAE1B,UAAM,gBAAgB,QAAQ,IAAI,CAAC,EAAE,MAAM,MAAM,KAAK;AACtD,UAAM,UAAU,IAAI,cAAc,CAAC,GAAG,KAAK,GAAG;AAC9C,YAAQ,OAAO,OAAO;AACtB,QAAI,KAAK;AACP,cAAQ,IAAI,GAAG;AAAA,IACjB;AACA,YAAQ,MAAM,aAAa;AAC3B,YAAQ,MAAM,QAAQ,MAAM;AAC5B,UAAM,SAAS,MAAM,QAAQ,QAAQ;AAErC,WAAO,QAAQ,IAKb,CAAC,OAAO;AAAA,MACR,GAAG;AAAA;AAAA,MAEH,GAAI,OAAO,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,EAAE,KAAK;AAAA,IAC1D,EAAE;AAAA,EACJ;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/search-builder-r18.ts"],"sourcesContent":["import { NovelSearchBuilderBase } from \"./search-builder\";\nimport type NarouSearchResults from \"./narou-search-results\";\nimport type {\n NarouSearchResult,\n SearchResultR18Fields,\n SearchResultOptionalFields,\n} from \"./narou-search-results\";\nimport type {\n R18Site,\n SearchResultFieldNames,\n R18Fields,\n OptionalFields,\n} from \"./params\";\n\nexport type DefaultR18SearchResultFields = keyof Omit<\n NarouSearchResult,\n \"weekly_unique\" | \"noveltype\" | \"biggenre\" | \"genre\" | \"isr15\" | \"id\"\n>;\n\n/**\n * 18禁API検索ヘルパー\n * @class SearchBuilderR18\n */\nexport default class SearchBuilderR18<\n T extends SearchResultFieldNames = DefaultR18SearchResultFields,\n TOpt extends keyof NarouSearchResult = never\n> extends NovelSearchBuilderBase<T | TOpt> {\n /**\n * なろう小説APIへの検索リクエストを実行する\n * @override\n * @returns {Promise<NarouSearchResults>} 検索結果\n */\n execute(): Promise<NarouSearchResults<NarouSearchResult, T | TOpt>> {\n return this.api.executeNovel18(this.params);\n }\n\n r18Site(sites: R18Site | readonly R18Site[]) {\n this.set({ nocgenre: NovelSearchBuilderBase.array2string(sites) });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n xid(ids: number | readonly number[]) {\n this.set({ xid: NovelSearchBuilderBase.array2string(ids) });\n return this;\n }\n\n /**\n *\n * @return {SearchBuilder} this\n */\n fields<TFields extends R18Fields>(\n fields: TFields | readonly TFields[]\n ): SearchBuilderR18<SearchResultR18Fields<R18Fields>> {\n this.set({ of: NovelSearchBuilderBase.array2string(fields) });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this as any;\n }\n\n opt<TFields extends OptionalFields>(\n option: TFields | readonly TFields[]\n ): SearchBuilderR18<T, SearchResultOptionalFields<TFields>> {\n this.set({ opt: NovelSearchBuilderBase.array2string(option) });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this as any;\n }\n}\n"],"mappings":";;;;;AAuBA,IAAqB,mBAArB,cAGU,uBAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzC,UAAoE;AAClE,WAAO,KAAK,IAAI,eAAe,KAAK,MAAM;AAAA,EAC5C;AAAA,EAEA,QAAQ,OAAqC;AAC3C,SAAK,IAAI,EAAE,UAAU,uBAAuB,aAAa,KAAK,EAAE,CAAC;AACjE,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,KAAiC;AACnC,SAAK,IAAI,EAAE,KAAK,uBAAuB,aAAa,GAAG,EAAE,CAAC;AAC1D,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OACE,QACoD;AACpD,SAAK,IAAI,EAAE,IAAI,uBAAuB,aAAa,MAAM,EAAE,CAAC;AAE5D,WAAO;AAAA,EACT;AAAA,EAEA,IACE,QAC0D;AAC1D,SAAK,IAAI,EAAE,KAAK,uBAAuB,aAAa,MAAM,EAAE,CAAC;AAE7D,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ranking-history.ts"],"sourcesContent":["import { parse } from \"date-fns\";\nimport type { RankingType } from \"./params\";\n\nconst dateFormat = \"yyyyMMdd\";\n\nexport interface RankingHistoryRawResult {\n rtype: `${string}-${RankingType}`;\n pt: number;\n rank: number;\n}\n\nexport interface RankingHistoryResult {\n type: RankingType;\n date: Date;\n pt: number;\n rank: number;\n}\n\nexport function formatRankingHistory(\n rankin: RankingHistoryRawResult\n): RankingHistoryResult {\n const { rtype, pt, rank } = rankin;\n const [_date, _type] = rtype.split(\"-\");\n const date = parse(_date, dateFormat, new Date());\n const type = _type as RankingType;\n\n return { type, date, pt, rank };\n}\n"],"mappings":";AAAA,SAAS,aAAa;AAGtB,IAAM,aAAa;AAeZ,SAAS,qBACd,QACsB;AACtB,QAAM,EAAE,OAAO,IAAI,KAAK,IAAI;AAC5B,QAAM,CAAC,OAAO,KAAK,IAAI,MAAM,MAAM,GAAG;AACtC,QAAM,OAAO,MAAM,OAAO,YAAY,oBAAI,KAAK,CAAC;AAChD,QAAM,OAAO;AAEb,SAAO,EAAE,MAAM,MAAM,IAAI,KAAK;AAChC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/narou.ts"],"sourcesContent":["import type { NarouRankingResult } from \"./narou-ranking-results\";\nimport NarouSearchResults from \"./narou-search-results\";\nimport type {\n NarouSearchResult,\n UserSearchResult,\n} from \"./narou-search-results\";\nimport type {\n RankingHistoryParams,\n RankingParams,\n SearchParams,\n UserSearchParams,\n} from \"./params\";\nimport type { RankingHistoryRawResult } from \"./ranking-history\";\n\n/**\n * なろう小説APIへのリクエストパラメータ\n */\nexport type NarouParams =\n | SearchParams\n | RankingParams\n | RankingHistoryParams\n | UserSearchParams;\n\n/**\n * なろう小説APIへのリクエストを実行する\n * @class NarouNovel\n * @private\n */\nexport default abstract class NarouNovel {\n /**\n * なろうAPIへのAPIリクエストを実行する\n * @param params クエリパラメータ\n * @param endpoint APIエンドポイント\n * @returns 実行結果\n */\n protected abstract execute<T>(\n params: NarouParams,\n endpoint: string\n ): Promise<T>;\n\n /**\n * APIへの検索リクエストを実行する\n * @param params クエリパラメータ\n * @param endpoint APIエンドポイント\n * @returns 検索結果\n */\n protected async executeSearch<T extends keyof NarouSearchResult>(\n params: SearchParams,\n endpoint = \"https://api.syosetu.com/novelapi/api/\"\n ): Promise<NarouSearchResults<NarouSearchResult, T>> {\n return new NarouSearchResults(await this.execute(params, endpoint), params);\n }\n\n /**\n * 小説APIへの検索リクエストを実行する\n * @param params クエリパラメータ\n * @returns 検索結果\n * @see https://dev.syosetu.com/man/api/\n */\n async executeNovel<T extends keyof NarouSearchResult>(\n params: SearchParams\n ): Promise<NarouSearchResults<NarouSearchResult, T>> {\n return await this.executeSearch(\n params,\n \"https://api.syosetu.com/novelapi/api/\"\n );\n }\n\n /**\n * R18小説APIへの検索リクエストを実行する\n * @param params クエリパラメータ\n * @returns 検索結果\n * @see https://dev.syosetu.com/xman/api/\n */\n async executeNovel18<T extends keyof NarouSearchResult>(\n params: SearchParams\n ): Promise<NarouSearchResults<NarouSearchResult, T>> {\n return await this.executeSearch(\n params,\n \"https://api.syosetu.com/novel18api/api/\"\n );\n }\n\n /**\n * ランキングAPIへのリクエストを実行する\n * @param params クエリパラメータ\n * @returns ランキング結果\n * @see https://dev.syosetu.com/man/rankapi/\n */\n async executeRanking(params: RankingParams): Promise<NarouRankingResult[]> {\n return await this.execute(params, \"https://api.syosetu.com/rank/rankget/\");\n }\n\n /**\n * 殿堂入りAPiへのリクエストを実行する\n * @param params クエリパラメータ\n * @returns ランキング履歴結果\n * @see https://dev.syosetu.com/man/rankinapi/\n */\n async executeRankingHistory(\n params: RankingHistoryParams\n ): Promise<RankingHistoryRawResult[]> {\n return await this.execute(params, \"https://api.syosetu.com/rank/rankin/\");\n }\n\n /**\n * ユーザー検索APIへのリクエストを実行する\n * @param params クエリパラメータ\n * @returns 検索結果\n * @see https://dev.syosetu.com/man/userapi/\n */\n async executeUserSearch<T extends keyof UserSearchResult>(\n params: UserSearchParams\n ): Promise<NarouSearchResults<UserSearchResult, T>> {\n return await this.execute(params, \"https://api.syosetu.com/userapi/api/\");\n }\n}\n"],"mappings":";;;;;AA4BA,IAA8B,aAA9B,MAAyC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBvC,MAAgB,cACd,QACA,WAAW,yCACwC;AACnD,WAAO,IAAI,mBAAmB,MAAM,KAAK,QAAQ,QAAQ,QAAQ,GAAG,MAAM;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aACJ,QACmD;AACnD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,eACJ,QACmD;AACnD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,eAAe,QAAsD;AACzE,WAAO,MAAM,KAAK,QAAQ,QAAQ,uCAAuC;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,sBACJ,QACoC;AACpC,WAAO,MAAM,KAAK,QAAQ,QAAQ,sCAAsC;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,kBACJ,QACkD;AAClD,WAAO,MAAM,KAAK,QAAQ,QAAQ,sCAAsC;AAAA,EAC1E;AACF;","names":[]}
|