narou 0.7.7 → 0.8.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 (58) hide show
  1. package/dist/index.browser.d.ts +7 -1
  2. package/dist/index.browser.d.ts.map +1 -1
  3. package/dist/index.browser.js +37 -77
  4. package/dist/index.browser.js.map +1 -1
  5. package/dist/index.common.d.ts +12 -7
  6. package/dist/index.common.d.ts.map +1 -1
  7. package/dist/index.common.js +30 -20
  8. package/dist/index.common.js.map +1 -1
  9. package/dist/index.d.ts +15 -3
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +46 -80
  12. package/dist/index.js.map +1 -1
  13. package/dist/narou-fetch.js +35 -118
  14. package/dist/narou-fetch.js.map +1 -1
  15. package/dist/narou-jsonp.js +14 -91
  16. package/dist/narou-jsonp.js.map +1 -1
  17. package/dist/narou-search-results.d.ts +20 -10
  18. package/dist/narou-search-results.d.ts.map +1 -1
  19. package/dist/narou-search-results.js +6 -9
  20. package/dist/narou-search-results.js.map +1 -1
  21. package/dist/narou.d.ts +7 -6
  22. package/dist/narou.d.ts.map +1 -1
  23. package/dist/narou.js +20 -95
  24. package/dist/narou.js.map +1 -1
  25. package/dist/params.d.ts +55 -14
  26. package/dist/params.d.ts.map +1 -1
  27. package/dist/params.js +56 -39
  28. package/dist/params.js.map +1 -1
  29. package/dist/ranking-history.js +7 -7
  30. package/dist/ranking-history.js.map +1 -1
  31. package/dist/ranking.js +41 -110
  32. package/dist/ranking.js.map +1 -1
  33. package/dist/search-builder-r18.d.ts +5 -5
  34. package/dist/search-builder-r18.d.ts.map +1 -1
  35. package/dist/search-builder-r18.js +17 -37
  36. package/dist/search-builder-r18.js.map +1 -1
  37. package/dist/search-builder.d.ts +50 -65
  38. package/dist/search-builder.d.ts.map +1 -1
  39. package/dist/search-builder.js +155 -215
  40. package/dist/search-builder.js.map +1 -1
  41. package/dist/user-search.d.ts +63 -0
  42. package/dist/user-search.d.ts.map +1 -0
  43. package/dist/user-search.js +94 -0
  44. package/dist/user-search.js.map +1 -0
  45. package/dist/util/jsonp.js +12 -14
  46. package/dist/util/jsonp.js.map +1 -1
  47. package/dist/util/unzipp.js +6 -51
  48. package/dist/util/unzipp.js.map +1 -1
  49. package/package.json +18 -8
  50. package/src/index.browser.ts +12 -1
  51. package/src/index.common.ts +18 -29
  52. package/src/index.ts +20 -3
  53. package/src/narou-search-results.ts +20 -7
  54. package/src/narou.ts +26 -11
  55. package/src/params.ts +60 -15
  56. package/src/search-builder-r18.ts +9 -9
  57. package/src/search-builder.ts +96 -102
  58. package/src/user-search.ts +109 -0
