first commit
This commit is contained in:
+7
@@ -0,0 +1,7 @@
|
||||
MIT License Copyright (c) 2019 Octokit contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
# plugin-rest-endpoint-methods.js
|
||||
|
||||
> Octokit plugin adding one method for all of api.github.com REST API endpoints
|
||||
|
||||
[](https://www.npmjs.com/package/@octokit/plugin-rest-endpoint-methods)
|
||||
[](https://github.com/octokit/plugin-rest-endpoint-methods.js/actions?workflow=Test)
|
||||
|
||||
## Usage
|
||||
|
||||
<table>
|
||||
<tbody valign=top align=left>
|
||||
<tr><th>
|
||||
Browsers
|
||||
</th><td width=100%>
|
||||
|
||||
Load `@octokit/plugin-rest-endpoint-methods` and [`@octokit/core`](https://github.com/octokit/core.js) (or core-compatible module) directly from [esm.sh](https://esm.sh)
|
||||
|
||||
```html
|
||||
<script type="module">
|
||||
import { Octokit } from "https://esm.sh/@octokit/core";
|
||||
import { restEndpointMethods } from "https://esm.sh/@octokit/plugin-rest-endpoint-methods";
|
||||
</script>
|
||||
```
|
||||
|
||||
</td></tr>
|
||||
<tr><th>
|
||||
Node
|
||||
</th><td>
|
||||
|
||||
Install with `npm install @octokit/core @octokit/plugin-rest-endpoint-methods`. Optionally replace `@octokit/core` with a compatible module
|
||||
|
||||
```js
|
||||
import { Octokit } from "@octokit/core";
|
||||
import { restEndpointMethods } from "@octokit/plugin-rest-endpoint-methods";
|
||||
```
|
||||
|
||||
</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
```js
|
||||
const MyOctokit = Octokit.plugin(restEndpointMethods);
|
||||
const octokit = new MyOctokit({ auth: "secret123" });
|
||||
|
||||
// https://developer.github.com/v3/users/#get-the-authenticated-user
|
||||
octokit.rest.users.getAuthenticated();
|
||||
```
|
||||
|
||||
There is one method for each REST API endpoint documented at [https://developer.github.com/v3](https://developer.github.com/v3). All endpoint methods are documented in the [docs/](docs/) folder, e.g. [docs/users/getAuthenticated.md](docs/users/getAuthenticated.md)
|
||||
|
||||
## TypeScript
|
||||
|
||||
> [!IMPORTANT]
|
||||
> As we use [conditional exports](https://nodejs.org/api/packages.html#conditional-exports), you will need to adapt your `tsconfig.json` by setting `"moduleResolution": "node16", "module": "node16"`.
|
||||
>
|
||||
> See the TypeScript docs on [package.json "exports"](https://www.typescriptlang.org/docs/handbook/modules/reference.html#packagejson-exports).<br>
|
||||
> See this [helpful guide on transitioning to ESM](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c) from [@sindresorhus](https://github.com/sindresorhus)
|
||||
|
||||
Parameter and response types for all endpoint methods exported as `{ RestEndpointMethodTypes }`.
|
||||
|
||||
Example
|
||||
|
||||
```ts
|
||||
import { RestEndpointMethodTypes } from "@octokit/plugin-rest-endpoint-methods";
|
||||
|
||||
type UpdateLabelParameters =
|
||||
RestEndpointMethodTypes["issues"]["updateLabel"]["parameters"];
|
||||
type UpdateLabelResponse =
|
||||
RestEndpointMethodTypes["issues"]["updateLabel"]["response"];
|
||||
```
|
||||
|
||||
In order to get types beyond parameters and responses, check out [`@octokit/openapi-types`](https://github.com/octokit/openapi-types.ts/#readme), which is a direct transpilation from GitHub's official OpenAPI specification.
|
||||
|
||||
## Contributing
|
||||
|
||||
See [CONTRIBUTING.md](CONTRIBUTING.md)
|
||||
|
||||
## License
|
||||
|
||||
[MIT](LICENSE)
|
||||
Generated
Vendored
+126
@@ -0,0 +1,126 @@
|
||||
import ENDPOINTS from "./generated/endpoints.js";
|
||||
const endpointMethodsMap = /* @__PURE__ */ new Map();
|
||||
for (const [scope, endpoints] of Object.entries(ENDPOINTS)) {
|
||||
for (const [methodName, endpoint] of Object.entries(endpoints)) {
|
||||
const [route, defaults, decorations] = endpoint;
|
||||
const [method, url] = route.split(/ /);
|
||||
const endpointDefaults = Object.assign(
|
||||
{
|
||||
method,
|
||||
url
|
||||
},
|
||||
defaults
|
||||
);
|
||||
if (!endpointMethodsMap.has(scope)) {
|
||||
endpointMethodsMap.set(scope, /* @__PURE__ */ new Map());
|
||||
}
|
||||
endpointMethodsMap.get(scope).set(methodName, {
|
||||
scope,
|
||||
methodName,
|
||||
endpointDefaults,
|
||||
decorations
|
||||
});
|
||||
}
|
||||
}
|
||||
const handler = {
|
||||
has({ scope }, methodName) {
|
||||
return endpointMethodsMap.get(scope).has(methodName);
|
||||
},
|
||||
getOwnPropertyDescriptor(target, methodName) {
|
||||
return {
|
||||
value: this.get(target, methodName),
|
||||
// ensures method is in the cache
|
||||
configurable: true,
|
||||
writable: true,
|
||||
enumerable: true
|
||||
};
|
||||
},
|
||||
defineProperty(target, methodName, descriptor) {
|
||||
Object.defineProperty(target.cache, methodName, descriptor);
|
||||
return true;
|
||||
},
|
||||
deleteProperty(target, methodName) {
|
||||
delete target.cache[methodName];
|
||||
return true;
|
||||
},
|
||||
ownKeys({ scope }) {
|
||||
return [...endpointMethodsMap.get(scope).keys()];
|
||||
},
|
||||
set(target, methodName, value) {
|
||||
return target.cache[methodName] = value;
|
||||
},
|
||||
get({ octokit, scope, cache }, methodName) {
|
||||
if (cache[methodName]) {
|
||||
return cache[methodName];
|
||||
}
|
||||
const method = endpointMethodsMap.get(scope).get(methodName);
|
||||
if (!method) {
|
||||
return void 0;
|
||||
}
|
||||
const { endpointDefaults, decorations } = method;
|
||||
if (decorations) {
|
||||
cache[methodName] = decorate(
|
||||
octokit,
|
||||
scope,
|
||||
methodName,
|
||||
endpointDefaults,
|
||||
decorations
|
||||
);
|
||||
} else {
|
||||
cache[methodName] = octokit.request.defaults(endpointDefaults);
|
||||
}
|
||||
return cache[methodName];
|
||||
}
|
||||
};
|
||||
function endpointsToMethods(octokit) {
|
||||
const newMethods = {};
|
||||
for (const scope of endpointMethodsMap.keys()) {
|
||||
newMethods[scope] = new Proxy({ octokit, scope, cache: {} }, handler);
|
||||
}
|
||||
return newMethods;
|
||||
}
|
||||
function decorate(octokit, scope, methodName, defaults, decorations) {
|
||||
const requestWithDefaults = octokit.request.defaults(defaults);
|
||||
function withDecorations(...args) {
|
||||
let options = requestWithDefaults.endpoint.merge(...args);
|
||||
if (decorations.mapToData) {
|
||||
options = Object.assign({}, options, {
|
||||
data: options[decorations.mapToData],
|
||||
[decorations.mapToData]: void 0
|
||||
});
|
||||
return requestWithDefaults(options);
|
||||
}
|
||||
if (decorations.renamed) {
|
||||
const [newScope, newMethodName] = decorations.renamed;
|
||||
octokit.log.warn(
|
||||
`octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`
|
||||
);
|
||||
}
|
||||
if (decorations.deprecated) {
|
||||
octokit.log.warn(decorations.deprecated);
|
||||
}
|
||||
if (decorations.renamedParameters) {
|
||||
const options2 = requestWithDefaults.endpoint.merge(...args);
|
||||
for (const [name, alias] of Object.entries(
|
||||
decorations.renamedParameters
|
||||
)) {
|
||||
if (name in options2) {
|
||||
octokit.log.warn(
|
||||
`"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`
|
||||
);
|
||||
if (!(alias in options2)) {
|
||||
options2[alias] = options2[name];
|
||||
}
|
||||
delete options2[name];
|
||||
}
|
||||
}
|
||||
return requestWithDefaults(options2);
|
||||
}
|
||||
return requestWithDefaults(...args);
|
||||
}
|
||||
return Object.assign(withDecorations, requestWithDefaults);
|
||||
}
|
||||
export {
|
||||
endpointsToMethods
|
||||
};
|
||||
//# sourceMappingURL=endpoints-to-methods.js.map
|
||||
Generated
Vendored
+7
File diff suppressed because one or more lines are too long
Generated
Vendored
+2194
File diff suppressed because it is too large
Load Diff
Generated
Vendored
+7
File diff suppressed because one or more lines are too long
+22
@@ -0,0 +1,22 @@
|
||||
import { VERSION } from "./version.js";
|
||||
import { endpointsToMethods } from "./endpoints-to-methods.js";
|
||||
function restEndpointMethods(octokit) {
|
||||
const api = endpointsToMethods(octokit);
|
||||
return {
|
||||
rest: api
|
||||
};
|
||||
}
|
||||
restEndpointMethods.VERSION = VERSION;
|
||||
function legacyRestEndpointMethods(octokit) {
|
||||
const api = endpointsToMethods(octokit);
|
||||
return {
|
||||
...api,
|
||||
rest: api
|
||||
};
|
||||
}
|
||||
legacyRestEndpointMethods.VERSION = VERSION;
|
||||
export {
|
||||
legacyRestEndpointMethods,
|
||||
restEndpointMethods
|
||||
};
|
||||
//# sourceMappingURL=index.js.map
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../src/index.ts"],
|
||||
"sourcesContent": ["import type { Octokit } from \"@octokit/core\";\n\nexport type { RestEndpointMethodTypes } from \"./generated/parameters-and-response-types.js\";\nimport { VERSION } from \"./version.js\";\nimport type { Api } from \"./types.js\";\nimport { endpointsToMethods } from \"./endpoints-to-methods.js\";\n\n// Export the type for downstream users in order to fix a TypeScript error\n// The inferred type of 'Octokit' cannot be named without a reference to '../node_modules/@octokit/plugin-rest-endpoint-methods/dist-types/types.js'. This is likely not portable. A type annotation is necessary.\nexport type { Api };\n\nexport function restEndpointMethods(octokit: Octokit): Api {\n const api = endpointsToMethods(octokit);\n return {\n rest: api,\n };\n}\nrestEndpointMethods.VERSION = VERSION;\n\nexport function legacyRestEndpointMethods(octokit: Octokit): Api[\"rest\"] & Api {\n const api = endpointsToMethods(octokit);\n return {\n ...api,\n rest: api,\n };\n}\nlegacyRestEndpointMethods.VERSION = VERSION;\n"],
|
||||
"mappings": "AAGA,SAAS,eAAe;AAExB,SAAS,0BAA0B;AAM5B,SAAS,oBAAoB,SAAuB;AACzD,QAAM,MAAM,mBAAmB,OAAO;AACtC,SAAO;AAAA,IACL,MAAM;AAAA,EACR;AACF;AACA,oBAAoB,UAAU;AAEvB,SAAS,0BAA0B,SAAqC;AAC7E,QAAM,MAAM,mBAAmB,OAAO;AACtC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,MAAM;AAAA,EACR;AACF;AACA,0BAA0B,UAAU;",
|
||||
"names": []
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
const VERSION = "16.1.1";
|
||||
export {
|
||||
VERSION
|
||||
};
|
||||
//# sourceMappingURL=version.js.map
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": ["../../src/version.ts"],
|
||||
"sourcesContent": ["export const VERSION = \"16.1.1\";\n"],
|
||||
"mappings": "AAAO,MAAM,UAAU;",
|
||||
"names": []
|
||||
}
|
||||
Generated
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
import type { Octokit } from "@octokit/core";
|
||||
import type { RestEndpointMethods } from "./generated/method-types.js";
|
||||
export declare function endpointsToMethods(octokit: Octokit): RestEndpointMethods;
|
||||
Generated
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
import type { EndpointsDefaultsAndDecorations } from "../types.js";
|
||||
declare const Endpoints: EndpointsDefaultsAndDecorations;
|
||||
export default Endpoints;
|
||||
Generated
Vendored
+13577
File diff suppressed because it is too large
Load Diff
Generated
Vendored
+4049
File diff suppressed because it is too large
Load Diff
+12
@@ -0,0 +1,12 @@
|
||||
import type { Octokit } from "@octokit/core";
|
||||
export type { RestEndpointMethodTypes } from "./generated/parameters-and-response-types.js";
|
||||
import type { Api } from "./types.js";
|
||||
export type { Api };
|
||||
export declare function restEndpointMethods(octokit: Octokit): Api;
|
||||
export declare namespace restEndpointMethods {
|
||||
var VERSION: string;
|
||||
}
|
||||
export declare function legacyRestEndpointMethods(octokit: Octokit): Api["rest"] & Api;
|
||||
export declare namespace legacyRestEndpointMethods {
|
||||
var VERSION: string;
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
import type { Route, RequestParameters } from "@octokit/types";
|
||||
import type { RestEndpointMethods } from "./generated/method-types.js";
|
||||
export type Api = {
|
||||
rest: RestEndpointMethods;
|
||||
};
|
||||
export type EndpointDecorations = {
|
||||
mapToData?: string;
|
||||
deprecated?: string;
|
||||
renamed?: [string, string];
|
||||
renamedParameters?: {
|
||||
[name: string]: string;
|
||||
};
|
||||
};
|
||||
export type EndpointsDefaultsAndDecorations = {
|
||||
[scope: string]: {
|
||||
[methodName: string]: [Route, RequestParameters?, EndpointDecorations?];
|
||||
};
|
||||
};
|
||||
+1
@@ -0,0 +1 @@
|
||||
export declare const VERSION = "16.1.1";
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"name": "@octokit/plugin-rest-endpoint-methods",
|
||||
"version": "16.1.1",
|
||||
"type": "module",
|
||||
"description": "Octokit plugin adding one method for all of api.github.com REST API endpoints",
|
||||
"repository": "github:octokit/plugin-rest-endpoint-methods.js",
|
||||
"keywords": [
|
||||
"github",
|
||||
"api",
|
||||
"sdk",
|
||||
"toolkit"
|
||||
],
|
||||
"author": "Gregor Martynus (https://twitter.com/gr2m)",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@octokit/types": "^15.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@octokit/core": "^7.0.0",
|
||||
"@octokit/tsconfig": "^4.0.0",
|
||||
"@types/node": "^22.0.0",
|
||||
"@vitest/coverage-v8": "^3.0.5",
|
||||
"camelcase": "^8.0.0",
|
||||
"esbuild": "^0.25.0",
|
||||
"fetch-mock": "^12.0.0",
|
||||
"github-openapi-graphql-query": "^5.0.0",
|
||||
"glob": "^11.0.0",
|
||||
"prettier": "3.6.2",
|
||||
"semantic-release-plugin-update-version-in-files": "^2.0.0",
|
||||
"sinon": "^21.0.0",
|
||||
"sort-keys": "^6.0.0",
|
||||
"string-to-jsdoc-comment": "^1.0.0",
|
||||
"typescript": "^5.0.0",
|
||||
"vitest": "^3.0.5"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@octokit/core": ">=6"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"provenance": true
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 20"
|
||||
},
|
||||
"files": [
|
||||
"dist-*/**"
|
||||
],
|
||||
"types": "./dist-types/index.d.ts",
|
||||
"exports": {
|
||||
".": {
|
||||
"import": "./dist-src/index.js",
|
||||
"types": "./dist-types/index.d.ts",
|
||||
"default": "./dist-src/index.js"
|
||||
}
|
||||
},
|
||||
"sideEffects": false
|
||||
}
|
||||
Reference in New Issue
Block a user