narou 1.1.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 (143) 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-CDOBNSCL.js → chunk-5UDKQCPJ.js} +1 -1
  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-K22KVNAH.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-XVH2CU2Q.js → chunk-IPDEGCWU.js} +1 -1
  16. package/dist/chunk-IPDEGCWU.js.map +1 -0
  17. package/dist/{chunk-AZT2OXBZ.js → chunk-LQLNWSWV.js} +3 -3
  18. package/dist/{chunk-SNPBEVCY.js → chunk-PLEM2AOH.js} +3 -3
  19. package/dist/chunk-RNHRR56W.js +25 -0
  20. package/dist/chunk-RNHRR56W.js.map +1 -0
  21. package/dist/{chunk-NVMUSXA5.js → chunk-VUZIISP2.js} +1 -1
  22. package/dist/chunk-VUZIISP2.js.map +1 -0
  23. package/dist/{chunk-XAUB42TO.js → chunk-VZVUANDN.js} +6 -4
  24. package/dist/chunk-VZVUANDN.js.map +1 -0
  25. package/dist/index.browser.cjs +214 -85
  26. package/dist/index.browser.cjs.map +1 -1
  27. package/dist/index.browser.d.cts +24 -9
  28. package/dist/index.browser.d.ts +24 -9
  29. package/dist/index.browser.js +11 -10
  30. package/dist/index.browser.js.map +1 -1
  31. package/dist/index.cjs +214 -85
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.common.cjs +214 -85
  34. package/dist/index.common.cjs.map +1 -1
  35. package/dist/index.common.d.cts +2 -2
  36. package/dist/index.common.d.ts +2 -2
  37. package/dist/index.common.js +9 -8
  38. package/dist/index.d.cts +15 -6
  39. package/dist/index.d.ts +15 -6
  40. package/dist/index.js +13 -12
  41. package/dist/index.js.map +1 -1
  42. package/dist/narou-DBa12V_l.d.ts +404 -0
  43. package/dist/narou-DCp4aGfA.d.cts +404 -0
  44. package/dist/narou-fetch.cjs +4 -1
  45. package/dist/narou-fetch.cjs.map +1 -1
  46. package/dist/narou-fetch.d.cts +2 -2
  47. package/dist/narou-fetch.d.ts +2 -2
  48. package/dist/narou-fetch.js +4 -4
  49. package/dist/narou-jsonp.cjs +4 -1
  50. package/dist/narou-jsonp.cjs.map +1 -1
  51. package/dist/narou-jsonp.d.cts +2 -2
  52. package/dist/narou-jsonp.d.ts +2 -2
  53. package/dist/narou-jsonp.js +4 -4
  54. package/dist/narou-ranking-results.d.cts +2 -2
  55. package/dist/narou-ranking-results.d.ts +2 -2
  56. package/dist/{narou-search-results-DWCJWTC5.d.cts → narou-search-results-C21hWrnL.d.cts} +2 -2
  57. package/dist/{narou-search-results-D5yqPRZ7.d.ts → narou-search-results-DT0YdaBn.d.ts} +2 -2
  58. package/dist/narou-search-results.cjs.map +1 -1
  59. package/dist/narou-search-results.d.cts +1 -1
  60. package/dist/narou-search-results.d.ts +1 -1
  61. package/dist/narou-search-results.js +1 -1
  62. package/dist/narou.cjs +4 -1
  63. package/dist/narou.cjs.map +1 -1
  64. package/dist/narou.d.cts +2 -2
  65. package/dist/narou.d.ts +2 -2
  66. package/dist/narou.js +2 -2
  67. package/dist/params.cjs.map +1 -1
  68. package/dist/params.d.cts +1 -1
  69. package/dist/params.d.ts +1 -1
  70. package/dist/params.js +1 -1
  71. package/dist/ranking-history.cjs +11 -3
  72. package/dist/ranking-history.cjs.map +1 -1
  73. package/dist/ranking-history.d.cts +12 -1
  74. package/dist/ranking-history.d.ts +12 -1
  75. package/dist/ranking-history.js +2 -1
  76. package/dist/ranking.cjs +186 -77
  77. package/dist/ranking.cjs.map +1 -1
  78. package/dist/ranking.d.cts +69 -8
  79. package/dist/ranking.d.ts +69 -8
  80. package/dist/ranking.js +4 -3
  81. package/dist/search-builder-r18.cjs +118 -59
  82. package/dist/search-builder-r18.cjs.map +1 -1
  83. package/dist/search-builder-r18.d.cts +19 -6
  84. package/dist/search-builder-r18.d.ts +19 -6
  85. package/dist/search-builder-r18.js +3 -3
  86. package/dist/search-builder.cjs +135 -69
  87. package/dist/search-builder.cjs.map +1 -1
  88. package/dist/search-builder.d.cts +2 -2
  89. package/dist/search-builder.d.ts +2 -2
  90. package/dist/search-builder.js +2 -2
  91. package/dist/user-search.cjs +37 -13
  92. package/dist/user-search.cjs.map +1 -1
  93. package/dist/user-search.d.cts +2 -2
  94. package/dist/user-search.d.ts +2 -2
  95. package/dist/user-search.js +3 -3
  96. package/dist/util/date.cjs +51 -0
  97. package/dist/util/date.cjs.map +1 -0
  98. package/dist/util/date.d.cts +21 -0
  99. package/dist/util/date.d.ts +21 -0
  100. package/dist/util/date.js +11 -0
  101. package/dist/util/date.js.map +1 -0
  102. package/dist/util/jsonp.cjs.map +1 -1
  103. package/dist/util/jsonp.d.cts +36 -0
  104. package/dist/util/jsonp.d.ts +36 -0
  105. package/dist/util/jsonp.js +1 -1
  106. package/dist/util/type.cjs.map +1 -1
  107. package/dist/util/type.d.cts +23 -0
  108. package/dist/util/type.d.ts +23 -0
  109. package/dist/util/unzipp.cjs.map +1 -1
  110. package/dist/util/unzipp.d.cts +9 -0
  111. package/dist/util/unzipp.d.ts +9 -0
  112. package/dist/util/unzipp.js +1 -1
  113. package/package.json +34 -36
  114. package/pnpm-lock.yaml +2114 -1991
  115. package/src/index.browser.ts +21 -5
  116. package/src/index.ts +11 -2
  117. package/src/narou-search-results.ts +2 -1
  118. package/src/narou.ts +4 -1
  119. package/src/params.ts +1 -1
  120. package/src/ranking-history.ts +13 -4
  121. package/src/ranking.ts +79 -15
  122. package/src/search-builder-r18.ts +17 -4
  123. package/src/search-builder.ts +176 -73
  124. package/src/util/date.ts +38 -0
  125. package/src/util/jsonp.ts +61 -6
  126. package/src/util/type.ts +23 -0
  127. package/src/util/unzipp.ts +9 -0
  128. package/dist/chunk-4VC3246A.js +0 -83
  129. package/dist/chunk-4VC3246A.js.map +0 -1
  130. package/dist/chunk-CDOBNSCL.js.map +0 -1
  131. package/dist/chunk-NVMUSXA5.js.map +0 -1
  132. package/dist/chunk-P7QOZBII.js +0 -386
  133. package/dist/chunk-P7QOZBII.js.map +0 -1
  134. package/dist/chunk-RITMMCZE.js.map +0 -1
  135. package/dist/chunk-WYSPGQ3S.js +0 -44
  136. package/dist/chunk-WYSPGQ3S.js.map +0 -1
  137. package/dist/chunk-XAUB42TO.js.map +0 -1
  138. package/dist/chunk-XVH2CU2Q.js.map +0 -1
  139. package/dist/narou-CatW_TC9.d.cts +0 -301
  140. package/dist/narou-fH9osIoh.d.ts +0 -301
  141. /package/dist/{chunk-K22KVNAH.js.map → chunk-DEQICAN3.js.map} +0 -0
  142. /package/dist/{chunk-AZT2OXBZ.js.map → chunk-LQLNWSWV.js.map} +0 -0
  143. /package/dist/{chunk-SNPBEVCY.js.map → chunk-PLEM2AOH.js.map} +0 -0
