diff --git a/packages/playgrodd-core/package.json b/packages/playgrodd-core/package.json
index 16ff6c17b..3de69ed39 100644
--- a/packages/playgrodd-core/package.json
+++ b/packages/playgrodd-core/package.json
@@ -5,18 +5,20 @@
"typings": "./dist/main/index.d.ts",
"module": "./dist/module/index.js",
"scripts": {
+ "copy-templates": "node scripts/copy-templates",
+ "clean": "trash dist && yarn copy-templates",
"dev": "run-s clean build:main && run-p \"build:main -- -w\"",
"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"
+ "fix:tslint": "tslint --fix --project ."
},
"dependencies": {
"@babel/core": "^7.0.0-beta.42",
"@babel/runtime": "^7.0.0-beta.42",
+ "art-template": "^4.12.2",
"babel-loader": "^8.0.0-beta.1",
"babel-polyfill": "^7.0.0-beta.3",
"babel-traverse": "^6.26.0",
@@ -43,6 +45,7 @@
"@types/express": "^4.11.1",
"@types/mkdirp": "^0.5.2",
"@types/webpack": "^4.1.2",
- "@types/webpack-dev-server": "^2.9.4"
+ "@types/webpack-dev-server": "^2.9.4",
+ "shelljs": "^0.8.1"
}
}
diff --git a/packages/playgrodd-core/scripts/copy-templates.js b/packages/playgrodd-core/scripts/copy-templates.js
new file mode 100644
index 000000000..486b8909b
--- /dev/null
+++ b/packages/playgrodd-core/scripts/copy-templates.js
@@ -0,0 +1,9 @@
+#!/usr/bin/env node
+
+const { cp, rm, mkdir } = require('shelljs')
+
+const DIST = 'dist/'
+
+rm('-rf', DIST)
+mkdir('-p', DIST)
+cp('-R', 'templates/', DIST)
diff --git a/packages/playgrodd-core/src/types.d.ts b/packages/playgrodd-core/src/types.d.ts
index 940e35d3a..0c7a67a77 100644
--- a/packages/playgrodd-core/src/types.d.ts
+++ b/packages/playgrodd-core/src/types.d.ts
@@ -1,2 +1,3 @@
+declare module 'art-template'
declare module 'react-dev-utils/errorOverlayMiddleware'
declare module 'react-dev-utils/WebpackDevServerUtils'
diff --git a/packages/playgrodd-core/templates/app.tpl.js b/packages/playgrodd-core/templates/app.tpl.js
new file mode 100644
index 000000000..c8ab35869
--- /dev/null
+++ b/packages/playgrodd-core/templates/app.tpl.js
@@ -0,0 +1,7 @@
+<% entries.forEach(function(entry) { %>import '<%- entry.filepath %>'
+<% }); %>
+import React from 'react'
+import { hot } from 'react-hot-loader'
+import { Theme } from 'playgrodd-theme-default'
+
+export const App = hot(module)(Theme)
diff --git a/packages/playgrodd-core/templates/index.tpl.html b/packages/playgrodd-core/templates/index.tpl.html
new file mode 100644
index 000000000..3db1bb3f0
--- /dev/null
+++ b/packages/playgrodd-core/templates/index.tpl.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+ Playgrodd
+
+
+
+
+
diff --git a/packages/playgrodd-core/templates/index.tpl.js b/packages/playgrodd-core/templates/index.tpl.js
new file mode 100644
index 000000000..ce845df41
--- /dev/null
+++ b/packages/playgrodd-core/templates/index.tpl.js
@@ -0,0 +1,5 @@
+import React from 'react'
+import { render } from 'react-dom'
+import { App } from './app'
+
+render(, document.querySelector('#root'))
diff --git a/yarn.lock b/yarn.lock
index dae64be51..5abc884df 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -899,7 +899,7 @@ acorn@^3.0.4:
version "3.3.0"
resolved "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
-acorn@^5.0.0, acorn@^5.5.0, acorn@^5.5.3:
+acorn@^5.0.0, acorn@^5.0.3, acorn@^5.5.0, acorn@^5.5.3:
version "5.5.3"
resolved "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9"
@@ -1086,6 +1086,20 @@ arrify@^1.0.0, arrify@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+art-template@^4.12.2:
+ version "4.12.2"
+ resolved "https://registry.npmjs.org/art-template/-/art-template-4.12.2.tgz#a41eb82d9679bbd1c73f1f838ff46e8eb0612565"
+ dependencies:
+ acorn "^5.0.3"
+ detect-node "^2.0.3"
+ escodegen "^1.8.1"
+ estraverse "^4.2.0"
+ html-minifier "^3.4.3"
+ is-keyword-js "^1.0.3"
+ js-tokens "^3.0.1"
+ merge-source-map "^1.0.3"
+ source-map "^0.5.6"
+
asap@~2.0.3:
version "2.0.6"
resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
@@ -2570,6 +2584,17 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1
version "1.0.5"
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+escodegen@^1.8.1:
+ version "1.9.1"
+ resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2"
+ dependencies:
+ esprima "^3.1.3"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
eslint-scope@^3.7.1:
version "3.7.1"
resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
@@ -2631,6 +2656,10 @@ espree@^3.5.4:
acorn "^5.5.0"
acorn-jsx "^3.0.0"
+esprima@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+
esprima@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
@@ -2647,7 +2676,7 @@ esrecurse@^4.1.0:
dependencies:
estraverse "^4.1.0"
-estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
+estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
version "4.2.0"
resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
@@ -3529,6 +3558,18 @@ html-minifier@^3.2.3:
relateurl "0.2.x"
uglify-js "3.3.x"
+html-minifier@^3.4.3:
+ version "3.5.14"
+ resolved "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.14.tgz#88653b24b344274e3e3d7052f1541ebea054ac60"
+ dependencies:
+ camel-case "3.0.x"
+ clean-css "4.1.x"
+ commander "2.15.x"
+ he "1.1.x"
+ param-case "2.1.x"
+ relateurl "0.2.x"
+ uglify-js "3.3.x"
+
html-webpack-plugin@^3.1.0:
version "3.1.0"
resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.1.0.tgz#6e02baaedb1e906310917f03239c793a75af2885"
@@ -3846,6 +3887,10 @@ is-glob@^4.0.0:
dependencies:
is-extglob "^2.1.1"
+is-keyword-js@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/is-keyword-js/-/is-keyword-js-1.0.3.tgz#ac30dcf35b671f4b27b17f5cb57235126021132d"
+
is-module@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
@@ -4013,7 +4058,7 @@ isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-js-tokens@^3.0.0, js-tokens@^3.0.2:
+js-tokens@^3.0.0, js-tokens@^3.0.1, js-tokens@^3.0.2:
version "3.0.2"
resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
@@ -4480,6 +4525,12 @@ merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+merge-source-map@^1.0.3:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
+ dependencies:
+ source-map "^0.6.1"
+
merge2@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz#271d2516ff52d4af7f7b710b8bf3e16e183fef66"
@@ -4963,7 +5014,7 @@ optimist@^0.6.1:
minimist "~0.0.1"
wordwrap "~0.0.2"
-optionator@^0.8.2:
+optionator@^0.8.1, optionator@^0.8.2:
version "0.8.2"
resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
dependencies: