From ab0fb1633cd62d7d5f2f3409ccd3935265e6214f Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Thu, 4 Dec 2025 16:07:59 -0500 Subject: [PATCH] build(forms): setup infrastructure for code examples This commit introduces the infrastructure for embedding code examples within Angular packages, enabling them to be consumed by the Angular CLI's MCP server. The `@angular/forms` package is the first to adopt this new feature. A new `ng_examples_db` Bazel rule is used to build a SQLite database from markdown files containing code examples. This database is then included in the published npm package. The `package.json` for `@angular/forms` has been updated with an `angular.examples` field to allow tooling to discover and use the code examples. --- packages/forms/BUILD.bazel | 19 +++++++++++++++++-- packages/forms/package.json | 6 ++++++ tools/defaults.bzl | 2 ++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/packages/forms/BUILD.bazel b/packages/forms/BUILD.bazel index 1cb1907aeef..90767ffbc9a 100644 --- a/packages/forms/BUILD.bazel +++ b/packages/forms/BUILD.bazel @@ -1,4 +1,4 @@ -load("//tools:defaults.bzl", "api_golden_test", "api_golden_test_npm_package", "generate_api_docs", "ng_package", "ng_project") +load("//tools:defaults.bzl", "api_golden_test", "api_golden_test_npm_package", "generate_api_docs", "ng_examples_db", "ng_package", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -17,8 +17,23 @@ ng_project( ], ) +ng_examples_db( + name = "forms_example_database", + srcs = glob( + include = [ + "examples/**/*.md", + ], + allow_empty = True, + ), + out = "resources/code-examples.db", + path = "packages/forms/examples", +) + ng_package( - srcs = ["package.json"], + srcs = [ + "package.json", + "resources/code-examples.db", + ], package = "@angular/forms", tags = [ "release-with-framework", diff --git a/packages/forms/package.json b/packages/forms/package.json index e5922b27b53..4bcc7782f33 100644 --- a/packages/forms/package.json +++ b/packages/forms/package.json @@ -22,6 +22,12 @@ "url": "https://github.com/angular/angular.git", "directory": "packages/forms" }, + "angular": { + "examples": { + "format": "sqlite", + "path": "./resources/code-examples.db" + } + }, "ng-update": { "packageGroup": "NG_UPDATE_PACKAGE_GROUP" }, diff --git a/tools/defaults.bzl b/tools/defaults.bzl index a6ab474c8f2..1e9e4d717e4 100644 --- a/tools/defaults.bzl +++ b/tools/defaults.bzl @@ -5,6 +5,7 @@ load("@devinfra//bazel:extract_types.bzl", _extract_types = "extract_types") load("@devinfra//bazel/api-golden:index.bzl", _api_golden_test = "api_golden_test", _api_golden_test_npm_package = "api_golden_test_npm_package") load("@devinfra//bazel/http-server:index.bzl", _http_server = "http_server") load("@devinfra//bazel/ts_project:index.bzl", "strict_deps_test") +load("@rules_angular//src/ng_examples_db:index.bzl", _ng_examples_db = "ng_examples_db") load("@rules_angular//src/ng_project:index.bzl", _ng_project = "ng_project") load("@rules_angular//src/ts_project:index.bzl", _ts_project = "ts_project") load("@rules_sass//src:index.bzl", _npm_sass_library = "npm_sass_library", _sass_binary = "sass_binary", _sass_library = "sass_library") @@ -43,6 +44,7 @@ api_golden_test_npm_package = _api_golden_test_npm_package copy_to_bin = _copy_to_bin tsec_test = _tsec_test js_library = _js_library +ng_examples_db = _ng_examples_db def _determine_tsconfig(testonly): if native.package_name().startswith("packages/compiler-cli"):