mirror of
https://github.com/bcomnes/deploy-to-neocities.git
synced 2026-03-24 15:51:36 +00:00
commit node_modules
This commit is contained in:
61
.gitignore
vendored
61
.gitignore
vendored
@@ -1,62 +1,3 @@
|
|||||||
# Logs
|
sandbox.js
|
||||||
logs
|
|
||||||
*.log
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
|
|
||||||
# Runtime data
|
|
||||||
pids
|
|
||||||
*.pid
|
|
||||||
*.seed
|
|
||||||
*.pid.lock
|
|
||||||
|
|
||||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
|
||||||
lib-cov
|
|
||||||
|
|
||||||
# Coverage directory used by tools like istanbul
|
|
||||||
coverage
|
|
||||||
|
|
||||||
# nyc test coverage
|
|
||||||
.nyc_output
|
.nyc_output
|
||||||
|
|
||||||
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
|
||||||
.grunt
|
|
||||||
|
|
||||||
# Bower dependency directory (https://bower.io/)
|
|
||||||
bower_components
|
|
||||||
|
|
||||||
# node-waf configuration
|
|
||||||
.lock-wscript
|
|
||||||
|
|
||||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
|
||||||
build/Release
|
|
||||||
|
|
||||||
# Dependency directories
|
|
||||||
node_modules/
|
|
||||||
jspm_packages/
|
|
||||||
|
|
||||||
# TypeScript v1 declaration files
|
|
||||||
typings/
|
|
||||||
|
|
||||||
# Optional npm cache directory
|
|
||||||
.npm
|
|
||||||
|
|
||||||
# Optional eslint cache
|
|
||||||
.eslintcache
|
|
||||||
|
|
||||||
# Optional REPL history
|
|
||||||
.node_repl_history
|
|
||||||
|
|
||||||
# Output of 'npm pack'
|
|
||||||
*.tgz
|
|
||||||
|
|
||||||
# Yarn Integrity file
|
|
||||||
.yarn-integrity
|
|
||||||
|
|
||||||
# dotenv environment variables file
|
|
||||||
.env
|
|
||||||
|
|
||||||
# next.js build output
|
|
||||||
.next
|
|
||||||
config.json
|
config.json
|
||||||
|
|||||||
1
node_modules/.bin/semver
generated
vendored
Symbolic link
1
node_modules/.bin/semver
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../semver/bin/semver
|
||||||
1
node_modules/.bin/which
generated
vendored
Symbolic link
1
node_modules/.bin/which
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../which/bin/which
|
||||||
140
node_modules/@actions/core/README.md
generated
vendored
Normal file
140
node_modules/@actions/core/README.md
generated
vendored
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
# `@actions/core`
|
||||||
|
|
||||||
|
> Core functions for setting results, logging, registering secrets and exporting variables across actions
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Import the package
|
||||||
|
|
||||||
|
```js
|
||||||
|
// javascript
|
||||||
|
const core = require('@actions/core');
|
||||||
|
|
||||||
|
// typescript
|
||||||
|
import * as core from '@actions/core';
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Inputs/Outputs
|
||||||
|
|
||||||
|
Action inputs can be read with `getInput`. Outputs can be set with `setOutput` which makes them available to be mapped into inputs of other actions to ensure they are decoupled.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const myInput = core.getInput('inputName', { required: true });
|
||||||
|
|
||||||
|
core.setOutput('outputKey', 'outputVal');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Exporting variables
|
||||||
|
|
||||||
|
Since each step runs in a separate process, you can use `exportVariable` to add it to this step and future steps environment blocks.
|
||||||
|
|
||||||
|
```js
|
||||||
|
core.exportVariable('envVar', 'Val');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Setting a secret
|
||||||
|
|
||||||
|
Setting a secret registers the secret with the runner to ensure it is masked in logs.
|
||||||
|
|
||||||
|
```js
|
||||||
|
core.setSecret('myPassword');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### PATH Manipulation
|
||||||
|
|
||||||
|
To make a tool's path available in the path for the remainder of the job (without altering the machine or containers state), use `addPath`. The runner will prepend the path given to the jobs PATH.
|
||||||
|
|
||||||
|
```js
|
||||||
|
core.addPath('/path/to/mytool');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Exit codes
|
||||||
|
|
||||||
|
You should use this library to set the failing exit code for your action. If status is not set and the script runs to completion, that will lead to a success.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const core = require('@actions/core');
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Do stuff
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
// setFailed logs the message and sets a failing exit code
|
||||||
|
core.setFailed(`Action failed with error ${err}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
Note that `setNeutral` is not yet implemented in actions V2 but equivalent functionality is being planned.
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Logging
|
||||||
|
|
||||||
|
Finally, this library provides some utilities for logging. Note that debug logging is hidden from the logs by default. This behavior can be toggled by enabling the [Step Debug Logs](../../docs/action-debugging.md#step-debug-logs).
|
||||||
|
|
||||||
|
```js
|
||||||
|
const core = require('@actions/core');
|
||||||
|
|
||||||
|
const myInput = core.getInput('input');
|
||||||
|
try {
|
||||||
|
core.debug('Inside try block');
|
||||||
|
|
||||||
|
if (!myInput) {
|
||||||
|
core.warning('myInput was not set');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do stuff
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
core.error(`Error ${err}, action may still succeed though`);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This library can also wrap chunks of output in foldable groups.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const core = require('@actions/core')
|
||||||
|
|
||||||
|
// Manually wrap output
|
||||||
|
core.startGroup('Do some function')
|
||||||
|
doSomeFunction()
|
||||||
|
core.endGroup()
|
||||||
|
|
||||||
|
// Wrap an asynchronous function call
|
||||||
|
const result = await core.group('Do something async', async () => {
|
||||||
|
const response = await doSomeHTTPRequest()
|
||||||
|
return response
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Action state
|
||||||
|
|
||||||
|
You can use this library to save state and get state for sharing information between a given wrapper action:
|
||||||
|
|
||||||
|
**action.yml**
|
||||||
|
```yaml
|
||||||
|
name: 'Wrapper action sample'
|
||||||
|
inputs:
|
||||||
|
name:
|
||||||
|
default: 'GitHub'
|
||||||
|
runs:
|
||||||
|
using: 'node12'
|
||||||
|
main: 'main.js'
|
||||||
|
post: 'cleanup.js'
|
||||||
|
```
|
||||||
|
|
||||||
|
In action's `main.js`:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const core = require('@actions/core');
|
||||||
|
|
||||||
|
core.saveState("pidToKill", 12345);
|
||||||
|
```
|
||||||
|
|
||||||
|
In action's `cleanup.js`:
|
||||||
|
```js
|
||||||
|
const core = require('@actions/core');
|
||||||
|
|
||||||
|
var pid = core.getState("pidToKill");
|
||||||
|
|
||||||
|
process.kill(pid);
|
||||||
|
```
|
||||||
16
node_modules/@actions/core/lib/command.d.ts
generated
vendored
Normal file
16
node_modules/@actions/core/lib/command.d.ts
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
interface CommandProperties {
|
||||||
|
[key: string]: string;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Commands
|
||||||
|
*
|
||||||
|
* Command Format:
|
||||||
|
* ::name key=value,key=value::message
|
||||||
|
*
|
||||||
|
* Examples:
|
||||||
|
* ::warning::This is the message
|
||||||
|
* ::set-env name=MY_VAR::some value
|
||||||
|
*/
|
||||||
|
export declare function issueCommand(command: string, properties: CommandProperties, message: string): void;
|
||||||
|
export declare function issue(name: string, message?: string): void;
|
||||||
|
export {};
|
||||||
78
node_modules/@actions/core/lib/command.js
generated
vendored
Normal file
78
node_modules/@actions/core/lib/command.js
generated
vendored
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
"use strict";
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const os = __importStar(require("os"));
|
||||||
|
/**
|
||||||
|
* Commands
|
||||||
|
*
|
||||||
|
* Command Format:
|
||||||
|
* ::name key=value,key=value::message
|
||||||
|
*
|
||||||
|
* Examples:
|
||||||
|
* ::warning::This is the message
|
||||||
|
* ::set-env name=MY_VAR::some value
|
||||||
|
*/
|
||||||
|
function issueCommand(command, properties, message) {
|
||||||
|
const cmd = new Command(command, properties, message);
|
||||||
|
process.stdout.write(cmd.toString() + os.EOL);
|
||||||
|
}
|
||||||
|
exports.issueCommand = issueCommand;
|
||||||
|
function issue(name, message = '') {
|
||||||
|
issueCommand(name, {}, message);
|
||||||
|
}
|
||||||
|
exports.issue = issue;
|
||||||
|
const CMD_STRING = '::';
|
||||||
|
class Command {
|
||||||
|
constructor(command, properties, message) {
|
||||||
|
if (!command) {
|
||||||
|
command = 'missing.command';
|
||||||
|
}
|
||||||
|
this.command = command;
|
||||||
|
this.properties = properties;
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
toString() {
|
||||||
|
let cmdStr = CMD_STRING + this.command;
|
||||||
|
if (this.properties && Object.keys(this.properties).length > 0) {
|
||||||
|
cmdStr += ' ';
|
||||||
|
let first = true;
|
||||||
|
for (const key in this.properties) {
|
||||||
|
if (this.properties.hasOwnProperty(key)) {
|
||||||
|
const val = this.properties[key];
|
||||||
|
if (val) {
|
||||||
|
if (first) {
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cmdStr += ',';
|
||||||
|
}
|
||||||
|
cmdStr += `${key}=${escapeProperty(val)}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
|
||||||
|
return cmdStr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function escapeData(s) {
|
||||||
|
return (s || '')
|
||||||
|
.replace(/%/g, '%25')
|
||||||
|
.replace(/\r/g, '%0D')
|
||||||
|
.replace(/\n/g, '%0A');
|
||||||
|
}
|
||||||
|
function escapeProperty(s) {
|
||||||
|
return (s || '')
|
||||||
|
.replace(/%/g, '%25')
|
||||||
|
.replace(/\r/g, '%0D')
|
||||||
|
.replace(/\n/g, '%0A')
|
||||||
|
.replace(/:/g, '%3A')
|
||||||
|
.replace(/,/g, '%2C');
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=command.js.map
|
||||||
1
node_modules/@actions/core/lib/command.js.map
generated
vendored
Normal file
1
node_modules/@actions/core/lib/command.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":";;;;;;;;;AAAA,uCAAwB;AAQxB;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAC1B,OAAe,EACf,UAA6B,EAC7B,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC;AAPD,oCAOC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,UAAkB,EAAE;IACtD,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAFD,sBAEC;AAED,MAAM,UAAU,GAAG,IAAI,CAAA;AAEvB,MAAM,OAAO;IAKX,YAAY,OAAe,EAAE,UAA6B,EAAE,OAAe;QACzE,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,iBAAiB,CAAA;SAC5B;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,IAAI,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAA;QAEtC,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,MAAM,IAAI,GAAG,CAAA;YACb,IAAI,KAAK,GAAG,IAAI,CAAA;YAChB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;oBAChC,IAAI,GAAG,EAAE;wBACP,IAAI,KAAK,EAAE;4BACT,KAAK,GAAG,KAAK,CAAA;yBACd;6BAAM;4BACL,MAAM,IAAI,GAAG,CAAA;yBACd;wBAED,MAAM,IAAI,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAA;qBAC1C;iBACF;aACF;SACF;QAED,MAAM,IAAI,GAAG,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA;QACpD,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;SACb,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,CAAS;IAC/B,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;SACb,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACzB,CAAC"}
|
||||||
112
node_modules/@actions/core/lib/core.d.ts
generated
vendored
Normal file
112
node_modules/@actions/core/lib/core.d.ts
generated
vendored
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
/**
|
||||||
|
* Interface for getInput options
|
||||||
|
*/
|
||||||
|
export interface InputOptions {
|
||||||
|
/** Optional. Whether the input is required. If required and not present, will throw. Defaults to false */
|
||||||
|
required?: boolean;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* The code to exit an action
|
||||||
|
*/
|
||||||
|
export declare enum ExitCode {
|
||||||
|
/**
|
||||||
|
* A code indicating that the action was successful
|
||||||
|
*/
|
||||||
|
Success = 0,
|
||||||
|
/**
|
||||||
|
* A code indicating that the action was a failure
|
||||||
|
*/
|
||||||
|
Failure = 1
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Sets env variable for this action and future actions in the job
|
||||||
|
* @param name the name of the variable to set
|
||||||
|
* @param val the value of the variable
|
||||||
|
*/
|
||||||
|
export declare function exportVariable(name: string, val: string): void;
|
||||||
|
/**
|
||||||
|
* Registers a secret which will get masked from logs
|
||||||
|
* @param secret value of the secret
|
||||||
|
*/
|
||||||
|
export declare function setSecret(secret: string): void;
|
||||||
|
/**
|
||||||
|
* Prepends inputPath to the PATH (for this action and future actions)
|
||||||
|
* @param inputPath
|
||||||
|
*/
|
||||||
|
export declare function addPath(inputPath: string): void;
|
||||||
|
/**
|
||||||
|
* Gets the value of an input. The value is also trimmed.
|
||||||
|
*
|
||||||
|
* @param name name of the input to get
|
||||||
|
* @param options optional. See InputOptions.
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export declare function getInput(name: string, options?: InputOptions): string;
|
||||||
|
/**
|
||||||
|
* Sets the value of an output.
|
||||||
|
*
|
||||||
|
* @param name name of the output to set
|
||||||
|
* @param value value to store
|
||||||
|
*/
|
||||||
|
export declare function setOutput(name: string, value: string): void;
|
||||||
|
/**
|
||||||
|
* Sets the action status to failed.
|
||||||
|
* When the action exits it will be with an exit code of 1
|
||||||
|
* @param message add error issue message
|
||||||
|
*/
|
||||||
|
export declare function setFailed(message: string): void;
|
||||||
|
/**
|
||||||
|
* Writes debug message to user log
|
||||||
|
* @param message debug message
|
||||||
|
*/
|
||||||
|
export declare function debug(message: string): void;
|
||||||
|
/**
|
||||||
|
* Adds an error issue
|
||||||
|
* @param message error issue message
|
||||||
|
*/
|
||||||
|
export declare function error(message: string): void;
|
||||||
|
/**
|
||||||
|
* Adds an warning issue
|
||||||
|
* @param message warning issue message
|
||||||
|
*/
|
||||||
|
export declare function warning(message: string): void;
|
||||||
|
/**
|
||||||
|
* Writes info to log with console.log.
|
||||||
|
* @param message info message
|
||||||
|
*/
|
||||||
|
export declare function info(message: string): void;
|
||||||
|
/**
|
||||||
|
* Begin an output group.
|
||||||
|
*
|
||||||
|
* Output until the next `groupEnd` will be foldable in this group
|
||||||
|
*
|
||||||
|
* @param name The name of the output group
|
||||||
|
*/
|
||||||
|
export declare function startGroup(name: string): void;
|
||||||
|
/**
|
||||||
|
* End an output group.
|
||||||
|
*/
|
||||||
|
export declare function endGroup(): void;
|
||||||
|
/**
|
||||||
|
* Wrap an asynchronous function call in a group.
|
||||||
|
*
|
||||||
|
* Returns the same type as the function itself.
|
||||||
|
*
|
||||||
|
* @param name The name of the group
|
||||||
|
* @param fn The function to wrap in the group
|
||||||
|
*/
|
||||||
|
export declare function group<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
||||||
|
/**
|
||||||
|
* Saves state for current action, the state can only be retrieved by this action's post job execution.
|
||||||
|
*
|
||||||
|
* @param name name of the state to store
|
||||||
|
* @param value value to store
|
||||||
|
*/
|
||||||
|
export declare function saveState(name: string, value: string): void;
|
||||||
|
/**
|
||||||
|
* Gets the value of an state set by this action's main execution.
|
||||||
|
*
|
||||||
|
* @param name name of the state to get
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export declare function getState(name: string): string;
|
||||||
202
node_modules/@actions/core/lib/core.js
generated
vendored
Normal file
202
node_modules/@actions/core/lib/core.js
generated
vendored
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
"use strict";
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const command_1 = require("./command");
|
||||||
|
const os = __importStar(require("os"));
|
||||||
|
const path = __importStar(require("path"));
|
||||||
|
/**
|
||||||
|
* The code to exit an action
|
||||||
|
*/
|
||||||
|
var ExitCode;
|
||||||
|
(function (ExitCode) {
|
||||||
|
/**
|
||||||
|
* A code indicating that the action was successful
|
||||||
|
*/
|
||||||
|
ExitCode[ExitCode["Success"] = 0] = "Success";
|
||||||
|
/**
|
||||||
|
* A code indicating that the action was a failure
|
||||||
|
*/
|
||||||
|
ExitCode[ExitCode["Failure"] = 1] = "Failure";
|
||||||
|
})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
// Variables
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Sets env variable for this action and future actions in the job
|
||||||
|
* @param name the name of the variable to set
|
||||||
|
* @param val the value of the variable
|
||||||
|
*/
|
||||||
|
function exportVariable(name, val) {
|
||||||
|
process.env[name] = val;
|
||||||
|
command_1.issueCommand('set-env', { name }, val);
|
||||||
|
}
|
||||||
|
exports.exportVariable = exportVariable;
|
||||||
|
/**
|
||||||
|
* Registers a secret which will get masked from logs
|
||||||
|
* @param secret value of the secret
|
||||||
|
*/
|
||||||
|
function setSecret(secret) {
|
||||||
|
command_1.issueCommand('add-mask', {}, secret);
|
||||||
|
}
|
||||||
|
exports.setSecret = setSecret;
|
||||||
|
/**
|
||||||
|
* Prepends inputPath to the PATH (for this action and future actions)
|
||||||
|
* @param inputPath
|
||||||
|
*/
|
||||||
|
function addPath(inputPath) {
|
||||||
|
command_1.issueCommand('add-path', {}, inputPath);
|
||||||
|
process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
|
||||||
|
}
|
||||||
|
exports.addPath = addPath;
|
||||||
|
/**
|
||||||
|
* Gets the value of an input. The value is also trimmed.
|
||||||
|
*
|
||||||
|
* @param name name of the input to get
|
||||||
|
* @param options optional. See InputOptions.
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
function getInput(name, options) {
|
||||||
|
const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
|
||||||
|
if (options && options.required && !val) {
|
||||||
|
throw new Error(`Input required and not supplied: ${name}`);
|
||||||
|
}
|
||||||
|
return val.trim();
|
||||||
|
}
|
||||||
|
exports.getInput = getInput;
|
||||||
|
/**
|
||||||
|
* Sets the value of an output.
|
||||||
|
*
|
||||||
|
* @param name name of the output to set
|
||||||
|
* @param value value to store
|
||||||
|
*/
|
||||||
|
function setOutput(name, value) {
|
||||||
|
command_1.issueCommand('set-output', { name }, value);
|
||||||
|
}
|
||||||
|
exports.setOutput = setOutput;
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
// Results
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Sets the action status to failed.
|
||||||
|
* When the action exits it will be with an exit code of 1
|
||||||
|
* @param message add error issue message
|
||||||
|
*/
|
||||||
|
function setFailed(message) {
|
||||||
|
process.exitCode = ExitCode.Failure;
|
||||||
|
error(message);
|
||||||
|
}
|
||||||
|
exports.setFailed = setFailed;
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
// Logging Commands
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Writes debug message to user log
|
||||||
|
* @param message debug message
|
||||||
|
*/
|
||||||
|
function debug(message) {
|
||||||
|
command_1.issueCommand('debug', {}, message);
|
||||||
|
}
|
||||||
|
exports.debug = debug;
|
||||||
|
/**
|
||||||
|
* Adds an error issue
|
||||||
|
* @param message error issue message
|
||||||
|
*/
|
||||||
|
function error(message) {
|
||||||
|
command_1.issue('error', message);
|
||||||
|
}
|
||||||
|
exports.error = error;
|
||||||
|
/**
|
||||||
|
* Adds an warning issue
|
||||||
|
* @param message warning issue message
|
||||||
|
*/
|
||||||
|
function warning(message) {
|
||||||
|
command_1.issue('warning', message);
|
||||||
|
}
|
||||||
|
exports.warning = warning;
|
||||||
|
/**
|
||||||
|
* Writes info to log with console.log.
|
||||||
|
* @param message info message
|
||||||
|
*/
|
||||||
|
function info(message) {
|
||||||
|
process.stdout.write(message + os.EOL);
|
||||||
|
}
|
||||||
|
exports.info = info;
|
||||||
|
/**
|
||||||
|
* Begin an output group.
|
||||||
|
*
|
||||||
|
* Output until the next `groupEnd` will be foldable in this group
|
||||||
|
*
|
||||||
|
* @param name The name of the output group
|
||||||
|
*/
|
||||||
|
function startGroup(name) {
|
||||||
|
command_1.issue('group', name);
|
||||||
|
}
|
||||||
|
exports.startGroup = startGroup;
|
||||||
|
/**
|
||||||
|
* End an output group.
|
||||||
|
*/
|
||||||
|
function endGroup() {
|
||||||
|
command_1.issue('endgroup');
|
||||||
|
}
|
||||||
|
exports.endGroup = endGroup;
|
||||||
|
/**
|
||||||
|
* Wrap an asynchronous function call in a group.
|
||||||
|
*
|
||||||
|
* Returns the same type as the function itself.
|
||||||
|
*
|
||||||
|
* @param name The name of the group
|
||||||
|
* @param fn The function to wrap in the group
|
||||||
|
*/
|
||||||
|
function group(name, fn) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
startGroup(name);
|
||||||
|
let result;
|
||||||
|
try {
|
||||||
|
result = yield fn();
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
endGroup();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.group = group;
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
// Wrapper action state
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Saves state for current action, the state can only be retrieved by this action's post job execution.
|
||||||
|
*
|
||||||
|
* @param name name of the state to store
|
||||||
|
* @param value value to store
|
||||||
|
*/
|
||||||
|
function saveState(name, value) {
|
||||||
|
command_1.issueCommand('save-state', { name }, value);
|
||||||
|
}
|
||||||
|
exports.saveState = saveState;
|
||||||
|
/**
|
||||||
|
* Gets the value of an state set by this action's main execution.
|
||||||
|
*
|
||||||
|
* @param name name of the state to get
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
function getState(name) {
|
||||||
|
return process.env[`STATE_${name}`] || '';
|
||||||
|
}
|
||||||
|
exports.getState = getState;
|
||||||
|
//# sourceMappingURL=core.js.map
|
||||||
1
node_modules/@actions/core/lib/core.js.map
generated
vendored
Normal file
1
node_modules/@actions/core/lib/core.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,uCAA6C;AAE7C,uCAAwB;AACxB,2CAA4B;AAU5B;;GAEG;AACH,IAAY,QAUX;AAVD,WAAY,QAAQ;IAClB;;OAEG;IACH,6CAAW,CAAA;IAEX;;OAEG;IACH,6CAAW,CAAA;AACb,CAAC,EAVW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAUnB;AAED,yEAAyE;AACzE,YAAY;AACZ,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,GAAW;IACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;IACvB,sBAAY,CAAC,SAAS,EAAE,EAAC,IAAI,EAAC,EAAE,GAAG,CAAC,CAAA;AACtC,CAAC;AAHD,wCAGC;AAED;;;GAGG;AACH,SAAgB,SAAS,CAAC,MAAc;IACtC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;AACtC,CAAC;AAFD,8BAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,SAAiB;IACvC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;AAC7E,CAAC;AAHD,0BAGC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAsB;IAC3D,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;IACrE,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAA;KAC5D;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;AACnB,CAAC;AARD,4BAQC;AAED;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAa;IACnD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED,yEAAyE;AACzE,UAAU;AACV,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAA;IACnC,KAAK,CAAC,OAAO,CAAC,CAAA;AAChB,CAAC;AAHD,8BAGC;AAED,yEAAyE;AACzE,mBAAmB;AACnB,yEAAyE;AAEzE;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,sBAAY,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACpC,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,eAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACzB,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,OAAe;IACrC,eAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC3B,CAAC;AAFD,0BAEC;AAED;;;GAGG;AACH,SAAgB,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AACxC,CAAC;AAFD,oBAEC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,IAAY;IACrC,eAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACtB,CAAC;AAFD,gCAEC;AAED;;GAEG;AACH,SAAgB,QAAQ;IACtB,eAAK,CAAC,UAAU,CAAC,CAAA;AACnB,CAAC;AAFD,4BAEC;AAED;;;;;;;GAOG;AACH,SAAsB,KAAK,CAAI,IAAY,EAAE,EAAoB;;QAC/D,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhB,IAAI,MAAS,CAAA;QAEb,IAAI;YACF,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;SACpB;gBAAS;YACR,QAAQ,EAAE,CAAA;SACX;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CAAA;AAZD,sBAYC;AAED,yEAAyE;AACzE,uBAAuB;AACvB,yEAAyE;AAEzE;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAa;IACnD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED;;;;;GAKG;AACH,SAAgB,QAAQ,CAAC,IAAY;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;AAC3C,CAAC;AAFD,4BAEC"}
|
||||||
66
node_modules/@actions/core/package.json
generated
vendored
Normal file
66
node_modules/@actions/core/package.json
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
"_from": "@actions/core@^1.2.2",
|
||||||
|
"_id": "@actions/core@1.2.2",
|
||||||
|
"_inBundle": false,
|
||||||
|
"_integrity": "sha512-IbCx7oefq+Gi6FWbSs2Fnw8VkEI6Y4gvjrYprY3RV//ksq/KPMlClOerJ4jRosyal6zkUIc8R9fS/cpRMlGClg==",
|
||||||
|
"_location": "/@actions/core",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"type": "range",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "@actions/core@^1.2.2",
|
||||||
|
"name": "@actions/core",
|
||||||
|
"escapedName": "@actions%2fcore",
|
||||||
|
"scope": "@actions",
|
||||||
|
"rawSpec": "^1.2.2",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "^1.2.2"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.2.tgz",
|
||||||
|
"_shasum": "3c4848d50378f9e3bcb67bcf97813382ec7369ee",
|
||||||
|
"_spec": "@actions/core@^1.2.2",
|
||||||
|
"_where": "/Users/bret/repos/deploy-to-neocities",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/actions/toolkit/issues"
|
||||||
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "Actions core lib",
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^12.0.2"
|
||||||
|
},
|
||||||
|
"directories": {
|
||||||
|
"lib": "lib",
|
||||||
|
"test": "__tests__"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"lib"
|
||||||
|
],
|
||||||
|
"homepage": "https://github.com/actions/toolkit/tree/master/packages/core",
|
||||||
|
"keywords": [
|
||||||
|
"github",
|
||||||
|
"actions",
|
||||||
|
"core"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "lib/core.js",
|
||||||
|
"name": "@actions/core",
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/actions/toolkit.git",
|
||||||
|
"directory": "packages/core"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"audit-moderate": "npm install && npm audit --audit-level=moderate",
|
||||||
|
"test": "echo \"Error: run tests from root\" && exit 1",
|
||||||
|
"tsc": "tsc"
|
||||||
|
},
|
||||||
|
"types": "lib/core.d.ts",
|
||||||
|
"version": "1.2.2"
|
||||||
|
}
|
||||||
74
node_modules/@actions/github/README.md
generated
vendored
Normal file
74
node_modules/@actions/github/README.md
generated
vendored
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
# `@actions/github`
|
||||||
|
|
||||||
|
> A hydrated Octokit client.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Returns an authenticated Octokit client that follows the machine [proxy settings](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/about-self-hosted-runners#using-a-proxy-server-with-self-hosted-runners). See https://octokit.github.io/rest.js for the API.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const github = require('@actions/github');
|
||||||
|
const core = require('@actions/core');
|
||||||
|
|
||||||
|
async function run() {
|
||||||
|
// This should be a token with access to your repository scoped in as a secret.
|
||||||
|
// The YML workflow will need to set myToken with the GitHub Secret Token
|
||||||
|
// myToken: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
// https://help.github.com/en/actions/automating-your-workflow-with-github-actions/authenticating-with-the-github_token#about-the-github_token-secret
|
||||||
|
const myToken = core.getInput('myToken');
|
||||||
|
|
||||||
|
const octokit = new github.GitHub(myToken);
|
||||||
|
|
||||||
|
const { data: pullRequest } = await octokit.pulls.get({
|
||||||
|
owner: 'octokit',
|
||||||
|
repo: 'rest.js',
|
||||||
|
pull_number: 123,
|
||||||
|
mediaType: {
|
||||||
|
format: 'diff'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(pullRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
run();
|
||||||
|
```
|
||||||
|
|
||||||
|
You can pass client options, as specified by [Octokit](https://octokit.github.io/rest.js/), as a second argument to the `GitHub` constructor.
|
||||||
|
|
||||||
|
You can also make GraphQL requests. See https://github.com/octokit/graphql.js for the API.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const result = await octokit.graphql(query, variables);
|
||||||
|
```
|
||||||
|
|
||||||
|
Finally, you can get the context of the current action:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const github = require('@actions/github');
|
||||||
|
|
||||||
|
const context = github.context;
|
||||||
|
|
||||||
|
const newIssue = await octokit.issues.create({
|
||||||
|
...context.repo,
|
||||||
|
title: 'New issue!',
|
||||||
|
body: 'Hello Universe!'
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## Webhook payload typescript definitions
|
||||||
|
|
||||||
|
The npm module `@octokit/webhooks` provides type definitions for the response payloads. You can cast the payload to these types for better type information.
|
||||||
|
|
||||||
|
First, install the npm module `npm install @octokit/webhooks`
|
||||||
|
|
||||||
|
Then, assert the type based on the eventName
|
||||||
|
```ts
|
||||||
|
import * as core from '@actions/core'
|
||||||
|
import * as github from '@actions/github'
|
||||||
|
import * as Webhooks from '@octokit/webhooks'
|
||||||
|
if (github.context.eventName === 'push') {
|
||||||
|
const pushPayload = github.context.payload as Webhooks.WebhookPayloadPush
|
||||||
|
core.info(`The head commit is: ${pushPayload.head}`)
|
||||||
|
}
|
||||||
|
```
|
||||||
26
node_modules/@actions/github/lib/context.d.ts
generated
vendored
Normal file
26
node_modules/@actions/github/lib/context.d.ts
generated
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import { WebhookPayload } from './interfaces';
|
||||||
|
export declare class Context {
|
||||||
|
/**
|
||||||
|
* Webhook payload object that triggered the workflow
|
||||||
|
*/
|
||||||
|
payload: WebhookPayload;
|
||||||
|
eventName: string;
|
||||||
|
sha: string;
|
||||||
|
ref: string;
|
||||||
|
workflow: string;
|
||||||
|
action: string;
|
||||||
|
actor: string;
|
||||||
|
/**
|
||||||
|
* Hydrate the context from the environment
|
||||||
|
*/
|
||||||
|
constructor();
|
||||||
|
get issue(): {
|
||||||
|
owner: string;
|
||||||
|
repo: string;
|
||||||
|
number: number;
|
||||||
|
};
|
||||||
|
get repo(): {
|
||||||
|
owner: string;
|
||||||
|
repo: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
46
node_modules/@actions/github/lib/context.js
generated
vendored
Normal file
46
node_modules/@actions/github/lib/context.js
generated
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const fs_1 = require("fs");
|
||||||
|
const os_1 = require("os");
|
||||||
|
class Context {
|
||||||
|
/**
|
||||||
|
* Hydrate the context from the environment
|
||||||
|
*/
|
||||||
|
constructor() {
|
||||||
|
this.payload = {};
|
||||||
|
if (process.env.GITHUB_EVENT_PATH) {
|
||||||
|
if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) {
|
||||||
|
this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' }));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const path = process.env.GITHUB_EVENT_PATH;
|
||||||
|
process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.eventName = process.env.GITHUB_EVENT_NAME;
|
||||||
|
this.sha = process.env.GITHUB_SHA;
|
||||||
|
this.ref = process.env.GITHUB_REF;
|
||||||
|
this.workflow = process.env.GITHUB_WORKFLOW;
|
||||||
|
this.action = process.env.GITHUB_ACTION;
|
||||||
|
this.actor = process.env.GITHUB_ACTOR;
|
||||||
|
}
|
||||||
|
get issue() {
|
||||||
|
const payload = this.payload;
|
||||||
|
return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number });
|
||||||
|
}
|
||||||
|
get repo() {
|
||||||
|
if (process.env.GITHUB_REPOSITORY) {
|
||||||
|
const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/');
|
||||||
|
return { owner, repo };
|
||||||
|
}
|
||||||
|
if (this.payload.repository) {
|
||||||
|
return {
|
||||||
|
owner: this.payload.repository.owner.login,
|
||||||
|
repo: this.payload.repository.name
|
||||||
|
};
|
||||||
|
}
|
||||||
|
throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.Context = Context;
|
||||||
|
//# sourceMappingURL=context.js.map
|
||||||
1
node_modules/@actions/github/lib/context.js.map
generated
vendored
Normal file
1
node_modules/@actions/github/lib/context.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;AAEA,2BAA2C;AAC3C,2BAAsB;AAEtB,MAAa,OAAO;IAalB;;OAEG;IACH;QACE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;QACjB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE;YACjC,IAAI,eAAU,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;gBAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CACvB,iBAAY,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAC,QAAQ,EAAE,MAAM,EAAC,CAAC,CAChE,CAAA;aACF;iBAAM;gBACL,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAA;gBAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,IAAI,kBAAkB,QAAG,EAAE,CAAC,CAAA;aACvE;SACF;QACD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,iBAA2B,CAAA;QACxD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAoB,CAAA;QAC3C,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAoB,CAAA;QAC3C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAyB,CAAA;QACrD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAuB,CAAA;QACjD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAsB,CAAA;IACjD,CAAC;IAED,IAAI,KAAK;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAE5B,uCACK,IAAI,CAAC,IAAI,KACZ,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,CAAC,MAAM,IAClE;IACH,CAAC;IAED,IAAI,IAAI;QACN,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE;YACjC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC9D,OAAO,EAAC,KAAK,EAAE,IAAI,EAAC,CAAA;SACrB;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAC3B,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK;gBAC1C,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI;aACnC,CAAA;SACF;QAED,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAA;IACH,CAAC;CACF;AA9DD,0BA8DC"}
|
||||||
25
node_modules/@actions/github/lib/github.d.ts
generated
vendored
Normal file
25
node_modules/@actions/github/lib/github.d.ts
generated
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { graphql as GraphQL } from '@octokit/graphql/dist-types/types';
|
||||||
|
import Octokit from '@octokit/rest';
|
||||||
|
import * as Context from './context';
|
||||||
|
export declare const context: Context.Context;
|
||||||
|
export declare class GitHub extends Octokit {
|
||||||
|
graphql: GraphQL;
|
||||||
|
/**
|
||||||
|
* Sets up the REST client and GraphQL client with auth and proxy support.
|
||||||
|
* The parameter `token` or `opts.auth` must be supplied. The GraphQL client
|
||||||
|
* authorization is not setup when `opts.auth` is a function or object.
|
||||||
|
*
|
||||||
|
* @param token Auth token
|
||||||
|
* @param opts Octokit options
|
||||||
|
*/
|
||||||
|
constructor(token: string, opts?: Omit<Octokit.Options, 'auth'>);
|
||||||
|
constructor(opts: Octokit.Options);
|
||||||
|
/**
|
||||||
|
* Disambiguates the constructor overload parameters
|
||||||
|
*/
|
||||||
|
private static disambiguate;
|
||||||
|
private static getOctokitOptions;
|
||||||
|
private static getGraphQL;
|
||||||
|
private static getAuthString;
|
||||||
|
private static getProxyAgent;
|
||||||
|
}
|
||||||
94
node_modules/@actions/github/lib/github.js
generated
vendored
Normal file
94
node_modules/@actions/github/lib/github.js
generated
vendored
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
"use strict";
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||||
|
result["default"] = mod;
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
// Originally pulled from https://github.com/JasonEtco/actions-toolkit/blob/master/src/github.ts
|
||||||
|
const graphql_1 = require("@octokit/graphql");
|
||||||
|
const rest_1 = __importDefault(require("@octokit/rest"));
|
||||||
|
const Context = __importStar(require("./context"));
|
||||||
|
const httpClient = __importStar(require("@actions/http-client"));
|
||||||
|
// We need this in order to extend Octokit
|
||||||
|
rest_1.default.prototype = new rest_1.default();
|
||||||
|
exports.context = new Context.Context();
|
||||||
|
class GitHub extends rest_1.default {
|
||||||
|
constructor(token, opts) {
|
||||||
|
super(GitHub.getOctokitOptions(GitHub.disambiguate(token, opts)));
|
||||||
|
this.graphql = GitHub.getGraphQL(GitHub.disambiguate(token, opts));
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Disambiguates the constructor overload parameters
|
||||||
|
*/
|
||||||
|
static disambiguate(token, opts) {
|
||||||
|
return [
|
||||||
|
typeof token === 'string' ? token : '',
|
||||||
|
typeof token === 'object' ? token : opts || {}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
static getOctokitOptions(args) {
|
||||||
|
const token = args[0];
|
||||||
|
const options = Object.assign({}, args[1]); // Shallow clone - don't mutate the object provided by the caller
|
||||||
|
// Auth
|
||||||
|
const auth = GitHub.getAuthString(token, options);
|
||||||
|
if (auth) {
|
||||||
|
options.auth = auth;
|
||||||
|
}
|
||||||
|
// Proxy
|
||||||
|
const agent = GitHub.getProxyAgent(options);
|
||||||
|
if (agent) {
|
||||||
|
// Shallow clone - don't mutate the object provided by the caller
|
||||||
|
options.request = options.request ? Object.assign({}, options.request) : {};
|
||||||
|
// Set the agent
|
||||||
|
options.request.agent = agent;
|
||||||
|
}
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
static getGraphQL(args) {
|
||||||
|
const defaults = {};
|
||||||
|
const token = args[0];
|
||||||
|
const options = args[1];
|
||||||
|
// Authorization
|
||||||
|
const auth = this.getAuthString(token, options);
|
||||||
|
if (auth) {
|
||||||
|
defaults.headers = {
|
||||||
|
authorization: auth
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// Proxy
|
||||||
|
const agent = GitHub.getProxyAgent(options);
|
||||||
|
if (agent) {
|
||||||
|
defaults.request = { agent };
|
||||||
|
}
|
||||||
|
return graphql_1.graphql.defaults(defaults);
|
||||||
|
}
|
||||||
|
static getAuthString(token, options) {
|
||||||
|
// Validate args
|
||||||
|
if (!token && !options.auth) {
|
||||||
|
throw new Error('Parameter token or opts.auth is required');
|
||||||
|
}
|
||||||
|
else if (token && options.auth) {
|
||||||
|
throw new Error('Parameters token and opts.auth may not both be specified');
|
||||||
|
}
|
||||||
|
return typeof options.auth === 'string' ? options.auth : `token ${token}`;
|
||||||
|
}
|
||||||
|
static getProxyAgent(options) {
|
||||||
|
var _a;
|
||||||
|
if (!((_a = options.request) === null || _a === void 0 ? void 0 : _a.agent)) {
|
||||||
|
const serverUrl = 'https://api.github.com';
|
||||||
|
if (httpClient.getProxyUrl(serverUrl)) {
|
||||||
|
const hc = new httpClient.HttpClient();
|
||||||
|
return hc.getAgent(serverUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.GitHub = GitHub;
|
||||||
|
//# sourceMappingURL=github.js.map
|
||||||
1
node_modules/@actions/github/lib/github.js.map
generated
vendored
Normal file
1
node_modules/@actions/github/lib/github.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gGAAgG;AAChG,8CAAwC;AAUxC,yDAAmC;AACnC,mDAAoC;AAEpC,iEAAkD;AAElD,0CAA0C;AAC1C,cAAO,CAAC,SAAS,GAAG,IAAI,cAAO,EAAE,CAAA;AAEpB,QAAA,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,CAAA;AAE5C,MAAa,MAAO,SAAQ,cAAO;IAiBjC,YAAY,KAA+B,EAAE,IAAsB;QACjE,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAEjE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;IACpE,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,YAAY,CACzB,KAA+B,EAC/B,IAAsB;QAEtB,OAAO;YACL,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;SAC/C,CAAA;IACH,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAC9B,IAA+B;QAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACrB,MAAM,OAAO,qBAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,iEAAiE;QAE9F,OAAO;QACP,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACjD,IAAI,IAAI,EAAE;YACR,OAAO,CAAC,IAAI,GAAG,IAAI,CAAA;SACpB;QAED,QAAQ;QACR,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC3C,IAAI,KAAK,EAAE;YACT,iEAAiE;YACjE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,mBAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAA;YAE7D,gBAAgB;YAChB,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;SAC9B;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,MAAM,CAAC,UAAU,CAAC,IAA+B;QACvD,MAAM,QAAQ,GAA6B,EAAE,CAAA;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAEvB,gBAAgB;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC/C,IAAI,IAAI,EAAE;YACR,QAAQ,CAAC,OAAO,GAAG;gBACjB,aAAa,EAAE,IAAI;aACpB,CAAA;SACF;QAED,QAAQ;QACR,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC3C,IAAI,KAAK,EAAE;YACT,QAAQ,CAAC,OAAO,GAAG,EAAC,KAAK,EAAC,CAAA;SAC3B;QAED,OAAO,iBAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC;IAEO,MAAM,CAAC,aAAa,CAC1B,KAAa,EACb,OAAwB;QAExB,gBAAgB;QAChB,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;SAC5D;aAAM,IAAI,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE;YAChC,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAA;SACF;QAED,OAAO,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,CAAA;IAC3E,CAAC;IAEO,MAAM,CAAC,aAAa,CAC1B,OAAwB;;QAExB,IAAI,QAAC,OAAO,CAAC,OAAO,0CAAE,KAAK,CAAA,EAAE;YAC3B,MAAM,SAAS,GAAG,wBAAwB,CAAA;YAC1C,IAAI,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;gBACrC,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,CAAA;gBACtC,OAAO,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;aAC9B;SACF;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;CACF;AAhHD,wBAgHC"}
|
||||||
36
node_modules/@actions/github/lib/interfaces.d.ts
generated
vendored
Normal file
36
node_modules/@actions/github/lib/interfaces.d.ts
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
export interface PayloadRepository {
|
||||||
|
[key: string]: any;
|
||||||
|
full_name?: string;
|
||||||
|
name: string;
|
||||||
|
owner: {
|
||||||
|
[key: string]: any;
|
||||||
|
login: string;
|
||||||
|
name?: string;
|
||||||
|
};
|
||||||
|
html_url?: string;
|
||||||
|
}
|
||||||
|
export interface WebhookPayload {
|
||||||
|
[key: string]: any;
|
||||||
|
repository?: PayloadRepository;
|
||||||
|
issue?: {
|
||||||
|
[key: string]: any;
|
||||||
|
number: number;
|
||||||
|
html_url?: string;
|
||||||
|
body?: string;
|
||||||
|
};
|
||||||
|
pull_request?: {
|
||||||
|
[key: string]: any;
|
||||||
|
number: number;
|
||||||
|
html_url?: string;
|
||||||
|
body?: string;
|
||||||
|
};
|
||||||
|
sender?: {
|
||||||
|
[key: string]: any;
|
||||||
|
type: string;
|
||||||
|
};
|
||||||
|
action?: string;
|
||||||
|
installation?: {
|
||||||
|
id: number;
|
||||||
|
[key: string]: any;
|
||||||
|
};
|
||||||
|
}
|
||||||
4
node_modules/@actions/github/lib/interfaces.js
generated
vendored
Normal file
4
node_modules/@actions/github/lib/interfaces.js
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
"use strict";
|
||||||
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
//# sourceMappingURL=interfaces.js.map
|
||||||
1
node_modules/@actions/github/lib/interfaces.js.map
generated
vendored
Normal file
1
node_modules/@actions/github/lib/interfaces.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";AAAA,uDAAuD"}
|
||||||
74
node_modules/@actions/github/package.json
generated
vendored
Normal file
74
node_modules/@actions/github/package.json
generated
vendored
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"_from": "@actions/github@^2.1.0",
|
||||||
|
"_id": "@actions/github@2.1.0",
|
||||||
|
"_inBundle": false,
|
||||||
|
"_integrity": "sha512-G4ncMlh4pLLAvNgHUYUtpWQ1zPf/VYqmRH9oshxLabdaOOnp7i1hgSgzr2xne2YUaSND3uqemd3YYTIsm2f/KQ==",
|
||||||
|
"_location": "/@actions/github",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"type": "range",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "@actions/github@^2.1.0",
|
||||||
|
"name": "@actions/github",
|
||||||
|
"escapedName": "@actions%2fgithub",
|
||||||
|
"scope": "@actions",
|
||||||
|
"rawSpec": "^2.1.0",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "^2.1.0"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/@actions/github/-/github-2.1.0.tgz",
|
||||||
|
"_shasum": "ca36cfb146b4c8955f3d5f88d8dde5f89194de21",
|
||||||
|
"_spec": "@actions/github@^2.1.0",
|
||||||
|
"_where": "/Users/bret/repos/deploy-to-neocities",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/actions/toolkit/issues"
|
||||||
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"dependencies": {
|
||||||
|
"@actions/http-client": "^1.0.3",
|
||||||
|
"@octokit/graphql": "^4.3.1",
|
||||||
|
"@octokit/rest": "^16.15.0"
|
||||||
|
},
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "Actions github lib",
|
||||||
|
"devDependencies": {
|
||||||
|
"jest": "^24.7.1",
|
||||||
|
"proxy": "^1.0.1"
|
||||||
|
},
|
||||||
|
"directories": {
|
||||||
|
"lib": "lib",
|
||||||
|
"test": "__tests__"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"lib"
|
||||||
|
],
|
||||||
|
"homepage": "https://github.com/actions/toolkit/tree/master/packages/github",
|
||||||
|
"keywords": [
|
||||||
|
"github",
|
||||||
|
"actions"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "lib/github.js",
|
||||||
|
"name": "@actions/github",
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/actions/toolkit.git",
|
||||||
|
"directory": "packages/github"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"audit-moderate": "npm install && npm audit --audit-level=moderate",
|
||||||
|
"build": "tsc",
|
||||||
|
"format": "prettier --write **/*.ts",
|
||||||
|
"format-check": "prettier --check **/*.ts",
|
||||||
|
"test": "jest",
|
||||||
|
"tsc": "tsc"
|
||||||
|
},
|
||||||
|
"types": "lib/github.d.ts",
|
||||||
|
"version": "2.1.0"
|
||||||
|
}
|
||||||
21
node_modules/@actions/http-client/LICENSE
generated
vendored
Normal file
21
node_modules/@actions/http-client/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
Actions Http Client for Node.js
|
||||||
|
|
||||||
|
Copyright (c) GitHub, Inc.
|
||||||
|
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
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 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.
|
||||||
79
node_modules/@actions/http-client/README.md
generated
vendored
Normal file
79
node_modules/@actions/http-client/README.md
generated
vendored
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="actions.png">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
# Actions Http-Client
|
||||||
|
|
||||||
|
[](https://github.com/actions/http-client/actions)
|
||||||
|
|
||||||
|
A lightweight HTTP client optimized for use with actions, TypeScript with generics and async await.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- HTTP client with TypeScript generics and async/await/Promises
|
||||||
|
- Typings included so no need to acquire separately (great for intellisense and no versioning drift)
|
||||||
|
- [Proxy support](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/about-self-hosted-runners#using-a-proxy-server-with-self-hosted-runners) just works with actions and the runner
|
||||||
|
- Targets ES2019 (runner runs actions with node 12+). Only supported on node 12+.
|
||||||
|
- Basic, Bearer and PAT Support out of the box. Extensible handlers for others.
|
||||||
|
- Redirects supported
|
||||||
|
|
||||||
|
Features and releases [here](./RELEASES.md)
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install @actions/http-client --save
|
||||||
|
```
|
||||||
|
|
||||||
|
## Samples
|
||||||
|
|
||||||
|
See the [HTTP](./__tests__) tests for detailed examples.
|
||||||
|
|
||||||
|
## Errors
|
||||||
|
|
||||||
|
### HTTP
|
||||||
|
|
||||||
|
The HTTP client does not throw unless truly exceptional.
|
||||||
|
|
||||||
|
* A request that successfully executes resulting in a 404, 500 etc... will return a response object with a status code and a body.
|
||||||
|
* Redirects (3xx) will be followed by default.
|
||||||
|
|
||||||
|
See [HTTP tests](./__tests__) for detailed examples.
|
||||||
|
|
||||||
|
## Debugging
|
||||||
|
|
||||||
|
To enable detailed console logging of all HTTP requests and responses, set the NODE_DEBUG environment varible:
|
||||||
|
|
||||||
|
```
|
||||||
|
export NODE_DEBUG=http
|
||||||
|
```
|
||||||
|
|
||||||
|
## Node support
|
||||||
|
|
||||||
|
The http-client is built using the latest LTS version of Node 12. It may work on previous node LTS versions but it's tested and officially supported on Node12+.
|
||||||
|
|
||||||
|
## Support and Versioning
|
||||||
|
|
||||||
|
We follow semver and will hold compatibility between major versions and increment the minor version with new features and capabilities (while holding compat).
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
We welcome PRs. Please create an issue and if applicable, a design before proceeding with code.
|
||||||
|
|
||||||
|
once:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
To build:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
To run all tests:
|
||||||
|
```bash
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
13
node_modules/@actions/http-client/RELEASES.md
generated
vendored
Normal file
13
node_modules/@actions/http-client/RELEASES.md
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
## Releases
|
||||||
|
|
||||||
|
## 1.0.6
|
||||||
|
Automatically sends Content-Type and Accept application/json headers for \<verb>Json() helper methods if not set in the client or parameters.
|
||||||
|
|
||||||
|
## 1.0.5
|
||||||
|
Adds \<verb>Json() helper methods for json over http scenarios.
|
||||||
|
|
||||||
|
## 1.0.4
|
||||||
|
Started to add \<verb>Json() helper methods. Do not use this release for that. Use >= 1.0.5 since there was an issue with types.
|
||||||
|
|
||||||
|
## 1.0.1 to 1.0.3
|
||||||
|
Adds proxy support.
|
||||||
BIN
node_modules/@actions/http-client/actions.png
generated
vendored
Normal file
BIN
node_modules/@actions/http-client/actions.png
generated
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
23
node_modules/@actions/http-client/auth.d.ts
generated
vendored
Normal file
23
node_modules/@actions/http-client/auth.d.ts
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import ifm = require('./interfaces');
|
||||||
|
export declare class BasicCredentialHandler implements ifm.IRequestHandler {
|
||||||
|
username: string;
|
||||||
|
password: string;
|
||||||
|
constructor(username: string, password: string);
|
||||||
|
prepareRequest(options: any): void;
|
||||||
|
canHandleAuthentication(response: ifm.IHttpClientResponse): boolean;
|
||||||
|
handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise<ifm.IHttpClientResponse>;
|
||||||
|
}
|
||||||
|
export declare class BearerCredentialHandler implements ifm.IRequestHandler {
|
||||||
|
token: string;
|
||||||
|
constructor(token: string);
|
||||||
|
prepareRequest(options: any): void;
|
||||||
|
canHandleAuthentication(response: ifm.IHttpClientResponse): boolean;
|
||||||
|
handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise<ifm.IHttpClientResponse>;
|
||||||
|
}
|
||||||
|
export declare class PersonalAccessTokenCredentialHandler implements ifm.IRequestHandler {
|
||||||
|
token: string;
|
||||||
|
constructor(token: string);
|
||||||
|
prepareRequest(options: any): void;
|
||||||
|
canHandleAuthentication(response: ifm.IHttpClientResponse): boolean;
|
||||||
|
handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise<ifm.IHttpClientResponse>;
|
||||||
|
}
|
||||||
55
node_modules/@actions/http-client/auth.js
generated
vendored
Normal file
55
node_modules/@actions/http-client/auth.js
generated
vendored
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
class BasicCredentialHandler {
|
||||||
|
constructor(username, password) {
|
||||||
|
this.username = username;
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
prepareRequest(options) {
|
||||||
|
options.headers['Authorization'] = 'Basic ' + Buffer.from(this.username + ':' + this.password).toString('base64');
|
||||||
|
}
|
||||||
|
// This handler cannot handle 401
|
||||||
|
canHandleAuthentication(response) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
handleAuthentication(httpClient, requestInfo, objs) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.BasicCredentialHandler = BasicCredentialHandler;
|
||||||
|
class BearerCredentialHandler {
|
||||||
|
constructor(token) {
|
||||||
|
this.token = token;
|
||||||
|
}
|
||||||
|
// currently implements pre-authorization
|
||||||
|
// TODO: support preAuth = false where it hooks on 401
|
||||||
|
prepareRequest(options) {
|
||||||
|
options.headers['Authorization'] = 'Bearer ' + this.token;
|
||||||
|
}
|
||||||
|
// This handler cannot handle 401
|
||||||
|
canHandleAuthentication(response) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
handleAuthentication(httpClient, requestInfo, objs) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.BearerCredentialHandler = BearerCredentialHandler;
|
||||||
|
class PersonalAccessTokenCredentialHandler {
|
||||||
|
constructor(token) {
|
||||||
|
this.token = token;
|
||||||
|
}
|
||||||
|
// currently implements pre-authorization
|
||||||
|
// TODO: support preAuth = false where it hooks on 401
|
||||||
|
prepareRequest(options) {
|
||||||
|
options.headers['Authorization'] = 'Basic ' + Buffer.from('PAT:' + this.token).toString('base64');
|
||||||
|
}
|
||||||
|
// This handler cannot handle 401
|
||||||
|
canHandleAuthentication(response) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
handleAuthentication(httpClient, requestInfo, objs) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
|
||||||
118
node_modules/@actions/http-client/index.d.ts
generated
vendored
Normal file
118
node_modules/@actions/http-client/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
/// <reference types="node" />
|
||||||
|
import http = require("http");
|
||||||
|
import ifm = require('./interfaces');
|
||||||
|
export declare enum HttpCodes {
|
||||||
|
OK = 200,
|
||||||
|
MultipleChoices = 300,
|
||||||
|
MovedPermanently = 301,
|
||||||
|
ResourceMoved = 302,
|
||||||
|
SeeOther = 303,
|
||||||
|
NotModified = 304,
|
||||||
|
UseProxy = 305,
|
||||||
|
SwitchProxy = 306,
|
||||||
|
TemporaryRedirect = 307,
|
||||||
|
PermanentRedirect = 308,
|
||||||
|
BadRequest = 400,
|
||||||
|
Unauthorized = 401,
|
||||||
|
PaymentRequired = 402,
|
||||||
|
Forbidden = 403,
|
||||||
|
NotFound = 404,
|
||||||
|
MethodNotAllowed = 405,
|
||||||
|
NotAcceptable = 406,
|
||||||
|
ProxyAuthenticationRequired = 407,
|
||||||
|
RequestTimeout = 408,
|
||||||
|
Conflict = 409,
|
||||||
|
Gone = 410,
|
||||||
|
InternalServerError = 500,
|
||||||
|
NotImplemented = 501,
|
||||||
|
BadGateway = 502,
|
||||||
|
ServiceUnavailable = 503,
|
||||||
|
GatewayTimeout = 504
|
||||||
|
}
|
||||||
|
export declare enum Headers {
|
||||||
|
Accept = "accept",
|
||||||
|
ContentType = "content-type"
|
||||||
|
}
|
||||||
|
export declare enum MediaTypes {
|
||||||
|
ApplicationJson = "application/json"
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Returns the proxy URL, depending upon the supplied url and proxy environment variables.
|
||||||
|
* @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
|
||||||
|
*/
|
||||||
|
export declare function getProxyUrl(serverUrl: string): string;
|
||||||
|
export declare class HttpClientResponse implements ifm.IHttpClientResponse {
|
||||||
|
constructor(message: http.IncomingMessage);
|
||||||
|
message: http.IncomingMessage;
|
||||||
|
readBody(): Promise<string>;
|
||||||
|
}
|
||||||
|
export declare function isHttps(requestUrl: string): boolean;
|
||||||
|
export declare class HttpClient {
|
||||||
|
userAgent: string | undefined;
|
||||||
|
handlers: ifm.IRequestHandler[];
|
||||||
|
requestOptions: ifm.IRequestOptions;
|
||||||
|
private _ignoreSslError;
|
||||||
|
private _socketTimeout;
|
||||||
|
private _allowRedirects;
|
||||||
|
private _allowRedirectDowngrade;
|
||||||
|
private _maxRedirects;
|
||||||
|
private _allowRetries;
|
||||||
|
private _maxRetries;
|
||||||
|
private _agent;
|
||||||
|
private _proxyAgent;
|
||||||
|
private _keepAlive;
|
||||||
|
private _disposed;
|
||||||
|
constructor(userAgent?: string, handlers?: ifm.IRequestHandler[], requestOptions?: ifm.IRequestOptions);
|
||||||
|
options(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
get(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
del(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
post(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
patch(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
put(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
head(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
sendStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
/**
|
||||||
|
* Gets a typed object from an endpoint
|
||||||
|
* Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise
|
||||||
|
*/
|
||||||
|
getJson<T>(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.ITypedResponse<T>>;
|
||||||
|
postJson<T>(requestUrl: string, obj: any, additionalHeaders?: ifm.IHeaders): Promise<ifm.ITypedResponse<T>>;
|
||||||
|
putJson<T>(requestUrl: string, obj: any, additionalHeaders?: ifm.IHeaders): Promise<ifm.ITypedResponse<T>>;
|
||||||
|
patchJson<T>(requestUrl: string, obj: any, additionalHeaders?: ifm.IHeaders): Promise<ifm.ITypedResponse<T>>;
|
||||||
|
/**
|
||||||
|
* Makes a raw http request.
|
||||||
|
* All other methods such as get, post, patch, and request ultimately call this.
|
||||||
|
* Prefer get, del, post and patch
|
||||||
|
*/
|
||||||
|
request(verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: ifm.IHeaders): Promise<ifm.IHttpClientResponse>;
|
||||||
|
/**
|
||||||
|
* Needs to be called if keepAlive is set to true in request options.
|
||||||
|
*/
|
||||||
|
dispose(): void;
|
||||||
|
/**
|
||||||
|
* Raw request.
|
||||||
|
* @param info
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
requestRaw(info: ifm.IRequestInfo, data: string | NodeJS.ReadableStream): Promise<ifm.IHttpClientResponse>;
|
||||||
|
/**
|
||||||
|
* Raw request with callback.
|
||||||
|
* @param info
|
||||||
|
* @param data
|
||||||
|
* @param onResult
|
||||||
|
*/
|
||||||
|
requestRawWithCallback(info: ifm.IRequestInfo, data: string | NodeJS.ReadableStream, onResult: (err: any, res: ifm.IHttpClientResponse) => void): void;
|
||||||
|
/**
|
||||||
|
* Gets an http agent. This function is useful when you need an http agent that handles
|
||||||
|
* routing through a proxy server - depending upon the url and proxy environment variables.
|
||||||
|
* @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
|
||||||
|
*/
|
||||||
|
getAgent(serverUrl: string): http.Agent;
|
||||||
|
private _prepareRequest;
|
||||||
|
private _mergeHeaders;
|
||||||
|
private _getExistingOrDefaultHeader;
|
||||||
|
private _getAgent;
|
||||||
|
private _performExponentialBackoff;
|
||||||
|
private static dateTimeDeserializer;
|
||||||
|
private _processResponse;
|
||||||
|
}
|
||||||
500
node_modules/@actions/http-client/index.js
generated
vendored
Normal file
500
node_modules/@actions/http-client/index.js
generated
vendored
Normal file
@@ -0,0 +1,500 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const url = require("url");
|
||||||
|
const http = require("http");
|
||||||
|
const https = require("https");
|
||||||
|
const pm = require("./proxy");
|
||||||
|
let tunnel;
|
||||||
|
var HttpCodes;
|
||||||
|
(function (HttpCodes) {
|
||||||
|
HttpCodes[HttpCodes["OK"] = 200] = "OK";
|
||||||
|
HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices";
|
||||||
|
HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently";
|
||||||
|
HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved";
|
||||||
|
HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther";
|
||||||
|
HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified";
|
||||||
|
HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy";
|
||||||
|
HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy";
|
||||||
|
HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect";
|
||||||
|
HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect";
|
||||||
|
HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
|
||||||
|
HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
|
||||||
|
HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired";
|
||||||
|
HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
|
||||||
|
HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
|
||||||
|
HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed";
|
||||||
|
HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable";
|
||||||
|
HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
|
||||||
|
HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
|
||||||
|
HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
|
||||||
|
HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
|
||||||
|
HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
|
||||||
|
HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
|
||||||
|
HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
|
||||||
|
HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable";
|
||||||
|
HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout";
|
||||||
|
})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));
|
||||||
|
var Headers;
|
||||||
|
(function (Headers) {
|
||||||
|
Headers["Accept"] = "accept";
|
||||||
|
Headers["ContentType"] = "content-type";
|
||||||
|
})(Headers = exports.Headers || (exports.Headers = {}));
|
||||||
|
var MediaTypes;
|
||||||
|
(function (MediaTypes) {
|
||||||
|
MediaTypes["ApplicationJson"] = "application/json";
|
||||||
|
})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));
|
||||||
|
/**
|
||||||
|
* Returns the proxy URL, depending upon the supplied url and proxy environment variables.
|
||||||
|
* @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
|
||||||
|
*/
|
||||||
|
function getProxyUrl(serverUrl) {
|
||||||
|
let proxyUrl = pm.getProxyUrl(url.parse(serverUrl));
|
||||||
|
return proxyUrl ? proxyUrl.href : '';
|
||||||
|
}
|
||||||
|
exports.getProxyUrl = getProxyUrl;
|
||||||
|
const HttpRedirectCodes = [HttpCodes.MovedPermanently, HttpCodes.ResourceMoved, HttpCodes.SeeOther, HttpCodes.TemporaryRedirect, HttpCodes.PermanentRedirect];
|
||||||
|
const HttpResponseRetryCodes = [HttpCodes.BadGateway, HttpCodes.ServiceUnavailable, HttpCodes.GatewayTimeout];
|
||||||
|
const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
|
||||||
|
const ExponentialBackoffCeiling = 10;
|
||||||
|
const ExponentialBackoffTimeSlice = 5;
|
||||||
|
class HttpClientResponse {
|
||||||
|
constructor(message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
readBody() {
|
||||||
|
return new Promise(async (resolve, reject) => {
|
||||||
|
let output = Buffer.alloc(0);
|
||||||
|
this.message.on('data', (chunk) => {
|
||||||
|
output = Buffer.concat([output, chunk]);
|
||||||
|
});
|
||||||
|
this.message.on('end', () => {
|
||||||
|
resolve(output.toString());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.HttpClientResponse = HttpClientResponse;
|
||||||
|
function isHttps(requestUrl) {
|
||||||
|
let parsedUrl = url.parse(requestUrl);
|
||||||
|
return parsedUrl.protocol === 'https:';
|
||||||
|
}
|
||||||
|
exports.isHttps = isHttps;
|
||||||
|
class HttpClient {
|
||||||
|
constructor(userAgent, handlers, requestOptions) {
|
||||||
|
this._ignoreSslError = false;
|
||||||
|
this._allowRedirects = true;
|
||||||
|
this._allowRedirectDowngrade = false;
|
||||||
|
this._maxRedirects = 50;
|
||||||
|
this._allowRetries = false;
|
||||||
|
this._maxRetries = 1;
|
||||||
|
this._keepAlive = false;
|
||||||
|
this._disposed = false;
|
||||||
|
this.userAgent = userAgent;
|
||||||
|
this.handlers = handlers || [];
|
||||||
|
this.requestOptions = requestOptions;
|
||||||
|
if (requestOptions) {
|
||||||
|
if (requestOptions.ignoreSslError != null) {
|
||||||
|
this._ignoreSslError = requestOptions.ignoreSslError;
|
||||||
|
}
|
||||||
|
this._socketTimeout = requestOptions.socketTimeout;
|
||||||
|
if (requestOptions.allowRedirects != null) {
|
||||||
|
this._allowRedirects = requestOptions.allowRedirects;
|
||||||
|
}
|
||||||
|
if (requestOptions.allowRedirectDowngrade != null) {
|
||||||
|
this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;
|
||||||
|
}
|
||||||
|
if (requestOptions.maxRedirects != null) {
|
||||||
|
this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
|
||||||
|
}
|
||||||
|
if (requestOptions.keepAlive != null) {
|
||||||
|
this._keepAlive = requestOptions.keepAlive;
|
||||||
|
}
|
||||||
|
if (requestOptions.allowRetries != null) {
|
||||||
|
this._allowRetries = requestOptions.allowRetries;
|
||||||
|
}
|
||||||
|
if (requestOptions.maxRetries != null) {
|
||||||
|
this._maxRetries = requestOptions.maxRetries;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
options(requestUrl, additionalHeaders) {
|
||||||
|
return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});
|
||||||
|
}
|
||||||
|
get(requestUrl, additionalHeaders) {
|
||||||
|
return this.request('GET', requestUrl, null, additionalHeaders || {});
|
||||||
|
}
|
||||||
|
del(requestUrl, additionalHeaders) {
|
||||||
|
return this.request('DELETE', requestUrl, null, additionalHeaders || {});
|
||||||
|
}
|
||||||
|
post(requestUrl, data, additionalHeaders) {
|
||||||
|
return this.request('POST', requestUrl, data, additionalHeaders || {});
|
||||||
|
}
|
||||||
|
patch(requestUrl, data, additionalHeaders) {
|
||||||
|
return this.request('PATCH', requestUrl, data, additionalHeaders || {});
|
||||||
|
}
|
||||||
|
put(requestUrl, data, additionalHeaders) {
|
||||||
|
return this.request('PUT', requestUrl, data, additionalHeaders || {});
|
||||||
|
}
|
||||||
|
head(requestUrl, additionalHeaders) {
|
||||||
|
return this.request('HEAD', requestUrl, null, additionalHeaders || {});
|
||||||
|
}
|
||||||
|
sendStream(verb, requestUrl, stream, additionalHeaders) {
|
||||||
|
return this.request(verb, requestUrl, stream, additionalHeaders);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Gets a typed object from an endpoint
|
||||||
|
* Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise
|
||||||
|
*/
|
||||||
|
async getJson(requestUrl, additionalHeaders = {}) {
|
||||||
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
||||||
|
let res = await this.get(requestUrl, additionalHeaders);
|
||||||
|
return this._processResponse(res, this.requestOptions);
|
||||||
|
}
|
||||||
|
async postJson(requestUrl, obj, additionalHeaders = {}) {
|
||||||
|
let data = JSON.stringify(obj, null, 2);
|
||||||
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
||||||
|
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
|
||||||
|
let res = await this.post(requestUrl, data, additionalHeaders);
|
||||||
|
return this._processResponse(res, this.requestOptions);
|
||||||
|
}
|
||||||
|
async putJson(requestUrl, obj, additionalHeaders = {}) {
|
||||||
|
let data = JSON.stringify(obj, null, 2);
|
||||||
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
||||||
|
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
|
||||||
|
let res = await this.put(requestUrl, data, additionalHeaders);
|
||||||
|
return this._processResponse(res, this.requestOptions);
|
||||||
|
}
|
||||||
|
async patchJson(requestUrl, obj, additionalHeaders = {}) {
|
||||||
|
let data = JSON.stringify(obj, null, 2);
|
||||||
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
||||||
|
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
|
||||||
|
let res = await this.patch(requestUrl, data, additionalHeaders);
|
||||||
|
return this._processResponse(res, this.requestOptions);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Makes a raw http request.
|
||||||
|
* All other methods such as get, post, patch, and request ultimately call this.
|
||||||
|
* Prefer get, del, post and patch
|
||||||
|
*/
|
||||||
|
async request(verb, requestUrl, data, headers) {
|
||||||
|
if (this._disposed) {
|
||||||
|
throw new Error("Client has already been disposed.");
|
||||||
|
}
|
||||||
|
let parsedUrl = url.parse(requestUrl);
|
||||||
|
let info = this._prepareRequest(verb, parsedUrl, headers);
|
||||||
|
// Only perform retries on reads since writes may not be idempotent.
|
||||||
|
let maxTries = (this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1) ? this._maxRetries + 1 : 1;
|
||||||
|
let numTries = 0;
|
||||||
|
let response;
|
||||||
|
while (numTries < maxTries) {
|
||||||
|
response = await this.requestRaw(info, data);
|
||||||
|
// Check if it's an authentication challenge
|
||||||
|
if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) {
|
||||||
|
let authenticationHandler;
|
||||||
|
for (let i = 0; i < this.handlers.length; i++) {
|
||||||
|
if (this.handlers[i].canHandleAuthentication(response)) {
|
||||||
|
authenticationHandler = this.handlers[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (authenticationHandler) {
|
||||||
|
return authenticationHandler.handleAuthentication(this, info, data);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// We have received an unauthorized response but have no handlers to handle it.
|
||||||
|
// Let the response return to the caller.
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let redirectsRemaining = this._maxRedirects;
|
||||||
|
while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1
|
||||||
|
&& this._allowRedirects
|
||||||
|
&& redirectsRemaining > 0) {
|
||||||
|
const redirectUrl = response.message.headers["location"];
|
||||||
|
if (!redirectUrl) {
|
||||||
|
// if there's no location to redirect to, we won't
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
let parsedRedirectUrl = url.parse(redirectUrl);
|
||||||
|
if (parsedUrl.protocol == 'https:' && parsedUrl.protocol != parsedRedirectUrl.protocol && !this._allowRedirectDowngrade) {
|
||||||
|
throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.");
|
||||||
|
}
|
||||||
|
// we need to finish reading the response before reassigning response
|
||||||
|
// which will leak the open socket.
|
||||||
|
await response.readBody();
|
||||||
|
// let's make the request with the new redirectUrl
|
||||||
|
info = this._prepareRequest(verb, parsedRedirectUrl, headers);
|
||||||
|
response = await this.requestRaw(info, data);
|
||||||
|
redirectsRemaining--;
|
||||||
|
}
|
||||||
|
if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) {
|
||||||
|
// If not a retry code, return immediately instead of retrying
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
numTries += 1;
|
||||||
|
if (numTries < maxTries) {
|
||||||
|
await response.readBody();
|
||||||
|
await this._performExponentialBackoff(numTries);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Needs to be called if keepAlive is set to true in request options.
|
||||||
|
*/
|
||||||
|
dispose() {
|
||||||
|
if (this._agent) {
|
||||||
|
this._agent.destroy();
|
||||||
|
}
|
||||||
|
this._disposed = true;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Raw request.
|
||||||
|
* @param info
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
requestRaw(info, data) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let callbackForResult = function (err, res) {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
resolve(res);
|
||||||
|
};
|
||||||
|
this.requestRawWithCallback(info, data, callbackForResult);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Raw request with callback.
|
||||||
|
* @param info
|
||||||
|
* @param data
|
||||||
|
* @param onResult
|
||||||
|
*/
|
||||||
|
requestRawWithCallback(info, data, onResult) {
|
||||||
|
let socket;
|
||||||
|
if (typeof (data) === 'string') {
|
||||||
|
info.options.headers["Content-Length"] = Buffer.byteLength(data, 'utf8');
|
||||||
|
}
|
||||||
|
let callbackCalled = false;
|
||||||
|
let handleResult = (err, res) => {
|
||||||
|
if (!callbackCalled) {
|
||||||
|
callbackCalled = true;
|
||||||
|
onResult(err, res);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let req = info.httpModule.request(info.options, (msg) => {
|
||||||
|
let res = new HttpClientResponse(msg);
|
||||||
|
handleResult(null, res);
|
||||||
|
});
|
||||||
|
req.on('socket', (sock) => {
|
||||||
|
socket = sock;
|
||||||
|
});
|
||||||
|
// If we ever get disconnected, we want the socket to timeout eventually
|
||||||
|
req.setTimeout(this._socketTimeout || 3 * 60000, () => {
|
||||||
|
if (socket) {
|
||||||
|
socket.end();
|
||||||
|
}
|
||||||
|
handleResult(new Error('Request timeout: ' + info.options.path), null);
|
||||||
|
});
|
||||||
|
req.on('error', function (err) {
|
||||||
|
// err has statusCode property
|
||||||
|
// res should have headers
|
||||||
|
handleResult(err, null);
|
||||||
|
});
|
||||||
|
if (data && typeof (data) === 'string') {
|
||||||
|
req.write(data, 'utf8');
|
||||||
|
}
|
||||||
|
if (data && typeof (data) !== 'string') {
|
||||||
|
data.on('close', function () {
|
||||||
|
req.end();
|
||||||
|
});
|
||||||
|
data.pipe(req);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
req.end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Gets an http agent. This function is useful when you need an http agent that handles
|
||||||
|
* routing through a proxy server - depending upon the url and proxy environment variables.
|
||||||
|
* @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
|
||||||
|
*/
|
||||||
|
getAgent(serverUrl) {
|
||||||
|
let parsedUrl = url.parse(serverUrl);
|
||||||
|
return this._getAgent(parsedUrl);
|
||||||
|
}
|
||||||
|
_prepareRequest(method, requestUrl, headers) {
|
||||||
|
const info = {};
|
||||||
|
info.parsedUrl = requestUrl;
|
||||||
|
const usingSsl = info.parsedUrl.protocol === 'https:';
|
||||||
|
info.httpModule = usingSsl ? https : http;
|
||||||
|
const defaultPort = usingSsl ? 443 : 80;
|
||||||
|
info.options = {};
|
||||||
|
info.options.host = info.parsedUrl.hostname;
|
||||||
|
info.options.port = info.parsedUrl.port ? parseInt(info.parsedUrl.port) : defaultPort;
|
||||||
|
info.options.path = (info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');
|
||||||
|
info.options.method = method;
|
||||||
|
info.options.headers = this._mergeHeaders(headers);
|
||||||
|
if (this.userAgent != null) {
|
||||||
|
info.options.headers["user-agent"] = this.userAgent;
|
||||||
|
}
|
||||||
|
info.options.agent = this._getAgent(info.parsedUrl);
|
||||||
|
// gives handlers an opportunity to participate
|
||||||
|
if (this.handlers) {
|
||||||
|
this.handlers.forEach((handler) => {
|
||||||
|
handler.prepareRequest(info.options);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
_mergeHeaders(headers) {
|
||||||
|
const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {});
|
||||||
|
if (this.requestOptions && this.requestOptions.headers) {
|
||||||
|
return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers));
|
||||||
|
}
|
||||||
|
return lowercaseKeys(headers || {});
|
||||||
|
}
|
||||||
|
_getExistingOrDefaultHeader(additionalHeaders, header, _default) {
|
||||||
|
const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {});
|
||||||
|
let clientHeader;
|
||||||
|
if (this.requestOptions && this.requestOptions.headers) {
|
||||||
|
clientHeader = lowercaseKeys(this.requestOptions.headers)[header];
|
||||||
|
}
|
||||||
|
return additionalHeaders[header] || clientHeader || _default;
|
||||||
|
}
|
||||||
|
_getAgent(parsedUrl) {
|
||||||
|
let agent;
|
||||||
|
let proxyUrl = pm.getProxyUrl(parsedUrl);
|
||||||
|
let useProxy = proxyUrl && proxyUrl.hostname;
|
||||||
|
if (this._keepAlive && useProxy) {
|
||||||
|
agent = this._proxyAgent;
|
||||||
|
}
|
||||||
|
if (this._keepAlive && !useProxy) {
|
||||||
|
agent = this._agent;
|
||||||
|
}
|
||||||
|
// if agent is already assigned use that agent.
|
||||||
|
if (!!agent) {
|
||||||
|
return agent;
|
||||||
|
}
|
||||||
|
const usingSsl = parsedUrl.protocol === 'https:';
|
||||||
|
let maxSockets = 100;
|
||||||
|
if (!!this.requestOptions) {
|
||||||
|
maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;
|
||||||
|
}
|
||||||
|
if (useProxy) {
|
||||||
|
// If using proxy, need tunnel
|
||||||
|
if (!tunnel) {
|
||||||
|
tunnel = require('tunnel');
|
||||||
|
}
|
||||||
|
const agentOptions = {
|
||||||
|
maxSockets: maxSockets,
|
||||||
|
keepAlive: this._keepAlive,
|
||||||
|
proxy: {
|
||||||
|
proxyAuth: proxyUrl.auth,
|
||||||
|
host: proxyUrl.hostname,
|
||||||
|
port: proxyUrl.port
|
||||||
|
},
|
||||||
|
};
|
||||||
|
let tunnelAgent;
|
||||||
|
const overHttps = proxyUrl.protocol === 'https:';
|
||||||
|
if (usingSsl) {
|
||||||
|
tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
|
||||||
|
}
|
||||||
|
agent = tunnelAgent(agentOptions);
|
||||||
|
this._proxyAgent = agent;
|
||||||
|
}
|
||||||
|
// if reusing agent across request and tunneling agent isn't assigned create a new agent
|
||||||
|
if (this._keepAlive && !agent) {
|
||||||
|
const options = { keepAlive: this._keepAlive, maxSockets: maxSockets };
|
||||||
|
agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
|
||||||
|
this._agent = agent;
|
||||||
|
}
|
||||||
|
// if not using private agent and tunnel agent isn't setup then use global agent
|
||||||
|
if (!agent) {
|
||||||
|
agent = usingSsl ? https.globalAgent : http.globalAgent;
|
||||||
|
}
|
||||||
|
if (usingSsl && this._ignoreSslError) {
|
||||||
|
// we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
|
||||||
|
// http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
|
||||||
|
// we have to cast it to any and change it directly
|
||||||
|
agent.options = Object.assign(agent.options || {}, { rejectUnauthorized: false });
|
||||||
|
}
|
||||||
|
return agent;
|
||||||
|
}
|
||||||
|
_performExponentialBackoff(retryNumber) {
|
||||||
|
retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
|
||||||
|
const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
|
||||||
|
return new Promise(resolve => setTimeout(() => resolve(), ms));
|
||||||
|
}
|
||||||
|
static dateTimeDeserializer(key, value) {
|
||||||
|
if (typeof value === 'string') {
|
||||||
|
let a = new Date(value);
|
||||||
|
if (!isNaN(a.valueOf())) {
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
async _processResponse(res, options) {
|
||||||
|
return new Promise(async (resolve, reject) => {
|
||||||
|
const statusCode = res.message.statusCode;
|
||||||
|
const response = {
|
||||||
|
statusCode: statusCode,
|
||||||
|
result: null,
|
||||||
|
headers: {}
|
||||||
|
};
|
||||||
|
// not found leads to null obj returned
|
||||||
|
if (statusCode == HttpCodes.NotFound) {
|
||||||
|
resolve(response);
|
||||||
|
}
|
||||||
|
let obj;
|
||||||
|
let contents;
|
||||||
|
// get the result from the body
|
||||||
|
try {
|
||||||
|
contents = await res.readBody();
|
||||||
|
if (contents && contents.length > 0) {
|
||||||
|
if (options && options.deserializeDates) {
|
||||||
|
obj = JSON.parse(contents, HttpClient.dateTimeDeserializer);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
obj = JSON.parse(contents);
|
||||||
|
}
|
||||||
|
response.result = obj;
|
||||||
|
}
|
||||||
|
response.headers = res.message.headers;
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
// Invalid resource (contents not json); leaving result obj null
|
||||||
|
}
|
||||||
|
// note that 3xx redirects are handled by the http layer.
|
||||||
|
if (statusCode > 299) {
|
||||||
|
let msg;
|
||||||
|
// if exception/error in body, attempt to get better error
|
||||||
|
if (obj && obj.message) {
|
||||||
|
msg = obj.message;
|
||||||
|
}
|
||||||
|
else if (contents && contents.length > 0) {
|
||||||
|
// it may be the case that the exception is in the body message as string
|
||||||
|
msg = contents;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
msg = "Failed request: (" + statusCode + ")";
|
||||||
|
}
|
||||||
|
let err = new Error(msg);
|
||||||
|
// attach statusCode and body obj (if available) to the error object
|
||||||
|
err['statusCode'] = statusCode;
|
||||||
|
if (response.result) {
|
||||||
|
err['result'] = response.result;
|
||||||
|
}
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
resolve(response);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.HttpClient = HttpClient;
|
||||||
50
node_modules/@actions/http-client/interfaces.d.ts
generated
vendored
Normal file
50
node_modules/@actions/http-client/interfaces.d.ts
generated
vendored
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
/// <reference types="node" />
|
||||||
|
import http = require("http");
|
||||||
|
import url = require("url");
|
||||||
|
export interface IHeaders {
|
||||||
|
[key: string]: any;
|
||||||
|
}
|
||||||
|
export interface IHttpClient {
|
||||||
|
options(requestUrl: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
get(requestUrl: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
del(requestUrl: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
post(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
patch(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
put(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
sendStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
request(verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: IHeaders): Promise<IHttpClientResponse>;
|
||||||
|
requestRaw(info: IRequestInfo, data: string | NodeJS.ReadableStream): Promise<IHttpClientResponse>;
|
||||||
|
requestRawWithCallback(info: IRequestInfo, data: string | NodeJS.ReadableStream, onResult: (err: any, res: IHttpClientResponse) => void): void;
|
||||||
|
}
|
||||||
|
export interface IRequestHandler {
|
||||||
|
prepareRequest(options: http.RequestOptions): void;
|
||||||
|
canHandleAuthentication(response: IHttpClientResponse): boolean;
|
||||||
|
handleAuthentication(httpClient: IHttpClient, requestInfo: IRequestInfo, objs: any): Promise<IHttpClientResponse>;
|
||||||
|
}
|
||||||
|
export interface IHttpClientResponse {
|
||||||
|
message: http.IncomingMessage;
|
||||||
|
readBody(): Promise<string>;
|
||||||
|
}
|
||||||
|
export interface IRequestInfo {
|
||||||
|
options: http.RequestOptions;
|
||||||
|
parsedUrl: url.Url;
|
||||||
|
httpModule: any;
|
||||||
|
}
|
||||||
|
export interface IRequestOptions {
|
||||||
|
headers?: IHeaders;
|
||||||
|
socketTimeout?: number;
|
||||||
|
ignoreSslError?: boolean;
|
||||||
|
allowRedirects?: boolean;
|
||||||
|
allowRedirectDowngrade?: boolean;
|
||||||
|
maxRedirects?: number;
|
||||||
|
maxSockets?: number;
|
||||||
|
keepAlive?: boolean;
|
||||||
|
deserializeDates?: boolean;
|
||||||
|
allowRetries?: boolean;
|
||||||
|
maxRetries?: number;
|
||||||
|
}
|
||||||
|
export interface ITypedResponse<T> {
|
||||||
|
statusCode: number;
|
||||||
|
result: T | null;
|
||||||
|
headers: Object;
|
||||||
|
}
|
||||||
3
node_modules/@actions/http-client/interfaces.js
generated
vendored
Normal file
3
node_modules/@actions/http-client/interfaces.js
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
;
|
||||||
63
node_modules/@actions/http-client/package.json
generated
vendored
Normal file
63
node_modules/@actions/http-client/package.json
generated
vendored
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
{
|
||||||
|
"_from": "@actions/http-client@^1.0.3",
|
||||||
|
"_id": "@actions/http-client@1.0.6",
|
||||||
|
"_inBundle": false,
|
||||||
|
"_integrity": "sha512-LGmio4w98UyGX33b/W6V6Nx/sQHRXZ859YlMkn36wPsXPB82u8xTVlA/Dq2DXrm6lEq9RVmisRJa1c+HETAIJA==",
|
||||||
|
"_location": "/@actions/http-client",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"type": "range",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "@actions/http-client@^1.0.3",
|
||||||
|
"name": "@actions/http-client",
|
||||||
|
"escapedName": "@actions%2fhttp-client",
|
||||||
|
"scope": "@actions",
|
||||||
|
"rawSpec": "^1.0.3",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "^1.0.3"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/@actions/github"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.6.tgz",
|
||||||
|
"_shasum": "6f9267ca50e1d74d8581f4a894a943cd4c97b49a",
|
||||||
|
"_spec": "@actions/http-client@^1.0.3",
|
||||||
|
"_where": "/Users/bret/repos/deploy-to-neocities/node_modules/@actions/github",
|
||||||
|
"author": {
|
||||||
|
"name": "GitHub, Inc."
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/actions/http-client/issues"
|
||||||
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"dependencies": {
|
||||||
|
"tunnel": "0.0.6"
|
||||||
|
},
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "Actions Http Client",
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/jest": "^24.0.25",
|
||||||
|
"@types/node": "^12.12.24",
|
||||||
|
"jest": "^24.9.0",
|
||||||
|
"proxy": "^1.0.1",
|
||||||
|
"ts-jest": "^24.3.0",
|
||||||
|
"typescript": "^3.7.4"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/actions/http-client#readme",
|
||||||
|
"keywords": [
|
||||||
|
"Actions",
|
||||||
|
"Http"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "index.js",
|
||||||
|
"name": "@actions/http-client",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/actions/http-client.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "rm -Rf ./_out && tsc && cp package*.json ./_out && cp *.md ./_out && cp LICENSE ./_out && cp actions.png ./_out",
|
||||||
|
"test": "jest"
|
||||||
|
},
|
||||||
|
"version": "1.0.6"
|
||||||
|
}
|
||||||
4
node_modules/@actions/http-client/proxy.d.ts
generated
vendored
Normal file
4
node_modules/@actions/http-client/proxy.d.ts
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
/// <reference types="node" />
|
||||||
|
import * as url from 'url';
|
||||||
|
export declare function getProxyUrl(reqUrl: url.Url): url.Url | undefined;
|
||||||
|
export declare function checkBypass(reqUrl: url.Url): boolean;
|
||||||
57
node_modules/@actions/http-client/proxy.js
generated
vendored
Normal file
57
node_modules/@actions/http-client/proxy.js
generated
vendored
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const url = require("url");
|
||||||
|
function getProxyUrl(reqUrl) {
|
||||||
|
let usingSsl = reqUrl.protocol === 'https:';
|
||||||
|
let proxyUrl;
|
||||||
|
if (checkBypass(reqUrl)) {
|
||||||
|
return proxyUrl;
|
||||||
|
}
|
||||||
|
let proxyVar;
|
||||||
|
if (usingSsl) {
|
||||||
|
proxyVar = process.env["https_proxy"] ||
|
||||||
|
process.env["HTTPS_PROXY"];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
proxyVar = process.env["http_proxy"] ||
|
||||||
|
process.env["HTTP_PROXY"];
|
||||||
|
}
|
||||||
|
if (proxyVar) {
|
||||||
|
proxyUrl = url.parse(proxyVar);
|
||||||
|
}
|
||||||
|
return proxyUrl;
|
||||||
|
}
|
||||||
|
exports.getProxyUrl = getProxyUrl;
|
||||||
|
function checkBypass(reqUrl) {
|
||||||
|
if (!reqUrl.hostname) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
let noProxy = process.env["no_proxy"] || process.env["NO_PROXY"] || '';
|
||||||
|
if (!noProxy) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Determine the request port
|
||||||
|
let reqPort;
|
||||||
|
if (reqUrl.port) {
|
||||||
|
reqPort = Number(reqUrl.port);
|
||||||
|
}
|
||||||
|
else if (reqUrl.protocol === 'http:') {
|
||||||
|
reqPort = 80;
|
||||||
|
}
|
||||||
|
else if (reqUrl.protocol === 'https:') {
|
||||||
|
reqPort = 443;
|
||||||
|
}
|
||||||
|
// Format the request hostname and hostname with port
|
||||||
|
let upperReqHosts = [reqUrl.hostname.toUpperCase()];
|
||||||
|
if (typeof reqPort === 'number') {
|
||||||
|
upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);
|
||||||
|
}
|
||||||
|
// Compare request host against noproxy
|
||||||
|
for (let upperNoProxyItem of noProxy.split(',').map(x => x.trim().toUpperCase()).filter(x => x)) {
|
||||||
|
if (upperReqHosts.some(x => x === upperNoProxyItem)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
exports.checkBypass = checkBypass;
|
||||||
21
node_modules/@octokit/auth-token/LICENSE
generated
vendored
Normal file
21
node_modules/@octokit/auth-token/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
The 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 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.
|
||||||
257
node_modules/@octokit/auth-token/README.md
generated
vendored
Normal file
257
node_modules/@octokit/auth-token/README.md
generated
vendored
Normal file
@@ -0,0 +1,257 @@
|
|||||||
|
# auth-token.js
|
||||||
|
|
||||||
|
> GitHub API token authentication for browsers and Node.js
|
||||||
|
|
||||||
|
[](https://www.npmjs.com/package/@octokit/auth-token)
|
||||||
|
[](https://travis-ci.com/octokit/auth-token.js)
|
||||||
|
[](https://greenkeeper.io/)
|
||||||
|
|
||||||
|
`@octokit/auth-token` is the simplest of [GitHub’s authentication strategies](https://github.com/octokit/auth.js).
|
||||||
|
|
||||||
|
It is useful if you want to support multiple authentication strategies, as it’s API is compatible with its sibling packages for [basic](https://github.com/octokit/auth-basic.js), [GitHub App](https://github.com/octokit/auth-app.js) and [OAuth app](https://github.com/octokit/auth.js) authentication.
|
||||||
|
|
||||||
|
<!-- toc -->
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tbody valign=top align=left>
|
||||||
|
<tr><th>
|
||||||
|
Browsers
|
||||||
|
</th><td width=100%>
|
||||||
|
|
||||||
|
Load `@octokit/auth-token` directly from [cdn.pika.dev](https://cdn.pika.dev)
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script type="module">
|
||||||
|
import { createTokenAuth } from "https://cdn.pika.dev/@octokit/auth-token";
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
</td></tr>
|
||||||
|
<tr><th>
|
||||||
|
Node
|
||||||
|
</th><td>
|
||||||
|
|
||||||
|
Install with <code>npm install @octokit/auth-token</code>
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { createTokenAuth } = require("@octokit/auth-token");
|
||||||
|
// or: import { createTokenAuth } from "@octokit/auth-token";
|
||||||
|
```
|
||||||
|
|
||||||
|
</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
```js
|
||||||
|
const auth = createTokenAuth("1234567890abcdef1234567890abcdef12345678");
|
||||||
|
const authentication = await auth();
|
||||||
|
// {
|
||||||
|
// type: 'token',
|
||||||
|
// token: '1234567890abcdef1234567890abcdef12345678',
|
||||||
|
// tokenType: 'oauth'
|
||||||
|
```
|
||||||
|
|
||||||
|
## `createTokenAuth(token) options`
|
||||||
|
|
||||||
|
The `createTokenAuth` method accepts a single argument of type string, which is the token. The passed token can be one of the following:
|
||||||
|
|
||||||
|
- [Personal access token](https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line)
|
||||||
|
- [OAuth access token](https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/)
|
||||||
|
- Installation access token ([GitHub App Installation](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#authenticating-as-an-installation))
|
||||||
|
- [GITHUB_TOKEN provided to GitHub Actions](https://developer.github.com/actions/creating-github-actions/accessing-the-runtime-environment/#environment-variables)
|
||||||
|
|
||||||
|
Examples
|
||||||
|
|
||||||
|
```js
|
||||||
|
// Personal access token or OAuth access token
|
||||||
|
createTokenAuth("1234567890abcdef1234567890abcdef12345678");
|
||||||
|
|
||||||
|
// Installation access token or GitHub Action token
|
||||||
|
createTokenAuth("v1.d3d433526f780fbcc3129004e2731b3904ad0b86");
|
||||||
|
```
|
||||||
|
|
||||||
|
## `auth()`
|
||||||
|
|
||||||
|
The `auth()` method has no options. It returns a promise which resolves with the the authentication object.
|
||||||
|
|
||||||
|
## Authentication object
|
||||||
|
|
||||||
|
<table width="100%">
|
||||||
|
<thead align=left>
|
||||||
|
<tr>
|
||||||
|
<th width=150>
|
||||||
|
name
|
||||||
|
</th>
|
||||||
|
<th width=70>
|
||||||
|
type
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
description
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody align=left valign=top>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<code>type</code>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<code>string</code>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
<code>"token"</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<code>token</code>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<code>string</code>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
The provided token.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<code>tokenType</code>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<code>string</code>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
Can be either <code>"oauth"</code> for personal access tokens and OAuth tokens, or <code>"installation"</code> for installation access tokens (includes <code>GITHUB_TOKEN</code> provided to GitHub Actions)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## `auth.hook(request, route, options)` or `auth.hook(request, options)`
|
||||||
|
|
||||||
|
`auth.hook()` hooks directly into the request life cycle. It authenticates the request using the provided token.
|
||||||
|
|
||||||
|
The `request` option is an instance of [`@octokit/request`](https://github.com/octokit/request.js#readme). The `route`/`options` parameters are the same as for the [`request()` method](https://github.com/octokit/request.js#request).
|
||||||
|
|
||||||
|
`auth.hook()` can be called directly to send an authenticated request
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { data: authorizations } = await auth.hook(
|
||||||
|
request,
|
||||||
|
"GET /authorizations"
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
Or it can be passed as option to [`request()`](https://github.com/octokit/request.js#request).
|
||||||
|
|
||||||
|
```js
|
||||||
|
const requestWithAuth = request.defaults({
|
||||||
|
request: {
|
||||||
|
hook: auth.hook
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { data: authorizations } = await requestWithAuth("GET /authorizations");
|
||||||
|
```
|
||||||
|
|
||||||
|
## Find more information
|
||||||
|
|
||||||
|
`auth()` does not send any requests, it only transforms the provided token string into an authentication object.
|
||||||
|
|
||||||
|
Here is a list of things you can do to retrieve further information
|
||||||
|
|
||||||
|
### Find out what scopes are enabled for oauth tokens
|
||||||
|
|
||||||
|
Note that this does not work for installations. There is no way to retrieve permissions based on an installation access tokens.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const TOKEN = "1234567890abcdef1234567890abcdef12345678";
|
||||||
|
|
||||||
|
const auth = createTokenAuth(TOKEN);
|
||||||
|
const authentication = await auth();
|
||||||
|
|
||||||
|
const response = await request("HEAD /", {
|
||||||
|
headers: authentication.headers
|
||||||
|
});
|
||||||
|
const scopes = response.headers["x-oauth-scopes"].split(/,\s+/);
|
||||||
|
|
||||||
|
if (scopes.length) {
|
||||||
|
console.log(
|
||||||
|
`"${TOKEN}" has ${scopes.length} scopes enabled: ${scopes.join(", ")}`
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
console.log(`"${TOKEN}" has no scopes enabled`);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Find out if token is a personal access token or if it belongs to an OAuth app
|
||||||
|
|
||||||
|
```js
|
||||||
|
const TOKEN = "1234567890abcdef1234567890abcdef12345678";
|
||||||
|
|
||||||
|
const auth = createTokenAuth(TOKEN);
|
||||||
|
const authentication = await auth();
|
||||||
|
|
||||||
|
const response = await request("HEAD /", {
|
||||||
|
headers: authentication.headers
|
||||||
|
});
|
||||||
|
const clientId = response.headers["x-oauth-client-id"];
|
||||||
|
|
||||||
|
if (clientId) {
|
||||||
|
console.log(
|
||||||
|
`"${token}" is an OAuth token, its app’s client_id is ${clientId}.`
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
console.log(`"${token}" is a personal access token`);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Find out what permissions are enabled for a repository
|
||||||
|
|
||||||
|
Note that the `permissions` key is not set when authenticated using an installation access token.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const TOKEN = "1234567890abcdef1234567890abcdef12345678";
|
||||||
|
|
||||||
|
const auth = createTokenAuth(TOKEN);
|
||||||
|
const authentication = await auth();
|
||||||
|
|
||||||
|
const response = await request("GET /repos/:owner/:repo", {
|
||||||
|
owner: 'octocat',
|
||||||
|
repo: 'hello-world'
|
||||||
|
headers: authentication.headers
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(response.data.permissions)
|
||||||
|
// {
|
||||||
|
// admin: true,
|
||||||
|
// push: true,
|
||||||
|
// pull: true
|
||||||
|
// }
|
||||||
|
```
|
||||||
|
|
||||||
|
### Use token for git operations
|
||||||
|
|
||||||
|
Both OAuth and installation access tokens can be used for git operations. However, when using with an installation, [the token must be prefixed with `x-access-token`](https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#http-based-git-access-by-an-installation).
|
||||||
|
|
||||||
|
This example is using the [`execa`](https://github.com/sindresorhus/execa) package to run a `git push` command.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const TOKEN = "1234567890abcdef1234567890abcdef12345678";
|
||||||
|
|
||||||
|
const auth = createTokenAuth(TOKEN);
|
||||||
|
const { token, tokenType } = await auth();
|
||||||
|
const tokenWithPrefix =
|
||||||
|
tokenType === "installation" ? `x-access-token:${token}` : token;
|
||||||
|
|
||||||
|
const repositoryUrl = `https://${tokenWithPrefix}@github.com/octocat/hello-world.git`;
|
||||||
|
|
||||||
|
const { stdout } = await execa("git", ["push", repositoryUrl]);
|
||||||
|
console.log(stdout);
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[MIT](LICENSE)
|
||||||
49
node_modules/@octokit/auth-token/dist-node/index.js
generated
vendored
Normal file
49
node_modules/@octokit/auth-token/dist-node/index.js
generated
vendored
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
Object.defineProperty(exports, '__esModule', { value: true });
|
||||||
|
|
||||||
|
async function auth(token) {
|
||||||
|
const tokenType = token.split(/\./).length === 3 ? "app" : /^v\d+\./.test(token) ? "installation" : "oauth";
|
||||||
|
return {
|
||||||
|
type: "token",
|
||||||
|
token: token,
|
||||||
|
tokenType
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prefix token for usage in the Authorization header
|
||||||
|
*
|
||||||
|
* @param token OAuth token or JSON Web Token
|
||||||
|
*/
|
||||||
|
function withAuthorizationPrefix(token) {
|
||||||
|
if (token.split(/\./).length === 3) {
|
||||||
|
return `bearer ${token}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return `token ${token}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function hook(token, request, route, parameters) {
|
||||||
|
const endpoint = request.endpoint.merge(route, parameters);
|
||||||
|
endpoint.headers.authorization = withAuthorizationPrefix(token);
|
||||||
|
return request(endpoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
const createTokenAuth = function createTokenAuth(token) {
|
||||||
|
if (!token) {
|
||||||
|
throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof token !== "string") {
|
||||||
|
throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");
|
||||||
|
}
|
||||||
|
|
||||||
|
token = token.replace(/^(token|bearer) +/i, "");
|
||||||
|
return Object.assign(auth.bind(null, token), {
|
||||||
|
hook: hook.bind(null, token)
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.createTokenAuth = createTokenAuth;
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
1
node_modules/@octokit/auth-token/dist-node/index.js.map
generated
vendored
Normal file
1
node_modules/@octokit/auth-token/dist-node/index.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"index.js","sources":["../dist-src/auth.js","../dist-src/with-authorization-prefix.js","../dist-src/hook.js","../dist-src/index.js"],"sourcesContent":["export async function auth(token) {\n const tokenType = token.split(/\\./).length === 3\n ? \"app\"\n : /^v\\d+\\./.test(token)\n ? \"installation\"\n : \"oauth\";\n return {\n type: \"token\",\n token: token,\n tokenType\n };\n}\n","/**\n * Prefix token for usage in the Authorization header\n *\n * @param token OAuth token or JSON Web Token\n */\nexport function withAuthorizationPrefix(token) {\n if (token.split(/\\./).length === 3) {\n return `bearer ${token}`;\n }\n return `token ${token}`;\n}\n","import { withAuthorizationPrefix } from \"./with-authorization-prefix\";\nexport async function hook(token, request, route, parameters) {\n const endpoint = request.endpoint.merge(route, parameters);\n endpoint.headers.authorization = withAuthorizationPrefix(token);\n return request(endpoint);\n}\n","import { auth } from \"./auth\";\nimport { hook } from \"./hook\";\nexport const createTokenAuth = function createTokenAuth(token) {\n if (!token) {\n throw new Error(\"[@octokit/auth-token] No token passed to createTokenAuth\");\n }\n if (typeof token !== \"string\") {\n throw new Error(\"[@octokit/auth-token] Token passed to createTokenAuth is not a string\");\n }\n token = token.replace(/^(token|bearer) +/i, \"\");\n return Object.assign(auth.bind(null, token), {\n hook: hook.bind(null, token)\n });\n};\n"],"names":["auth","token","tokenType","split","length","test","type","withAuthorizationPrefix","hook","request","route","parameters","endpoint","merge","headers","authorization","createTokenAuth","Error","replace","Object","assign","bind"],"mappings":";;;;AAAO,eAAeA,IAAf,CAAoBC,KAApB,EAA2B;QACxBC,SAAS,GAAGD,KAAK,CAACE,KAAN,CAAY,IAAZ,EAAkBC,MAAlB,KAA6B,CAA7B,GACZ,KADY,GAEZ,UAAUC,IAAV,CAAeJ,KAAf,IACI,cADJ,GAEI,OAJV;SAKO;IACHK,IAAI,EAAE,OADH;IAEHL,KAAK,EAAEA,KAFJ;IAGHC;GAHJ;;;ACNJ;;;;;AAKA,AAAO,SAASK,uBAAT,CAAiCN,KAAjC,EAAwC;MACvCA,KAAK,CAACE,KAAN,CAAY,IAAZ,EAAkBC,MAAlB,KAA6B,CAAjC,EAAoC;WACxB,UAASH,KAAM,EAAvB;;;SAEI,SAAQA,KAAM,EAAtB;;;ACRG,eAAeO,IAAf,CAAoBP,KAApB,EAA2BQ,OAA3B,EAAoCC,KAApC,EAA2CC,UAA3C,EAAuD;QACpDC,QAAQ,GAAGH,OAAO,CAACG,QAAR,CAAiBC,KAAjB,CAAuBH,KAAvB,EAA8BC,UAA9B,CAAjB;EACAC,QAAQ,CAACE,OAAT,CAAiBC,aAAjB,GAAiCR,uBAAuB,CAACN,KAAD,CAAxD;SACOQ,OAAO,CAACG,QAAD,CAAd;;;MCFSI,eAAe,GAAG,SAASA,eAAT,CAAyBf,KAAzB,EAAgC;MACvD,CAACA,KAAL,EAAY;UACF,IAAIgB,KAAJ,CAAU,0DAAV,CAAN;;;MAEA,OAAOhB,KAAP,KAAiB,QAArB,EAA+B;UACrB,IAAIgB,KAAJ,CAAU,uEAAV,CAAN;;;EAEJhB,KAAK,GAAGA,KAAK,CAACiB,OAAN,CAAc,oBAAd,EAAoC,EAApC,CAAR;SACOC,MAAM,CAACC,MAAP,CAAcpB,IAAI,CAACqB,IAAL,CAAU,IAAV,EAAgBpB,KAAhB,CAAd,EAAsC;IACzCO,IAAI,EAAEA,IAAI,CAACa,IAAL,CAAU,IAAV,EAAgBpB,KAAhB;GADH,CAAP;CARG;;;;"}
|
||||||
12
node_modules/@octokit/auth-token/dist-src/auth.js
generated
vendored
Normal file
12
node_modules/@octokit/auth-token/dist-src/auth.js
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
export async function auth(token) {
|
||||||
|
const tokenType = token.split(/\./).length === 3
|
||||||
|
? "app"
|
||||||
|
: /^v\d+\./.test(token)
|
||||||
|
? "installation"
|
||||||
|
: "oauth";
|
||||||
|
return {
|
||||||
|
type: "token",
|
||||||
|
token: token,
|
||||||
|
tokenType
|
||||||
|
};
|
||||||
|
}
|
||||||
6
node_modules/@octokit/auth-token/dist-src/hook.js
generated
vendored
Normal file
6
node_modules/@octokit/auth-token/dist-src/hook.js
generated
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import { withAuthorizationPrefix } from "./with-authorization-prefix";
|
||||||
|
export async function hook(token, request, route, parameters) {
|
||||||
|
const endpoint = request.endpoint.merge(route, parameters);
|
||||||
|
endpoint.headers.authorization = withAuthorizationPrefix(token);
|
||||||
|
return request(endpoint);
|
||||||
|
}
|
||||||
14
node_modules/@octokit/auth-token/dist-src/index.js
generated
vendored
Normal file
14
node_modules/@octokit/auth-token/dist-src/index.js
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import { auth } from "./auth";
|
||||||
|
import { hook } from "./hook";
|
||||||
|
export const createTokenAuth = function createTokenAuth(token) {
|
||||||
|
if (!token) {
|
||||||
|
throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");
|
||||||
|
}
|
||||||
|
if (typeof token !== "string") {
|
||||||
|
throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");
|
||||||
|
}
|
||||||
|
token = token.replace(/^(token|bearer) +/i, "");
|
||||||
|
return Object.assign(auth.bind(null, token), {
|
||||||
|
hook: hook.bind(null, token)
|
||||||
|
});
|
||||||
|
};
|
||||||
0
node_modules/@octokit/auth-token/dist-src/types.js
generated
vendored
Normal file
0
node_modules/@octokit/auth-token/dist-src/types.js
generated
vendored
Normal file
11
node_modules/@octokit/auth-token/dist-src/with-authorization-prefix.js
generated
vendored
Normal file
11
node_modules/@octokit/auth-token/dist-src/with-authorization-prefix.js
generated
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* Prefix token for usage in the Authorization header
|
||||||
|
*
|
||||||
|
* @param token OAuth token or JSON Web Token
|
||||||
|
*/
|
||||||
|
export function withAuthorizationPrefix(token) {
|
||||||
|
if (token.split(/\./).length === 3) {
|
||||||
|
return `bearer ${token}`;
|
||||||
|
}
|
||||||
|
return `token ${token}`;
|
||||||
|
}
|
||||||
2
node_modules/@octokit/auth-token/dist-types/auth.d.ts
generated
vendored
Normal file
2
node_modules/@octokit/auth-token/dist-types/auth.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import { Token, Authentication } from "./types";
|
||||||
|
export declare function auth(token: Token): Promise<Authentication>;
|
||||||
2
node_modules/@octokit/auth-token/dist-types/hook.d.ts
generated
vendored
Normal file
2
node_modules/@octokit/auth-token/dist-types/hook.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import { AnyResponse, EndpointOptions, RequestInterface, RequestParameters, Route, Token } from "./types";
|
||||||
|
export declare function hook(token: Token, request: RequestInterface, route: Route | EndpointOptions, parameters?: RequestParameters): Promise<AnyResponse>;
|
||||||
7
node_modules/@octokit/auth-token/dist-types/index.d.ts
generated
vendored
Normal file
7
node_modules/@octokit/auth-token/dist-types/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import { StrategyInterface, Token, Authentication } from "./types";
|
||||||
|
export declare type Types = {
|
||||||
|
StrategyOptions: Token;
|
||||||
|
AuthOptions: never;
|
||||||
|
Authentication: Authentication;
|
||||||
|
};
|
||||||
|
export declare const createTokenAuth: StrategyInterface;
|
||||||
25
node_modules/@octokit/auth-token/dist-types/types.d.ts
generated
vendored
Normal file
25
node_modules/@octokit/auth-token/dist-types/types.d.ts
generated
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import * as OctokitTypes from "@octokit/types";
|
||||||
|
export declare type AnyResponse = OctokitTypes.OctokitResponse<any>;
|
||||||
|
export declare type StrategyInterface = OctokitTypes.StrategyInterface<[Token], [], Authentication>;
|
||||||
|
export declare type EndpointDefaults = OctokitTypes.EndpointDefaults;
|
||||||
|
export declare type EndpointOptions = OctokitTypes.EndpointOptions;
|
||||||
|
export declare type RequestParameters = OctokitTypes.RequestParameters;
|
||||||
|
export declare type RequestInterface = OctokitTypes.RequestInterface;
|
||||||
|
export declare type Route = OctokitTypes.Route;
|
||||||
|
export declare type Token = string;
|
||||||
|
export declare type OAuthTokenAuthentication = {
|
||||||
|
type: "token";
|
||||||
|
tokenType: "oauth";
|
||||||
|
token: Token;
|
||||||
|
};
|
||||||
|
export declare type InstallationTokenAuthentication = {
|
||||||
|
type: "token";
|
||||||
|
tokenType: "installation";
|
||||||
|
token: Token;
|
||||||
|
};
|
||||||
|
export declare type AppAuthentication = {
|
||||||
|
type: "token";
|
||||||
|
tokenType: "app";
|
||||||
|
token: Token;
|
||||||
|
};
|
||||||
|
export declare type Authentication = OAuthTokenAuthentication | InstallationTokenAuthentication | AppAuthentication;
|
||||||
6
node_modules/@octokit/auth-token/dist-types/with-authorization-prefix.d.ts
generated
vendored
Normal file
6
node_modules/@octokit/auth-token/dist-types/with-authorization-prefix.d.ts
generated
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
/**
|
||||||
|
* Prefix token for usage in the Authorization header
|
||||||
|
*
|
||||||
|
* @param token OAuth token or JSON Web Token
|
||||||
|
*/
|
||||||
|
export declare function withAuthorizationPrefix(token: string): string;
|
||||||
46
node_modules/@octokit/auth-token/dist-web/index.js
generated
vendored
Normal file
46
node_modules/@octokit/auth-token/dist-web/index.js
generated
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
async function auth(token) {
|
||||||
|
const tokenType = token.split(/\./).length === 3
|
||||||
|
? "app"
|
||||||
|
: /^v\d+\./.test(token)
|
||||||
|
? "installation"
|
||||||
|
: "oauth";
|
||||||
|
return {
|
||||||
|
type: "token",
|
||||||
|
token: token,
|
||||||
|
tokenType
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prefix token for usage in the Authorization header
|
||||||
|
*
|
||||||
|
* @param token OAuth token or JSON Web Token
|
||||||
|
*/
|
||||||
|
function withAuthorizationPrefix(token) {
|
||||||
|
if (token.split(/\./).length === 3) {
|
||||||
|
return `bearer ${token}`;
|
||||||
|
}
|
||||||
|
return `token ${token}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function hook(token, request, route, parameters) {
|
||||||
|
const endpoint = request.endpoint.merge(route, parameters);
|
||||||
|
endpoint.headers.authorization = withAuthorizationPrefix(token);
|
||||||
|
return request(endpoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
const createTokenAuth = function createTokenAuth(token) {
|
||||||
|
if (!token) {
|
||||||
|
throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");
|
||||||
|
}
|
||||||
|
if (typeof token !== "string") {
|
||||||
|
throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");
|
||||||
|
}
|
||||||
|
token = token.replace(/^(token|bearer) +/i, "");
|
||||||
|
return Object.assign(auth.bind(null, token), {
|
||||||
|
hook: hook.bind(null, token)
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export { createTokenAuth };
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
1
node_modules/@octokit/auth-token/dist-web/index.js.map
generated
vendored
Normal file
1
node_modules/@octokit/auth-token/dist-web/index.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"index.js","sources":["../dist-src/auth.js","../dist-src/with-authorization-prefix.js","../dist-src/hook.js","../dist-src/index.js"],"sourcesContent":["export async function auth(token) {\n const tokenType = token.split(/\\./).length === 3\n ? \"app\"\n : /^v\\d+\\./.test(token)\n ? \"installation\"\n : \"oauth\";\n return {\n type: \"token\",\n token: token,\n tokenType\n };\n}\n","/**\n * Prefix token for usage in the Authorization header\n *\n * @param token OAuth token or JSON Web Token\n */\nexport function withAuthorizationPrefix(token) {\n if (token.split(/\\./).length === 3) {\n return `bearer ${token}`;\n }\n return `token ${token}`;\n}\n","import { withAuthorizationPrefix } from \"./with-authorization-prefix\";\nexport async function hook(token, request, route, parameters) {\n const endpoint = request.endpoint.merge(route, parameters);\n endpoint.headers.authorization = withAuthorizationPrefix(token);\n return request(endpoint);\n}\n","import { auth } from \"./auth\";\nimport { hook } from \"./hook\";\nexport const createTokenAuth = function createTokenAuth(token) {\n if (!token) {\n throw new Error(\"[@octokit/auth-token] No token passed to createTokenAuth\");\n }\n if (typeof token !== \"string\") {\n throw new Error(\"[@octokit/auth-token] Token passed to createTokenAuth is not a string\");\n }\n token = token.replace(/^(token|bearer) +/i, \"\");\n return Object.assign(auth.bind(null, token), {\n hook: hook.bind(null, token)\n });\n};\n"],"names":[],"mappings":"AAAO,eAAe,IAAI,CAAC,KAAK,EAAE;IAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;UAC1C,KAAK;UACL,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;cACjB,cAAc;cACd,OAAO,CAAC;IAClB,OAAO;QACH,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,KAAK;QACZ,SAAS;KACZ,CAAC;CACL;;ACXD;;;;;AAKA,AAAO,SAAS,uBAAuB,CAAC,KAAK,EAAE;IAC3C,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;QAChC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;KAC5B;IACD,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;CAC3B;;ACTM,eAAe,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3D,QAAQ,CAAC,OAAO,CAAC,aAAa,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAChE,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC5B;;ACHW,MAAC,eAAe,GAAG,SAAS,eAAe,CAAC,KAAK,EAAE;IAC3D,IAAI,CAAC,KAAK,EAAE;QACR,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;KAC/E;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC3B,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;KAC5F;IACD,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;QACzC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;KAC/B,CAAC,CAAC;CACN;;;;"}
|
||||||
76
node_modules/@octokit/auth-token/package.json
generated
vendored
Normal file
76
node_modules/@octokit/auth-token/package.json
generated
vendored
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
{
|
||||||
|
"_from": "@octokit/auth-token@^2.4.0",
|
||||||
|
"_id": "@octokit/auth-token@2.4.0",
|
||||||
|
"_inBundle": false,
|
||||||
|
"_integrity": "sha512-eoOVMjILna7FVQf96iWc3+ZtE/ZT6y8ob8ZzcqKY1ibSQCnu4O/B7pJvzMx5cyZ/RjAff6DAdEb0O0Cjcxidkg==",
|
||||||
|
"_location": "/@octokit/auth-token",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"type": "range",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "@octokit/auth-token@^2.4.0",
|
||||||
|
"name": "@octokit/auth-token",
|
||||||
|
"escapedName": "@octokit%2fauth-token",
|
||||||
|
"scope": "@octokit",
|
||||||
|
"rawSpec": "^2.4.0",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "^2.4.0"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/@octokit/rest"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.0.tgz",
|
||||||
|
"_shasum": "b64178975218b99e4dfe948253f0673cbbb59d9f",
|
||||||
|
"_spec": "@octokit/auth-token@^2.4.0",
|
||||||
|
"_where": "/Users/bret/repos/deploy-to-neocities/node_modules/@octokit/rest",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/octokit/auth-token.js/issues"
|
||||||
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"dependencies": {
|
||||||
|
"@octokit/types": "^2.0.0"
|
||||||
|
},
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "GitHub API token authentication for browsers and Node.js",
|
||||||
|
"devDependencies": {
|
||||||
|
"@octokit/request": "^5.3.0",
|
||||||
|
"@pika/pack": "^0.5.0",
|
||||||
|
"@pika/plugin-build-node": "^0.7.0",
|
||||||
|
"@pika/plugin-build-web": "^0.7.0",
|
||||||
|
"@pika/plugin-ts-standard-pkg": "^0.7.0",
|
||||||
|
"@types/fetch-mock": "^7.3.1",
|
||||||
|
"@types/jest": "^24.0.13",
|
||||||
|
"fetch-mock": "^7.3.7",
|
||||||
|
"jest": "^24.8.0",
|
||||||
|
"semantic-release": "^15.13.12",
|
||||||
|
"ts-jest": "^24.0.2",
|
||||||
|
"typescript": "^3.5.1"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"dist-*/",
|
||||||
|
"bin/"
|
||||||
|
],
|
||||||
|
"homepage": "https://github.com/octokit/auth-token.js#readme",
|
||||||
|
"keywords": [
|
||||||
|
"github",
|
||||||
|
"octokit",
|
||||||
|
"authentication",
|
||||||
|
"api"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "dist-node/index.js",
|
||||||
|
"module": "dist-web/index.js",
|
||||||
|
"name": "@octokit/auth-token",
|
||||||
|
"pika": true,
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/octokit/auth-token.js.git"
|
||||||
|
},
|
||||||
|
"sideEffects": false,
|
||||||
|
"source": "dist-src/index.js",
|
||||||
|
"types": "dist-types/index.d.ts",
|
||||||
|
"version": "2.4.0"
|
||||||
|
}
|
||||||
21
node_modules/@octokit/endpoint/LICENSE
generated
vendored
Normal file
21
node_modules/@octokit/endpoint/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
The MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2018 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 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.
|
||||||
421
node_modules/@octokit/endpoint/README.md
generated
vendored
Normal file
421
node_modules/@octokit/endpoint/README.md
generated
vendored
Normal file
@@ -0,0 +1,421 @@
|
|||||||
|
# endpoint.js
|
||||||
|
|
||||||
|
> Turns GitHub REST API endpoints into generic request options
|
||||||
|
|
||||||
|
[](https://www.npmjs.com/package/@octokit/endpoint)
|
||||||
|

|
||||||
|
[](https://greenkeeper.io/)
|
||||||
|
|
||||||
|
`@octokit/endpoint` combines [GitHub REST API routes](https://developer.github.com/v3/) with your parameters and turns them into generic request options that can be used in any request library.
|
||||||
|
|
||||||
|
<!-- update table of contents by running `npx markdown-toc README.md -i` -->
|
||||||
|
<!-- toc -->
|
||||||
|
|
||||||
|
- [Usage](#usage)
|
||||||
|
- [API](#api)
|
||||||
|
- [endpoint()](#endpointroute-options-or-endpointoptions)
|
||||||
|
- [endpoint.defaults()](#endpointdefaults)
|
||||||
|
- [endpoint.DEFAULTS](#endpointdefaults-1)
|
||||||
|
- [endpoint.merge()](#endpointmergeroute-options-or-endpointmergeoptions)
|
||||||
|
- [endpoint.parse()](#endpointparse)
|
||||||
|
- [Special cases](#special-cases)
|
||||||
|
- [The `data` parameter – set request body directly](#the-data-parameter--set-request-body-directly)
|
||||||
|
- [Set parameters for both the URL/query and the request body](#set-parameters-for-both-the-urlquery-and-the-request-body)
|
||||||
|
- [LICENSE](#license)
|
||||||
|
|
||||||
|
<!-- tocstop -->
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tbody valign=top align=left>
|
||||||
|
<tr><th>
|
||||||
|
Browsers
|
||||||
|
</th><td width=100%>
|
||||||
|
Load <code>@octokit/endpoint</code> directly from <a href="https://cdn.pika.dev">cdn.pika.dev</a>
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script type="module">
|
||||||
|
import { endpoint } from "https://cdn.pika.dev/@octokit/endpoint";
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
</td></tr>
|
||||||
|
<tr><th>
|
||||||
|
Node
|
||||||
|
</th><td>
|
||||||
|
|
||||||
|
Install with <code>npm install @octokit/endpoint</code>
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { endpoint } = require("@octokit/endpoint");
|
||||||
|
// or: import { endpoint } from "@octokit/endpoint";
|
||||||
|
```
|
||||||
|
|
||||||
|
</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
Example for [List organization repositories](https://developer.github.com/v3/repos/#list-organization-repositories)
|
||||||
|
|
||||||
|
```js
|
||||||
|
const requestOptions = endpoint("GET /orgs/:org/repos", {
|
||||||
|
headers: {
|
||||||
|
authorization: "token 0000000000000000000000000000000000000001"
|
||||||
|
},
|
||||||
|
org: "octokit",
|
||||||
|
type: "private"
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
The resulting `requestOptions` looks as follows
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"method": "GET",
|
||||||
|
"url": "https://api.github.com/orgs/octokit/repos?type=private",
|
||||||
|
"headers": {
|
||||||
|
"accept": "application/vnd.github.v3+json",
|
||||||
|
"authorization": "token 0000000000000000000000000000000000000001",
|
||||||
|
"user-agent": "octokit/endpoint.js v1.2.3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can pass `requestOptions` to common request libraries
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { url, ...options } = requestOptions;
|
||||||
|
// using with fetch (https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)
|
||||||
|
fetch(url, options);
|
||||||
|
// using with request (https://github.com/request/request)
|
||||||
|
request(requestOptions);
|
||||||
|
// using with got (https://github.com/sindresorhus/got)
|
||||||
|
got[options.method](url, options);
|
||||||
|
// using with axios
|
||||||
|
axios(requestOptions);
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
### `endpoint(route, options)` or `endpoint(options)`
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead align=left>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
name
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
type
|
||||||
|
</th>
|
||||||
|
<th width=100%>
|
||||||
|
description
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody align=left valign=top>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<code>route</code>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
String
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
If set, it has to be a string consisting of URL and the request method, e.g., <code>GET /orgs/:org</code>. If it’s set to a URL, only the method defaults to <code>GET</code>.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<code>options.method</code>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
String
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<strong>Required unless <code>route</code> is set.</strong> Any supported <a href="https://developer.github.com/v3/#http-verbs">http verb</a>. <em>Defaults to <code>GET</code></em>.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<code>options.url</code>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
String
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<strong>Required unless <code>route</code> is set.</strong> A path or full URL which may contain <code>:variable</code> or <code>{variable}</code> placeholders,
|
||||||
|
e.g., <code>/orgs/:org/repos</code>. The <code>url</code> is parsed using <a href="https://github.com/bramstein/url-template">url-template</a>.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<code>options.baseUrl</code>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
String
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<em>Defaults to <code>https://api.github.com</code></em>.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<code>options.headers</code>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
Object
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Custom headers. Passed headers are merged with defaults:<br>
|
||||||
|
<em><code>headers['user-agent']</code> defaults to <code>octokit-endpoint.js/1.2.3</code> (where <code>1.2.3</code> is the released version)</em>.<br>
|
||||||
|
<em><code>headers['accept']</code> defaults to <code>application/vnd.github.v3+json</code></em>.<br>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<code>options.mediaType.format</code>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
String
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Media type param, such as <code>raw</code>, <code>diff</code>, or <code>text+json</code>. See <a href="https://developer.github.com/v3/media/">Media Types</a>. Setting <code>options.mediaType.format</code> will amend the <code>headers.accept</code> value.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<code>options.mediaType.previews</code>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
Array of Strings
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Name of previews, such as <code>mercy</code>, <code>symmetra</code>, or <code>scarlet-witch</code>. See <a href="https://developer.github.com/v3/previews/">API Previews</a>. If <code>options.mediaType.previews</code> was set as default, the new previews will be merged into the default ones. Setting <code>options.mediaType.previews</code> will amend the <code>headers.accept</code> value. <code>options.mediaType.previews</code> will be merged with an existing array set using <code>.defaults()</code>.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<code>options.data</code>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
Any
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Set request body directly instead of setting it to JSON based on additional parameters. See <a href="#data-parameter">"The <code>data</code> parameter"</a> below.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<code>options.request</code>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
Object
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Pass custom meta information for the request. The <code>request</code> object will be returned as is.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
All other options will be passed depending on the `method` and `url` options.
|
||||||
|
|
||||||
|
1. If the option key has a placeholder in the `url`, it will be used as the replacement. For example, if the passed options are `{url: '/orgs/:org/repos', org: 'foo'}` the returned `options.url` is `https://api.github.com/orgs/foo/repos`.
|
||||||
|
2. If the `method` is `GET` or `HEAD`, the option is passed as a query parameter.
|
||||||
|
3. Otherwise, the parameter is passed in the request body as a JSON key.
|
||||||
|
|
||||||
|
**Result**
|
||||||
|
|
||||||
|
`endpoint()` is a synchronous method and returns an object with the following keys:
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead align=left>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
key
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
type
|
||||||
|
</th>
|
||||||
|
<th width=100%>
|
||||||
|
description
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody align=left valign=top>
|
||||||
|
<tr>
|
||||||
|
<th><code>method</code></th>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The http method. Always lowercase.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><code>url</code></th>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The url with placeholders replaced with passed parameters.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><code>headers</code></th>
|
||||||
|
<td>Object</td>
|
||||||
|
<td>All header names are lowercased.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><code>body</code></th>
|
||||||
|
<td>Any</td>
|
||||||
|
<td>The request body if one is present. Only for <code>PATCH</code>, <code>POST</code>, <code>PUT</code>, <code>DELETE</code> requests.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><code>request</code></th>
|
||||||
|
<td>Object</td>
|
||||||
|
<td>Request meta option, it will be returned as it was passed into <code>endpoint()</code></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### `endpoint.defaults()`
|
||||||
|
|
||||||
|
Override or set default options. Example:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const request = require("request");
|
||||||
|
const myEndpoint = require("@octokit/endpoint").defaults({
|
||||||
|
baseUrl: "https://github-enterprise.acme-inc.com/api/v3",
|
||||||
|
headers: {
|
||||||
|
"user-agent": "myApp/1.2.3",
|
||||||
|
authorization: `token 0000000000000000000000000000000000000001`
|
||||||
|
},
|
||||||
|
org: "my-project",
|
||||||
|
per_page: 100
|
||||||
|
});
|
||||||
|
|
||||||
|
request(myEndpoint(`GET /orgs/:org/repos`));
|
||||||
|
```
|
||||||
|
|
||||||
|
You can call `.defaults()` again on the returned method, the defaults will cascade.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const myProjectEndpoint = endpoint.defaults({
|
||||||
|
baseUrl: "https://github-enterprise.acme-inc.com/api/v3",
|
||||||
|
headers: {
|
||||||
|
"user-agent": "myApp/1.2.3"
|
||||||
|
},
|
||||||
|
org: "my-project"
|
||||||
|
});
|
||||||
|
const myProjectEndpointWithAuth = myProjectEndpoint.defaults({
|
||||||
|
headers: {
|
||||||
|
authorization: `token 0000000000000000000000000000000000000001`
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
`myProjectEndpointWithAuth` now defaults the `baseUrl`, `headers['user-agent']`,
|
||||||
|
`org` and `headers['authorization']` on top of `headers['accept']` that is set
|
||||||
|
by the global default.
|
||||||
|
|
||||||
|
### `endpoint.DEFAULTS`
|
||||||
|
|
||||||
|
The current default options.
|
||||||
|
|
||||||
|
```js
|
||||||
|
endpoint.DEFAULTS.baseUrl; // https://api.github.com
|
||||||
|
const myEndpoint = endpoint.defaults({
|
||||||
|
baseUrl: "https://github-enterprise.acme-inc.com/api/v3"
|
||||||
|
});
|
||||||
|
myEndpoint.DEFAULTS.baseUrl; // https://github-enterprise.acme-inc.com/api/v3
|
||||||
|
```
|
||||||
|
|
||||||
|
### `endpoint.merge(route, options)` or `endpoint.merge(options)`
|
||||||
|
|
||||||
|
Get the defaulted endpoint options, but without parsing them into request options:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const myProjectEndpoint = endpoint.defaults({
|
||||||
|
baseUrl: "https://github-enterprise.acme-inc.com/api/v3",
|
||||||
|
headers: {
|
||||||
|
"user-agent": "myApp/1.2.3"
|
||||||
|
},
|
||||||
|
org: "my-project"
|
||||||
|
});
|
||||||
|
myProjectEndpoint.merge("GET /orgs/:org/repos", {
|
||||||
|
headers: {
|
||||||
|
authorization: `token 0000000000000000000000000000000000000001`
|
||||||
|
},
|
||||||
|
org: "my-secret-project",
|
||||||
|
type: "private"
|
||||||
|
});
|
||||||
|
|
||||||
|
// {
|
||||||
|
// baseUrl: 'https://github-enterprise.acme-inc.com/api/v3',
|
||||||
|
// method: 'GET',
|
||||||
|
// url: '/orgs/:org/repos',
|
||||||
|
// headers: {
|
||||||
|
// accept: 'application/vnd.github.v3+json',
|
||||||
|
// authorization: `token 0000000000000000000000000000000000000001`,
|
||||||
|
// 'user-agent': 'myApp/1.2.3'
|
||||||
|
// },
|
||||||
|
// org: 'my-secret-project',
|
||||||
|
// type: 'private'
|
||||||
|
// }
|
||||||
|
```
|
||||||
|
|
||||||
|
### `endpoint.parse()`
|
||||||
|
|
||||||
|
Stateless method to turn endpoint options into request options. Calling
|
||||||
|
`endpoint(options)` is the same as calling `endpoint.parse(endpoint.merge(options))`.
|
||||||
|
|
||||||
|
## Special cases
|
||||||
|
|
||||||
|
<a name="data-parameter"></a>
|
||||||
|
|
||||||
|
### The `data` parameter – set request body directly
|
||||||
|
|
||||||
|
Some endpoints such as [Render a Markdown document in raw mode](https://developer.github.com/v3/markdown/#render-a-markdown-document-in-raw-mode) don’t have parameters that are sent as request body keys, instead, the request body needs to be set directly. In these cases, set the `data` parameter.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const options = endpoint("POST /markdown/raw", {
|
||||||
|
data: "Hello world github/linguist#1 **cool**, and #1!",
|
||||||
|
headers: {
|
||||||
|
accept: "text/html;charset=utf-8",
|
||||||
|
"content-type": "text/plain"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// options is
|
||||||
|
// {
|
||||||
|
// method: 'post',
|
||||||
|
// url: 'https://api.github.com/markdown/raw',
|
||||||
|
// headers: {
|
||||||
|
// accept: 'text/html;charset=utf-8',
|
||||||
|
// 'content-type': 'text/plain',
|
||||||
|
// 'user-agent': userAgent
|
||||||
|
// },
|
||||||
|
// body: 'Hello world github/linguist#1 **cool**, and #1!'
|
||||||
|
// }
|
||||||
|
```
|
||||||
|
|
||||||
|
### Set parameters for both the URL/query and the request body
|
||||||
|
|
||||||
|
There are API endpoints that accept both query parameters as well as a body. In that case, you need to add the query parameters as templates to `options.url`, as defined in the [RFC 6570 URI Template specification](https://tools.ietf.org/html/rfc6570).
|
||||||
|
|
||||||
|
Example
|
||||||
|
|
||||||
|
```js
|
||||||
|
endpoint(
|
||||||
|
"POST https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets{?name,label}",
|
||||||
|
{
|
||||||
|
name: "example.zip",
|
||||||
|
label: "short description",
|
||||||
|
headers: {
|
||||||
|
"content-type": "text/plain",
|
||||||
|
"content-length": 14,
|
||||||
|
authorization: `token 0000000000000000000000000000000000000001`
|
||||||
|
},
|
||||||
|
data: "Hello, world!"
|
||||||
|
}
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
## LICENSE
|
||||||
|
|
||||||
|
[MIT](LICENSE)
|
||||||
379
node_modules/@octokit/endpoint/dist-node/index.js
generated
vendored
Normal file
379
node_modules/@octokit/endpoint/dist-node/index.js
generated
vendored
Normal file
@@ -0,0 +1,379 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
Object.defineProperty(exports, '__esModule', { value: true });
|
||||||
|
|
||||||
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
||||||
|
|
||||||
|
var isPlainObject = _interopDefault(require('is-plain-object'));
|
||||||
|
var universalUserAgent = require('universal-user-agent');
|
||||||
|
|
||||||
|
function lowercaseKeys(object) {
|
||||||
|
if (!object) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
return Object.keys(object).reduce((newObj, key) => {
|
||||||
|
newObj[key.toLowerCase()] = object[key];
|
||||||
|
return newObj;
|
||||||
|
}, {});
|
||||||
|
}
|
||||||
|
|
||||||
|
function mergeDeep(defaults, options) {
|
||||||
|
const result = Object.assign({}, defaults);
|
||||||
|
Object.keys(options).forEach(key => {
|
||||||
|
if (isPlainObject(options[key])) {
|
||||||
|
if (!(key in defaults)) Object.assign(result, {
|
||||||
|
[key]: options[key]
|
||||||
|
});else result[key] = mergeDeep(defaults[key], options[key]);
|
||||||
|
} else {
|
||||||
|
Object.assign(result, {
|
||||||
|
[key]: options[key]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
function merge(defaults, route, options) {
|
||||||
|
if (typeof route === "string") {
|
||||||
|
let [method, url] = route.split(" ");
|
||||||
|
options = Object.assign(url ? {
|
||||||
|
method,
|
||||||
|
url
|
||||||
|
} : {
|
||||||
|
url: method
|
||||||
|
}, options);
|
||||||
|
} else {
|
||||||
|
options = Object.assign({}, route);
|
||||||
|
} // lowercase header names before merging with defaults to avoid duplicates
|
||||||
|
|
||||||
|
|
||||||
|
options.headers = lowercaseKeys(options.headers);
|
||||||
|
const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten
|
||||||
|
|
||||||
|
if (defaults && defaults.mediaType.previews.length) {
|
||||||
|
mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews);
|
||||||
|
}
|
||||||
|
|
||||||
|
mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, ""));
|
||||||
|
return mergedOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
function addQueryParameters(url, parameters) {
|
||||||
|
const separator = /\?/.test(url) ? "&" : "?";
|
||||||
|
const names = Object.keys(parameters);
|
||||||
|
|
||||||
|
if (names.length === 0) {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
return url + separator + names.map(name => {
|
||||||
|
if (name === "q") {
|
||||||
|
return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+");
|
||||||
|
}
|
||||||
|
|
||||||
|
return `${name}=${encodeURIComponent(parameters[name])}`;
|
||||||
|
}).join("&");
|
||||||
|
}
|
||||||
|
|
||||||
|
const urlVariableRegex = /\{[^}]+\}/g;
|
||||||
|
|
||||||
|
function removeNonChars(variableName) {
|
||||||
|
return variableName.replace(/^\W+|\W+$/g, "").split(/,/);
|
||||||
|
}
|
||||||
|
|
||||||
|
function extractUrlVariableNames(url) {
|
||||||
|
const matches = url.match(urlVariableRegex);
|
||||||
|
|
||||||
|
if (!matches) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);
|
||||||
|
}
|
||||||
|
|
||||||
|
function omit(object, keysToOmit) {
|
||||||
|
return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => {
|
||||||
|
obj[key] = object[key];
|
||||||
|
return obj;
|
||||||
|
}, {});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Based on https://github.com/bramstein/url-template, licensed under BSD
|
||||||
|
// TODO: create separate package.
|
||||||
|
//
|
||||||
|
// Copyright (c) 2012-2014, Bram Stein
|
||||||
|
// All rights reserved.
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions
|
||||||
|
// are met:
|
||||||
|
// 1. Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer in the
|
||||||
|
// documentation and/or other materials provided with the distribution.
|
||||||
|
// 3. The name of the author may not be used to endorse or promote products
|
||||||
|
// derived from this software without specific prior written permission.
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||||
|
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||||
|
// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||||
|
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
/* istanbul ignore file */
|
||||||
|
function encodeReserved(str) {
|
||||||
|
return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) {
|
||||||
|
if (!/%[0-9A-Fa-f]/.test(part)) {
|
||||||
|
part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]");
|
||||||
|
}
|
||||||
|
|
||||||
|
return part;
|
||||||
|
}).join("");
|
||||||
|
}
|
||||||
|
|
||||||
|
function encodeUnreserved(str) {
|
||||||
|
return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
|
||||||
|
return "%" + c.charCodeAt(0).toString(16).toUpperCase();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function encodeValue(operator, value, key) {
|
||||||
|
value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value);
|
||||||
|
|
||||||
|
if (key) {
|
||||||
|
return encodeUnreserved(key) + "=" + value;
|
||||||
|
} else {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function isDefined(value) {
|
||||||
|
return value !== undefined && value !== null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isKeyOperator(operator) {
|
||||||
|
return operator === ";" || operator === "&" || operator === "?";
|
||||||
|
}
|
||||||
|
|
||||||
|
function getValues(context, operator, key, modifier) {
|
||||||
|
var value = context[key],
|
||||||
|
result = [];
|
||||||
|
|
||||||
|
if (isDefined(value) && value !== "") {
|
||||||
|
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
||||||
|
value = value.toString();
|
||||||
|
|
||||||
|
if (modifier && modifier !== "*") {
|
||||||
|
value = value.substring(0, parseInt(modifier, 10));
|
||||||
|
}
|
||||||
|
|
||||||
|
result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
|
||||||
|
} else {
|
||||||
|
if (modifier === "*") {
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
value.filter(isDefined).forEach(function (value) {
|
||||||
|
result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Object.keys(value).forEach(function (k) {
|
||||||
|
if (isDefined(value[k])) {
|
||||||
|
result.push(encodeValue(operator, value[k], k));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const tmp = [];
|
||||||
|
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
value.filter(isDefined).forEach(function (value) {
|
||||||
|
tmp.push(encodeValue(operator, value));
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Object.keys(value).forEach(function (k) {
|
||||||
|
if (isDefined(value[k])) {
|
||||||
|
tmp.push(encodeUnreserved(k));
|
||||||
|
tmp.push(encodeValue(operator, value[k].toString()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isKeyOperator(operator)) {
|
||||||
|
result.push(encodeUnreserved(key) + "=" + tmp.join(","));
|
||||||
|
} else if (tmp.length !== 0) {
|
||||||
|
result.push(tmp.join(","));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (operator === ";") {
|
||||||
|
if (isDefined(value)) {
|
||||||
|
result.push(encodeUnreserved(key));
|
||||||
|
}
|
||||||
|
} else if (value === "" && (operator === "&" || operator === "?")) {
|
||||||
|
result.push(encodeUnreserved(key) + "=");
|
||||||
|
} else if (value === "") {
|
||||||
|
result.push("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseUrl(template) {
|
||||||
|
return {
|
||||||
|
expand: expand.bind(null, template)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function expand(template, context) {
|
||||||
|
var operators = ["+", "#", ".", "/", ";", "?", "&"];
|
||||||
|
return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) {
|
||||||
|
if (expression) {
|
||||||
|
let operator = "";
|
||||||
|
const values = [];
|
||||||
|
|
||||||
|
if (operators.indexOf(expression.charAt(0)) !== -1) {
|
||||||
|
operator = expression.charAt(0);
|
||||||
|
expression = expression.substr(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
expression.split(/,/g).forEach(function (variable) {
|
||||||
|
var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
|
||||||
|
values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
|
||||||
|
});
|
||||||
|
|
||||||
|
if (operator && operator !== "+") {
|
||||||
|
var separator = ",";
|
||||||
|
|
||||||
|
if (operator === "?") {
|
||||||
|
separator = "&";
|
||||||
|
} else if (operator !== "#") {
|
||||||
|
separator = operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (values.length !== 0 ? operator : "") + values.join(separator);
|
||||||
|
} else {
|
||||||
|
return values.join(",");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return encodeReserved(literal);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function parse(options) {
|
||||||
|
// https://fetch.spec.whatwg.org/#methods
|
||||||
|
let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible
|
||||||
|
|
||||||
|
let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{+$1}");
|
||||||
|
let headers = Object.assign({}, options.headers);
|
||||||
|
let body;
|
||||||
|
let parameters = omit(options, ["method", "baseUrl", "url", "headers", "request", "mediaType"]); // extract variable names from URL to calculate remaining variables later
|
||||||
|
|
||||||
|
const urlVariableNames = extractUrlVariableNames(url);
|
||||||
|
url = parseUrl(url).expand(parameters);
|
||||||
|
|
||||||
|
if (!/^http/.test(url)) {
|
||||||
|
url = options.baseUrl + url;
|
||||||
|
}
|
||||||
|
|
||||||
|
const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat("baseUrl");
|
||||||
|
const remainingParameters = omit(parameters, omittedParameters);
|
||||||
|
const isBinaryRequset = /application\/octet-stream/i.test(headers.accept);
|
||||||
|
|
||||||
|
if (!isBinaryRequset) {
|
||||||
|
if (options.mediaType.format) {
|
||||||
|
// e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw
|
||||||
|
headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(",");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.mediaType.previews.length) {
|
||||||
|
const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || [];
|
||||||
|
headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => {
|
||||||
|
const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json";
|
||||||
|
return `application/vnd.github.${preview}-preview${format}`;
|
||||||
|
}).join(",");
|
||||||
|
}
|
||||||
|
} // for GET/HEAD requests, set URL query parameters from remaining parameters
|
||||||
|
// for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters
|
||||||
|
|
||||||
|
|
||||||
|
if (["GET", "HEAD"].includes(method)) {
|
||||||
|
url = addQueryParameters(url, remainingParameters);
|
||||||
|
} else {
|
||||||
|
if ("data" in remainingParameters) {
|
||||||
|
body = remainingParameters.data;
|
||||||
|
} else {
|
||||||
|
if (Object.keys(remainingParameters).length) {
|
||||||
|
body = remainingParameters;
|
||||||
|
} else {
|
||||||
|
headers["content-length"] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} // default content-type for JSON if body is set
|
||||||
|
|
||||||
|
|
||||||
|
if (!headers["content-type"] && typeof body !== "undefined") {
|
||||||
|
headers["content-type"] = "application/json; charset=utf-8";
|
||||||
|
} // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.
|
||||||
|
// fetch does not allow to set `content-length` header, but we can set body to an empty string
|
||||||
|
|
||||||
|
|
||||||
|
if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") {
|
||||||
|
body = "";
|
||||||
|
} // Only return body/request keys if present
|
||||||
|
|
||||||
|
|
||||||
|
return Object.assign({
|
||||||
|
method,
|
||||||
|
url,
|
||||||
|
headers
|
||||||
|
}, typeof body !== "undefined" ? {
|
||||||
|
body
|
||||||
|
} : null, options.request ? {
|
||||||
|
request: options.request
|
||||||
|
} : null);
|
||||||
|
}
|
||||||
|
|
||||||
|
function endpointWithDefaults(defaults, route, options) {
|
||||||
|
return parse(merge(defaults, route, options));
|
||||||
|
}
|
||||||
|
|
||||||
|
function withDefaults(oldDefaults, newDefaults) {
|
||||||
|
const DEFAULTS = merge(oldDefaults, newDefaults);
|
||||||
|
const endpoint = endpointWithDefaults.bind(null, DEFAULTS);
|
||||||
|
return Object.assign(endpoint, {
|
||||||
|
DEFAULTS,
|
||||||
|
defaults: withDefaults.bind(null, DEFAULTS),
|
||||||
|
merge: merge.bind(null, DEFAULTS),
|
||||||
|
parse
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const VERSION = "5.5.2";
|
||||||
|
|
||||||
|
const userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url.
|
||||||
|
// So we use RequestParameters and add method as additional required property.
|
||||||
|
|
||||||
|
const DEFAULTS = {
|
||||||
|
method: "GET",
|
||||||
|
baseUrl: "https://api.github.com",
|
||||||
|
headers: {
|
||||||
|
accept: "application/vnd.github.v3+json",
|
||||||
|
"user-agent": userAgent
|
||||||
|
},
|
||||||
|
mediaType: {
|
||||||
|
format: "",
|
||||||
|
previews: []
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const endpoint = withDefaults(null, DEFAULTS);
|
||||||
|
|
||||||
|
exports.endpoint = endpoint;
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
1
node_modules/@octokit/endpoint/dist-node/index.js.map
generated
vendored
Normal file
1
node_modules/@octokit/endpoint/dist-node/index.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
17
node_modules/@octokit/endpoint/dist-src/defaults.js
generated
vendored
Normal file
17
node_modules/@octokit/endpoint/dist-src/defaults.js
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { getUserAgent } from "universal-user-agent";
|
||||||
|
import { VERSION } from "./version";
|
||||||
|
const userAgent = `octokit-endpoint.js/${VERSION} ${getUserAgent()}`;
|
||||||
|
// DEFAULTS has all properties set that EndpointOptions has, except url.
|
||||||
|
// So we use RequestParameters and add method as additional required property.
|
||||||
|
export const DEFAULTS = {
|
||||||
|
method: "GET",
|
||||||
|
baseUrl: "https://api.github.com",
|
||||||
|
headers: {
|
||||||
|
accept: "application/vnd.github.v3+json",
|
||||||
|
"user-agent": userAgent
|
||||||
|
},
|
||||||
|
mediaType: {
|
||||||
|
format: "",
|
||||||
|
previews: []
|
||||||
|
}
|
||||||
|
};
|
||||||
5
node_modules/@octokit/endpoint/dist-src/endpoint-with-defaults.js
generated
vendored
Normal file
5
node_modules/@octokit/endpoint/dist-src/endpoint-with-defaults.js
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import { merge } from "./merge";
|
||||||
|
import { parse } from "./parse";
|
||||||
|
export function endpointWithDefaults(defaults, route, options) {
|
||||||
|
return parse(merge(defaults, route, options));
|
||||||
|
}
|
||||||
3
node_modules/@octokit/endpoint/dist-src/index.js
generated
vendored
Normal file
3
node_modules/@octokit/endpoint/dist-src/index.js
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import { withDefaults } from "./with-defaults";
|
||||||
|
import { DEFAULTS } from "./defaults";
|
||||||
|
export const endpoint = withDefaults(null, DEFAULTS);
|
||||||
22
node_modules/@octokit/endpoint/dist-src/merge.js
generated
vendored
Normal file
22
node_modules/@octokit/endpoint/dist-src/merge.js
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { lowercaseKeys } from "./util/lowercase-keys";
|
||||||
|
import { mergeDeep } from "./util/merge-deep";
|
||||||
|
export function merge(defaults, route, options) {
|
||||||
|
if (typeof route === "string") {
|
||||||
|
let [method, url] = route.split(" ");
|
||||||
|
options = Object.assign(url ? { method, url } : { url: method }, options);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
options = Object.assign({}, route);
|
||||||
|
}
|
||||||
|
// lowercase header names before merging with defaults to avoid duplicates
|
||||||
|
options.headers = lowercaseKeys(options.headers);
|
||||||
|
const mergedOptions = mergeDeep(defaults || {}, options);
|
||||||
|
// mediaType.previews arrays are merged, instead of overwritten
|
||||||
|
if (defaults && defaults.mediaType.previews.length) {
|
||||||
|
mergedOptions.mediaType.previews = defaults.mediaType.previews
|
||||||
|
.filter(preview => !mergedOptions.mediaType.previews.includes(preview))
|
||||||
|
.concat(mergedOptions.mediaType.previews);
|
||||||
|
}
|
||||||
|
mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map((preview) => preview.replace(/-preview/, ""));
|
||||||
|
return mergedOptions;
|
||||||
|
}
|
||||||
81
node_modules/@octokit/endpoint/dist-src/parse.js
generated
vendored
Normal file
81
node_modules/@octokit/endpoint/dist-src/parse.js
generated
vendored
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
import { addQueryParameters } from "./util/add-query-parameters";
|
||||||
|
import { extractUrlVariableNames } from "./util/extract-url-variable-names";
|
||||||
|
import { omit } from "./util/omit";
|
||||||
|
import { parseUrl } from "./util/url-template";
|
||||||
|
export function parse(options) {
|
||||||
|
// https://fetch.spec.whatwg.org/#methods
|
||||||
|
let method = options.method.toUpperCase();
|
||||||
|
// replace :varname with {varname} to make it RFC 6570 compatible
|
||||||
|
let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{+$1}");
|
||||||
|
let headers = Object.assign({}, options.headers);
|
||||||
|
let body;
|
||||||
|
let parameters = omit(options, [
|
||||||
|
"method",
|
||||||
|
"baseUrl",
|
||||||
|
"url",
|
||||||
|
"headers",
|
||||||
|
"request",
|
||||||
|
"mediaType"
|
||||||
|
]);
|
||||||
|
// extract variable names from URL to calculate remaining variables later
|
||||||
|
const urlVariableNames = extractUrlVariableNames(url);
|
||||||
|
url = parseUrl(url).expand(parameters);
|
||||||
|
if (!/^http/.test(url)) {
|
||||||
|
url = options.baseUrl + url;
|
||||||
|
}
|
||||||
|
const omittedParameters = Object.keys(options)
|
||||||
|
.filter(option => urlVariableNames.includes(option))
|
||||||
|
.concat("baseUrl");
|
||||||
|
const remainingParameters = omit(parameters, omittedParameters);
|
||||||
|
const isBinaryRequset = /application\/octet-stream/i.test(headers.accept);
|
||||||
|
if (!isBinaryRequset) {
|
||||||
|
if (options.mediaType.format) {
|
||||||
|
// e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw
|
||||||
|
headers.accept = headers.accept
|
||||||
|
.split(/,/)
|
||||||
|
.map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`))
|
||||||
|
.join(",");
|
||||||
|
}
|
||||||
|
if (options.mediaType.previews.length) {
|
||||||
|
const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || [];
|
||||||
|
headers.accept = previewsFromAcceptHeader
|
||||||
|
.concat(options.mediaType.previews)
|
||||||
|
.map(preview => {
|
||||||
|
const format = options.mediaType.format
|
||||||
|
? `.${options.mediaType.format}`
|
||||||
|
: "+json";
|
||||||
|
return `application/vnd.github.${preview}-preview${format}`;
|
||||||
|
})
|
||||||
|
.join(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// for GET/HEAD requests, set URL query parameters from remaining parameters
|
||||||
|
// for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters
|
||||||
|
if (["GET", "HEAD"].includes(method)) {
|
||||||
|
url = addQueryParameters(url, remainingParameters);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if ("data" in remainingParameters) {
|
||||||
|
body = remainingParameters.data;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (Object.keys(remainingParameters).length) {
|
||||||
|
body = remainingParameters;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
headers["content-length"] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// default content-type for JSON if body is set
|
||||||
|
if (!headers["content-type"] && typeof body !== "undefined") {
|
||||||
|
headers["content-type"] = "application/json; charset=utf-8";
|
||||||
|
}
|
||||||
|
// GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.
|
||||||
|
// fetch does not allow to set `content-length` header, but we can set body to an empty string
|
||||||
|
if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") {
|
||||||
|
body = "";
|
||||||
|
}
|
||||||
|
// Only return body/request keys if present
|
||||||
|
return Object.assign({ method, url, headers }, typeof body !== "undefined" ? { body } : null, options.request ? { request: options.request } : null);
|
||||||
|
}
|
||||||
21
node_modules/@octokit/endpoint/dist-src/util/add-query-parameters.js
generated
vendored
Normal file
21
node_modules/@octokit/endpoint/dist-src/util/add-query-parameters.js
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
export function addQueryParameters(url, parameters) {
|
||||||
|
const separator = /\?/.test(url) ? "&" : "?";
|
||||||
|
const names = Object.keys(parameters);
|
||||||
|
if (names.length === 0) {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
return (url +
|
||||||
|
separator +
|
||||||
|
names
|
||||||
|
.map(name => {
|
||||||
|
if (name === "q") {
|
||||||
|
return ("q=" +
|
||||||
|
parameters
|
||||||
|
.q.split("+")
|
||||||
|
.map(encodeURIComponent)
|
||||||
|
.join("+"));
|
||||||
|
}
|
||||||
|
return `${name}=${encodeURIComponent(parameters[name])}`;
|
||||||
|
})
|
||||||
|
.join("&"));
|
||||||
|
}
|
||||||
11
node_modules/@octokit/endpoint/dist-src/util/extract-url-variable-names.js
generated
vendored
Normal file
11
node_modules/@octokit/endpoint/dist-src/util/extract-url-variable-names.js
generated
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
const urlVariableRegex = /\{[^}]+\}/g;
|
||||||
|
function removeNonChars(variableName) {
|
||||||
|
return variableName.replace(/^\W+|\W+$/g, "").split(/,/);
|
||||||
|
}
|
||||||
|
export function extractUrlVariableNames(url) {
|
||||||
|
const matches = url.match(urlVariableRegex);
|
||||||
|
if (!matches) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);
|
||||||
|
}
|
||||||
9
node_modules/@octokit/endpoint/dist-src/util/lowercase-keys.js
generated
vendored
Normal file
9
node_modules/@octokit/endpoint/dist-src/util/lowercase-keys.js
generated
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
export function lowercaseKeys(object) {
|
||||||
|
if (!object) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
return Object.keys(object).reduce((newObj, key) => {
|
||||||
|
newObj[key.toLowerCase()] = object[key];
|
||||||
|
return newObj;
|
||||||
|
}, {});
|
||||||
|
}
|
||||||
16
node_modules/@octokit/endpoint/dist-src/util/merge-deep.js
generated
vendored
Normal file
16
node_modules/@octokit/endpoint/dist-src/util/merge-deep.js
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import isPlainObject from "is-plain-object";
|
||||||
|
export function mergeDeep(defaults, options) {
|
||||||
|
const result = Object.assign({}, defaults);
|
||||||
|
Object.keys(options).forEach(key => {
|
||||||
|
if (isPlainObject(options[key])) {
|
||||||
|
if (!(key in defaults))
|
||||||
|
Object.assign(result, { [key]: options[key] });
|
||||||
|
else
|
||||||
|
result[key] = mergeDeep(defaults[key], options[key]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Object.assign(result, { [key]: options[key] });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
8
node_modules/@octokit/endpoint/dist-src/util/omit.js
generated
vendored
Normal file
8
node_modules/@octokit/endpoint/dist-src/util/omit.js
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
export function omit(object, keysToOmit) {
|
||||||
|
return Object.keys(object)
|
||||||
|
.filter(option => !keysToOmit.includes(option))
|
||||||
|
.reduce((obj, key) => {
|
||||||
|
obj[key] = object[key];
|
||||||
|
return obj;
|
||||||
|
}, {});
|
||||||
|
}
|
||||||
170
node_modules/@octokit/endpoint/dist-src/util/url-template.js
generated
vendored
Normal file
170
node_modules/@octokit/endpoint/dist-src/util/url-template.js
generated
vendored
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
// Based on https://github.com/bramstein/url-template, licensed under BSD
|
||||||
|
// TODO: create separate package.
|
||||||
|
//
|
||||||
|
// Copyright (c) 2012-2014, Bram Stein
|
||||||
|
// All rights reserved.
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions
|
||||||
|
// are met:
|
||||||
|
// 1. Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer in the
|
||||||
|
// documentation and/or other materials provided with the distribution.
|
||||||
|
// 3. The name of the author may not be used to endorse or promote products
|
||||||
|
// derived from this software without specific prior written permission.
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||||
|
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||||
|
// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||||
|
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
/* istanbul ignore file */
|
||||||
|
function encodeReserved(str) {
|
||||||
|
return str
|
||||||
|
.split(/(%[0-9A-Fa-f]{2})/g)
|
||||||
|
.map(function (part) {
|
||||||
|
if (!/%[0-9A-Fa-f]/.test(part)) {
|
||||||
|
part = encodeURI(part)
|
||||||
|
.replace(/%5B/g, "[")
|
||||||
|
.replace(/%5D/g, "]");
|
||||||
|
}
|
||||||
|
return part;
|
||||||
|
})
|
||||||
|
.join("");
|
||||||
|
}
|
||||||
|
function encodeUnreserved(str) {
|
||||||
|
return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
|
||||||
|
return ("%" +
|
||||||
|
c
|
||||||
|
.charCodeAt(0)
|
||||||
|
.toString(16)
|
||||||
|
.toUpperCase());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function encodeValue(operator, value, key) {
|
||||||
|
value =
|
||||||
|
operator === "+" || operator === "#"
|
||||||
|
? encodeReserved(value)
|
||||||
|
: encodeUnreserved(value);
|
||||||
|
if (key) {
|
||||||
|
return encodeUnreserved(key) + "=" + value;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function isDefined(value) {
|
||||||
|
return value !== undefined && value !== null;
|
||||||
|
}
|
||||||
|
function isKeyOperator(operator) {
|
||||||
|
return operator === ";" || operator === "&" || operator === "?";
|
||||||
|
}
|
||||||
|
function getValues(context, operator, key, modifier) {
|
||||||
|
var value = context[key], result = [];
|
||||||
|
if (isDefined(value) && value !== "") {
|
||||||
|
if (typeof value === "string" ||
|
||||||
|
typeof value === "number" ||
|
||||||
|
typeof value === "boolean") {
|
||||||
|
value = value.toString();
|
||||||
|
if (modifier && modifier !== "*") {
|
||||||
|
value = value.substring(0, parseInt(modifier, 10));
|
||||||
|
}
|
||||||
|
result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (modifier === "*") {
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
value.filter(isDefined).forEach(function (value) {
|
||||||
|
result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Object.keys(value).forEach(function (k) {
|
||||||
|
if (isDefined(value[k])) {
|
||||||
|
result.push(encodeValue(operator, value[k], k));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const tmp = [];
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
value.filter(isDefined).forEach(function (value) {
|
||||||
|
tmp.push(encodeValue(operator, value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Object.keys(value).forEach(function (k) {
|
||||||
|
if (isDefined(value[k])) {
|
||||||
|
tmp.push(encodeUnreserved(k));
|
||||||
|
tmp.push(encodeValue(operator, value[k].toString()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (isKeyOperator(operator)) {
|
||||||
|
result.push(encodeUnreserved(key) + "=" + tmp.join(","));
|
||||||
|
}
|
||||||
|
else if (tmp.length !== 0) {
|
||||||
|
result.push(tmp.join(","));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (operator === ";") {
|
||||||
|
if (isDefined(value)) {
|
||||||
|
result.push(encodeUnreserved(key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (value === "" && (operator === "&" || operator === "?")) {
|
||||||
|
result.push(encodeUnreserved(key) + "=");
|
||||||
|
}
|
||||||
|
else if (value === "") {
|
||||||
|
result.push("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
export function parseUrl(template) {
|
||||||
|
return {
|
||||||
|
expand: expand.bind(null, template)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function expand(template, context) {
|
||||||
|
var operators = ["+", "#", ".", "/", ";", "?", "&"];
|
||||||
|
return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) {
|
||||||
|
if (expression) {
|
||||||
|
let operator = "";
|
||||||
|
const values = [];
|
||||||
|
if (operators.indexOf(expression.charAt(0)) !== -1) {
|
||||||
|
operator = expression.charAt(0);
|
||||||
|
expression = expression.substr(1);
|
||||||
|
}
|
||||||
|
expression.split(/,/g).forEach(function (variable) {
|
||||||
|
var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
|
||||||
|
values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
|
||||||
|
});
|
||||||
|
if (operator && operator !== "+") {
|
||||||
|
var separator = ",";
|
||||||
|
if (operator === "?") {
|
||||||
|
separator = "&";
|
||||||
|
}
|
||||||
|
else if (operator !== "#") {
|
||||||
|
separator = operator;
|
||||||
|
}
|
||||||
|
return (values.length !== 0 ? operator : "") + values.join(separator);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return values.join(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return encodeReserved(literal);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
1
node_modules/@octokit/endpoint/dist-src/version.js
generated
vendored
Normal file
1
node_modules/@octokit/endpoint/dist-src/version.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export const VERSION = "5.5.2";
|
||||||
13
node_modules/@octokit/endpoint/dist-src/with-defaults.js
generated
vendored
Normal file
13
node_modules/@octokit/endpoint/dist-src/with-defaults.js
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import { endpointWithDefaults } from "./endpoint-with-defaults";
|
||||||
|
import { merge } from "./merge";
|
||||||
|
import { parse } from "./parse";
|
||||||
|
export function withDefaults(oldDefaults, newDefaults) {
|
||||||
|
const DEFAULTS = merge(oldDefaults, newDefaults);
|
||||||
|
const endpoint = endpointWithDefaults.bind(null, DEFAULTS);
|
||||||
|
return Object.assign(endpoint, {
|
||||||
|
DEFAULTS,
|
||||||
|
defaults: withDefaults.bind(null, DEFAULTS),
|
||||||
|
merge: merge.bind(null, DEFAULTS),
|
||||||
|
parse
|
||||||
|
});
|
||||||
|
}
|
||||||
2
node_modules/@octokit/endpoint/dist-types/defaults.d.ts
generated
vendored
Normal file
2
node_modules/@octokit/endpoint/dist-types/defaults.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import { EndpointDefaults } from "@octokit/types";
|
||||||
|
export declare const DEFAULTS: EndpointDefaults;
|
||||||
3
node_modules/@octokit/endpoint/dist-types/endpoint-with-defaults.d.ts
generated
vendored
Normal file
3
node_modules/@octokit/endpoint/dist-types/endpoint-with-defaults.d.ts
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import { EndpointOptions, RequestParameters, Route } from "@octokit/types";
|
||||||
|
import { DEFAULTS } from "./defaults";
|
||||||
|
export declare function endpointWithDefaults(defaults: typeof DEFAULTS, route: Route | EndpointOptions, options?: RequestParameters): import("@octokit/types").RequestOptions;
|
||||||
1
node_modules/@octokit/endpoint/dist-types/index.d.ts
generated
vendored
Normal file
1
node_modules/@octokit/endpoint/dist-types/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export declare const endpoint: import("@octokit/types").EndpointInterface;
|
||||||
2
node_modules/@octokit/endpoint/dist-types/merge.d.ts
generated
vendored
Normal file
2
node_modules/@octokit/endpoint/dist-types/merge.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import { EndpointDefaults, RequestParameters, Route } from "@octokit/types";
|
||||||
|
export declare function merge(defaults: EndpointDefaults | null, route?: Route | RequestParameters, options?: RequestParameters): EndpointDefaults;
|
||||||
2
node_modules/@octokit/endpoint/dist-types/parse.d.ts
generated
vendored
Normal file
2
node_modules/@octokit/endpoint/dist-types/parse.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import { EndpointDefaults, RequestOptions } from "@octokit/types";
|
||||||
|
export declare function parse(options: EndpointDefaults): RequestOptions;
|
||||||
4
node_modules/@octokit/endpoint/dist-types/util/add-query-parameters.d.ts
generated
vendored
Normal file
4
node_modules/@octokit/endpoint/dist-types/util/add-query-parameters.d.ts
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
export declare function addQueryParameters(url: string, parameters: {
|
||||||
|
[x: string]: string | undefined;
|
||||||
|
q?: string;
|
||||||
|
}): string;
|
||||||
1
node_modules/@octokit/endpoint/dist-types/util/extract-url-variable-names.d.ts
generated
vendored
Normal file
1
node_modules/@octokit/endpoint/dist-types/util/extract-url-variable-names.d.ts
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export declare function extractUrlVariableNames(url: string): string[];
|
||||||
5
node_modules/@octokit/endpoint/dist-types/util/lowercase-keys.d.ts
generated
vendored
Normal file
5
node_modules/@octokit/endpoint/dist-types/util/lowercase-keys.d.ts
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
export declare function lowercaseKeys(object?: {
|
||||||
|
[key: string]: any;
|
||||||
|
}): {
|
||||||
|
[key: string]: any;
|
||||||
|
};
|
||||||
1
node_modules/@octokit/endpoint/dist-types/util/merge-deep.d.ts
generated
vendored
Normal file
1
node_modules/@octokit/endpoint/dist-types/util/merge-deep.d.ts
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export declare function mergeDeep(defaults: any, options: any): object;
|
||||||
5
node_modules/@octokit/endpoint/dist-types/util/omit.d.ts
generated
vendored
Normal file
5
node_modules/@octokit/endpoint/dist-types/util/omit.d.ts
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
export declare function omit(object: {
|
||||||
|
[key: string]: any;
|
||||||
|
}, keysToOmit: string[]): {
|
||||||
|
[key: string]: any;
|
||||||
|
};
|
||||||
3
node_modules/@octokit/endpoint/dist-types/util/url-template.d.ts
generated
vendored
Normal file
3
node_modules/@octokit/endpoint/dist-types/util/url-template.d.ts
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export declare function parseUrl(template: string): {
|
||||||
|
expand: (context: object) => string;
|
||||||
|
};
|
||||||
1
node_modules/@octokit/endpoint/dist-types/version.d.ts
generated
vendored
Normal file
1
node_modules/@octokit/endpoint/dist-types/version.d.ts
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export declare const VERSION = "5.5.2";
|
||||||
2
node_modules/@octokit/endpoint/dist-types/with-defaults.d.ts
generated
vendored
Normal file
2
node_modules/@octokit/endpoint/dist-types/with-defaults.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import { EndpointInterface, RequestParameters, EndpointDefaults } from "@octokit/types";
|
||||||
|
export declare function withDefaults(oldDefaults: EndpointDefaults | null, newDefaults: RequestParameters): EndpointInterface;
|
||||||
379
node_modules/@octokit/endpoint/dist-web/index.js
generated
vendored
Normal file
379
node_modules/@octokit/endpoint/dist-web/index.js
generated
vendored
Normal file
@@ -0,0 +1,379 @@
|
|||||||
|
import isPlainObject from 'is-plain-object';
|
||||||
|
import { getUserAgent } from 'universal-user-agent';
|
||||||
|
|
||||||
|
function lowercaseKeys(object) {
|
||||||
|
if (!object) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
return Object.keys(object).reduce((newObj, key) => {
|
||||||
|
newObj[key.toLowerCase()] = object[key];
|
||||||
|
return newObj;
|
||||||
|
}, {});
|
||||||
|
}
|
||||||
|
|
||||||
|
function mergeDeep(defaults, options) {
|
||||||
|
const result = Object.assign({}, defaults);
|
||||||
|
Object.keys(options).forEach(key => {
|
||||||
|
if (isPlainObject(options[key])) {
|
||||||
|
if (!(key in defaults))
|
||||||
|
Object.assign(result, { [key]: options[key] });
|
||||||
|
else
|
||||||
|
result[key] = mergeDeep(defaults[key], options[key]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Object.assign(result, { [key]: options[key] });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
function merge(defaults, route, options) {
|
||||||
|
if (typeof route === "string") {
|
||||||
|
let [method, url] = route.split(" ");
|
||||||
|
options = Object.assign(url ? { method, url } : { url: method }, options);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
options = Object.assign({}, route);
|
||||||
|
}
|
||||||
|
// lowercase header names before merging with defaults to avoid duplicates
|
||||||
|
options.headers = lowercaseKeys(options.headers);
|
||||||
|
const mergedOptions = mergeDeep(defaults || {}, options);
|
||||||
|
// mediaType.previews arrays are merged, instead of overwritten
|
||||||
|
if (defaults && defaults.mediaType.previews.length) {
|
||||||
|
mergedOptions.mediaType.previews = defaults.mediaType.previews
|
||||||
|
.filter(preview => !mergedOptions.mediaType.previews.includes(preview))
|
||||||
|
.concat(mergedOptions.mediaType.previews);
|
||||||
|
}
|
||||||
|
mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map((preview) => preview.replace(/-preview/, ""));
|
||||||
|
return mergedOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
function addQueryParameters(url, parameters) {
|
||||||
|
const separator = /\?/.test(url) ? "&" : "?";
|
||||||
|
const names = Object.keys(parameters);
|
||||||
|
if (names.length === 0) {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
return (url +
|
||||||
|
separator +
|
||||||
|
names
|
||||||
|
.map(name => {
|
||||||
|
if (name === "q") {
|
||||||
|
return ("q=" +
|
||||||
|
parameters
|
||||||
|
.q.split("+")
|
||||||
|
.map(encodeURIComponent)
|
||||||
|
.join("+"));
|
||||||
|
}
|
||||||
|
return `${name}=${encodeURIComponent(parameters[name])}`;
|
||||||
|
})
|
||||||
|
.join("&"));
|
||||||
|
}
|
||||||
|
|
||||||
|
const urlVariableRegex = /\{[^}]+\}/g;
|
||||||
|
function removeNonChars(variableName) {
|
||||||
|
return variableName.replace(/^\W+|\W+$/g, "").split(/,/);
|
||||||
|
}
|
||||||
|
function extractUrlVariableNames(url) {
|
||||||
|
const matches = url.match(urlVariableRegex);
|
||||||
|
if (!matches) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);
|
||||||
|
}
|
||||||
|
|
||||||
|
function omit(object, keysToOmit) {
|
||||||
|
return Object.keys(object)
|
||||||
|
.filter(option => !keysToOmit.includes(option))
|
||||||
|
.reduce((obj, key) => {
|
||||||
|
obj[key] = object[key];
|
||||||
|
return obj;
|
||||||
|
}, {});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Based on https://github.com/bramstein/url-template, licensed under BSD
|
||||||
|
// TODO: create separate package.
|
||||||
|
//
|
||||||
|
// Copyright (c) 2012-2014, Bram Stein
|
||||||
|
// All rights reserved.
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions
|
||||||
|
// are met:
|
||||||
|
// 1. Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer in the
|
||||||
|
// documentation and/or other materials provided with the distribution.
|
||||||
|
// 3. The name of the author may not be used to endorse or promote products
|
||||||
|
// derived from this software without specific prior written permission.
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||||
|
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||||
|
// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||||
|
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
/* istanbul ignore file */
|
||||||
|
function encodeReserved(str) {
|
||||||
|
return str
|
||||||
|
.split(/(%[0-9A-Fa-f]{2})/g)
|
||||||
|
.map(function (part) {
|
||||||
|
if (!/%[0-9A-Fa-f]/.test(part)) {
|
||||||
|
part = encodeURI(part)
|
||||||
|
.replace(/%5B/g, "[")
|
||||||
|
.replace(/%5D/g, "]");
|
||||||
|
}
|
||||||
|
return part;
|
||||||
|
})
|
||||||
|
.join("");
|
||||||
|
}
|
||||||
|
function encodeUnreserved(str) {
|
||||||
|
return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
|
||||||
|
return ("%" +
|
||||||
|
c
|
||||||
|
.charCodeAt(0)
|
||||||
|
.toString(16)
|
||||||
|
.toUpperCase());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function encodeValue(operator, value, key) {
|
||||||
|
value =
|
||||||
|
operator === "+" || operator === "#"
|
||||||
|
? encodeReserved(value)
|
||||||
|
: encodeUnreserved(value);
|
||||||
|
if (key) {
|
||||||
|
return encodeUnreserved(key) + "=" + value;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function isDefined(value) {
|
||||||
|
return value !== undefined && value !== null;
|
||||||
|
}
|
||||||
|
function isKeyOperator(operator) {
|
||||||
|
return operator === ";" || operator === "&" || operator === "?";
|
||||||
|
}
|
||||||
|
function getValues(context, operator, key, modifier) {
|
||||||
|
var value = context[key], result = [];
|
||||||
|
if (isDefined(value) && value !== "") {
|
||||||
|
if (typeof value === "string" ||
|
||||||
|
typeof value === "number" ||
|
||||||
|
typeof value === "boolean") {
|
||||||
|
value = value.toString();
|
||||||
|
if (modifier && modifier !== "*") {
|
||||||
|
value = value.substring(0, parseInt(modifier, 10));
|
||||||
|
}
|
||||||
|
result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (modifier === "*") {
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
value.filter(isDefined).forEach(function (value) {
|
||||||
|
result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Object.keys(value).forEach(function (k) {
|
||||||
|
if (isDefined(value[k])) {
|
||||||
|
result.push(encodeValue(operator, value[k], k));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const tmp = [];
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
value.filter(isDefined).forEach(function (value) {
|
||||||
|
tmp.push(encodeValue(operator, value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Object.keys(value).forEach(function (k) {
|
||||||
|
if (isDefined(value[k])) {
|
||||||
|
tmp.push(encodeUnreserved(k));
|
||||||
|
tmp.push(encodeValue(operator, value[k].toString()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (isKeyOperator(operator)) {
|
||||||
|
result.push(encodeUnreserved(key) + "=" + tmp.join(","));
|
||||||
|
}
|
||||||
|
else if (tmp.length !== 0) {
|
||||||
|
result.push(tmp.join(","));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (operator === ";") {
|
||||||
|
if (isDefined(value)) {
|
||||||
|
result.push(encodeUnreserved(key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (value === "" && (operator === "&" || operator === "?")) {
|
||||||
|
result.push(encodeUnreserved(key) + "=");
|
||||||
|
}
|
||||||
|
else if (value === "") {
|
||||||
|
result.push("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
function parseUrl(template) {
|
||||||
|
return {
|
||||||
|
expand: expand.bind(null, template)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function expand(template, context) {
|
||||||
|
var operators = ["+", "#", ".", "/", ";", "?", "&"];
|
||||||
|
return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) {
|
||||||
|
if (expression) {
|
||||||
|
let operator = "";
|
||||||
|
const values = [];
|
||||||
|
if (operators.indexOf(expression.charAt(0)) !== -1) {
|
||||||
|
operator = expression.charAt(0);
|
||||||
|
expression = expression.substr(1);
|
||||||
|
}
|
||||||
|
expression.split(/,/g).forEach(function (variable) {
|
||||||
|
var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
|
||||||
|
values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
|
||||||
|
});
|
||||||
|
if (operator && operator !== "+") {
|
||||||
|
var separator = ",";
|
||||||
|
if (operator === "?") {
|
||||||
|
separator = "&";
|
||||||
|
}
|
||||||
|
else if (operator !== "#") {
|
||||||
|
separator = operator;
|
||||||
|
}
|
||||||
|
return (values.length !== 0 ? operator : "") + values.join(separator);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return values.join(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return encodeReserved(literal);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function parse(options) {
|
||||||
|
// https://fetch.spec.whatwg.org/#methods
|
||||||
|
let method = options.method.toUpperCase();
|
||||||
|
// replace :varname with {varname} to make it RFC 6570 compatible
|
||||||
|
let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{+$1}");
|
||||||
|
let headers = Object.assign({}, options.headers);
|
||||||
|
let body;
|
||||||
|
let parameters = omit(options, [
|
||||||
|
"method",
|
||||||
|
"baseUrl",
|
||||||
|
"url",
|
||||||
|
"headers",
|
||||||
|
"request",
|
||||||
|
"mediaType"
|
||||||
|
]);
|
||||||
|
// extract variable names from URL to calculate remaining variables later
|
||||||
|
const urlVariableNames = extractUrlVariableNames(url);
|
||||||
|
url = parseUrl(url).expand(parameters);
|
||||||
|
if (!/^http/.test(url)) {
|
||||||
|
url = options.baseUrl + url;
|
||||||
|
}
|
||||||
|
const omittedParameters = Object.keys(options)
|
||||||
|
.filter(option => urlVariableNames.includes(option))
|
||||||
|
.concat("baseUrl");
|
||||||
|
const remainingParameters = omit(parameters, omittedParameters);
|
||||||
|
const isBinaryRequset = /application\/octet-stream/i.test(headers.accept);
|
||||||
|
if (!isBinaryRequset) {
|
||||||
|
if (options.mediaType.format) {
|
||||||
|
// e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw
|
||||||
|
headers.accept = headers.accept
|
||||||
|
.split(/,/)
|
||||||
|
.map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`))
|
||||||
|
.join(",");
|
||||||
|
}
|
||||||
|
if (options.mediaType.previews.length) {
|
||||||
|
const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || [];
|
||||||
|
headers.accept = previewsFromAcceptHeader
|
||||||
|
.concat(options.mediaType.previews)
|
||||||
|
.map(preview => {
|
||||||
|
const format = options.mediaType.format
|
||||||
|
? `.${options.mediaType.format}`
|
||||||
|
: "+json";
|
||||||
|
return `application/vnd.github.${preview}-preview${format}`;
|
||||||
|
})
|
||||||
|
.join(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// for GET/HEAD requests, set URL query parameters from remaining parameters
|
||||||
|
// for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters
|
||||||
|
if (["GET", "HEAD"].includes(method)) {
|
||||||
|
url = addQueryParameters(url, remainingParameters);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if ("data" in remainingParameters) {
|
||||||
|
body = remainingParameters.data;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (Object.keys(remainingParameters).length) {
|
||||||
|
body = remainingParameters;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
headers["content-length"] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// default content-type for JSON if body is set
|
||||||
|
if (!headers["content-type"] && typeof body !== "undefined") {
|
||||||
|
headers["content-type"] = "application/json; charset=utf-8";
|
||||||
|
}
|
||||||
|
// GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.
|
||||||
|
// fetch does not allow to set `content-length` header, but we can set body to an empty string
|
||||||
|
if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") {
|
||||||
|
body = "";
|
||||||
|
}
|
||||||
|
// Only return body/request keys if present
|
||||||
|
return Object.assign({ method, url, headers }, typeof body !== "undefined" ? { body } : null, options.request ? { request: options.request } : null);
|
||||||
|
}
|
||||||
|
|
||||||
|
function endpointWithDefaults(defaults, route, options) {
|
||||||
|
return parse(merge(defaults, route, options));
|
||||||
|
}
|
||||||
|
|
||||||
|
function withDefaults(oldDefaults, newDefaults) {
|
||||||
|
const DEFAULTS = merge(oldDefaults, newDefaults);
|
||||||
|
const endpoint = endpointWithDefaults.bind(null, DEFAULTS);
|
||||||
|
return Object.assign(endpoint, {
|
||||||
|
DEFAULTS,
|
||||||
|
defaults: withDefaults.bind(null, DEFAULTS),
|
||||||
|
merge: merge.bind(null, DEFAULTS),
|
||||||
|
parse
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const VERSION = "5.5.2";
|
||||||
|
|
||||||
|
const userAgent = `octokit-endpoint.js/${VERSION} ${getUserAgent()}`;
|
||||||
|
// DEFAULTS has all properties set that EndpointOptions has, except url.
|
||||||
|
// So we use RequestParameters and add method as additional required property.
|
||||||
|
const DEFAULTS = {
|
||||||
|
method: "GET",
|
||||||
|
baseUrl: "https://api.github.com",
|
||||||
|
headers: {
|
||||||
|
accept: "application/vnd.github.v3+json",
|
||||||
|
"user-agent": userAgent
|
||||||
|
},
|
||||||
|
mediaType: {
|
||||||
|
format: "",
|
||||||
|
previews: []
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const endpoint = withDefaults(null, DEFAULTS);
|
||||||
|
|
||||||
|
export { endpoint };
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
1
node_modules/@octokit/endpoint/dist-web/index.js.map
generated
vendored
Normal file
1
node_modules/@octokit/endpoint/dist-web/index.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
77
node_modules/@octokit/endpoint/package.json
generated
vendored
Normal file
77
node_modules/@octokit/endpoint/package.json
generated
vendored
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
{
|
||||||
|
"_from": "@octokit/endpoint@^5.5.0",
|
||||||
|
"_id": "@octokit/endpoint@5.5.2",
|
||||||
|
"_inBundle": false,
|
||||||
|
"_integrity": "sha512-ICDcRA0C2vtTZZGud1nXRrBLXZqFayodXAKZfo3dkdcLNqcHsgaz3YSTupbURusYeucSVRjjG+RTcQhx6HPPcg==",
|
||||||
|
"_location": "/@octokit/endpoint",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"type": "range",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "@octokit/endpoint@^5.5.0",
|
||||||
|
"name": "@octokit/endpoint",
|
||||||
|
"escapedName": "@octokit%2fendpoint",
|
||||||
|
"scope": "@octokit",
|
||||||
|
"rawSpec": "^5.5.0",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "^5.5.0"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/@octokit/request"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.5.2.tgz",
|
||||||
|
"_shasum": "ed19d01fe85ac58bc2b774661658f9e5429b8164",
|
||||||
|
"_spec": "@octokit/endpoint@^5.5.0",
|
||||||
|
"_where": "/Users/bret/repos/deploy-to-neocities/node_modules/@octokit/request",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/octokit/endpoint.js/issues"
|
||||||
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"dependencies": {
|
||||||
|
"@octokit/types": "^2.0.0",
|
||||||
|
"is-plain-object": "^3.0.0",
|
||||||
|
"universal-user-agent": "^4.0.0"
|
||||||
|
},
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "Turns REST API endpoints into generic request options",
|
||||||
|
"devDependencies": {
|
||||||
|
"@pika/pack": "^0.5.0",
|
||||||
|
"@pika/plugin-build-node": "^0.8.1",
|
||||||
|
"@pika/plugin-build-web": "^0.8.1",
|
||||||
|
"@pika/plugin-ts-standard-pkg": "^0.8.1",
|
||||||
|
"@types/jest": "^25.1.0",
|
||||||
|
"jest": "^24.7.1",
|
||||||
|
"prettier": "1.19.0",
|
||||||
|
"semantic-release": "^17.0.0",
|
||||||
|
"semantic-release-plugin-update-version-in-files": "^1.0.0",
|
||||||
|
"ts-jest": "^24.0.2",
|
||||||
|
"typescript": "^3.4.5"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"dist-*/",
|
||||||
|
"bin/"
|
||||||
|
],
|
||||||
|
"homepage": "https://github.com/octokit/endpoint.js#readme",
|
||||||
|
"keywords": [
|
||||||
|
"octokit",
|
||||||
|
"github",
|
||||||
|
"api",
|
||||||
|
"rest"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "dist-node/index.js",
|
||||||
|
"module": "dist-web/index.js",
|
||||||
|
"name": "@octokit/endpoint",
|
||||||
|
"pika": true,
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/octokit/endpoint.js.git"
|
||||||
|
},
|
||||||
|
"sideEffects": false,
|
||||||
|
"source": "dist-src/index.js",
|
||||||
|
"types": "dist-types/index.d.ts",
|
||||||
|
"version": "5.5.2"
|
||||||
|
}
|
||||||
21
node_modules/@octokit/graphql/LICENSE
generated
vendored
Normal file
21
node_modules/@octokit/graphql/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
The MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2018 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 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.
|
||||||
380
node_modules/@octokit/graphql/README.md
generated
vendored
Normal file
380
node_modules/@octokit/graphql/README.md
generated
vendored
Normal file
@@ -0,0 +1,380 @@
|
|||||||
|
# graphql.js
|
||||||
|
|
||||||
|
> GitHub GraphQL API client for browsers and Node
|
||||||
|
|
||||||
|
[](https://www.npmjs.com/package/@octokit/graphql)
|
||||||
|
[](https://travis-ci.com/octokit/graphql.js)
|
||||||
|
[](https://greenkeeper.io/)
|
||||||
|
|
||||||
|
<!-- toc -->
|
||||||
|
|
||||||
|
- [Usage](#usage)
|
||||||
|
- [Send a simple query](#send-a-simple-query)
|
||||||
|
- [Authentication](#authentication)
|
||||||
|
- [Variables](#variables)
|
||||||
|
- [Pass query together with headers and variables](#pass-query-together-with-headers-and-variables)
|
||||||
|
- [Use your own `@octokit/request` instance](#)
|
||||||
|
- [Errors](#errors)
|
||||||
|
- [Partial responses](#partial-responses)
|
||||||
|
- [Writing tests](#writing-tests)
|
||||||
|
- [License](#license)
|
||||||
|
|
||||||
|
<!-- tocstop -->
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tbody valign=top align=left>
|
||||||
|
<tr><th>
|
||||||
|
Browsers
|
||||||
|
</th><td width=100%>
|
||||||
|
|
||||||
|
Load `@octokit/graphql` directly from [cdn.pika.dev](https://cdn.pika.dev)
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script type="module">
|
||||||
|
import { endpoint } from "https://cdn.pika.dev/@octokit/graphql";
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
</td></tr>
|
||||||
|
<tr><th>
|
||||||
|
Node
|
||||||
|
</th><td>
|
||||||
|
|
||||||
|
Install with <code>npm install @octokit/graphql</code>
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { graphql } = require("@octokit/graphql");
|
||||||
|
// or: import { graphql } from "@octokit/graphql";
|
||||||
|
```
|
||||||
|
|
||||||
|
</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### Send a simple query
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { repository } = await graphql(
|
||||||
|
`
|
||||||
|
{
|
||||||
|
repository(owner: "octokit", name: "graphql.js") {
|
||||||
|
issues(last: 3) {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
authorization: `token secret123`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Authentication
|
||||||
|
|
||||||
|
The simplest way to authenticate a request is to set the `Authorization` header, e.g. to a [personal access token](https://github.com/settings/tokens/).
|
||||||
|
|
||||||
|
```js
|
||||||
|
const graphqlWithAuth = graphql.defaults({
|
||||||
|
headers: {
|
||||||
|
authorization: `token secret123`
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const { repository } = await graphqlWithAuth(`
|
||||||
|
{
|
||||||
|
repository(owner: "octokit", name: "graphql.js") {
|
||||||
|
issues(last: 3) {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
```
|
||||||
|
|
||||||
|
For more complex authentication strategies such as GitHub Apps or Basic, we recommend the according authentication library exported by [`@octokit/auth`](https://github.com/octokit/auth.js).
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { createAppAuth } = require("@octokit/auth-app");
|
||||||
|
const auth = createAppAuth({
|
||||||
|
id: process.env.APP_ID,
|
||||||
|
privateKey: process.env.PRIVATE_KEY,
|
||||||
|
installationId: 123
|
||||||
|
});
|
||||||
|
const graphqlWithAuth = graphql.defaults({
|
||||||
|
request: {
|
||||||
|
hook: auth.hook
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const { repository } = await graphqlWithAuth(
|
||||||
|
`{
|
||||||
|
repository(owner: "octokit", name: "graphql.js") {
|
||||||
|
issues(last: 3) {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Variables
|
||||||
|
|
||||||
|
⚠️ Do not use [template literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) in the query strings as they make your code vulnerable to query injection attacks (see [#2](https://github.com/octokit/graphql.js/issues/2)). Use variables instead:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { lastIssues } = await graphql(`query lastIssues($owner: String!, $repo: String!, $num: Int = 3) {
|
||||||
|
repository(owner:$owner, name:$repo) {
|
||||||
|
issues(last:$num) {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`, {
|
||||||
|
owner: 'octokit',
|
||||||
|
repo: 'graphql.js'
|
||||||
|
headers: {
|
||||||
|
authorization: `token secret123`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pass query together with headers and variables
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { graphql } = require('@octokit/graphql')
|
||||||
|
const { lastIssues } = await graphql({
|
||||||
|
query: `query lastIssues($owner: String!, $repo: String!, $num: Int = 3) {
|
||||||
|
repository(owner:$owner, name:$repo) {
|
||||||
|
issues(last:$num) {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`,
|
||||||
|
owner: 'octokit',
|
||||||
|
repo: 'graphql.js'
|
||||||
|
headers: {
|
||||||
|
authorization: `token secret123`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Use with GitHub Enterprise
|
||||||
|
|
||||||
|
```js
|
||||||
|
let { graphql } = require("@octokit/graphql");
|
||||||
|
graphql = graphql.defaults({
|
||||||
|
baseUrl: "https://github-enterprise.acme-inc.com/api",
|
||||||
|
headers: {
|
||||||
|
authorization: `token secret123`
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const { repository } = await graphql(`
|
||||||
|
{
|
||||||
|
repository(owner: "acme-project", name: "acme-repo") {
|
||||||
|
issues(last: 3) {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Use custom `@octokit/request` instance
|
||||||
|
|
||||||
|
```js
|
||||||
|
const { request } = require("@octokit/request");
|
||||||
|
const { withCustomRequest } = require("@octokit/graphql");
|
||||||
|
|
||||||
|
let requestCounter = 0
|
||||||
|
const myRequest = request.defaults({
|
||||||
|
headers: {
|
||||||
|
authentication: 'token secret123'
|
||||||
|
},
|
||||||
|
request: {
|
||||||
|
hook(request, options) {
|
||||||
|
requestCounter++
|
||||||
|
return request(options)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const myGraphql = withCustomRequest(myRequest)
|
||||||
|
await request('/')
|
||||||
|
await myGraphql(`
|
||||||
|
{
|
||||||
|
repository(owner: "acme-project", name: "acme-repo") {
|
||||||
|
issues(last: 3) {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
// requestCounter is now 2
|
||||||
|
```
|
||||||
|
|
||||||
|
## Errors
|
||||||
|
|
||||||
|
In case of a GraphQL error, `error.message` is set to the first error from the response’s `errors` array. All errors can be accessed at `error.errors`. `error.request` has the request options such as query, variables and headers set for easier debugging.
|
||||||
|
|
||||||
|
```js
|
||||||
|
let { graphql } = require("@octokit/graphql");
|
||||||
|
graphqlt = graphql.defaults({
|
||||||
|
headers: {
|
||||||
|
authorization: `token secret123`
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const query = `{
|
||||||
|
viewer {
|
||||||
|
bioHtml
|
||||||
|
}
|
||||||
|
}`;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const result = await graphql(query);
|
||||||
|
} catch (error) {
|
||||||
|
// server responds with
|
||||||
|
// {
|
||||||
|
// "data": null,
|
||||||
|
// "errors": [{
|
||||||
|
// "message": "Field 'bioHtml' doesn't exist on type 'User'",
|
||||||
|
// "locations": [{
|
||||||
|
// "line": 3,
|
||||||
|
// "column": 5
|
||||||
|
// }]
|
||||||
|
// }]
|
||||||
|
// }
|
||||||
|
|
||||||
|
console.log("Request failed:", error.request); // { query, variables: {}, headers: { authorization: 'token secret123' } }
|
||||||
|
console.log(error.message); // Field 'bioHtml' doesn't exist on type 'User'
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Partial responses
|
||||||
|
|
||||||
|
A GraphQL query may respond with partial data accompanied by errors. In this case we will throw an error but the partial data will still be accessible through `error.data`
|
||||||
|
|
||||||
|
```js
|
||||||
|
let { graphql } = require("@octokit/graphql");
|
||||||
|
graphql = graphql.defaults({
|
||||||
|
headers: {
|
||||||
|
authorization: `token secret123`
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const query = `{
|
||||||
|
repository(name: "probot", owner: "probot") {
|
||||||
|
name
|
||||||
|
ref(qualifiedName: "master") {
|
||||||
|
target {
|
||||||
|
... on Commit {
|
||||||
|
history(first: 25, after: "invalid cursor") {
|
||||||
|
nodes {
|
||||||
|
message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const result = await graphql(query);
|
||||||
|
} catch (error) {
|
||||||
|
// server responds with
|
||||||
|
// {
|
||||||
|
// "data": {
|
||||||
|
// "repository": {
|
||||||
|
// "name": "probot",
|
||||||
|
// "ref": null
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// "errors": [
|
||||||
|
// {
|
||||||
|
// "type": "INVALID_CURSOR_ARGUMENTS",
|
||||||
|
// "path": [
|
||||||
|
// "repository",
|
||||||
|
// "ref",
|
||||||
|
// "target",
|
||||||
|
// "history"
|
||||||
|
// ],
|
||||||
|
// "locations": [
|
||||||
|
// {
|
||||||
|
// "line": 7,
|
||||||
|
// "column": 11
|
||||||
|
// }
|
||||||
|
// ],
|
||||||
|
// "message": "`invalid cursor` does not appear to be a valid cursor."
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
|
||||||
|
console.log("Request failed:", error.request); // { query, variables: {}, headers: { authorization: 'token secret123' } }
|
||||||
|
console.log(error.message); // `invalid cursor` does not appear to be a valid cursor.
|
||||||
|
console.log(error.data); // { repository: { name: 'probot', ref: null } }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Writing tests
|
||||||
|
|
||||||
|
You can pass a replacement for [the built-in fetch implementation](https://github.com/bitinn/node-fetch) as `request.fetch` option. For example, using [fetch-mock](http://www.wheresrhys.co.uk/fetch-mock/) works great to write tests
|
||||||
|
|
||||||
|
```js
|
||||||
|
const assert = require("assert");
|
||||||
|
const fetchMock = require("fetch-mock/es5/server");
|
||||||
|
|
||||||
|
const { graphql } = require("@octokit/graphql");
|
||||||
|
|
||||||
|
graphql("{ viewer { login } }", {
|
||||||
|
headers: {
|
||||||
|
authorization: "token secret123"
|
||||||
|
},
|
||||||
|
request: {
|
||||||
|
fetch: fetchMock
|
||||||
|
.sandbox()
|
||||||
|
.post("https://api.github.com/graphql", (url, options) => {
|
||||||
|
assert.strictEqual(options.headers.authorization, "token secret123");
|
||||||
|
assert.strictEqual(
|
||||||
|
options.body,
|
||||||
|
'{"query":"{ viewer { login } }"}',
|
||||||
|
"Sends correct query"
|
||||||
|
);
|
||||||
|
return { data: {} };
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[MIT](LICENSE)
|
||||||
85
node_modules/@octokit/graphql/dist-node/index.js
generated
vendored
Normal file
85
node_modules/@octokit/graphql/dist-node/index.js
generated
vendored
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
Object.defineProperty(exports, '__esModule', { value: true });
|
||||||
|
|
||||||
|
var request = require('@octokit/request');
|
||||||
|
var universalUserAgent = require('universal-user-agent');
|
||||||
|
|
||||||
|
const VERSION = "4.3.1";
|
||||||
|
|
||||||
|
class GraphqlError extends Error {
|
||||||
|
constructor(request, response) {
|
||||||
|
const message = response.data.errors[0].message;
|
||||||
|
super(message);
|
||||||
|
Object.assign(this, response.data);
|
||||||
|
this.name = "GraphqlError";
|
||||||
|
this.request = request; // Maintains proper stack trace (only available on V8)
|
||||||
|
|
||||||
|
/* istanbul ignore next */
|
||||||
|
|
||||||
|
if (Error.captureStackTrace) {
|
||||||
|
Error.captureStackTrace(this, this.constructor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const NON_VARIABLE_OPTIONS = ["method", "baseUrl", "url", "headers", "request", "query"];
|
||||||
|
function graphql(request, query, options) {
|
||||||
|
options = typeof query === "string" ? options = Object.assign({
|
||||||
|
query
|
||||||
|
}, options) : options = query;
|
||||||
|
const requestOptions = Object.keys(options).reduce((result, key) => {
|
||||||
|
if (NON_VARIABLE_OPTIONS.includes(key)) {
|
||||||
|
result[key] = options[key];
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!result.variables) {
|
||||||
|
result.variables = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
result.variables[key] = options[key];
|
||||||
|
return result;
|
||||||
|
}, {});
|
||||||
|
return request(requestOptions).then(response => {
|
||||||
|
if (response.data.errors) {
|
||||||
|
throw new GraphqlError(requestOptions, {
|
||||||
|
data: response.data
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return response.data.data;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function withDefaults(request$1, newDefaults) {
|
||||||
|
const newRequest = request$1.defaults(newDefaults);
|
||||||
|
|
||||||
|
const newApi = (query, options) => {
|
||||||
|
return graphql(newRequest, query, options);
|
||||||
|
};
|
||||||
|
|
||||||
|
return Object.assign(newApi, {
|
||||||
|
defaults: withDefaults.bind(null, newRequest),
|
||||||
|
endpoint: request.request.endpoint
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const graphql$1 = withDefaults(request.request, {
|
||||||
|
headers: {
|
||||||
|
"user-agent": `octokit-graphql.js/${VERSION} ${universalUserAgent.getUserAgent()}`
|
||||||
|
},
|
||||||
|
method: "POST",
|
||||||
|
url: "/graphql"
|
||||||
|
});
|
||||||
|
function withCustomRequest(customRequest) {
|
||||||
|
return withDefaults(customRequest, {
|
||||||
|
method: "POST",
|
||||||
|
url: "/graphql"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.graphql = graphql$1;
|
||||||
|
exports.withCustomRequest = withCustomRequest;
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
1
node_modules/@octokit/graphql/dist-node/index.js.map
generated
vendored
Normal file
1
node_modules/@octokit/graphql/dist-node/index.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
14
node_modules/@octokit/graphql/dist-src/error.js
generated
vendored
Normal file
14
node_modules/@octokit/graphql/dist-src/error.js
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
export class GraphqlError extends Error {
|
||||||
|
constructor(request, response) {
|
||||||
|
const message = response.data.errors[0].message;
|
||||||
|
super(message);
|
||||||
|
Object.assign(this, response.data);
|
||||||
|
this.name = "GraphqlError";
|
||||||
|
this.request = request;
|
||||||
|
// Maintains proper stack trace (only available on V8)
|
||||||
|
/* istanbul ignore next */
|
||||||
|
if (Error.captureStackTrace) {
|
||||||
|
Error.captureStackTrace(this, this.constructor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
34
node_modules/@octokit/graphql/dist-src/graphql.js
generated
vendored
Normal file
34
node_modules/@octokit/graphql/dist-src/graphql.js
generated
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import { GraphqlError } from "./error";
|
||||||
|
const NON_VARIABLE_OPTIONS = [
|
||||||
|
"method",
|
||||||
|
"baseUrl",
|
||||||
|
"url",
|
||||||
|
"headers",
|
||||||
|
"request",
|
||||||
|
"query"
|
||||||
|
];
|
||||||
|
export function graphql(request, query, options) {
|
||||||
|
options =
|
||||||
|
typeof query === "string"
|
||||||
|
? (options = Object.assign({ query }, options))
|
||||||
|
: (options = query);
|
||||||
|
const requestOptions = Object.keys(options).reduce((result, key) => {
|
||||||
|
if (NON_VARIABLE_OPTIONS.includes(key)) {
|
||||||
|
result[key] = options[key];
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
if (!result.variables) {
|
||||||
|
result.variables = {};
|
||||||
|
}
|
||||||
|
result.variables[key] = options[key];
|
||||||
|
return result;
|
||||||
|
}, {});
|
||||||
|
return request(requestOptions).then(response => {
|
||||||
|
if (response.data.errors) {
|
||||||
|
throw new GraphqlError(requestOptions, {
|
||||||
|
data: response.data
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return response.data.data;
|
||||||
|
});
|
||||||
|
}
|
||||||
17
node_modules/@octokit/graphql/dist-src/index.js
generated
vendored
Normal file
17
node_modules/@octokit/graphql/dist-src/index.js
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { request } from "@octokit/request";
|
||||||
|
import { getUserAgent } from "universal-user-agent";
|
||||||
|
import { VERSION } from "./version";
|
||||||
|
import { withDefaults } from "./with-defaults";
|
||||||
|
export const graphql = withDefaults(request, {
|
||||||
|
headers: {
|
||||||
|
"user-agent": `octokit-graphql.js/${VERSION} ${getUserAgent()}`
|
||||||
|
},
|
||||||
|
method: "POST",
|
||||||
|
url: "/graphql"
|
||||||
|
});
|
||||||
|
export function withCustomRequest(customRequest) {
|
||||||
|
return withDefaults(customRequest, {
|
||||||
|
method: "POST",
|
||||||
|
url: "/graphql"
|
||||||
|
});
|
||||||
|
}
|
||||||
0
node_modules/@octokit/graphql/dist-src/types.js
generated
vendored
Normal file
0
node_modules/@octokit/graphql/dist-src/types.js
generated
vendored
Normal file
1
node_modules/@octokit/graphql/dist-src/version.js
generated
vendored
Normal file
1
node_modules/@octokit/graphql/dist-src/version.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export const VERSION = "4.3.1";
|
||||||
12
node_modules/@octokit/graphql/dist-src/with-defaults.js
generated
vendored
Normal file
12
node_modules/@octokit/graphql/dist-src/with-defaults.js
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { request as Request } from "@octokit/request";
|
||||||
|
import { graphql } from "./graphql";
|
||||||
|
export function withDefaults(request, newDefaults) {
|
||||||
|
const newRequest = request.defaults(newDefaults);
|
||||||
|
const newApi = (query, options) => {
|
||||||
|
return graphql(newRequest, query, options);
|
||||||
|
};
|
||||||
|
return Object.assign(newApi, {
|
||||||
|
defaults: withDefaults.bind(null, newRequest),
|
||||||
|
endpoint: Request.endpoint
|
||||||
|
});
|
||||||
|
}
|
||||||
7
node_modules/@octokit/graphql/dist-types/error.d.ts
generated
vendored
Normal file
7
node_modules/@octokit/graphql/dist-types/error.d.ts
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import { EndpointOptions, GraphQlQueryResponse } from "./types";
|
||||||
|
export declare class GraphqlError<T extends GraphQlQueryResponse> extends Error {
|
||||||
|
request: EndpointOptions;
|
||||||
|
constructor(request: EndpointOptions, response: {
|
||||||
|
data: Required<GraphQlQueryResponse>;
|
||||||
|
});
|
||||||
|
}
|
||||||
3
node_modules/@octokit/graphql/dist-types/graphql.d.ts
generated
vendored
Normal file
3
node_modules/@octokit/graphql/dist-types/graphql.d.ts
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import { request as Request } from "@octokit/request";
|
||||||
|
import { RequestParameters, GraphQlQueryResponseData } from "./types";
|
||||||
|
export declare function graphql(request: typeof Request, query: string | RequestParameters, options?: RequestParameters): Promise<GraphQlQueryResponseData>;
|
||||||
3
node_modules/@octokit/graphql/dist-types/index.d.ts
generated
vendored
Normal file
3
node_modules/@octokit/graphql/dist-types/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import { request } from "@octokit/request";
|
||||||
|
export declare const graphql: import("./types").graphql;
|
||||||
|
export declare function withCustomRequest(customRequest: typeof request): import("./types").graphql;
|
||||||
47
node_modules/@octokit/graphql/dist-types/types.d.ts
generated
vendored
Normal file
47
node_modules/@octokit/graphql/dist-types/types.d.ts
generated
vendored
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
import * as OctokitTypes from "@octokit/types";
|
||||||
|
import { graphql } from "./graphql";
|
||||||
|
export declare type EndpointOptions = OctokitTypes.EndpointOptions;
|
||||||
|
export declare type RequestParameters = OctokitTypes.RequestParameters;
|
||||||
|
export declare type Query = string;
|
||||||
|
export interface graphql {
|
||||||
|
/**
|
||||||
|
* Sends a GraphQL query request based on endpoint options
|
||||||
|
* The GraphQL query must be specified in `options`.
|
||||||
|
*
|
||||||
|
* @param {object} endpoint Must set `method` and `url`. Plus URL, query or body parameters, as well as `headers`, `mediaType.{format|previews}`, `request`, or `baseUrl`.
|
||||||
|
*/
|
||||||
|
(options: OctokitTypes.RequestParameters): GraphQlResponse;
|
||||||
|
/**
|
||||||
|
* Sends a GraphQL query request based on endpoint options
|
||||||
|
*
|
||||||
|
* @param {string} query GraphQL query. Example: `'query { viewer { login } }'`.
|
||||||
|
* @param {object} [parameters] URL, query or body parameters, as well as `headers`, `mediaType.{format|previews}`, `request`, or `baseUrl`.
|
||||||
|
*/
|
||||||
|
(query: Query, parameters?: OctokitTypes.RequestParameters): GraphQlResponse;
|
||||||
|
/**
|
||||||
|
* Returns a new `endpoint` with updated route and parameters
|
||||||
|
*/
|
||||||
|
defaults: (newDefaults: OctokitTypes.RequestParameters) => graphql;
|
||||||
|
/**
|
||||||
|
* Octokit endpoint API, see {@link https://github.com/octokit/endpoint.js|@octokit/endpoint}
|
||||||
|
*/
|
||||||
|
endpoint: OctokitTypes.EndpointInterface;
|
||||||
|
}
|
||||||
|
export declare type GraphQlResponse = ReturnType<typeof graphql>;
|
||||||
|
export declare type GraphQlQueryResponseData = {
|
||||||
|
[key: string]: any;
|
||||||
|
} | null;
|
||||||
|
export declare type GraphQlQueryResponse = {
|
||||||
|
data: GraphQlQueryResponseData;
|
||||||
|
errors?: [{
|
||||||
|
message: string;
|
||||||
|
path: [string];
|
||||||
|
extensions: {
|
||||||
|
[key: string]: any;
|
||||||
|
};
|
||||||
|
locations: [{
|
||||||
|
line: number;
|
||||||
|
column: number;
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
};
|
||||||
1
node_modules/@octokit/graphql/dist-types/version.d.ts
generated
vendored
Normal file
1
node_modules/@octokit/graphql/dist-types/version.d.ts
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export declare const VERSION = "4.3.1";
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user