1 |
|
2 | import { request } from "@octokit/request";
|
3 | import { getUserAgent } from "universal-user-agent";
|
4 |
|
5 |
|
6 | var VERSION = "0.0.0-development";
|
7 |
|
8 |
|
9 | import { request as Request2 } from "@octokit/request";
|
10 |
|
11 |
|
12 | import { request as Request } from "@octokit/request";
|
13 |
|
14 |
|
15 | function _buildMessageForResponseErrors(data) {
|
16 | return `Request failed due to following response errors:
|
17 | ` + data.errors.map((e) => ` - ${e.message}`).join("\n");
|
18 | }
|
19 | var GraphqlResponseError = class extends Error {
|
20 | constructor(request2, headers, response) {
|
21 | super(_buildMessageForResponseErrors(response));
|
22 | this.request = request2;
|
23 | this.headers = headers;
|
24 | this.response = response;
|
25 | this.errors = response.errors;
|
26 | this.data = response.data;
|
27 | if (Error.captureStackTrace) {
|
28 | Error.captureStackTrace(this, this.constructor);
|
29 | }
|
30 | }
|
31 | name = "GraphqlResponseError";
|
32 | errors;
|
33 | data;
|
34 | };
|
35 |
|
36 |
|
37 | var NON_VARIABLE_OPTIONS = [
|
38 | "method",
|
39 | "baseUrl",
|
40 | "url",
|
41 | "headers",
|
42 | "request",
|
43 | "query",
|
44 | "mediaType"
|
45 | ];
|
46 | var FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"];
|
47 | var GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/;
|
48 | function graphql(request2, query, options) {
|
49 | if (options) {
|
50 | if (typeof query === "string" && "query" in options) {
|
51 | return Promise.reject(
|
52 | new Error(`[@octokit/graphql] "query" cannot be used as variable name`)
|
53 | );
|
54 | }
|
55 | for (const key in options) {
|
56 | if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key))
|
57 | continue;
|
58 | return Promise.reject(
|
59 | new Error(
|
60 | `[@octokit/graphql] "${key}" cannot be used as variable name`
|
61 | )
|
62 | );
|
63 | }
|
64 | }
|
65 | const parsedOptions = typeof query === "string" ? Object.assign({ query }, options) : query;
|
66 | const requestOptions = Object.keys(
|
67 | parsedOptions
|
68 | ).reduce((result, key) => {
|
69 | if (NON_VARIABLE_OPTIONS.includes(key)) {
|
70 | result[key] = parsedOptions[key];
|
71 | return result;
|
72 | }
|
73 | if (!result.variables) {
|
74 | result.variables = {};
|
75 | }
|
76 | result.variables[key] = parsedOptions[key];
|
77 | return result;
|
78 | }, {});
|
79 | const baseUrl = parsedOptions.baseUrl || request2.endpoint.DEFAULTS.baseUrl;
|
80 | if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {
|
81 | requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql");
|
82 | }
|
83 | return request2(requestOptions).then((response) => {
|
84 | if (response.data.errors) {
|
85 | const headers = {};
|
86 | for (const key of Object.keys(response.headers)) {
|
87 | headers[key] = response.headers[key];
|
88 | }
|
89 | throw new GraphqlResponseError(
|
90 | requestOptions,
|
91 | headers,
|
92 | response.data
|
93 | );
|
94 | }
|
95 | return response.data.data;
|
96 | });
|
97 | }
|
98 |
|
99 |
|
100 | function withDefaults(request2, newDefaults) {
|
101 | const newRequest = request2.defaults(newDefaults);
|
102 | const newApi = (query, options) => {
|
103 | return graphql(newRequest, query, options);
|
104 | };
|
105 | return Object.assign(newApi, {
|
106 | defaults: withDefaults.bind(null, newRequest),
|
107 | endpoint: newRequest.endpoint
|
108 | });
|
109 | }
|
110 |
|
111 |
|
112 | var graphql2 = withDefaults(request, {
|
113 | headers: {
|
114 | "user-agent": `octokit-graphql.js/${VERSION} ${getUserAgent()}`
|
115 | },
|
116 | method: "POST",
|
117 | url: "/graphql"
|
118 | });
|
119 | function withCustomRequest(customRequest) {
|
120 | return withDefaults(customRequest, {
|
121 | method: "POST",
|
122 | url: "/graphql"
|
123 | });
|
124 | }
|
125 | export {
|
126 | GraphqlResponseError,
|
127 | graphql2 as graphql,
|
128 | withCustomRequest
|
129 | };
|