123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- # Part of Odoo. See LICENSE file for full copyright and licensing details.
- import argparse
- import glob
- import json
- import os
- import re
- import sys
- from pathlib import Path
- from . import Command
- from odoo.modules.module import MANIFEST_NAMES
- class TSConfig(Command):
- """ Generates tsconfig files for javascript code """
- def get_module_list(self, path):
- return [
- mod.split(os.path.sep)[-2]
- for mname in MANIFEST_NAMES
- for mod in glob.glob(os.path.join(path, f'*/{mname}'))
- ]
- def clean_path(self, path):
- return re.sub(r"/{2,}", "/", path)
- def prefix_suffix_path(self, path, prefix, suffix):
- return self.clean_path(f"{prefix}/{path}/{suffix}")
- def remove_(self, modules, module):
- for name, path in modules:
- if module == name:
- modules.remove((name, path))
- def run(self, cmdargs):
- parser = argparse.ArgumentParser(
- prog=f'{Path(sys.argv[0]).name} {self.name}',
- description=self.__doc__.strip()
- )
- parser.add_argument('--addons-path', type=str, nargs=1, dest="paths")
- args = parser.parse_args(args=cmdargs)
- paths = list(map(self.clean_path, args.paths[0].split(',')))
- modules = {}
- owl_path = ""
- for path in paths:
- for module in self.get_module_list(path):
- modules[module] = self.prefix_suffix_path(module, path, "/static/src/*")
- if module == "web":
- owl_path = self.prefix_suffix_path(module, path, "/static/lib/owl/owl.js")
- content = self.generate_file_content(modules, paths)
- content["compilerOptions"]["paths"]["@odoo/owl"] = [owl_path]
- # pylint: disable=bad-builtin
- print(json.dumps(content, indent=2))
- def generate_imports(self, modules):
- return {
- f'@{module}/*': [path]
- for module, path in modules.items()
- }
- def generate_file_content(self, modules, paths):
- return {
- 'compilerOptions': {
- "baseUrl": ".",
- "target": "es2019",
- "checkJs": True,
- "allowJs": True,
- "noEmit": True,
- "typeRoots": list(map(lambda p: p + "/web/tooling/types", paths)),
- "paths": self.generate_imports(modules)
- }, "exclude": self.generate_excludes()
- }
- def generate_excludes(self):
- return [
- "/**/*.po",
- "/**/*.py",
- "/**/*.pyc",
- "/**/*.xml",
- "/**/*.png",
- "/**/*.md",
- "/**/*.dat",
- "/**/*.scss",
- "/**/*.jpg",
- "/**/*.svg",
- "/**/*.pot",
- "/**/*.csv",
- "/**/*.mo",
- "/**/*.txt",
- "/**/*.less",
- "/**/*.bcmap",
- "/**/*.properties",
- "/**/*.html",
- "/**/*.ttf",
- "/**/*.rst",
- "/**/*.css",
- "/**/*.pack",
- "/**/*.idx",
- "/**/*.h",
- "/**/*.map",
- "/**/*.gif",
- "/**/*.sample",
- "/**/*.doctree",
- "/**/*.so",
- "/**/*.pdf",
- "/**/*.xslt",
- "/**/*.conf",
- "/**/*.woff",
- "/**/*.xsd",
- "/**/*.eot",
- "/**/*.jst",
- "/**/*.flow",
- "/**/*.sh",
- "/**/*.yml",
- "/**/*.pfb",
- "/**/*.jpeg",
- "/**/*.crt",
- "/**/*.template",
- "/**/*.pxd",
- "/**/*.dylib",
- "/**/*.pem",
- "/**/*.rng",
- "/**/*.xsl",
- "/**/*.xls",
- "/**/*.cfg",
- "/**/*.pyi",
- "/**/*.pth",
- "/**/*.markdown",
- "/**/*.key",
- "/**/*.ico",
- ]
|