#!/usr/bin/env python # Copyright 2019 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. from __future__ import print_function from datetime import date import json import os.path as path import sys _COMPILE_JS = '//third_party/closure_compiler/compile_js.gni' _COMPILED_RESOURCES_TEMPLATE = ''' # Copyright %d 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. # # NOTE: Created with %s, please do not edit. import("%s") %s '''.strip() _HERE_PATH = path.dirname(__file__) _SRC_PATH = path.normpath(path.join(_HERE_PATH, '..', '..')) sys.path.append(path.join(_SRC_PATH, 'third_party', 'node')) import node def main(created_by, input_files): targets = '' def _target_name(target_file): return target_file[:-len('.js')] def _extract_imports(input_file): path_to_acorn = path.join('node_modules', 'acorn', 'bin', 'acorn'); ast = node.RunNode([path_to_acorn, '--module', input_file]) imports = map(lambda n: n['source']['raw'][1:-1], filter(lambda n: n['type'] == 'ImportDeclaration', json.loads(ast)['body'])) return set(imports) for input_file in sorted(input_files, key=_target_name): input_base = path.basename(input_file) imports = _extract_imports(input_file) dependencies = [] externs = '' for i in sorted(imports): import_dir, import_base = path.split(i.encode('ascii')) # Redirect dependencies to minified Polymer to the non-minified version. if import_base == 'polymer_bundled.min.js': import_base = 'polymer_bundled.js' target = ':' + _target_name(import_base) dependencies.append(import_dir + target) targets += '\njs_library("%s") {' % _target_name(input_base) if dependencies: targets += '\n deps = [' targets += '\n "%s",' % '",\n "'.join(dependencies) targets += '\n ]' targets += externs targets += '\n}\n' targets = targets.strip() if targets: current_year = date.today().year print(_COMPILED_RESOURCES_TEMPLATE % (current_year, created_by, _COMPILE_JS, targets)) if __name__ == '__main__': main(path.basename(sys.argv[0]), sys.argv[1:])