diff --git a/tools/symbol-extractor/BUILD.bazel b/tools/symbol-extractor/BUILD.bazel index ca07e5d3981..676ed50da23 100644 --- a/tools/symbol-extractor/BUILD.bazel +++ b/tools/symbol-extractor/BUILD.bazel @@ -7,9 +7,9 @@ ts_project( name = "lib", testonly = True, srcs = glob( - ["**/*.ts"], + ["**/*.mts"], exclude = [ - "**/*_spec.ts", + "**/*_spec.mts", "**/*_spec", ], ), @@ -25,7 +25,7 @@ ts_project( name = "test_lib", testonly = 1, srcs = glob( - ["**/*_spec.ts"], + ["**/*_spec.mts"], exclude = ["symbol_extractor_spec/**"], ), tsconfig = "//tools:tsconfig_test", diff --git a/tools/symbol-extractor/cli.ts b/tools/symbol-extractor/cli.mts similarity index 76% rename from tools/symbol-extractor/cli.ts rename to tools/symbol-extractor/cli.mts index 5b3a8881408..dfef7af9cdf 100644 --- a/tools/symbol-extractor/cli.ts +++ b/tools/symbol-extractor/cli.mts @@ -8,8 +8,9 @@ import {runfiles} from '@bazel/runfiles'; import * as fs from 'fs'; +import * as path from 'path'; -import {SymbolExtractor} from './symbol_extractor'; +import {SymbolExtractor} from './symbol_extractor.mjs'; const args = process.argv.slice(2) as [string, string]; process.exitCode = main(args) ? 0 : 1; @@ -24,19 +25,19 @@ process.exitCode = main(args) ? 0 : 1; function main(argv: [string, string, string] | [string, string]): boolean { const javascriptFilePath = runfiles.resolveWorkspaceRelative(argv[0]); const goldenFilePath = runfiles.resolveWorkspaceRelative(argv[1]); - const doUpdate = argv[2] == '--accept'; + const doUpdate = argv[2] === '--accept'; console.info('Input javascript file:', javascriptFilePath); const javascriptContent = fs.readFileSync(javascriptFilePath).toString(); const goldenContent = fs.readFileSync(goldenFilePath).toString(); - const symbolExtractor = new SymbolExtractor(javascriptFilePath, javascriptContent); - let passed: boolean = false; + let passed = false; if (doUpdate) { - fs.writeFileSync(goldenFilePath, JSON.stringify(symbolExtractor.actual, undefined, 2)); - console.error('Updated gold file:', goldenFilePath); + const goldenOutFilePath = path.join(process.env['BUILD_WORKING_DIRECTORY']!, argv[1]); + fs.writeFileSync(goldenOutFilePath, JSON.stringify(symbolExtractor.actual, undefined, 2)); + console.error('Updated gold file:', goldenOutFilePath); passed = true; } else { passed = symbolExtractor.compareAndPrintError(goldenContent); diff --git a/tools/symbol-extractor/index.bzl b/tools/symbol-extractor/index.bzl index 9da4b2f5107..320850b4a27 100644 --- a/tools/symbol-extractor/index.bzl +++ b/tools/symbol-extractor/index.bzl @@ -17,7 +17,7 @@ def js_expected_symbol_test(name, src, golden, data = [], **kwargs): src, golden, ] - entry_point = "//tools/symbol-extractor:cli.js" + entry_point = "//tools/symbol-extractor:cli.mjs" js_test( name = name, diff --git a/tools/symbol-extractor/run_all_symbols_extractor_tests.js b/tools/symbol-extractor/run_all_symbols_extractor_tests.js index ffd29661157..e1efcd80d95 100644 --- a/tools/symbol-extractor/run_all_symbols_extractor_tests.js +++ b/tools/symbol-extractor/run_all_symbols_extractor_tests.js @@ -23,21 +23,25 @@ const USER_COMMAND = argv._[0]; // The shell command to query for all tests. // Bazel targets for testing goldens process.stdout.write('Gathering all symbol extractor targets...'); + +const BAZEL_QUERY = + `'kind(js_test, ${TEST_TARGETS_LOCATION}) ` + + `intersect attr("tags", "symbol_extractor", ${TEST_TARGETS_LOCATION})'`; const ALL_TEST_TARGETS = spawnSync( 'yarn', - [ - '-s', - 'bazel', - 'query', - '--output', - 'label', - `'kind(nodejs_test, ${TEST_TARGETS_LOCATION}) intersect attr("tags", "symbol_extractor", ${TEST_TARGETS_LOCATION})'`, - ], + ['-s', 'bazel', 'query', '--output', 'label', BAZEL_QUERY], {encoding: 'utf8', shell: true, cwd: path.resolve(__dirname, '../..')}, ) .stdout.trim() .split('\n') - .map((line) => line.trim()); + .map((line) => line.trim()) + .filter((line) => line.length > 0); + +if (ALL_TEST_TARGETS.length === 0) { + console.error(`Could not find any symbol test targets matching query: ${BAZEL_QUERY}`); + process.exit(1); +} + process.stdout.clearLine(); process.stdout.cursorTo(0); // Bazel targets for generating goldens diff --git a/tools/symbol-extractor/symbol_extractor.ts b/tools/symbol-extractor/symbol_extractor.mts similarity index 100% rename from tools/symbol-extractor/symbol_extractor.ts rename to tools/symbol-extractor/symbol_extractor.mts diff --git a/tools/symbol-extractor/symbol_extractor_spec.ts b/tools/symbol-extractor/symbol_extractor_spec.mts similarity index 97% rename from tools/symbol-extractor/symbol_extractor_spec.ts rename to tools/symbol-extractor/symbol_extractor_spec.mts index 955270fba8b..33d771d7801 100644 --- a/tools/symbol-extractor/symbol_extractor_spec.ts +++ b/tools/symbol-extractor/symbol_extractor_spec.mts @@ -10,7 +10,7 @@ import {runfiles} from '@bazel/runfiles'; import * as fs from 'fs'; import * as path from 'path'; -import {SymbolExtractor} from './symbol_extractor'; +import {SymbolExtractor} from './symbol_extractor.mjs'; describe('scenarios', () => { const symbolExtractorSpecDir = path.dirname(