diff --git a/packages/client/package.json b/packages/client/package.json index 8a4d87d..b440d61 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -7,6 +7,6 @@ "react-redux": "^6.0.0", "redux": "^4.0.1" }, - "main": "src/index.js", - "types": "src/index.d.ts" + "main": "lib/index.js", + "types": "lib/index.d.ts" } diff --git a/packages/client/src/renderer/ClientRenderer.tsx b/packages/client/src/renderer/ClientRenderer.tsx index e96000b..0ddacfe 100644 --- a/packages/client/src/renderer/ClientRenderer.tsx +++ b/packages/client/src/renderer/ClientRenderer.tsx @@ -7,19 +7,18 @@ import {IRenderer} from './IRenderer' export class ClientRenderer implements IRenderer { constructor( readonly createStore: IStoreFactory, - readonly Component: Component, + readonly RootComponent: typeof Component, readonly target = document.body, ) {} - render() { - const state = (window as any).__PRELOADED_STATE__ - const {Component} = this + render(state = (window as any).__PRELOADED_STATE__) { + const {RootComponent} = this if (state) { const store = this.createStore(state) ReactDOM.hydrate( - + , this.target, ) @@ -27,11 +26,10 @@ export class ClientRenderer implements IRenderer { const store = this.createStore() ReactDOM.render( - + , this.target, ) } } } - diff --git a/packages/client/src/renderer/IRenderer.ts b/packages/client/src/renderer/IRenderer.ts index f63bcc9..e353b71 100644 --- a/packages/client/src/renderer/IRenderer.ts +++ b/packages/client/src/renderer/IRenderer.ts @@ -1,3 +1,3 @@ export interface IRenderer { - render(): any + render(state?: any): any } diff --git a/packages/client/src/renderer/IStoreFactory.ts b/packages/client/src/renderer/IStoreFactory.ts index c785beb..8860572 100644 --- a/packages/client/src/renderer/IStoreFactory.ts +++ b/packages/client/src/renderer/IStoreFactory.ts @@ -1,4 +1,4 @@ import {Store} from 'redux' // TODO maybe Store should also be typed -export type IStoreFactory = (state?: T) => Store +export type IStoreFactory = (state?: any) => Store diff --git a/packages/client/src/renderer/ServerRenderer.tsx b/packages/client/src/renderer/ServerRenderer.tsx index fcd7a27..7b8c568 100644 --- a/packages/client/src/renderer/ServerRenderer.tsx +++ b/packages/client/src/renderer/ServerRenderer.tsx @@ -1,18 +1,22 @@ +import React from 'react' +import {Component} from 'react' import {IRenderer} from './IRenderer' +import {IStoreFactory} from './IStoreFactory' +import {Provider} from 'react-redux' import {renderToNodeStream} from 'react-dom/server' export class ServerRenderer implements IRenderer { constructor( readonly createStore: IStoreFactory, - readonly Component: Component, + readonly RootComponent: typeof Component, ) {} - render() { - const {Component} = this + render(state?: any) { + const {RootComponent} = this const store = this.createStore(state) const stream = renderToNodeStream( - + , ) return stream diff --git a/packages/client/tsconfig.json b/packages/client/tsconfig.json index b360d6b..56fff90 100644 --- a/packages/client/tsconfig.json +++ b/packages/client/tsconfig.json @@ -1,19 +1,7 @@ { + "extends": "../tsconfig.common.json" "compilerOptions": { - "lib": ["es2015", "dom"], - "target": "es3", - "moduleResolution": "node", - "jsx": "react", - "noImplicitAny": true, - "strict": true, - "skipLibCheck": true, - "noUnusedLocals": true, - "esModuleInterop": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "plugins": [{ - "name": "typescript-tslint-plugin", - "suppressWhileTypeErrorsPresent": true - }] + "outDir": "lib", + "rootDir": "src" } } diff --git a/packages/common/package.json b/packages/common/package.json index 98b659d..817fcd3 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@rondo/common", "private": true, - "main": "src/index.js", - "types": "src/index.d.ts" + "main": "lib/index.js", + "types": "lib/index.d.ts" } diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json index b360d6b..caad41d 100644 --- a/packages/common/tsconfig.json +++ b/packages/common/tsconfig.json @@ -1,19 +1,7 @@ { + "extends": "../tsconfig.common.json", "compilerOptions": { - "lib": ["es2015", "dom"], - "target": "es3", - "moduleResolution": "node", - "jsx": "react", - "noImplicitAny": true, - "strict": true, - "skipLibCheck": true, - "noUnusedLocals": true, - "esModuleInterop": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "plugins": [{ - "name": "typescript-tslint-plugin", - "suppressWhileTypeErrorsPresent": true - }] + "outDir": "lib", + "rootDir": "src" } } diff --git a/packages/server/package.json b/packages/server/package.json index 59eaa15..0b42d91 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -34,6 +34,6 @@ "uuid": "^3.3.2", "winston": "^3.1.0" }, - "main": "src/index.js", - "types": "src/index.d.ts" + "main": "lib/index.js", + "types": "lib/index.d.ts" } diff --git a/packages/server/src/application/Application.ts b/packages/server/src/application/Application.ts index 4257ef1..9c5e1c7 100644 --- a/packages/server/src/application/Application.ts +++ b/packages/server/src/application/Application.ts @@ -6,7 +6,7 @@ import {IApplication} from './IApplication' import {IConfig} from './IConfig' import {IDatabase} from '../database/IDatabase' import {ILogger} from '../logger/ILogger' -import {IRoutes} from '../../common/REST' +import {IRoutes} from '@rondo/common' import {ITransactionManager} from '../database/ITransactionManager' import {IUserService, UserService} from '../services' import {loggerFactory, LoggerFactory} from '../logger/LoggerFactory' diff --git a/packages/server/src/application/IApplication.ts b/packages/server/src/application/IApplication.ts index 99bbb00..27e19c4 100644 --- a/packages/server/src/application/IApplication.ts +++ b/packages/server/src/application/IApplication.ts @@ -1,6 +1,6 @@ import express from 'express' import {AsyncRouter} from '../router' -import {IRoutes} from '../../common/REST' +import {IRoutes} from '@rondo/common' import {IDatabase} from '../database/IDatabase' export interface IApplication { diff --git a/packages/server/src/router/AsyncRouter.ts b/packages/server/src/router/AsyncRouter.ts index e227d53..9656bbb 100644 --- a/packages/server/src/router/AsyncRouter.ts +++ b/packages/server/src/router/AsyncRouter.ts @@ -1,4 +1,4 @@ -import {IRoutes, IRoute, IMethod} from '../../common/REST' +import {IRoutes, IRoute, IMethod} from '@rondo/common' import express, {NextFunction} from 'express' export interface IRequest extends express.Request { diff --git a/packages/server/src/router/TransactionalRouter.ts b/packages/server/src/router/TransactionalRouter.ts index f1a6c78..fb9ce8f 100644 --- a/packages/server/src/router/TransactionalRouter.ts +++ b/packages/server/src/router/TransactionalRouter.ts @@ -1,6 +1,6 @@ import express from 'express' import {AsyncRouter, IHandler} from './AsyncRouter' -import {IRoutes, IMethod} from '../../common/REST' +import {IRoutes, IMethod} from '@rondo/common' import {ITransactionManager} from '../database/ITransactionManager' export class TransactionalRouter extends AsyncRouter { diff --git a/packages/server/src/routes/BaseRoute.ts b/packages/server/src/routes/BaseRoute.ts index a190ad6..ae4918e 100644 --- a/packages/server/src/routes/BaseRoute.ts +++ b/packages/server/src/routes/BaseRoute.ts @@ -1,8 +1,8 @@ import {IHandler} from '../middleware/IHandler' import {AsyncRouter} from '../router' -import {IAPIDef} from '../../common/IAPIDef' +import {IRoutes} from '@rondo/common' -export abstract class BaseRoute { +export abstract class BaseRoute { readonly handle: IHandler constructor(protected readonly t: AsyncRouter) { diff --git a/packages/server/src/routes/LoginRoutes.ts b/packages/server/src/routes/LoginRoutes.ts index 579ef4a..6b1256c 100644 --- a/packages/server/src/routes/LoginRoutes.ts +++ b/packages/server/src/routes/LoginRoutes.ts @@ -1,6 +1,6 @@ import {AsyncRouter} from '../router' import {BaseRoute} from './BaseRoute' -import {IAPIDef} from '../../common/IAPIDef' +import {IAPIDef} from '@rondo/common' import {IUserService} from '../services' import {Authenticator} from '../middleware' diff --git a/packages/server/src/routes/UserRoutes.ts b/packages/server/src/routes/UserRoutes.ts index 97300cd..210f81b 100644 --- a/packages/server/src/routes/UserRoutes.ts +++ b/packages/server/src/routes/UserRoutes.ts @@ -1,6 +1,6 @@ import {AsyncRouter} from '../router' import {BaseRoute} from './BaseRoute' -import {IAPIDef} from '../../common/IAPIDef' +import {IAPIDef} from '@rondo/common' import {IUserService} from '../services' import {ensureLoggedInApi} from '../middleware' diff --git a/packages/server/src/routes/application.tsx b/packages/server/src/routes/application.tsx index 97c6e72..16f6974 100644 --- a/packages/server/src/routes/application.tsx +++ b/packages/server/src/routes/application.tsx @@ -1,45 +1,49 @@ -import React from 'react' -import {CComponent} from '../../client/components/Component' -import {Provider} from 'react-redux' +// import React from 'react' +// import {CComponent} from '@rondo/client' +// import {Provider} from 'react-redux' import {Router} from 'express' -import {createReadStream} from 'fs' -import {createStore} from '../../client/store' -import {join} from 'path' -import {renderToNodeStream} from 'react-dom/server' +// import {createReadStream} from 'fs' +// import {createStore} from '../../client/store' +// import {join} from 'path' +// import {renderToNodeStream} from 'react-dom/server' export const application = Router() -application.get('/client.js', (req, res) => { - const stream = createReadStream(join(__dirname, '../build/client.js')) - stream.pipe(res) -}) +// application.get('/client.js', (req, res) => { +// const stream = createReadStream(join(__dirname, '../build/client.js')) +// stream.pipe(res) +// }) -application.get('/no-ssr', (req, res) => { - res.write('My Page') - res.write(``) - res.end() -}) +// application.get('/no-ssr', (req, res) => { +// res.write('My Page') +// res.write(``) +// res.end() +// }) + +// application.get('/', (req, res) => { +// const store = createStore({ +// csrfToken: req.csrfToken(), +// value: '1234', +// }) +// const stream = renderToNodeStream( +// +// +// , +// ) +// const state = store.getState() +// res.write('My Page') +// // TODO attach javascript +// stream.pipe(res, { end: false }) +// stream.on('end', () => { +// res.write(` +// +// +// `) +// res.end() +// }) +// }) application.get('/', (req, res) => { - const store = createStore({ - csrfToken: req.csrfToken(), - value: '1234', - }) - const stream = renderToNodeStream( - - - , - ) - const state = store.getState() - res.write('My Page') - // TODO attach javascript - stream.pipe(res, { end: false }) - stream.on('end', () => { - res.write(` - - -`) - res.end() - }) + res.json({csrfToken: req.csrfToken}) }) diff --git a/packages/server/src/test-utils/RequestTester.ts b/packages/server/src/test-utils/RequestTester.ts index 6655ec2..e9d3c1e 100644 --- a/packages/server/src/test-utils/RequestTester.ts +++ b/packages/server/src/test-utils/RequestTester.ts @@ -1,5 +1,5 @@ import supertest from 'supertest' -import {IMethod, IRoutes} from '../../common/REST' +import {IMethod, IRoutes} from '@rondo/common' // https://stackoverflow.com/questions/48215950/exclude-property-from-type type Omit = Pick> diff --git a/packages/server/src/test-utils/TestUtils.ts b/packages/server/src/test-utils/TestUtils.ts index 4f16f5e..fbcf96e 100644 --- a/packages/server/src/test-utils/TestUtils.ts +++ b/packages/server/src/test-utils/TestUtils.ts @@ -4,7 +4,7 @@ import {Connection, QueryRunner} from 'typeorm' import { ENTITY_MANAGER, ITransactionManager, } from '../database/ITransactionManager' -import {IRoutes} from '../../common/REST' +import {IRoutes} from '@rondo/common' import {IBootstrap} from '../application/IBootstrap' import {RequestTester} from './RequestTester' diff --git a/packages/server/src/test.ts b/packages/server/src/test.ts index ca360ac..70b28e7 100644 --- a/packages/server/src/test.ts +++ b/packages/server/src/test.ts @@ -1,5 +1,5 @@ import {Bootstrap} from './application/Bootstrap' -import {IAPIDef} from '../common/IAPIDef' +import {IAPIDef} from '@rondo/common' import {NamespaceMock, TestUtils} from './test-utils' import {config} from './config' diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json index b360d6b..0d0ea08 100644 --- a/packages/server/tsconfig.json +++ b/packages/server/tsconfig.json @@ -1,19 +1,11 @@ { + "extends": "../tsconfig.common.json", "compilerOptions": { - "lib": ["es2015", "dom"], - "target": "es3", - "moduleResolution": "node", - "jsx": "react", - "noImplicitAny": true, - "strict": true, - "skipLibCheck": true, - "noUnusedLocals": true, - "esModuleInterop": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "plugins": [{ - "name": "typescript-tslint-plugin", - "suppressWhileTypeErrorsPresent": true - }] - } + "outDir": "lib", + "rootDir": "src" + }, + "references": [ + {"path": "../client"}, + {"path": "../common"} + ] } diff --git a/packages/tsconfig.common.json b/packages/tsconfig.common.json new file mode 100644 index 0000000..a003e86 --- /dev/null +++ b/packages/tsconfig.common.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + // following settings required for referenced projects + "composite": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, + + "lib": ["es2015", "dom"], + "target": "es3", + "moduleResolution": "node", + "jsx": "react", + "noImplicitAny": true, + "strict": true, + "skipLibCheck": true, + "noUnusedLocals": true, + "esModuleInterop": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "plugins": [{ + "name": "typescript-tslint-plugin", + "suppressWhileTypeErrorsPresent": true + }] + } +} diff --git a/packages/tsconfig.json b/packages/tsconfig.json new file mode 100644 index 0000000..1f639ae --- /dev/null +++ b/packages/tsconfig.json @@ -0,0 +1,8 @@ +{ + "files": [], + "references": [ + {"path": "client"}, + {"path": "common"}, + {"path": "server"} + ] +}