adds integrations with bookish-server, the books API and the google books API, adds functionality for library, searching for books, and displaying renters registered in the system
This commit is contained in:
@@ -88,6 +88,7 @@ func (s *Server) UpdateMap() error {
|
||||
func (s *Server) BuildRoutes() http.Handler {
|
||||
r := chi.NewRouter()
|
||||
|
||||
r.Use(cors)
|
||||
r.Use(middleware.RequestID)
|
||||
r.Use(middleware.RealIP)
|
||||
r.Use(middleware.Logger)
|
||||
|
||||
@@ -13,6 +13,23 @@ import (
|
||||
"github.com/go-chi/chi"
|
||||
)
|
||||
|
||||
// cors is a middlware that adds CORS headers to responses.
|
||||
func cors(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS")
|
||||
w.Header().Set("Access-Control-Allow_Headers", "Origin, Content-Type, Accept, Authorization")
|
||||
w.Header().Set("Access-Control-Allow-Credentials", "true")
|
||||
w.Header().Set("Access-Control-Max-Age", "600")
|
||||
|
||||
if r.Method == "OPTIONS" {
|
||||
return
|
||||
}
|
||||
|
||||
next.ServeHTTP(w, r)
|
||||
})
|
||||
}
|
||||
|
||||
// renterCtx is a convenience handler to fetch the renter with the provided renterId URLParam.
|
||||
func (s *Server) renterCtx(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
Generated
+120
@@ -1641,6 +1641,14 @@
|
||||
"resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-7.2.1.tgz",
|
||||
"integrity": "sha512-oZ0Ib5I4Z2pUEcoo95cT1cr6slco9WY7yiPpG+RGNkj8YcYgJnM7pXmYmorNOReh8MIGcKSqXyeGjxnr8YiZbA=="
|
||||
},
|
||||
"@types/axios": {
|
||||
"version": "0.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/axios/-/axios-0.14.0.tgz",
|
||||
"integrity": "sha1-7CMA++fX3d1+udOr+HmZlkyvzkY=",
|
||||
"requires": {
|
||||
"axios": "*"
|
||||
}
|
||||
},
|
||||
"@types/babel__core": {
|
||||
"version": "7.1.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz",
|
||||
@@ -1777,6 +1785,14 @@
|
||||
"resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
|
||||
"integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug=="
|
||||
},
|
||||
"@types/ramda": {
|
||||
"version": "0.27.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.27.6.tgz",
|
||||
"integrity": "sha512-ephagb0ZIAJSoS5I/qMS4Mqo1b/Nd50pWM+o1QO/dz8NF//GsCGPTLDVRqgXlVncy74KShfHzE5rPZXTeek4PA==",
|
||||
"requires": {
|
||||
"ts-toolbelt": "^6.3.3"
|
||||
}
|
||||
},
|
||||
"@types/react": {
|
||||
"version": "16.9.35",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.35.tgz",
|
||||
@@ -1802,6 +1818,17 @@
|
||||
"@types/react": "*"
|
||||
}
|
||||
},
|
||||
"@types/react-redux": {
|
||||
"version": "7.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.9.tgz",
|
||||
"integrity": "sha512-mpC0jqxhP4mhmOl3P4ipRsgTgbNofMRXJb08Ms6gekViLj61v1hOZEKWDCyWsdONr6EjEA6ZHXC446wdywDe0w==",
|
||||
"requires": {
|
||||
"@types/hoist-non-react-statics": "^3.3.0",
|
||||
"@types/react": "*",
|
||||
"hoist-non-react-statics": "^3.3.0",
|
||||
"redux": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"@types/react-router": {
|
||||
"version": "5.1.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.7.tgz",
|
||||
@@ -1821,6 +1848,22 @@
|
||||
"@types/react-router": "*"
|
||||
}
|
||||
},
|
||||
"@types/redux-devtools-extension": {
|
||||
"version": "2.13.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/redux-devtools-extension/-/redux-devtools-extension-2.13.2.tgz",
|
||||
"integrity": "sha1-suCajBY7Kw9QcualrEFHQADfIRE=",
|
||||
"requires": {
|
||||
"redux-devtools-extension": "*"
|
||||
}
|
||||
},
|
||||
"@types/redux-thunk": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/redux-thunk/-/redux-thunk-2.1.0.tgz",
|
||||
"integrity": "sha1-vCtulylhgxr7gqm/TwZybjUflBY=",
|
||||
"requires": {
|
||||
"redux-thunk": "*"
|
||||
}
|
||||
},
|
||||
"@types/stack-utils": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
|
||||
@@ -2544,6 +2587,37 @@
|
||||
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz",
|
||||
"integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA=="
|
||||
},
|
||||
"axios": {
|
||||
"version": "0.19.2",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
|
||||
"integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
|
||||
"requires": {
|
||||
"follow-redirects": "1.5.10"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||
"requires": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.5.10",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
|
||||
"integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
|
||||
"requires": {
|
||||
"debug": "=3.1.0"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||
}
|
||||
}
|
||||
},
|
||||
"axobject-query": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.1.2.tgz",
|
||||
@@ -10481,6 +10555,11 @@
|
||||
"performance-now": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"ramda": {
|
||||
"version": "0.27.0",
|
||||
"resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.0.tgz",
|
||||
"integrity": "sha512-pVzZdDpWwWqEVVLshWUHjNwuVP7SfcmPraYuqocJp1yo2U1R7P+5QAfDhdItkuoGqIBnBYrtPp7rEPqDn9HlZA=="
|
||||
},
|
||||
"randombytes": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
||||
@@ -10817,6 +10896,18 @@
|
||||
"warning": "^4.0.2"
|
||||
}
|
||||
},
|
||||
"react-redux": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.0.tgz",
|
||||
"integrity": "sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.5.5",
|
||||
"hoist-non-react-statics": "^3.3.0",
|
||||
"loose-envify": "^1.4.0",
|
||||
"prop-types": "^15.7.2",
|
||||
"react-is": "^16.9.0"
|
||||
}
|
||||
},
|
||||
"react-router": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz",
|
||||
@@ -11025,6 +11116,25 @@
|
||||
"strip-indent": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"redux": {
|
||||
"version": "4.0.5",
|
||||
"resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz",
|
||||
"integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==",
|
||||
"requires": {
|
||||
"loose-envify": "^1.4.0",
|
||||
"symbol-observable": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"redux-devtools-extension": {
|
||||
"version": "2.13.8",
|
||||
"resolved": "https://registry.npmjs.org/redux-devtools-extension/-/redux-devtools-extension-2.13.8.tgz",
|
||||
"integrity": "sha512-8qlpooP2QqPtZHQZRhx3x3OP5skEV1py/zUdMY28WNAocbafxdG2tRD1MWE7sp8obGMNYuLWanhhQ7EQvT1FBg=="
|
||||
},
|
||||
"redux-thunk": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz",
|
||||
"integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw=="
|
||||
},
|
||||
"regenerate": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
|
||||
@@ -12526,6 +12636,11 @@
|
||||
"util.promisify": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"symbol-observable": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
|
||||
"integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
|
||||
},
|
||||
"symbol-tree": {
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
||||
@@ -12865,6 +12980,11 @@
|
||||
"resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz",
|
||||
"integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ=="
|
||||
},
|
||||
"ts-toolbelt": {
|
||||
"version": "6.9.4",
|
||||
"resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.9.4.tgz",
|
||||
"integrity": "sha512-muRZZqfOTOVvLk5cdnp7YWm6xX+kD/WL2cS/L4zximBRcbQSuMoTbQQ2ZZBVMs1gB0EZw1qThP+HrIQB35OmEw=="
|
||||
},
|
||||
"tslib": {
|
||||
"version": "1.13.0",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
|
||||
|
||||
@@ -9,18 +9,28 @@
|
||||
"@testing-library/jest-dom": "^4.2.4",
|
||||
"@testing-library/react": "^9.5.0",
|
||||
"@testing-library/user-event": "^7.2.1",
|
||||
"@types/axios": "^0.14.0",
|
||||
"@types/jest": "^24.9.1",
|
||||
"@types/node": "^12.12.42",
|
||||
"@types/ramda": "^0.27.6",
|
||||
"@types/react": "^16.9.35",
|
||||
"@types/react-dom": "^16.9.8",
|
||||
"@types/react-redux": "^7.1.9",
|
||||
"@types/react-router": "^5.1.7",
|
||||
"@types/react-router-dom": "^5.1.5",
|
||||
"@types/redux-devtools-extension": "^2.13.2",
|
||||
"@types/redux-thunk": "^2.1.0",
|
||||
"@types/styled-components": "^5.1.0",
|
||||
"axios": "^0.19.2",
|
||||
"ramda": "^0.27.0",
|
||||
"react": "^16.13.1",
|
||||
"react-dom": "^16.13.1",
|
||||
"react-redux": "^7.2.0",
|
||||
"react-router": "^5.2.0",
|
||||
"react-router-dom": "^5.2.0",
|
||||
"react-scripts": "3.4.1",
|
||||
"redux-devtools-extension": "^2.13.8",
|
||||
"redux-thunk": "^2.3.0",
|
||||
"semantic-ui-react": "^0.88.2",
|
||||
"styled-components": "^5.1.1",
|
||||
"typescript": "^3.7.5"
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
import { actionTypes } from '../constants/books/action_types';
|
||||
import booksApi from '../api/booksAPI';
|
||||
import googleBooksApi from '../api/googleBooks';
|
||||
import bookishApi from '../api/bookish';
|
||||
|
||||
import { Dispatch } from 'redux';
|
||||
|
||||
export function fetchBooks() {
|
||||
return (dispatch: Dispatch) => {
|
||||
dispatch({ type: actionTypes.FETCH_BOOKS.request });
|
||||
|
||||
booksApi.get('/books')
|
||||
.then(res => dispatch({
|
||||
type: actionTypes.FETCH_BOOKS.success,
|
||||
data: res.data
|
||||
}))
|
||||
.catch(err => dispatch({
|
||||
type: actionTypes.FETCH_BOOKS.failure,
|
||||
err: err.message
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
export function fetchBookCover(title: string, isbn: string) {
|
||||
return (dispatch: Dispatch) => {
|
||||
dispatch({ type: actionTypes.FETCH_COVER_IMAGE.request });
|
||||
|
||||
googleBooksApi.get(`/volumes?q=isbn:${isbn}`)
|
||||
.then(res => {
|
||||
if (res.data.totalItems === 0 ||
|
||||
res.data.items[0].volumeInfo.imageLinks === undefined) {
|
||||
return dispatch({
|
||||
type: actionTypes.FETCH_COVER_IMAGE.failure,
|
||||
err: "no image"
|
||||
})
|
||||
}
|
||||
|
||||
dispatch({
|
||||
type: actionTypes.FETCH_COVER_IMAGE.success,
|
||||
data: { title: title, imageLink: res.data.items[0].volumeInfo.imageLinks.thumbnail }
|
||||
})
|
||||
})
|
||||
.catch(err => {
|
||||
dispatch({
|
||||
type: actionTypes.FETCH_COVER_IMAGE.failure,
|
||||
err: err.message
|
||||
})})
|
||||
}
|
||||
}
|
||||
|
||||
export function checkoutBook(title: string, renterId: number) {
|
||||
return (dispatch: Dispatch) => {
|
||||
dispatch({ type: actionTypes.CHECKOUT_BOOK.request });
|
||||
|
||||
bookishApi.post(`/renters/${renterId}/books/checkout`, { title })
|
||||
.then(() => {
|
||||
dispatch({ type: actionTypes.CHECKOUT_BOOK.success });
|
||||
})
|
||||
.catch(err => {
|
||||
dispatch({
|
||||
type: actionTypes.CHECKOUT_BOOK.failure,
|
||||
err: err.message
|
||||
})})
|
||||
}
|
||||
}
|
||||
|
||||
export function returnBook(title: string, renterId: number) {
|
||||
return (dispatch: Dispatch) => {
|
||||
dispatch({ type: actionTypes.RETURN_BOOK.request });
|
||||
|
||||
bookishApi.post(`/renters/${renterId}/books/return`, { title })
|
||||
.then(() => {
|
||||
dispatch({ type: actionTypes.RETURN_BOOK.success });
|
||||
})
|
||||
.catch(err => {
|
||||
dispatch({
|
||||
type: actionTypes.RETURN_BOOK.failure,
|
||||
err: err.message
|
||||
})})
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
import { actionTypes } from '../constants/renters/action_types';
|
||||
import bookishApi from '../api/bookish';
|
||||
|
||||
import { Dispatch } from 'redux';
|
||||
|
||||
export function fetchRenters() {
|
||||
return (dispatch: Dispatch) => {
|
||||
dispatch({ type: actionTypes.FETCH_RENTERS.request });
|
||||
|
||||
bookishApi.get('/renters')
|
||||
.then(res => {
|
||||
console.log(res)
|
||||
dispatch({
|
||||
type: actionTypes.FETCH_RENTERS.success,
|
||||
data: res.data
|
||||
})})
|
||||
.catch(err => {
|
||||
dispatch({
|
||||
type: actionTypes.FETCH_RENTERS.failure,
|
||||
err: err.message
|
||||
})})
|
||||
}
|
||||
}
|
||||
|
||||
export function registerRenter(name: string, address: string, email: string, phone: string) {
|
||||
return (dispatch: Dispatch) => {
|
||||
dispatch({ type: actionTypes.REGISTER_RENTER.request });
|
||||
|
||||
bookishApi.post('/renters', {name, address, email, phoneNumber: phone})
|
||||
.then(res => dispatch({
|
||||
type: actionTypes.REGISTER_RENTER.success,
|
||||
data: res.data
|
||||
}))
|
||||
.catch(err => dispatch({
|
||||
type: actionTypes.REGISTER_RENTER.failure,
|
||||
err: err.message
|
||||
}))
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
import axios from 'axios';
|
||||
|
||||
export default axios.create({
|
||||
baseURL: 'http://localhost:3001/api/v1'
|
||||
})
|
||||
@@ -0,0 +1,5 @@
|
||||
import axios from 'axios';
|
||||
|
||||
export default axios.create({
|
||||
baseURL: 'https://servicepros-test-api.herokuapp.com/api/v1'
|
||||
});
|
||||
@@ -0,0 +1,5 @@
|
||||
import axios from 'axios';
|
||||
|
||||
export default axios.create({
|
||||
baseURL: 'https://www.googleapis.com/books/v1'
|
||||
})
|
||||
@@ -0,0 +1,7 @@
|
||||
export function generateActionType(prefix: string) {
|
||||
return {
|
||||
request: `${prefix}_REQUEST`,
|
||||
success: `${prefix}_SUCCESS`,
|
||||
failure: `${prefix}_FAILURE`
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import { generateActionType } from '../actionTypeFactory';
|
||||
|
||||
const FETCH_BOOKS = generateActionType('FETCH_BOOKS');
|
||||
const FETCH_COVER_IMAGE = generateActionType('FETCH_COVER_IMAGE');
|
||||
const SET_FILTER = 'SET_FILTER';
|
||||
const ADD_TO_CART = 'ADD_TO_CART';
|
||||
const CHECKOUT_BOOK = generateActionType('CHECKOUT_BOOK');
|
||||
const RETURN_BOOK = generateActionType('RETURN_BOOK');
|
||||
|
||||
export const actionTypes = {
|
||||
FETCH_BOOKS,
|
||||
FETCH_COVER_IMAGE,
|
||||
SET_FILTER,
|
||||
ADD_TO_CART,
|
||||
CHECKOUT_BOOK,
|
||||
RETURN_BOOK
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import { generateActionType } from '../actionTypeFactory';
|
||||
|
||||
const FETCH_RENTERS = generateActionType('FETCH_RENTERS');
|
||||
const REGISTER_RENTER = generateActionType('REGISTER_RENTERS');
|
||||
|
||||
export const actionTypes = {
|
||||
FETCH_RENTERS,
|
||||
REGISTER_RENTER
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
import React from 'react';
|
||||
import { useSelector, RootStateOrAny } from 'react-redux';
|
||||
import styled from 'styled-components';
|
||||
|
||||
const BookCoverCardContainer = styled.div`
|
||||
background-color: #fff;
|
||||
display: flex;
|
||||
border: 0.1px solid #f0f0f0;
|
||||
box-shadow: 10px 5px 15px rgba(175,175,175,50);
|
||||
height: 135px;
|
||||
max-width: 200px;
|
||||
margin: 10px 0;
|
||||
`
|
||||
|
||||
const EmptyCart = styled.div`
|
||||
display: inline-block;
|
||||
margin: auto auto;
|
||||
font-family: 'Helvetica';
|
||||
font-size: 1.5rem;
|
||||
color: #13334A;
|
||||
`
|
||||
|
||||
const CoverImage = styled.img`
|
||||
height: 100px;
|
||||
object-fit: contain;
|
||||
margin: auto 15px;
|
||||
`
|
||||
|
||||
const BookCoverCard: React.FC = () => {
|
||||
const cartItems = useSelector((state: RootStateOrAny) => state.books.cart)
|
||||
const images = useSelector((state: RootStateOrAny) => state.books.images)
|
||||
|
||||
console.log(cartItems)
|
||||
|
||||
return (
|
||||
<BookCoverCardContainer>
|
||||
{cartItems.length === 0 && (<EmptyCart>Nothing here yet!</EmptyCart>)}
|
||||
{cartItems && cartItems.map(cartItem => (
|
||||
<CoverImage
|
||||
src={images[cartItem] || 'https://college.indiana.edu/images/publications/book-cover-placeholder.jpg'} />
|
||||
))}
|
||||
</BookCoverCardContainer>
|
||||
)
|
||||
}
|
||||
|
||||
export default BookCoverCard;
|
||||
@@ -0,0 +1,13 @@
|
||||
import React from 'react';
|
||||
// import styled from 'styled-components';
|
||||
|
||||
import Panel from '../../UIKit/Panel/Panel';
|
||||
import BookCoverCard from './BookCoverCard/BookCoverCard';
|
||||
|
||||
const Cart: React.FC = () => (
|
||||
<Panel>
|
||||
<BookCoverCard />
|
||||
</Panel>
|
||||
)
|
||||
|
||||
export default Cart;
|
||||
@@ -4,6 +4,7 @@ import { Route } from 'react-router';
|
||||
|
||||
import Header from './Header/Header';
|
||||
import Library from './Library/Library';
|
||||
import Cart from './Cart/Cart';
|
||||
import Renters from './Renters/Renters';
|
||||
|
||||
const ContentContainer = styled.div`
|
||||
@@ -18,6 +19,8 @@ const Content: React.FC = () => (
|
||||
<Route path="/library" component={Library} />
|
||||
<Route path="/renters" component={Renters} />
|
||||
<Route path="/return" component={Renters} />
|
||||
<Route path="/checkout" component={Cart} />
|
||||
<Route path="/checkout" component={Renters} />
|
||||
</ContentContainer>
|
||||
)
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ const ButtonBayContainer = styled.div`
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-left: 7.5px;
|
||||
margin-left: 35px;
|
||||
width: 320px;
|
||||
height: 100%;
|
||||
`
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
import React from 'react';
|
||||
import styled from 'styled-components';
|
||||
|
||||
import { useDispatch } from 'react-redux';
|
||||
import { actionTypes } from '../../../../constants/books/action_types';
|
||||
|
||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||
import { faSearch } from '@fortawesome/free-solid-svg-icons';
|
||||
|
||||
const SearchContainer = styled.div`
|
||||
width: 250px;
|
||||
width: 350px;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -21,22 +24,30 @@ const StyledInput = styled.input`
|
||||
color: #13334A;
|
||||
font-size: 1.25rem;
|
||||
outline: none;
|
||||
padding-left: 20px;
|
||||
padding: 0 40px 0 20px;
|
||||
box-shadow: 10px 5px 15px rgba(0,0,0,50)
|
||||
`
|
||||
|
||||
const StyledIcon = styled(FontAwesomeIcon)`
|
||||
color: #D97925;
|
||||
position: absolute;
|
||||
right: 25px;
|
||||
right: 50px;
|
||||
font-size: 20px;
|
||||
`
|
||||
|
||||
const Search: React.FC = () => (
|
||||
const Search: React.FC = () => {
|
||||
const dispatch = useDispatch();
|
||||
|
||||
return (
|
||||
<SearchContainer>
|
||||
<StyledInput />
|
||||
<StyledInput
|
||||
onChange={(e: React.FormEvent<HTMLInputElement>) => {
|
||||
dispatch({ type: actionTypes.SET_FILTER, data: e.currentTarget.value });
|
||||
}}
|
||||
/>
|
||||
<StyledIcon icon={faSearch} />
|
||||
</SearchContainer>
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
export default Search;
|
||||
@@ -1,8 +1,12 @@
|
||||
import React from 'react';
|
||||
import React, { useEffect } from 'react';
|
||||
import { useSelector, useDispatch, RootStateOrAny } from 'react-redux';
|
||||
import styled from 'styled-components';
|
||||
|
||||
import { fetchBookCover } from '../../../../actions/books';
|
||||
|
||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||
import { faCartPlus } from '@fortawesome/free-solid-svg-icons';
|
||||
import { actionTypes } from '../../../../constants/books/action_types';
|
||||
|
||||
const BookContainer = styled.div`
|
||||
display: flex;
|
||||
@@ -12,8 +16,8 @@ const BookContainer = styled.div`
|
||||
background-color: #fff;
|
||||
border: 0.1px solid #8C8C8C;
|
||||
box-shadow: 10px 5px 15px rgba(0,0,0,50);
|
||||
width: 200px;
|
||||
height: 350px;
|
||||
width: 175px;
|
||||
height: 275px;
|
||||
`
|
||||
|
||||
const IconContainer = styled.div`
|
||||
@@ -26,12 +30,13 @@ const StyledIcon = styled(FontAwesomeIcon)`
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
transform: translate(220px, -15px);
|
||||
transform: translate(195px, -15px);
|
||||
font-size: 38px;
|
||||
cursor: pointer;
|
||||
`
|
||||
|
||||
const CoverImage = styled.img`
|
||||
max-width: 90%;
|
||||
max-height: 75%;
|
||||
width: auto;
|
||||
height: auto;
|
||||
object-fit: contain;
|
||||
@@ -54,20 +59,46 @@ const Author = styled.div`
|
||||
type Props = {
|
||||
title: string;
|
||||
author: string;
|
||||
imageLink: string;
|
||||
isbn: string;
|
||||
}
|
||||
|
||||
const Book: React.FC<Props> = ({ title, author, imageLink }) => (
|
||||
const Book: React.FC<Props> = ({ title, author, isbn }) => {
|
||||
const imageLink = useSelector((state: RootStateOrAny) => state.books.images[title])
|
||||
const cart = useSelector((state: RootStateOrAny) => state.books.cart)
|
||||
const dispatch = useDispatch();
|
||||
|
||||
useEffect(() => {
|
||||
if (imageLink === undefined) {
|
||||
dispatch(fetchBookCover(title, isbn))
|
||||
}
|
||||
}, []);
|
||||
|
||||
const handleAddToCart = () => {
|
||||
if (cart.length > 1) {
|
||||
// TODO: Add a toast notification here when cart is full.
|
||||
alert("You can only check out 2 books at a time!");
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Add a toast notification here when item added to cart.
|
||||
dispatch({ type: actionTypes.ADD_TO_CART, data: title });
|
||||
}
|
||||
|
||||
return (
|
||||
<BookContainer>
|
||||
<IconContainer>
|
||||
<StyledIcon icon={faCartPlus} />
|
||||
<StyledIcon
|
||||
icon={faCartPlus}
|
||||
onClick={handleAddToCart}
|
||||
/>
|
||||
</IconContainer>
|
||||
<CoverImage
|
||||
src={imageLink}
|
||||
src={imageLink || 'https://college.indiana.edu/images/publications/book-cover-placeholder.jpg'}
|
||||
/>
|
||||
<Title>{title}</Title>
|
||||
<Author>{author}</Author>
|
||||
</BookContainer>
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
export default Book;
|
||||
@@ -1,7 +1,10 @@
|
||||
import React from 'react';
|
||||
import React, { useEffect } from 'react';
|
||||
import styled from 'styled-components';
|
||||
import { useSelector, useDispatch, RootStateOrAny } from 'react-redux';
|
||||
import { fetchBooks } from '../../../actions/books';
|
||||
|
||||
import Book from './Book/Book';
|
||||
import { BookType } from '../../../types/book';
|
||||
|
||||
const LibraryContainer = styled.div`
|
||||
display: flex;
|
||||
@@ -9,34 +12,29 @@ const LibraryContainer = styled.div`
|
||||
justify-content: center;
|
||||
`
|
||||
|
||||
const books = [
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"}
|
||||
]
|
||||
const Library: React.FC = () => {
|
||||
const books = useSelector((state: RootStateOrAny) => state.books);
|
||||
const filter = useSelector((state: RootStateOrAny) => state.books.filter);
|
||||
const dispatch = useDispatch();
|
||||
|
||||
const Library: React.FC = () => (
|
||||
useEffect(() => {
|
||||
dispatch(fetchBooks())
|
||||
}, []);
|
||||
|
||||
const displayBooks = books.books.filter((book: BookType) => book.title.toLowerCase().indexOf(filter) !== -1);
|
||||
|
||||
return (
|
||||
<LibraryContainer>
|
||||
{books.map(book => (
|
||||
{displayBooks && displayBooks.map((book: BookType) => (
|
||||
<Book
|
||||
title={book.title}
|
||||
author={book.author}
|
||||
imageLink={book.imageLink}
|
||||
key={book.title}
|
||||
title={book.title || ''}
|
||||
author={book.author || ''}
|
||||
isbn={book.isbn || ''}
|
||||
/>
|
||||
))}
|
||||
</LibraryContainer>
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
export default Library;
|
||||
@@ -56,7 +56,7 @@ const RenterReturnContainer = styled.div`
|
||||
|
||||
type Props = {
|
||||
name: string;
|
||||
phone: string;
|
||||
phoneNumber: string;
|
||||
email: string;
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ const books = [
|
||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"}
|
||||
]
|
||||
|
||||
const RenterCard: React.FC<Props> = ({ name, phone, email }) => (
|
||||
const RenterCard: React.FC<Props> = ({ name, phoneNumber, email }) => (
|
||||
<RenterCardContainer>
|
||||
<RenterImageContainer>
|
||||
<RenterImagePlaceholder
|
||||
@@ -76,7 +76,7 @@ const RenterCard: React.FC<Props> = ({ name, phone, email }) => (
|
||||
{name}
|
||||
</RenterName>
|
||||
<RenterPhone>
|
||||
{phone}
|
||||
{phoneNumber}
|
||||
</RenterPhone>
|
||||
<RenterEmail>
|
||||
{email}
|
||||
|
||||
@@ -1,37 +1,36 @@
|
||||
import React from 'react';
|
||||
// import styled from 'styled-components';
|
||||
import React, { useEffect } from 'react';
|
||||
import { useSelector, useDispatch, RootStateOrAny } from 'react-redux';
|
||||
import { fetchRenters } from '../../../actions/renters';
|
||||
|
||||
import Panel from '../../UIKit/Panel/Panel';
|
||||
import RenterCard from './RenterCard/RenterCard';
|
||||
|
||||
const renters = [
|
||||
{name: 'John Doe', phone: '555-555-5555', email: 'john@doe.com'},
|
||||
{name: 'John Doe', phone: '555-555-5555', email: 'john@doe.com'},
|
||||
{name: 'John Doe', phone: '555-555-5555', email: 'john@doe.com'},
|
||||
{name: 'John Doe', phone: '555-555-5555', email: 'john@doe.com'},
|
||||
{name: 'John Doe', phone: '555-555-5555', email: 'john@doe.com'},
|
||||
{name: 'John Doe', phone: '555-555-5555', email: 'john@doe.com'},
|
||||
{name: 'John Doe', phone: '555-555-5555', email: 'john@doe.com'},
|
||||
{name: 'John Doe', phone: '555-555-5555', email: 'john@doe.com'},
|
||||
{name: 'John Doe', phone: '555-555-5555', email: 'john@doe.com'},
|
||||
{name: 'John Doe', phone: '555-555-5555', email: 'john@doe.com'}
|
||||
]
|
||||
import { RenterType } from '../../../types/renter';
|
||||
|
||||
const Renters: React.FC = () => (
|
||||
const Renters: React.FC = () => {
|
||||
const renters = useSelector((state: RootStateOrAny) => state.renters);
|
||||
const dispatch = useDispatch();
|
||||
|
||||
useEffect(() => {
|
||||
dispatch(fetchRenters())
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<Panel style={{
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
flexWrap: 'wrap',
|
||||
justifyContent: 'center'
|
||||
}}>
|
||||
{renters.map(renter => (
|
||||
{renters && renters.renters.map((renter: RenterType) => (
|
||||
<RenterCard
|
||||
name={renter.name}
|
||||
phone={renter.phone}
|
||||
email={renter.email}
|
||||
name={renter.name || ''}
|
||||
phoneNumber={renter.phoneNumber || ''}
|
||||
email={renter.email || ''}
|
||||
/>
|
||||
))}
|
||||
</Panel>
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
export default Renters;
|
||||
@@ -13,7 +13,7 @@ const PanelContainer = styled.div`
|
||||
|
||||
type Props = {
|
||||
children: React.ReactNode;
|
||||
style: CSS.Properties;
|
||||
style?: CSS.Properties;
|
||||
}
|
||||
|
||||
const Panel: React.FC<Props> = ({ children, style }) => (
|
||||
|
||||
@@ -5,10 +5,15 @@ import * as serviceWorker from './serviceWorker';
|
||||
|
||||
import { BrowserRouter as Router } from 'react-router-dom';
|
||||
|
||||
import { Provider } from 'react-redux';
|
||||
import { store } from './reducers/store';
|
||||
|
||||
ReactDOM.render(
|
||||
<React.StrictMode>
|
||||
<Router>
|
||||
<Provider store={store}>
|
||||
<App />
|
||||
</Provider>
|
||||
</Router>
|
||||
</React.StrictMode>,
|
||||
document.getElementById('root')
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
import { actionTypes } from '../constants/books/action_types';
|
||||
import { mergeDeepRight } from 'ramda';
|
||||
|
||||
import { Action } from '../types/actions';
|
||||
|
||||
const initialState = {
|
||||
books: [],
|
||||
filter: '',
|
||||
images: {},
|
||||
cart: [],
|
||||
loading: false,
|
||||
loadError: null,
|
||||
checkoutError: null,
|
||||
returnError: null
|
||||
}
|
||||
|
||||
export function books(state = initialState, action: Action) {
|
||||
switch (action.type) {
|
||||
// FETCH_BOOK actions
|
||||
case actionTypes.FETCH_BOOKS.request:
|
||||
return {
|
||||
...state,
|
||||
loading: true
|
||||
}
|
||||
case actionTypes.FETCH_BOOKS.success:
|
||||
return {
|
||||
...state,
|
||||
loading: false,
|
||||
loadError: null,
|
||||
books: [...action.data]
|
||||
}
|
||||
case actionTypes.FETCH_BOOKS.failure:
|
||||
return {
|
||||
...state,
|
||||
loading: false,
|
||||
error: action.err
|
||||
}
|
||||
|
||||
// FETCH_COVER_IMAGE actions
|
||||
case actionTypes.FETCH_COVER_IMAGE.request:
|
||||
return {
|
||||
...state,
|
||||
loading: true
|
||||
}
|
||||
case actionTypes.FETCH_COVER_IMAGE.success:
|
||||
interface ImageReturn {
|
||||
title: string;
|
||||
imageLink: string;
|
||||
}
|
||||
|
||||
let imageReturn: ImageReturn = {...action.data as ImageReturn};
|
||||
|
||||
const images = {...state.images}
|
||||
|
||||
images[imageReturn.title] = imageReturn.imageLink;
|
||||
|
||||
return mergeDeepRight(state, {
|
||||
loading: false,
|
||||
images: {...images}
|
||||
})
|
||||
case actionTypes.FETCH_COVER_IMAGE.failure:
|
||||
return {
|
||||
...state,
|
||||
loading: false
|
||||
}
|
||||
|
||||
// SET_FILTER action
|
||||
case actionTypes.SET_FILTER:
|
||||
return {
|
||||
...state,
|
||||
filter: action.data
|
||||
}
|
||||
|
||||
// ADD_TO_CART action
|
||||
case actionTypes.ADD_TO_CART:
|
||||
return {
|
||||
...state,
|
||||
cart: state.cart.concat(action.data)
|
||||
}
|
||||
|
||||
// CHECKOUT_BOOK action
|
||||
case actionTypes.CHECKOUT_BOOK.request:
|
||||
return {
|
||||
...state,
|
||||
loading: true
|
||||
}
|
||||
case actionTypes.CHECKOUT_BOOK.success:
|
||||
return {
|
||||
...state,
|
||||
loading: false,
|
||||
checkoutError: null
|
||||
}
|
||||
case actionTypes.CHECKOUT_BOOK.failure:
|
||||
return {
|
||||
...state,
|
||||
loading: false,
|
||||
checkoutError: action.err
|
||||
}
|
||||
|
||||
// RETURN_BOOK action
|
||||
case actionTypes.RETURN_BOOK.request:
|
||||
return {
|
||||
...state,
|
||||
loading: true
|
||||
}
|
||||
case actionTypes.RETURN_BOOK.success:
|
||||
return {
|
||||
...state,
|
||||
loading: false,
|
||||
returnError: false
|
||||
}
|
||||
case actionTypes.RETURN_BOOK.failure:
|
||||
return {
|
||||
...state,
|
||||
loading: false,
|
||||
returnError: action.err
|
||||
}
|
||||
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import { combineReducers } from 'redux';
|
||||
|
||||
import { books } from './books';
|
||||
import { renters } from './renters';
|
||||
|
||||
export const RootReducer = combineReducers({
|
||||
books,
|
||||
renters
|
||||
})
|
||||
@@ -0,0 +1,56 @@
|
||||
import { actionTypes } from '../constants/renters/action_types';
|
||||
|
||||
import { Action } from '../types/actions';
|
||||
|
||||
const initialState = {
|
||||
renters: [],
|
||||
loading: false,
|
||||
loadError: null,
|
||||
registerError: null,
|
||||
}
|
||||
|
||||
export function renters(state = initialState, action: Action) {
|
||||
switch(action.type) {
|
||||
// FETCH_RENTERS action
|
||||
case actionTypes.FETCH_RENTERS.request:
|
||||
return {
|
||||
...state,
|
||||
loading: true
|
||||
}
|
||||
case actionTypes.FETCH_RENTERS.success:
|
||||
return {
|
||||
...state,
|
||||
loading: false,
|
||||
loadError: null,
|
||||
renters: [...action.data]
|
||||
}
|
||||
case actionTypes.FETCH_RENTERS.failure:
|
||||
return {
|
||||
...state,
|
||||
loading: false,
|
||||
loadError: action.err
|
||||
}
|
||||
|
||||
// REGISTER_RENTER action
|
||||
case actionTypes.REGISTER_RENTER.request:
|
||||
return {
|
||||
...state,
|
||||
loading: true
|
||||
}
|
||||
case actionTypes.REGISTER_RENTER.success:
|
||||
return {
|
||||
...state,
|
||||
loading: false,
|
||||
registerError: null,
|
||||
}
|
||||
case actionTypes.REGISTER_RENTER.failure:
|
||||
return {
|
||||
...state,
|
||||
loading: false,
|
||||
registerError: action.err
|
||||
}
|
||||
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import { createStore, applyMiddleware } from 'redux';
|
||||
import { composeWithDevTools } from 'redux-devtools-extension';
|
||||
import thunk from 'redux-thunk';
|
||||
|
||||
import { RootReducer } from '../';
|
||||
|
||||
export const store = createStore(
|
||||
RootReducer,
|
||||
{},
|
||||
composeWithDevTools({})(
|
||||
applyMiddleware(thunk)
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,5 @@
|
||||
export type Action = {
|
||||
type: string,
|
||||
data?: any,
|
||||
err?: any,
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
export type BookType = {
|
||||
title: string,
|
||||
author: string,
|
||||
imageLink: string,
|
||||
yearPublished?: string,
|
||||
isbn?: string
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
export type RenterType = {
|
||||
name: string;
|
||||
address: string;
|
||||
email: string;
|
||||
phoneNumber: string;
|
||||
}
|
||||
@@ -19,7 +19,8 @@
|
||||
"noEmit": true,
|
||||
"jsx": "react",
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true
|
||||
"noUnusedParameters": true,
|
||||
"noImplicitAny": false,
|
||||
},
|
||||
"include": [
|
||||
"src"
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
../loose-envify/cli.js
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2014-present Sebastian McKenzie and other 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.
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
# @babel/runtime
|
||||
|
||||
> babel's modular runtime helpers
|
||||
|
||||
See our website [@babel/runtime](https://babeljs.io/docs/en/next/babel-runtime.html) for more information.
|
||||
|
||||
## Install
|
||||
|
||||
Using npm:
|
||||
|
||||
```sh
|
||||
npm install --save @babel/runtime
|
||||
```
|
||||
|
||||
or using yarn:
|
||||
|
||||
```sh
|
||||
yarn add @babel/runtime
|
||||
```
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
var AwaitValue = require("./AwaitValue");
|
||||
|
||||
function AsyncGenerator(gen) {
|
||||
var front, back;
|
||||
|
||||
function send(key, arg) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var request = {
|
||||
key: key,
|
||||
arg: arg,
|
||||
resolve: resolve,
|
||||
reject: reject,
|
||||
next: null
|
||||
};
|
||||
|
||||
if (back) {
|
||||
back = back.next = request;
|
||||
} else {
|
||||
front = back = request;
|
||||
resume(key, arg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function resume(key, arg) {
|
||||
try {
|
||||
var result = gen[key](arg);
|
||||
var value = result.value;
|
||||
var wrappedAwait = value instanceof AwaitValue;
|
||||
Promise.resolve(wrappedAwait ? value.wrapped : value).then(function (arg) {
|
||||
if (wrappedAwait) {
|
||||
resume(key === "return" ? "return" : "next", arg);
|
||||
return;
|
||||
}
|
||||
|
||||
settle(result.done ? "return" : "normal", arg);
|
||||
}, function (err) {
|
||||
resume("throw", err);
|
||||
});
|
||||
} catch (err) {
|
||||
settle("throw", err);
|
||||
}
|
||||
}
|
||||
|
||||
function settle(type, value) {
|
||||
switch (type) {
|
||||
case "return":
|
||||
front.resolve({
|
||||
value: value,
|
||||
done: true
|
||||
});
|
||||
break;
|
||||
|
||||
case "throw":
|
||||
front.reject(value);
|
||||
break;
|
||||
|
||||
default:
|
||||
front.resolve({
|
||||
value: value,
|
||||
done: false
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
front = front.next;
|
||||
|
||||
if (front) {
|
||||
resume(front.key, front.arg);
|
||||
} else {
|
||||
back = null;
|
||||
}
|
||||
}
|
||||
|
||||
this._invoke = send;
|
||||
|
||||
if (typeof gen["return"] !== "function") {
|
||||
this["return"] = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof Symbol === "function" && Symbol.asyncIterator) {
|
||||
AsyncGenerator.prototype[Symbol.asyncIterator] = function () {
|
||||
return this;
|
||||
};
|
||||
}
|
||||
|
||||
AsyncGenerator.prototype.next = function (arg) {
|
||||
return this._invoke("next", arg);
|
||||
};
|
||||
|
||||
AsyncGenerator.prototype["throw"] = function (arg) {
|
||||
return this._invoke("throw", arg);
|
||||
};
|
||||
|
||||
AsyncGenerator.prototype["return"] = function (arg) {
|
||||
return this._invoke("return", arg);
|
||||
};
|
||||
|
||||
module.exports = AsyncGenerator;
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
function _AwaitValue(value) {
|
||||
this.wrapped = value;
|
||||
}
|
||||
|
||||
module.exports = _AwaitValue;
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
|
||||
var desc = {};
|
||||
Object.keys(descriptor).forEach(function (key) {
|
||||
desc[key] = descriptor[key];
|
||||
});
|
||||
desc.enumerable = !!desc.enumerable;
|
||||
desc.configurable = !!desc.configurable;
|
||||
|
||||
if ('value' in desc || desc.initializer) {
|
||||
desc.writable = true;
|
||||
}
|
||||
|
||||
desc = decorators.slice().reverse().reduce(function (desc, decorator) {
|
||||
return decorator(target, property, desc) || desc;
|
||||
}, desc);
|
||||
|
||||
if (context && desc.initializer !== void 0) {
|
||||
desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
|
||||
desc.initializer = undefined;
|
||||
}
|
||||
|
||||
if (desc.initializer === void 0) {
|
||||
Object.defineProperty(target, property, desc);
|
||||
desc = null;
|
||||
}
|
||||
|
||||
return desc;
|
||||
}
|
||||
|
||||
module.exports = _applyDecoratedDescriptor;
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
function _arrayLikeToArray(arr, len) {
|
||||
if (len == null || len > arr.length) len = arr.length;
|
||||
|
||||
for (var i = 0, arr2 = new Array(len); i < len; i++) {
|
||||
arr2[i] = arr[i];
|
||||
}
|
||||
|
||||
return arr2;
|
||||
}
|
||||
|
||||
module.exports = _arrayLikeToArray;
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
function _arrayWithHoles(arr) {
|
||||
if (Array.isArray(arr)) return arr;
|
||||
}
|
||||
|
||||
module.exports = _arrayWithHoles;
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
var arrayLikeToArray = require("./arrayLikeToArray");
|
||||
|
||||
function _arrayWithoutHoles(arr) {
|
||||
if (Array.isArray(arr)) return arrayLikeToArray(arr);
|
||||
}
|
||||
|
||||
module.exports = _arrayWithoutHoles;
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
function _assertThisInitialized(self) {
|
||||
if (self === void 0) {
|
||||
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
module.exports = _assertThisInitialized;
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
function _asyncGeneratorDelegate(inner, awaitWrap) {
|
||||
var iter = {},
|
||||
waiting = false;
|
||||
|
||||
function pump(key, value) {
|
||||
waiting = true;
|
||||
value = new Promise(function (resolve) {
|
||||
resolve(inner[key](value));
|
||||
});
|
||||
return {
|
||||
done: false,
|
||||
value: awaitWrap(value)
|
||||
};
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
if (typeof Symbol === "function" && Symbol.iterator) {
|
||||
iter[Symbol.iterator] = function () {
|
||||
return this;
|
||||
};
|
||||
}
|
||||
|
||||
iter.next = function (value) {
|
||||
if (waiting) {
|
||||
waiting = false;
|
||||
return value;
|
||||
}
|
||||
|
||||
return pump("next", value);
|
||||
};
|
||||
|
||||
if (typeof inner["throw"] === "function") {
|
||||
iter["throw"] = function (value) {
|
||||
if (waiting) {
|
||||
waiting = false;
|
||||
throw value;
|
||||
}
|
||||
|
||||
return pump("throw", value);
|
||||
};
|
||||
}
|
||||
|
||||
if (typeof inner["return"] === "function") {
|
||||
iter["return"] = function (value) {
|
||||
if (waiting) {
|
||||
waiting = false;
|
||||
return value;
|
||||
}
|
||||
|
||||
return pump("return", value);
|
||||
};
|
||||
}
|
||||
|
||||
return iter;
|
||||
}
|
||||
|
||||
module.exports = _asyncGeneratorDelegate;
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
function _asyncIterator(iterable) {
|
||||
var method;
|
||||
|
||||
if (typeof Symbol !== "undefined") {
|
||||
if (Symbol.asyncIterator) {
|
||||
method = iterable[Symbol.asyncIterator];
|
||||
if (method != null) return method.call(iterable);
|
||||
}
|
||||
|
||||
if (Symbol.iterator) {
|
||||
method = iterable[Symbol.iterator];
|
||||
if (method != null) return method.call(iterable);
|
||||
}
|
||||
}
|
||||
|
||||
throw new TypeError("Object is not async iterable");
|
||||
}
|
||||
|
||||
module.exports = _asyncIterator;
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
||||
try {
|
||||
var info = gen[key](arg);
|
||||
var value = info.value;
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (info.done) {
|
||||
resolve(value);
|
||||
} else {
|
||||
Promise.resolve(value).then(_next, _throw);
|
||||
}
|
||||
}
|
||||
|
||||
function _asyncToGenerator(fn) {
|
||||
return function () {
|
||||
var self = this,
|
||||
args = arguments;
|
||||
return new Promise(function (resolve, reject) {
|
||||
var gen = fn.apply(self, args);
|
||||
|
||||
function _next(value) {
|
||||
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
||||
}
|
||||
|
||||
function _throw(err) {
|
||||
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
||||
}
|
||||
|
||||
_next(undefined);
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = _asyncToGenerator;
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
var AwaitValue = require("./AwaitValue");
|
||||
|
||||
function _awaitAsyncGenerator(value) {
|
||||
return new AwaitValue(value);
|
||||
}
|
||||
|
||||
module.exports = _awaitAsyncGenerator;
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
function _classCallCheck(instance, Constructor) {
|
||||
if (!(instance instanceof Constructor)) {
|
||||
throw new TypeError("Cannot call a class as a function");
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = _classCallCheck;
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
function _classNameTDZError(name) {
|
||||
throw new Error("Class \"" + name + "\" cannot be referenced in computed property keys.");
|
||||
}
|
||||
|
||||
module.exports = _classNameTDZError;
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
function _classPrivateFieldDestructureSet(receiver, privateMap) {
|
||||
if (!privateMap.has(receiver)) {
|
||||
throw new TypeError("attempted to set private field on non-instance");
|
||||
}
|
||||
|
||||
var descriptor = privateMap.get(receiver);
|
||||
|
||||
if (descriptor.set) {
|
||||
if (!("__destrObj" in descriptor)) {
|
||||
descriptor.__destrObj = {
|
||||
set value(v) {
|
||||
descriptor.set.call(receiver, v);
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
return descriptor.__destrObj;
|
||||
} else {
|
||||
if (!descriptor.writable) {
|
||||
throw new TypeError("attempted to set read only private field");
|
||||
}
|
||||
|
||||
return descriptor;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = _classPrivateFieldDestructureSet;
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
function _classPrivateFieldGet(receiver, privateMap) {
|
||||
var descriptor = privateMap.get(receiver);
|
||||
|
||||
if (!descriptor) {
|
||||
throw new TypeError("attempted to get private field on non-instance");
|
||||
}
|
||||
|
||||
if (descriptor.get) {
|
||||
return descriptor.get.call(receiver);
|
||||
}
|
||||
|
||||
return descriptor.value;
|
||||
}
|
||||
|
||||
module.exports = _classPrivateFieldGet;
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
function _classPrivateFieldBase(receiver, privateKey) {
|
||||
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
|
||||
throw new TypeError("attempted to use private field on non-instance");
|
||||
}
|
||||
|
||||
return receiver;
|
||||
}
|
||||
|
||||
module.exports = _classPrivateFieldBase;
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
var id = 0;
|
||||
|
||||
function _classPrivateFieldKey(name) {
|
||||
return "__private_" + id++ + "_" + name;
|
||||
}
|
||||
|
||||
module.exports = _classPrivateFieldKey;
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
function _classPrivateFieldSet(receiver, privateMap, value) {
|
||||
var descriptor = privateMap.get(receiver);
|
||||
|
||||
if (!descriptor) {
|
||||
throw new TypeError("attempted to set private field on non-instance");
|
||||
}
|
||||
|
||||
if (descriptor.set) {
|
||||
descriptor.set.call(receiver, value);
|
||||
} else {
|
||||
if (!descriptor.writable) {
|
||||
throw new TypeError("attempted to set read only private field");
|
||||
}
|
||||
|
||||
descriptor.value = value;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
module.exports = _classPrivateFieldSet;
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
function _classPrivateMethodGet(receiver, privateSet, fn) {
|
||||
if (!privateSet.has(receiver)) {
|
||||
throw new TypeError("attempted to get private field on non-instance");
|
||||
}
|
||||
|
||||
return fn;
|
||||
}
|
||||
|
||||
module.exports = _classPrivateMethodGet;
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
function _classPrivateMethodSet() {
|
||||
throw new TypeError("attempted to reassign private method");
|
||||
}
|
||||
|
||||
module.exports = _classPrivateMethodSet;
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {
|
||||
if (receiver !== classConstructor) {
|
||||
throw new TypeError("Private static access of wrong provenance");
|
||||
}
|
||||
|
||||
if (descriptor.get) {
|
||||
return descriptor.get.call(receiver);
|
||||
}
|
||||
|
||||
return descriptor.value;
|
||||
}
|
||||
|
||||
module.exports = _classStaticPrivateFieldSpecGet;
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) {
|
||||
if (receiver !== classConstructor) {
|
||||
throw new TypeError("Private static access of wrong provenance");
|
||||
}
|
||||
|
||||
if (descriptor.set) {
|
||||
descriptor.set.call(receiver, value);
|
||||
} else {
|
||||
if (!descriptor.writable) {
|
||||
throw new TypeError("attempted to set read only private field");
|
||||
}
|
||||
|
||||
descriptor.value = value;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
module.exports = _classStaticPrivateFieldSpecSet;
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
function _classStaticPrivateMethodGet(receiver, classConstructor, method) {
|
||||
if (receiver !== classConstructor) {
|
||||
throw new TypeError("Private static access of wrong provenance");
|
||||
}
|
||||
|
||||
return method;
|
||||
}
|
||||
|
||||
module.exports = _classStaticPrivateMethodGet;
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
function _classStaticPrivateMethodSet() {
|
||||
throw new TypeError("attempted to set read only static private field");
|
||||
}
|
||||
|
||||
module.exports = _classStaticPrivateMethodSet;
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
var setPrototypeOf = require("./setPrototypeOf");
|
||||
|
||||
var isNativeReflectConstruct = require("./isNativeReflectConstruct");
|
||||
|
||||
function _construct(Parent, args, Class) {
|
||||
if (isNativeReflectConstruct()) {
|
||||
module.exports = _construct = Reflect.construct;
|
||||
} else {
|
||||
module.exports = _construct = function _construct(Parent, args, Class) {
|
||||
var a = [null];
|
||||
a.push.apply(a, args);
|
||||
var Constructor = Function.bind.apply(Parent, a);
|
||||
var instance = new Constructor();
|
||||
if (Class) setPrototypeOf(instance, Class.prototype);
|
||||
return instance;
|
||||
};
|
||||
}
|
||||
|
||||
return _construct.apply(null, arguments);
|
||||
}
|
||||
|
||||
module.exports = _construct;
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
function _createClass(Constructor, protoProps, staticProps) {
|
||||
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
||||
if (staticProps) _defineProperties(Constructor, staticProps);
|
||||
return Constructor;
|
||||
}
|
||||
|
||||
module.exports = _createClass;
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
var unsupportedIterableToArray = require("./unsupportedIterableToArray");
|
||||
|
||||
function _createForOfIteratorHelper(o, allowArrayLike) {
|
||||
var it;
|
||||
|
||||
if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
|
||||
if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
||||
if (it) o = it;
|
||||
var i = 0;
|
||||
|
||||
var F = function F() {};
|
||||
|
||||
return {
|
||||
s: F,
|
||||
n: function n() {
|
||||
if (i >= o.length) return {
|
||||
done: true
|
||||
};
|
||||
return {
|
||||
done: false,
|
||||
value: o[i++]
|
||||
};
|
||||
},
|
||||
e: function e(_e) {
|
||||
throw _e;
|
||||
},
|
||||
f: F
|
||||
};
|
||||
}
|
||||
|
||||
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
||||
}
|
||||
|
||||
var normalCompletion = true,
|
||||
didErr = false,
|
||||
err;
|
||||
return {
|
||||
s: function s() {
|
||||
it = o[Symbol.iterator]();
|
||||
},
|
||||
n: function n() {
|
||||
var step = it.next();
|
||||
normalCompletion = step.done;
|
||||
return step;
|
||||
},
|
||||
e: function e(_e2) {
|
||||
didErr = true;
|
||||
err = _e2;
|
||||
},
|
||||
f: function f() {
|
||||
try {
|
||||
if (!normalCompletion && it["return"] != null) it["return"]();
|
||||
} finally {
|
||||
if (didErr) throw err;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = _createForOfIteratorHelper;
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
var unsupportedIterableToArray = require("./unsupportedIterableToArray");
|
||||
|
||||
function _createForOfIteratorHelperLoose(o, allowArrayLike) {
|
||||
var it;
|
||||
|
||||
if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
|
||||
if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
||||
if (it) o = it;
|
||||
var i = 0;
|
||||
return function () {
|
||||
if (i >= o.length) return {
|
||||
done: true
|
||||
};
|
||||
return {
|
||||
done: false,
|
||||
value: o[i++]
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
||||
}
|
||||
|
||||
it = o[Symbol.iterator]();
|
||||
return it.next.bind(it);
|
||||
}
|
||||
|
||||
module.exports = _createForOfIteratorHelperLoose;
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
var getPrototypeOf = require("./getPrototypeOf");
|
||||
|
||||
var isNativeReflectConstruct = require("./isNativeReflectConstruct");
|
||||
|
||||
var possibleConstructorReturn = require("./possibleConstructorReturn");
|
||||
|
||||
function _createSuper(Derived) {
|
||||
var hasNativeReflectConstruct = isNativeReflectConstruct();
|
||||
return function _createSuperInternal() {
|
||||
var Super = getPrototypeOf(Derived),
|
||||
result;
|
||||
|
||||
if (hasNativeReflectConstruct) {
|
||||
var NewTarget = getPrototypeOf(this).constructor;
|
||||
result = Reflect.construct(Super, arguments, NewTarget);
|
||||
} else {
|
||||
result = Super.apply(this, arguments);
|
||||
}
|
||||
|
||||
return possibleConstructorReturn(this, result);
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = _createSuper;
|
||||
+400
@@ -0,0 +1,400 @@
|
||||
var toArray = require("./toArray");
|
||||
|
||||
var toPropertyKey = require("./toPropertyKey");
|
||||
|
||||
function _decorate(decorators, factory, superClass, mixins) {
|
||||
var api = _getDecoratorsApi();
|
||||
|
||||
if (mixins) {
|
||||
for (var i = 0; i < mixins.length; i++) {
|
||||
api = mixins[i](api);
|
||||
}
|
||||
}
|
||||
|
||||
var r = factory(function initialize(O) {
|
||||
api.initializeInstanceElements(O, decorated.elements);
|
||||
}, superClass);
|
||||
var decorated = api.decorateClass(_coalesceClassElements(r.d.map(_createElementDescriptor)), decorators);
|
||||
api.initializeClassElements(r.F, decorated.elements);
|
||||
return api.runClassFinishers(r.F, decorated.finishers);
|
||||
}
|
||||
|
||||
function _getDecoratorsApi() {
|
||||
_getDecoratorsApi = function _getDecoratorsApi() {
|
||||
return api;
|
||||
};
|
||||
|
||||
var api = {
|
||||
elementsDefinitionOrder: [["method"], ["field"]],
|
||||
initializeInstanceElements: function initializeInstanceElements(O, elements) {
|
||||
["method", "field"].forEach(function (kind) {
|
||||
elements.forEach(function (element) {
|
||||
if (element.kind === kind && element.placement === "own") {
|
||||
this.defineClassElement(O, element);
|
||||
}
|
||||
}, this);
|
||||
}, this);
|
||||
},
|
||||
initializeClassElements: function initializeClassElements(F, elements) {
|
||||
var proto = F.prototype;
|
||||
["method", "field"].forEach(function (kind) {
|
||||
elements.forEach(function (element) {
|
||||
var placement = element.placement;
|
||||
|
||||
if (element.kind === kind && (placement === "static" || placement === "prototype")) {
|
||||
var receiver = placement === "static" ? F : proto;
|
||||
this.defineClassElement(receiver, element);
|
||||
}
|
||||
}, this);
|
||||
}, this);
|
||||
},
|
||||
defineClassElement: function defineClassElement(receiver, element) {
|
||||
var descriptor = element.descriptor;
|
||||
|
||||
if (element.kind === "field") {
|
||||
var initializer = element.initializer;
|
||||
descriptor = {
|
||||
enumerable: descriptor.enumerable,
|
||||
writable: descriptor.writable,
|
||||
configurable: descriptor.configurable,
|
||||
value: initializer === void 0 ? void 0 : initializer.call(receiver)
|
||||
};
|
||||
}
|
||||
|
||||
Object.defineProperty(receiver, element.key, descriptor);
|
||||
},
|
||||
decorateClass: function decorateClass(elements, decorators) {
|
||||
var newElements = [];
|
||||
var finishers = [];
|
||||
var placements = {
|
||||
"static": [],
|
||||
prototype: [],
|
||||
own: []
|
||||
};
|
||||
elements.forEach(function (element) {
|
||||
this.addElementPlacement(element, placements);
|
||||
}, this);
|
||||
elements.forEach(function (element) {
|
||||
if (!_hasDecorators(element)) return newElements.push(element);
|
||||
var elementFinishersExtras = this.decorateElement(element, placements);
|
||||
newElements.push(elementFinishersExtras.element);
|
||||
newElements.push.apply(newElements, elementFinishersExtras.extras);
|
||||
finishers.push.apply(finishers, elementFinishersExtras.finishers);
|
||||
}, this);
|
||||
|
||||
if (!decorators) {
|
||||
return {
|
||||
elements: newElements,
|
||||
finishers: finishers
|
||||
};
|
||||
}
|
||||
|
||||
var result = this.decorateConstructor(newElements, decorators);
|
||||
finishers.push.apply(finishers, result.finishers);
|
||||
result.finishers = finishers;
|
||||
return result;
|
||||
},
|
||||
addElementPlacement: function addElementPlacement(element, placements, silent) {
|
||||
var keys = placements[element.placement];
|
||||
|
||||
if (!silent && keys.indexOf(element.key) !== -1) {
|
||||
throw new TypeError("Duplicated element (" + element.key + ")");
|
||||
}
|
||||
|
||||
keys.push(element.key);
|
||||
},
|
||||
decorateElement: function decorateElement(element, placements) {
|
||||
var extras = [];
|
||||
var finishers = [];
|
||||
|
||||
for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {
|
||||
var keys = placements[element.placement];
|
||||
keys.splice(keys.indexOf(element.key), 1);
|
||||
var elementObject = this.fromElementDescriptor(element);
|
||||
var elementFinisherExtras = this.toElementFinisherExtras((0, decorators[i])(elementObject) || elementObject);
|
||||
element = elementFinisherExtras.element;
|
||||
this.addElementPlacement(element, placements);
|
||||
|
||||
if (elementFinisherExtras.finisher) {
|
||||
finishers.push(elementFinisherExtras.finisher);
|
||||
}
|
||||
|
||||
var newExtras = elementFinisherExtras.extras;
|
||||
|
||||
if (newExtras) {
|
||||
for (var j = 0; j < newExtras.length; j++) {
|
||||
this.addElementPlacement(newExtras[j], placements);
|
||||
}
|
||||
|
||||
extras.push.apply(extras, newExtras);
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
element: element,
|
||||
finishers: finishers,
|
||||
extras: extras
|
||||
};
|
||||
},
|
||||
decorateConstructor: function decorateConstructor(elements, decorators) {
|
||||
var finishers = [];
|
||||
|
||||
for (var i = decorators.length - 1; i >= 0; i--) {
|
||||
var obj = this.fromClassDescriptor(elements);
|
||||
var elementsAndFinisher = this.toClassDescriptor((0, decorators[i])(obj) || obj);
|
||||
|
||||
if (elementsAndFinisher.finisher !== undefined) {
|
||||
finishers.push(elementsAndFinisher.finisher);
|
||||
}
|
||||
|
||||
if (elementsAndFinisher.elements !== undefined) {
|
||||
elements = elementsAndFinisher.elements;
|
||||
|
||||
for (var j = 0; j < elements.length - 1; j++) {
|
||||
for (var k = j + 1; k < elements.length; k++) {
|
||||
if (elements[j].key === elements[k].key && elements[j].placement === elements[k].placement) {
|
||||
throw new TypeError("Duplicated element (" + elements[j].key + ")");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
elements: elements,
|
||||
finishers: finishers
|
||||
};
|
||||
},
|
||||
fromElementDescriptor: function fromElementDescriptor(element) {
|
||||
var obj = {
|
||||
kind: element.kind,
|
||||
key: element.key,
|
||||
placement: element.placement,
|
||||
descriptor: element.descriptor
|
||||
};
|
||||
var desc = {
|
||||
value: "Descriptor",
|
||||
configurable: true
|
||||
};
|
||||
Object.defineProperty(obj, Symbol.toStringTag, desc);
|
||||
if (element.kind === "field") obj.initializer = element.initializer;
|
||||
return obj;
|
||||
},
|
||||
toElementDescriptors: function toElementDescriptors(elementObjects) {
|
||||
if (elementObjects === undefined) return;
|
||||
return toArray(elementObjects).map(function (elementObject) {
|
||||
var element = this.toElementDescriptor(elementObject);
|
||||
this.disallowProperty(elementObject, "finisher", "An element descriptor");
|
||||
this.disallowProperty(elementObject, "extras", "An element descriptor");
|
||||
return element;
|
||||
}, this);
|
||||
},
|
||||
toElementDescriptor: function toElementDescriptor(elementObject) {
|
||||
var kind = String(elementObject.kind);
|
||||
|
||||
if (kind !== "method" && kind !== "field") {
|
||||
throw new TypeError('An element descriptor\'s .kind property must be either "method" or' + ' "field", but a decorator created an element descriptor with' + ' .kind "' + kind + '"');
|
||||
}
|
||||
|
||||
var key = toPropertyKey(elementObject.key);
|
||||
var placement = String(elementObject.placement);
|
||||
|
||||
if (placement !== "static" && placement !== "prototype" && placement !== "own") {
|
||||
throw new TypeError('An element descriptor\'s .placement property must be one of "static",' + ' "prototype" or "own", but a decorator created an element descriptor' + ' with .placement "' + placement + '"');
|
||||
}
|
||||
|
||||
var descriptor = elementObject.descriptor;
|
||||
this.disallowProperty(elementObject, "elements", "An element descriptor");
|
||||
var element = {
|
||||
kind: kind,
|
||||
key: key,
|
||||
placement: placement,
|
||||
descriptor: Object.assign({}, descriptor)
|
||||
};
|
||||
|
||||
if (kind !== "field") {
|
||||
this.disallowProperty(elementObject, "initializer", "A method descriptor");
|
||||
} else {
|
||||
this.disallowProperty(descriptor, "get", "The property descriptor of a field descriptor");
|
||||
this.disallowProperty(descriptor, "set", "The property descriptor of a field descriptor");
|
||||
this.disallowProperty(descriptor, "value", "The property descriptor of a field descriptor");
|
||||
element.initializer = elementObject.initializer;
|
||||
}
|
||||
|
||||
return element;
|
||||
},
|
||||
toElementFinisherExtras: function toElementFinisherExtras(elementObject) {
|
||||
var element = this.toElementDescriptor(elementObject);
|
||||
|
||||
var finisher = _optionalCallableProperty(elementObject, "finisher");
|
||||
|
||||
var extras = this.toElementDescriptors(elementObject.extras);
|
||||
return {
|
||||
element: element,
|
||||
finisher: finisher,
|
||||
extras: extras
|
||||
};
|
||||
},
|
||||
fromClassDescriptor: function fromClassDescriptor(elements) {
|
||||
var obj = {
|
||||
kind: "class",
|
||||
elements: elements.map(this.fromElementDescriptor, this)
|
||||
};
|
||||
var desc = {
|
||||
value: "Descriptor",
|
||||
configurable: true
|
||||
};
|
||||
Object.defineProperty(obj, Symbol.toStringTag, desc);
|
||||
return obj;
|
||||
},
|
||||
toClassDescriptor: function toClassDescriptor(obj) {
|
||||
var kind = String(obj.kind);
|
||||
|
||||
if (kind !== "class") {
|
||||
throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator' + ' created a class descriptor with .kind "' + kind + '"');
|
||||
}
|
||||
|
||||
this.disallowProperty(obj, "key", "A class descriptor");
|
||||
this.disallowProperty(obj, "placement", "A class descriptor");
|
||||
this.disallowProperty(obj, "descriptor", "A class descriptor");
|
||||
this.disallowProperty(obj, "initializer", "A class descriptor");
|
||||
this.disallowProperty(obj, "extras", "A class descriptor");
|
||||
|
||||
var finisher = _optionalCallableProperty(obj, "finisher");
|
||||
|
||||
var elements = this.toElementDescriptors(obj.elements);
|
||||
return {
|
||||
elements: elements,
|
||||
finisher: finisher
|
||||
};
|
||||
},
|
||||
runClassFinishers: function runClassFinishers(constructor, finishers) {
|
||||
for (var i = 0; i < finishers.length; i++) {
|
||||
var newConstructor = (0, finishers[i])(constructor);
|
||||
|
||||
if (newConstructor !== undefined) {
|
||||
if (typeof newConstructor !== "function") {
|
||||
throw new TypeError("Finishers must return a constructor.");
|
||||
}
|
||||
|
||||
constructor = newConstructor;
|
||||
}
|
||||
}
|
||||
|
||||
return constructor;
|
||||
},
|
||||
disallowProperty: function disallowProperty(obj, name, objectType) {
|
||||
if (obj[name] !== undefined) {
|
||||
throw new TypeError(objectType + " can't have a ." + name + " property.");
|
||||
}
|
||||
}
|
||||
};
|
||||
return api;
|
||||
}
|
||||
|
||||
function _createElementDescriptor(def) {
|
||||
var key = toPropertyKey(def.key);
|
||||
var descriptor;
|
||||
|
||||
if (def.kind === "method") {
|
||||
descriptor = {
|
||||
value: def.value,
|
||||
writable: true,
|
||||
configurable: true,
|
||||
enumerable: false
|
||||
};
|
||||
} else if (def.kind === "get") {
|
||||
descriptor = {
|
||||
get: def.value,
|
||||
configurable: true,
|
||||
enumerable: false
|
||||
};
|
||||
} else if (def.kind === "set") {
|
||||
descriptor = {
|
||||
set: def.value,
|
||||
configurable: true,
|
||||
enumerable: false
|
||||
};
|
||||
} else if (def.kind === "field") {
|
||||
descriptor = {
|
||||
configurable: true,
|
||||
writable: true,
|
||||
enumerable: true
|
||||
};
|
||||
}
|
||||
|
||||
var element = {
|
||||
kind: def.kind === "field" ? "field" : "method",
|
||||
key: key,
|
||||
placement: def["static"] ? "static" : def.kind === "field" ? "own" : "prototype",
|
||||
descriptor: descriptor
|
||||
};
|
||||
if (def.decorators) element.decorators = def.decorators;
|
||||
if (def.kind === "field") element.initializer = def.value;
|
||||
return element;
|
||||
}
|
||||
|
||||
function _coalesceGetterSetter(element, other) {
|
||||
if (element.descriptor.get !== undefined) {
|
||||
other.descriptor.get = element.descriptor.get;
|
||||
} else {
|
||||
other.descriptor.set = element.descriptor.set;
|
||||
}
|
||||
}
|
||||
|
||||
function _coalesceClassElements(elements) {
|
||||
var newElements = [];
|
||||
|
||||
var isSameElement = function isSameElement(other) {
|
||||
return other.kind === "method" && other.key === element.key && other.placement === element.placement;
|
||||
};
|
||||
|
||||
for (var i = 0; i < elements.length; i++) {
|
||||
var element = elements[i];
|
||||
var other;
|
||||
|
||||
if (element.kind === "method" && (other = newElements.find(isSameElement))) {
|
||||
if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {
|
||||
if (_hasDecorators(element) || _hasDecorators(other)) {
|
||||
throw new ReferenceError("Duplicated methods (" + element.key + ") can't be decorated.");
|
||||
}
|
||||
|
||||
other.descriptor = element.descriptor;
|
||||
} else {
|
||||
if (_hasDecorators(element)) {
|
||||
if (_hasDecorators(other)) {
|
||||
throw new ReferenceError("Decorators can't be placed on different accessors with for " + "the same property (" + element.key + ").");
|
||||
}
|
||||
|
||||
other.decorators = element.decorators;
|
||||
}
|
||||
|
||||
_coalesceGetterSetter(element, other);
|
||||
}
|
||||
} else {
|
||||
newElements.push(element);
|
||||
}
|
||||
}
|
||||
|
||||
return newElements;
|
||||
}
|
||||
|
||||
function _hasDecorators(element) {
|
||||
return element.decorators && element.decorators.length;
|
||||
}
|
||||
|
||||
function _isDataDescriptor(desc) {
|
||||
return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);
|
||||
}
|
||||
|
||||
function _optionalCallableProperty(obj, name) {
|
||||
var value = obj[name];
|
||||
|
||||
if (value !== undefined && typeof value !== "function") {
|
||||
throw new TypeError("Expected '" + name + "' to be a function");
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
module.exports = _decorate;
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
function _defaults(obj, defaults) {
|
||||
var keys = Object.getOwnPropertyNames(defaults);
|
||||
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
var key = keys[i];
|
||||
var value = Object.getOwnPropertyDescriptor(defaults, key);
|
||||
|
||||
if (value && value.configurable && obj[key] === undefined) {
|
||||
Object.defineProperty(obj, key, value);
|
||||
}
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
module.exports = _defaults;
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
function _defineEnumerableProperties(obj, descs) {
|
||||
for (var key in descs) {
|
||||
var desc = descs[key];
|
||||
desc.configurable = desc.enumerable = true;
|
||||
if ("value" in desc) desc.writable = true;
|
||||
Object.defineProperty(obj, key, desc);
|
||||
}
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var objectSymbols = Object.getOwnPropertySymbols(descs);
|
||||
|
||||
for (var i = 0; i < objectSymbols.length; i++) {
|
||||
var sym = objectSymbols[i];
|
||||
var desc = descs[sym];
|
||||
desc.configurable = desc.enumerable = true;
|
||||
if ("value" in desc) desc.writable = true;
|
||||
Object.defineProperty(obj, sym, desc);
|
||||
}
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
module.exports = _defineEnumerableProperties;
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
function _defineProperty(obj, key, value) {
|
||||
if (key in obj) {
|
||||
Object.defineProperty(obj, key, {
|
||||
value: value,
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true
|
||||
});
|
||||
} else {
|
||||
obj[key] = value;
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
module.exports = _defineProperty;
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
import AwaitValue from "./AwaitValue";
|
||||
export default function AsyncGenerator(gen) {
|
||||
var front, back;
|
||||
|
||||
function send(key, arg) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var request = {
|
||||
key: key,
|
||||
arg: arg,
|
||||
resolve: resolve,
|
||||
reject: reject,
|
||||
next: null
|
||||
};
|
||||
|
||||
if (back) {
|
||||
back = back.next = request;
|
||||
} else {
|
||||
front = back = request;
|
||||
resume(key, arg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function resume(key, arg) {
|
||||
try {
|
||||
var result = gen[key](arg);
|
||||
var value = result.value;
|
||||
var wrappedAwait = value instanceof AwaitValue;
|
||||
Promise.resolve(wrappedAwait ? value.wrapped : value).then(function (arg) {
|
||||
if (wrappedAwait) {
|
||||
resume(key === "return" ? "return" : "next", arg);
|
||||
return;
|
||||
}
|
||||
|
||||
settle(result.done ? "return" : "normal", arg);
|
||||
}, function (err) {
|
||||
resume("throw", err);
|
||||
});
|
||||
} catch (err) {
|
||||
settle("throw", err);
|
||||
}
|
||||
}
|
||||
|
||||
function settle(type, value) {
|
||||
switch (type) {
|
||||
case "return":
|
||||
front.resolve({
|
||||
value: value,
|
||||
done: true
|
||||
});
|
||||
break;
|
||||
|
||||
case "throw":
|
||||
front.reject(value);
|
||||
break;
|
||||
|
||||
default:
|
||||
front.resolve({
|
||||
value: value,
|
||||
done: false
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
front = front.next;
|
||||
|
||||
if (front) {
|
||||
resume(front.key, front.arg);
|
||||
} else {
|
||||
back = null;
|
||||
}
|
||||
}
|
||||
|
||||
this._invoke = send;
|
||||
|
||||
if (typeof gen["return"] !== "function") {
|
||||
this["return"] = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof Symbol === "function" && Symbol.asyncIterator) {
|
||||
AsyncGenerator.prototype[Symbol.asyncIterator] = function () {
|
||||
return this;
|
||||
};
|
||||
}
|
||||
|
||||
AsyncGenerator.prototype.next = function (arg) {
|
||||
return this._invoke("next", arg);
|
||||
};
|
||||
|
||||
AsyncGenerator.prototype["throw"] = function (arg) {
|
||||
return this._invoke("throw", arg);
|
||||
};
|
||||
|
||||
AsyncGenerator.prototype["return"] = function (arg) {
|
||||
return this._invoke("return", arg);
|
||||
};
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export default function _AwaitValue(value) {
|
||||
this.wrapped = value;
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
export default function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
|
||||
var desc = {};
|
||||
Object.keys(descriptor).forEach(function (key) {
|
||||
desc[key] = descriptor[key];
|
||||
});
|
||||
desc.enumerable = !!desc.enumerable;
|
||||
desc.configurable = !!desc.configurable;
|
||||
|
||||
if ('value' in desc || desc.initializer) {
|
||||
desc.writable = true;
|
||||
}
|
||||
|
||||
desc = decorators.slice().reverse().reduce(function (desc, decorator) {
|
||||
return decorator(target, property, desc) || desc;
|
||||
}, desc);
|
||||
|
||||
if (context && desc.initializer !== void 0) {
|
||||
desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
|
||||
desc.initializer = undefined;
|
||||
}
|
||||
|
||||
if (desc.initializer === void 0) {
|
||||
Object.defineProperty(target, property, desc);
|
||||
desc = null;
|
||||
}
|
||||
|
||||
return desc;
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
export default function _arrayLikeToArray(arr, len) {
|
||||
if (len == null || len > arr.length) len = arr.length;
|
||||
|
||||
for (var i = 0, arr2 = new Array(len); i < len; i++) {
|
||||
arr2[i] = arr[i];
|
||||
}
|
||||
|
||||
return arr2;
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export default function _arrayWithHoles(arr) {
|
||||
if (Array.isArray(arr)) return arr;
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
import arrayLikeToArray from "./arrayLikeToArray";
|
||||
export default function _arrayWithoutHoles(arr) {
|
||||
if (Array.isArray(arr)) return arrayLikeToArray(arr);
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
export default function _assertThisInitialized(self) {
|
||||
if (self === void 0) {
|
||||
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
export default function _asyncGeneratorDelegate(inner, awaitWrap) {
|
||||
var iter = {},
|
||||
waiting = false;
|
||||
|
||||
function pump(key, value) {
|
||||
waiting = true;
|
||||
value = new Promise(function (resolve) {
|
||||
resolve(inner[key](value));
|
||||
});
|
||||
return {
|
||||
done: false,
|
||||
value: awaitWrap(value)
|
||||
};
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
if (typeof Symbol === "function" && Symbol.iterator) {
|
||||
iter[Symbol.iterator] = function () {
|
||||
return this;
|
||||
};
|
||||
}
|
||||
|
||||
iter.next = function (value) {
|
||||
if (waiting) {
|
||||
waiting = false;
|
||||
return value;
|
||||
}
|
||||
|
||||
return pump("next", value);
|
||||
};
|
||||
|
||||
if (typeof inner["throw"] === "function") {
|
||||
iter["throw"] = function (value) {
|
||||
if (waiting) {
|
||||
waiting = false;
|
||||
throw value;
|
||||
}
|
||||
|
||||
return pump("throw", value);
|
||||
};
|
||||
}
|
||||
|
||||
if (typeof inner["return"] === "function") {
|
||||
iter["return"] = function (value) {
|
||||
if (waiting) {
|
||||
waiting = false;
|
||||
return value;
|
||||
}
|
||||
|
||||
return pump("return", value);
|
||||
};
|
||||
}
|
||||
|
||||
return iter;
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
export default function _asyncIterator(iterable) {
|
||||
var method;
|
||||
|
||||
if (typeof Symbol !== "undefined") {
|
||||
if (Symbol.asyncIterator) {
|
||||
method = iterable[Symbol.asyncIterator];
|
||||
if (method != null) return method.call(iterable);
|
||||
}
|
||||
|
||||
if (Symbol.iterator) {
|
||||
method = iterable[Symbol.iterator];
|
||||
if (method != null) return method.call(iterable);
|
||||
}
|
||||
}
|
||||
|
||||
throw new TypeError("Object is not async iterable");
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
||||
try {
|
||||
var info = gen[key](arg);
|
||||
var value = info.value;
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (info.done) {
|
||||
resolve(value);
|
||||
} else {
|
||||
Promise.resolve(value).then(_next, _throw);
|
||||
}
|
||||
}
|
||||
|
||||
export default function _asyncToGenerator(fn) {
|
||||
return function () {
|
||||
var self = this,
|
||||
args = arguments;
|
||||
return new Promise(function (resolve, reject) {
|
||||
var gen = fn.apply(self, args);
|
||||
|
||||
function _next(value) {
|
||||
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
||||
}
|
||||
|
||||
function _throw(err) {
|
||||
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
||||
}
|
||||
|
||||
_next(undefined);
|
||||
});
|
||||
};
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
import AwaitValue from "./AwaitValue";
|
||||
export default function _awaitAsyncGenerator(value) {
|
||||
return new AwaitValue(value);
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
export default function _classCallCheck(instance, Constructor) {
|
||||
if (!(instance instanceof Constructor)) {
|
||||
throw new TypeError("Cannot call a class as a function");
|
||||
}
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export default function _classNameTDZError(name) {
|
||||
throw new Error("Class \"" + name + "\" cannot be referenced in computed property keys.");
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
export default function _classPrivateFieldDestructureSet(receiver, privateMap) {
|
||||
if (!privateMap.has(receiver)) {
|
||||
throw new TypeError("attempted to set private field on non-instance");
|
||||
}
|
||||
|
||||
var descriptor = privateMap.get(receiver);
|
||||
|
||||
if (descriptor.set) {
|
||||
if (!("__destrObj" in descriptor)) {
|
||||
descriptor.__destrObj = {
|
||||
set value(v) {
|
||||
descriptor.set.call(receiver, v);
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
return descriptor.__destrObj;
|
||||
} else {
|
||||
if (!descriptor.writable) {
|
||||
throw new TypeError("attempted to set read only private field");
|
||||
}
|
||||
|
||||
return descriptor;
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
export default function _classPrivateFieldGet(receiver, privateMap) {
|
||||
var descriptor = privateMap.get(receiver);
|
||||
|
||||
if (!descriptor) {
|
||||
throw new TypeError("attempted to get private field on non-instance");
|
||||
}
|
||||
|
||||
if (descriptor.get) {
|
||||
return descriptor.get.call(receiver);
|
||||
}
|
||||
|
||||
return descriptor.value;
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
export default function _classPrivateFieldBase(receiver, privateKey) {
|
||||
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
|
||||
throw new TypeError("attempted to use private field on non-instance");
|
||||
}
|
||||
|
||||
return receiver;
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
var id = 0;
|
||||
export default function _classPrivateFieldKey(name) {
|
||||
return "__private_" + id++ + "_" + name;
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
export default function _classPrivateFieldSet(receiver, privateMap, value) {
|
||||
var descriptor = privateMap.get(receiver);
|
||||
|
||||
if (!descriptor) {
|
||||
throw new TypeError("attempted to set private field on non-instance");
|
||||
}
|
||||
|
||||
if (descriptor.set) {
|
||||
descriptor.set.call(receiver, value);
|
||||
} else {
|
||||
if (!descriptor.writable) {
|
||||
throw new TypeError("attempted to set read only private field");
|
||||
}
|
||||
|
||||
descriptor.value = value;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
export default function _classPrivateMethodGet(receiver, privateSet, fn) {
|
||||
if (!privateSet.has(receiver)) {
|
||||
throw new TypeError("attempted to get private field on non-instance");
|
||||
}
|
||||
|
||||
return fn;
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export default function _classPrivateMethodSet() {
|
||||
throw new TypeError("attempted to reassign private method");
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
export default function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {
|
||||
if (receiver !== classConstructor) {
|
||||
throw new TypeError("Private static access of wrong provenance");
|
||||
}
|
||||
|
||||
if (descriptor.get) {
|
||||
return descriptor.get.call(receiver);
|
||||
}
|
||||
|
||||
return descriptor.value;
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
export default function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) {
|
||||
if (receiver !== classConstructor) {
|
||||
throw new TypeError("Private static access of wrong provenance");
|
||||
}
|
||||
|
||||
if (descriptor.set) {
|
||||
descriptor.set.call(receiver, value);
|
||||
} else {
|
||||
if (!descriptor.writable) {
|
||||
throw new TypeError("attempted to set read only private field");
|
||||
}
|
||||
|
||||
descriptor.value = value;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
export default function _classStaticPrivateMethodGet(receiver, classConstructor, method) {
|
||||
if (receiver !== classConstructor) {
|
||||
throw new TypeError("Private static access of wrong provenance");
|
||||
}
|
||||
|
||||
return method;
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export default function _classStaticPrivateMethodSet() {
|
||||
throw new TypeError("attempted to set read only static private field");
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
import setPrototypeOf from "./setPrototypeOf";
|
||||
import isNativeReflectConstruct from "./isNativeReflectConstruct";
|
||||
export default function _construct(Parent, args, Class) {
|
||||
if (isNativeReflectConstruct()) {
|
||||
_construct = Reflect.construct;
|
||||
} else {
|
||||
_construct = function _construct(Parent, args, Class) {
|
||||
var a = [null];
|
||||
a.push.apply(a, args);
|
||||
var Constructor = Function.bind.apply(Parent, a);
|
||||
var instance = new Constructor();
|
||||
if (Class) setPrototypeOf(instance, Class.prototype);
|
||||
return instance;
|
||||
};
|
||||
}
|
||||
|
||||
return _construct.apply(null, arguments);
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
export default function _createClass(Constructor, protoProps, staticProps) {
|
||||
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
||||
if (staticProps) _defineProperties(Constructor, staticProps);
|
||||
return Constructor;
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
import unsupportedIterableToArray from "./unsupportedIterableToArray";
|
||||
export default function _createForOfIteratorHelper(o, allowArrayLike) {
|
||||
var it;
|
||||
|
||||
if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
|
||||
if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
||||
if (it) o = it;
|
||||
var i = 0;
|
||||
|
||||
var F = function F() {};
|
||||
|
||||
return {
|
||||
s: F,
|
||||
n: function n() {
|
||||
if (i >= o.length) return {
|
||||
done: true
|
||||
};
|
||||
return {
|
||||
done: false,
|
||||
value: o[i++]
|
||||
};
|
||||
},
|
||||
e: function e(_e) {
|
||||
throw _e;
|
||||
},
|
||||
f: F
|
||||
};
|
||||
}
|
||||
|
||||
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
||||
}
|
||||
|
||||
var normalCompletion = true,
|
||||
didErr = false,
|
||||
err;
|
||||
return {
|
||||
s: function s() {
|
||||
it = o[Symbol.iterator]();
|
||||
},
|
||||
n: function n() {
|
||||
var step = it.next();
|
||||
normalCompletion = step.done;
|
||||
return step;
|
||||
},
|
||||
e: function e(_e2) {
|
||||
didErr = true;
|
||||
err = _e2;
|
||||
},
|
||||
f: function f() {
|
||||
try {
|
||||
if (!normalCompletion && it["return"] != null) it["return"]();
|
||||
} finally {
|
||||
if (didErr) throw err;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
import unsupportedIterableToArray from "./unsupportedIterableToArray";
|
||||
export default function _createForOfIteratorHelperLoose(o, allowArrayLike) {
|
||||
var it;
|
||||
|
||||
if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
|
||||
if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
||||
if (it) o = it;
|
||||
var i = 0;
|
||||
return function () {
|
||||
if (i >= o.length) return {
|
||||
done: true
|
||||
};
|
||||
return {
|
||||
done: false,
|
||||
value: o[i++]
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
||||
}
|
||||
|
||||
it = o[Symbol.iterator]();
|
||||
return it.next.bind(it);
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
import getPrototypeOf from "./getPrototypeOf";
|
||||
import isNativeReflectConstruct from "./isNativeReflectConstruct";
|
||||
import possibleConstructorReturn from "./possibleConstructorReturn";
|
||||
export default function _createSuper(Derived) {
|
||||
var hasNativeReflectConstruct = isNativeReflectConstruct();
|
||||
return function _createSuperInternal() {
|
||||
var Super = getPrototypeOf(Derived),
|
||||
result;
|
||||
|
||||
if (hasNativeReflectConstruct) {
|
||||
var NewTarget = getPrototypeOf(this).constructor;
|
||||
result = Reflect.construct(Super, arguments, NewTarget);
|
||||
} else {
|
||||
result = Super.apply(this, arguments);
|
||||
}
|
||||
|
||||
return possibleConstructorReturn(this, result);
|
||||
};
|
||||
}
|
||||
+396
@@ -0,0 +1,396 @@
|
||||
import toArray from "./toArray";
|
||||
import toPropertyKey from "./toPropertyKey";
|
||||
export default function _decorate(decorators, factory, superClass, mixins) {
|
||||
var api = _getDecoratorsApi();
|
||||
|
||||
if (mixins) {
|
||||
for (var i = 0; i < mixins.length; i++) {
|
||||
api = mixins[i](api);
|
||||
}
|
||||
}
|
||||
|
||||
var r = factory(function initialize(O) {
|
||||
api.initializeInstanceElements(O, decorated.elements);
|
||||
}, superClass);
|
||||
var decorated = api.decorateClass(_coalesceClassElements(r.d.map(_createElementDescriptor)), decorators);
|
||||
api.initializeClassElements(r.F, decorated.elements);
|
||||
return api.runClassFinishers(r.F, decorated.finishers);
|
||||
}
|
||||
|
||||
function _getDecoratorsApi() {
|
||||
_getDecoratorsApi = function _getDecoratorsApi() {
|
||||
return api;
|
||||
};
|
||||
|
||||
var api = {
|
||||
elementsDefinitionOrder: [["method"], ["field"]],
|
||||
initializeInstanceElements: function initializeInstanceElements(O, elements) {
|
||||
["method", "field"].forEach(function (kind) {
|
||||
elements.forEach(function (element) {
|
||||
if (element.kind === kind && element.placement === "own") {
|
||||
this.defineClassElement(O, element);
|
||||
}
|
||||
}, this);
|
||||
}, this);
|
||||
},
|
||||
initializeClassElements: function initializeClassElements(F, elements) {
|
||||
var proto = F.prototype;
|
||||
["method", "field"].forEach(function (kind) {
|
||||
elements.forEach(function (element) {
|
||||
var placement = element.placement;
|
||||
|
||||
if (element.kind === kind && (placement === "static" || placement === "prototype")) {
|
||||
var receiver = placement === "static" ? F : proto;
|
||||
this.defineClassElement(receiver, element);
|
||||
}
|
||||
}, this);
|
||||
}, this);
|
||||
},
|
||||
defineClassElement: function defineClassElement(receiver, element) {
|
||||
var descriptor = element.descriptor;
|
||||
|
||||
if (element.kind === "field") {
|
||||
var initializer = element.initializer;
|
||||
descriptor = {
|
||||
enumerable: descriptor.enumerable,
|
||||
writable: descriptor.writable,
|
||||
configurable: descriptor.configurable,
|
||||
value: initializer === void 0 ? void 0 : initializer.call(receiver)
|
||||
};
|
||||
}
|
||||
|
||||
Object.defineProperty(receiver, element.key, descriptor);
|
||||
},
|
||||
decorateClass: function decorateClass(elements, decorators) {
|
||||
var newElements = [];
|
||||
var finishers = [];
|
||||
var placements = {
|
||||
"static": [],
|
||||
prototype: [],
|
||||
own: []
|
||||
};
|
||||
elements.forEach(function (element) {
|
||||
this.addElementPlacement(element, placements);
|
||||
}, this);
|
||||
elements.forEach(function (element) {
|
||||
if (!_hasDecorators(element)) return newElements.push(element);
|
||||
var elementFinishersExtras = this.decorateElement(element, placements);
|
||||
newElements.push(elementFinishersExtras.element);
|
||||
newElements.push.apply(newElements, elementFinishersExtras.extras);
|
||||
finishers.push.apply(finishers, elementFinishersExtras.finishers);
|
||||
}, this);
|
||||
|
||||
if (!decorators) {
|
||||
return {
|
||||
elements: newElements,
|
||||
finishers: finishers
|
||||
};
|
||||
}
|
||||
|
||||
var result = this.decorateConstructor(newElements, decorators);
|
||||
finishers.push.apply(finishers, result.finishers);
|
||||
result.finishers = finishers;
|
||||
return result;
|
||||
},
|
||||
addElementPlacement: function addElementPlacement(element, placements, silent) {
|
||||
var keys = placements[element.placement];
|
||||
|
||||
if (!silent && keys.indexOf(element.key) !== -1) {
|
||||
throw new TypeError("Duplicated element (" + element.key + ")");
|
||||
}
|
||||
|
||||
keys.push(element.key);
|
||||
},
|
||||
decorateElement: function decorateElement(element, placements) {
|
||||
var extras = [];
|
||||
var finishers = [];
|
||||
|
||||
for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {
|
||||
var keys = placements[element.placement];
|
||||
keys.splice(keys.indexOf(element.key), 1);
|
||||
var elementObject = this.fromElementDescriptor(element);
|
||||
var elementFinisherExtras = this.toElementFinisherExtras((0, decorators[i])(elementObject) || elementObject);
|
||||
element = elementFinisherExtras.element;
|
||||
this.addElementPlacement(element, placements);
|
||||
|
||||
if (elementFinisherExtras.finisher) {
|
||||
finishers.push(elementFinisherExtras.finisher);
|
||||
}
|
||||
|
||||
var newExtras = elementFinisherExtras.extras;
|
||||
|
||||
if (newExtras) {
|
||||
for (var j = 0; j < newExtras.length; j++) {
|
||||
this.addElementPlacement(newExtras[j], placements);
|
||||
}
|
||||
|
||||
extras.push.apply(extras, newExtras);
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
element: element,
|
||||
finishers: finishers,
|
||||
extras: extras
|
||||
};
|
||||
},
|
||||
decorateConstructor: function decorateConstructor(elements, decorators) {
|
||||
var finishers = [];
|
||||
|
||||
for (var i = decorators.length - 1; i >= 0; i--) {
|
||||
var obj = this.fromClassDescriptor(elements);
|
||||
var elementsAndFinisher = this.toClassDescriptor((0, decorators[i])(obj) || obj);
|
||||
|
||||
if (elementsAndFinisher.finisher !== undefined) {
|
||||
finishers.push(elementsAndFinisher.finisher);
|
||||
}
|
||||
|
||||
if (elementsAndFinisher.elements !== undefined) {
|
||||
elements = elementsAndFinisher.elements;
|
||||
|
||||
for (var j = 0; j < elements.length - 1; j++) {
|
||||
for (var k = j + 1; k < elements.length; k++) {
|
||||
if (elements[j].key === elements[k].key && elements[j].placement === elements[k].placement) {
|
||||
throw new TypeError("Duplicated element (" + elements[j].key + ")");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
elements: elements,
|
||||
finishers: finishers
|
||||
};
|
||||
},
|
||||
fromElementDescriptor: function fromElementDescriptor(element) {
|
||||
var obj = {
|
||||
kind: element.kind,
|
||||
key: element.key,
|
||||
placement: element.placement,
|
||||
descriptor: element.descriptor
|
||||
};
|
||||
var desc = {
|
||||
value: "Descriptor",
|
||||
configurable: true
|
||||
};
|
||||
Object.defineProperty(obj, Symbol.toStringTag, desc);
|
||||
if (element.kind === "field") obj.initializer = element.initializer;
|
||||
return obj;
|
||||
},
|
||||
toElementDescriptors: function toElementDescriptors(elementObjects) {
|
||||
if (elementObjects === undefined) return;
|
||||
return toArray(elementObjects).map(function (elementObject) {
|
||||
var element = this.toElementDescriptor(elementObject);
|
||||
this.disallowProperty(elementObject, "finisher", "An element descriptor");
|
||||
this.disallowProperty(elementObject, "extras", "An element descriptor");
|
||||
return element;
|
||||
}, this);
|
||||
},
|
||||
toElementDescriptor: function toElementDescriptor(elementObject) {
|
||||
var kind = String(elementObject.kind);
|
||||
|
||||
if (kind !== "method" && kind !== "field") {
|
||||
throw new TypeError('An element descriptor\'s .kind property must be either "method" or' + ' "field", but a decorator created an element descriptor with' + ' .kind "' + kind + '"');
|
||||
}
|
||||
|
||||
var key = toPropertyKey(elementObject.key);
|
||||
var placement = String(elementObject.placement);
|
||||
|
||||
if (placement !== "static" && placement !== "prototype" && placement !== "own") {
|
||||
throw new TypeError('An element descriptor\'s .placement property must be one of "static",' + ' "prototype" or "own", but a decorator created an element descriptor' + ' with .placement "' + placement + '"');
|
||||
}
|
||||
|
||||
var descriptor = elementObject.descriptor;
|
||||
this.disallowProperty(elementObject, "elements", "An element descriptor");
|
||||
var element = {
|
||||
kind: kind,
|
||||
key: key,
|
||||
placement: placement,
|
||||
descriptor: Object.assign({}, descriptor)
|
||||
};
|
||||
|
||||
if (kind !== "field") {
|
||||
this.disallowProperty(elementObject, "initializer", "A method descriptor");
|
||||
} else {
|
||||
this.disallowProperty(descriptor, "get", "The property descriptor of a field descriptor");
|
||||
this.disallowProperty(descriptor, "set", "The property descriptor of a field descriptor");
|
||||
this.disallowProperty(descriptor, "value", "The property descriptor of a field descriptor");
|
||||
element.initializer = elementObject.initializer;
|
||||
}
|
||||
|
||||
return element;
|
||||
},
|
||||
toElementFinisherExtras: function toElementFinisherExtras(elementObject) {
|
||||
var element = this.toElementDescriptor(elementObject);
|
||||
|
||||
var finisher = _optionalCallableProperty(elementObject, "finisher");
|
||||
|
||||
var extras = this.toElementDescriptors(elementObject.extras);
|
||||
return {
|
||||
element: element,
|
||||
finisher: finisher,
|
||||
extras: extras
|
||||
};
|
||||
},
|
||||
fromClassDescriptor: function fromClassDescriptor(elements) {
|
||||
var obj = {
|
||||
kind: "class",
|
||||
elements: elements.map(this.fromElementDescriptor, this)
|
||||
};
|
||||
var desc = {
|
||||
value: "Descriptor",
|
||||
configurable: true
|
||||
};
|
||||
Object.defineProperty(obj, Symbol.toStringTag, desc);
|
||||
return obj;
|
||||
},
|
||||
toClassDescriptor: function toClassDescriptor(obj) {
|
||||
var kind = String(obj.kind);
|
||||
|
||||
if (kind !== "class") {
|
||||
throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator' + ' created a class descriptor with .kind "' + kind + '"');
|
||||
}
|
||||
|
||||
this.disallowProperty(obj, "key", "A class descriptor");
|
||||
this.disallowProperty(obj, "placement", "A class descriptor");
|
||||
this.disallowProperty(obj, "descriptor", "A class descriptor");
|
||||
this.disallowProperty(obj, "initializer", "A class descriptor");
|
||||
this.disallowProperty(obj, "extras", "A class descriptor");
|
||||
|
||||
var finisher = _optionalCallableProperty(obj, "finisher");
|
||||
|
||||
var elements = this.toElementDescriptors(obj.elements);
|
||||
return {
|
||||
elements: elements,
|
||||
finisher: finisher
|
||||
};
|
||||
},
|
||||
runClassFinishers: function runClassFinishers(constructor, finishers) {
|
||||
for (var i = 0; i < finishers.length; i++) {
|
||||
var newConstructor = (0, finishers[i])(constructor);
|
||||
|
||||
if (newConstructor !== undefined) {
|
||||
if (typeof newConstructor !== "function") {
|
||||
throw new TypeError("Finishers must return a constructor.");
|
||||
}
|
||||
|
||||
constructor = newConstructor;
|
||||
}
|
||||
}
|
||||
|
||||
return constructor;
|
||||
},
|
||||
disallowProperty: function disallowProperty(obj, name, objectType) {
|
||||
if (obj[name] !== undefined) {
|
||||
throw new TypeError(objectType + " can't have a ." + name + " property.");
|
||||
}
|
||||
}
|
||||
};
|
||||
return api;
|
||||
}
|
||||
|
||||
function _createElementDescriptor(def) {
|
||||
var key = toPropertyKey(def.key);
|
||||
var descriptor;
|
||||
|
||||
if (def.kind === "method") {
|
||||
descriptor = {
|
||||
value: def.value,
|
||||
writable: true,
|
||||
configurable: true,
|
||||
enumerable: false
|
||||
};
|
||||
} else if (def.kind === "get") {
|
||||
descriptor = {
|
||||
get: def.value,
|
||||
configurable: true,
|
||||
enumerable: false
|
||||
};
|
||||
} else if (def.kind === "set") {
|
||||
descriptor = {
|
||||
set: def.value,
|
||||
configurable: true,
|
||||
enumerable: false
|
||||
};
|
||||
} else if (def.kind === "field") {
|
||||
descriptor = {
|
||||
configurable: true,
|
||||
writable: true,
|
||||
enumerable: true
|
||||
};
|
||||
}
|
||||
|
||||
var element = {
|
||||
kind: def.kind === "field" ? "field" : "method",
|
||||
key: key,
|
||||
placement: def["static"] ? "static" : def.kind === "field" ? "own" : "prototype",
|
||||
descriptor: descriptor
|
||||
};
|
||||
if (def.decorators) element.decorators = def.decorators;
|
||||
if (def.kind === "field") element.initializer = def.value;
|
||||
return element;
|
||||
}
|
||||
|
||||
function _coalesceGetterSetter(element, other) {
|
||||
if (element.descriptor.get !== undefined) {
|
||||
other.descriptor.get = element.descriptor.get;
|
||||
} else {
|
||||
other.descriptor.set = element.descriptor.set;
|
||||
}
|
||||
}
|
||||
|
||||
function _coalesceClassElements(elements) {
|
||||
var newElements = [];
|
||||
|
||||
var isSameElement = function isSameElement(other) {
|
||||
return other.kind === "method" && other.key === element.key && other.placement === element.placement;
|
||||
};
|
||||
|
||||
for (var i = 0; i < elements.length; i++) {
|
||||
var element = elements[i];
|
||||
var other;
|
||||
|
||||
if (element.kind === "method" && (other = newElements.find(isSameElement))) {
|
||||
if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {
|
||||
if (_hasDecorators(element) || _hasDecorators(other)) {
|
||||
throw new ReferenceError("Duplicated methods (" + element.key + ") can't be decorated.");
|
||||
}
|
||||
|
||||
other.descriptor = element.descriptor;
|
||||
} else {
|
||||
if (_hasDecorators(element)) {
|
||||
if (_hasDecorators(other)) {
|
||||
throw new ReferenceError("Decorators can't be placed on different accessors with for " + "the same property (" + element.key + ").");
|
||||
}
|
||||
|
||||
other.decorators = element.decorators;
|
||||
}
|
||||
|
||||
_coalesceGetterSetter(element, other);
|
||||
}
|
||||
} else {
|
||||
newElements.push(element);
|
||||
}
|
||||
}
|
||||
|
||||
return newElements;
|
||||
}
|
||||
|
||||
function _hasDecorators(element) {
|
||||
return element.decorators && element.decorators.length;
|
||||
}
|
||||
|
||||
function _isDataDescriptor(desc) {
|
||||
return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);
|
||||
}
|
||||
|
||||
function _optionalCallableProperty(obj, name) {
|
||||
var value = obj[name];
|
||||
|
||||
if (value !== undefined && typeof value !== "function") {
|
||||
throw new TypeError("Expected '" + name + "' to be a function");
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
export default function _defaults(obj, defaults) {
|
||||
var keys = Object.getOwnPropertyNames(defaults);
|
||||
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
var key = keys[i];
|
||||
var value = Object.getOwnPropertyDescriptor(defaults, key);
|
||||
|
||||
if (value && value.configurable && obj[key] === undefined) {
|
||||
Object.defineProperty(obj, key, value);
|
||||
}
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
export default function _defineEnumerableProperties(obj, descs) {
|
||||
for (var key in descs) {
|
||||
var desc = descs[key];
|
||||
desc.configurable = desc.enumerable = true;
|
||||
if ("value" in desc) desc.writable = true;
|
||||
Object.defineProperty(obj, key, desc);
|
||||
}
|
||||
|
||||
if (Object.getOwnPropertySymbols) {
|
||||
var objectSymbols = Object.getOwnPropertySymbols(descs);
|
||||
|
||||
for (var i = 0; i < objectSymbols.length; i++) {
|
||||
var sym = objectSymbols[i];
|
||||
var desc = descs[sym];
|
||||
desc.configurable = desc.enumerable = true;
|
||||
if ("value" in desc) desc.writable = true;
|
||||
Object.defineProperty(obj, sym, desc);
|
||||
}
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user