blob: ca05cd074f4588318087364a804e4c8019700883 [file] [log] [blame]
# Copyright 2021 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.
import argparse
import json
import os
import re
import sys
_CWD = os.getcwd()
_HERE_DIR = os.path.dirname(__file__)
_SRC_DIR = os.path.normpath(os.path.join(_HERE_DIR, '..', '..'))
sys.path.append(os.path.join(_SRC_DIR, 'third_party', 'node'))
import node
import node_modules
def _write_tsconfig_json(gen_dir, tsconfig):
if not os.path.exists(gen_dir):
os.makedirs(gen_dir)
with open(os.path.join(gen_dir, 'tsconfig.json'), 'w') as generated_tsconfig:
json.dump(tsconfig, generated_tsconfig, indent=2)
return
def main(argv):
parser = argparse.ArgumentParser()
parser.add_argument('--deps', nargs='*')
parser.add_argument('--gen_dir', required=True)
parser.add_argument('--path_mappings', nargs='*')
parser.add_argument('--root_dir', required=True)
parser.add_argument('--out_dir', required=True)
parser.add_argument('--in_files', nargs='*')
parser.add_argument('--definitions', nargs='*')
args = parser.parse_args(argv)
root_dir = os.path.relpath(args.root_dir, args.gen_dir)
out_dir = os.path.relpath(args.out_dir, args.gen_dir)
with open(os.path.join(_HERE_DIR, 'tsconfig_base.json')) as root_tsconfig:
tsconfig = json.loads(root_tsconfig.read())
tsconfig['files'] = []
if args.in_files is not None:
# Source .ts files are always resolved as being relative to |root_dir|.
tsconfig['files'].extend([os.path.join(root_dir, f) for f in args.in_files])
if args.definitions is not None:
tsconfig['files'].extend(args.definitions)
tsconfig['compilerOptions']['rootDir'] = root_dir
tsconfig['compilerOptions']['outDir'] = out_dir
# Handle custom path mappings, for example chrome://resources/ URLs.
if args.path_mappings is not None:
path_mappings = {}
for m in args.path_mappings:
mapping = m.split('|')
if not path_mappings.has_key(mapping[0]):
path_mappings[mapping[0]] = []
path_mappings[mapping[0]].append(os.path.join('./', mapping[1]))
tsconfig['compilerOptions']['paths'] = path_mappings
if args.deps is not None:
tsconfig['references'] = [{'path': dep} for dep in args.deps]
_write_tsconfig_json(args.gen_dir, tsconfig)
node.RunNode([
node_modules.PathToTypescript(), '--project',
os.path.join(args.gen_dir, 'tsconfig.json')
])
if args.in_files is not None:
with open(os.path.join(args.gen_dir, 'tsconfig.manifest'), 'w') \
as manifest_file:
manifest_data = {}
manifest_data['base_dir'] = args.out_dir
manifest_data['files'] = \
[re.sub(r'\.ts$', '.js', f) for f in args.in_files]
json.dump(manifest_data, manifest_file)
if __name__ == '__main__':
main(sys.argv[1:])