@@ -142,7 +142,10 @@ var NarouNovel = class {
142
142
  * @see https://dev.syosetu.com/man/userapi/
143
143
  */
144
144
  async executeUserSearch(params) {
145
- return await this.execute(params, "https://api.syosetu.com/userapi/api/");
145
+ return new NarouSearchResults(
146
+ await this.execute(params, "https://api.syosetu.com/userapi/api/"),
147
+ params
148
+ );
146
149
  }
147
150
  };
148
151
 
@@ -537,14 +540,30 @@ var SearchBuilderBase = class {
537
540
  /**
538
541
  * constructor
539
542
  * @private
543
+ * @param params クエリパラメータ
544
+ * @param api NarouNovel インスタンス
540
545
  */
541
546
  constructor(params = {}, api) {
542
547
  this.params = params;
543
548
  this.api = api;
544
549
  }
550
+ /**
551
+ * 配列から重複を除去する
552
+ * @protected
553
+ * @static
554
+ * @param array 配列
555
+ * @returns 重複を除去した配列
556
+ */
545
557
  static distinct(array) {
546
558
  return Array.from(new Set(array));
547
559
  }
560
+ /**
561
+ * 配列をハイフン区切りの文字列に変換する
562
+ * @protected
563
+ * @static
564
+ * @param n 文字列または数値の配列、あるいは単一の文字列または数値
565
+ * @returns ハイフン区切りの文字列
566
+ */
548
567
  static array2string(n) {
549
568
  if (Array.isArray(n)) {
550
569
  return this.distinct(n).join("-");
@@ -553,44 +572,48 @@ var SearchBuilderBase = class {
553
572
  }
554
573
  }
555
574
  /**
556
- *
557
- * @return {SearchBuilder} this
575
+ * 取得件数を指定する (lim)
576
+ * @param num 取得件数 (1-500)
577
+ * @return {this}
558
578
  */
559
579
  limit(num) {
560
580
  this.set({ lim: num });
561
581
  return this;
562
582
  }
563
583
  /**
564
- *
565
- * @return {SearchBuilder} this
584
+ * 取得開始位置を指定する (st)
585
+ * @param num 取得開始位置 (1-)
586
+ * @return {this}
566
587
  */
567
588
  start(num) {
568
589
  this.set({ st: num });
569
590
  return this;
570
591
  }
571
592
  /**
572
- *
573
- * @return {SearchBuilder} this
593
+ * ページ番号と1ページあたりの件数で取得範囲を指定する
594
+ * @param no ページ番号 (0-)
595
+ * @param count 1ページあたりの件数 (デフォルト: 20)
596
+ * @return {this}
574
597
  */
575
598
  page(no, count = 20) {
576
599
  return this.limit(count).start(no * count);
577
600
  }
578
601
  /**
579
- * 出力順序を指定する。指定しない場合は新着順となります。
580
- * old 古い順
602
+ * 出力順序を指定する (order)
603
+ * 指定しない場合は新着順となります。
581
604
  * @param {TOrder} order 出力順序
582
- * @return {SearchBuilder} this
605
+ * @return {this}
583
606
  */
584
607
  order(order) {
585
608
  this.set({ order });
586
609
  return this;
587
610
  }
588
611
  /**
589
- * gzip圧縮する。
612
+ * gzip圧縮レベルを指定する (gzip)
590
613
  *
591
614
  * 転送量上限を減らすためにも推奨
592
615
  * @param {GzipLevel} level gzip圧縮レベル(1~5)
593
- * @return {SearchBuilder} this
616
+ * @return {this}
594
617
  */
595
618
  gzip(level) {
596
619
  this.set({ gzip: level });
@@ -598,8 +621,9 @@ var SearchBuilderBase = class {
598
621
  }
599
622
  /**
600
623
  * クエリパラメータをセットする
601
- * @private
602
- * @return {SearchBuilder} this
624
+ * @protected
625
+ * @param obj セットするパラメータ
626
+ * @return {this}
603
627
  */
604
628
  set(obj) {
605
629
  this.params = { ...this.params, ...obj };
@@ -607,6 +631,9 @@ var SearchBuilderBase = class {
607
631
  }
608
632
  /**
609
633
  * クエリパラメータを削除する
634
+ * @protected
635
+ * @param key 削除するパラメータのキー
636
+ * @returns {this}
610
637
  */
611
638
  unset(key) {
612
639
  delete this.params[key];
@@ -615,56 +642,65 @@ var SearchBuilderBase = class {
615
642
  };
616
643
  var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilderBase {
617
644
  /**
618
- * a
619
- * @return {SearchBuilder} this
645
+ * 検索語を指定します (word)。
646
+ * 半角または全角スペースで区切るとAND抽出になります。部分一致でHITします。
647
+ * @param word 検索語
648
+ * @return {this}
620
649
  */
621
650
  word(word) {
622
651
  this.set({ word });
623
652
  return this;
624
653
  }
625
654
  /**
626
- *
627
- * @return {SearchBuilder} this
655
+ * 除外したい単語を指定します (notword)。
656
+ * スペースで区切ることにより除外する単語を増やせます。部分一致で除外されます。
657
+ * @param word 除外語
658
+ * @return {this}
628
659
  */
629
660
  notWord(word) {
630
661
  this.set({ notword: word });
631
662
  return this;
632
663
  }
633
664
  /**
634
- *
635
- * @return {SearchBuilder} this
665
+ * 検索対象を作品名に限定するかどうかを指定します (title)。
666
+ * @param bool trueの場合、作品名を検索対象とする (デフォルト: true)
667
+ * @return {this}
636
668
  */
637
669
  byTitle(bool = true) {
638
670
  this.set({ title: bool ? BooleanNumber.True : BooleanNumber.False });
639
671
  return this;
640
672
  }
641
673
  /**
642
- *
643
- * @return {SearchBuilder} this
674
+ * 検索対象をあらすじに限定するかどうかを指定します (ex)。
675
+ * @param bool trueの場合、あらすじを検索対象とする (デフォルト: true)
676
+ * @return {this}
644
677
  */
645
678
  byOutline(bool = true) {
646
679
  this.set({ ex: bool ? BooleanNumber.True : BooleanNumber.False });
647
680
  return this;
648
681
  }
649
682
  /**
650
- *
651
- * @return {SearchBuilder} this
683
+ * 検索対象をキーワードに限定するかどうかを指定します (keyword)。
684
+ * @param bool trueの場合、キーワードを検索対象とする (デフォルト: true)
685
+ * @return {this}
652
686
  */
653
687
  byKeyword(bool = true) {
654
688
  this.set({ keyword: bool ? BooleanNumber.True : BooleanNumber.False });
655
689
  return this;
656
690
  }
657
691
  /**
658
- *
659
- * @return {SearchBuilder} this
692
+ * 検索対象を作者名に限定するかどうかを指定します (wname)。
693
+ * @param bool trueの場合、作者名を検索対象とする (デフォルト: true)
694
+ * @return {this}
660
695
  */
661
696
  byAuthor(bool = true) {
662
697
  this.set({ wname: bool ? BooleanNumber.True : BooleanNumber.False });
663
698
  return this;
664
699
  }
665
700
  /**
666
- *
667
- * @return {SearchBuilder} this
701
+ * ボーイズラブ作品を抽出または除外します (isbl/notbl)。
702
+ * @param bool trueの場合、ボーイズラブ作品を抽出する (デフォルト: true)。falseの場合、除外する。
703
+ * @return {this}
668
704
  */
669
705
  isBL(bool = true) {
670
706
  if (bool) {
@@ -675,8 +711,9 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
675
711
  return this;
676
712
  }
677
713
  /**
678
- *
679
- * @return {SearchBuilder} this
714
+ * ガールズラブ作品を抽出または除外します (isgl/notgl)。
715
+ * @param bool trueの場合、ガールズラブ作品を抽出する (デフォルト: true)。falseの場合、除外する。
716
+ * @return {this}
680
717
  */
681
718
  isGL(bool = true) {
682
719
  if (bool) {
@@ -687,8 +724,9 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
687
724
  return this;
688
725
  }
689
726
  /**
690
- *
691
- * @return {SearchBuilder} this
727
+ * 残酷な描写あり作品を抽出または除外します (iszankoku/notzankoku)。
728
+ * @param bool trueの場合、残酷な描写あり作品を抽出する (デフォルト: true)。falseの場合、除外する。
729
+ * @return {this}
692
730
  */
693
731
  isZankoku(bool = true) {
694
732
  if (bool) {
@@ -699,8 +737,9 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
699
737
  return this;
700
738
  }
701
739
  /**
702
- *
703
- * @return {SearchBuilder} this
740
+ * 異世界転生作品を抽出または除外します (istensei/nottensei)。
741
+ * @param bool trueの場合、異世界転生作品を抽出する (デフォルト: true)。falseの場合、除外する。
742
+ * @return {this}
704
743
  */
705
744
  isTensei(bool = true) {
706
745
  if (bool) {
@@ -711,8 +750,9 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
711
750
  return this;
712
751
  }
713
752
  /**
714
- *
715
- * @return {SearchBuilder} this
753
+ * 異世界転移作品を抽出または除外します (istenni/nottenni)。
754
+ * @param bool trueの場合、異世界転移作品を抽出する (デフォルト: true)。falseの場合、除外する。
755
+ * @return {this}
716
756
  */
717
757
  isTenni(bool = true) {
718
758
  if (bool) {
@@ -723,16 +763,18 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
723
763
  return this;
724
764
  }
725
765
  /**
726
- *
727
- * @return {SearchBuilder} this
766
+ * 異世界転生または異世界転移作品を抽出します (istt)。
767
+ * @return {this}
728
768
  */
729
769
  isTT() {
730
770
  this.set({ istt: BooleanNumber.True });
731
771
  return this;
732
772
  }
733
773
  /**
734
- *
735
- * @return {SearchBuilder} this
774
+ * 抽出する作品の文字数を指定します (length)。
775
+ * 範囲指定する場合は、最小文字数と最大文字数をハイフン(-)記号で区切ってください。
776
+ * @param length 文字数、または[最小文字数, 最大文字数]
777
+ * @return {this}
736
778
  */
737
779
  length(length) {
738
780
  this.set({ length: _NovelSearchBuilderBase.array2string(length) });
@@ -749,59 +791,66 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
749
791
  return this;
750
792
  }
751
793
  /**
752
- *
753
- * @return {SearchBuilder} this
794
+ * 抽出する作品の挿絵数を指定します (sasie)。
795
+ * @param num 挿絵数、または[最小挿絵数, 最大挿絵数]
796
+ * @return {this}
754
797
  */
755
798
  sasie(num) {
756
799
  this.set({ sasie: _NovelSearchBuilderBase.array2string(num) });
757
800
  return this;
758
801
  }
759
802
  /**
760
- *
761
- * @return {SearchBuilder} this
803
+ * 抽出する作品の予想読了時間を分単位で指定します (time)。
804
+ * @param num 読了時間(分)、または[最小読了時間, 最大読了時間]
805
+ * @return {this}
762
806
  */
763
807
  time(num) {
764
808
  this.set({ time: _NovelSearchBuilderBase.array2string(num) });
765
809
  return this;
766
810
  }
767
811
  /**
768
- *
769
- * @return {SearchBuilder} this
812
+ * Nコードを指定して取得します (ncode)。
813
+ * @param ncodes Nコード、またはNコードの配列
814
+ * @return {this}
770
815
  */
771
816
  ncode(ncodes) {
772
817
  this.set({ ncode: _NovelSearchBuilderBase.array2string(ncodes) });
773
818
  return this;
774
819
  }
775
820
  /**
776
- *
777
- * @return {SearchBuilder} this
821
+ * 抽出する小説タイプを指定します (type)。
822
+ * @param type 小説タイプ (t: 短編, r: 連載中, er: 完結済連載小説, ter: 短編と完結済連載小説, re: 連載中と完結済連載小説)
823
+ * @return {this}
778
824
  */
779
825
  type(type) {
780
826
  this.set({ type });
781
827
  return this;
782
828
  }
783
829
  /**
784
- *
785
- * @return {SearchBuilder} this
830
+ * 抽出する作品の文体を指定します (buntai)。
831
+ * 複数指定する場合はハイフン(-)で区切ってください。
832
+ * @param buntai 文体コード、または文体コードの配列
833
+ * @return {this}
786
834
  */
787
835
  buntai(buntai) {
788
836
  this.set({ buntai: _NovelSearchBuilderBase.array2string(buntai) });
789
837
  return this;
790
838
  }
791
839
  /**
792
- *
793
- * @return {SearchBuilder} this
840
+ * 連載停止中作品に関する指定をします (stop)。
841
+ * @param bool trueの場合、長期連載停止中のみ取得する (デフォルト: true)。falseの場合、長期連載停止中を除外する。
842
+ * @return {this}
794
843
  */
795
844
  isStop(bool = true) {
796
845
  this.set({ stop: bool ? StopParam.Stopping : StopParam.NoStopping });
797
846
  return this;
798
847
  }
799
848
  /**
800
- *
801
- * @return {SearchBuilder} this
849
+ * ピックアップ作品のみを取得します (ispickup)。
850
+ * @return {this}
802
851
  */
803
- isPickup(bool = true) {
804
- this.set({ ispickup: bool ? BooleanNumber.True : BooleanNumber.False });
852
+ isPickup() {
853
+ this.set({ ispickup: BooleanNumber.True });
805
854
  return this;
806
855
  }
807
856
  lastUpdate(x, y) {
@@ -842,48 +891,59 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
842
891
  };
843
892
  var SearchBuilder = class _SearchBuilder extends NovelSearchBuilderBase {
844
893
  /**
845
- *
846
- * @return {SearchBuilder} this
894
+ * 大ジャンルを指定して取得します (biggenre)。
895
+ * 複数指定する場合はハイフン(-)で区切ってください。
896
+ * @param genre 大ジャンルコード、または大ジャンルコードの配列
897
+ * @return {this}
847
898
  */
848
899
  bigGenre(genre) {
849
900
  this.set({ biggenre: _SearchBuilder.array2string(genre) });
850
901
  return this;
851
902
  }
852
903
  /**
853
- *
854
- * @return {SearchBuilder} this
904
+ * 除外したい大ジャンルを指定します (notbiggenre)。
905
+ * 複数指定する場合はハイフン(-)で区切ってください。
906
+ * @param genre 除外する大ジャンルコード、または大ジャンルコードの配列
907
+ * @return {this}
855
908
  */
856
909
  notBigGenre(genre) {
857
910
  this.set({ notbiggenre: _SearchBuilder.array2string(genre) });
858
911
  return this;
859
912
  }
860
913
  /**
861
- *
862
- * @return {SearchBuilder} this
914
+ * ジャンルを指定して取得します (genre)。
915
+ * 複数指定する場合はハイフン(-)で区切ってください。
916
+ * @param genre ジャンルコード、またはジャンルコードの配列
917
+ * @return {this}
863
918
  */
864
919
  genre(genre) {
865
920
  this.set({ genre: _SearchBuilder.array2string(genre) });
866
921
  return this;
867
922
  }
868
923
  /**
869
- *
870
- * @return {SearchBuilder} this
924
+ * 除外したいジャンルを指定します (notgenre)。
925
+ * 複数指定する場合はハイフン(-)で区切ってください。
926
+ * @param genre 除外するジャンルコード、またはジャンルコードの配列
927
+ * @return {this}
871
928
  */
872
929
  notGenre(genre) {
873
930
  this.set({ notgenre: _SearchBuilder.array2string(genre) });
874
931
  return this;
875
932
  }
876
933
  /**
877
- *
878
- * @return {SearchBuilder} this
934
+ * ユーザIDを指定して取得します (userid)。
935
+ * 複数指定する場合はハイフン(-)で区切ってください。
936
+ * @param ids ユーザID、またはユーザIDの配列
937
+ * @return {this}
879
938
  */
880
939
  userId(ids) {
881
940
  this.set({ userid: _SearchBuilder.array2string(ids) });
882
941
  return this;
883
942
  }
884
943
  /**
885
- *
886
- * @return {SearchBuilder} this
944
+ * R15作品を抽出または除外します (isr15/notr15)。
945
+ * @param bool trueの場合、R15作品を抽出する (デフォルト: true)。falseの場合、除外する。
946
+ * @return {this}
887
947
  */
888
948
  isR15(bool = true) {
889
949
  if (bool) {
@@ -894,13 +954,22 @@ var SearchBuilder = class _SearchBuilder extends NovelSearchBuilderBase {
894
954
  return this;
895
955
  }
896
956
  /**
897
- *
898
- * @return {SearchBuilder} this
957
+ * 出力する項目を個別に指定します (of)。
958
+ * 未指定時は全項目出力されます。転送量軽減のため、このパラメータの使用が推奨されます。
959
+ * 複数項目を出力する場合はハイフン(-)記号で区切ってください。
960
+ * @param fields 出力するフィールド名、またはフィールド名の配列
961
+ * @return {SearchBuilder<SearchResultFields<TFields>, TOpt>} 型が更新されたビルダー
899
962
  */
900
963
  fields(fields) {
901
964
  this.set({ of: _SearchBuilder.array2string(fields) });
902
965
  return this;
903
966
  }
967
+ /**
968
+ * 出力オプション項目を指定します (opt)。
969
+ * 複数項目を出力する場合はハイフン(-)記号で区切ってください。
970
+ * @param option 出力するオプションフィールド名、またはオプションフィールド名の配列
971
+ * @return {SearchBuilder<T, SearchResultOptionalFields<TFields>>} 型が更新されたビルダー
972
+ */
904
973
  opt(option) {
905
974
  this.set({ opt: _SearchBuilder.array2string(option) });
906
975
  return this;
@@ -917,50 +986,99 @@ var SearchBuilderR18 = class extends NovelSearchBuilderBase {
917
986
  execute() {
918
987
  return this.api.executeNovel18(this.params);
919
988
  }
989
+ /**
990
+ * 抽出するR18サイトを指定します (nocgenre)。
991
+ * @param sites R18サイトコード、またはR18サイトコードの配列 (1: ノクターンノベルズ, 2: ムーンライトノベルズ(男性向け), 3: ムーンライトノベルズ(BL), 4: ミッドナイトノベルズ)
992
+ * @return {this}
993
+ */
920
994
  r18Site(sites) {
921
995
  this.set({ nocgenre: NovelSearchBuilderBase.array2string(sites) });
922
996
  return this;
923
997
  }
924
998
  /**
925
- *
926
- * @return {SearchBuilder} this
999
+ * X-IDを指定して取得します (xid)。
1000
+ * @param ids X-ID、またはX-IDの配列
1001
+ * @return {this}
927
1002
  */
928
1003
  xid(ids) {
929
1004
  this.set({ xid: NovelSearchBuilderBase.array2string(ids) });
930
1005
  return this;
931
1006
  }
932
1007
  /**
933
- *
934
- * @return {SearchBuilder} this
1008
+ * 出力する項目を個別に指定します (of)。
1009
+ * 未指定時は全項目出力されます。転送量軽減のため、このパラメータの使用が推奨されます。
1010
+ * @param fields 出力するR18フィールド名、またはR18フィールド名の配列
1011
+ * @return {SearchBuilderR18<SearchResultR18Fields<R18Fields>>} 型が更新されたビルダー
935
1012
  */
936
1013
  fields(fields) {
937
1014
  this.set({ of: NovelSearchBuilderBase.array2string(fields) });
938
1015
  return this;
939
1016
  }
1017
+ /**
1018
+ * 出力オプション項目を指定します (opt)。
1019
+ * @param option 出力するオプションフィールド名、またはオプションフィールド名の配列
1020
+ * @return {SearchBuilderR18<T, SearchResultOptionalFields<TFields>>} 型が更新されたビルダー
1021
+ */
940
1022
  opt(option) {
941
1023
  this.set({ opt: NovelSearchBuilderBase.array2string(option) });
942
1024
  return this;
943
1025
  }
944
1026
  };
945
1027
 
1028
+ // src/util/date.ts
1029
+ function parseDate(dateStr) {
1030
+ const year = parseInt(dateStr.substring(0, 4), 10);
1031
+ const month = parseInt(dateStr.substring(4, 6), 10) - 1;
1032
+ const day = parseInt(dateStr.substring(6, 8), 10);
1033
+ return new Date(year, month, day, 0, 0, 0, 0);
1034
+ }
1035
+ function formatDate(date) {
1036
+ const year = date.getFullYear();
1037
+ const month = String(date.getMonth() + 1).padStart(2, "0");
1038
+ const day = String(date.getDate()).padStart(2, "0");
1039
+ return `${year}${month}${day}`;
1040
+ }
1041
+ function addDays(date, days) {
1042
+ const result = new Date(date);
1043
+ result.setDate(result.getDate() + days);
1044
+ return result;
1045
+ }
1046
+
946
1047
  // src/ranking.ts
947
- var import_date_fns = require("date-fns");
948
- var dateFormat = "yyyyMMdd";
949
1048
  var RankingBuilder = class {
950
1049
  /**
951
1050
  * constructor
1051
+ * @param params - 初期クエリパラメータ
1052
+ * @param api - API実行クラスのインスタンス
952
1053
  * @private
953
1054
  */
954
1055
  constructor(params = {}, api) {
955
1056
  this.params = params;
956
1057
  this.api = api;
957
- this.date$ = (0, import_date_fns.addDays)(Date.now(), -1);
1058
+ this.date$ = addDays(/* @__PURE__ */ new Date(), -1);
958
1059
  this.type$ = RankingType.Daily;
959
1060
  }
1061
+ /**
1062
+ * ランキング集計対象の日付を指定します。
1063
+ *
1064
+ * - 日間: 任意の日付
1065
+ * - 週間: 火曜日の日付
1066
+ * - 月間・四半期: 1日の日付
1067
+ *
1068
+ * @param date 集計対象の日付
1069
+ * @returns {RankingBuilder} this
1070
+ * @see https://dev.syosetu.com/man/rankapi/
1071
+ */
960
1072
  date(date) {
961
1073
  this.date$ = date;
962
1074
  return this;
963
1075
  }
1076
+ /**
1077
+ * ランキング種別を指定します。
1078
+ * @param type ランキング種別
1079
+ * @returns {RankingBuilder} this
1080
+ * @see https://dev.syosetu.com/man/rankapi/
1081
+ */
964
1082
  type(type) {
965
1083
  this.type$ = type;
966
1084
  return this;
@@ -977,23 +1095,36 @@ var RankingBuilder = class {
977
1095
  return this;
978
1096
  }
979
1097
  /**
980
- * クエリパラメータをセットする
1098
+ * クエリパラメータを内部的にセットします。
1099
+ * @param obj - セットするパラメータオブジェクト
1100
+ * @returns {RankingBuilder} this
981
1101
  * @private
982
- * @return {RankingBuilder} this
983
1102
  */
984
1103
  set(obj) {
985
1104
  Object.assign(this.params, obj);
986
1105
  return this;
987
1106
  }
988
1107
  /**
989
- * なろう小説APIへのリクエストを実行する
990
- * @returns ランキング
1108
+ * 設定されたパラメータに基づき、なろう小説ランキングAPIへのリクエストを実行します。
1109
+ *
1110
+ * 返される結果には、Nコード、ポイント、順位が含まれます。
1111
+ * @returns {Promise<NarouRankingResult[]>} ランキング結果の配列
1112
+ * @see https://dev.syosetu.com/man/rankapi/#output
991
1113
  */
992
1114
  execute() {
993
- const date = (0, import_date_fns.format)(this.date$, dateFormat);
1115
+ const date = formatDate(this.date$);
994
1116
  this.set({ rtype: `${date}-${this.type$}` });
995
1117
  return this.api.executeRanking(this.params);
996
1118
  }
1119
+ /**
1120
+ * ランキングAPIを実行し、取得したNコードを元になろう小説APIで詳細情報を取得して結合します。
1121
+ *
1122
+ * @template TFields - 取得する小説情報のフィールド型
1123
+ * @template TOpt - オプショナルな取得フィールドの型
1124
+ * @param fields - 取得するフィールドの配列 (省略時はデフォルトフィールド)
1125
+ * @param opt - オプショナルな取得フィールド (`weekly` など)
1126
+ * @returns {Promise<RankingResult<SearchResultFields<TFields>>[]>} 詳細情報を含むランキング結果の配列
1127
+ */
997
1128
  async executeWithFields(fields = [], opt) {
998
1129
  const ranking = await this.execute();
999
1130
  const fields$ = Array.isArray(fields) ? fields.length == 0 ? [] : [...fields, Fields.ncode] : [fields, Fields.ncode];
@@ -1015,12 +1146,10 @@ var RankingBuilder = class {
1015
1146
  };
1016
1147
 
1017
1148
  // src/ranking-history.ts
1018
- var import_date_fns2 = require("date-fns");
1019
- var dateFormat2 = "yyyyMMdd";
1020
1149
  function formatRankingHistory(rankin) {
1021
1150
  const { rtype, pt, rank } = rankin;
1022
1151
  const [_date, _type] = rtype.split("-");
1023
- const date = (0, import_date_fns2.parse)(_date, dateFormat2, /* @__PURE__ */ new Date());
1152
+ const date = parseDate(_date);
1024
1153
  const type = _type;
1025
1154
  return { type, date, pt, rank };
1026
1155
  }