#!/usr/bin/env python3
# Copyright 2019 The Chromium Authors
# 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
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
# 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)
# 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 = 2021
print(_COMPILED_RESOURCES_TEMPLATE %
(current_year, created_by, _COMPILE_JS, targets))
if __name__ == '__main__':
main(path.basename(sys.argv[0]), sys.argv[1:])