@@ -0,0 +1,63 @@
1
+ import NarouSearchResults, { UserSearchResult, UserSearchResultFields } from "./narou-search-results";
2
+ import { UserFields, UserOrder, UserSearchParams } from "./params";
3
+ import { SearchBuilderBase } from "./search-builder";
4
+ /**
5
+ * なろうユーザ検索API
6
+ * @class UserSearch
7
+ */
8
+ export default class UserSearchBuilder<TField extends keyof UserSearchResult = keyof UserSearchResult> extends SearchBuilderBase<UserSearchParams, UserOrder> {
9
+ /**
10
+ * 単語を指定できます。
11
+ * 半角または全角スペースで区切るとAND抽出になります。
12
+ * 部分一致でHITします。検索の対象はユーザ名とユーザ名のフリガナです。
13
+ */
14
+ word(word: string): this;
15
+ /**
16
+ * 含みたくない単語を指定できます。
17
+ * スペースで区切ることにより含ませない単語を増やせます。部分一致で除外されます。
18
+ * 除外の対象はユーザ名とユーザ名のフリガナです。
19
+ */
20
+ notWord(notword: string): this;
21
+ /**
22
+ * ユーザIDで抽出可能。
23
+ */
24
+ userId(userid: number): this;
25
+ /**
26
+ * 抽出するユーザのユーザ名のフリガナの頭文字を指定できます。
27
+ * 頭文字はユーザ名のフリガナをひらがなに変換し、最初の1文字が「ぁ」~「ん」の場合に対象となります。
28
+ * 「ぱ」や「ば」等の半濁音や濁音は清音として扱われます。
29
+ * 漢字や英数字が頭文字のユーザは対象外です。
30
+ */
31
+ name1st(name1st: string): this;
32
+ /**
33
+ * 抽出するユーザの小説投稿数の下限を指定できます。
34
+ * 小説投稿件数が指定された数値以上のユーザを抽出します。
35
+ */
36
+ minNovel(minnovel: number): this;
37
+ /**
38
+ * 抽出するユーザの小説投稿数の上限を指定できます。
39
+ * 小説投稿件数が指定された数値以下のユーザを抽出します。
40
+ */
41
+ maxNovel(maxnovel: number): this;
42
+ /**
43
+ * 抽出するユーザのレビュー投稿数の下限を指定できます。
44
+ * レビュー投稿件数が指定された数値以上のユーザを抽出します。
45
+ */
46
+ minReview(minreview: number): this;
47
+ /**
48
+ * 抽出するユーザのレビュー投稿数の上限を指定できます。
49
+ * レビュー投稿件数が指定された数値以下のユーザを抽出します。
50
+ */
51
+ maxReview(maxreview: number): this;
52
+ /**
53
+ * 出力する項目を個別に指定できます。未指定時は全項目出力されます。転送量軽減のため、このパラメータの使用が推奨されます。
54
+ * @return {SearchBuilder} this
55
+ */
56
+ fields<TFields extends UserFields>(fields: TFields | readonly TFields[]): UserSearchBuilder<UserSearchResultFields<TFields>>;
57
+ /**
58
+ * なろう小説APIへのリクエストを実行する
59
+ * @returns ランキング
60
+ */
61
+ execute(): Promise<NarouSearchResults<UserSearchResult, TField>>;
62
+ }
63
+ //# sourceMappingURL=user-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-search.d.ts","sourceRoot":"","sources":["../src/user-search.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,EAAE,EACzB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB,CACpC,MAAM,SAAS,MAAM,gBAAgB,GAAG,MAAM,gBAAgB,CAC9D,SAAQ,iBAAiB,CAAC,gBAAgB,EAAE,SAAS,CAAC;IACtD;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM;IAKjB;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM;IAKvB;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM;IAKrB;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM;IAKvB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAKzB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAKzB;;;OAGG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM;IAK3B;;;OAGG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM;IAK3B;;;OAGG;IACH,MAAM,CAAC,OAAO,SAAS,UAAU,EAC/B,MAAM,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,GACnC,iBAAiB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAMrD;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;CAGjE"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const search_builder_1 = require("./search-builder");
4
+ /**
5
+ * なろうユーザ検索API
6
+ * @class UserSearch
7
+ */
8
+ class UserSearchBuilder extends search_builder_1.SearchBuilderBase {
9
+ /**
10
+ * 単語を指定できます。
11
+ * 半角または全角スペースで区切るとAND抽出になります。
12
+ * 部分一致でHITします。検索の対象はユーザ名とユーザ名のフリガナです。
13
+ */
14
+ word(word) {
15
+ this.set({ word });
16
+ return this;
17
+ }
18
+ /**
19
+ * 含みたくない単語を指定できます。
20
+ * スペースで区切ることにより含ませない単語を増やせます。部分一致で除外されます。
21
+ * 除外の対象はユーザ名とユーザ名のフリガナです。
22
+ */
23
+ notWord(notword) {
24
+ this.set({ notword });
25
+ return this;
26
+ }
27
+ /**
28
+ * ユーザIDで抽出可能。
29
+ */
30
+ userId(userid) {
31
+ this.set({ userid });
32
+ return this;
33
+ }
34
+ /**
35
+ * 抽出するユーザのユーザ名のフリガナの頭文字を指定できます。
36
+ * 頭文字はユーザ名のフリガナをひらがなに変換し、最初の1文字が「ぁ」~「ん」の場合に対象となります。
37
+ * 「ぱ」や「ば」等の半濁音や濁音は清音として扱われます。
38
+ * 漢字や英数字が頭文字のユーザは対象外です。
39
+ */
40
+ name1st(name1st) {
41
+ this.set({ name1st });
42
+ return this;
43
+ }
44
+ /**
45
+ * 抽出するユーザの小説投稿数の下限を指定できます。
46
+ * 小説投稿件数が指定された数値以上のユーザを抽出します。
47
+ */
48
+ minNovel(minnovel) {
49
+ this.set({ minnovel });
50
+ return this;
51
+ }
52
+ /**
53
+ * 抽出するユーザの小説投稿数の上限を指定できます。
54
+ * 小説投稿件数が指定された数値以下のユーザを抽出します。
55
+ */
56
+ maxNovel(maxnovel) {
57
+ this.set({ maxnovel });
58
+ return this;
59
+ }
60
+ /**
61
+ * 抽出するユーザのレビュー投稿数の下限を指定できます。
62
+ * レビュー投稿件数が指定された数値以上のユーザを抽出します。
63
+ */
64
+ minReview(minreview) {
65
+ this.set({ minreview });
66
+ return this;
67
+ }
68
+ /**
69
+ * 抽出するユーザのレビュー投稿数の上限を指定できます。
70
+ * レビュー投稿件数が指定された数値以下のユーザを抽出します。
71
+ */
72
+ maxReview(maxreview) {
73
+ this.set({ maxreview });
74
+ return this;
75
+ }
76
+ /**
77
+ * 出力する項目を個別に指定できます。未指定時は全項目出力されます。転送量軽減のため、このパラメータの使用が推奨されます。
78
+ * @return {SearchBuilder} this
79
+ */
80
+ fields(fields) {
81
+ this.set({ of: UserSearchBuilder.array2string(fields) });
82
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
+ return this;
84
+ }
85
+ /**
86
+ * なろう小説APIへのリクエストを実行する
87
+ * @returns ランキング
88
+ */
89
+ execute() {
90
+ return this.api.executeUserSearch(this.params);
91
+ }
92
+ }
93
+ exports.default = UserSearchBuilder;
94
+ //# sourceMappingURL=user-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-search.js","sourceRoot":"","sources":["../src/user-search.ts"],"names":[],"mappings":";;AAKA,qDAAqD;AAErD;;;GAGG;AACH,MAAqB,iBAEnB,SAAQ,kCAA8C;IACtD;;;;OAIG;IACH,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAc;QACnB,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,QAAgB;QACvB,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,QAAgB;QACvB,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,SAAiB;QACzB,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,SAAiB;QACzB,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,MAAM,CACJ,MAAoC;QAEpC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzD,8DAA8D;QAC9D,OAAO,IAAW,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAA0B,CAAC,CAAC;IACrE,CAAC;CACF;AAjGD,oCAiGC"}
@@ -5,17 +5,15 @@
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.jsonp = void 0;
7
7
  // Callback index.
