diff --git a/bazel/BUILD.bazel b/bazel/BUILD.bazel index 360ac920f..d8f28ff18 100644 --- a/bazel/BUILD.bazel +++ b/bazel/BUILD.bazel @@ -7,6 +7,9 @@ ts_config( name = "tsconfig", src = "tsconfig.json", visibility = ["//bazel:__subpackages__"], + deps = [ + "//bazel:node_modules/@types/node", + ], ) filegroup( diff --git a/bazel/api-golden/BUILD.bazel b/bazel/api-golden/BUILD.bazel index b784a7a70..549f7a4c7 100644 --- a/bazel/api-golden/BUILD.bazel +++ b/bazel/api-golden/BUILD.bazel @@ -12,10 +12,10 @@ ts_project( srcs = [ "find_entry_points.ts", "index_npm_packages.cts", - "interop_module_mappings.ts", "path-normalize.ts", "test_api_report.ts", ], + declaration = True, tsconfig = "//bazel:tsconfig", deps = [ "//bazel:node_modules/@microsoft/api-extractor", diff --git a/bazel/api-golden/api_golden_test.bzl b/bazel/api-golden/api_golden_test.bzl new file mode 100644 index 000000000..d8f6eb624 --- /dev/null +++ b/bazel/api-golden/api_golden_test.bzl @@ -0,0 +1,56 @@ +load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory") +load("@aspect_rules_js//npm:defs.bzl", "npm_package") +load("@bazel_skylib//rules:write_file.bzl", "write_file") +load("//bazel/api-golden:api_golden_test_npm_package.bzl", "api_golden_test_npm_package", "default_strip_export_pattern") + +def api_golden_test( + name, + golden, + entry_point, + data = [], + strip_export_pattern = default_strip_export_pattern, + types = [], + **kwargs): + # We can't directly write `package.json` as this could cause conflicts + # if there are multiple individual file tests in the same Bazel package. + write_file( + name = "%s_synthetic_package_json" % name, + out = "%s_package.json" % name, + content = [json.encode({ + "name": name, + "exports": { + ".": { + "types": entry_point, + }, + }, + })], + ) + + npm_package( + name = "%s_js_package" % name, + srcs = data, + testonly = True, + ) + + copy_to_directory( + name = "%s_synthetic_package" % name, + srcs = [ + "%s_synthetic_package_json" % name, + "%s_js_package" % name, + ], + testonly = True, + replace_prefixes = { + "%s_" % name: "", + "%s_js_package/" % name: "", + }, + ) + + api_golden_test_npm_package( + name = name, + golden_dir = golden, + data = [":%s_synthetic_package" % name] + data, + npm_package = "%s/%s_synthetic_package" % (native.package_name(), name), + strip_export_pattern = strip_export_pattern, + types = types, + **kwargs + ) diff --git a/bazel/api-golden/index_rjs.bzl b/bazel/api-golden/api_golden_test_npm_package.bzl similarity index 74% rename from bazel/api-golden/index_rjs.bzl rename to bazel/api-golden/api_golden_test_npm_package.bzl index 4a91f5c4d..062bd66dc 100644 --- a/bazel/api-golden/index_rjs.bzl +++ b/bazel/api-golden/api_golden_test_npm_package.bzl @@ -12,8 +12,7 @@ def api_golden_test_npm_package( npm_package, data = [], strip_export_pattern = default_strip_export_pattern, - types = {}, - interop_mode = False, + types = [], **kwargs): """Builds an API report for all entry-points within the given NPM package and compares it. @@ -24,7 +23,6 @@ def api_golden_test_npm_package( data: Runtime dependenices needed for the rule (e.g. the tree artifact of the NPM package) strip_export_pattern: An optional regular expression to filter out exports from the golden. types: Optional list of type targets to make available in the API report generation. - interop_mode: Whether we are compiling in `rules_nodejs` interop mode. **kwargs: Other arguments passed to `js_binary`/`js_test` (depending on approval mode) """ @@ -33,18 +31,13 @@ def api_golden_test_npm_package( kwargs["tags"] = kwargs.get("tags", []) + ["api_guard"] data.append("@devinfra//bazel/api-golden") - - type_names = [] - for type_label, n in types.items(): - data.append(type_label) - type_names.append(n) + data.extend(types) js_test( name = name, data = data, entry_point = "@devinfra//bazel/api-golden:index_npm_packages.cjs", - args = [golden_dir, npm_package, "false", quoted_export_pattern] + type_names, - env = {"RJS_MODE": "true" if not interop_mode else "false"}, + args = [golden_dir, npm_package, "false", quoted_export_pattern], **kwargs ) @@ -53,10 +46,6 @@ def api_golden_test_npm_package( testonly = True, data = data, entry_point = "@devinfra//bazel/api-golden:index_npm_packages.cjs", - args = [golden_dir, npm_package, "true", quoted_export_pattern] + type_names, - # TODO: Determine why this is needed but only for this `.accept` action - # https://github.com/angular/dev-infra/issues/2742 - patch_node_fs = False, - env = {"RJS_MODE": "true" if not interop_mode else "false"}, + args = [golden_dir, npm_package, "true", quoted_export_pattern], **kwargs ) diff --git a/bazel/api-golden/index.bzl b/bazel/api-golden/index.bzl index 38819a1c8..8dcad4994 100644 --- a/bazel/api-golden/index.bzl +++ b/bazel/api-golden/index.bzl @@ -1,96 +1,5 @@ -load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory") -load("@bazel_skylib//rules:write_file.bzl", "write_file") -load("@build_bazel_rules_nodejs//:index.bzl", "pkg_npm") -load("//bazel/api-golden:index_rjs.bzl", _rjs_api_golden_test_npm_package = "api_golden_test_npm_package") +load("//bazel/api-golden:api_golden_test.bzl", _api_golden_test = "api_golden_test") +load("//bazel/api-golden:api_golden_test_npm_package.bzl", _api_golden_test_npm_package = "api_golden_test_npm_package") -default_strip_export_pattern = "^ɵ(?!ɵdefineInjectable|ɵinject|ɵInjectableDef)" - -def extract_names_from_npm_targets(type_targets): - types = {} - - for type_target in type_targets: - type_label = Label(type_target) - type_package = type_label.package - - if type_label.workspace_name != "npm" or not type_package.startswith("@types/"): - fail("Expected type targets to be part of the `@npm` workspace." + - "e.g. `@npm//@types/nodes`.") - - types[type_target] = type_package[len("@types/"):] - - return types - -def api_golden_test( - name, - golden, - entry_point, - data = [], - strip_export_pattern = default_strip_export_pattern, - types = [], - **kwargs): - # We can't directly write `package.json` as this could cause conflicts - # if there are multiple individual file tests in the same Bazel package. - write_file( - name = "%s_synthetic_package_json" % name, - out = "%s_package.json" % name, - content = [json.encode({ - "name": name, - "exports": { - ".": { - "types": entry_point, - }, - }, - })], - ) - - pkg_npm( - name = "%s_js_package" % name, - deps = data, - testonly = True, - ) - - copy_to_directory( - name = "%s_synthetic_package" % name, - srcs = ["%s_synthetic_package_json" % name, "%s_js_package" % name], - testonly = True, - replace_prefixes = { - "%s_" % name: "", - "%s_js_package/" % name: "", - }, - ) - - _rjs_api_golden_test_npm_package( - no_copy_to_bin = types, - name = name, - golden_dir = fixup_path_for_rules_js(golden), - data = [":%s_synthetic_package" % name] + data, - npm_package = "%s/%s_synthetic_package" % (native.package_name(), name), - strip_export_pattern = strip_export_pattern, - types = extract_names_from_npm_targets(types), - interop_mode = True, - **kwargs - ) - -def api_golden_test_npm_package( - name, - golden_dir, - npm_package, - data = [], - strip_export_pattern = default_strip_export_pattern, - types = [], - **kwargs): - _rjs_api_golden_test_npm_package( - name = name, - no_copy_to_bin = types, - golden_dir = fixup_path_for_rules_js(golden_dir), - npm_package = fixup_path_for_rules_js(npm_package), - data = data, - strip_export_pattern = strip_export_pattern, - types = extract_names_from_npm_targets(types), - interop_mode = True, - **kwargs - ) - -def fixup_path_for_rules_js(p): - segs = p.split("/") - return "/".join(segs[1:]) +api_golden_test_npm_package = _api_golden_test_npm_package +api_golden_test = _api_golden_test diff --git a/bazel/api-golden/index_npm_packages.cts b/bazel/api-golden/index_npm_packages.cts index ee25d7d77..3899738ea 100644 --- a/bazel/api-golden/index_npm_packages.cts +++ b/bazel/api-golden/index_npm_packages.cts @@ -125,7 +125,7 @@ async function main( if (singleFileMode) { console.error( chalk.red( - `The golden is out of date and can be updated by running:\n - yarn bazel run ${process.env.TEST_TARGET}.accept`, + `The golden is out of date and can be updated by running:\n - bazel run ${process.env.TEST_TARGET}.accept`, ), ); } else { @@ -134,7 +134,7 @@ async function main( console.info(); console.info( chalk.yellow( - `The goldens can be updated by running:\n - yarn bazel run ${process.env.TEST_TARGET}.accept`, + `The goldens can be updated by running:\n - bazel run ${process.env.TEST_TARGET}.accept`, ), ); } diff --git a/bazel/api-golden/interop_module_mappings.ts b/bazel/api-golden/interop_module_mappings.ts deleted file mode 100644 index 386d8aec6..000000000 --- a/bazel/api-golden/interop_module_mappings.ts +++ /dev/null @@ -1,87 +0,0 @@ -/** - * @license - * Copyright Google LLC - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -import * as fs from 'fs'; -import * as path from 'path'; - -/** Regular expression that matches a scoped type package name. */ -const scopedTypesPackageRegex = /^@types\/([^_\/]+)__(.+)/; - -/** - * Resolves type modules and returns corresponding path mappings and a - * list of referenced files. - */ -export async function resolveTypePackages(typeNames: string[]): Promise<{ - paths: Record; - typeFiles: string[]; -}> { - const typePackageNames = typeNames.map((t) => `@types/${t}`); - const typeFiles = []; - const paths: Record = {}; - - for (const typePackageName of typePackageNames) { - const moduleNames = getModuleNamesForTypePackage(typePackageName); - const {entryPointTypeFile, resolvedPackageDir} = - await resolveTypeDeclarationOfPackage(typePackageName); - - typeFiles.push(entryPointTypeFile); - - for (const moduleName of moduleNames) { - paths[moduleName] = [resolvedPackageDir]; - } - } - - return {paths, typeFiles}; -} - -/** Resolves the type declaration entry-point file of a given package. */ -async function resolveTypeDeclarationOfPackage(moduleName: string): Promise<{ - entryPointTypeFile: string; - resolvedPackageDir: string; -}> { - // We are always executing inside a `.runfiles` directory, inside the workspace directory, - // so we can access the repository by walking up one directory. - const pkgJsonPath = path.resolve('../npm/node_modules/' + moduleName + '/package.json'); - const pkgJson = JSON.parse(await fs.promises.readFile(pkgJsonPath, 'utf8')) as { - types?: string; - typings?: string; - }; - const typesRelativePath = pkgJson.types ?? pkgJson.typings; - - if (typesRelativePath === undefined) { - throw new Error(`Unable to resolve type definition for "${moduleName}".`); - } - - return { - entryPointTypeFile: path.join(path.dirname(pkgJsonPath), typesRelativePath), - resolvedPackageDir: path.dirname(pkgJsonPath), - }; -} - -/** - * Gets the module names for a given type package name. - * - * As an example, for `@types/babel__core` this returns both the `babel__core` - * and `@babel/core` module names. - */ -function getModuleNamesForTypePackage(name: string): string[] { - if (!name.startsWith('@types/')) { - return [name]; - } - - const moduleName = name.slice('@types/'.length); - const matches = name.match(scopedTypesPackageRegex); - - if (matches === null) { - return [moduleName]; - } - - // Support potential alternative module names for scoped packages. e.g. - // the `@types/babel__core` package could also be for `@babel/core`. - return [moduleName, `@${matches[1]}/${matches[2]}`]; -} diff --git a/bazel/api-golden/test/BUILD.bazel b/bazel/api-golden/test/BUILD.bazel index bf555a2f4..697df45f4 100644 --- a/bazel/api-golden/test/BUILD.bazel +++ b/bazel/api-golden/test/BUILD.bazel @@ -1,4 +1,4 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "copy_to_bin") +load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin") load("//bazel/api-golden:index.bzl", "api_golden_test", "api_golden_test_npm_package") package(default_visibility = ["//bazel/api-golden/test:__pkg__"]) @@ -20,8 +20,7 @@ api_golden_test( "//bazel/api-golden/test/fixtures:test_lib", ], entry_point = "./fixtures/test_fixture.d.ts", - golden = "dev-infra/bazel/api-golden/test/goldens/explicit_file", - types = ["@npm//@types/node"], + golden = "bazel/api-golden/test/goldens/explicit_file", ) api_golden_test_npm_package( @@ -30,11 +29,11 @@ api_golden_test_npm_package( ":test_package_golden_dir", "//bazel/api-golden/test/fixtures:test_package_fixture", ], - golden_dir = "dev-infra/bazel/api-golden/test/goldens/test_package", - npm_package = "dev-infra/bazel/api-golden/test/fixtures/test_package", + golden_dir = "bazel/api-golden/test/goldens/test_package", + npm_package = "bazel/api-golden/test/fixtures/test_package", # API extractor needs to be able to resolve `@babel/core` due to an aliased namespace # we expose as part of the `nested.d.ts` fake entry-point. - types = ["@npm//@types/babel__core"], + types = ["//bazel:node_modules/@types/babel__core"], ) api_golden_test_npm_package( @@ -43,6 +42,6 @@ api_golden_test_npm_package( ":pkg_no_exports_field_golden_dir", "//bazel/api-golden/test/fixtures:pkg_no_exports_field_fixture", ], - golden_dir = "dev-infra/bazel/api-golden/test/goldens/pkg_no_exports_field", - npm_package = "dev-infra/bazel/api-golden/test/fixtures/pkg_no_exports_field", + golden_dir = "bazel/api-golden/test/goldens/pkg_no_exports_field", + npm_package = "bazel/api-golden/test/fixtures/pkg_no_exports_field", ) diff --git a/bazel/api-golden/test/fixtures/BUILD.bazel b/bazel/api-golden/test/fixtures/BUILD.bazel index e642409ac..6830c072c 100644 --- a/bazel/api-golden/test/fixtures/BUILD.bazel +++ b/bazel/api-golden/test/fixtures/BUILD.bazel @@ -1,5 +1,5 @@ -load("//tools:defaults.bzl", "ts_library") -load("@build_bazel_rules_nodejs//:index.bzl", "copy_to_bin") +load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin") +load("@aspect_rules_ts//ts:defs.bzl", "ts_project") package(default_visibility = ["//bazel/api-golden/test:__pkg__"]) @@ -13,12 +13,15 @@ copy_to_bin( srcs = glob(["pkg_no_exports_field/**"]), ) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = ["test_fixture.ts"], + declaration = True, + tsconfig = "//bazel:tsconfig", deps = [ + "//bazel:node_modules/@types/babel__core", + "//bazel:node_modules/@types/node", "//bazel/api-golden/test/fixtures/transitive_target", - "@npm//@types/node", ], ) diff --git a/bazel/api-golden/test/fixtures/test_fixture.ts b/bazel/api-golden/test/fixtures/test_fixture.ts index 074c5498a..d30811468 100644 --- a/bazel/api-golden/test/fixtures/test_fixture.ts +++ b/bazel/api-golden/test/fixtures/test_fixture.ts @@ -1,8 +1,10 @@ import {rawStringFn, testValue} from './transitive_target'; +import * as babel from '@babel/core'; + export {testValue, rawStringFn}; -export const NodeTypes: NodeJS.ProcessEnv = {}; +export type MyBabelExport = babel.BabelFile; export class SomeOtherExport {} export class ɵShouldBeIgnored {} diff --git a/bazel/api-golden/test/fixtures/transitive_target/BUILD.bazel b/bazel/api-golden/test/fixtures/transitive_target/BUILD.bazel index 3d7000a37..b487f1191 100644 --- a/bazel/api-golden/test/fixtures/transitive_target/BUILD.bazel +++ b/bazel/api-golden/test/fixtures/transitive_target/BUILD.bazel @@ -1,9 +1,11 @@ -load("//tools:defaults.bzl", "ts_library") +load("@aspect_rules_ts//ts:defs.bzl", "ts_project") package(default_visibility = ["//bazel/api-golden/test/fixtures:__pkg__"]) -ts_library( +ts_project( name = "transitive_target", testonly = True, srcs = ["index.ts"], + declaration = True, + tsconfig = "//bazel:tsconfig", ) diff --git a/bazel/api-golden/test/goldens/explicit_file/index.api.md b/bazel/api-golden/test/goldens/explicit_file/index.api.md index d499964b1..4fcdfb2b8 100644 --- a/bazel/api-golden/test/goldens/explicit_file/index.api.md +++ b/bazel/api-golden/test/goldens/explicit_file/index.api.md @@ -4,8 +4,10 @@ ```ts +import * as babel_2 from '@babel/core'; + // @public (undocumented) -export const NodeTypes: NodeJS.ProcessEnv; +export type MyBabelExport = babel_2.BabelFile; // @public (undocumented) export function rawStringFn(input: string): string; diff --git a/bazel/api-golden/test_api_report.ts b/bazel/api-golden/test_api_report.ts index 40e8d6cb8..88708435b 100644 --- a/bazel/api-golden/test_api_report.ts +++ b/bazel/api-golden/test_api_report.ts @@ -21,7 +21,6 @@ import os from 'os'; import {AstModule} from '@microsoft/api-extractor/lib/analyzer/AstModule'; import {ExportAnalyzer} from '@microsoft/api-extractor/lib/analyzer/ExportAnalyzer'; -import {resolveTypePackages} from './interop_module_mappings.js'; /** * Original definition of the `ExportAnalyzer#fetchAstModuleExportInfo` method. @@ -57,22 +56,13 @@ export async function testApiGolden( const tempDir = process.env.TEST_TMPDIR ?? (await fs.promises.mkdtemp(path.join(os.tmpdir(), 'api-golden-rule'))); - const rjsMode = process.env['RJS_MODE'] === 'true'; - - let resolvedTypePackages: Awaited> | null = null; - if (!rjsMode) { - resolvedTypePackages = await resolveTypePackages(typeNames); - } - const configObject: IConfigFile = { compiler: { overrideTsconfig: { - // In interop/compat mode, the linker is not available and there is no `node_modules` - // directory, so we need to manually wire up global types. - files: [indexFilePath, ...(resolvedTypePackages?.typeFiles ?? [])], + files: [indexFilePath], compilerOptions: { - paths: resolvedTypePackages?.paths ?? {}, - types: rjsMode ? typeNames : [], + paths: {}, + types: typeNames, lib: ['esnext', 'dom'], }, }, diff --git a/bazel/http-server/BUILD.bazel b/bazel/http-server/BUILD.bazel index 792d29345..01bfd6923 100644 --- a/bazel/http-server/BUILD.bazel +++ b/bazel/http-server/BUILD.bazel @@ -18,6 +18,7 @@ ts_project( "main.mts", "server.mts", ], + declaration = True, tsconfig = "//bazel:tsconfig", deps = [ "//bazel:node_modules/@types/browser-sync", diff --git a/bazel/http-server/test/BUILD.bazel b/bazel/http-server/test/BUILD.bazel index 32de9ec52..91ae90c90 100644 --- a/bazel/http-server/test/BUILD.bazel +++ b/bazel/http-server/test/BUILD.bazel @@ -21,6 +21,7 @@ ts_project( name = "test_lib", testonly = True, srcs = ["server-test.ts"], + declaration = True, tsconfig = "//bazel:tsconfig", deps = [ "//bazel:node_modules/@types/node", diff --git a/bazel/integration/test_runner/BUILD.bazel b/bazel/integration/test_runner/BUILD.bazel index 96721b661..a30f29c6c 100644 --- a/bazel/integration/test_runner/BUILD.bazel +++ b/bazel/integration/test_runner/BUILD.bazel @@ -5,6 +5,7 @@ package(default_visibility = ["//visibility:public"]) ts_project( name = "test_runner", srcs = glob(["*.mts"]), + declaration = True, tsconfig = "//bazel:tsconfig", deps = [ "//bazel:node_modules/@types/node", diff --git a/bazel/package.json b/bazel/package.json index 38534c722..87ff51fb3 100644 --- a/bazel/package.json +++ b/bazel/package.json @@ -2,6 +2,7 @@ "name": "@devinfra/bazel", "dependencies": { "@microsoft/api-extractor": "7.52.10", + "@types/babel__core": "7.20.5", "@types/browser-sync": "2.29.0", "@types/node": "22.17.0", "@types/selenium-webdriver": "^4.1.28", diff --git a/bazel/pnpm-lock.yaml b/bazel/pnpm-lock.yaml index 4a8926d33..828e52c49 100644 --- a/bazel/pnpm-lock.yaml +++ b/bazel/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@microsoft/api-extractor': specifier: 7.52.10 version: 7.52.10(@types/node@22.17.0) + '@types/babel__core': + specifier: 7.20.5 + version: 7.20.5 '@types/browser-sync': specifier: 2.29.0 version: 2.29.0 @@ -65,6 +68,23 @@ importers: packages: + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.0': + resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.28.2': + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + engines: {node: '>=6.9.0'} + '@bazel/runfiles@6.3.1': resolution: {integrity: sha512-1uLNT5NZsUVIGS4syuHwTzZ8HycMPyr6POA3FCE4GbMtc4rhoJk8aZKtNIRthJYfL+iioppi+rTfH3olMPr9nA==} @@ -232,6 +252,18 @@ packages: '@types/argparse@1.0.38': resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + '@types/browser-sync@2.29.0': resolution: {integrity: sha512-d2V8FDX/LbDCSm343N2VChzDxvll0h76I8oSigYpdLgPDmcdcR6fywTggKBkUiDM3qAbHOq7NZvepj/HJM5e2g==} @@ -1571,6 +1603,19 @@ packages: snapshots: + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/parser@7.28.0': + dependencies: + '@babel/types': 7.28.2 + + '@babel/types@7.28.2': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@bazel/runfiles@6.3.1': {} '@hapi/hoek@9.3.0': {} @@ -1734,6 +1779,27 @@ snapshots: '@types/argparse@1.0.38': {} + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.28.0 + '@babel/types': 7.28.2 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.28.2 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.28.0 + '@babel/types': 7.28.2 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.28.2 + '@types/browser-sync@2.29.0': dependencies: '@types/micromatch': 2.3.35 diff --git a/bazel/tsconfig.json b/bazel/tsconfig.json index 7e032689b..2a72bf8a3 100644 --- a/bazel/tsconfig.json +++ b/bazel/tsconfig.json @@ -3,6 +3,7 @@ "strict": true, "module": "Node16", "moduleResolution": "node16", + "declaration": true, "skipLibCheck": true, "types": ["node"] }