Skip to content
This repository was archived by the owner on Feb 28, 2019. It is now read-only.

Commit d942b0d

Browse files
author
stefanexivity
committed
auto generate interface
1 parent 92b0db2 commit d942b0d

9 files changed

+61
-33
lines changed

.storybook/config.js

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import WebfontLoader from '@dr-kobros/react-webfont-loader'
88
import theme from '../src/theme'
99
import { fontConfig } from '../src/fontConfig'
1010

11-
1211
const styles = {
1312
display: 'flex',
1413
height: '100%',

package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"@dr-kobros/react-webfont-loader": "^8.0.0",
77
"@storybook/cli": "^5.0.0-rc.3",
88
"fontfaceobserver": "^2.1.0",
9+
"fs": "^0.0.1-security",
910
"react": "^16.8.2",
1011
"react-dom": "^16.8.2",
1112
"react-icons": "^3.4.0",
@@ -18,7 +19,7 @@
1819
"build": "react-scripts build",
1920
"test": "react-scripts test",
2021
"eject": "react-scripts eject",
21-
"storybook": "start-storybook -p 9009 -s public",
22+
"storybook": "node pre-storybook.js && start-storybook -p 9009 -s public",
2223
"build-storybook": "build-storybook -s public"
2324
},
2425
"eslintConfig": {
@@ -39,6 +40,7 @@
3940
"@types/enzyme": "^3.1.18",
4041
"@types/enzyme-adapter-react-16": "^1.0.4",
4142
"@types/jest": "^24.0.6",
43+
"@types/node": "^11.9.5",
4244
"@types/react-icons": "^3.0.0",
4345
"@types/react-test-renderer": "^16.8.1",
4446
"@types/storybook__addon-actions": "^3.4.2",

pre-storybook.js

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const fs = require('fs')
2+
3+
const theme = fs.readFileSync('src/theme.json', { encoding: 'utf8' })
4+
fs.writeFileSync('src/ITheme.ts', `/*This is a generated file. Do not edit pls.*/\nexport default interface ITheme ${theme}`)
5+
6+

src/ITheme.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/*This is a generated file. Do not edit pls.*/
2+
export default interface ITheme {
3+
"global": {
4+
"margin": "20px !default",
5+
"fontFamily": "Fira Mono Latin Regular"
6+
},
7+
"colors": {
8+
"gray": "#aaa"
9+
}
10+
}

src/theme.json

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"global": {
3+
"margin": "20px !default",
4+
"fontFamily": "Fira Mono Latin Regular"
5+
},
6+
"colors": {
7+
"gray": "#aaa"
8+
}
9+
}

src/theme.ts

+7-12
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
1-
const theme = {
2-
global: {
3-
margin: '20px !default',
4-
fontFamily: 'Fira Mono Latin Regular'
5-
},
6-
colors: {
7-
gray: '#aaa'
8-
}
9-
}
1+
import fs from 'fs'
2+
import ITheme from './ITheme'
3+
import { DeepReadonly } from './utils/types'
104

11-
type Readonly<T> = { readonly [P in keyof T]-?: T[P] };
12-
export type Theme = Readonly<typeof theme>
5+
export type Theme = DeepReadonly<ITheme>
136

14-
export default theme as Theme
7+
const theme: Theme = JSON.parse(fs.readFileSync('./theme.json', { encoding: 'utf8' }))
8+
9+
export default theme

src/utils/types.ts

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export type primitive = string | number | boolean | undefined | null
2+
export type DeepReadonly<T> = T extends primitive ? T : DeepReadonlyObject<T>
3+
export type DeepReadonlyObject<T> = {
4+
readonly [P in keyof T]: DeepReadonly<T[P]>
5+
}

tsconfig.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@
2020
"isolatedModules": true
2121
},
2222
"include": [
23-
"src"
23+
"src", ".storybook/generateThemeInterface.js"
2424
]
2525
}

yarn.lock

+20-18
Original file line numberDiff line numberDiff line change
@@ -951,14 +951,6 @@
951951
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.2.tgz#63985d3d8b02530e0869962f4da09142ee8e200e"
952952
integrity sha512-n/VQ4mbfr81aqkx/XmVicOLjviMuy02eenSdJY33SVA7S2J42EU0P1H0mOogfYedb3wXA0d/LVtBrgTSm04WEA==
953953

