├── .eslintrc
├── src
├── common
│ ├── config
│ │ ├── index.ts
│ │ └── gender.ts
│ ├── index.ts
│ ├── test.ts
│ └── utils
│ │ ├── index.ts
│ │ └── comma.ts
├── utils
│ ├── util1.ts
│ ├── util2.ts
│ └── index.ts
├── config
│ ├── server.ts
│ ├── env.ts
│ ├── backend
│ │ ├── local.ts
│ │ ├── development.ts
│ │ └── production.ts
│ └── index.ts
├── types
│ ├── user-info.ts
│ └── config.d.ts
├── server.ts
├── controllers
│ ├── index.ts
│ ├── info
│ │ └── add.ts
│ └── list
│ │ └── list.ts
├── models
│ └── user
│ │ └── user-info.ts
└── app.ts
├── client-src
├── config
│ └── index.ts
├── utils
│ └── index.ts
├── types
│ └── unable-webpack-plugins.d.ts
├── index.ejs
├── webpack
│ ├── common.ts
│ ├── dll.ts
│ ├── base.ts
│ ├── dev.ts
│ └── pro.ts
├── tsconfig-for-webpack-config.json
├── .babelrc
├── .eslintrc
├── index.tsx
├── tsconfig.json
├── components
│ ├── index.tsx
│ ├── slide-bar.tsx
│ ├── add.tsx
│ ├── list.tsx
│ └── app.tsx
├── package.json
└── dist
│ └── vendors-manifest.json
├── test
├── conf
│ └── index.ts
├── number-comma.ts
├── number-comma.spec.ts
└── api
│ ├── add-user.spec.ts
│ └── filter-list.spec.ts
├── copy-static-assets.ts
├── nodemon.json
├── tsconfig.json
├── LICENSE
├── .gitignore
├── package.json
└── README.md
/.eslintrc:
--------------------------------------------------------------------------------
1 | extends: blued-typescript
--------------------------------------------------------------------------------
/src/common/config/index.ts:
--------------------------------------------------------------------------------
1 | export * from './gender'
--------------------------------------------------------------------------------
/client-src/config/index.ts:
--------------------------------------------------------------------------------
1 | export * from '@Common/config'
--------------------------------------------------------------------------------
/client-src/utils/index.ts:
--------------------------------------------------------------------------------
1 | export * from '@Common/utils'
--------------------------------------------------------------------------------
/src/common/index.ts:
--------------------------------------------------------------------------------
1 | export { default as test } from './test'
--------------------------------------------------------------------------------
/src/common/test.ts:
--------------------------------------------------------------------------------
1 | export default (str: string) => console.log(str)
--------------------------------------------------------------------------------
/src/common/utils/index.ts:
--------------------------------------------------------------------------------
1 | export { default as comma } from './comma'
--------------------------------------------------------------------------------
/src/utils/util1.ts:
--------------------------------------------------------------------------------
1 | export default () => console.log('util1')
2 |
--------------------------------------------------------------------------------
/src/utils/util2.ts:
--------------------------------------------------------------------------------
1 | export default () => console.log('util2')
2 |
--------------------------------------------------------------------------------
/src/common/config/gender.ts:
--------------------------------------------------------------------------------
1 | export enum Gender {
2 | Male = 1,
3 | Female = 2,
4 | }
--------------------------------------------------------------------------------
/test/conf/index.ts:
--------------------------------------------------------------------------------
1 | export const host = 'http://127.0.0.1'
2 | export const port = 8888
--------------------------------------------------------------------------------
/copy-static-assets.ts:
--------------------------------------------------------------------------------
1 | import * as shell from 'shelljs'
2 |
3 | shell.cp('-R', 'src/public', 'dist/public/')
4 |
--------------------------------------------------------------------------------
/src/common/utils/comma.ts:
--------------------------------------------------------------------------------
1 | export default (num: number): string => String(num).replace(/\B(?=(\d{3})+$)/g, ',')
--------------------------------------------------------------------------------
/test/number-comma.ts:
--------------------------------------------------------------------------------
1 | export default (num: number | string) => String(num).replace(/\B(?=(\d{3})+$)/g, ',')
2 |
--------------------------------------------------------------------------------
/client-src/types/unable-webpack-plugins.d.ts:
--------------------------------------------------------------------------------
1 | declare module 'html-webpack-plugin'
2 |
3 | declare module 'qiniu-webpack-plugin'
--------------------------------------------------------------------------------
/src/utils/index.ts:
--------------------------------------------------------------------------------
1 | export * from '../common/utils'
2 |
3 | export { default as util1 } from './util1'
4 | export { default as util2 } from './util2'
5 |
--------------------------------------------------------------------------------
/client-src/index.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | <%= title %>
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/config/server.ts:
--------------------------------------------------------------------------------
1 | import path from 'path'
2 |
3 | export const app = 'typescript-example'
4 | export const port = 8888
5 | export const distPath = path.resolve(__dirname, '../../client-dist')
--------------------------------------------------------------------------------
/src/config/env.ts:
--------------------------------------------------------------------------------
1 | const env = process.env.NODE_ENV
2 | export let isPro = env === 'production'
3 | export let isDev = env === 'development'
4 | export let isLocal = env === 'local' || env === 'local_dev'
5 |
--------------------------------------------------------------------------------
/src/types/user-info.ts:
--------------------------------------------------------------------------------
1 | export declare type UserData = {
2 | name: string
3 | age?: number
4 | gender: number
5 | }
6 |
7 | export declare type UserInfo = UserData & {
8 | uid: number
9 | }
10 |
--------------------------------------------------------------------------------
/client-src/webpack/common.ts:
--------------------------------------------------------------------------------
1 | import { Configuration } from 'webpack'
2 |
3 | const config: Configuration = {
4 | mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',
5 | }
6 |
7 | export default config
--------------------------------------------------------------------------------
/src/server.ts:
--------------------------------------------------------------------------------
1 | import app from './app'
2 | import { port } from './config'
3 |
4 | export default app.listen(port, () => console.log(`Server run as http://127.0.0.1:${port}`))
5 |
6 | process.on('uncaughtException', console.error)
7 |
--------------------------------------------------------------------------------
/client-src/tsconfig-for-webpack-config.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "baseUrl": ".", // 可以相对这个目录 import 文件
4 | "module": "commonjs",
5 | "target": "es5",
6 | "esModuleInterop": true,
7 | "moduleResolution": "node",
8 | "resolveJsonModule": true,
9 | }
10 | }
--------------------------------------------------------------------------------
/src/config/backend/local.ts:
--------------------------------------------------------------------------------
1 | import { ConfigMap } from 'config'
2 |
3 | export const configs: ConfigMap = {
4 | mysql: {
5 | host: ['127.0.0.1'],
6 | user: 'root',
7 | password: 'jarvis',
8 | database: 'ts_test',
9 | key: 'mysql',
10 | modelPath: 'user',
11 | },
12 | }
13 |
--------------------------------------------------------------------------------
/src/config/backend/development.ts:
--------------------------------------------------------------------------------
1 | import { ConfigMap } from 'config'
2 |
3 | export const configs: ConfigMap = {
4 | mysql: {
5 | host: ['127.0.0.1'],
6 | user: 'root',
7 | password: 'jarvis',
8 | database: 'ts_test',
9 | key: 'mysql',
10 | modelPath: 'user',
11 | },
12 | }
13 |
--------------------------------------------------------------------------------
/src/config/backend/production.ts:
--------------------------------------------------------------------------------
1 | import { ConfigMap } from 'config'
2 |
3 | export const configs: ConfigMap = {
4 | mysql: {
5 | host: ['127.0.0.1'],
6 | user: 'root',
7 | password: 'jarvis',
8 | database: 'ts_test',
9 | key: 'mysql',
10 | modelPath: 'user',
11 | },
12 | }
13 |
--------------------------------------------------------------------------------
/client-src/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | "env",
4 | "react"
5 | ],
6 | "plugins": [
7 | [
8 | "import",
9 | {
10 | "libraryName": "material-ui",
11 | "libraryDirectory": "components",
12 | "camel2DashComponentName": false
13 | }
14 | ]
15 | ]
16 | }
--------------------------------------------------------------------------------
/nodemon.json:
--------------------------------------------------------------------------------
1 | {
2 | "verbose": true,
3 | "ignore": ["public/*", "node_modules/*"],
4 | "events": {
5 | "restart": "osascript -e 'display notification \"App restarted due to:\n'$FILENAME'\" with title \"nodemon\"'"
6 | },
7 | "watch": [
8 | "src/*"
9 | ],
10 | "ext": "ts js json jsx scss hbs html ejs css sass"
11 | }
12 |
--------------------------------------------------------------------------------
/src/types/config.d.ts:
--------------------------------------------------------------------------------
1 | export type MysqlConfig = {
2 | key: string
3 | host: Array
4 | user: string
5 | password: string
6 | database: string
7 | modelPath: string
8 | }
9 |
10 | export type ConfigItem = MysqlConfig | string | Array
11 |
12 | export type ConfigMap = {
13 | [key: string]: ConfigItem
14 | }
15 |
--------------------------------------------------------------------------------
/src/controllers/index.ts:
--------------------------------------------------------------------------------
1 | import {
2 | Get,
3 | Controller,
4 | } from 'routing-controllers'
5 | import cons from 'consolidate'
6 | import path from 'path'
7 |
8 | @Controller()
9 | export default class {
10 | @Get('/')
11 | async router() {
12 | return cons.ejs(path.resolve(__dirname, '../../views/index.ejs'), {
13 | title: 'Example For TypeScript React App',
14 | })
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/client-src/.eslintrc:
--------------------------------------------------------------------------------
1 | extends:
2 | - blued-react
3 | - blued-typescript
4 | rules:
5 | react/jsx-filename-extension:
6 | - 2
7 | - extensions:
8 | - .js
9 | - .jsx
10 | - .ts
11 | - .tsx
12 | import/no-extraneous-dependencies:
13 | - 2
14 | - devDependencies:
15 | - "**/*.test.js"
16 | - "**/*.spec.js"
17 | - "**/webpack*"
18 | - "**/webpack/*"
19 | global-require: 0
20 | typescript/member-ordering: 0
--------------------------------------------------------------------------------
/test/number-comma.spec.ts:
--------------------------------------------------------------------------------
1 | import chai from 'chai'
2 | import numberComma from './number-comma'
3 |
4 | const { expect } = chai
5 |
6 | describe('number-comma', () => {
7 | it('`1234567` should transform to `1,234,567`', done => {
8 | expect(numberComma(1234567)).to.equal('1,234,567')
9 | done()
10 | })
11 |
12 | it('`123` should never transform', done => {
13 | const num = 123
14 | expect(numberComma(num)).to.equal(String(num))
15 | done()
16 | })
17 | })
18 |
--------------------------------------------------------------------------------
/src/models/user/user-info.ts:
--------------------------------------------------------------------------------
1 | import { Model, Table, Column } from 'sequelize-typescript'
2 |
3 | @Table({
4 | tableName: 'user_info_test'
5 | })
6 | export default class UserInfo extends Model {
7 | @Column({
8 | comment: '自增ID',
9 | autoIncrement: true,
10 | primaryKey: true,
11 | })
12 | uid: number
13 |
14 | @Column({
15 | comment: '姓名',
16 | })
17 | name: string
18 |
19 | @Column({
20 | comment: '年龄',
21 | defaultValue: 0,
22 | })
23 | age: number
24 |
25 | @Column({
26 | comment: '性别',
27 | })
28 | gender: number
29 | }
30 |
--------------------------------------------------------------------------------
/src/config/index.ts:
--------------------------------------------------------------------------------
1 | import { configs as pro } from './backend/production'
2 | import { configs as dev } from './backend/development'
3 | import { configs as local } from './backend/local'
4 | import { isPro, isDev, isLocal } from './env'
5 | import { ConfigMap } from 'config'
6 |
7 | export * from './env'
8 | export * from './server'
9 | export * from '../common/config'
10 |
11 | let configs: ConfigMap
12 |
13 | switch (true) {
14 | case isPro:
15 | configs = pro
16 | break
17 | case isDev:
18 | configs = dev
19 | break
20 | case isLocal:
21 | default:
22 | configs = local
23 | }
24 |
25 | export { configs }
26 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "esModuleInterop": true,
5 | "target": "ES2017",
6 | "noImplicitAny": true,
7 | "moduleResolution": "node",
8 | "sourceMap": true,
9 | "outDir": "dist",
10 | "baseUrl": ".",
11 | "paths": {
12 | "*": [
13 | "node_modules/*",
14 | "src/types/*"
15 | ]
16 | },
17 | "lib": [
18 | "es2017"
19 | ],
20 | "emitDecoratorMetadata": true,
21 | "experimentalDecorators": true,
22 | "skipLibCheck": true
23 | },
24 | "include": [
25 | "src/**/*"
26 | ],
27 | "experimentalDecorators": true
28 | }
--------------------------------------------------------------------------------
/client-src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom'
3 | import { MuiThemeProvider } from '@material-ui/core'
4 | import { createMuiTheme } from '@material-ui/core/styles'
5 | import { blue, lightBlue } from '@material-ui/core/colors'
6 | import App from './components/app'
7 | import { comma } from './utils'
8 |
9 | const mountNode = document.getElementById('app')
10 |
11 | comma(123)
12 |
13 | const theme = createMuiTheme({
14 | palette: {
15 | primary: blue,
16 | secondary: lightBlue,
17 | },
18 | })
19 |
20 | ReactDOM.render(
21 |
22 |
23 | , mountNode
24 | )
25 |
26 |
--------------------------------------------------------------------------------
/test/api/add-user.spec.ts:
--------------------------------------------------------------------------------
1 | import chai from 'chai'
2 | import chaiHttp from 'chai-http'
3 | import { host, port } from '../conf'
4 | import { Gender } from '../../src/config'
5 |
6 | chai.use(chaiHttp)
7 | const should = chai.should()
8 | const { expect } = chai
9 | const url = '/add'
10 | const name = 'Niko'
11 | const age = 18
12 | const gender = Gender.Female
13 |
14 | describe(`add new user`, () => {
15 | it('request success', done => {
16 | chai.request(`${host}:${port}`)
17 | .get(`${url}/${name}/${age}/${gender}`)
18 | .end((err, res) => {
19 | should.exist(res.body)
20 | expect(res.body).to.have.property('code')
21 | expect(res.body.code).to.equal(200)
22 |
23 | done()
24 | })
25 | })
26 | })
27 |
--------------------------------------------------------------------------------
/client-src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "esnext", // 使用 ES2015 模块
4 | "target": "es6", // 编译成 ES2015 (Babel 将做剩下的事情)
5 | "allowSyntheticDefaultImports": true, // 看下面
6 | "baseUrl": ".", // 可以相对这个目录 import 文件
7 | "sourceMap": true, // 使 TypeScript 生成 sourcemaps
8 | "outDir": "../client-dist", // 构建输出目录 (因为我们大部分时间都在使用 Webpack,所以不太相关)
9 | "jsx": "preserve", // 开启 JSX 模式, 但是 "preserve" 告诉 TypeScript 不要转换它(我们将使用 Babel)
10 | "strict": true,
11 | "moduleResolution": "node",
12 | "experimentalDecorators": true,
13 | "emitDecoratorMetadata": true,
14 | "paths": {
15 | "@Common/*": [
16 | "../src/common/*"
17 | ]
18 | }
19 | },
20 | "exclude": [
21 | "node_modules" // 这个目录下的代码不会被 typescript 处理
22 | ]
23 | }
--------------------------------------------------------------------------------
/test/api/filter-list.spec.ts:
--------------------------------------------------------------------------------
1 | import chai from 'chai'
2 | import chaiHttp from 'chai-http'
3 | import { host, port } from '../conf'
4 | import { Gender } from '../../src/config'
5 | import UserInfo from '../../src/models/user/user-info'
6 |
7 | chai.use(chaiHttp)
8 | const should = chai.should()
9 | const { expect } = chai
10 | const url = '/list/filter'
11 | const gender = Gender.Female
12 |
13 | describe(`filter list with female`, () => {
14 | it('request success', done => {
15 | chai.request(`${host}:${port}`)
16 | .get(`${url}/${gender}`)
17 | .end((err, res) => {
18 | should.exist(res.body)
19 | expect(res.body).to.have.property('code')
20 | expect(res.body.code).to.equal(200)
21 | expect(res.body.data).to.be.a('array')
22 | expect(res.body.data.filter((item: UserInfo) => item.gender)).to.not.include(Gender.Male)
23 |
24 | done()
25 | })
26 | })
27 | })
28 |
--------------------------------------------------------------------------------
/client-src/webpack/dll.ts:
--------------------------------------------------------------------------------
1 | import webpack from 'webpack'
2 | import merge from 'webpack-merge'
3 | import UglifyJsPlugin from 'uglifyjs-webpack-plugin'
4 | import path from 'path'
5 | import common from './common'
6 |
7 | module.exports = merge(common, {
8 | entry: {
9 | vendors: [
10 | 'react',
11 | 'react-dom',
12 | 'react-router-dom',
13 | 'babel-polyfill',
14 | ],
15 | },
16 | output: {
17 | filename: 'vendors.dll.js',
18 | path: path.resolve(__dirname, '../../client-dist'),
19 | library: 'vendors_lib',
20 | },
21 | plugins: [
22 | new webpack.DllPlugin({
23 | context: __dirname,
24 | path: path.join(__dirname, '../dist/vendors-manifest.json'),
25 | name: 'vendors_lib',
26 | }),
27 | new UglifyJsPlugin({
28 | uglifyOptions: {
29 | compress: {
30 | warnings: false,
31 | drop_console: true,
32 | collapse_vars: true,
33 | reduce_vars: true,
34 | },
35 | },
36 | }),
37 | ],
38 | })
--------------------------------------------------------------------------------
/client-src/components/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { CssBaseline } from '@material-ui/core'
3 | import { withStyles, createStyles, Theme } from '@material-ui/core/styles'
4 | import Add from './add'
5 | import List from './list'
6 |
7 | const styles = () => createStyles({
8 | logo: {
9 | maxWidth: '140px',
10 | margin: '0 auto',
11 | display: 'block',
12 | },
13 | wrap: {
14 | width: '100%',
15 | display: 'flex',
16 | flexDirection: 'column',
17 | // alignItems: 'center',
18 | // justifyContent: 'center',
19 | },
20 | slogan: {
21 | marginTop: 20,
22 | },
23 | })
24 |
25 | class Index extends React.PureComponent<{
26 | classes: any
27 | theme: Theme
28 | }> {
29 | render() {
30 | const { classes } = this.props
31 | return (
32 |
37 | )
38 | }
39 | }
40 |
41 | export default withStyles(styles, {
42 | withTheme: true,
43 | })(Index)
44 |
--------------------------------------------------------------------------------
/client-src/components/slide-bar.tsx:
--------------------------------------------------------------------------------
1 | // This file is shared across the demos.
2 |
3 | import React, { Fragment } from 'react'
4 | import { ListItem, ListItemIcon, ListItemText, Divider, List } from '@material-ui/core'
5 | import AddIcon from '@material-ui/icons/Add'
6 | import FormatListNumberedIcon from '@material-ui/icons/FormatListNumbered'
7 |
8 | export const mailFolderListItems = (
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | )
18 |
19 | export const otherMailFolderListItems = (
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | )
29 |
30 | export default () => (
31 |
32 |
33 | {mailFolderListItems}
34 |
35 | {otherMailFolderListItems}
36 |
37 | )
38 |
--------------------------------------------------------------------------------
/client-src/webpack/base.ts:
--------------------------------------------------------------------------------
1 | import webpack from 'webpack'
2 | import merge from 'webpack-merge'
3 | import path from 'path'
4 | import common from './common'
5 |
6 | export default merge(common, {
7 | entry: ['babel-polyfill', './index.tsx'],
8 | module: {
9 | rules: [
10 | {
11 | test: /\.tsx?$/,
12 | use: ['babel-loader', 'ts-loader'],
13 | exclude: /node_modules/,
14 | },
15 | {
16 | test: /\.css$/,
17 | use: ['style-loader', 'css-loader'],
18 | },
19 | {
20 | test: /\.less$/,
21 | use: ['style-loader', 'less-loader', 'css-loader'],
22 | },
23 | {
24 | test: /\.ejs/,
25 | use: [
26 | {
27 | loader: 'ejs-loader',
28 | options: {
29 | interpolate: /<\$=([\s\S]+?)\$>/g,
30 | evaluate: /<\$([\s\S]+?)\$>/g,
31 | },
32 | },
33 | ],
34 | },
35 | ],
36 | },
37 | resolve: {
38 | extensions: ['.tsx', '.ts', '.js'],
39 | alias: {
40 | '@Common': path.resolve(__dirname, '../../src/common'),
41 | },
42 | },
43 | })
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 贾顺名(Jarvis)
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/app.ts:
--------------------------------------------------------------------------------
1 | import 'reflect-metadata'
2 | import path from 'path'
3 | import { createKoaServer } from 'routing-controllers'
4 | import { Sequelize } from 'sequelize-typescript'
5 | import serve from 'koa-static'
6 | import bodyParser from 'koa-bodyparser'
7 | import { MysqlConfig } from 'config'
8 | import { distPath, configs } from './config'
9 |
10 | const app = createKoaServer({
11 | controllers: [`${__dirname}/controllers/**/*{.js,.ts}`],
12 | })
13 |
14 | app.use(serve(distPath))
15 | app.use(bodyParser())
16 |
17 | const mysqlConfig = configs.mysql as MysqlConfig
18 |
19 | const _ = new Sequelize({
20 | host: mysqlConfig.host[0],
21 | database: mysqlConfig.database,
22 | username: mysqlConfig.user,
23 | password: mysqlConfig.password,
24 | // 或者一些其他的数据库
25 | dialect: 'mysql',
26 | // 加载我们的实体
27 | modelPaths: [path.resolve(__dirname, `./models/${mysqlConfig.modelPath}`)],
28 | pool: {
29 | // 连接池的一些相关配置
30 | max: 5,
31 | min: 0,
32 | acquire: 30000,
33 | idle: 10000,
34 | },
35 | operatorsAliases: false,
36 | // true会在控制台打印每次sequelize操作时对应的SQL命令
37 | logging: true,
38 | })
39 |
40 | export default app
41 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Runtime data
9 | pids
10 | *.pid
11 | *.seed
12 | *.pid.lock
13 |
14 | # Directory for instrumented libs generated by jscoverage/JSCover
15 | lib-cov
16 |
17 | # Coverage directory used by tools like istanbul
18 | coverage
19 |
20 | # nyc test coverage
21 | .nyc_output
22 |
23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
24 | .grunt
25 |
26 | # Bower dependency directory (https://bower.io/)
27 | bower_components
28 |
29 | # node-waf configuration
30 | .lock-wscript
31 |
32 | # Compiled binary addons (https://nodejs.org/api/addons.html)
33 | build/Release
34 |
35 | # Dependency directories
36 | node_modules/
37 | jspm_packages/
38 |
39 | # TypeScript v1 declaration files
40 | typings/
41 |
42 | # Optional npm cache directory
43 | .npm
44 |
45 | # Optional eslint cache
46 | .eslintcache
47 |
48 | # Optional REPL history
49 | .node_repl_history
50 |
51 | # Output of 'npm pack'
52 | *.tgz
53 |
54 | # Yarn Integrity file
55 | .yarn-integrity
56 |
57 | # dotenv environment variables file
58 | .env
59 |
60 | # next.js build output
61 | .next
62 | dist
63 | client-dist
64 | views
--------------------------------------------------------------------------------
/src/controllers/info/add.ts:
--------------------------------------------------------------------------------
1 | import { Ctx, Param, Get, JsonController } from 'routing-controllers'
2 | import { UserData } from 'user-info'
3 | import { Context } from 'koa'
4 | import UserInfo from '../../models/user/user-info'
5 |
6 | @JsonController('/add')
7 | export default class {
8 | @Get('/:name/:age/:gender')
9 | async router(
10 | @Ctx() ctx: Context,
11 | @Param('name') name: string,
12 | @Param('age') age: number,
13 | @Param('gender') gender: number
14 | ) {
15 | try {
16 | if (!name || !gender) {
17 | return {
18 | code: 401,
19 | message: '缺少参数',
20 | }
21 | }
22 |
23 | const entity: UserData = {
24 | name,
25 | gender,
26 | age,
27 | }
28 |
29 | // 创建举报记录
30 | createUser(entity).catch(err => {
31 | console.error(ctx, err, {
32 | type: 'insert',
33 | ...entity,
34 | })
35 | })
36 |
37 | return {
38 | code: 200,
39 | }
40 | } catch (e) {
41 | console.error(ctx, e)
42 | return {
43 | code: 500,
44 | message: '服务器错误',
45 | }
46 | }
47 | }
48 | }
49 |
50 | /**
51 | * 创建一个新的用户
52 | */
53 | async function createUser({ name, gender }: UserData) {
54 | return (await UserInfo.create({
55 | name,
56 | gender,
57 | })).save()
58 | }
59 |
--------------------------------------------------------------------------------
/src/controllers/list/list.ts:
--------------------------------------------------------------------------------
1 | import { Ctx, Param, Get, JsonController } from 'routing-controllers'
2 | import { Context } from 'koa'
3 | import UserInfo from '../../models/user/user-info'
4 |
5 | @JsonController('/list')
6 | export default class {
7 | @Get('/')
8 | async router(@Ctx() ctx: Context) {
9 | try {
10 | return {
11 | code: 200,
12 | data: await filterList(),
13 | }
14 | } catch (e) {
15 | console.error(ctx, e)
16 | return {
17 | code: 500,
18 | message: '服务器错误',
19 | }
20 | }
21 | }
22 |
23 | @Get('/filter/:gender')
24 | async anotherRouter(@Ctx() ctx: Context, @Param('gender') gender: number) {
25 | try {
26 | if (!gender) {
27 | return {
28 | code: 401,
29 | message: '缺少参数',
30 | }
31 | }
32 |
33 | return {
34 | code: 200,
35 | data: await filterList({
36 | gender,
37 | }),
38 | }
39 | } catch (e) {
40 | console.error(ctx, e)
41 | return {
42 | code: 500,
43 | message: '服务器错误',
44 | }
45 | }
46 | }
47 | }
48 |
49 | /**
50 | * 获取列表数据
51 | */
52 | async function filterList({ gender }: { gender?: number } = {}) {
53 | return UserInfo.findAll({
54 | raw: true,
55 | where: gender && {
56 | gender,
57 | },
58 | })
59 | }
60 |
--------------------------------------------------------------------------------
/client-src/webpack/dev.ts:
--------------------------------------------------------------------------------
1 | import webpack from 'webpack'
2 | import merge from 'webpack-merge'
3 | import path from 'path'
4 | import HtmlWebpackPlugin from 'html-webpack-plugin'
5 | import AddAssetHtmlPlugin from 'add-asset-html-webpack-plugin'
6 | import baseConfig from './base'
7 |
8 | const manifest = require('../dist/vendors-manifest.json')
9 |
10 | export default merge(baseConfig, {
11 | output: {
12 | filename: 'bundle.js',
13 | path: path.resolve(__dirname, '../../client-dist'),
14 | publicPath: '/',
15 | },
16 | devtool: 'source-map',
17 | module: {
18 | rules: [
19 | {
20 | test: /\.(gif|png|jpe?g|svg)$/,
21 | use: [
22 | {
23 | loader: 'file-loader',
24 | options: {
25 | // isProduction ? '[name]-[hash].[ext]' :
26 | name: '[name].[ext]',
27 | publicPath: '/',
28 | },
29 | },
30 | ],
31 | },
32 | ],
33 | },
34 | plugins: [
35 | new HtmlWebpackPlugin({
36 | template: path.resolve(__dirname, '../index.ejs'),
37 | filename: path.resolve(__dirname, '../../views/index.ejs'),
38 | }),
39 | new AddAssetHtmlPlugin({
40 | filepath: path.resolve(__dirname, '../../client-dist/vendors.dll.js'),
41 | }),
42 | new webpack.WatchIgnorePlugin([
43 | /\.ejs$/,
44 | /\.js$/,
45 | ]),
46 | new webpack.DllReferencePlugin({
47 | context: __dirname,
48 | manifest,
49 | }),
50 | ],
51 | })
--------------------------------------------------------------------------------
/client-src/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "c.blued-client",
3 | "version": "0.0.1",
4 | "description": "",
5 | "scripts": {
6 | "start": "cross-env TS_NODE_PROJECT=tsconfig-for-webpack-config.json NODE_ENV=development webpack --config ./webpack/dev.ts",
7 | "dll": "cross-env TS_NODE_PROJECT=tsconfig-for-webpack-config.json NODE_ENV=production webpack --config ./webpack/dll.ts",
8 | "watch": "npm start -- -w",
9 | "clean": "",
10 | "build": "cross-env TS_NODE_PROJECT=tsconfig-for-webpack-config.json NODE_ENV=production webpack --config ./webpack/pro.ts"
11 | },
12 | "dependencies": {
13 | "@material-ui/core": "^4.0.2",
14 | "@material-ui/icons": "^4.0.1",
15 | "babel-polyfill": "^6.26.0",
16 | "classnames": "^2.2.6",
17 | "prop-types": "^15.7.2",
18 | "react": "^16.8.6",
19 | "react-dom": "^16.8.6",
20 | "react-router-dom": "^5.0.1"
21 | },
22 | "devDependencies": {
23 | "@babel/core": "^7.4.5",
24 | "@types/classnames": "^2.2.8",
25 | "@types/material-ui": "^0.21.6",
26 | "@types/react": "^16.8.19",
27 | "@types/react-dom": "^16.8.4",
28 | "@types/uglifyjs-webpack-plugin": "^1.1.0",
29 | "@types/webpack": "^4.4.32",
30 | "@types/webpack-merge": "^4.1.5",
31 | "add-asset-html-webpack-plugin": "^3.1.3",
32 | "babel-core": "^6.26.3",
33 | "babel-eslint": "^10.0.1",
34 | "babel-loader": "^8.0.6",
35 | "babel-plugin-import": "^1.12.0",
36 | "babel-preset-env": "^1.7.0",
37 | "babel-preset-react": "^6.24.1",
38 | "cross-env": "^5.2.0",
39 | "css-loader": "^2.1.1",
40 | "ejs-loader": "^0.3.3",
41 | "eslint": "^5.16.0",
42 | "eslint-config-blued-react": "1.0.1",
43 | "eslint-plugin-import": "^2.17.3",
44 | "eslint-plugin-jsx-a11y": "^6.2.1",
45 | "eslint-plugin-react": "^7.13.0",
46 | "file-loader": "^4.0.0",
47 | "html-webpack-plugin": "^3.2.0",
48 | "image-webpack-loader": "^5.0.0",
49 | "less": "^3.9.0",
50 | "less-loader": "^5.0.0",
51 | "qiniu-webpack-plugin": "^0.4.2",
52 | "style-loader": "^0.23.1",
53 | "ts-loader": "^6.0.2",
54 | "ts-node": "^8.2.0",
55 | "tsconfig-paths": "^3.8.0",
56 | "uglifyjs-webpack-plugin": "^2.1.3",
57 | "webpack": "^4.33.0",
58 | "webpack-cli": "^3.3.3",
59 | "webpack-merge": "^4.2.1"
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "typescript-example",
3 | "version": "1.0.0",
4 | "description": "example for typescript, with decorators (routing-controllers and sequelize)",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "NODE_ENV=local npm run serve",
8 | "build": "npm run build-ts && npm run copy-static-assets",
9 | "serve": "node dist/server.js",
10 | "watch-node": "NODE_ENV=local nodemon dist/server.js",
11 | "build-ts": "tsc",
12 | "watch-ts": "tsc -w",
13 | "tslint": "tslint -c tslint.json -p tsconfig.json",
14 | "copy-static-assets": "ts-node copy-static-assets.ts",
15 | "test": "mocha -r ts-node/register test/**/*.spec.ts"
16 | },
17 | "repository": {
18 | "type": "git",
19 | "url": "https://github.com/Jiasm/typescript-example.git"
20 | },
21 | "keywords": [],
22 | "author": "",
23 | "license": "ISC",
24 | "dependencies": {
25 | "consolidate": "^0.15.1",
26 | "ejs": "^2.6.1",
27 | "koa": "^2.7.0",
28 | "koa-bodyparser": "^4.2.1",
29 | "koa-compose": "^4.1.0",
30 | "koa-multer": "^1.0.2",
31 | "koa-router": "^7.4.0",
32 | "koa-static": "^5.0.0",
33 | "koa-views": "^6.2.0",
34 | "mysql2": "^1.6.5",
35 | "reflect-metadata": "^0.1.13",
36 | "routing-controllers": "^0.7.7",
37 | "sequelize": "^5.15.1",
38 | "sequelize-typescript": "^0.6.11"
39 | },
40 | "devDependencies": {
41 | "@types/chai": "^4.1.7",
42 | "@types/chai-http": "^4.2.0",
43 | "@types/consolidate": "0.0.35",
44 | "@types/core-js": "^2.5.0",
45 | "@types/jest": "^24.0.13",
46 | "@types/koa": "^2.0.48",
47 | "@types/koa-bodyparser": "^5.0.0",
48 | "@types/koa-compose": "^3.2.4",
49 | "@types/koa-router": "^7.0.40",
50 | "@types/koa-static": "^4.0.1",
51 | "@types/koa-views": "^2.0.3",
52 | "@types/mocha": "^5.2.7",
53 | "@types/mysql": "^2.15.6",
54 | "@types/node": "^12.0.7",
55 | "@types/shelljs": "^0.8.5",
56 | "@typescript-eslint/eslint-plugin": "^1.10.2",
57 | "chai": "^4.2.0",
58 | "chai-http": "^4.3.0",
59 | "eslint": "^5.16.0",
60 | "eslint-config-blued-typescript": "^1.0.1",
61 | "eslint-import-resolver-typescript": "^1.1.1",
62 | "eslint-plugin-import": "^2.17.3",
63 | "mocha": "^6.1.4",
64 | "nodemon": "^1.19.1",
65 | "shelljs": "^0.8.3",
66 | "ts-node": "^8.2.0",
67 | "tslint": "^5.17.0",
68 | "typescript": "^3.5.1"
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # typescript-example
2 | :pager: example for typescript, with decorators (routing-controllers and sequelize)
3 |
4 | ## dependence
5 |
6 | - [routing-controllers](https://github.com/typestack/routing-controllers)
7 | - [sequelize](https://github.com/sequelize/sequelize)
8 | - [sequelize-typescript](https://github.com/RobinBuschmann/sequelize-typescript)
9 | - [react](https://github.com/facebook/react)
10 | - [material-ui](https://github.com/mui-org/material-ui)
11 | - [webpack](https://github.com/webpack/webpack)
12 | - [eslint](https://github.com/webpack/webpack)
13 |
14 | ## usage
15 |
16 | ```bash
17 | > npm i
18 | > brew services start mysql
19 | > mysql -u root -p
20 | # 请自行修改config/backend/local.js 中的user、password 以及以下的database
21 | mysql> create database ts_test;
22 | mysql> use ts_test;
23 | mysql> CREATE TABLE `user_info_test` ( `uid` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(11) NOT NULL, `age` int(3) DEFAULT '0', `gender` int(1) NOT NULL, PRIMARY KEY (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
24 |
25 | > npm run watch-ts
26 | > npm run watch-node
27 |
28 | > curl http://127.0.0.1:8888/add/Niko/18/1
29 | > curl http://127.0.0.1:8888/add/Bellic/26/2
30 |
31 | > curl http://127.0.0.1:8888/list/ # [{name: Niko, ...}, {name: Bellic, ...}]
32 | > curl http://127.0.0.1:8888/list/filter/1 # [{name: Niko, ...}]
33 | ```
34 |
35 | ## front-end
36 |
37 | 如果还想看TS在React中的使用,可以这样搞:
38 | ```bash
39 | > cd client-src
40 | > npm i
41 | > npm run dll
42 | > npm run start
43 | # 在确保上边的node服务是启动的情况下
44 | > open http://127.0.0.1:8888
45 | ```
46 |
47 | ## run test
48 |
49 | 本示例存在一些简单的测试用例,可以在服务启动的情况下使用:
50 | ```bash
51 | npm test
52 | ```
53 |
54 | ## 配套的一篇水文
55 |
56 | - [blog](https://blog.jiasm.org/2018/07/21/TypeScript%E5%9C%A8node%E9%A1%B9%E7%9B%AE%E4%B8%AD%E7%9A%84%E5%AE%9E%E8%B7%B5/)
57 | - [掘金](https://juejin.im/post/5b5413755188251aab713d14)
58 | - [思否](https://segmentfault.com/a/1190000015719697)
59 |
60 | ### 关于React的水文地址
61 |
62 | - [blog](https://blog.jiasm.org/2018/08/26/TypeScript%E5%9C%A8react%E9%A1%B9%E7%9B%AE%E4%B8%AD%E7%9A%84%E5%AE%9E%E8%B7%B5/)
63 | - [掘金](https://juejin.im/post/5b83a02ff265da43737e9a27)
64 | - [思否](https://segmentfault.com/a/1190000016163937)
65 |
66 | ### 最后一公里 - webpack 与 mocha/chai
67 |
68 | - [blog](https://blog.jiasm.org/2018/09/03/%E4%BD%BF%E7%94%A8-TypeScript-%E6%94%B9%E9%80%A0%E6%9E%84%E5%BB%BA%E5%B7%A5%E5%85%B7%E5%8F%8A%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B/)
69 | - [掘金](https://juejin.im/post/5b8ca576e51d4538e6334bcd)
70 | - [思否](https://segmentfault.com/a/1190000016247815)
--------------------------------------------------------------------------------
/client-src/webpack/pro.ts:
--------------------------------------------------------------------------------
1 | import merge from 'webpack-merge'
2 | import path from 'path'
3 | import HtmlWebpackPlugin from 'html-webpack-plugin'
4 | import UglifyJsPlugin from 'uglifyjs-webpack-plugin'
5 | import QiniuPlugin from 'qiniu-webpack-plugin'
6 | import baseConfig from './base'
7 |
8 | const qntoken = {
9 | // 如果使用七牛的童鞋,可以自行输入token之类的参数体验
10 | accessKey: '',
11 | secretKey: '',
12 | bucket: '',
13 | cdnBase: '',
14 | }
15 |
16 | const cdnPath = '/XXX'
17 |
18 | module.exports = merge(baseConfig, {
19 | output: {
20 | filename: 'bundle-[hash].js',
21 | publicPath: `${qntoken.cdnBase}/${cdnPath}`,
22 | },
23 | devtool: false,
24 | module: {
25 | rules: [
26 | {
27 | test: /\.(gif|png|jpe?g|svg)$/,
28 | use: [
29 | {
30 | loader: 'file-loader',
31 | options: {
32 | name: '[name]-[hash].[ext]',
33 | publicPath: `${qntoken.cdnBase}/${cdnPath}`,
34 | },
35 | },
36 | {
37 | loader: 'image-webpack-loader',
38 | options: {
39 | optipng: {
40 | optimizationLevel: 7,
41 | },
42 | gifsicle: {
43 | interlaced: false,
44 | },
45 | pngquant: {
46 | quality: '65-90',
47 | speed: 4,
48 | },
49 | mozjpeg: {
50 | progressive: true,
51 | quality: 65,
52 | },
53 | svgo: {
54 | plugins: [
55 | { removeViewBox: false },
56 | { removeEmptyAttrs: false },
57 | ],
58 | },
59 | },
60 | },
61 | ],
62 | },
63 | ],
64 | },
65 | plugins: [
66 | new HtmlWebpackPlugin({
67 | template: path.resolve(__dirname, '../index.ejs'),
68 | filename: path.resolve(__dirname, '../../views/index.ejs'),
69 | }),
70 | new UglifyJsPlugin({
71 | uglifyOptions: {
72 | compress: {
73 | warnings: false,
74 | drop_console: true,
75 | collapse_vars: true,
76 | reduce_vars: true,
77 | },
78 | },
79 | }),
80 | new QiniuPlugin({
81 | ACCESS_KEY: qntoken.accessKey,
82 | SECRET_KEY: qntoken.secretKey,
83 | bucket: qntoken.bucket,
84 | path: cdnPath,
85 | // 支持上传的文件
86 | include: [
87 | /\.js$/,
88 | /\.css$/,
89 | /\.(gif|png|jpe?g|svg)$/,
90 | ],
91 | }),
92 | ],
93 | })
--------------------------------------------------------------------------------
/client-src/components/add.tsx:
--------------------------------------------------------------------------------
1 | import React, { ChangeEvent } from 'react'
2 | import { withStyles, createStyles, Theme } from '@material-ui/core/styles'
3 | import { Input, InputLabel, FormControl, RadioGroup, FormControlLabel, Radio, Button } from '@material-ui/core'
4 |
5 | const styles = (theme: Theme) => createStyles({
6 | group: {
7 | flexDirection: 'row',
8 | margin: `${theme.spacing.unit}px 0`,
9 | },
10 | container: {
11 | display: 'flex',
12 | flexWrap: 'wrap',
13 | },
14 | margin: {
15 | margin: theme.spacing.unit,
16 | },
17 | button: {
18 | margin: theme.spacing.unit,
19 | height: 40,
20 | alignSelf: 'center',
21 | },
22 | })
23 |
24 | class Add extends React.Component<{
25 | classes: any
26 | theme: Theme
27 | }> {
28 | state = {
29 | gender: '1',
30 | nickname: '',
31 | age: '',
32 | }
33 |
34 | handleChange = (type: string) => (event: ChangeEvent) => {
35 | this.setState({ [type]: event.target.value })
36 | }
37 |
38 | nicknameChange = this.handleChange('nickname')
39 |
40 | ageChange = this.handleChange('age')
41 |
42 | genderChange = this.handleChange('gender')
43 |
44 | addNewUser = async () => {
45 | const { nickname, age, gender } = this.state
46 |
47 | const res = await fetch(`/add/${nickname}/${age}/${gender}`)
48 | }
49 |
50 | render() {
51 | const { classes } = this.props
52 | const { nickname, age, gender } = this.state
53 |
54 | return (
55 |
56 |
57 |
58 | 昵称
59 |
60 |
65 |
66 |
67 |
68 | 年龄
69 |
70 |
76 |
77 |
78 |
85 | } label="Female" />
86 | } label="Male" />
87 |
88 |
89 |
92 |
93 | )
94 | }
95 | }
96 | export default withStyles(styles)(Add)
--------------------------------------------------------------------------------
/client-src/components/list.tsx:
--------------------------------------------------------------------------------
1 | import React, { ChangeEvent } from 'react'
2 | import { withStyles, createStyles, Theme } from '@material-ui/core/styles'
3 | import { Table, TableHead, TableBody, TableRow, TableCell, FormControl, RadioGroup, FormControlLabel, Radio, Button } from '@material-ui/core'
4 | import { Gender } from '../config'
5 |
6 | const styles = (theme: Theme) => createStyles({
7 | root: {
8 | width: '100%',
9 | marginTop: theme.spacing.unit * 3,
10 | overflowX: 'auto',
11 | },
12 | container: {
13 | display: 'flex',
14 | flexWrap: 'wrap',
15 | },
16 | group: {
17 | flexDirection: 'row',
18 | margin: `${theme.spacing.unit}px 0`,
19 | },
20 | margin: {
21 | margin: theme.spacing.unit,
22 | },
23 | button: {
24 | margin: theme.spacing.unit,
25 | height: 40,
26 | alignSelf: 'center',
27 | },
28 | })
29 |
30 | class List extends React.Component<{
31 | classes: any
32 | theme: Theme
33 | }> {
34 | state: {
35 | rows: Array<{
36 | uid: number
37 | name: string
38 | age: number
39 | gender: number
40 | }>
41 | gender: string
42 | } = {
43 | rows: [],
44 | gender: '0',
45 | };
46 |
47 | componentDidMount() {
48 | this.getData()
49 | }
50 |
51 | handleChange = (event: ChangeEvent) => {
52 | this.setState({ gender: event.target.value })
53 | }
54 |
55 | getData = async () => {
56 | const { gender } = this.state
57 | const res = await fetch(Number(gender) in Gender ? `/list/filter/${gender}` : '/list')
58 |
59 | const { data } = await res.json()
60 |
61 | this.setState({
62 | rows: data,
63 | })
64 | }
65 |
66 | render() {
67 | const { classes } = this.props
68 | const { gender, rows } = this.state
69 |
70 | return (
71 |
72 |
73 |
74 |
80 | } label="Female" />
81 | } label="Male" />
82 | } label="All" />
83 |
84 |
85 |
88 |
89 |
90 |
91 |
92 | #
93 | Name
94 | Age
95 | Gender
96 |
97 |
98 |
99 | {rows.map((row, index) => (
100 |
101 |
102 | {index + 1}
103 |
104 | {row.name}
105 | {row.age}
106 | {row.gender === Gender.Male ? 'Male' : 'Female'}
107 |
108 | ))}
109 |
110 |
111 |
112 | )
113 | }
114 | }
115 | export default withStyles(styles)(List)
--------------------------------------------------------------------------------
/client-src/components/app.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import classNames from 'classnames'
3 | import Drawer from '@material-ui/core/Drawer'
4 | import AppBar from '@material-ui/core/AppBar'
5 | import Toolbar from '@material-ui/core/Toolbar'
6 | import Typography from '@material-ui/core/Typography'
7 | import IconButton from '@material-ui/core/IconButton'
8 | import Paper from '@material-ui/core/Paper'
9 | import MenuIcon from '@material-ui/icons/Menu'
10 | import { withStyles, createStyles, Theme } from '@material-ui/core/styles'
11 | import ChevronLeftIcon from '@material-ui/icons/ChevronLeft'
12 | import ChevronRightIcon from '@material-ui/icons/ChevronRight'
13 | import Index from './index'
14 | import SlideBar from './slide-bar'
15 |
16 | const drawerWidth = 300
17 |
18 | const styles = (theme: Theme) => createStyles({
19 | root: {
20 | flexGrow: 1,
21 | height: '100%',
22 | width: '100%',
23 | zIndex: 1,
24 | overflow: 'hidden',
25 | position: 'absolute',
26 | display: 'flex',
27 | left: 0,
28 | top: 0,
29 | },
30 | appBar: {
31 | zIndex: theme.zIndex.drawer + 1,
32 | transition: theme.transitions.create(['width', 'margin'], {
33 | easing: theme.transitions.easing.sharp,
34 | duration: theme.transitions.duration.leavingScreen,
35 | }),
36 | },
37 | appBarShift: {
38 | marginLeft: drawerWidth,
39 | width: `calc(100% - ${drawerWidth}px)`,
40 | transition: theme.transitions.create(['width', 'margin'], {
41 | easing: theme.transitions.easing.sharp,
42 | duration: theme.transitions.duration.enteringScreen,
43 | }),
44 | },
45 | menuButton: {
46 | marginLeft: 12,
47 | marginRight: 36,
48 | },
49 | hide: {
50 | display: 'none',
51 | },
52 | drawerPaper: {
53 | position: 'relative',
54 | whiteSpace: 'nowrap',
55 | width: drawerWidth,
56 | transition: theme.transitions.create('width', {
57 | easing: theme.transitions.easing.sharp,
58 | duration: theme.transitions.duration.enteringScreen,
59 | }),
60 | },
61 | drawerPaperClose: {
62 | overflowX: 'hidden',
63 | transition: theme.transitions.create('width', {
64 | easing: theme.transitions.easing.sharp,
65 | duration: theme.transitions.duration.leavingScreen,
66 | }),
67 | width: theme.spacing.unit * 7,
68 | [theme.breakpoints.up('sm')]: {
69 | width: theme.spacing.unit * 9,
70 | },
71 | },
72 | toolbar: {
73 | display: 'flex',
74 | alignItems: 'center',
75 | justifyContent: 'flex-end',
76 | padding: '0 8px',
77 | ...theme.mixins.toolbar,
78 | },
79 | content: {
80 | flexGrow: 1,
81 | backgroundColor: theme.palette.background.default,
82 | padding: theme.spacing.unit * 3,
83 | overflow: 'scroll',
84 | },
85 | paper: {
86 | ...theme.mixins.gutters(),
87 | paddingTop: theme.spacing.unit * 2,
88 | paddingBottom: theme.spacing.unit * 2,
89 | minHeight: 400,
90 | display: 'flex',
91 | },
92 | })
93 |
94 | class App extends React.Component<{
95 | classes: any
96 | theme: Theme
97 | }> {
98 | state = {
99 | open: false,
100 | }
101 |
102 | handleDrawerOpen = () => {
103 | this.setState({ open: true })
104 | }
105 |
106 | handleDrawerClose = () => {
107 | this.setState({ open: false })
108 | }
109 |
110 | render() {
111 | const { classes, theme } = this.props
112 | const { open } = this.state
113 |
114 | return (
115 |
116 |
120 |
121 |
127 |
128 |
129 |
130 | 一个简单的Demo页面
131 |
132 |
133 |
134 |
141 |
142 |
143 | {theme.direction === 'rtl' ? : }
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 | )
156 | }
157 | }
158 |
159 | export default withStyles(styles, {
160 | withTheme: true,
161 | })(App)
162 |
163 |
--------------------------------------------------------------------------------
/client-src/dist/vendors-manifest.json:
--------------------------------------------------------------------------------
1 | {"name":"vendors_lib","content":{"../node_modules/babel-polyfill/node_modules/core-js/modules/_export.js":{"id":0,"buildMeta":{"providedExports":true}},"../node_modules/prop-types/index.js":{"id":1,"buildMeta":{"providedExports":true}},"../node_modules/react/index.js":{"id":2,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js":{"id":3,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_global.js":{"id":4,"buildMeta":{"providedExports":true}},"../node_modules/history/es/PathUtils.js":{"id":5,"buildMeta":{"exportsType":"namespace","providedExports":["addLeadingSlash","stripLeadingSlash","hasBasename","stripBasename","stripTrailingSlash","parsePath","createPath"]}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js":{"id":6,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js":{"id":7,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js":{"id":8,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js":{"id":9,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js":{"id":10,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js":{"id":11,"buildMeta":{"providedExports":true}},"../node_modules/warning/warning.js":{"id":12,"buildMeta":{"providedExports":true}},"../node_modules/invariant/browser.js":{"id":13,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js":{"id":14,"buildMeta":{"providedExports":true}},"../node_modules/history/node_modules/warning/browser.js":{"id":15,"buildMeta":{"providedExports":true}},"../node_modules/history/es/index.js":{"id":16,"buildMeta":{"exportsType":"namespace","providedExports":["createBrowserHistory","createHashHistory","createMemoryHistory","createLocation","locationsAreEqual","parsePath","createPath"]}},"../node_modules/history/es/LocationUtils.js":{"id":17,"buildMeta":{"exportsType":"namespace","providedExports":["createLocation","locationsAreEqual"]}},"../node_modules/history/es/DOMUtils.js":{"id":18,"buildMeta":{"exportsType":"namespace","providedExports":["canUseDOM","addEventListener","removeEventListener","getConfirmation","supportsHistory","supportsPopStateOnHashChange","supportsGoWithoutReloadUsingHash","isExtraneousPopstateEvent"]}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js":{"id":19,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js":{"id":20,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js":{"id":21,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js":{"id":22,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_has.js":{"id":23,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js":{"id":24,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js":{"id":25,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js":{"id":26,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_core.js":{"id":27,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js":{"id":28,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js":{"id":29,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js":{"id":30,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js":{"id":31,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js":{"id":32,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js":{"id":33,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js":{"id":34,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js":{"id":35,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js":{"id":36,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js":{"id":37,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js":{"id":38,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_library.js":{"id":39,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js":{"id":40,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js":{"id":41,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_uid.js":{"id":42,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js":{"id":43,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_to-absolute-index.js":{"id":44,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js":{"id":45,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js":{"id":46,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js":{"id":47,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js":{"id":48,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js":{"id":49,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js":{"id":50,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_set-to-string-tag.js":{"id":51,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_string-trim.js":{"id":52,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_iterators.js":{"id":53,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_validate-collection.js":{"id":54,"buildMeta":{"providedExports":true}},"../node_modules/react-router-dom/es/Router.js":{"id":55,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/history/es/createTransitionManager.js":{"id":56,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router/es/Router.js":{"id":57,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router/es/matchPath.js":{"id":58,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_iobject.js":{"id":59,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_object-pie.js":{"id":60,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_classof.js":{"id":61,"buildMeta":{"providedExports":true}},"../node_modules/react-router-dom/es/Link.js":{"id":62,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router/es/generatePath.js":{"id":63,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_shared.js":{"id":64,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_array-includes.js":{"id":65,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_object-gops.js":{"id":66,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_is-array.js":{"id":67,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_is-regexp.js":{"id":68,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_iter-detect.js":{"id":69,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_flags.js":{"id":70,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_fix-re-wks.js":{"id":71,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_species-constructor.js":{"id":72,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_user-agent.js":{"id":73,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_collection.js":{"id":74,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_typed.js":{"id":75,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_object-forced-pam.js":{"id":76,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-of.js":{"id":77,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_set-collection-from.js":{"id":78,"buildMeta":{"providedExports":true}},"../node_modules/react-router-dom/es/Route.js":{"id":79,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router/es/Route.js":{"id":80,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/path-to-regexp/index.js":{"id":81,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_dom-create.js":{"id":82,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_wks-define.js":{"id":83,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_shared-key.js":{"id":84,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_enum-bug-keys.js":{"id":85,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_html.js":{"id":86,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_set-proto.js":{"id":87,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_string-ws.js":{"id":88,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_inherit-if-required.js":{"id":89,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_string-repeat.js":{"id":90,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_math-sign.js":{"id":91,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_math-expm1.js":{"id":92,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_string-at.js":{"id":93,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_iter-define.js":{"id":94,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_iter-create.js":{"id":95,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_string-context.js":{"id":96,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_fails-is-regexp.js":{"id":97,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_is-array-iter.js":{"id":98,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_create-property.js":{"id":99,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/core.get-iterator-method.js":{"id":100,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-create.js":{"id":101,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_array-fill.js":{"id":102,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.iterator.js":{"id":103,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_task.js":{"id":104,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_microtask.js":{"id":105,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_new-promise-capability.js":{"id":106,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_typed-buffer.js":{"id":107,"buildMeta":{"providedExports":true}},"../node_modules/object-assign/index.js":{"id":108,"buildMeta":{"providedExports":true}},"../node_modules/fbjs/lib/invariant.js":{"id":109,"buildMeta":{"providedExports":true}},"../node_modules/fbjs/lib/emptyObject.js":{"id":110,"buildMeta":{"providedExports":true}},"../node_modules/fbjs/lib/emptyFunction.js":{"id":111,"buildMeta":{"providedExports":true}},"../node_modules/react-router-dom/es/BrowserRouter.js":{"id":112,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/history/es/createBrowserHistory.js":{"id":113,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/history/es/createHashHistory.js":{"id":114,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/history/es/createMemoryHistory.js":{"id":115,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router-dom/es/HashRouter.js":{"id":116,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router-dom/es/MemoryRouter.js":{"id":117,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router-dom/es/NavLink.js":{"id":118,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router-dom/es/Prompt.js":{"id":119,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router-dom/es/Redirect.js":{"id":120,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router-dom/es/StaticRouter.js":{"id":121,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router-dom/es/Switch.js":{"id":122,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router-dom/es/generatePath.js":{"id":123,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router-dom/es/matchPath.js":{"id":124,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router-dom/es/withRouter.js":{"id":125,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/webpack/buildin/global.js":{"id":126,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_ie8-dom-define.js":{"id":127,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_wks-ext.js":{"id":128,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys-internal.js":{"id":129,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_object-dps.js":{"id":130,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn-ext.js":{"id":131,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_object-assign.js":{"id":132,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_bind.js":{"id":133,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_invoke.js":{"id":134,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_parse-int.js":{"id":135,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_parse-float.js":{"id":136,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_a-number-value.js":{"id":137,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_is-integer.js":{"id":138,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_math-log1p.js":{"id":139,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_math-fround.js":{"id":140,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_iter-call.js":{"id":141,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_array-reduce.js":{"id":142,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_array-copy-within.js":{"id":143,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_iter-step.js":{"id":144,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.flags.js":{"id":145,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_perform.js":{"id":146,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_promise-resolve.js":{"id":147,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.map.js":{"id":148,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_collection-strong.js":{"id":149,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.set.js":{"id":150,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-map.js":{"id":151,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_collection-weak.js":{"id":152,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_to-index.js":{"id":153,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_own-keys.js":{"id":154,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_flatten-into-array.js":{"id":155,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_string-pad.js":{"id":156,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_object-to-array.js":{"id":157,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_collection-to-json.js":{"id":158,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_array-from-iterable.js":{"id":159,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_math-scale.js":{"id":160,"buildMeta":{"providedExports":true}},"../node_modules/resolve-pathname/index.js":{"id":161,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/value-equal/index.js":{"id":162,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router/es/MemoryRouter.js":{"id":163,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router/es/Prompt.js":{"id":164,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router/es/Redirect.js":{"id":165,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router/es/StaticRouter.js":{"id":166,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router/es/Switch.js":{"id":167,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/react-router/es/withRouter.js":{"id":168,"buildMeta":{"exportsType":"namespace","providedExports":["default"]}},"../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js":{"id":169,"buildMeta":{"providedExports":true}},"../node_modules/react/cjs/react.production.min.js":{"id":171,"buildMeta":{"providedExports":true}},"../node_modules/react-dom/index.js":{"id":172,"buildMeta":{"providedExports":true}},"../node_modules/react-dom/cjs/react-dom.production.min.js":{"id":173,"buildMeta":{"providedExports":true}},"../node_modules/fbjs/lib/ExecutionEnvironment.js":{"id":174,"buildMeta":{"providedExports":true}},"../node_modules/fbjs/lib/getActiveElement.js":{"id":175,"buildMeta":{"providedExports":true}},"../node_modules/fbjs/lib/shallowEqual.js":{"id":176,"buildMeta":{"providedExports":true}},"../node_modules/fbjs/lib/containsNode.js":{"id":177,"buildMeta":{"providedExports":true}},"../node_modules/fbjs/lib/isTextNode.js":{"id":178,"buildMeta":{"providedExports":true}},"../node_modules/fbjs/lib/isNode.js":{"id":179,"buildMeta":{"providedExports":true}},"../node_modules/react-router-dom/es/index.js":{"id":180,"buildMeta":{"exportsType":"namespace","providedExports":["BrowserRouter","HashRouter","Link","MemoryRouter","NavLink","Prompt","Redirect","Route","Router","StaticRouter","Switch","generatePath","matchPath","withRouter"]}},"../node_modules/prop-types/factoryWithThrowingShims.js":{"id":181,"buildMeta":{"providedExports":true}},"../node_modules/prop-types/lib/ReactPropTypesSecret.js":{"id":182,"buildMeta":{"providedExports":true}},"../node_modules/isarray/index.js":{"id":183,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/lib/index.js":{"id":184,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/shim.js":{"id":185,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.symbol.js":{"id":186,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_enum-keys.js":{"id":187,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.create.js":{"id":188,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-property.js":{"id":189,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-properties.js":{"id":190,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-descriptor.js":{"id":191,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-prototype-of.js":{"id":192,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.keys.js":{"id":193,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-names.js":{"id":194,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.freeze.js":{"id":195,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.seal.js":{"id":196,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.prevent-extensions.js":{"id":197,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-frozen.js":{"id":198,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-sealed.js":{"id":199,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-extensible.js":{"id":200,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.assign.js":{"id":201,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is.js":{"id":202,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_same-value.js":{"id":203,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.set-prototype-of.js":{"id":204,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.to-string.js":{"id":205,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.bind.js":{"id":206,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.name.js":{"id":207,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.has-instance.js":{"id":208,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-int.js":{"id":209,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-float.js":{"id":210,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.constructor.js":{"id":211,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-fixed.js":{"id":212,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-precision.js":{"id":213,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.epsilon.js":{"id":214,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-finite.js":{"id":215,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-integer.js":{"id":216,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-nan.js":{"id":217,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-safe-integer.js":{"id":218,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.max-safe-integer.js":{"id":219,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.min-safe-integer.js":{"id":220,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-float.js":{"id":221,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-int.js":{"id":222,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.acosh.js":{"id":223,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.asinh.js":{"id":224,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.atanh.js":{"id":225,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cbrt.js":{"id":226,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.clz32.js":{"id":227,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cosh.js":{"id":228,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.expm1.js":{"id":229,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.fround.js":{"id":230,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.hypot.js":{"id":231,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.imul.js":{"id":232,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log10.js":{"id":233,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log1p.js":{"id":234,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log2.js":{"id":235,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sign.js":{"id":236,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sinh.js":{"id":237,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.tanh.js":{"id":238,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.trunc.js":{"id":239,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.from-code-point.js":{"id":240,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.raw.js":{"id":241,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.trim.js":{"id":242,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.iterator.js":{"id":243,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.code-point-at.js":{"id":244,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.ends-with.js":{"id":245,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.includes.js":{"id":246,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.repeat.js":{"id":247,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.starts-with.js":{"id":248,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.anchor.js":{"id":249,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.big.js":{"id":250,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.blink.js":{"id":251,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.bold.js":{"id":252,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fixed.js":{"id":253,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontcolor.js":{"id":254,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontsize.js":{"id":255,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.italics.js":{"id":256,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.link.js":{"id":257,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.small.js":{"id":258,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.strike.js":{"id":259,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sub.js":{"id":260,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sup.js":{"id":261,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.now.js":{"id":262,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-json.js":{"id":263,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-iso-string.js":{"id":264,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-iso-string.js":{"id":265,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-string.js":{"id":266,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-primitive.js":{"id":267,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-primitive.js":{"id":268,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.is-array.js":{"id":269,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.from.js":{"id":270,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.of.js":{"id":271,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.join.js":{"id":272,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.slice.js":{"id":273,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.sort.js":{"id":274,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.for-each.js":{"id":275,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-constructor.js":{"id":276,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.map.js":{"id":277,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.filter.js":{"id":278,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.some.js":{"id":279,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.every.js":{"id":280,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce.js":{"id":281,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce-right.js":{"id":282,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.index-of.js":{"id":283,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.last-index-of.js":{"id":284,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.copy-within.js":{"id":285,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.fill.js":{"id":286,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find.js":{"id":287,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find-index.js":{"id":288,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.species.js":{"id":289,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.constructor.js":{"id":290,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.to-string.js":{"id":291,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.match.js":{"id":292,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.replace.js":{"id":293,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.search.js":{"id":294,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.split.js":{"id":295,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.promise.js":{"id":296,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-set.js":{"id":297,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.array-buffer.js":{"id":298,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.data-view.js":{"id":299,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int8-array.js":{"id":300,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-array.js":{"id":301,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-clamped-array.js":{"id":302,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int16-array.js":{"id":303,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint16-array.js":{"id":304,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int32-array.js":{"id":305,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint32-array.js":{"id":306,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float32-array.js":{"id":307,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float64-array.js":{"id":308,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.apply.js":{"id":309,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.construct.js":{"id":310,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.define-property.js":{"id":311,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.delete-property.js":{"id":312,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.enumerate.js":{"id":313,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get.js":{"id":314,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js":{"id":315,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-prototype-of.js":{"id":316,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.has.js":{"id":317,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.is-extensible.js":{"id":318,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.own-keys.js":{"id":319,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.prevent-extensions.js":{"id":320,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set.js":{"id":321,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set-prototype-of.js":{"id":322,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.includes.js":{"id":323,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.flat-map.js":{"id":324,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.flatten.js":{"id":325,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.at.js":{"id":326,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-start.js":{"id":327,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-end.js":{"id":328,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-left.js":{"id":329,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-right.js":{"id":330,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.match-all.js":{"id":331,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.async-iterator.js":{"id":332,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.observable.js":{"id":333,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.get-own-property-descriptors.js":{"id":334,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.values.js":{"id":335,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.entries.js":{"id":336,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-getter.js":{"id":337,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-setter.js":{"id":338,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-getter.js":{"id":339,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-setter.js":{"id":340,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.to-json.js":{"id":341,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.to-json.js":{"id":342,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.of.js":{"id":343,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.of.js":{"id":344,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-map.of.js":{"id":345,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-set.of.js":{"id":346,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.from.js":{"id":347,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.from.js":{"id":348,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-map.from.js":{"id":349,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.weak-set.from.js":{"id":350,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.global.js":{"id":351,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.system.global.js":{"id":352,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.error.is-error.js":{"id":353,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.clamp.js":{"id":354,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.deg-per-rad.js":{"id":355,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.degrees.js":{"id":356,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.fscale.js":{"id":357,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.iaddh.js":{"id":358,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.isubh.js":{"id":359,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.imulh.js":{"id":360,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.rad-per-deg.js":{"id":361,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.radians.js":{"id":362,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.scale.js":{"id":363,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.umulh.js":{"id":364,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.signbit.js":{"id":365,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.promise.finally.js":{"id":366,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.promise.try.js":{"id":367,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.define-metadata.js":{"id":368,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.delete-metadata.js":{"id":369,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata.js":{"id":370,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata-keys.js":{"id":371,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata.js":{"id":372,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js":{"id":373,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-metadata.js":{"id":374,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-own-metadata.js":{"id":375,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.metadata.js":{"id":376,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.asap.js":{"id":377,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/es7.observable.js":{"id":378,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/web.timers.js":{"id":379,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/web.immediate.js":{"id":380,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/web.dom.iterable.js":{"id":381,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/regenerator-runtime/runtime.js":{"id":382,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/fn/regexp/escape.js":{"id":383,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/core.regexp.escape.js":{"id":384,"buildMeta":{"providedExports":true}},"../node_modules/babel-polyfill/node_modules/core-js/modules/_replacer.js":{"id":385,"buildMeta":{"providedExports":true}}}}
--------------------------------------------------------------------------------