tampermonkey/py/build.py
2026-08-15 19:12:05 +03:00

80 lines
2.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""Сборщик итогового файла test.js.
Берёт файл tpl.js и заменяет в нём строку-заглушку "code;" на
объединённое содержимое всех файлов из папки src (в алфавитном порядке).
Результат сохраняется в файл test.js.
"""
import os
# Файлы, участвующие в сборке (пути относительно скрипта)
TPL_FILE = "tpl.js"
SRC_DIR = "src"
OUTPUT_FILE = "test.js"
# Строка-заглушка, которую заменяем на код из src
PLACEHOLDER = "code;"
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
def read_file(path):
"""Читает файл и возвращает его содержимое в виде строки."""
with open(path, "r", encoding="utf-8") as f:
return f.read()
def write_file(path, content):
"""Записывает содержимое в файл."""
with open(path, "w", encoding="utf-8") as f:
f.write(content)
def build():
"""Собирает итоговый файл test.js из tpl.js и содержимого src/."""
# Читаем шаблон
tpl_path = os.path.join(BASE_DIR, TPL_FILE)
if not os.path.isfile(tpl_path):
raise FileNotFoundError("Не найден файл шаблона: {}".format(TPL_FILE))
template = read_file(tpl_path)
# Читаем файлы из папки src в алфавитном порядке
src_path = os.path.join(BASE_DIR, SRC_DIR)
parts = []
if os.path.isdir(src_path):
src_files = sorted(
f for f in os.listdir(src_path)
if os.path.isfile(os.path.join(src_path, f))
)
for name in src_files:
parts.append(read_file(os.path.join(src_path, name)))
else:
print("Предупреждение: не найдена папка: {}".format(SRC_DIR + "/"))
code_content = "\n".join(parts)
# Проверяем наличие заглушки
if PLACEHOLDER not in template:
raise ValueError(
"В шаблоне {} не найдена строка-заглушка '{}'".format(
TPL_FILE, PLACEHOLDER
)
)
# Заменяем заглушку на объединённый код src
result = template.replace(PLACEHOLDER, code_content)
# Записываем результат
output_path = os.path.join(BASE_DIR, OUTPUT_FILE)
write_file(output_path, result)
print("Готово: {} -> {} ({} символов)".format(
", ".join([TPL_FILE, SRC_DIR + "/*"]),
OUTPUT_FILE,
len(result),
))
if __name__ == "__main__":
build()