1*6777b538SAndroid Build Coastguard Workerload("@builtin//encoding.star", "json") 2*6777b538SAndroid Build Coastguard Workerload("@builtin//path.star", "path") 3*6777b538SAndroid Build Coastguard Workerload("@builtin//struct.star", "module") 4*6777b538SAndroid Build Coastguard Workerload("./config.star", "config") 5*6777b538SAndroid Build Coastguard Workerload("./tsc.star", "tsc") 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker# TODO: crbug.com/1478909 - Specify typescript inputs in GN config. 8*6777b538SAndroid Build Coastguard Workerdef __filegroups(ctx): 9*6777b538SAndroid Build Coastguard Worker return { 10*6777b538SAndroid Build Coastguard Worker "third_party/devtools-frontend/src/node_modules/typescript:typescript": { 11*6777b538SAndroid Build Coastguard Worker "type": "glob", 12*6777b538SAndroid Build Coastguard Worker "includes": ["*"], 13*6777b538SAndroid Build Coastguard Worker }, 14*6777b538SAndroid Build Coastguard Worker "third_party/devtools-frontend/src/node_modules:node_modules": { 15*6777b538SAndroid Build Coastguard Worker "type": "glob", 16*6777b538SAndroid Build Coastguard Worker "includes": ["*.js", "*.json", "*.ts"], 17*6777b538SAndroid Build Coastguard Worker }, 18*6777b538SAndroid Build Coastguard Worker } 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Workerdef __step_config(ctx, step_config): 21*6777b538SAndroid Build Coastguard Worker step_config["input_deps"].update({ 22*6777b538SAndroid Build Coastguard Worker "third_party/devtools-frontend/src/third_party/typescript/ts_library.py": [ 23*6777b538SAndroid Build Coastguard Worker "third_party/devtools-frontend/src/node_modules/typescript:typescript", 24*6777b538SAndroid Build Coastguard Worker "third_party/devtools-frontend/src/node_modules:node_modules", 25*6777b538SAndroid Build Coastguard Worker ], 26*6777b538SAndroid Build Coastguard Worker }) 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Worker # TODO: b/308405411 - Enable remote-devtools-frontend-typescript by default. 29*6777b538SAndroid Build Coastguard Worker if config.get(ctx, "remote-devtools-frontend-typescript"): 30*6777b538SAndroid Build Coastguard Worker step_config["rules"].extend([ 31*6777b538SAndroid Build Coastguard Worker { 32*6777b538SAndroid Build Coastguard Worker "name": "devtools-frontend/typescript/ts_library", 33*6777b538SAndroid Build Coastguard Worker "command_prefix": "python3 ../../third_party/devtools-frontend/src/third_party/typescript/ts_library.py", 34*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": [ 35*6777b538SAndroid Build Coastguard Worker "*.stamp", 36*6777b538SAndroid Build Coastguard Worker ], 37*6777b538SAndroid Build Coastguard Worker "remote": True, 38*6777b538SAndroid Build Coastguard Worker "handler": "devtools_frontend/typescript_ts_library", 39*6777b538SAndroid Build Coastguard Worker "output_local": True, 40*6777b538SAndroid Build Coastguard Worker }, 41*6777b538SAndroid Build Coastguard Worker ]) 42*6777b538SAndroid Build Coastguard Worker return step_config 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Workerdef _ts_library(ctx, cmd): 45*6777b538SAndroid Build Coastguard Worker # Handler for https://crsrc.org/c/third_party/devtools-frontend/src/third_party/typescript/ts_library.py 46*6777b538SAndroid Build Coastguard Worker # Note that this is a different script from https://crsrc.org/c/tools/typescript/ts_library.py 47*6777b538SAndroid Build Coastguard Worker deps = [] 48*6777b538SAndroid Build Coastguard Worker sources = [] 49*6777b538SAndroid Build Coastguard Worker tsconfig_path = None 50*6777b538SAndroid Build Coastguard Worker flag = None 51*6777b538SAndroid Build Coastguard Worker for i, arg in enumerate(cmd.args): 52*6777b538SAndroid Build Coastguard Worker if flag != "" and arg.startswith("-"): 53*6777b538SAndroid Build Coastguard Worker flag = "" 54*6777b538SAndroid Build Coastguard Worker if arg == "--tsconfig_output_location": 55*6777b538SAndroid Build Coastguard Worker tsconfig_path = ctx.fs.canonpath(cmd.args[i + 1]) 56*6777b538SAndroid Build Coastguard Worker continue 57*6777b538SAndroid Build Coastguard Worker if arg in ("--deps", "--sources"): 58*6777b538SAndroid Build Coastguard Worker flag = arg 59*6777b538SAndroid Build Coastguard Worker continue 60*6777b538SAndroid Build Coastguard Worker if flag == "--deps": 61*6777b538SAndroid Build Coastguard Worker deps.append(arg) 62*6777b538SAndroid Build Coastguard Worker continue 63*6777b538SAndroid Build Coastguard Worker if flag == "--sources": 64*6777b538SAndroid Build Coastguard Worker sources.append(ctx.fs.canonpath(arg)) 65*6777b538SAndroid Build Coastguard Worker continue 66*6777b538SAndroid Build Coastguard Worker if not tsconfig_path: 67*6777b538SAndroid Build Coastguard Worker fail("missing --tsconfig_output_location") 68*6777b538SAndroid Build Coastguard Worker tsconfig = {"files": [], "references": []} 69*6777b538SAndroid Build Coastguard Worker tsconfig_dir = path.dir(tsconfig_path) 70*6777b538SAndroid Build Coastguard Worker for s in sources: 71*6777b538SAndroid Build Coastguard Worker tsconfig["files"].append(path.rel(tsconfig_dir, s)) 72*6777b538SAndroid Build Coastguard Worker for d in deps: 73*6777b538SAndroid Build Coastguard Worker tsconfig["references"].append({"path": d}) 74*6777b538SAndroid Build Coastguard Worker refpath = path.join(tsconfig_dir, d) 75*6777b538SAndroid Build Coastguard Worker refdir = path.dir(refpath) 76*6777b538SAndroid Build Coastguard Worker 77*6777b538SAndroid Build Coastguard Worker # TODO: crbug.com/1503020 - Fix devtools_entrypoint to propagate .d.ts output. 78*6777b538SAndroid Build Coastguard Worker dpath = path.join(refdir, path.base(refdir) + ".d.ts") 79*6777b538SAndroid Build Coastguard Worker if ctx.fs.exists(dpath): 80*6777b538SAndroid Build Coastguard Worker sources.append(dpath) 81*6777b538SAndroid Build Coastguard Worker 82*6777b538SAndroid Build Coastguard Worker inputs = tsc.scandeps(ctx, tsconfig_path, tsconfig) 83*6777b538SAndroid Build Coastguard Worker 84*6777b538SAndroid Build Coastguard Worker # Sources and imported files might be located in different dirs. source vs gen. 85*6777b538SAndroid Build Coastguard Worker # Try to collect the corresponding files in source or gen dir. 86*6777b538SAndroid Build Coastguard Worker # TODO: crbug.com/1505319 - Fix devtools_module import issues. 87*6777b538SAndroid Build Coastguard Worker files = {} 88*6777b538SAndroid Build Coastguard Worker gen_dir = None 89*6777b538SAndroid Build Coastguard Worker 90*6777b538SAndroid Build Coastguard Worker # Infer source files from gen file. 91*6777b538SAndroid Build Coastguard Worker for f in cmd.inputs + inputs: 92*6777b538SAndroid Build Coastguard Worker if f.startswith("out/"): 93*6777b538SAndroid Build Coastguard Worker # Remove out/{subdir}/gen. 94*6777b538SAndroid Build Coastguard Worker splits = f.split("/", 3) 95*6777b538SAndroid Build Coastguard Worker if len(splits) < 4: 96*6777b538SAndroid Build Coastguard Worker continue 97*6777b538SAndroid Build Coastguard Worker gen_dir = path.join(splits[0], splits[1], splits[2]) 98*6777b538SAndroid Build Coastguard Worker f = splits[3] 99*6777b538SAndroid Build Coastguard Worker if ctx.fs.exists(f) and not f in files: 100*6777b538SAndroid Build Coastguard Worker files[f] = True 101*6777b538SAndroid Build Coastguard Worker continue 102*6777b538SAndroid Build Coastguard Worker if f.endswith(".js"): 103*6777b538SAndroid Build Coastguard Worker f = f.removesuffix(".js") + ".d.ts" 104*6777b538SAndroid Build Coastguard Worker if ctx.fs.exists(f) and not f in files: 105*6777b538SAndroid Build Coastguard Worker files[f] = True 106*6777b538SAndroid Build Coastguard Worker 107*6777b538SAndroid Build Coastguard Worker # Infer gen files from source file. 108*6777b538SAndroid Build Coastguard Worker if gen_dir: 109*6777b538SAndroid Build Coastguard Worker for f in cmd.inputs + inputs: 110*6777b538SAndroid Build Coastguard Worker if f.endswith(".ts"): 111*6777b538SAndroid Build Coastguard Worker f = path.join(gen_dir, f) 112*6777b538SAndroid Build Coastguard Worker f = f.removesuffix(".ts") + ".d.ts" 113*6777b538SAndroid Build Coastguard Worker if ctx.fs.exists(f) and not f in files: 114*6777b538SAndroid Build Coastguard Worker files[f] = True 115*6777b538SAndroid Build Coastguard Worker if f.endswith(".js"): 116*6777b538SAndroid Build Coastguard Worker f = path.join(gen_dir, f) 117*6777b538SAndroid Build Coastguard Worker f = f.removesuffix(".js") + ".d.ts" 118*6777b538SAndroid Build Coastguard Worker if ctx.fs.exists(f) and not f in files: 119*6777b538SAndroid Build Coastguard Worker files[f] = True 120*6777b538SAndroid Build Coastguard Worker 121*6777b538SAndroid Build Coastguard Worker ctx.actions.fix(inputs = cmd.inputs + inputs + sources + files.keys()) 122*6777b538SAndroid Build Coastguard Worker 123*6777b538SAndroid Build Coastguard Workerdevtools_frontend = module( 124*6777b538SAndroid Build Coastguard Worker "devtools_frontend", 125*6777b538SAndroid Build Coastguard Worker step_config = __step_config, 126*6777b538SAndroid Build Coastguard Worker handlers = { 127*6777b538SAndroid Build Coastguard Worker "devtools_frontend/typescript_ts_library": _ts_library, 128*6777b538SAndroid Build Coastguard Worker }, 129*6777b538SAndroid Build Coastguard Worker filegroups = __filegroups, 130*6777b538SAndroid Build Coastguard Worker) 131