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
@@ -149,7 +149,10 @@ var NarouNovel = class {
149
149
  * @see https://dev.syosetu.com/man/userapi/
150
150
  */
151
151
  async executeUserSearch(params) {
152
- return await this.execute(params, "https://api.syosetu.com/userapi/api/");
152
+ return new NarouSearchResults(
153
+ await this.execute(params, "https://api.syosetu.com/userapi/api/"),
154
+ params
155
+ );
153
156
  }
154
157
  };
155
158
 
@@ -594,14 +597,30 @@ var SearchBuilderBase = class {
594
597
  /**
595
598
  * constructor
596
599
  * @private
600
+ * @param params クエリパラメータ
601
+ * @param api NarouNovel インスタンス
597
602
  */
598
603
  constructor(params = {}, api) {
599
604
  this.params = params;
600
605
  this.api = api;
601
606
  }
607
+ /**
608
+ * 配列から重複を除去する
609
+ * @protected
610
+ * @static
611
+ * @param array 配列
612
+ * @returns 重複を除去した配列
613
+ */
602
614
  static distinct(array) {
603
615
  return Array.from(new Set(array));
604
616
  }
617
+ /**
618
+ * 配列をハイフン区切りの文字列に変換する
619
+ * @protected
620
+ * @static
621
+ * @param n 文字列または数値の配列、あるいは単一の文字列または数値
622
+ * @returns ハイフン区切りの文字列
623
+ */
605
624
  static array2string(n) {
606
625
  if (Array.isArray(n)) {
607
626
  return this.distinct(n).join("-");
@@ -610,44 +629,48 @@ var SearchBuilderBase = class {
610
629
  }
611
630
  }
612
631
  /**
613
- *
614
- * @return {SearchBuilder} this
632
+ * 取得件数を指定する (lim)
633
+ * @param num 取得件数 (1-500)
634
+ * @return {this}
615
635
  */
616
636
  limit(num) {
617
637
  this.set({ lim: num });
618
638
  return this;
619
639
  }
620
640
  /**
621
- *
622
- * @return {SearchBuilder} this
641
+ * 取得開始位置を指定する (st)
642
+ * @param num 取得開始位置 (1-)
643
+ * @return {this}
623
644
  */
624
645
  start(num) {
625
646
  this.set({ st: num });
626
647
  return this;
627
648
  }
628
649
  /**
629
- *
630
- * @return {SearchBuilder} this
650
+ * ページ番号と1ページあたりの件数で取得範囲を指定する
651
+ * @param no ページ番号 (0-)
652
+ * @param count 1ページあたりの件数 (デフォルト: 20)
653
+ * @return {this}
631
654
  */
632
655
  page(no, count2 = 20) {
633
656
  return this.limit(count2).start(no * count2);
634
657
  }
635
658
  /**
636
- * 出力順序を指定する。指定しない場合は新着順となります。
637
- * old 古い順
659
+ * 出力順序を指定する (order)
660
+ * 指定しない場合は新着順となります。
638
661
  * @param {TOrder} order 出力順序
639
- * @return {SearchBuilder} this
662
+ * @return {this}
640
663
  */
641
664
  order(order) {
642
665
  this.set({ order });
643
666
  return this;
644
667
  }
645
668
  /**
646
- * gzip圧縮する。
669
+ * gzip圧縮レベルを指定する (gzip)
647
670
  *
648
671
  * 転送量上限を減らすためにも推奨
649
672
  * @param {GzipLevel} level gzip圧縮レベル(1~5)
650
- * @return {SearchBuilder} this
673
+ * @return {this}
651
674
  */
652
675
  gzip(level) {
653
676
  this.set({ gzip: level });
@@ -655,8 +678,9 @@ var SearchBuilderBase = class {
655
678
  }
656
679
  /**
657
680
  * クエリパラメータをセットする
658
- * @private
659
- * @return {SearchBuilder} this
681
+ * @protected
682
+ * @param obj セットするパラメータ
683
+ * @return {this}
660
684
  */
661
685
  set(obj) {
662
686
  this.params = { ...this.params, ...obj };
@@ -664,6 +688,9 @@ var SearchBuilderBase = class {
664
688
  }
665
689
  /**
666
690
  * クエリパラメータを削除する
691
+ * @protected
692
+ * @param key 削除するパラメータのキー
693
+ * @returns {this}
667
694
  */
668
695
  unset(key) {
669
696
  delete this.params[key];
@@ -672,56 +699,65 @@ var SearchBuilderBase = class {
672
699
  };
673
700
  var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilderBase {
674
701
  /**
675
- * a
676
- * @return {SearchBuilder} this
702
+ * 検索語を指定します (word)。
703
+ * 半角または全角スペースで区切るとAND抽出になります。部分一致でHITします。
704
+ * @param word 検索語
705
+ * @return {this}
677
706
  */
678
707
  word(word) {
679
708
  this.set({ word });
680
709
  return this;
681
710
  }
682
711
  /**
683
- *
684
- * @return {SearchBuilder} this
712
+ * 除外したい単語を指定します (notword)。
713
+ * スペースで区切ることにより除外する単語を増やせます。部分一致で除外されます。
714
+ * @param word 除外語
715
+ * @return {this}
685
716
  */
686
717
  notWord(word) {
687
718
  this.set({ notword: word });
688
719
  return this;
689
720
  }
690
721
  /**
691
- *
692
- * @return {SearchBuilder} this
722
+ * 検索対象を作品名に限定するかどうかを指定します (title)。
723
+ * @param bool trueの場合、作品名を検索対象とする (デフォルト: true)
724
+ * @return {this}
693
725
  */
694
726
  byTitle(bool = true) {
695
727
  this.set({ title: bool ? BooleanNumber.True : BooleanNumber.False });
696
728
  return this;
697
729
  }
698
730
  /**
699
- *
700
- * @return {SearchBuilder} this
731
+ * 検索対象をあらすじに限定するかどうかを指定します (ex)。
732
+ * @param bool trueの場合、あらすじを検索対象とする (デフォルト: true)
733
+ * @return {this}
701
734
  */
702
735
  byOutline(bool = true) {
703
736
  this.set({ ex: bool ? BooleanNumber.True : BooleanNumber.False });
704
737
  return this;
705
738
  }
706
739
  /**
707
- *
708
- * @return {SearchBuilder} this
740
+ * 検索対象をキーワードに限定するかどうかを指定します (keyword)。
741
+ * @param bool trueの場合、キーワードを検索対象とする (デフォルト: true)
742
+ * @return {this}
709
743
  */
710
744
  byKeyword(bool = true) {
711
745
  this.set({ keyword: bool ? BooleanNumber.True : BooleanNumber.False });
712
746
  return this;
713
747
  }
714
748
  /**
715
- *
716
- * @return {SearchBuilder} this
749
+ * 検索対象を作者名に限定するかどうかを指定します (wname)。
750
+ * @param bool trueの場合、作者名を検索対象とする (デフォルト: true)
751
+ * @return {this}
717
752
  */
718
753
  byAuthor(bool = true) {
719
754
  this.set({ wname: bool ? BooleanNumber.True : BooleanNumber.False });
720
755
  return this;
721
756
  }
722
757
  /**
723
- *
724
- * @return {SearchBuilder} this
758
+ * ボーイズラブ作品を抽出または除外します (isbl/notbl)。
759
+ * @param bool trueの場合、ボーイズラブ作品を抽出する (デフォルト: true)。falseの場合、除外する。
760
+ * @return {this}
725
761
  */
726
762
  isBL(bool = true) {
727
763
  if (bool) {
@@ -732,8 +768,9 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
732
768
  return this;
733
769
  }
734
770
  /**
735
- *
736
- * @return {SearchBuilder} this
771
+ * ガールズラブ作品を抽出または除外します (isgl/notgl)。
772
+ * @param bool trueの場合、ガールズラブ作品を抽出する (デフォルト: true)。falseの場合、除外する。
773
+ * @return {this}
737
774
  */
738
775
  isGL(bool = true) {
739
776
  if (bool) {
@@ -744,8 +781,9 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
744
781
  return this;
745
782
  }
746
783
  /**
747
- *
748
- * @return {SearchBuilder} this
784
+ * 残酷な描写あり作品を抽出または除外します (iszankoku/notzankoku)。
785
+ * @param bool trueの場合、残酷な描写あり作品を抽出する (デフォルト: true)。falseの場合、除外する。
786
+ * @return {this}
749
787
  */
750
788
  isZankoku(bool = true) {
751
789
  if (bool) {
@@ -756,8 +794,9 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
756
794
  return this;
757
795
  }
758
796
  /**
759
- *
760
- * @return {SearchBuilder} this
797
+ * 異世界転生作品を抽出または除外します (istensei/nottensei)。
798
+ * @param bool trueの場合、異世界転生作品を抽出する (デフォルト: true)。falseの場合、除外する。
799
+ * @return {this}
761
800
  */
762
801
  isTensei(bool = true) {
763
802
  if (bool) {
@@ -768,8 +807,9 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
768
807
  return this;
769
808
  }
770
809
  /**
771
- *
772
- * @return {SearchBuilder} this
810
+ * 異世界転移作品を抽出または除外します (istenni/nottenni)。
811
+ * @param bool trueの場合、異世界転移作品を抽出する (デフォルト: true)。falseの場合、除外する。
812
+ * @return {this}
773
813
  */
774
814
  isTenni(bool = true) {
775
815
  if (bool) {
@@ -780,16 +820,18 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
780
820
  return this;
781
821
  }
782
822
  /**
783
- *
784
- * @return {SearchBuilder} this
823
+ * 異世界転生または異世界転移作品を抽出します (istt)。
824
+ * @return {this}
785
825
  */
786
826
  isTT() {
787
827
  this.set({ istt: BooleanNumber.True });
788
828
  return this;
789
829
  }
790
830
  /**
791
- *
792
- * @return {SearchBuilder} this
831
+ * 抽出する作品の文字数を指定します (length)。
832
+ * 範囲指定する場合は、最小文字数と最大文字数をハイフン(-)記号で区切ってください。
833
+ * @param length 文字数、または[最小文字数, 最大文字数]
834
+ * @return {this}
793
835
  */
794
836
  length(length) {
795
837
  this.set({ length: _NovelSearchBuilderBase.array2string(length) });
@@ -806,59 +848,66 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
806
848
  return this;
807
849
  }
808
850
  /**
809
- *
810
- * @return {SearchBuilder} this
851
+ * 抽出する作品の挿絵数を指定します (sasie)。
852
+ * @param num 挿絵数、または[最小挿絵数, 最大挿絵数]
853
+ * @return {this}
811
854
  */
812
855
  sasie(num) {
813
856
  this.set({ sasie: _NovelSearchBuilderBase.array2string(num) });
814
857
  return this;
815
858
  }
816
859
  /**
817
- *
818
- * @return {SearchBuilder} this
860
+ * 抽出する作品の予想読了時間を分単位で指定します (time)。
861
+ * @param num 読了時間(分)、または[最小読了時間, 最大読了時間]
862
+ * @return {this}
819
863
  */
820
864
  time(num) {
821
865
  this.set({ time: _NovelSearchBuilderBase.array2string(num) });
822
866
  return this;
823
867
  }
824
868
  /**
825
- *
826
- * @return {SearchBuilder} this
869
+ * Nコードを指定して取得します (ncode)。
870
+ * @param ncodes Nコード、またはNコードの配列
871
+ * @return {this}
827
872
  */
828
873
  ncode(ncodes) {
829
874
  this.set({ ncode: _NovelSearchBuilderBase.array2string(ncodes) });
830
875
  return this;
831
876
  }
832
877
  /**
833
- *
834
- * @return {SearchBuilder} this
878
+ * 抽出する小説タイプを指定します (type)。
879
+ * @param type 小説タイプ (t: 短編, r: 連載中, er: 完結済連載小説, ter: 短編と完結済連載小説, re: 連載中と完結済連載小説)
880
+ * @return {this}
835
881
  */
836
882
  type(type) {
837
883
  this.set({ type });
838
884
  return this;
839
885
  }
840
886
  /**
841
- *
842
- * @return {SearchBuilder} this
887
+ * 抽出する作品の文体を指定します (buntai)。
888
+ * 複数指定する場合はハイフン(-)で区切ってください。
889
+ * @param buntai 文体コード、または文体コードの配列
890
+ * @return {this}
843
891
  */
844
892
  buntai(buntai) {
845
893
  this.set({ buntai: _NovelSearchBuilderBase.array2string(buntai) });
846
894
  return this;
847
895
  }
848
896
  /**
849
- *
850
- * @return {SearchBuilder} this
897
+ * 連載停止中作品に関する指定をします (stop)。
898
+ * @param bool trueの場合、長期連載停止中のみ取得する (デフォルト: true)。falseの場合、長期連載停止中を除外する。
899
+ * @return {this}
851
900
  */
852
901
  isStop(bool = true) {
853
902
  this.set({ stop: bool ? StopParam.Stopping : StopParam.NoStopping });
854
903
  return this;
855
904
  }
856
905
  /**
857
- *
858
- * @return {SearchBuilder} this
906
+ * ピックアップ作品のみを取得します (ispickup)。
907
+ * @return {this}
859
908
  */
860
- isPickup(bool = true) {
861
- this.set({ ispickup: bool ? BooleanNumber.True : BooleanNumber.False });
909
+ isPickup() {
910
+ this.set({ ispickup: BooleanNumber.True });
862
911
  return this;
863
912
  }
864
913
  lastUpdate(x, y) {
@@ -899,48 +948,59 @@ var NovelSearchBuilderBase = class _NovelSearchBuilderBase extends SearchBuilder
899
948
  };
900
949
  var SearchBuilder = class _SearchBuilder extends NovelSearchBuilderBase {
901
950
  /**
902
- *
903
- * @return {SearchBuilder} this
951
+ * 大ジャンルを指定して取得します (biggenre)。
952
+ * 複数指定する場合はハイフン(-)で区切ってください。
953
+ * @param genre 大ジャンルコード、または大ジャンルコードの配列
954
+ * @return {this}
904
955
  */
905
956
  bigGenre(genre) {
906
957
  this.set({ biggenre: _SearchBuilder.array2string(genre) });
907
958
  return this;
908
959
  }
909
960
  /**
910
- *
911
- * @return {SearchBuilder} this
961
+ * 除外したい大ジャンルを指定します (notbiggenre)。
962
+ * 複数指定する場合はハイフン(-)で区切ってください。
963
+ * @param genre 除外する大ジャンルコード、または大ジャンルコードの配列
964
+ * @return {this}
912
965
  */
913
966
  notBigGenre(genre) {
914
967
  this.set({ notbiggenre: _SearchBuilder.array2string(genre) });
915
968
  return this;
916
969
  }
917
970
  /**
918
- *
919
- * @return {SearchBuilder} this
971
+ * ジャンルを指定して取得します (genre)。
972
+ * 複数指定する場合はハイフン(-)で区切ってください。
973
+ * @param genre ジャンルコード、またはジャンルコードの配列
974
+ * @return {this}
920
975
  */
921
976
  genre(genre) {
922
977
  this.set({ genre: _SearchBuilder.array2string(genre) });
923
978
  return this;
924
979
  }
925
980
  /**
926
- *
927
- * @return {SearchBuilder} this
981
+ * 除外したいジャンルを指定します (notgenre)。
982
+ * 複数指定する場合はハイフン(-)で区切ってください。
983
+ * @param genre 除外するジャンルコード、またはジャンルコードの配列
984
+ * @return {this}
928
985
  */
929
986
  notGenre(genre) {
930
987
  this.set({ notgenre: _SearchBuilder.array2string(genre) });
931
988
  return this;
932
989
  }
933
990
  /**
934
- *
935
- * @return {SearchBuilder} this
991
+ * ユーザIDを指定して取得します (userid)。
992
+ * 複数指定する場合はハイフン(-)で区切ってください。
993
+ * @param ids ユーザID、またはユーザIDの配列
994
+ * @return {this}
936
995
  */
937
996
  userId(ids) {
938
997
  this.set({ userid: _SearchBuilder.array2string(ids) });
939
998
  return this;
940
999
  }
941
1000
  /**
942
- *
943
- * @return {SearchBuilder} this
1001
+ * R15作品を抽出または除外します (isr15/notr15)。
1002
+ * @param bool trueの場合、R15作品を抽出する (デフォルト: true)。falseの場合、除外する。
1003
+ * @return {this}
944
1004
  */
945
1005
  isR15(bool = true) {
946
1006
  if (bool) {
@@ -951,13 +1011,22 @@ var SearchBuilder = class _SearchBuilder extends NovelSearchBuilderBase {
951
1011
  return this;
952
1012
  }
953
1013
  /**
954
- *
955
- * @return {SearchBuilder} this
1014
+ * 出力する項目を個別に指定します (of)。
1015
+ * 未指定時は全項目出力されます。転送量軽減のため、このパラメータの使用が推奨されます。
1016
+ * 複数項目を出力する場合はハイフン(-)記号で区切ってください。
1017
+ * @param fields 出力するフィールド名、またはフィールド名の配列
1018
+ * @return {SearchBuilder<SearchResultFields<TFields>, TOpt>} 型が更新されたビルダー
956
1019
  */
957
1020
  fields(fields) {
958
1021
  this.set({ of: _SearchBuilder.array2string(fields) });
959
1022
  return this;
960
1023
  }
1024
+ /**
1025
+ * 出力オプション項目を指定します (opt)。
1026
+ * 複数項目を出力する場合はハイフン(-)記号で区切ってください。
1027
+ * @param option 出力するオプションフィールド名、またはオプションフィールド名の配列
1028
+ * @return {SearchBuilder<T, SearchResultOptionalFields<TFields>>} 型が更新されたビルダー
1029
+ */
961
1030
  opt(option) {
962
1031
  this.set({ opt: _SearchBuilder.array2string(option) });
963
1032
  return this;
@@ -974,50 +1043,99 @@ var SearchBuilderR18 = class extends NovelSearchBuilderBase {
974
1043
  execute() {
975
1044
  return this.api.executeNovel18(this.params);
976
1045
  }
1046
+ /**
1047
+ * 抽出するR18サイトを指定します (nocgenre)。
1048
+ * @param sites R18サイトコード、またはR18サイトコードの配列 (1: ノクターンノベルズ, 2: ムーンライトノベルズ(男性向け), 3: ムーンライトノベルズ(BL), 4: ミッドナイトノベルズ)
1049
+ * @return {this}
1050
+ */
977
1051
  r18Site(sites) {
978
1052
  this.set({ nocgenre: NovelSearchBuilderBase.array2string(sites) });
979
1053
  return this;
980
1054
  }
981
1055
  /**
982
- *
983
- * @return {SearchBuilder} this
1056
+ * X-IDを指定して取得します (xid)。
1057
+ * @param ids X-ID、またはX-IDの配列
1058
+ * @return {this}
984
1059
  */
985
1060
  xid(ids) {
986
1061
  this.set({ xid: NovelSearchBuilderBase.array2string(ids) });
987
1062
  return this;
988
1063
  }
989
1064
  /**
990
- *
991
- * @return {SearchBuilder} this
1065
+ * 出力する項目を個別に指定します (of)。
1066
+ * 未指定時は全項目出力されます。転送量軽減のため、このパラメータの使用が推奨されます。
1067
+ * @param fields 出力するR18フィールド名、またはR18フィールド名の配列
1068
+ * @return {SearchBuilderR18<SearchResultR18Fields<R18Fields>>} 型が更新されたビルダー
992
1069
  */
993
1070
  fields(fields) {
994
1071
  this.set({ of: NovelSearchBuilderBase.array2string(fields) });
995
1072
  return this;
996
1073
  }
1074
+ /**
1075
+ * 出力オプション項目を指定します (opt)。
1076
+ * @param option 出力するオプションフィールド名、またはオプションフィールド名の配列
1077
+ * @return {SearchBuilderR18<T, SearchResultOptionalFields<TFields>>} 型が更新されたビルダー
1078
+ */
997
1079
  opt(option) {
998
1080
  this.set({ opt: NovelSearchBuilderBase.array2string(option) });
999
1081
  return this;
1000
1082
  }
1001
1083
  };
1002
1084
 
1085
+ // src/util/date.ts
1086
+ function parseDate(dateStr) {
1087
+ const year = parseInt(dateStr.substring(0, 4), 10);
1088
+ const month = parseInt(dateStr.substring(4, 6), 10) - 1;
1089
+ const day = parseInt(dateStr.substring(6, 8), 10);
1090
+ return new Date(year, month, day, 0, 0, 0, 0);
1091
+ }
1092
+ function formatDate(date) {
1093
+ const year = date.getFullYear();
1094
+ const month = String(date.getMonth() + 1).padStart(2, "0");
1095
+ const day = String(date.getDate()).padStart(2, "0");
1096
+ return `${year}${month}${day}`;
1097
+ }
1098
+ function addDays(date, days) {
1099
+ const result = new Date(date);
1100
+ result.setDate(result.getDate() + days);
1101
+ return result;
1102
+ }
1103
+
1003
1104
  // src/ranking.ts
1004
- var import_date_fns = require("date-fns");
1005
- var dateFormat = "yyyyMMdd";
1006
1105
  var RankingBuilder = class {
1007
1106
  /**
1008
1107
  * constructor
1108
+ * @param params - 初期クエリパラメータ
1109
+ * @param api - API実行クラスのインスタンス
1009
1110
  * @private
1010
1111
  */
1011
1112
  constructor(params = {}, api) {
1012
1113
  this.params = params;
1013
1114
  this.api = api;
1014
- this.date$ = (0, import_date_fns.addDays)(Date.now(), -1);
1115
+ this.date$ = addDays(/* @__PURE__ */ new Date(), -1);
1015
1116
  this.type$ = RankingType.Daily;
1016
1117
  }
1118
+ /**
1119
+ * ランキング集計対象の日付を指定します。
1120
+ *
1121
+ * - 日間: 任意の日付
1122
+ * - 週間: 火曜日の日付
1123
+ * - 月間・四半期: 1日の日付
1124
+ *
1125
+ * @param date 集計対象の日付
1126
+ * @returns {RankingBuilder} this
1127
+ * @see https://dev.syosetu.com/man/rankapi/
1128
+ */
1017
1129
  date(date) {
1018
1130
  this.date$ = date;
1019
1131
  return this;
1020
1132
  }
1133
+ /**
1134
+ * ランキング種別を指定します。
1135
+ * @param type ランキング種別
1136
+ * @returns {RankingBuilder} this
1137
+ * @see https://dev.syosetu.com/man/rankapi/
1138
+ */
1021
1139
  type(type) {
1022
1140
  this.type$ = type;
1023
1141
  return this;
@@ -1034,23 +1152,36 @@ var RankingBuilder = class {
1034
1152
  return this;
1035
1153
  }
1036
1154
  /**
1037
- * クエリパラメータをセットする
1155
+ * クエリパラメータを内部的にセットします。
1156
+ * @param obj - セットするパラメータオブジェクト
1157
+ * @returns {RankingBuilder} this
1038
1158
  * @private
1039
- * @return {RankingBuilder} this
1040
1159
  */
1041
1160
  set(obj) {
1042
1161
  Object.assign(this.params, obj);
1043
1162
  return this;
1044
1163
  }
1045
1164
  /**
1046
- * なろう小説APIへのリクエストを実行する
1047
- * @returns ランキング
1165
+ * 設定されたパラメータに基づき、なろう小説ランキングAPIへのリクエストを実行します。
1166
+ *
1167
+ * 返される結果には、Nコード、ポイント、順位が含まれます。
1168
+ * @returns {Promise<NarouRankingResult[]>} ランキング結果の配列
1169
+ * @see https://dev.syosetu.com/man/rankapi/#output
1048
1170
  */
1049
1171
  execute() {
1050
- const date = (0, import_date_fns.format)(this.date$, dateFormat);
1172
+ const date = formatDate(this.date$);
1051
1173
  this.set({ rtype: `${date}-${this.type$}` });
1052
1174
  return this.api.executeRanking(this.params);
1053
1175
  }
1176
+ /**
1177
+ * ランキングAPIを実行し、取得したNコードを元になろう小説APIで詳細情報を取得して結合します。
1178
+ *
1179
+ * @template TFields - 取得する小説情報のフィールド型
1180
+ * @template TOpt - オプショナルな取得フィールドの型
1181
+ * @param fields - 取得するフィールドの配列 (省略時はデフォルトフィールド)
1182
+ * @param opt - オプショナルな取得フィールド (`weekly` など)
1183
+ * @returns {Promise<RankingResult<SearchResultFields<TFields>>[]>} 詳細情報を含むランキング結果の配列
1184
+ */
1054
1185
  async executeWithFields(fields = [], opt) {
1055
1186
  const ranking2 = await this.execute();
1056
1187
  const fields$ = Array.isArray(fields) ? fields.length == 0 ? [] : [...fields, Fields.ncode] : [fields, Fields.ncode];
@@ -1072,12 +1203,10 @@ var RankingBuilder = class {
1072
1203
  };
1073
1204
 
1074
1205
  // src/ranking-history.ts
1075
- var import_date_fns2 = require("date-fns");
1076
- var dateFormat2 = "yyyyMMdd";
1077
1206
  function formatRankingHistory(rankin) {
1078
1207
  const { rtype, pt, rank } = rankin;
1079
1208
  const [_date, _type] = rtype.split("-");
1080
- const date = (0, import_date_fns2.parse)(_date, dateFormat2, /* @__PURE__ */ new Date());
1209
+ const date = parseDate(_date);
1081
1210
  const type = _type;
1082
1211
  return { type, date, pt, rank };
1083
1212
  }