gooderp18绿色标准版
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 satır
3.8KB

  1. # Part of Odoo. See LICENSE file for full copyright and licensing details.
  2. import argparse
  3. import glob
  4. import json
  5. import os
  6. import re
  7. import sys
  8. from pathlib import Path
  9. from . import Command
  10. from odoo.modules.module import MANIFEST_NAMES
  11. class TSConfig(Command):
  12. """ Generates tsconfig files for javascript code """
  13. def get_module_list(self, path):
  14. return [
  15. mod.split(os.path.sep)[-2]
  16. for mname in MANIFEST_NAMES
  17. for mod in glob.glob(os.path.join(path, f'*/{mname}'))
  18. ]
  19. def clean_path(self, path):
  20. return re.sub(r"/{2,}", "/", path)
  21. def prefix_suffix_path(self, path, prefix, suffix):
  22. return self.clean_path(f"{prefix}/{path}/{suffix}")
  23. def remove_(self, modules, module):
  24. for name, path in modules:
  25. if module == name:
  26. modules.remove((name, path))
  27. def run(self, cmdargs):
  28. parser = argparse.ArgumentParser(
  29. prog=f'{Path(sys.argv[0]).name} {self.name}',
  30. description=self.__doc__.strip()
  31. )
  32. parser.add_argument('--addons-path', type=str, nargs=1, dest="paths")
  33. args = parser.parse_args(args=cmdargs)
  34. paths = list(map(self.clean_path, args.paths[0].split(',')))
  35. modules = {}
  36. owl_path = ""
  37. for path in paths:
  38. for module in self.get_module_list(path):
  39. modules[module] = self.prefix_suffix_path(module, path, "/static/src/*")
  40. if module == "web":
  41. owl_path = self.prefix_suffix_path(module, path, "/static/lib/owl/owl.js")
  42. content = self.generate_file_content(modules, paths)
  43. content["compilerOptions"]["paths"]["@odoo/owl"] = [owl_path]
  44. # pylint: disable=bad-builtin
  45. print(json.dumps(content, indent=2))
  46. def generate_imports(self, modules):
  47. return {
  48. f'@{module}/*': [path]
  49. for module, path in modules.items()
  50. }
  51. def generate_file_content(self, modules, paths):
  52. return {
  53. 'compilerOptions': {
  54. "baseUrl": ".",
  55. "target": "es2019",
  56. "checkJs": True,
  57. "allowJs": True,
  58. "noEmit": True,
  59. "typeRoots": list(map(lambda p: p + "/web/tooling/types", paths)),
  60. "paths": self.generate_imports(modules)
  61. }, "exclude": self.generate_excludes()
  62. }
  63. def generate_excludes(self):
  64. return [
  65. "/**/*.po",
  66. "/**/*.py",
  67. "/**/*.pyc",
  68. "/**/*.xml",
  69. "/**/*.png",
  70. "/**/*.md",
  71. "/**/*.dat",
  72. "/**/*.scss",
  73. "/**/*.jpg",
  74. "/**/*.svg",
  75. "/**/*.pot",
  76. "/**/*.csv",
  77. "/**/*.mo",
  78. "/**/*.txt",
  79. "/**/*.less",
  80. "/**/*.bcmap",
  81. "/**/*.properties",
  82. "/**/*.html",
  83. "/**/*.ttf",
  84. "/**/*.rst",
  85. "/**/*.css",
  86. "/**/*.pack",
  87. "/**/*.idx",
  88. "/**/*.h",
  89. "/**/*.map",
  90. "/**/*.gif",
  91. "/**/*.sample",
  92. "/**/*.doctree",
  93. "/**/*.so",
  94. "/**/*.pdf",
  95. "/**/*.xslt",
  96. "/**/*.conf",
  97. "/**/*.woff",
  98. "/**/*.xsd",
  99. "/**/*.eot",
  100. "/**/*.jst",
  101. "/**/*.flow",
  102. "/**/*.sh",
  103. "/**/*.yml",
  104. "/**/*.pfb",
  105. "/**/*.jpeg",
  106. "/**/*.crt",
  107. "/**/*.template",
  108. "/**/*.pxd",
  109. "/**/*.dylib",
  110. "/**/*.pem",
  111. "/**/*.rng",
  112. "/**/*.xsl",
  113. "/**/*.xls",
  114. "/**/*.cfg",
  115. "/**/*.pyi",
  116. "/**/*.pth",
  117. "/**/*.markdown",
  118. "/**/*.key",
  119. "/**/*.ico",
  120. ]
上海开阖软件有限公司 沪ICP备12045867号-1