aboutsummaryrefslogtreecommitdiff
path: root/src_doit/js.py
diff options
context:
space:
mode:
authorbozo.kopic <bozo@kopic.xyz>2021-07-28 01:43:55 +0200
committerbozo.kopic <bozo@kopic.xyz>2021-07-29 00:01:57 +0200
commit1e874e790c12839695761a654b44fb427149a353 (patch)
tree6942441ac511ec1417b2434b111101fa8d7f7e68 /src_doit/js.py
init
Diffstat (limited to 'src_doit/js.py')
-rw-r--r--src_doit/js.py117
1 files changed, 117 insertions, 0 deletions
diff --git a/src_doit/js.py b/src_doit/js.py
new file mode 100644
index 0000000..dea8d04
--- /dev/null
+++ b/src_doit/js.py
@@ -0,0 +1,117 @@
+from pathlib import Path
+import subprocess
+import tempfile
+
+from . import common
+
+
+__all__ = ['task_js_build',
+ 'task_js_deps',
+ 'task_js_deps_clean']
+
+
+src_py_dir = Path('src_py')
+src_js_dir = Path('src_js')
+src_scss_dir = Path('src_scss')
+node_modules_dir = Path('node_modules')
+openapi_dir = Path('schemas_openapi')
+
+dst_dir = src_py_dir / 'restlog/ui'
+
+
+def task_js_build():
+ """JavaScript - build"""
+
+ def build(args):
+ args = args or []
+ entry = src_js_dir / 'main.js'
+ conf = _webpack_conf.format(
+ entry=entry.resolve(),
+ dst_dir=dst_dir.resolve(),
+ src_js_dir=src_js_dir.resolve(),
+ src_scss_dir=src_scss_dir.resolve(),
+ node_modules_dir=node_modules_dir.resolve())
+
+ common.rm_rf(dst_dir)
+ dst_dir.mkdir(parents=True, exist_ok=True)
+
+ common.cp_r(openapi_dir / 'main.yaml', dst_dir / 'openapi.yaml')
+ (dst_dir / 'index.html').write_text(_index_html)
+
+ with tempfile.TemporaryDirectory() as tmpdir:
+ tmpdir = Path(tmpdir)
+ config_path = tmpdir / 'webpack.config.js'
+ config_path.write_text(conf)
+ subprocess.run([str(node_modules_dir / '.bin/webpack'),
+ '--config', str(config_path),
+ *args],
+ check=True)
+
+ return {'actions': [(common.rm_rf, [dst_dir]),
+ build],
+ 'pos_arg': 'args',
+ 'task_dep': ['js_deps']}
+
+
+def task_js_deps():
+ """JavaScript - install dependencies"""
+ return {'actions': ['yarn install --silent']}
+
+
+def task_js_deps_clean():
+ """JavaScript - remove dependencies"""
+ return {'actions': [(common.rm_rf, [node_modules_dir,
+ Path('yarn.lock')])]}
+
+
+_index_html = r"""<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <title>restlog</title>
+ <script src="index.js"></script>
+</head>
+<body>
+</body>
+</html>
+"""
+
+
+_webpack_conf = r"""
+module.exports = {{
+ mode: 'none',
+ entry: '{entry}',
+ output: {{
+ filename: 'index.js',
+ path: '{dst_dir}'
+ }},
+ module: {{
+ rules: [
+ {{
+ test: /\.scss$/,
+ use: [
+ "style-loader",
+ "css-loader",
+ "resolve-url-loader",
+ {{
+ loader: "sass-loader",
+ options: {{ sourceMap: true }}
+ }}
+ ]
+ }}
+ ]
+ }},
+ resolve: {{
+ modules: [
+ '{src_js_dir}',
+ '{src_scss_dir}',
+ '{node_modules_dir}'
+ ]
+ }},
+ watchOptions: {{
+ ignored: /node_modules/
+ }},
+ devtool: 'source-map',
+ stats: 'errors-only'
+}};
+"""