narou 1.0.0 → 1.2.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.
Files changed (148) hide show
  1. package/README.md +7 -0
  2. package/dist/{chunk-RITMMCZE.js → chunk-3A5MHPWL.js} +1 -1
  3. package/dist/chunk-3A5MHPWL.js.map +1 -0
  4. package/dist/{chunk-6RIDVTFQ.js → chunk-5UDKQCPJ.js} +12 -2
  5. package/dist/chunk-5UDKQCPJ.js.map +1 -0
  6. package/dist/{chunk-UN3W2CT3.js → chunk-6BZWV4ZC.js} +6 -3
  7. package/dist/{chunk-UN3W2CT3.js.map → chunk-6BZWV4ZC.js.map} +1 -1
  8. package/dist/chunk-BQLSW236.js +117 -0
  9. package/dist/chunk-BQLSW236.js.map +1 -0
  10. package/dist/{chunk-DBCAWGIX.js → chunk-DEQICAN3.js} +2 -2
  11. package/dist/chunk-E2H3AJSQ.js +57 -0
  12. package/dist/chunk-E2H3AJSQ.js.map +1 -0
  13. package/dist/chunk-HOBLKBZ6.js +452 -0
  14. package/dist/chunk-HOBLKBZ6.js.map +1 -0
  15. package/dist/{chunk-TNDGN3EF.js → chunk-IPDEGCWU.js} +1 -1
  16. package/dist/chunk-IPDEGCWU.js.map +1 -0
  17. package/dist/{chunk-GAEL5UWA.js → chunk-LQLNWSWV.js} +4 -4
  18. package/dist/{chunk-GAEL5UWA.js.map → chunk-LQLNWSWV.js.map} +1 -1
  19. package/dist/{chunk-NP5NZV5Q.js → chunk-PLEM2AOH.js} +8 -5
  20. package/dist/chunk-PLEM2AOH.js.map +1 -0
  21. package/dist/chunk-RNHRR56W.js +25 -0
  22. package/dist/chunk-RNHRR56W.js.map +1 -0
  23. package/dist/{chunk-JMTNQTNC.js → chunk-VUZIISP2.js} +2 -3
  24. package/dist/chunk-VUZIISP2.js.map +1 -0
  25. package/dist/{chunk-XAUB42TO.js → chunk-VZVUANDN.js} +6 -4
  26. package/dist/chunk-VZVUANDN.js.map +1 -0
  27. package/dist/index.browser.cjs +245 -94
  28. package/dist/index.browser.cjs.map +1 -1
  29. package/dist/index.browser.d.cts +24 -9
  30. package/dist/index.browser.d.ts +24 -9
  31. package/dist/index.browser.js +16 -16
  32. package/dist/index.browser.js.map +1 -1
  33. package/dist/index.cjs +256 -103
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.common.cjs +241 -87
  36. package/dist/index.common.cjs.map +1 -1
  37. package/dist/index.common.d.cts +2 -2
  38. package/dist/index.common.d.ts +2 -2
  39. package/dist/index.common.js +11 -8
  40. package/dist/index.d.cts +15 -6
  41. package/dist/index.d.ts +15 -6
  42. package/dist/index.js +20 -20
  43. package/dist/index.js.map +1 -1
  44. package/dist/narou-DBa12V_l.d.ts +404 -0
  45. package/dist/narou-DCp4aGfA.d.cts +404 -0
  46. package/dist/narou-fetch.cjs +10 -5
  47. package/dist/narou-fetch.cjs.map +1 -1
  48. package/dist/narou-fetch.d.cts +4 -3
  49. package/dist/narou-fetch.d.ts +4 -3
  50. package/dist/narou-fetch.js +4 -4
  51. package/dist/narou-jsonp.cjs +5 -2
  52. package/dist/narou-jsonp.cjs.map +1 -1
  53. package/dist/narou-jsonp.d.cts +2 -2
  54. package/dist/narou-jsonp.d.ts +2 -2
  55. package/dist/narou-jsonp.js +4 -4
  56. package/dist/narou-ranking-results.d.cts +2 -2
  57. package/dist/narou-ranking-results.d.ts +2 -2
  58. package/dist/{narou-search-results-D_vbjc_I.d.cts → narou-search-results-C21hWrnL.d.cts} +30 -19
  59. package/dist/{narou-search-results-CvMcnYqe.d.ts → narou-search-results-DT0YdaBn.d.ts} +30 -19
  60. package/dist/narou-search-results.cjs.map +1 -1
  61. package/dist/narou-search-results.d.cts +1 -1
  62. package/dist/narou-search-results.d.ts +1 -1
  63. package/dist/narou-search-results.js +1 -1
  64. package/dist/narou.cjs +4 -1
  65. package/dist/narou.cjs.map +1 -1
  66. package/dist/narou.d.cts +2 -2
  67. package/dist/narou.d.ts +2 -2
  68. package/dist/narou.js +2 -2
  69. package/dist/params.cjs +12 -1
  70. package/dist/params.cjs.map +1 -1
  71. package/dist/params.d.cts +1 -1
  72. package/dist/params.d.ts +1 -1
  73. package/dist/params.js +3 -1
  74. package/dist/ranking-history.cjs +11 -3
  75. package/dist/ranking-history.cjs.map +1 -1
  76. package/dist/ranking-history.d.cts +12 -1
  77. package/dist/ranking-history.d.ts +12 -1
  78. package/dist/ranking-history.js +2 -1
  79. package/dist/ranking.cjs +201 -78
  80. package/dist/ranking.cjs.map +1 -1
  81. package/dist/ranking.d.cts +70 -9
  82. package/dist/ranking.d.ts +70 -9
  83. package/dist/ranking.js +4 -3
  84. package/dist/search-builder-r18.cjs +133 -60
  85. package/dist/search-builder-r18.cjs.map +1 -1
  86. package/dist/search-builder-r18.d.cts +19 -6
  87. package/dist/search-builder-r18.d.ts +19 -6
  88. package/dist/search-builder-r18.js +3 -3
  89. package/dist/search-builder.cjs +150 -70
  90. package/dist/search-builder.cjs.map +1 -1
  91. package/dist/search-builder.d.cts +2 -2
  92. package/dist/search-builder.d.ts +2 -2
  93. package/dist/search-builder.js +2 -2
  94. package/dist/user-search.cjs +37 -13
  95. package/dist/user-search.cjs.map +1 -1
  96. package/dist/user-search.d.cts +2 -2
  97. package/dist/user-search.d.ts +2 -2
  98. package/dist/user-search.js +3 -3
  99. package/dist/util/date.cjs +51 -0
  100. package/dist/util/date.cjs.map +1 -0
  101. package/dist/util/date.d.cts +21 -0
  102. package/dist/util/date.d.ts +21 -0
  103. package/dist/util/date.js +11 -0
  104. package/dist/util/date.js.map +1 -0
  105. package/dist/util/jsonp.cjs.map +1 -1
  106. package/dist/util/jsonp.d.cts +36 -0
  107. package/dist/util/jsonp.d.ts +36 -0
  108. package/dist/util/jsonp.js +1 -1
  109. package/dist/util/type.cjs.map +1 -1
  110. package/dist/util/type.d.cts +23 -0
  111. package/dist/util/type.d.ts +23 -0
  112. package/dist/util/unzipp.cjs +1 -2
  113. package/dist/util/unzipp.cjs.map +1 -1
  114. package/dist/util/unzipp.d.cts +9 -0
  115. package/dist/util/unzipp.d.ts +9 -0
  116. package/dist/util/unzipp.js +1 -1
  117. package/package.json +47 -46
  118. package/pnpm-lock.yaml +3041 -0
  119. package/src/index.browser.ts +21 -5
  120. package/src/index.ts +11 -2
  121. package/src/narou-fetch.ts +5 -2
  122. package/src/narou-jsonp.ts +1 -1
  123. package/src/narou-search-results.ts +2 -1
  124. package/src/narou.ts +4 -1
  125. package/src/params.ts +34 -18
  126. package/src/ranking-history.ts +13 -4
  127. package/src/ranking.ts +79 -15
  128. package/src/search-builder-r18.ts +17 -4
  129. package/src/search-builder.ts +203 -79
  130. package/src/util/date.ts +38 -0
  131. package/src/util/jsonp.ts +61 -6
  132. package/src/util/type.ts +23 -0
  133. package/src/util/unzipp.ts +9 -0
  134. package/dist/chunk-6RIDVTFQ.js.map +0 -1
  135. package/dist/chunk-JMTNQTNC.js.map +0 -1
  136. package/dist/chunk-NP5NZV5Q.js.map +0 -1
  137. package/dist/chunk-OJGRUQEQ.js +0 -372
  138. package/dist/chunk-OJGRUQEQ.js.map +0 -1
  139. package/dist/chunk-QQYQ4GQF.js +0 -83
  140. package/dist/chunk-QQYQ4GQF.js.map +0 -1
  141. package/dist/chunk-RITMMCZE.js.map +0 -1
  142. package/dist/chunk-TNDGN3EF.js.map +0 -1
  143. package/dist/chunk-XAUB42TO.js.map +0 -1
  144. package/dist/chunk-YJQXIVFD.js +0 -44
  145. package/dist/chunk-YJQXIVFD.js.map +0 -1
  146. package/dist/narou-CosGR0J9.d.cts +0 -298
  147. package/dist/narou-CutsOEgk.d.ts +0 -298
  148. /package/dist/{chunk-DBCAWGIX.js.map → chunk-DEQICAN3.js.map} +0 -0
