File tree 8 files changed +15011
-0
lines changed
8 files changed +15011
-0
lines changed Original file line number Diff line number Diff line change
1
+ .idea /
2
+ .vscode /
3
+ node_modules /
4
+ build
5
+ .DS_Store
6
+ * .tgz
7
+ my-app *
8
+ template /src /__tests__ /__snapshots__ /
9
+ lerna-debug.log
10
+ npm-debug.log *
11
+ yarn-debug.log *
12
+ yarn-error.log *
13
+ /.changelog
14
+ .npm /
15
+ yarn.lock
Original file line number Diff line number Diff line change
1
+ const CopyPlugin = require ( 'copy-webpack-plugin' ) ;
2
+
3
+ module . exports = function override ( config , env ) {
4
+ config . plugins . push ( new CopyPlugin ( [
5
+ { from : 'node_modules/sql.js/dist/sql-wasm.wasm' , to : 'static/js/' } ,
6
+ ] ) ) ;
7
+ return config ;
8
+ }
Original file line number Diff line number Diff line change
1
+ {
2
+ "name" : " react-sqljs-demo" ,
3
+ "version" : " 1.0.0" ,
4
+ "description" : " sql.js + react example starter project" ,
5
+ "keywords" : [
6
+ " react" ,
7
+ " starter"
8
+ ],
9
+ "main" : " src/index.js" ,
10
+ "dependencies" : {
11
+ "react" : " 16.12.0" ,
12
+ "react-dom" : " 16.12.0" ,
13
+ "react-scripts" : " ^3.4.0" ,
14
+ "sql.js" : " ^1.2.1"
15
+ },
16
+ "devDependencies" : {
17
+ "copy-webpack-plugin" : " ^5.1.1" ,
18
+ "react-app-rewired" : " ^2.1.5" ,
19
+ "typescript" : " 3.3.3"
20
+ },
21
+ "scripts" : {
22
+ "start" : " react-app-rewired start" ,
23
+ "build" : " react-app-rewired build" ,
24
+ "test" : " react-app-rewired test --env=jsdom" ,
25
+ "eject" : " react-scripts eject"
26
+ },
27
+ "browserslist" : [
28
+ " >0.2%" ,
29
+ " not dead" ,
30
+ " not ie <= 11" ,
31
+ " not op_mini all"
32
+ ]
33
+ }
Original file line number Diff line number Diff line change
1
+ <!DOCTYPE html>
2
+ < html lang ="en ">
3
+
4
+ < head >
5
+ < meta charset ="utf-8 ">
6
+ < meta name ="viewport " content ="width=device-width, initial-scale=1, shrink-to-fit=no ">
7
+ < meta name ="theme-color " content ="#000000 ">
8
+ <!--
9
+ manifest.json provides metadata used when your web app is added to the
10
+ homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/
11
+ -->
12
+ < link rel ="manifest " href ="%PUBLIC_URL%/manifest.json ">
13
+ < link rel ="shortcut icon " href ="%PUBLIC_URL%/favicon.ico ">
14
+ <!--
15
+ Notice the use of %PUBLIC_URL% in the tags above.
16
+ It will be replaced with the URL of the `public` folder during the build.
17
+ Only files inside the `public` folder can be referenced from the HTML.
18
+
19
+ Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
20
+ work correctly both with client-side routing and a non-root public URL.
21
+ Learn how to configure a non-root public URL by running `npm run build`.
22
+ -->
23
+ < title > React App</ title >
24
+ </ head >
25
+
26
+ < body >
27
+ < noscript >
28
+ You need to enable JavaScript to run this app.
29
+ </ noscript >
30
+ < div id ="root "> </ div >
31
+ <!--
32
+ This HTML file is a template.
33
+ If you open it directly in the browser, you will see an empty page.
34
+
35
+ You can add webfonts, meta tags, or analytics to this file.
36
+ The build step will place the bundled scripts into the <body> tag.
37
+
38
+ To begin the development, run `npm start` or `yarn start`.
39
+ To create a production bundle, use `npm run build` or `yarn build`.
40
+ -->
41
+ </ body >
42
+
43
+ </ html >
Original file line number Diff line number Diff line change
1
+ import React from "react" ;
2
+ import "./styles.css" ;
3
+ import initSqlJs from "sql.js" ;
4
+
5
+
6
+ export default class App extends React . Component {
7
+ constructor ( ) {
8
+ super ( ) ;
9
+ this . state = { db : null , err : null , result : null }
10
+ }
11
+ componentDidMount ( ) {
12
+ initSqlJs ( )
13
+ . then ( SQL => this . setState ( { db : new SQL . Database ( ) } ) )
14
+ . catch ( err => this . setState ( { err } ) ) ;
15
+ }
16
+ exec ( sql ) {
17
+ let result = null , err = null ;
18
+ try {
19
+ result = this . state . db . exec ( sql ) ;
20
+ } catch ( e ) {
21
+ err = e
22
+ }
23
+ this . setState ( { result, err } )
24
+ }
25
+ renderResult ( { columns, values } ) {
26
+
27
+ return < table >
28
+ < thead >
29
+ < tr >
30
+ { columns . map ( c => < td > { c } </ td > ) }
31
+ </ tr >
32
+ </ thead >
33
+ < tbody >
34
+ { values . map ( row =>
35
+ < tr > { row . map ( v => < td > { v } </ td > ) } </ tr >
36
+ ) }
37
+ </ tbody >
38
+ </ table >
39
+ }
40
+ render ( ) {
41
+ let { db, err, result } = this . state ;
42
+ if ( ! db ) return < pre > Loading...</ pre > ;
43
+ return (
44
+ < div className = "App" >
45
+ < h1 > React SQL interpreter</ h1 >
46
+ < textarea
47
+ onChange = { e => this . exec ( e . target . value ) }
48
+ placeholder = "Enter some SQL. No inpiration ? Try “select sqlite_version()”" > </ textarea >
49
+ < pre className = "error" > { ( err || "" ) . toString ( ) } </ pre >
50
+ < pre > { result ? result . map ( this . renderResult ) : "" } </ pre >
51
+ </ div >
52
+ ) ;
53
+ }
54
+ }
Original file line number Diff line number Diff line change
1
+ import React from "react" ;
2
+ import ReactDOM from "react-dom" ;
3
+
4
+ import App from "./App" ;
5
+
6
+ const rootElement = document . getElementById ( "root" ) ;
7
+ ReactDOM . render (
8
+ < React . StrictMode >
9
+ < App />
10
+ </ React . StrictMode > ,
11
+ rootElement
12
+ ) ;
Original file line number Diff line number Diff line change
1
+ .App {
2
+ font-family : sans-serif;
3
+ font-size : 1.5em ;
4
+ }
5
+
6
+ textarea {
7
+ font-size : 1.1em ;
8
+ width : 70% ;
9
+ display : block;
10
+ margin : auto;
11
+ }
12
+
13
+ table {
14
+ border : 1px solid # 1C6EA4 ;
15
+ background-color : # EEEEEE ;
16
+ width : 40% ;
17
+ margin : 1.5em auto;
18
+ text-align : left;
19
+ border-collapse : collapse;
20
+ text-align : right;
21
+ }
22
+
23
+ thead {
24
+ font-weight : bold;
25
+ text-align : center;
26
+ border : 2px solid # 999 ;
27
+ }
28
+
29
+ th , td {
30
+ border : 1px solid # aaa ;
31
+ }
32
+
33
+ .error {
34
+ color : # 922 ;
35
+ }
You can’t perform that action at this time.
0 commit comments