8
- var count = 0;
8
+ let count = 0;
9
9
  // eslint-disable-next-line @typescript-eslint/no-empty-function
10
- var noop = function () { };
11
- function jsonp(url, _a) {
12
- var _b = _a === void 0 ? {} : _a, _c = _b.prefix, prefix = _c === void 0 ? "__jp" : _c, _d = _b.param, param = _d === void 0 ? "callback" : _d, _e = _b.timeout, timeout = _e === void 0 ? 15000 : _e;
10
+ const noop = function () { };
11
+ function jsonp(url, { prefix = "__jp", param = "callback", timeout = 15000 } = {}) {
13
12
  return new Promise(function (resolve, reject) {
14
- var _a;
15
- var targetChild = document.getElementsByTagName("script").item(0);
16
- var target = (_a = targetChild === null || targetChild === void 0 ? void 0 : targetChild.parentNode) !== null && _a !== void 0 ? _a : document.head;
17
- var id = "".concat(prefix).concat(count++);
18
- var cleanup = function () {
13
+ const targetChild = document.getElementsByTagName("script").item(0);
14
+ const target = targetChild?.parentNode ?? document.head;
15
+ const id = `${prefix}${count++}`;
16
+ const cleanup = function () {
19
17
  // Remove the script tag.
20
18
  if (script && script.parentNode) {
21
19
  script.parentNode.removeChild(script);
@@ -25,20 +23,20 @@ function jsonp(url, _a) {
25
23
  clearTimeout(timer);
26
24
  }
27
25
  };
28
- var timer = timeout > 0
29
- ? setTimeout(function () {
26
+ const timer = timeout > 0
27
+ ? setTimeout(() => {
30
28
  cleanup();
31
29
  reject(new Error("Timeout"));
32
30
  }, timeout)
33
31
  : undefined;
34
- var callback = function (data) {
32
+ const callback = (data) => {
35
33
  cleanup();
36
34
  resolve(data);
37
35
  };
38
36
  window[id] = callback;
39
37
  // Create script.
40
- var script = document.createElement("script");
41
- var urlObj = new URL(url);
38
+ const script = document.createElement("script");
39
+ const urlObj = new URL(url);
42
40
  urlObj.searchParams.set(param, id);
43
41
  script.setAttribute("src", urlObj.toString());
44
42
  target.insertBefore(script, targetChild);
@@ -1 +1 @@
1
- {"version":3,"file":"jsonp.js","sourceRoot":"","sources":["../../src/util/jsonp.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,kBAAkB;AAClB,IAAI,KAAK,GAAG,CAAC,CAAC;AAgBd,gEAAgE;AAChE,IAAM,IAAI,GAAG,cAAa,CAAC,CAAC;AAE5B,SAAgB,KAAK,CACnB,GAAW,EACX,EAA0E;QAA1E,qBAAwE,EAAE,KAAA,EAAxE,cAAe,EAAf,MAAM,mBAAG,MAAM,KAAA,EAAE,aAAkB,EAAlB,KAAK,mBAAG,UAAU,KAAA,EAAE,eAAe,EAAf,OAAO,mBAAG,KAAK,KAAA;IAEtD,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM;;QAC1C,IAAM,WAAW,GAAG,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpE,IAAM,MAAM,GAAG,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,UAAU,mCAAI,QAAQ,CAAC,IAAI,CAAC;QAExD,IAAM,EAAE,GAAe,UAAG,MAAM,SAAG,KAAK,EAAE,CAAE,CAAC;QAC7C,IAAM,OAAO,GAAG;YACd,yBAAyB;YACzB,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE;gBAC/B,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;aACvC;YAED,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;YAElB,IAAI,KAAK,EAAE;gBACT,YAAY,CAAC,KAAK,CAAC,CAAC;aACrB;QACH,CAAC,CAAC;QAEF,IAAM,KAAK,GACT,OAAO,GAAG,CAAC;YACT,CAAC,CAAC,UAAU,CAAC;gBACT,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YAC/B,CAAC,EAAE,OAAO,CAAC;YACb,CAAC,CAAC,SAAS,CAAC;QAEhB,IAAM,QAAQ,GAAG,UAAC,IAAO;YACvB,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;QAEtB,iBAAiB;QACjB,IAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AA3CD,sBA2CC"}
1
+ {"version":3,"file":"jsonp.js","sourceRoot":"","sources":["../../src/util/jsonp.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,kBAAkB;AAClB,IAAI,KAAK,GAAG,CAAC,CAAC;AAgBd,gEAAgE;AAChE,MAAM,IAAI,GAAG,cAAa,CAAC,CAAC;AAE5B,SAAgB,KAAK,CACnB,GAAW,EACX,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,GAAG,UAAU,EAAE,OAAO,GAAG,KAAK,KAAkB,EAAE;IAE1E,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM;QAC1C,MAAM,WAAW,GAAG,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,WAAW,EAAE,UAAU,IAAI,QAAQ,CAAC,IAAI,CAAC;QAExD,MAAM,EAAE,GAAe,GAAG,MAAM,GAAG,KAAK,EAAE,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG;YACd,yBAAyB;YACzB,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE;gBAC/B,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;aACvC;YAED,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;YAElB,IAAI,KAAK,EAAE;gBACT,YAAY,CAAC,KAAK,CAAC,CAAC;aACrB;QACH,CAAC,CAAC;QAEF,MAAM,KAAK,GACT,OAAO,GAAG,CAAC;YACT,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YAC/B,CAAC,EAAE,OAAO,CAAC;YACb,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,QAAQ,GAAG,CAAC,IAAO,EAAE,EAAE;YAC3B,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;QAEtB,iBAAiB;QACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AA3CD,sBA2CC"}
@@ -1,57 +1,12 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
2
  Object.defineProperty(exports, "__esModule", { value: true });
39
3
  exports.unzipp = void 0;
40
- var zlib_1 = require("zlib");
41
- var util_1 = require("util");
42
- var gunzipAsync = (0, util_1.promisify)(zlib_1.gunzip);
43
- function unzipp(data) {
44
- return __awaiter(this, void 0, void 0, function () {
45
- var buffer;
46
- return __generator(this, function (_a) {
47
- switch (_a.label) {
48
- case 0: return [4 /*yield*/, gunzipAsync(data)];
49
- case 1:
50
- buffer = _a.sent();
51
- return [2 /*return*/, JSON.parse(buffer.toString())];
52
- }
53
- });
54
- });
4
+ const zlib_1 = require("zlib");
5
+ const util_1 = require("util");
6
+ const gunzipAsync = (0, util_1.promisify)(zlib_1.gunzip);
7
+ async function unzipp(data) {
8
+ const buffer = await gunzipAsync(data);
9
+ return JSON.parse(buffer.toString());
55
10
  }
56
11
  exports.unzipp = unzipp;
57
12
  //# sourceMappingURL=unzipp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unzipp.js","sourceRoot":"","sources":["../../src/util/unzipp.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6BAAyC;AACzC,6BAAiC;AAEjC,IAAM,WAAW,GAAG,IAAA,gBAAS,EAAoB,aAAM,CAAC,CAAC;AAEzD,SAAsB,MAAM,CAAC,IAAe;;;;;wBAC3B,qBAAM,WAAW,CAAC,IAAI,CAAC,EAAA;;oBAAhC,MAAM,GAAG,SAAuB;oBACtC,sBAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAC;;;;CACtC;AAHD,wBAGC"}
1
+ {"version":3,"file":"unzipp.js","sourceRoot":"","sources":["../../src/util/unzipp.ts"],"names":[],"mappings":";;;AAAA,+BAAyC;AACzC,+BAAiC;AAEjC,MAAM,WAAW,GAAG,IAAA,gBAAS,EAAoB,aAAM,CAAC,CAAC;AAElD,KAAK,UAAU,MAAM,CAAC,IAAe;IAC1C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AACvC,CAAC;AAHD,wBAGC"}
package/package.json CHANGED
@@ -1,13 +1,24 @@
1
1
  {
2
2
  "name": "narou",
3
- "version": "0.7.7",
3
+ "version": "0.8.0",
4
4
  "description": "Narou API Wrapper",
5
5
  "main": "dist/index.js",
6
- "browser": "dist/index.browser.js",
7
- "types": "dist/index.d.ts",
8
- "typings": "dist/index.d.ts",
9
- "module": "dist.esm/index.js",
10
- "esnext": "dist.es2017/index.js",
6
+ "types": "src/index.ts",
7
+ "exports": {
8
+ ".": {
9
+ "browser": {
10
+ "require": "./dist/index.browser.js",
11
+ "import": "./dist.esm/index.browser.js"
12
+ },
13
+ "node": {
14
+ "require": "./dist/index.js",
15
+ "import": "./dist.esm/index.js"
16
+ }
17
+ }
18
+ },
19
+ "engines": {
20
+ "node": ">=16.0.0"
21
+ },
11
22
  "files": [
12
23
  "dist",
13
24
  "dist.*",
@@ -45,9 +56,8 @@
45
56
  "scripts": {
46
57
  "build": "npm-run-all check clean build:tsc",
47
58
  "build:tsc": "npm-run-all --parallel build:tsc:*",
48
- "build:tsc:es5": "tsc -p ./tsconfig.es5.json",
59
+ "build:tsc:cjs": "tsc -p ./tsconfig.cjs.json",
49
60
  "build:tsc:esm": "tsc -p ./tsconfig.esm.json",
50
- "build:tsc:es2017": "tsc -p ./tsconfig.es2017.json",
51
61
  "check": "npm-run-all --parallel check:lint check:build test",
52
62
  "check:lint": "eslint src/** test/**",
53
63
  "check:build": "tsc --noEmit",
@@ -4,6 +4,7 @@ import SearchBuilder from "./search-builder";
4
4
  import SearchBuilderR18 from "./search-builder-r18";
5
5
  import RankingBuilder from "./ranking";
6
6
  import { formatRankingHistory, RankingHistoryResult } from "./ranking-history";
7
+ import UserSearchBuilder from "./user-search";
7
8
 
8
9
  export * from "./index.common";
9
10
  export { NarouNovelJsonp };
@@ -38,6 +39,15 @@ export function searchR18(
38
39
  return builder;
39
40
  }
40
41
 
42
+ /**
43
+ * ユーザ検索
44
+ */
45
+ export function searchUser(word = "", api: NarouNovel = narouNovelJsonp) {
46
+ const builder = new UserSearchBuilder({}, api);
47
+ if (word != "") builder.word(word);
48
+ return builder;
49
+ }
50
+
41
51
  export function ranking(api: NarouNovel = narouNovelJsonp): RankingBuilder {
42
52
  const builder = new RankingBuilder({}, api);
43
53
  return builder;
@@ -57,7 +67,8 @@ export async function rankingHistory(
57
67
 
58
68
  export default {
59
69
  search,
60
- ranking,
61
70
  searchR18,
71
+ searchUser,
72
+ ranking,
62
73
  rankingHistory,
63
74
  };
@@ -1,33 +1,22 @@
1
1
  import NarouNovel from "./narou";
2
2
  import NarouSearchResults from "./narou-search-results";
3
+ import SearchBuilder from "./search-builder";
4
+ import SearchBuilderR18 from "./search-builder-r18";
5
+ import RankingBuilder from "./ranking";
3
6
 
4
- export { NarouNovel, NarouSearchResults };
5
-
6
- export { RankingHistoryResult } from "./ranking-history";
7
- export {
8
- RankingType,
9
- Fields,
10
- SearchResultFieldNames,
11
- Order,
12
- BigGenre,
13
- BigGenreNotation,
14
- Genre,
15
- GenreNotation,
16
- R18Site,
17
- R18SiteNotation,
18
- BuntaiParam,
19
- NovelTypeParam,
20
- BooleanNumber,
21
- } from "./params";
22
7
  export {
23
- NarouSearchResult,
24
- PickedNarouSearchResult,
25
- SearchResultFields,
26
- SearchResultR18Fields,
27
- PcOrK,
28
- NovelType,
29
- End,
30
- } from "./narou-search-results";
31
- export { NarouRankingResult, RankingResult } from "./narou-ranking-results";
32
- export { DefaultSearchResultFields } from "./search-builder";
33
- export { DefaultR18SearchResultFields } from "./search-builder-r18";
8
+ NarouNovel,
9
+ NarouSearchResults,
10
+ SearchBuilder,
11
+ SearchBuilderR18,
12
+ RankingBuilder,
13
+ };
14
+
15
+ export * from "./ranking-history";
16
+ export * from "./params";
17
+ export { NarouParams } from "./narou";
18
+ export * from "./narou-search-results";
19
+ export * from "./narou-ranking-results";
20
+ export * from "./search-builder";
21
+ export * from "./search-builder-r18";
22
+ export * from "./user-search";
package/src/index.ts CHANGED
@@ -5,6 +5,7 @@ import RankingBuilder from "./ranking";
5
5
  import { formatRankingHistory, RankingHistoryResult } from "./ranking-history";
6
6
  import SearchBuilder from "./search-builder";
7
7
  import SearchBuilderR18 from "./search-builder-r18";
8
+ import UserSearchBuilder from "./user-search";
8
9
 
9
10
  export * from "./index.common";
10
11
  export { NarouNovelFetch, NarouNovelJsonp };
@@ -12,7 +13,7 @@ export { NarouNovelFetch, NarouNovelJsonp };
12
13
  const narouNovelFetch = new NarouNovelFetch();
13
14
 
14
15
  /**
15
- * 検索
16
+ * なろう小説 API で小説を検索する
16
17
  * @param {string} [word] - 検索ワード
17
18
  * @returns {SearchBuilder}
18
19
  */
@@ -26,7 +27,7 @@ export function search(
26
27
  }
27
28
 
28
29
  /**
29
- * 検索
30
+ * 18禁小説 API で小説を検索する
30
31
  * @param {string} [word] - 検索ワード
31
32
  * @returns {SearchBuilder}
32
33
  */
@@ -39,11 +40,26 @@ export function searchR18(
39
40
  return builder;
40
41
  }
41
42
 
43
+ /**
44
+ * なろうユーザ検索 API でユーザを検索する
45
+ */
46
+ export function searchUser(word = "", api: NarouNovel = narouNovelFetch) {
47
+ const builder = new UserSearchBuilder({}, api);
48
+ if (word != "") builder.word(word);
49
+ return builder;
50
+ }
51
+
52
+ /**
53
+ * なろう小説ランキング API でランキングを取得する
54
+ */
42
55
  export function ranking(api: NarouNovel = narouNovelFetch): RankingBuilder {
43
56
  const builder = new RankingBuilder({}, api);
44
57
  return builder;
45
58
  }
46
59
 
60
+ /**
61
+ * なろう殿堂入り API でランキング履歴を取得する
62
+ */
47
63
  export async function rankingHistory(
48
64
  ncode: string,
49
65
  api: NarouNovel = narouNovelFetch
@@ -58,7 +74,8 @@ export async function rankingHistory(
58
74
 
59
75
  export default {
60
76
  search,
61
- ranking,
62
77
  searchR18,
78
+ searchUser,
79
+ ranking,
63
80
  rankingHistory,
64
81
  };
@@ -7,29 +7,27 @@ import {
7
7
  BigGenre,
8
8
  R18Fields,
9
9
  OptionalFields,
10
+ UserFields,
10
11
  } from "./params";
11
12
 
12
13
  /**
13
14
  * なろう小説API検索結果
14
15
  * @class NarouSearchResults
15
16
  */
16
- export default class NarouSearchResults<T extends keyof NarouSearchResult> {
17
+ export default class NarouSearchResults<T, TKey extends keyof T> {
17
18
  allcount: number;
18
19
  limit: number;
19
20
  start: number;
20
21
  page: number;
21
22
  length: number;
22
- values: PickedNarouSearchResult<T>[];
23
+ values: readonly Pick<T, TKey>[];
23
24
 
24
25
  /**
25
26
  * @constractor
26
27
  * @private
27
28
  */
28
29
  constructor(
29
- [header, ...result]: [
30
- { allcount: number },
31
- ...PickedNarouSearchResult<T>[]
32
- ],
30
+ [header, ...result]: [{ allcount: number }, ...Pick<T, TKey>[]],
33
31
  params: SearchParams
34
32
  ) {
35
33
  const count = header.allcount;
@@ -142,6 +140,17 @@ export interface NarouSearchResult {
142
140
  weekly_unique: number;
143
141
  }
144
142
 
143
+ export interface UserSearchResult {
144
+ userid: number;
145
+ name: string;
146
+ yomikata: string;
147
+ name1st: string;
148
+ novel_cnt: number;
149
+ review_cnt: number;
150
+ novel_length: number;
151
+ sum_global_point: number;
152
+ }
153
+
145
154
  export const PcOrK = {
146
155
  Ketai: 1,
147
156
  Pc: 2,
@@ -165,7 +174,7 @@ export type SearchResultFields<T extends Fields> = {
165
174
  [K in keyof typeof Fields]: typeof Fields[K] extends T ? K : never;
166
175
  }[keyof typeof Fields];
167
176
 
168
- export type SerachResultOptionalFields<T extends OptionalFields> = {
177
+ export type SearchResultOptionalFields<T extends OptionalFields> = {
169
178
  [K in keyof typeof OptionalFields]: typeof OptionalFields[K] extends T
170
179
  ? K
171
180
  : never;
@@ -175,6 +184,10 @@ export type SearchResultR18Fields<T extends R18Fields> = {
175
184
  [K in keyof typeof R18Fields]: typeof R18Fields[K] extends T ? K : never;
176
185
  }[keyof typeof R18Fields];
177
186
 
187
+ export type UserSearchResultFields<T extends UserFields> = {
188
+ [K in keyof typeof UserFields]: typeof UserFields[K] extends T ? K : never;
189
+ }[keyof typeof UserFields];
190
+
178
191
  export type PickedNarouSearchResult<T extends keyof NarouSearchResult> = Pick<
179
192
  NarouSearchResult,
180
193
  T
package/src/narou.ts CHANGED
@@ -1,9 +1,21 @@
1
1
  import { NarouRankingResult } from "./narou-ranking-results";
2
- import NarouSearchResults, { NarouSearchResult } from "./narou-search-results";
3
- import { RankingHistoryParams, RankingParams, SearchParams } from "./params";
2
+ import NarouSearchResults, {
3
+ NarouSearchResult,
4
+ UserSearchResult,
5
+ } from "./narou-search-results";
6
+ import {
7
+ RankingHistoryParams,
8
+ RankingParams,
9
+ SearchParams,
10
+ UserSearchParams,
11
+ } from "./params";
4
12
  import { RankingHistoryRawResult } from "./ranking-history";
5
13
 
6
- export type NarouParams = SearchParams | RankingParams | RankingHistoryParams;
14
+ export type NarouParams =
15
+ | SearchParams
16
+ | RankingParams
17
+ | RankingHistoryParams
18
+ | UserSearchParams;
7
19
 
8
20
  /**
9
21
  * なろう小説APIへのリクエストを実行する
@@ -23,18 +35,15 @@ export default abstract class NarouNovel {
23
35
  ): Promise<T>;
24
36
 
25
37
  async executeSearch<T extends keyof NarouSearchResult>(
26
- params: NarouParams,
38
+ params: SearchParams,
27
39
  endpoint = "https://api.syosetu.com/novelapi/api/"
28
- ): Promise<NarouSearchResults<T>> {
29
- return new NarouSearchResults<T>(
30
- await this.execute(params, endpoint),
31
- params
32
- );
40
+ ): Promise<NarouSearchResults<NarouSearchResult, T>> {
41
+ return new NarouSearchResults(await this.execute(params, endpoint), params);
33
42
  }
34
43
 
35
44
  async executeNovel<T extends keyof NarouSearchResult>(
36
45
  params: SearchParams
37
- ): Promise<NarouSearchResults<T>> {
46
+ ): Promise<NarouSearchResults<NarouSearchResult, T>> {
38
47
  return await this.executeSearch(
39
48
  params,
40
49
  "https://api.syosetu.com/novelapi/api/"
@@ -43,7 +52,7 @@ export default abstract class NarouNovel {
43
52
 
44
53
  async executeNovel18<T extends keyof NarouSearchResult>(
45
54
  params: SearchParams
46
- ): Promise<NarouSearchResults<T>> {
55
+ ): Promise<NarouSearchResults<NarouSearchResult, T>> {
47
56
  return await this.executeSearch(
48
57
  params,
49
58
  "https://api.syosetu.com/novel18api/api/"
@@ -59,4 +68,10 @@ export default abstract class NarouNovel {
59
68
  ): Promise<RankingHistoryRawResult[]> {
60
69
  return await this.execute(params, "https://api.syosetu.com/rank/rankin/");
61
70
  }
71
+
72
+ async executeUserSearch<T extends keyof UserSearchResult>(
73
+ params: UserSearchParams
74
+ ): Promise<NarouSearchResults<UserSearchResult, T>> {
75
+ return await this.execute(params, "https://api.syosetu.com/userapi/api/");
76
+ }
62
77
  }