package/dist/ranking.cjs CHANGED
@@ -231,14 +231,30 @@ var SearchBuilderBase = class {
231
231
  /**
232
232
  * constructor
233
233
  * @private
234
+ * @param params クエリパラメータ
235
+ * @param api NarouNovel インスタンス
234
236
  */
235
237
  constructor(params = {}, api) {
236
238
  this.params = params;
237
239
  this.api = api;
238
240
  }
241
+ /**
242
+ * 配列から重複を除去する
243
+ * @protected
244
+ * @static
245
+ * @param array 配列
246
+ * @returns 重複を除去した配列
247
+ */
239
248
  static distinct(array) {
240
249
  return Array.from(new Set(array));
241
250
  }
251
+ /**
252
+ * 配列をハイフン区切りの文字列に変換する
253
+ * @protected
254
+ * @static
255
+ * @param n 文字列または数値の配列、あるいは単一の文字列または数値
256
+ * @returns ハイフン区切りの文字列
257
+ */
242
258
  static array2string(n) {
243
259
  if (Array.isArray(n)) {
244
260
  return this.distinct(n).join("-");
@@ -247,44 +263,48 @@ var SearchBuilderBase = class {
247
263
  }
248
264
  }
249
265
  /**
250
- *
251
- * @return {SearchBuilder} this
266
+ * 取得件数を指定する (lim)
267
+ * @param num 取得件数 (1-500)
268
+ * @return {this}
252
269
  */
253
270
  limit(num) {
254
271
  this.set({ lim: num });
255
272
  return this;
256
273
  }
257
274
  /**
258
- *
259
- * @return {SearchBuilder} this
275
+ * 取得開始位置を指定する (st)
276
+ * @param num 取得開始位置 (1-)
277
+ * @return {this}
260
278
  */
261
279
  start(num) {
262
280
  this.set({ st: num });
263
281
  return this;
264
282
  }
265
283
  /**
266
- *
267
- * @return {SearchBuilder} this
284
+ * ページ番号と1ページあたりの件数で取得範囲を指定する
285
+ * @param no ページ番号 (0-)
286
+ * @param count 1ページあたりの件数 (デフォルト: 20)
287
+ * @return {this}
268
288
  */
269
289
  page(no, count = 20) {
270
290
  return this.limit(count).start(no * count);
271
291
  }
272
292
  /**
273
- * 出力順序を指定する。指定しない場合は新着順となります。
274
- * old 古い順
293
+ * 出力順序を指定する (order)
294
+ * 指定しない場合は新着順となります。
275
295
  * @param {TOrder} order 出力順序
276
- * @return {SearchBuilder} this
296
+ * @return {this}
277
297
  */
278
298
  order(order) {
279
299
  this.set({ order });
280
300
  return this;
281
301
  }
282
302
  /**
283
- * gzip圧縮する。
303
+ * gzip圧縮レベルを指定する (gzip)
284
304
  *
285
305
  * 転送量上限を減らすためにも推奨
286
306
  * @param {GzipLevel} level gzip圧縮レベル(1~5)
287
- * @return {SearchBuilder} this
307
+ * @return {this}
288
308
  */
289
309
  gzip(level) {
290
310
  this.set({ gzip: level });
@@ -292,8 +312,9 @@ var SearchBuilderBase = class {
292
312
  }
293
313
  /**
294
314
  * クエリパラメータをセットする
295
- * @private
296
- * @return {SearchBuilder} this
315
+ * @protected
316
+ * @param obj セットするパラメータ
317
+ * @return {this}
297
318
  */
298
319
  set(obj) {
299
320
  this.params = { ...this.params, ...obj };
@@ -301,6 +322,9 @@ var SearchBuilderBase = class {
301
322
  }
302
323
  /**
303
324
  * クエリパラメータを削除する
325
+ * @protected
326
+ * @param key 削除するパラメータのキー
327
+ * @returns {this}
304
328
  */
305
329
  unset(key) {
306
330
  delete this.params[key];
@@ -309,56 +333,65 @@ var SearchBuilderBase = class {
309
333
  };
310
334
  var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilderBase {
311
335
  /**
312
- * a
313
- * @return {SearchBuilder} this
336
+ * 検索語を指定します (word)。
337
+ * 半角または全角スペースで区切るとAND抽出になります。部分一致でHITします。
338
+ * @param word 検索語
339
+ * @return {this}
314
340
  */
315
341
  word(word) {
316
342
  this.set({ word });
317
343
  return this;
318
344
  }
319
345
  /**
320
- *
321
- * @return {SearchBuilder} this
346
+ * 除外したい単語を指定します (notword)。
347
+ * スペースで区切ることにより除外する単語を増やせます。部分一致で除外されます。
348
+ * @param word 除外語
349
+ * @return {this}
322
350
  */
323
351
  notWord(word) {
324
352
  this.set({ notword: word });
325
353
  return this;
326
354
  }
327
355
  /**
328
- *
329
- * @return {SearchBuilder} this
356
+ * 検索対象を作品名に限定するかどうかを指定します (title)。
357
+ * @param bool trueの場合、作品名を検索対象とする (デフォルト: true)
358
+ * @return {this}
330
359
  */
331
360
  byTitle(bool = true) {
332
361
  this.set({ title: bool ? BooleanNumber.True : BooleanNumber.False });
333
362
  return this;
334
363
  }
335
364
  /**
336
- *
337
- * @return {SearchBuilder} this
365
+ * 検索対象をあらすじに限定するかどうかを指定します (ex)。
366
+ * @param bool trueの場合、あらすじを検索対象とする (デフォルト: true)
367
+ * @return {this}
338
368
  */
339
369
  byOutline(bool = true) {
340
370
  this.set({ ex: bool ? BooleanNumber.True : BooleanNumber.False });
341
371
  return this;
342
372
  }
343
373
  /**
344
- *
345
- * @return {SearchBuilder} this
374
+ * 検索対象をキーワードに限定するかどうかを指定します (keyword)。
375
+ * @param bool trueの場合、キーワードを検索対象とする (デフォルト: true)
376
+ * @return {this}
346
377
  */
347
378
  byKeyword(bool = true) {
348
379
  this.set({ keyword: bool ? BooleanNumber.True : BooleanNumber.False });
349
380
  return this;
350
381
  }
351
382
  /**
352
- *
353
- * @return {SearchBuilder} this
383
+ * 検索対象を作者名に限定するかどうかを指定します (wname)。
384
+ * @param bool trueの場合、作者名を検索対象とする (デフォルト: true)
385
+ * @return {this}
354
386
  */
355
387
  byAuthor(bool = true) {
356
388
  this.set({ wname: bool ? BooleanNumber.True : BooleanNumber.False });
357
389
  return this;
358
390
  }
359
391
  /**
360
- *
361
- * @return {SearchBuilder} this
392
+ * ボーイズラブ作品を抽出または除外します (isbl/notbl)。
393
+ * @param bool trueの場合、ボーイズラブ作品を抽出する (デフォルト: true)。falseの場合、除外する。
394
+ * @return {this}
362
395
  */
363
396
  isBL(bool = true) {
364
397
  if (bool) {
@@ -369,8 +402,9 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
369
402
  return this;
370
403
  }
371
404
  /**
372
- *
373
- * @return {SearchBuilder} this
405
+ * ガールズラブ作品を抽出または除外します (isgl/notgl)。
406
+ * @param bool trueの場合、ガールズラブ作品を抽出する (デフォルト: true)。falseの場合、除外する。
407
+ * @return {this}
374
408
  */
375
409
  isGL(bool = true) {
376
410
  if (bool) {
@@ -381,8 +415,9 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
381
415
  return this;
382
416
  }
383
417
  /**
384
- *
385
- * @return {SearchBuilder} this
418
+ * 残酷な描写あり作品を抽出または除外します (iszankoku/notzankoku)。
419
+ * @param bool trueの場合、残酷な描写あり作品を抽出する (デフォルト: true)。falseの場合、除外する。
420
+ * @return {this}
386
421
  */
387
422
  isZankoku(bool = true) {
388
423
  if (bool) {
@@ -393,8 +428,9 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
393
428
  return this;
394
429
  }
395
430
  /**
396
- *
397
- * @return {SearchBuilder} this
431
+ * 異世界転生作品を抽出または除外します (istensei/nottensei)。
432
+ * @param bool trueの場合、異世界転生作品を抽出する (デフォルト: true)。falseの場合、除外する。
433
+ * @return {this}
398
434
  */
399
435
  isTensei(bool = true) {
400
436
  if (bool) {
@@ -405,8 +441,9 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
405
441
  return this;
406
442
  }
407
443
  /**
408
- *
409
- * @return {SearchBuilder} this
444
+ * 異世界転移作品を抽出または除外します (istenni/nottenni)。
445
+ * @param bool trueの場合、異世界転移作品を抽出する (デフォルト: true)。falseの場合、除外する。
446
+ * @return {this}
410
447
  */
411
448
  isTenni(bool = true) {
412
449
  if (bool) {
@@ -417,16 +454,18 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
417
454
  return this;
418
455
  }
419
456
  /**
420
- *
421
- * @return {SearchBuilder} this
457
+ * 異世界転生または異世界転移作品を抽出します (istt)。
458
+ * @return {this}
422
459
  */
423
460
  isTT() {
424
461
  this.set({ istt: BooleanNumber.True });
425
462
  return this;
426
463
  }
427
464
  /**
428
- *
429
- * @return {SearchBuilder} this
465
+ * 抽出する作品の文字数を指定します (length)。
466
+ * 範囲指定する場合は、最小文字数と最大文字数をハイフン(-)記号で区切ってください。
467
+ * @param length 文字数、または[最小文字数, 最大文字数]
468
+ * @return {this}
430
469
  */
431
470
  length(length) {
432
471
  this.set({ length: _NovelSearchBuilderBase.array2string(length) });
@@ -443,59 +482,66 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
443
482
  return this;
444
483
  }
445
484
  /**
446
- *
447
- * @return {SearchBuilder} this
485
+ * 抽出する作品の挿絵数を指定します (sasie)。
486
+ * @param num 挿絵数、または[最小挿絵数, 最大挿絵数]
487
+ * @return {this}
448
488
  */
449
489
  sasie(num) {
450
490
  this.set({ sasie: _NovelSearchBuilderBase.array2string(num) });
451
491
  return this;
452
492
  }
453
493
  /**
454
- *
455
- * @return {SearchBuilder} this
494
+ * 抽出する作品の予想読了時間を分単位で指定します (time)。
495
+ * @param num 読了時間(分)、または[最小読了時間, 最大読了時間]
496
+ * @return {this}
456
497
  */
457
498
  time(num) {
458
499
  this.set({ time: _NovelSearchBuilderBase.array2string(num) });
459
500
  return this;
460
501
  }
461
502
  /**
462
- *
463
- * @return {SearchBuilder} this
503
+ * Nコードを指定して取得します (ncode)。
504
+ * @param ncodes Nコード、またはNコードの配列
505
+ * @return {this}
464
506
  */
465
507
  ncode(ncodes) {
466
508
  this.set({ ncode: _NovelSearchBuilderBase.array2string(ncodes) });
467
509
  return this;
468
510
  }
469
511
  /**
470
- *
471
- * @return {SearchBuilder} this
512
+ * 抽出する小説タイプを指定します (type)。
513
+ * @param type 小説タイプ (t: 短編, r: 連載中, er: 完結済連載小説, ter: 短編と完結済連載小説, re: 連載中と完結済連載小説)
514
+ * @return {this}
472
515
  */
473
516
  type(type) {
474
517
  this.set({ type });
475
518
  return this;
476
519
  }
477
520
  /**
478
- *
479
- * @return {SearchBuilder} this
521
+ * 抽出する作品の文体を指定します (buntai)。
522
+ * 複数指定する場合はハイフン(-)で区切ってください。
523
+ * @param buntai 文体コード、または文体コードの配列
524
+ * @return {this}
480
525
  */
481
526
  buntai(buntai) {
482
527
  this.set({ buntai: _NovelSearchBuilderBase.array2string(buntai) });
483
528
  return this;
484
529
  }
485
530
  /**
486
- *
487
- * @return {SearchBuilder} this
531
+ * 連載停止中作品に関する指定をします (stop)。
532
+ * @param bool trueの場合、長期連載停止中のみ取得する (デフォルト: true)。falseの場合、長期連載停止中を除外する。
533
+ * @return {this}
488
534
  */
489
535
  isStop(bool = true) {
490
536
  this.set({ stop: bool ? StopParam.Stopping : StopParam.NoStopping });
491
537
  return this;
492
538
  }
493
539
  /**
494
- *
495
- * @return {SearchBuilder} this
540
+ * ピックアップ作品のみを取得します (ispickup)。
541
+ * @return {this}
496
542
  */
497
- isPickup(bool = true) {
498
- this.set({ ispickup: bool ? BooleanNumber.True : BooleanNumber.False });
543
+ isPickup() {
544
+ this.set({ ispickup: BooleanNumber.True });
499
545
  return this;
500
546
  }
501
547
  lastUpdate(x, y) {
@@ -504,7 +550,7 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
504
550
  date = x;
505
551
  } else if (x instanceof Date && y instanceof Date) {
506
552
  date = `${Math.floor(x.getTime() / 1e3)}-${Math.floor(
507
- x.getTime() / 1e3
553
+ y.getTime() / 1e3
508
554
  )}`;
509
555
  } else {
510
556
  date = `${x}-${y}`;
@@ -512,6 +558,20 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
512
558
  this.set({ lastup: date });
513
559
  return this;
514
560
  }
561
+ lastNovelUpdate(x, y) {
562
+ let date;
563
+ if (typeof x == "string") {
564
+ date = x;
565
+ } else if (x instanceof Date && y instanceof Date) {
566
+ date = `${Math.floor(x.getTime() / 1e3)}-${Math.floor(
567
+ y.getTime() / 1e3
568
+ )}`;
569
+ } else {
570
+ date = `${x}-${y}`;
571
+ }
572
+ this.set({ lastupdate: date });
573
+ return this;
574
+ }
515
575
  /**
516
576
  * なろう小説APIへの検索リクエストを実行する
517
577
  * @returns {Promise<NarouSearchResults>} 検索結果
@@ -522,48 +582,59 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
522
582
  };
523
583
  var SearchBuilder = class _SearchBuilder extends NovelSearchBuilderBase {
524
584
  /**
525
- *
526
- * @return {SearchBuilder} this
585
+ * 大ジャンルを指定して取得します (biggenre)。
586
+ * 複数指定する場合はハイフン(-)で区切ってください。
587
+ * @param genre 大ジャンルコード、または大ジャンルコードの配列
588
+ * @return {this}
527
589
  */
528
590
  bigGenre(genre) {
529
591
  this.set({ biggenre: _SearchBuilder.array2string(genre) });
530
592
  return this;
531
593
  }
532
594
  /**
533
- *
534
- * @return {SearchBuilder} this
595
+ * 除外したい大ジャンルを指定します (notbiggenre)。
596
+ * 複数指定する場合はハイフン(-)で区切ってください。
597
+ * @param genre 除外する大ジャンルコード、または大ジャンルコードの配列
598
+ * @return {this}
535
599
  */
536
600
  notBigGenre(genre) {
537
601
  this.set({ notbiggenre: _SearchBuilder.array2string(genre) });
538
602
  return this;
539
603
  }
540
604
  /**
541
- *
542
- * @return {SearchBuilder} this
605
+ * ジャンルを指定して取得します (genre)。
606
+ * 複数指定する場合はハイフン(-)で区切ってください。
607
+ * @param genre ジャンルコード、またはジャンルコードの配列
608
+ * @return {this}
543
609
  */
544
610
  genre(genre) {
545
611
  this.set({ genre: _SearchBuilder.array2string(genre) });
546
612
  return this;
547
613
  }
548
614
  /**
549
- *
550
- * @return {SearchBuilder} this
615
+ * 除外したいジャンルを指定します (notgenre)。
616
+ * 複数指定する場合はハイフン(-)で区切ってください。
617
+ * @param genre 除外するジャンルコード、またはジャンルコードの配列
618
+ * @return {this}
551
619
  */
552
620
  notGenre(genre) {
553
621
  this.set({ notgenre: _SearchBuilder.array2string(genre) });
554
622
  return this;
555
623
  }
556
624
  /**
557
- *
558
- * @return {SearchBuilder} this
625
+ * ユーザIDを指定して取得します (userid)。
626
+ * 複数指定する場合はハイフン(-)で区切ってください。
627
+ * @param ids ユーザID、またはユーザIDの配列
628
+ * @return {this}
559
629
  */
560
630
  userId(ids) {
561
631
  this.set({ userid: _SearchBuilder.array2string(ids) });
562
632
  return this;
563
633
  }
564
634
  /**
565
- *
566
- * @return {SearchBuilder} this
635
+ * R15作品を抽出または除外します (isr15/notr15)。
636
+ * @param bool trueの場合、R15作品を抽出する (デフォルト: true)。falseの場合、除外する。
637
+ * @return {this}
567
638
  */
568
639
  isR15(bool = true) {
569
640
  if (bool) {
@@ -574,37 +645,76 @@ var SearchBuilder = class _SearchBuilder extends NovelSearchBuilderBase {
574
645
  return this;
575
646
  }
576
647
  /**
577
- *
578
- * @return {SearchBuilder} this
648
+ * 出力する項目を個別に指定します (of)。
649
+ * 未指定時は全項目出力されます。転送量軽減のため、このパラメータの使用が推奨されます。
650
+ * 複数項目を出力する場合はハイフン(-)記号で区切ってください。
651
+ * @param fields 出力するフィールド名、またはフィールド名の配列
652
+ * @return {SearchBuilder<SearchResultFields<TFields>, TOpt>} 型が更新されたビルダー
579
653
  */
580
654
  fields(fields) {
581
655
  this.set({ of: _SearchBuilder.array2string(fields) });
582
656
  return this;
583
657
  }
658
+ /**
659
+ * 出力オプション項目を指定します (opt)。
660
+ * 複数項目を出力する場合はハイフン(-)記号で区切ってください。
661
+ * @param option 出力するオプションフィールド名、またはオプションフィールド名の配列
662
+ * @return {SearchBuilder<T, SearchResultOptionalFields<TFields>>} 型が更新されたビルダー
663
+ */
584
664
  opt(option) {
585
665
  this.set({ opt: _SearchBuilder.array2string(option) });
586
666
  return this;
587
667
  }
588
668
  };
589
669
 
670
+ // src/util/date.ts
671
+ function formatDate(date) {
672
+ const year = date.getFullYear();
673
+ const month = String(date.getMonth() + 1).padStart(2, "0");
674
+ const day = String(date.getDate()).padStart(2, "0");
675
+ return `${year}${month}${day}`;
676
+ }
677
+ function addDays(date, days) {
678
+ const result = new Date(date);
679
+ result.setDate(result.getDate() + days);
680
+ return result;
681
+ }
682
+
590
683
  // src/ranking.ts
591
- var import_date_fns = require("date-fns");
592
- var dateFormat = "yyyyMMdd";
593
684
  var RankingBuilder = class {
594
685
  /**
595
686
  * constructor
687
+ * @param params - 初期クエリパラメータ
688
+ * @param api - API実行クラスのインスタンス
596
689
  * @private
597
690
  */
598
691
  constructor(params = {}, api) {
599
692
  this.params = params;
600
693
  this.api = api;
601
- this.date$ = (0, import_date_fns.addDays)(Date.now(), -1);
694
+ this.date$ = addDays(/* @__PURE__ */ new Date(), -1);
602
695
  this.type$ = RankingType.Daily;
603
696
  }
697
+ /**
698
+ * ランキング集計対象の日付を指定します。
699
+ *
700
+ * - 日間: 任意の日付
701
+ * - 週間: 火曜日の日付
702
+ * - 月間・四半期: 1日の日付
703
+ *
704
+ * @param date 集計対象の日付
705
+ * @returns {RankingBuilder} this
706
+ * @see https://dev.syosetu.com/man/rankapi/
707
+ */
604
708
  date(date) {
605
709
  this.date$ = date;
606
710
  return this;
607
711
  }
712
+ /**
713
+ * ランキング種別を指定します。
714
+ * @param type ランキング種別
715
+ * @returns {RankingBuilder} this
716
+ * @see https://dev.syosetu.com/man/rankapi/
717
+ */
608
718
  type(type) {
609
719
  this.type$ = type;
610
720
  return this;
@@ -621,23 +731,36 @@ var RankingBuilder = class {
621
731
  return this;
622
732
  }
623
733
  /**
624
- * クエリパラメータをセットする
734
+ * クエリパラメータを内部的にセットします。
735
+ * @param obj - セットするパラメータオブジェクト
736
+ * @returns {RankingBuilder} this
625
737
  * @private
626
- * @return {RankingBuilder} this
627
738
  */
628
739
  set(obj) {
629
740
  Object.assign(this.params, obj);
630
741
  return this;
631
742
  }
632
743
  /**
633
- * なろう小説APIへのリクエストを実行する
634
- * @returns ランキング
744
+ * 設定されたパラメータに基づき、なろう小説ランキングAPIへのリクエストを実行します。
745
+ *
746
+ * 返される結果には、Nコード、ポイント、順位が含まれます。
747
+ * @returns {Promise<NarouRankingResult[]>} ランキング結果の配列
748
+ * @see https://dev.syosetu.com/man/rankapi/#output
635
749
  */
636
750
  execute() {
637
- const date = (0, import_date_fns.format)(this.date$, dateFormat);
751
+ const date = formatDate(this.date$);
638
752
  this.set({ rtype: `${date}-${this.type$}` });
639
753
  return this.api.executeRanking(this.params);
640
754
  }
755
+ /**
756
+ * ランキングAPIを実行し、取得したNコードを元になろう小説APIで詳細情報を取得して結合します。
757
+ *
758
+ * @template TFields - 取得する小説情報のフィールド型
759
+ * @template TOpt - オプショナルな取得フィールドの型
760
+ * @param fields - 取得するフィールドの配列 (省略時はデフォルトフィールド)
761
+ * @param opt - オプショナルな取得フィールド (`weekly` など)
762
+ * @returns {Promise<RankingResult<SearchResultFields<TFields>>[]>} 詳細情報を含むランキング結果の配列
763
+ */
641
764
  async executeWithFields(fields = [], opt) {
642
765
  const ranking = await this.execute();
643
766
  const fields$ = Array.isArray(fields) ? fields.length == 0 ? [] : [...fields, Fields.ncode] : [fields, Fields.ncode];