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