From 623c4a0b51b37d68993d762a034add8cf0d7d1ba Mon Sep 17 00:00:00 2001 From: Pedro Nauck Date: Fri, 23 Mar 2018 14:38:05 -0300 Subject: [PATCH] chore: split packages --- packages/playgrodd-core/package.json | 25 ++++++++++ .../src/compiler/create-compiler.ts} | 12 ++--- .../src/compiler/create-config.ts} | 22 ++++----- .../src/compiler/dev-server.ts | 2 +- .../src/compiler/files-parser.ts} | 47 +++++++++---------- .../src/compiler/generate-files.ts} | 13 ++--- packages/playgrodd-core/src/compiler/index.ts | 3 ++ .../src/compiler/paths.ts | 0 packages/playgrodd-core/src/index.ts | 1 + packages/playgrodd-core/src/server.ts | 23 +++++++++ packages/playgrodd-core/src/utils/helpers.ts | 1 + .../src/utils/traverse.ts | 0 packages/playgrodd-core/tsconfig.json | 11 +++++ packages/playgrodd-core/tslint.json | 3 ++ packages/playgrodd/src/components/Html.tsx | 12 ----- .../playgrodd/src/components/Playgrodd.tsx | 14 ------ packages/playgrodd/src/documents/container.ts | 21 --------- packages/playgrodd/src/server.ts | 22 --------- 18 files changed, 107 insertions(+), 125 deletions(-) create mode 100644 packages/playgrodd-core/package.json rename packages/{playgrodd/src/compiler/index.ts => playgrodd-core/src/compiler/create-compiler.ts} (68%) rename packages/{playgrodd/src/compiler/config.ts => playgrodd-core/src/compiler/create-config.ts} (77%) rename packages/{playgrodd => playgrodd-core}/src/compiler/dev-server.ts (91%) rename packages/{playgrodd/src/utils/components.ts => playgrodd-core/src/compiler/files-parser.ts} (63%) rename packages/{playgrodd/src/compiler/generate-files.tsx => playgrodd-core/src/compiler/generate-files.ts} (57%) create mode 100644 packages/playgrodd-core/src/compiler/index.ts rename packages/{playgrodd => playgrodd-core}/src/compiler/paths.ts (100%) create mode 100644 packages/playgrodd-core/src/index.ts create mode 100644 packages/playgrodd-core/src/server.ts create mode 100644 packages/playgrodd-core/src/utils/helpers.ts rename packages/{playgrodd => playgrodd-core}/src/utils/traverse.ts (100%) create mode 100644 packages/playgrodd-core/tsconfig.json create mode 100644 packages/playgrodd-core/tslint.json delete mode 100644 packages/playgrodd/src/components/Html.tsx delete mode 100644 packages/playgrodd/src/components/Playgrodd.tsx delete mode 100644 packages/playgrodd/src/documents/container.ts delete mode 100644 packages/playgrodd/src/server.ts diff --git a/packages/playgrodd-core/package.json b/packages/playgrodd-core/package.json new file mode 100644 index 0000000..68df130 --- /dev/null +++ b/packages/playgrodd-core/package.json @@ -0,0 +1,25 @@ +{ + "name": "playgrodd-core", + "version": "0.0.1", + "main": "./dist/main/index.jsx", + "typings": "./dist/main/index.d.ts", + "module": "./dist/module/index.jsx", + "source": "src/index.ts", + "scripts": { + "build": "run-s clean && run-p build:*", + "build:main": "tsc -p tsconfig.json", + "build:module": "tsc -p tsconfig.module.json", + "fix": "run-s fix:*", + "fix:prettier": "prettier \"src/**/*.{ts,tsx}\" --write", + "fix:tslint": "tslint --fix --project .", + "clean": "trash dist" + }, + "devDependencies": { + "npm-run-all": "^4.1.2", + "prettier": "^1.11.1", + "trash-cli": "^1.4.0", + "tslint": "^5.9.1", + "tslint-config-prettier": "^1.10.0", + "typescript": "^2.7.2" + } +} diff --git a/packages/playgrodd/src/compiler/index.ts b/packages/playgrodd-core/src/compiler/create-compiler.ts similarity index 68% rename from packages/playgrodd/src/compiler/index.ts rename to packages/playgrodd-core/src/compiler/create-compiler.ts index 8233ef6..6b36b2a 100644 --- a/packages/playgrodd/src/compiler/index.ts +++ b/packages/playgrodd-core/src/compiler/create-compiler.ts @@ -1,15 +1,13 @@ -import fs from 'fs' +import * as fs from 'fs' import mkdir from 'mkdirp' import trash from 'trash' import webpack from 'webpack' import * as paths from './paths' -import { config } from './config' -import { IComponentMap } from '../utils/components' +import { IEntryObj } from './files-parser' +import { createConfig } from './create-config' import { generateHtml, generateJs } from './generate-files' -export { config as devServerConfig } from './dev-server' - const checkMkdirTheme = (): void => { try { fs.lstatSync(paths.THEME) @@ -23,10 +21,10 @@ const tempFile = (filepath: string, content: string) => { fs.writeFileSync(filepath, content, 'utf-8') } -export const createCompiler = async (components: IComponentMap) => { +export const createCompiler = async (entries: IEntryObj[]) => { const js = generateJs() const html = generateHtml() - const webpackConfig = await config(components) + const webpackConfig = await createConfig(entries) await trash(paths.THEME) tempFile(paths.INDEX_JS, js) diff --git a/packages/playgrodd/src/compiler/config.ts b/packages/playgrodd-core/src/compiler/create-config.ts similarity index 77% rename from packages/playgrodd/src/compiler/config.ts rename to packages/playgrodd-core/src/compiler/create-config.ts index 3b192eb..e0d3952 100644 --- a/packages/playgrodd/src/compiler/config.ts +++ b/packages/playgrodd-core/src/compiler/create-config.ts @@ -1,13 +1,11 @@ import * as fs from 'fs' import * as path from 'path' import findup from 'find-up' -import webpack, { Loader, Configuration } from 'webpack' +import { Loader, Configuration } from 'webpack' import HtmlWebpackPlugin from 'html-webpack-plugin' -import { IComponentMap } from '../utils/components' import * as paths from './paths' - -export { config as devServerConfig } from './dev-server' +import { IEntryObj } from './files-parser' const babelLoader = (babelrc: string | null): Loader => ({ loader: require.resolve('babel-loader'), @@ -23,8 +21,8 @@ const babelLoader = (babelrc: string | null): Loader => ({ }, }) -export const config = async ( - components: IComponentMap +export const createConfig = async ( + entries: IEntryObj[] ): Promise => { const babelrcPath = await findup('.babelrc') const babelrc = babelrcPath ? fs.readFileSync(babelrcPath, 'utf-8') : null @@ -32,10 +30,7 @@ export const config = async ( return { mode: 'development', context: paths.ROOT, - entry: [ - ...Object.values(components).map(({ filepath: f }) => f), - paths.INDEX_JS, - ], + entry: [...entries.map(entry => entry.filepath), paths.INDEX_JS], output: { pathinfo: true, path: paths.DIST, @@ -58,11 +53,12 @@ export const config = async ( }, resolve: { extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'], + modules: [paths.ROOT, 'node_modules'], + alias: { + src: path.join(paths.ROOT, 'src'), + }, }, plugins: [ - new webpack.DefinePlugin({ - __PLAYGRODD_COMPONENTS__: JSON.stringify(components), - }), new HtmlWebpackPlugin({ template: paths.INDEX_HTML, }), diff --git a/packages/playgrodd/src/compiler/dev-server.ts b/packages/playgrodd-core/src/compiler/dev-server.ts similarity index 91% rename from packages/playgrodd/src/compiler/dev-server.ts rename to packages/playgrodd-core/src/compiler/dev-server.ts index 82fd683..480e752 100644 --- a/packages/playgrodd/src/compiler/dev-server.ts +++ b/packages/playgrodd-core/src/compiler/dev-server.ts @@ -3,7 +3,7 @@ import * as paths from './paths' const protocol = process.env.HTTPS === 'true' ? 'https' : 'http' const host = process.env.HOST || '0.0.0.0' -export const config = (compiler: any) => ({ +export const devServer = (compiler: any) => ({ compress: true, clientLogLevel: 'none', contentBase: paths.DIST, diff --git a/packages/playgrodd/src/utils/components.ts b/packages/playgrodd-core/src/compiler/files-parser.ts similarity index 63% rename from packages/playgrodd/src/utils/components.ts rename to packages/playgrodd-core/src/compiler/files-parser.ts index a125e2b..1c7ab6a 100644 --- a/packages/playgrodd/src/utils/components.ts +++ b/packages/playgrodd-core/src/compiler/files-parser.ts @@ -5,17 +5,7 @@ import { parse } from 'babylon' import { NodePath } from 'babel-traverse' import * as t from 'babel-types' -import { traverseAndAssign } from './traverse' - -export interface IComponent { - readonly id: string - readonly route: string - readonly filepath: string -} - -export interface IComponentMap { - readonly [key: string]: IComponent -} +import { traverseAndAssign } from '../utils/traverse' const ROOT_PATH = fs.realpathSync(process.cwd()) @@ -51,25 +41,30 @@ const getNameFromDoc = traverseAndAssign( path => path.node.arguments[0].value ) -const reduceByName = (obj: any, entry: string): IComponentMap => { - const ast = convertToAst(entry) - const name = getNameFromDoc(ast) - const route = path.join('/', path.parse(entry).dir, name || '') - const filepath = path.join(ROOT_PATH, entry) - - return Object.assign({}, obj, { - [`${name}`]: { - filepath, - route, - }, - }) +export interface IEntryObj { + name: string + filepath: string + route: string } -export const componentsFromPattern = (pattern: string): IComponentMap => { +const mountEntriesMapper = (file: string): IEntryObj => { + const ast = convertToAst(file) + const name = getNameFromDoc(ast) || '' + const route = path.join('/', path.parse(file).dir, name) + const filepath = path.relative(ROOT_PATH, file) + + return { + name, + route, + filepath, + } +} + +export const entriesMapper = (pattern: string): IEntryObj[] => { const ignoreGlob = '!node_modules' - const entries: string[] = glob.sync( + const files: string[] = glob.sync( Array.isArray(pattern) ? [...pattern, ignoreGlob] : [pattern, ignoreGlob] ) - return entries.filter(isPlaygroddFile).reduce(reduceByName, {}) + return files.filter(isPlaygroddFile).map(mountEntriesMapper) } diff --git a/packages/playgrodd/src/compiler/generate-files.tsx b/packages/playgrodd-core/src/compiler/generate-files.ts similarity index 57% rename from packages/playgrodd/src/compiler/generate-files.tsx rename to packages/playgrodd-core/src/compiler/generate-files.ts index 0a0c23b..279d18e 100644 --- a/packages/playgrodd/src/compiler/generate-files.tsx +++ b/packages/playgrodd-core/src/compiler/generate-files.ts @@ -1,7 +1,4 @@ -import * as React from 'react' -import { renderToString } from 'react-dom/server' - -const Html = () => ( +export const generateHtml = () => ` Playgrodd @@ -10,18 +7,16 @@ const Html = () => ( -) - -export const generateHtml = () => renderToString() +` export const generateJs = () => `import 'babel-polyfill' import * as React from 'react' import { render } from 'react-dom' - import { App } from 'playgrodd-theme-default' + import { Theme } from 'playgrodd-theme-default' render( - , + , document.querySelector('#root') )` diff --git a/packages/playgrodd-core/src/compiler/index.ts b/packages/playgrodd-core/src/compiler/index.ts new file mode 100644 index 0000000..ec26059 --- /dev/null +++ b/packages/playgrodd-core/src/compiler/index.ts @@ -0,0 +1,3 @@ +export { entriesMapper } from './files-parser' +export { createCompiler } from './create-compiler' +export { devServer } from './dev-server' diff --git a/packages/playgrodd/src/compiler/paths.ts b/packages/playgrodd-core/src/compiler/paths.ts similarity index 100% rename from packages/playgrodd/src/compiler/paths.ts rename to packages/playgrodd-core/src/compiler/paths.ts diff --git a/packages/playgrodd-core/src/index.ts b/packages/playgrodd-core/src/index.ts new file mode 100644 index 0000000..1132cee --- /dev/null +++ b/packages/playgrodd-core/src/index.ts @@ -0,0 +1 @@ +export { server } from './server' diff --git a/packages/playgrodd-core/src/server.ts b/packages/playgrodd-core/src/server.ts new file mode 100644 index 0000000..4580014 --- /dev/null +++ b/packages/playgrodd-core/src/server.ts @@ -0,0 +1,23 @@ +// /import { Arguments } from 'yargs' + +// import { entriesMapper } from './compiler' +// import { createCompiler, devServer } from './compiler' + +// import * as Koa from 'koa' +// const historyApiFallback = require('connect-history-api-fallback') +// const devServerMiddleware = require('webpack-dev-middleware') +// const hotMiddleware = require('webpack-hot-middleware') + +// console.log(Koa) + +export const server = ({ files: pattern }: any) => { + // const app = new Koa() + // const entries = await entriesMapper(pattern) + // const compiler = await createCompiler(entries) + // app.use(historyApiFallback()) + // app.use(hotMiddleware(compiler, { log: false, heartbeat: 2000 })) + // app.use(devServerMiddleware(compiler, devServer(compiler))) + // app.listen(3000, () => { + // console.log('Example app listening on port 3000!') + // }) +} diff --git a/packages/playgrodd-core/src/utils/helpers.ts b/packages/playgrodd-core/src/utils/helpers.ts new file mode 100644 index 0000000..ff9184b --- /dev/null +++ b/packages/playgrodd-core/src/utils/helpers.ts @@ -0,0 +1 @@ +export const isFn = (value: any): boolean => typeof value === 'function' diff --git a/packages/playgrodd/src/utils/traverse.ts b/packages/playgrodd-core/src/utils/traverse.ts similarity index 100% rename from packages/playgrodd/src/utils/traverse.ts rename to packages/playgrodd-core/src/utils/traverse.ts diff --git a/packages/playgrodd-core/tsconfig.json b/packages/playgrodd-core/tsconfig.json new file mode 100644 index 0000000..6f6f7be --- /dev/null +++ b/packages/playgrodd-core/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist/main", + "rootDir": "src", + "types": ["node"], + "typeRoots": ["node_modules/@types", "src/types"] + }, + "include": ["src/**/*"], + "exclude": ["node_modules/**"] +} diff --git a/packages/playgrodd-core/tslint.json b/packages/playgrodd-core/tslint.json new file mode 100644 index 0000000..0946f20 --- /dev/null +++ b/packages/playgrodd-core/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tslint.json" +} diff --git a/packages/playgrodd/src/components/Html.tsx b/packages/playgrodd/src/components/Html.tsx deleted file mode 100644 index 8734223..0000000 --- a/packages/playgrodd/src/components/Html.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import * as React from 'react' - -export const Html = () => ( - - - Playgrodd - -
- - - -) diff --git a/packages/playgrodd/src/components/Playgrodd.tsx b/packages/playgrodd/src/components/Playgrodd.tsx deleted file mode 100644 index c75f12b..0000000 --- a/packages/playgrodd/src/components/Playgrodd.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import * as React from 'react' -import { Router } from 'react-router-dom' -import { createBrowserHistory, History } from 'history' -import { Provider } from 'unstated' - -import { container } from '../documents/container' - -export const history: History = createBrowserHistory() - -export const Playgrodd: React.SFC = ({ children }) => ( - - {children} - -) diff --git a/packages/playgrodd/src/documents/container.ts b/packages/playgrodd/src/documents/container.ts deleted file mode 100644 index 30d3f24..0000000 --- a/packages/playgrodd/src/documents/container.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Container } from 'unstated' - -import { Doc } from './' - -export interface DocumentState { - documents: Doc[] -} - -export class DocumentsContainer extends Container { - state = { - documents: [], - } - - public add(document: Doc) { - this.setState({ - documents: [document, ...this.state.documents], - }) - } -} - -export const container = new DocumentsContainer() diff --git a/packages/playgrodd/src/server.ts b/packages/playgrodd/src/server.ts deleted file mode 100644 index a566d3b..0000000 --- a/packages/playgrodd/src/server.ts +++ /dev/null @@ -1,22 +0,0 @@ -import express from 'express' -import { Arguments } from 'yargs' -import devServerMiddleware from 'webpack-dev-middleware' -import historyApiFallback from 'connect-history-api-fallback' -import hotMiddleware from 'webpack-hot-middleware' - -import { componentsFromPattern } from './utils/components' -import { createCompiler, devServerConfig } from './compiler' - -exports.server = async ({ files: pattern }: Arguments) => { - const app = express() - const components = await componentsFromPattern(pattern) - const compiler = await createCompiler(components) - - app.use(historyApiFallback()) - app.use(hotMiddleware(compiler, { log: false, heartbeat: 2000 })) - app.use(devServerMiddleware(compiler, devServerConfig(compiler))) - - app.listen(3000, () => { - console.log('Example app listening on port 3000!') - }) -}