2022-07-08 08:22:35 +00:00
|
|
|
import glob
|
|
|
|
import os
|
2022-08-03 12:10:32 +00:00
|
|
|
import subprocess
|
|
|
|
import warnings
|
2022-07-08 08:22:35 +00:00
|
|
|
from os import path
|
|
|
|
from pathlib import Path
|
2022-08-03 12:10:32 +00:00
|
|
|
from typing import Any, List, NamedTuple, Optional
|
2022-07-08 08:22:35 +00:00
|
|
|
|
|
|
|
LNBITS_PATH = path.dirname(path.realpath(__file__)) + "/lnbits"
|
|
|
|
|
2022-08-03 11:16:50 +00:00
|
|
|
|
2022-07-08 08:22:35 +00:00
|
|
|
def get_js_vendored(prefer_minified: bool = False) -> List[str]:
|
|
|
|
paths = get_vendored(".js", prefer_minified)
|
|
|
|
|
|
|
|
def sorter(key: str):
|
|
|
|
if "moment@" in key:
|
|
|
|
return 1
|
|
|
|
if "vue@" in key:
|
|
|
|
return 2
|
|
|
|
if "vue-router@" in key:
|
|
|
|
return 3
|
|
|
|
if "polyfills" in key:
|
|
|
|
return 4
|
|
|
|
return 9
|
|
|
|
|
|
|
|
return sorted(paths, key=sorter)
|
|
|
|
|
|
|
|
|
|
|
|
def get_css_vendored(prefer_minified: bool = False) -> List[str]:
|
|
|
|
paths = get_vendored(".css", prefer_minified)
|
|
|
|
|
|
|
|
def sorter(key: str):
|
|
|
|
if "quasar@" in key:
|
|
|
|
return 1
|
|
|
|
if "vue@" in key:
|
|
|
|
return 2
|
|
|
|
if "chart.js@" in key:
|
|
|
|
return 100
|
|
|
|
return 9
|
|
|
|
|
|
|
|
return sorted(paths, key=sorter)
|
|
|
|
|
|
|
|
|
|
|
|
def get_vendored(ext: str, prefer_minified: bool = False) -> List[str]:
|
|
|
|
paths: List[str] = []
|
|
|
|
for path in glob.glob(
|
|
|
|
os.path.join(LNBITS_PATH, "static/vendor/**"), recursive=True
|
|
|
|
):
|
|
|
|
if path.endswith(".min" + ext):
|
|
|
|
# path is minified
|
|
|
|
unminified = path.replace(".min" + ext, ext)
|
|
|
|
if prefer_minified:
|
|
|
|
paths.append(path)
|
|
|
|
if unminified in paths:
|
|
|
|
paths.remove(unminified)
|
|
|
|
elif unminified not in paths:
|
|
|
|
paths.append(path)
|
|
|
|
|
|
|
|
elif path.endswith(ext):
|
|
|
|
# path is not minified
|
|
|
|
minified = path.replace(ext, ".min" + ext)
|
|
|
|
if not prefer_minified:
|
|
|
|
paths.append(path)
|
|
|
|
if minified in paths:
|
|
|
|
paths.remove(minified)
|
|
|
|
elif minified not in paths:
|
|
|
|
paths.append(path)
|
|
|
|
|
|
|
|
return sorted(paths)
|
|
|
|
|
|
|
|
|
|
|
|
def url_for_vendored(abspath: str) -> str:
|
|
|
|
return "/" + os.path.relpath(abspath, LNBITS_PATH)
|
|
|
|
|
2022-08-03 11:16:50 +00:00
|
|
|
|
2022-07-08 08:22:35 +00:00
|
|
|
def transpile_scss():
|
|
|
|
with warnings.catch_warnings():
|
|
|
|
warnings.simplefilter("ignore")
|
|
|
|
from scss.compiler import compile_string # type: ignore
|
|
|
|
|
|
|
|
with open(os.path.join(LNBITS_PATH, "static/scss/base.scss")) as scss:
|
|
|
|
with open(os.path.join(LNBITS_PATH, "static/css/base.css"), "w") as css:
|
|
|
|
css.write(compile_string(scss.read()))
|
|
|
|
|
2022-08-03 11:16:50 +00:00
|
|
|
|
2022-07-08 08:22:35 +00:00
|
|
|
def bundle_vendored():
|
|
|
|
for getfiles, outputpath in [
|
|
|
|
(get_js_vendored, os.path.join(LNBITS_PATH, "static/bundle.js")),
|
|
|
|
(get_css_vendored, os.path.join(LNBITS_PATH, "static/bundle.css")),
|
|
|
|
]:
|
|
|
|
output = ""
|
|
|
|
for path in getfiles():
|
|
|
|
with open(path) as f:
|
|
|
|
output += "/* " + url_for_vendored(path) + " */\n" + f.read() + ";\n"
|
|
|
|
with open(outputpath, "w") as f:
|
|
|
|
f.write(output)
|
|
|
|
|
|
|
|
|
|
|
|
def build():
|
|
|
|
transpile_scss()
|
|
|
|
bundle_vendored()
|
|
|
|
|
|
|
|
|
2022-08-03 11:16:50 +00:00
|
|
|
if __name__ == "__main__":
|
|
|
|
build()
|