mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-06 12:01:40 +08:00
Bug: 1292013 Change-Id: Idf2e5de0b6ca3a296e5efd7952911783d6005e30 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3484196 Reviewed-by: Tim Van der Lippe <tvanderlippe@chromium.org> Commit-Queue: Liviu Rau <liviurau@chromium.org>
107 lines
3.2 KiB
Python
107 lines
3.2 KiB
Python
#!/usr/bin/env vpython3
|
|
# -*- coding: utf-8 -*-
|
|
#
|
|
# Copyright 2020 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
"""
|
|
Builds inspector overlay:
|
|
- bundles input js files using rollup
|
|
- copies css files as is
|
|
"""
|
|
|
|
from os import path
|
|
from os.path import join
|
|
from itertools import tee
|
|
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
|
|
try:
|
|
original_sys_path = sys.path
|
|
sys.path = sys.path + [
|
|
path.join(os.path.dirname(os.path.realpath(__file__)), '..')
|
|
]
|
|
import devtools_paths
|
|
finally:
|
|
sys.path = original_sys_path
|
|
|
|
|
|
def read_file(filename):
|
|
with open(path.normpath(filename), 'rt', encoding='utf-8') as input:
|
|
return input.read()
|
|
|
|
|
|
def write_file(filename, content):
|
|
if path.exists(filename):
|
|
os.remove(filename)
|
|
directory = path.dirname(filename)
|
|
if not path.exists(directory):
|
|
os.makedirs(directory)
|
|
with open(filename, 'wt', encoding='utf-8') as output:
|
|
output.write(content)
|
|
|
|
|
|
def check_size(filename, data, max_size):
|
|
assert len(
|
|
data
|
|
) < max_size, "generated file %s should not exceed max_size of %d bytes. Current size: %d" % (
|
|
filename, max_size, len(data))
|
|
|
|
|
|
def rollup(input_path, output_path, filename, max_size, rollup_plugin):
|
|
target = join(input_path, filename)
|
|
rollup_process = subprocess.Popen(
|
|
[devtools_paths.node_path(),
|
|
devtools_paths.rollup_path()] +
|
|
['--format', 'iife', '-n', 'InspectorOverlay'] + ['--input', target] +
|
|
['--plugin', rollup_plugin, '--plugin', 'terser'],
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
universal_newlines=True,
|
|
encoding='utf-8')
|
|
out, error = rollup_process.communicate()
|
|
if not out:
|
|
raise Exception("rollup failed: " + error)
|
|
check_size(filename, out, max_size)
|
|
write_file(join(output_path, filename), out)
|
|
|
|
|
|
def to_pairs(list):
|
|
pairs = []
|
|
while list:
|
|
pairs.append((list.pop(0), list.pop(0)))
|
|
return pairs
|
|
|
|
|
|
def main(argv):
|
|
try:
|
|
input_path_flag_index = argv.index('--input_path')
|
|
input_path = argv[input_path_flag_index + 1]
|
|
output_path_flag_index = argv.index('--output_path')
|
|
output_path = argv[output_path_flag_index + 1]
|
|
rollup_plugin_index = argv.index('--rollup_plugin')
|
|
rollup_plugin = argv[rollup_plugin_index + 1]
|
|
|
|
file_names_with_sizes = to_pairs(argv[1:input_path_flag_index])
|
|
for filename, max_size in file_names_with_sizes:
|
|
max_size = int(max_size)
|
|
if filename.endswith(".js"):
|
|
rollup(input_path, output_path, filename, max_size,
|
|
rollup_plugin)
|
|
if filename.endswith(".css"):
|
|
css_file = read_file(join(input_path, filename))
|
|
check_size(filename, css_file, max_size)
|
|
write_file(join(output_path, filename), css_file)
|
|
|
|
except:
|
|
print(
|
|
'Usage: %s filename_1 max_size_1 filename_2 max_size_2 ... filename_N max_size_N --input_path <input_path> --output_path <output_path>'
|
|
% argv[0])
|
|
raise
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main(sys.argv))
|