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 {
|
func (s *Server) BuildRoutes() http.Handler {
|
||||||
r := chi.NewRouter()
|
r := chi.NewRouter()
|
||||||
|
|
||||||
|
r.Use(cors)
|
||||||
r.Use(middleware.RequestID)
|
r.Use(middleware.RequestID)
|
||||||
r.Use(middleware.RealIP)
|
r.Use(middleware.RealIP)
|
||||||
r.Use(middleware.Logger)
|
r.Use(middleware.Logger)
|
||||||
|
|||||||
@@ -13,6 +13,23 @@ import (
|
|||||||
"github.com/go-chi/chi"
|
"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.
|
// renterCtx is a convenience handler to fetch the renter with the provided renterId URLParam.
|
||||||
func (s *Server) renterCtx(next http.Handler) http.Handler {
|
func (s *Server) renterCtx(next http.Handler) http.Handler {
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
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",
|
"resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-7.2.1.tgz",
|
||||||
"integrity": "sha512-oZ0Ib5I4Z2pUEcoo95cT1cr6slco9WY7yiPpG+RGNkj8YcYgJnM7pXmYmorNOReh8MIGcKSqXyeGjxnr8YiZbA=="
|
"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": {
|
"@types/babel__core": {
|
||||||
"version": "7.1.7",
|
"version": "7.1.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz",
|
"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",
|
"resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
|
||||||
"integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug=="
|
"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": {
|
"@types/react": {
|
||||||
"version": "16.9.35",
|
"version": "16.9.35",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.35.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.35.tgz",
|
||||||
@@ -1802,6 +1818,17 @@
|
|||||||
"@types/react": "*"
|
"@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": {
|
"@types/react-router": {
|
||||||
"version": "5.1.7",
|
"version": "5.1.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.7.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.7.tgz",
|
||||||
@@ -1821,6 +1848,22 @@
|
|||||||
"@types/react-router": "*"
|
"@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": {
|
"@types/stack-utils": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
|
"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",
|
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz",
|
||||||
"integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA=="
|
"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": {
|
"axobject-query": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.1.2.tgz",
|
||||||
@@ -10481,6 +10555,11 @@
|
|||||||
"performance-now": "^2.1.0"
|
"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": {
|
"randombytes": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
||||||
@@ -10817,6 +10896,18 @@
|
|||||||
"warning": "^4.0.2"
|
"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": {
|
"react-router": {
|
||||||
"version": "5.2.0",
|
"version": "5.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz",
|
||||||
@@ -11025,6 +11116,25 @@
|
|||||||
"strip-indent": "^3.0.0"
|
"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": {
|
"regenerate": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
|
||||||
@@ -12526,6 +12636,11 @@
|
|||||||
"util.promisify": "~1.0.0"
|
"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": {
|
"symbol-tree": {
|
||||||
"version": "3.2.4",
|
"version": "3.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
"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",
|
"resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz",
|
||||||
"integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ=="
|
"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": {
|
"tslib": {
|
||||||
"version": "1.13.0",
|
"version": "1.13.0",
|
||||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
|
||||||
|
|||||||
@@ -9,18 +9,28 @@
|
|||||||
"@testing-library/jest-dom": "^4.2.4",
|
"@testing-library/jest-dom": "^4.2.4",
|
||||||
"@testing-library/react": "^9.5.0",
|
"@testing-library/react": "^9.5.0",
|
||||||
"@testing-library/user-event": "^7.2.1",
|
"@testing-library/user-event": "^7.2.1",
|
||||||
|
"@types/axios": "^0.14.0",
|
||||||
"@types/jest": "^24.9.1",
|
"@types/jest": "^24.9.1",
|
||||||
"@types/node": "^12.12.42",
|
"@types/node": "^12.12.42",
|
||||||
|
"@types/ramda": "^0.27.6",
|
||||||
"@types/react": "^16.9.35",
|
"@types/react": "^16.9.35",
|
||||||
"@types/react-dom": "^16.9.8",
|
"@types/react-dom": "^16.9.8",
|
||||||
|
"@types/react-redux": "^7.1.9",
|
||||||
"@types/react-router": "^5.1.7",
|
"@types/react-router": "^5.1.7",
|
||||||
"@types/react-router-dom": "^5.1.5",
|
"@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",
|
"@types/styled-components": "^5.1.0",
|
||||||
|
"axios": "^0.19.2",
|
||||||
|
"ramda": "^0.27.0",
|
||||||
"react": "^16.13.1",
|
"react": "^16.13.1",
|
||||||
"react-dom": "^16.13.1",
|
"react-dom": "^16.13.1",
|
||||||
|
"react-redux": "^7.2.0",
|
||||||
"react-router": "^5.2.0",
|
"react-router": "^5.2.0",
|
||||||
"react-router-dom": "^5.2.0",
|
"react-router-dom": "^5.2.0",
|
||||||
"react-scripts": "3.4.1",
|
"react-scripts": "3.4.1",
|
||||||
|
"redux-devtools-extension": "^2.13.8",
|
||||||
|
"redux-thunk": "^2.3.0",
|
||||||
"semantic-ui-react": "^0.88.2",
|
"semantic-ui-react": "^0.88.2",
|
||||||
"styled-components": "^5.1.1",
|
"styled-components": "^5.1.1",
|
||||||
"typescript": "^3.7.5"
|
"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 Header from './Header/Header';
|
||||||
import Library from './Library/Library';
|
import Library from './Library/Library';
|
||||||
|
import Cart from './Cart/Cart';
|
||||||
import Renters from './Renters/Renters';
|
import Renters from './Renters/Renters';
|
||||||
|
|
||||||
const ContentContainer = styled.div`
|
const ContentContainer = styled.div`
|
||||||
@@ -18,6 +19,8 @@ const Content: React.FC = () => (
|
|||||||
<Route path="/library" component={Library} />
|
<Route path="/library" component={Library} />
|
||||||
<Route path="/renters" component={Renters} />
|
<Route path="/renters" component={Renters} />
|
||||||
<Route path="/return" component={Renters} />
|
<Route path="/return" component={Renters} />
|
||||||
|
<Route path="/checkout" component={Cart} />
|
||||||
|
<Route path="/checkout" component={Renters} />
|
||||||
</ContentContainer>
|
</ContentContainer>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ const ButtonBayContainer = styled.div`
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-left: 7.5px;
|
margin-left: 35px;
|
||||||
width: 320px;
|
width: 320px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
`
|
`
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
|
|
||||||
|
import { useDispatch } from 'react-redux';
|
||||||
|
import { actionTypes } from '../../../../constants/books/action_types';
|
||||||
|
|
||||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||||
import { faSearch } from '@fortawesome/free-solid-svg-icons';
|
import { faSearch } from '@fortawesome/free-solid-svg-icons';
|
||||||
|
|
||||||
const SearchContainer = styled.div`
|
const SearchContainer = styled.div`
|
||||||
width: 250px;
|
width: 350px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -21,22 +24,30 @@ const StyledInput = styled.input`
|
|||||||
color: #13334A;
|
color: #13334A;
|
||||||
font-size: 1.25rem;
|
font-size: 1.25rem;
|
||||||
outline: none;
|
outline: none;
|
||||||
padding-left: 20px;
|
padding: 0 40px 0 20px;
|
||||||
box-shadow: 10px 5px 15px rgba(0,0,0,50)
|
box-shadow: 10px 5px 15px rgba(0,0,0,50)
|
||||||
`
|
`
|
||||||
|
|
||||||
const StyledIcon = styled(FontAwesomeIcon)`
|
const StyledIcon = styled(FontAwesomeIcon)`
|
||||||
color: #D97925;
|
color: #D97925;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 25px;
|
right: 50px;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
`
|
`
|
||||||
|
|
||||||
const Search: React.FC = () => (
|
const Search: React.FC = () => {
|
||||||
<SearchContainer>
|
const dispatch = useDispatch();
|
||||||
<StyledInput />
|
|
||||||
<StyledIcon icon={faSearch} />
|
return (
|
||||||
</SearchContainer>
|
<SearchContainer>
|
||||||
)
|
<StyledInput
|
||||||
|
onChange={(e: React.FormEvent<HTMLInputElement>) => {
|
||||||
|
dispatch({ type: actionTypes.SET_FILTER, data: e.currentTarget.value });
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<StyledIcon icon={faSearch} />
|
||||||
|
</SearchContainer>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
export default Search;
|
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 styled from 'styled-components';
|
||||||
|
|
||||||
|
import { fetchBookCover } from '../../../../actions/books';
|
||||||
|
|
||||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||||
import { faCartPlus } from '@fortawesome/free-solid-svg-icons';
|
import { faCartPlus } from '@fortawesome/free-solid-svg-icons';
|
||||||
|
import { actionTypes } from '../../../../constants/books/action_types';
|
||||||
|
|
||||||
const BookContainer = styled.div`
|
const BookContainer = styled.div`
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -12,8 +16,8 @@ const BookContainer = styled.div`
|
|||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border: 0.1px solid #8C8C8C;
|
border: 0.1px solid #8C8C8C;
|
||||||
box-shadow: 10px 5px 15px rgba(0,0,0,50);
|
box-shadow: 10px 5px 15px rgba(0,0,0,50);
|
||||||
width: 200px;
|
width: 175px;
|
||||||
height: 350px;
|
height: 275px;
|
||||||
`
|
`
|
||||||
|
|
||||||
const IconContainer = styled.div`
|
const IconContainer = styled.div`
|
||||||
@@ -26,12 +30,13 @@ const StyledIcon = styled(FontAwesomeIcon)`
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
transform: translate(220px, -15px);
|
transform: translate(195px, -15px);
|
||||||
font-size: 38px;
|
font-size: 38px;
|
||||||
|
cursor: pointer;
|
||||||
`
|
`
|
||||||
|
|
||||||
const CoverImage = styled.img`
|
const CoverImage = styled.img`
|
||||||
max-width: 90%;
|
max-height: 75%;
|
||||||
width: auto;
|
width: auto;
|
||||||
height: auto;
|
height: auto;
|
||||||
object-fit: contain;
|
object-fit: contain;
|
||||||
@@ -54,20 +59,46 @@ const Author = styled.div`
|
|||||||
type Props = {
|
type Props = {
|
||||||
title: string;
|
title: string;
|
||||||
author: string;
|
author: string;
|
||||||
imageLink: string;
|
isbn: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Book: React.FC<Props> = ({ title, author, imageLink }) => (
|
const Book: React.FC<Props> = ({ title, author, isbn }) => {
|
||||||
<BookContainer>
|
const imageLink = useSelector((state: RootStateOrAny) => state.books.images[title])
|
||||||
<IconContainer>
|
const cart = useSelector((state: RootStateOrAny) => state.books.cart)
|
||||||
<StyledIcon icon={faCartPlus} />
|
const dispatch = useDispatch();
|
||||||
</IconContainer>
|
|
||||||
<CoverImage
|
useEffect(() => {
|
||||||
src={imageLink}
|
if (imageLink === undefined) {
|
||||||
/>
|
dispatch(fetchBookCover(title, isbn))
|
||||||
<Title>{title}</Title>
|
}
|
||||||
<Author>{author}</Author>
|
}, []);
|
||||||
</BookContainer>
|
|
||||||
)
|
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}
|
||||||
|
onClick={handleAddToCart}
|
||||||
|
/>
|
||||||
|
</IconContainer>
|
||||||
|
<CoverImage
|
||||||
|
src={imageLink || 'https://college.indiana.edu/images/publications/book-cover-placeholder.jpg'}
|
||||||
|
/>
|
||||||
|
<Title>{title}</Title>
|
||||||
|
<Author>{author}</Author>
|
||||||
|
</BookContainer>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
export default Book;
|
export default Book;
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
import React from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
|
import { useSelector, useDispatch, RootStateOrAny } from 'react-redux';
|
||||||
|
import { fetchBooks } from '../../../actions/books';
|
||||||
|
|
||||||
import Book from './Book/Book';
|
import Book from './Book/Book';
|
||||||
|
import { BookType } from '../../../types/book';
|
||||||
|
|
||||||
const LibraryContainer = styled.div`
|
const LibraryContainer = styled.div`
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -9,34 +12,29 @@ const LibraryContainer = styled.div`
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
`
|
`
|
||||||
|
|
||||||
const books = [
|
const Library: React.FC = () => {
|
||||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
const books = useSelector((state: RootStateOrAny) => state.books);
|
||||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
const filter = useSelector((state: RootStateOrAny) => state.books.filter);
|
||||||
{title: "To Kill a Mockingbird", author: "Harper Lee", imageLink: "http://www.prepressure.com/images/book-cover-to-kill-a-mocking-bird.jpg"},
|
const dispatch = useDispatch();
|
||||||
{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 = () => (
|
useEffect(() => {
|
||||||
<LibraryContainer>
|
dispatch(fetchBooks())
|
||||||
{books.map(book => (
|
}, []);
|
||||||
|
|
||||||
|
const displayBooks = books.books.filter((book: BookType) => book.title.toLowerCase().indexOf(filter) !== -1);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<LibraryContainer>
|
||||||
|
{displayBooks && displayBooks.map((book: BookType) => (
|
||||||
<Book
|
<Book
|
||||||
title={book.title}
|
key={book.title}
|
||||||
author={book.author}
|
title={book.title || ''}
|
||||||
imageLink={book.imageLink}
|
author={book.author || ''}
|
||||||
|
isbn={book.isbn || ''}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</LibraryContainer>
|
</LibraryContainer>
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
|
||||||
export default Library;
|
export default Library;
|
||||||
@@ -56,7 +56,7 @@ const RenterReturnContainer = styled.div`
|
|||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
name: string;
|
name: string;
|
||||||
phone: string;
|
phoneNumber: string;
|
||||||
email: 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"}
|
{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>
|
<RenterCardContainer>
|
||||||
<RenterImageContainer>
|
<RenterImageContainer>
|
||||||
<RenterImagePlaceholder
|
<RenterImagePlaceholder
|
||||||
@@ -76,7 +76,7 @@ const RenterCard: React.FC<Props> = ({ name, phone, email }) => (
|
|||||||
{name}
|
{name}
|
||||||
</RenterName>
|
</RenterName>
|
||||||
<RenterPhone>
|
<RenterPhone>
|
||||||
{phone}
|
{phoneNumber}
|
||||||
</RenterPhone>
|
</RenterPhone>
|
||||||
<RenterEmail>
|
<RenterEmail>
|
||||||
{email}
|
{email}
|
||||||
|
|||||||
@@ -1,37 +1,36 @@
|
|||||||
import React from 'react';
|
import React, { useEffect } from 'react';
|
||||||
// import styled from 'styled-components';
|
import { useSelector, useDispatch, RootStateOrAny } from 'react-redux';
|
||||||
|
import { fetchRenters } from '../../../actions/renters';
|
||||||
|
|
||||||
import Panel from '../../UIKit/Panel/Panel';
|
import Panel from '../../UIKit/Panel/Panel';
|
||||||
import RenterCard from './RenterCard/RenterCard';
|
import RenterCard from './RenterCard/RenterCard';
|
||||||
|
|
||||||
const renters = [
|
import { RenterType } from '../../../types/renter';
|
||||||
{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'}
|
|
||||||
]
|
|
||||||
|
|
||||||
const Renters: React.FC = () => (
|
const Renters: React.FC = () => {
|
||||||
<Panel style={{
|
const renters = useSelector((state: RootStateOrAny) => state.renters);
|
||||||
display: 'flex',
|
const dispatch = useDispatch();
|
||||||
flexDirection: 'column',
|
|
||||||
flexWrap: 'wrap',
|
useEffect(() => {
|
||||||
justifyContent: 'center'
|
dispatch(fetchRenters())
|
||||||
}}>
|
}, []);
|
||||||
{renters.map(renter => (
|
|
||||||
<RenterCard
|
return (
|
||||||
name={renter.name}
|
<Panel style={{
|
||||||
phone={renter.phone}
|
display: 'flex',
|
||||||
email={renter.email}
|
flexDirection: 'column',
|
||||||
/>
|
flexWrap: 'wrap',
|
||||||
))}
|
justifyContent: 'center'
|
||||||
</Panel>
|
}}>
|
||||||
)
|
{renters && renters.renters.map((renter: RenterType) => (
|
||||||
|
<RenterCard
|
||||||
|
name={renter.name || ''}
|
||||||
|
phoneNumber={renter.phoneNumber || ''}
|
||||||
|
email={renter.email || ''}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</Panel>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
export default Renters;
|
export default Renters;
|
||||||
@@ -13,7 +13,7 @@ const PanelContainer = styled.div`
|
|||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
style: CSS.Properties;
|
style?: CSS.Properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Panel: React.FC<Props> = ({ children, style }) => (
|
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 { BrowserRouter as Router } from 'react-router-dom';
|
||||||
|
|
||||||
|
import { Provider } from 'react-redux';
|
||||||
|
import { store } from './reducers/store';
|
||||||
|
|
||||||
ReactDOM.render(
|
ReactDOM.render(
|
||||||
<React.StrictMode>
|
<React.StrictMode>
|
||||||
<Router>
|
<Router>
|
||||||
<App />
|
<Provider store={store}>
|
||||||
|
<App />
|
||||||
|
</Provider>
|
||||||
</Router>
|
</Router>
|
||||||
</React.StrictMode>,
|
</React.StrictMode>,
|
||||||
document.getElementById('root')
|
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,
|
"noEmit": true,
|
||||||
"jsx": "react",
|
"jsx": "react",
|
||||||
"noUnusedLocals": true,
|
"noUnusedLocals": true,
|
||||||
"noUnusedParameters": true
|
"noUnusedParameters": true,
|
||||||
|
"noImplicitAny": false,
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"src"
|
"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