This commit is contained in:
103
node_modules/micro-api-client/README.md
generated
vendored
Normal file
103
node_modules/micro-api-client/README.md
generated
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
# micro-api-client
|
||||
|
||||
[](https://travis-ci.org/netlify/micro-api-client)
|
||||
|
||||
Small library for talking to micro REST APIs (not related to Netlify's main API).
|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
yarn add micro-api-client
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
import API, { getPagination } from 'micro-api-client'
|
||||
|
||||
const api = new API("/some/api/endpoint");
|
||||
api
|
||||
.request("foo")
|
||||
.then(response => console.log(response))
|
||||
.catch(err => console.error(err));
|
||||
```
|
||||
|
||||
### API
|
||||
|
||||
### `api = new API(apiURL, [opts])`
|
||||
|
||||
Create a new `micro-api-client` instance. `apiURL` can be a full or relative URL. Optional `opts` include:
|
||||
|
||||
```js
|
||||
{
|
||||
defaultHeaders: {
|
||||
} // header values to include in every request.
|
||||
}
|
||||
```
|
||||
|
||||
### `api.request(path, [opts])`
|
||||
|
||||
Make a request to the `apiURL` at the given `path`. Optional `opts` are passed to the [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) API:
|
||||
|
||||
```js
|
||||
// Default options
|
||||
{
|
||||
headers: {} // Optional headers object. Overrides defaultHeaders
|
||||
credentials: "same-origin" // set fetch credentials option
|
||||
"Content-Type": "application/json" // set Content-Type fetch option
|
||||
}
|
||||
```
|
||||
|
||||
Returns a promise with the `response`. If the `contentType` is JSON, it will be checked for pagination and return either the parsed JSON object or a paginated JSON object:
|
||||
|
||||
```js
|
||||
// See src/pagination.js
|
||||
{
|
||||
pagination: {
|
||||
last,
|
||||
next,
|
||||
prev,
|
||||
first,
|
||||
current,
|
||||
total
|
||||
},
|
||||
items: json
|
||||
}
|
||||
```
|
||||
|
||||
If an error occurs during the request, the promise may be rejected with an `HTTPError`, `TextHTTPError`, or `JSONHTTPError`.
|
||||
|
||||
### `class HTTPError extends Error`
|
||||
|
||||
Additional error properties from Error
|
||||
|
||||
```js
|
||||
{
|
||||
stack, // stack trace of error
|
||||
status // status code of response
|
||||
}
|
||||
```
|
||||
|
||||
### `class TextHTTPError extends HTTPError`
|
||||
|
||||
Additional error properties from HTTPError
|
||||
|
||||
```js
|
||||
{
|
||||
data // data of text response
|
||||
}
|
||||
```
|
||||
|
||||
### `class JSONHTTPError extends HTTPError`
|
||||
|
||||
Additional error properties from HTTPError
|
||||
|
||||
```js
|
||||
{
|
||||
json // json of a JSON response
|
||||
}
|
||||
```
|
||||
|
||||
### `pagination = getPagination(response)`
|
||||
|
||||
Returns a pagination object that `micro-api-client` uses internally.
|
||||
87
node_modules/micro-api-client/lib/errors.js
generated
vendored
Normal file
87
node_modules/micro-api-client/lib/errors.js
generated
vendored
Normal file
@@ -0,0 +1,87 @@
|
||||
"use strict";
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
||||
|
||||
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
||||
|
||||
function _extendableBuiltin(cls) {
|
||||
function ExtendableBuiltin() {
|
||||
var instance = Reflect.construct(cls, Array.from(arguments));
|
||||
Object.setPrototypeOf(instance, Object.getPrototypeOf(this));
|
||||
return instance;
|
||||
}
|
||||
|
||||
ExtendableBuiltin.prototype = Object.create(cls.prototype, {
|
||||
constructor: {
|
||||
value: cls,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
configurable: true
|
||||
}
|
||||
});
|
||||
|
||||
if (Object.setPrototypeOf) {
|
||||
Object.setPrototypeOf(ExtendableBuiltin, cls);
|
||||
} else {
|
||||
ExtendableBuiltin.__proto__ = cls;
|
||||
}
|
||||
|
||||
return ExtendableBuiltin;
|
||||
}
|
||||
|
||||
var HTTPError = function (_extendableBuiltin2) {
|
||||
_inherits(HTTPError, _extendableBuiltin2);
|
||||
|
||||
function HTTPError(response) {
|
||||
_classCallCheck(this, HTTPError);
|
||||
|
||||
var _this = _possibleConstructorReturn(this, (HTTPError.__proto__ || Object.getPrototypeOf(HTTPError)).call(this, response.statusText));
|
||||
|
||||
_this.name = _this.constructor.name;
|
||||
if (typeof Error.captureStackTrace === "function") {
|
||||
Error.captureStackTrace(_this, _this.constructor);
|
||||
} else {
|
||||
_this.stack = new Error(response.statusText).stack;
|
||||
}
|
||||
_this.status = response.status;
|
||||
return _this;
|
||||
}
|
||||
|
||||
return HTTPError;
|
||||
}(_extendableBuiltin(Error));
|
||||
|
||||
var TextHTTPError = function (_HTTPError) {
|
||||
_inherits(TextHTTPError, _HTTPError);
|
||||
|
||||
function TextHTTPError(response, data) {
|
||||
_classCallCheck(this, TextHTTPError);
|
||||
|
||||
var _this2 = _possibleConstructorReturn(this, (TextHTTPError.__proto__ || Object.getPrototypeOf(TextHTTPError)).call(this, response));
|
||||
|
||||
_this2.data = data;
|
||||
return _this2;
|
||||
}
|
||||
|
||||
return TextHTTPError;
|
||||
}(HTTPError);
|
||||
|
||||
var JSONHTTPError = function (_HTTPError2) {
|
||||
_inherits(JSONHTTPError, _HTTPError2);
|
||||
|
||||
function JSONHTTPError(response, json) {
|
||||
_classCallCheck(this, JSONHTTPError);
|
||||
|
||||
var _this3 = _possibleConstructorReturn(this, (JSONHTTPError.__proto__ || Object.getPrototypeOf(JSONHTTPError)).call(this, response));
|
||||
|
||||
_this3.json = json;
|
||||
return _this3;
|
||||
}
|
||||
|
||||
return JSONHTTPError;
|
||||
}(HTTPError);
|
||||
|
||||
module.exports.HTTPError = HTTPError;
|
||||
module.exports.TextHTTPError = TextHTTPError;
|
||||
module.exports.JSONHTTPError = JSONHTTPError;
|
||||
171
node_modules/micro-api-client/lib/index.js
generated
vendored
Normal file
171
node_modules/micro-api-client/lib/index.js
generated
vendored
Normal file
@@ -0,0 +1,171 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.JSONHTTPError = exports.TextHTTPError = exports.HTTPError = exports.getPagination = undefined;
|
||||
|
||||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
||||
|
||||
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
||||
|
||||
var _pagination = require("./pagination");
|
||||
|
||||
Object.defineProperty(exports, "getPagination", {
|
||||
enumerable: true,
|
||||
get: function get() {
|
||||
return _pagination.getPagination;
|
||||
}
|
||||
});
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
||||
|
||||
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
||||
|
||||
function _extendableBuiltin(cls) {
|
||||
function ExtendableBuiltin() {
|
||||
var instance = Reflect.construct(cls, Array.from(arguments));
|
||||
Object.setPrototypeOf(instance, Object.getPrototypeOf(this));
|
||||
return instance;
|
||||
}
|
||||
|
||||
ExtendableBuiltin.prototype = Object.create(cls.prototype, {
|
||||
constructor: {
|
||||
value: cls,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
configurable: true
|
||||
}
|
||||
});
|
||||
|
||||
if (Object.setPrototypeOf) {
|
||||
Object.setPrototypeOf(ExtendableBuiltin, cls);
|
||||
} else {
|
||||
ExtendableBuiltin.__proto__ = cls;
|
||||
}
|
||||
|
||||
return ExtendableBuiltin;
|
||||
}
|
||||
|
||||
var HTTPError = exports.HTTPError = function (_extendableBuiltin2) {
|
||||
_inherits(HTTPError, _extendableBuiltin2);
|
||||
|
||||
function HTTPError(response) {
|
||||
_classCallCheck(this, HTTPError);
|
||||
|
||||
var _this = _possibleConstructorReturn(this, (HTTPError.__proto__ || Object.getPrototypeOf(HTTPError)).call(this, response.statusText));
|
||||
|
||||
_this.name = _this.constructor.name;
|
||||
if (typeof Error.captureStackTrace === "function") {
|
||||
Error.captureStackTrace(_this, _this.constructor);
|
||||
} else {
|
||||
_this.stack = new Error(response.statusText).stack;
|
||||
}
|
||||
_this.status = response.status;
|
||||
return _this;
|
||||
}
|
||||
|
||||
return HTTPError;
|
||||
}(_extendableBuiltin(Error));
|
||||
|
||||
var TextHTTPError = exports.TextHTTPError = function (_HTTPError) {
|
||||
_inherits(TextHTTPError, _HTTPError);
|
||||
|
||||
function TextHTTPError(response, data) {
|
||||
_classCallCheck(this, TextHTTPError);
|
||||
|
||||
var _this2 = _possibleConstructorReturn(this, (TextHTTPError.__proto__ || Object.getPrototypeOf(TextHTTPError)).call(this, response));
|
||||
|
||||
_this2.data = data;
|
||||
return _this2;
|
||||
}
|
||||
|
||||
return TextHTTPError;
|
||||
}(HTTPError);
|
||||
|
||||
var JSONHTTPError = exports.JSONHTTPError = function (_HTTPError2) {
|
||||
_inherits(JSONHTTPError, _HTTPError2);
|
||||
|
||||
function JSONHTTPError(response, json) {
|
||||
_classCallCheck(this, JSONHTTPError);
|
||||
|
||||
var _this3 = _possibleConstructorReturn(this, (JSONHTTPError.__proto__ || Object.getPrototypeOf(JSONHTTPError)).call(this, response));
|
||||
|
||||
_this3.json = json;
|
||||
return _this3;
|
||||
}
|
||||
|
||||
return JSONHTTPError;
|
||||
}(HTTPError);
|
||||
|
||||
var API = function () {
|
||||
function API() {
|
||||
var apiURL = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
||||
var options = arguments[1];
|
||||
|
||||
_classCallCheck(this, API);
|
||||
|
||||
this.apiURL = apiURL;
|
||||
if (this.apiURL.match(/\/[^\/]?/)) {
|
||||
// eslint-disable-line no-useless-escape
|
||||
this._sameOrigin = true;
|
||||
}
|
||||
this.defaultHeaders = options && options.defaultHeaders || {};
|
||||
}
|
||||
|
||||
_createClass(API, [{
|
||||
key: "headers",
|
||||
value: function headers() {
|
||||
var _headers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||||
|
||||
return _extends({}, this.defaultHeaders, {
|
||||
"Content-Type": "application/json"
|
||||
}, _headers);
|
||||
}
|
||||
}, {
|
||||
key: "parseJsonResponse",
|
||||
value: function parseJsonResponse(response) {
|
||||
return response.json().then(function (json) {
|
||||
if (!response.ok) {
|
||||
return Promise.reject(new JSONHTTPError(response, json));
|
||||
}
|
||||
|
||||
var pagination = (0, _pagination.getPagination)(response);
|
||||
return pagination ? { pagination: pagination, items: json } : json;
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: "request",
|
||||
value: function request(path) {
|
||||
var _this4 = this;
|
||||
|
||||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||||
|
||||
var headers = this.headers(options.headers || {});
|
||||
if (this._sameOrigin) {
|
||||
options.credentials = options.credentials || "same-origin";
|
||||
}
|
||||
return fetch(this.apiURL + path, _extends({}, options, { headers: headers })).then(function (response) {
|
||||
var contentType = response.headers.get("Content-Type");
|
||||
if (contentType && contentType.match(/json/)) {
|
||||
return _this4.parseJsonResponse(response);
|
||||
}
|
||||
|
||||
if (!response.ok) {
|
||||
return response.text().then(function (data) {
|
||||
return Promise.reject(new TextHTTPError(response, data));
|
||||
});
|
||||
}
|
||||
return response.text().then(function (data) {
|
||||
data;
|
||||
});
|
||||
});
|
||||
}
|
||||
}]);
|
||||
|
||||
return API;
|
||||
}();
|
||||
|
||||
exports.default = API;
|
||||
46
node_modules/micro-api-client/lib/pagination.js
generated
vendored
Normal file
46
node_modules/micro-api-client/lib/pagination.js
generated
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
|
||||
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
|
||||
|
||||
exports.getPagination = getPagination;
|
||||
function getPagination(response) {
|
||||
var links = response.headers.get("Link");
|
||||
var pagination = {};
|
||||
//var link, url, rel, m, page;
|
||||
if (links == null) {
|
||||
return null;
|
||||
}
|
||||
links = links.split(",");
|
||||
var total = response.headers.get("X-Total-Count");
|
||||
|
||||
for (var i = 0, len = links.length; i < len; i++) {
|
||||
var link = links[i].replace(/(^\s*|\s*$)/, "");
|
||||
|
||||
var _link$split = link.split(";"),
|
||||
_link$split2 = _slicedToArray(_link$split, 2),
|
||||
url = _link$split2[0],
|
||||
rel = _link$split2[1];
|
||||
|
||||
var m = url.match(/page=(\d+)/);
|
||||
var page = m && parseInt(m[1], 10);
|
||||
if (rel.match(/last/)) {
|
||||
pagination.last = page;
|
||||
} else if (rel.match(/next/)) {
|
||||
pagination.next = page;
|
||||
} else if (rel.match(/prev/)) {
|
||||
pagination.prev = page;
|
||||
} else if (rel.match(/first/)) {
|
||||
pagination.first = page;
|
||||
}
|
||||
}
|
||||
|
||||
pagination.last = Math.max(pagination.last || 0, pagination.prev && pagination.prev + 1 || 0);
|
||||
pagination.current = pagination.next ? pagination.next - 1 : pagination.last || 1;
|
||||
pagination.total = total ? parseInt(total, 10) : null;
|
||||
|
||||
return pagination;
|
||||
}
|
||||
42
node_modules/micro-api-client/package.json
generated
vendored
Normal file
42
node_modules/micro-api-client/package.json
generated
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"name": "micro-api-client",
|
||||
"description": "Micro REST API client",
|
||||
"version": "3.3.0",
|
||||
"author": "Mathias Biilmann Christensen",
|
||||
"bugs": "https://github.com/netlify/micro-api-client/issues",
|
||||
"devDependencies": {
|
||||
"babel-cli": "^6.8.0",
|
||||
"babel-eslint": "^8.2.1",
|
||||
"babel-plugin-syntax-object-rest-spread": "^6.8.0",
|
||||
"babel-plugin-transform-builtin-extend": "^1.1.2",
|
||||
"babel-plugin-transform-object-rest-spread": "^6.8.0",
|
||||
"babel-preset-env": "^1.6.1",
|
||||
"eslint": "^4.15.0",
|
||||
"eslint-config-prettier": "^2.3.0",
|
||||
"eslint-plugin-import": "^2.8.0",
|
||||
"eslint-plugin-prettier": "^2.1.2",
|
||||
"prettier": "^1.10.1"
|
||||
},
|
||||
"files": [
|
||||
"lib"
|
||||
],
|
||||
"homepage": "https://github.com/netlify/micro-api-client",
|
||||
"keywords": [
|
||||
"api",
|
||||
"fetch",
|
||||
"netlify"
|
||||
],
|
||||
"license": "ISC",
|
||||
"main": "lib/index.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/netlify/micro-api-client.git"
|
||||
},
|
||||
"scripts": {
|
||||
"compile": "babel src -d lib",
|
||||
"format": "eslint . --fix && prettier --write 'src/**/*.js'",
|
||||
"prepublish": "npm run compile",
|
||||
"prettier-preview": "prettier --list-different 'src/**/*.js'",
|
||||
"test": "eslint ."
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user