954-
"@material-ui/icons@^3.0.2":
955-
version "3.0.2"
956-
resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-3.0.2.tgz#d67a6dd1ec8312d3a88ec97944a63daeef24fe10"
957-
integrity sha512-QY/3gJnObZQ3O/e6WjH+0ah2M3MOgLOzCy8HTUoUx9B6dDrS18vP7Ycw3qrDEKlB6q1KNxy6CZHm5FCauWGy2g==
958-
dependencies:
959-
"@babel/runtime" "^7.2.0"
960-
recompose "0.28.0 - 0.30.0"
961-
962954
"@mrmlnc/readdir-enhanced@^2.2.1":
963955
version "2.2.1"
964956
resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
@@ -1453,6 +1445,11 @@
14531445
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.26.tgz#2dec19f1f7981c95cb54bab8f618ecb5dc983d0e"
14541446
integrity sha512-nMRqS+mL1TOnIJrL6LKJcNZPB8V3eTfRo9FQA2b5gDvrHurC8XbSA86KNe0dShlEL7ReWJv/OU9NL7Z0dnqWTg==
14551447

1448+
"@types/node@^11.9.5":
1449+
version "11.9.5"
1450+
resolved "https://registry.yarnpkg.com/@types/node/-/node-11.9.5.tgz#011eece9d3f839a806b63973e228f85967b79ed3"
1451+
integrity sha512-vVjM0SVzgaOUpflq4GYBvCpozes8OgIIS5gVXVka+OfK3hvnkC1i93U8WiY2OtNE4XUWyyy/86Kf6e0IHTQw1Q==
1452+
14561453
"@types/prop-types@*":
14571454
version "15.5.9"
14581455
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.9.tgz#f2d14df87b0739041bc53a7d75e3d77d726a3ec0"
@@ -5973,6 +5970,11 @@ fs.realpath@^1.0.0:
59735970
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
59745971
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
59755972

5973+
fs@^0.0.1-security:
5974+
version "0.0.1-security"
5975+
resolved "https://registry.yarnpkg.com/fs/-/fs-0.0.1-security.tgz#8a7bd37186b6dddf3813f23858b57ecaaf5e41d4"
5976+
integrity sha1-invTcYa23d84E/I4WLV+yq9eQdQ=
5977+
59765978
59775979
version "1.2.4"
59785980
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426"
@@ -10938,24 +10940,24 @@ rechoir@^0.6.2:
1093810940
dependencies:
1093910941
resolve "^1.1.6"
1094010942

10941-
"recompose@0.28.0 - 0.30.0", recompose@^0.30.0:
10942-
version "0.30.0"
10943-
resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0"
10944-
integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==
10943+
recompose@^0.27.1:
10944+
version "0.27.1"
10945+
resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.27.1.tgz#1a49e931f183634516633bbb4f4edbfd3f38a7ba"
10946+
integrity sha512-p7xsyi/rfNjHfdP7vPU02uSFa+Q1eHhjKrvO+3+kRP4Ortj+MxEmpmd+UQtBGM2D2iNAjzNI5rCyBKp9Ob5McA==
1094510947
dependencies:
10946-
"@babel/runtime" "^7.0.0"
10948+
babel-runtime "^6.26.0"
1094710949
change-emitter "^0.1.2"
1094810950
fbjs "^0.8.1"
1094910951
hoist-non-react-statics "^2.3.1"
1095010952
react-lifecycles-compat "^3.0.2"
1095110953
symbol-observable "^1.0.4"
1095210954

10953-
recompose@^0.27.1:
10954-
version "0.27.1"
10955-
resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.27.1.tgz#1a49e931f183634516633bbb4f4edbfd3f38a7ba"
10956-
integrity sha512-p7xsyi/rfNjHfdP7vPU02uSFa+Q1eHhjKrvO+3+kRP4Ortj+MxEmpmd+UQtBGM2D2iNAjzNI5rCyBKp9Ob5McA==
10955+
recompose@^0.30.0:
10956+
version "0.30.0"
10957+
resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0"
10958+
integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==
1095710959
dependencies:
10958-
babel-runtime "^6.26.0"
10960+
"@babel/runtime" "^7.0.0"
1095910961
change-emitter "^0.1.2"
1096010962
fbjs "^0.8.1"
1096110963
hoist-non-react-statics "^2.3.1"

0 commit comments

Comments
 (0)