[pull] latest from ag-grid:latest - #889
Merged
Merged
Conversation
* fix-behavioural-tests-speed * fix-behavioural-tests-speed * fix-behavioural-tests-speed
* AG-18104 Allow ag esm files to be tree shakable by webpack
* AG-18104 Allow ag esm files to be tree shakable by webpack
* AG-18104 Use the TypeScript parser for the superclass alias pass
Swaps acorn for ts.createSourceFile, which the example and code-reference
generators already use. Measured at parity on the 2.7MB enterprise bundle
(152ms vs 150ms) and produces byte-identical output.
TypeScript recovers from syntax errors where acorn threw, so the pass now
fails the build on a non-empty parseDiagnostics rather than silently
leaving superclasses unaliased.
Drops the acorn devDependency and the npm:acorn cache inputs with it:
npm:typescript was already declared on every build:package target.
* AG-18104 Skip superclasses whose name is shadowed by a local binding
The pass matched superclass identifiers by name, so a local binding with
the same name as an import - function make(BeanStub) { return class
extends BeanStub {} } - would have been rewritten to extend the import
instead of the parameter.
esbuild renames nested bindings that would shadow an import, so this
matches nothing in our bundles today (0 of 256 enterprise sites, 0
collisions against 1392 imports) and the published ESM is unchanged. The
check is deliberately coarse: one shadow anywhere disables aliasing for
that name everywhere, which loses a little tree shaking rather than
emitting a class that extends the wrong base.
* Exclude generated folders
* AG-18104 Verify the superclass alias rewrite and close a shadowing gap
Add a post-emit check that re-parses the rewritten bundle and asserts it
still parses, that every alias is declared exactly once, and that the
declaration and extends-site counts match what the transform intended.
An edit landing at the wrong offset previously produced a bundle that
throws on load in a consumer's app off the back of a green build here.
Treat a named class or function expression's own name as a local binding.
It binds in a scope wrapping the expression body, which is never the
top-level scope, so a top-level one shadows an import without the
enclosing-scope check ever seeing it.
Extract parseBundle and forEachExtendedIdentifier so the transform and
the verifier share one class-heritage walk, and route both return paths
through the verifier so a result cannot be returned unchecked.
* AG-18104 Tighten alias plugin comments and build-failure handling
Skip the rewrite when esbuild reported errors. The previous guard only
checked for a metafile, but on a failed build the outputs on disk are not
the ones the metafile describes, so the pass could rewrite a stale bundle
or throw ENOENT over the top of esbuild's own error.
Name the output file when the rewrite throws. Every ESM artefact is
processed in one Promise.all, so a bare parse or invariant failure gave no
indication of which one broke.
Trim the comments to what is not recoverable from the code, and add one
liners for the sticky scope flag, the alias map's deduplication, and the
prefix check's role in catching a second pass over rewritten output.
---------
Co-authored-by: Alistair Brown <github@alistairjcbrown.com>
* AG-18194 - Update cookies page to use Enzuzo embed content * AG-18194 - Move enzuzoPolicyId to shared constants * AG-18194 - Strip jank scripts from cookies page
* added locale * added CSS * added unit tests * added clear button to inputs * fixed excel-mode edge case * fixed IT locale * code cleanup * fixed create element import * support date fields * small code clean up * AG-3698 Fix ag-test-utils imports and cover mini filter clear immediate apply * AG-3698 Add unit tests for _isFocusableFormField --------- Co-authored-by: Stephen Cooper <scooperdev@gmail.com>
…ides (#14872) * AG-18135 [SSRM] Remove the server-side operations integration guides Remove the four SSRM full-stack integration guides (server-side-operations-nodejs, -graphql, -oracle, -spark) and their 15 resource images. These were the only SSRM pages with no runnable in-page examples, and their content no longer matches the grid (the Java ServerSideGetRowsResponse they document exposes lastRow, whereas LoadSuccessParams now uses rowCount). - Drop the four nav.json entries from the Server-Side Row Model group. - Re-point the 37 redirect rules that targeted a removed page at the framework-matched server-side-model survivor, directly rather than by chaining, to preserve the file's single-hop invariant. The /nodejs-server-side-operations rule in SITE_SINGLE_HOP_REWRITES keeps an absolute target. - Add four pageForAllFrameworks entries so the pages' own canonical /{fw}-data-grid/ routes redirect instead of 404ing. - Drop the Full Stack Examples section from server-side-model, which existed only to link the removed pages. - Regenerate the htaccessRules snapshot and the htaccess-harness expectations. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * AG-18135 Scope the htaccess-harness expectation edits to the removed pages The first pass rewrote every generated expectation row whose target mentioned server-side-model, which swept in unrelated rows (server-side-model-refresh, -transactions, -high-frequency) where the committed file is stale relative to the current generator. Restrict the edit to rows that reference one of the four removed slugs. For the 16 legacy /{fw}-grid/server-side-operations-*/ routes the generator predicts a single hop to server-side-model, but Apache resolves an earlier broad /{fw}-grid/ prefix rule first, so the first response is the intermediate /{fw}-data-grid/server-side-operations-*/ hop, which the new pageForAllFrameworks rules then redirect on to server-side-model. No route 404s. Record the observed behaviour, since the harness asserts on the single response. Harness: 7007 passed, 0 failed (121 /charts/* skipped, no charts .htaccess). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
#14876) `nx run ag-grid-docs:preview:production` failed while generating robots.txt: the requests for the charts/studio disallow lists went out with Node's default agent and were not served. Production builds are the only ones that take this path — robots.txt only fetches those lists when getIsProduction() is true, and staging builds fall into disallowAll. Add a shared BUILD_USER_AGENT that names the caller and use it there. getSitemapXml() fetches the live sitemap on a cold cache and had no response.ok check, so an error response body was used as the sitemap, silently producing a broken /sitemap page. Production runs with --clean-cache=true --run-second-build=true, so the first build always hit this and only the second build's cache hid it. Send the same User-Agent and throw on a non-ok response.
AI Workflow Delivery PRs (ghabot-ag-* branches) post their own JIRA comment once the run is ready for review, so the generic "mentioned in PR" comment from the PR-opened hook is noise. Body link expansion still runs.
…ff the evidence chain (#14885) * feat(github-triage-pipeline): auto-fire a confidence-refresh resume off the evidence chain Adds confidence-refresh-chain: after browser-verify-chain/repro-rebuild-chain finish, if the original triage's confirmed clean-pick confidence was below the execute threshold (confidence_gap == 'true'), auto-fires stage=resume (trigger: confidence-refresh) so the pick is re-assessed with whatever evidence the chain gathered, without waiting on a human drag purely to make the system re-read its own evidence. No new execution path: resume still can't execute on its own regardless of what triggered it. Same permission posture as the two browser-stage chain jobs (issues: read, never write). See ag-dev-prompts's github-triage-pipeline action CLAUDE.md § "Confidence-gap auto-refresh" for the full design/reflection, including why this is not a guaranteed confidence bump. * fix: scope confidence-refresh-chain to the originating triage, not any resume confidence_gap is emitted for stage=resume too (same contract as confirmed_bug), so without this an ordinary human-triggered resume that stayed below threshold would itself satisfy this job's condition and immediately fire a SECOND, fully automatic resume with zero new evidence (browser-verify-chain/repro-rebuild-chain never ran for a resume dispatch, so there's nothing fresh to fold in) -- duplicate agent cost, duplicate comment, duplicate transition, right after a human did the thing this feature exists to make unnecessary. Mirrors browser-verify-chain's own existing (issues || workflow_dispatch stage=triage) scoping exactly. Caught by review (0.94 confidence) on the companion action-side PR (ag-dev-prompts#889).
…14784) * AG-17103 Load docs examples as native ES modules instead of SystemJS Examples resolve bare specifiers through an import map, load the ESM builds the AG packages already ship, and are transpiled server-side and served as .js, so no loader or in-browser compiler runs in the page. * AG-17103 Run the import-map file-existence checks in the e2e suite They need the packages built, so they failed in the unit job. Moving them to a .e2e.test.ts also restores the e2e vitest project, which had no test files left after systemjs.test.ts was deleted. * AG-17103 Transpile Plunker examples in the browser Plunker hosts static files with no build step, so it was shipped the transpiled modules. Ship it the TypeScript sources instead, and load the in-page TypeScript compiler to transpile them, so that what a user opens is the code they were reading in the docs. The compiler options and source rewrites are shared with the server-side transform, and the pinned compiler version follows the repository's own. * AG-17103 Fix formatting of the browser-transpiler templates * AG-17103 Serve the Angular bundle's source map * AG-17103 Import companion interfaces the generated examples reference * AG-17103 Transpile CodeSandbox static-template examples in the browser The static template has no build step, so those exports were shipped compiled JavaScript. Hand them the sources as authored and transpile in the page, as Plunker does, so a user opens the TypeScript they were reading. * AG-18156 Guard that production example import maps resolve AG packages from the CDN Adds tests covering the published-packages branch of `getImportMap` for every framework and example variant, and the `ExampleModules` component that the example runner, Plunker and CodeSandbox pages all render, so a regression that left a site-relative URL in a production import map fails the suite. * AG-18154 Allow an example's framework version to be set with ?version= * AG-18154 Restore the ?prod= development-build parameter alongside ?version= * AG-18154 Render one import map for both framework builds Carries a token where the development-build flag goes, alongside the framework version placeholder, so a page embeds one map rather than a full copy per build. Extends the production CDN guard to the browser-registered map, which it no longer finds as markup. * AG-18153 Record the StrictMode decision for generated React examples (#14818) * AG-18154 Keep the injected import map within an example's CSP A script created at runtime carries no nonce, so an example whose CSP allows inline scripts only by nonce -- the security-test examples -- would have its import map blocked. Takes the nonce of the script registering it. Also treats an empty ?version= as a version that is not a version, rather than as an absent one, so it fails visibly instead of loading the pinned default. * AG-18154 Match the version suffixes without nested quantifiers The repeated group could backtrack exponentially on a near-miss version from the URL -- 49ms at 22 characters, roughly quadrupling every two -- so matching a crafted ?version= could hang the example page. Each suffix is now matched once. * AG-18183 Drop the stale reactFunctionalTs_Dev skips The two React development-build warnings these examples were skipped for (Unsupported style property white-space / white-space-collapse) have been on the global excludeErrors allowlist since #13778, so the skips no longer guard anything. Both examples pass on the development build, which #14820 made the variant actually load. * AG-18184 Restore production mode for Angular docs examples (#14836) enableProdMode() was guarded on window.ENABLE_PROD_MODE, which only the two grid-angular-boilerplate systemjs configs ever set. Removing SystemJS deleted both, so every Angular example has been running without production mode and the guard was dead code. Read ?prod from the URL instead, with the same rule the import map injector and the deleted configs use - production unless prod=false. That restores the behaviour on latest and leaves no flag for anything to forget to set. * AG-17103 Drop eslint globals stranded by the SystemJS removal The example-runner boilerplate no longer references System, boilerplatePath, startFile or appLocation - the two systemjs configs that supplied them were deleted - so the whole config entry existed only to allow globals nothing uses. * AG-18202 Emit the example import map as compact JSON (#14840) * AG-18204 Import enterprise on demand in the injected test-id block (#14843) * AG-18201 Extract example page boilerplate and split ExampleModules (#14841) * AG-18201 Serve the example page's scripts instead of inlining them (#14855) * AG-18201 Serve the example page's scripts instead of inlining them Every example's index.html carried the import-map injector, the process.env shim, the seeded random generator and the browser transpiler as inline script bodies, which is what a Plunker or CodeSandbox export shows the user. They are now plain files under public/example-runner/, referenced by src, with only the per-example data left in the page. The default framework build travels with the page as `defaultProd`, so that local examples keep running against React's development build as they did under SystemJS's systemjs.config.dev.js. * AG-18201 Read a page that names no default framework build The injector is served from a mutable URL, so it can meet a page older than itself -- a Plunker or CodeSandbox export taken before the default build travelled with the page. Such a page gets the production build rather than the development one it would fall to otherwise. * AG-17103 ship the process shim with the exported example page Exported Plunker and CodeSandbox pages had to fetch example-page.js from the site to define process.env.NODE_ENV, which examples read at their top level -- so an unreachable site meant the example did not load at all. Inline the definition for those pages, as the boilerplate they shipped used to. * AG-17103 format the example files in dev as well as production The files shipped to Plunker and CodeSandbox were only formatted for production builds, so an export taken from the dev server carried a single-line index.html and unformatted sources. Format regardless of the build, since these files are read by a person. * AG-17103 carry the example page's import map as an object The page serialised the map into a JSON string inside its options block, which no formatter can reach. Carry the imports as an object and substitute the version and build tokens per URL instead of over the serialised map. Pages already exported carry the string, which this still reads. * AG-17103 ship the exported example page a resolved import map Exported pages carried the map with a placeholder wherever the framework version appears, and depended on fetching the injector from the site to substitute it -- so an export that could not reach the site registered no map at all, and every bare specifier failed. An export has no URL to read ?version= or ?prod= from, so it now carries the map resolved, as markup, with no injector. Affected every framework example export; the frameworkless ones already rendered their map. * AG-17103 format ExampleImportMap and frameworkFilesGenerator * AG-17103 name rxjs alongside React in the esm.sh CSP comments The allowance reads as React-only, but rxjs' ESM build comes from the same host -- an Angular example is what actually surfaced it. * AG-17103 address review comments on the example-runner scripts The Angular boilerplate explained `?prod` in terms of React's build; state what it does for Angular and point at the shared parameter instead. Tighten the browser transpiler's header. * AG-17103 give each framework only the compiler options it needs, named getCompilerOptions took no framework, so every example was transpiled with React's jsx and Angular's decorator flags, and the options reached an exported page as bare enum numbers ("target": 9). It now takes the framework and yields only that framework's options, named as their enum members; the page carries the names and resolves them against its own ts. * AG-17103 stop naming the ticket's preview path in the example-runner test The stubbed base URL was the branch's own deployment path, which reads as significant when it is only a stand-in. Name both it and the site URL as such. * AG-17103 request the example page boilerplate with CORS so exports can load it * AG-17103 resolve example module specifiers from the files the page names * redo bunch of comments * AG-17103 remove added comments * upd * AG-17103 match the injector's const declarations in its test * [AG-17103] refactor(docs-examples): single example-runner client, shipped with exports (#14882) * [AG-17103] refactor(docs-examples): single example-runner client, shipped with exports * [AG-17103] fix(docs-examples): read one runner call per script in the example-modules test
The Google font provider resolves a fonts.gstatic.com URL at build time and downloads it with no retry. Google periodically re-cuts those files without bumping the version in the URL, and stale CSS on some edge nodes then hands out filenames gstatic has already deleted, 404ing the whole docs build. It has hit both families the site uses: JetBrains Mono run 31507101912, 2026-08-11 IBM Plex Sans run 32036811141, 2026-08-17 Both failed the "Docs Build & Link Checker" job with [CannotFetchFontFile]. That job runs on any non-draft PR touching code or docs, so the exposure is broad, and the same fault was diagnosed and fixed in ag-studio (AS-1169). Resolve both families from the installed @fontsource-variable packages instead, which removes the build-time network call entirely and pins the files to the lockfile. Rendering is deliberately unchanged. Each family ships as one variable woff2 but is declared at the same discrete weights the Google provider declared - sans 400/500/700, mono 400/700. Declaring the file's full variable range instead would be a typography change, not a simplification: CSS matches a requested weight to the nearest declared one, so the ~58 `font-weight: 600` call sites in the docs currently resolve to 700 and would start resolving to a true, lighter 600. Widening the ranges is a separate, deliberate decision. The faces do NOT carry the unicode-range the Google provider emitted. That descriptor lets a browser skip downloading a subset it has no characters for, which needs more than one subset to mean anything: there is a single latin file per family, it is preloaded from Layout.astro regardless, and its coverage is exactly the range fontsource declares for it, so anything outside falls back per glyph either way. Verified by diffing the built output against what staging serves today, with the per-build family and file hashes normalised: 10 @font-face blocks either side, identical descriptor for descriptor once unicode-range is discounted - same weights, same two woff2 files shared across weights, same fallback metric overrides. The five blocks that differ are exactly the five real faces that carried unicode-range. Build exits 0 with no gstatic reference in the log or the output. The CSP is deliberately untouched: fonts.googleapis.com in style-src and fonts.gstatic.com in font-src stay load-bearing for the example runner (ExampleStyle.astro), the docs-e2e font mirror (localFonts.ts) and two campaign pages. Only ordinary site pages stop reaching for Google Fonts. The yarn.lock diff also collapses the string-width-cjs / strip-ansi-cjs / wrap-ansi-cjs alias entries into their plain keys - yarn v1 normalisation from running an install, same resolutions, nothing dropped.
… stalled apt mirror fails fast (#14880) * AG-18231 Bound Playwright install-deps so a stalled apt mirror fails fast Add a shared install-playwright.sh wrapper that bounds each Playwright install attempt with `timeout`, retries a bounded number of times, and fails with an ::error:: naming the OS-dependency install (not the tests) as the cause. Wire the doc-tests composite action's install step to it, with separate budgets for the cache-hit (install-deps) and cache-miss (install --with-deps) paths. Fix #AG-18231 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * AG-18231 Widen the cache-miss install budgets after self-review The 600s per-attempt bound on `full`/`browsers` was sized against the 60-minute job ceiling, but the jobs that actually take a three-browser cache-miss install sit at 90; 900s x 2 attempts is ~31 min worst case, still well inside 60, and no longer risks failing a slow-but-healthy CDN download. Soften the timeout wording for the same reason - `timeout` is a wall-clock bound, not a stall detector - and correct the header's budget arithmetic to account for the kill-after grace period. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * AG-18231 Restore the 600s per-attempt bound on the cache-hit deps install `deps` was cut to 300s while every budget was being sized against the 60-minute ceiling; that constraint turned out not to bind (it belongs to the chromium-only shards, and 3 x 600s + grace is ~32 min worst case, still inside 60). `deps` is the common cache-hit path on every nightly shard, so a 300s bound left only ~1.7x headroom over a 3-minute install and risked failing a degraded-but-progressing mirror on the happy path. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * AG-18231 State the real ~32 min worst-case install bound in the header comment The header claimed the worst case failed "well under half an hour" while the budget table directly below it worked out to ~31-32 min. Replace the claim with the arithmetic, and state the constraint the numbers actually have to satisfy: ~32 min is the floor for the timeout-minutes of any job that calls the script. * AG-18231 Cap every doc-tests job at 90 min and bound the initialise Playwright install --------- Co-authored-by: claude[bot] <claude[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Stephen Cooper <scooperdev@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )