Files
brave-core/script/transpile-web-ui.py
T
Sampson 18105e71c4 Update Custom Distillation Approach, Enable by Default (#27904)
* add an option to declare if an iife is desired or not
* bundle distiller scripts directly, opt-out of an iife
* provide default distillation level value
* fixes distiller execution

With distiller scripts no longer being wrapped in IIFE's (by Webpack), we have a simpler execution pattern (i.e., { %s distill() }). This means we no longer need to combine scripts, or wait for promises to resolve. Lastly, the map of host names to distillation preferences has been moved to the header, which seems to be a more appropriate location.

* sets default distillation level to FULL
* switches distiller scripts to enabled-by-default
2025-03-04 11:15:06 -06:00

173 lines
6.1 KiB
Python
Executable File

#!/usr/bin/env python3
# Copyright (c) 2018 The Brave Authors. All rights reserved.
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import argparse
import os
import sys
import shutil
from lib.util import execute_stdout, scoped_cwd
NPM = 'npm'
if sys.platform in ['win32', 'cygwin']:
NPM += '.cmd'
def main():
# Accept all paths as either absolute or relative to working dir,
# except grd_path, which we must know the relative location of
# in order to create a valid depfile.
args = parse_args()
output_path_absolute = os.path.abspath(args.output_path[0])
root_gen_dir = args.root_gen_dir[0]
grd_path = os.path.join(args.output_path[0], args.grd_name[0])
resource_path_prefix = args.resource_path_prefix
clean_target_dir(output_path_absolute)
webpack_gen_dir = output_path_absolute
depfile_path = os.path.abspath(args.depfile_path[0])
transpile_options = dict(production=args.production,
target_gen_dir=webpack_gen_dir,
root_gen_dir=root_gen_dir,
entry_points=args.entry,
depfile_path=depfile_path,
depfile_sourcename=grd_path,
webpack_aliases=args.webpack_alias,
output_module=args.output_module,
extra_modules=args.extra_modules,
public_asset_path=args.public_asset_path,
sync_wasm=args.sync_wasm,
no_iife=args.no_iife)
transpile_web_uis(transpile_options)
generate_grd(output_path_absolute, args.grd_name[0], args.resource_name[0],
resource_path_prefix)
def parse_args():
parser = argparse.ArgumentParser(description='Transpile web-uis')
parser.add_argument('-p', '--production',
action='store_true',
help='Uses production config')
parser.add_argument('--entry',
action='append',
help='Entry points',
required=True)
parser.add_argument('--output_path', nargs=1)
parser.add_argument('--root_gen_dir', nargs=1)
parser.add_argument('--depfile_path', nargs=1)
parser.add_argument('--grd_name', nargs=1)
parser.add_argument('--resource_name', nargs=1)
parser.add_argument('--public_asset_path', nargs='?')
parser.add_argument('--webpack_alias',
action='append',
help='Webpack alias',
required=False,
default=[])
parser.add_argument('--output_module', action='store_true')
parser.add_argument(
"--resource_path_prefix",
nargs='?',
help="The resource path prefix. Used in grit part files.")
parser.add_argument('--extra_modules',
action='append',
help='Extra paths to find modules',
required=False,
default=[])
parser.add_argument('--sync_wasm', action='store_true')
parser.add_argument('--no_iife', action='store_true')
args = parser.parse_args()
# validate args
if (args.output_path is None or len(args.output_path) != 1 or
len(args.output_path[0]) == 0):
raise Exception(" output_path argument was not specified correctly")
# args are valid
return args
def clean_target_dir(target_dir):
try:
if os.path.exists(target_dir):
shutil.rmtree(target_dir)
except Exception as e:
raise Exception("Error removing previous webpack target dir") from e
def transpile_web_uis(options):
env = os.environ.copy()
args = [NPM, 'run', 'web-ui', '--']
if options['production']:
args.append("--mode=production")
else:
args.append("--mode=development")
if options['public_asset_path'] is not None:
args.append("--env=output_public_path=" + options['public_asset_path'])
# web pack aliases
if options['webpack_aliases']:
args.append("--env=webpack_aliases=" +
",".join(options['webpack_aliases']))
if options['output_module']:
args.append("--env=output_module")
# extra module locations
if options['extra_modules']:
args.append("--env=extra_modules=" + ",".join(options['extra_modules']))
# In webpack.config.js there is a custom parser to support named entry
# points. As webpack-cli no longer supports named entries, we provide them
# via in a custom variable, comma-separated and with
# "[name]=[path]" syntax.
args.append("--env=brave_entries=" + ",".join(options['entry_points']))
if options['sync_wasm']:
args.append("--env=sync_wasm")
# Webpack will by default wrap the output in an IIFE, which is not
# desirable for some bundles.
if options['no_iife']:
args.append("--env=no_iife")
# We should use webpack-cli env param to not pollute environment
env["ROOT_GEN_DIR"] = options['root_gen_dir']
env["TARGET_GEN_DIR"] = options['target_gen_dir']
env["DEPFILE_PATH"] = options['depfile_path']
env["DEPFILE_SOURCE_NAME"] = options['depfile_sourcename']
dirname = os.path.abspath(os.path.join(__file__, '..', '..'))
with scoped_cwd(dirname):
execute_stdout(args, env)
def generate_grd(target_include_dir, grd_name, resource_name,
resource_path_prefix):
env = os.environ.copy()
args = [NPM, 'run', 'web-ui-gen-grd']
env["RESOURCE_NAME"] = resource_name
env["GRD_NAME"] = grd_name
env["ID_PREFIX"] = "IDR_" + resource_name.upper() + '_'
env["TARGET_DIR"] = target_include_dir
if resource_path_prefix is not None:
env["RESOURCE_PATH_PREFIX"] = resource_path_prefix
dirname = os.path.abspath(os.path.join(__file__, '..', '..'))
with scoped_cwd(dirname):
execute_stdout(args, env)
if __name__ == '__main__':
sys.exit(main())