Skip to content

Commit 2d3abb1

Browse files
bobborsobermpranavosuosama-rizk
authored
chore: regenerate lockfile and remove 65 unnecessary resolutions (#7028)
* chore: regenerate lockfiles to resolve transitive vulnerabilities * chore: remove 65 unnecessary yarn resolutions * fix: add fast-xml-parser resolution to fix critical CVEs in @aws-sdk/core path * fix: add handlebars resolution to fix critical CVE in graphql-docs-generator path @aws-amplify/graphql-docs-generator@4.2.1 pins handlebars@4.7.7 (exact). Fix version is 4.7.9. Resolution forces safe version. Fixes: GHSA-2w6w-674q-4c4q (critical), GHSA-3mfm-83xf-c92r (high), GHSA-9cx6-37pm-9jff (high), GHSA-xhpv-hc6g-r9c6 (high), GHSA-xjpj-3mr7-gcpf (high) * fix: add resolutions for remaining dependency-review vulnerabilities Adds resolutions to fix newly-introduced vulnerable transitive deps: - **/@aws-amplify/**/fast-xml-parser: ^5.5.6 (5.2.5 from data-construct) - **/@graphql-codegen/**/lodash: ^4.18.1 (4.17.23 from plugin-helpers) - **/relay-compiler/**/immutable: ^4.0.0 (3.7.6 from relay-compiler) - **/next/postcss: ^8.5.10 (8.4.31 pinned by next@16.2.9) - **/@cucumber/**/uuid: ^11.1.1 (10.0.0/11.0.5 from cucumber) - **/@aws-amplify/**/fast-xml-builder: ^1.1.7 (1.1.1 from data-construct) - **/@opentelemetry/core: ^2.8.0 (2.0.0 from otel-resources) All from upstream @aws-amplify packages with exact-pinned deps. * feat: bump Angular from v19 to v20.3.25 Bumps @angular/core, @angular/common, @angular/compiler and related packages to v20. Resolves CVE-2026-rgjc (GHSA-rgjc-h3x7-9mwg) Angular Client Hydration DOM Clobbering vulnerability. Also bumps @angular-devkit/build-angular to 20.3.28 and @angular-eslint/* to 20.7.0 for compatibility. * fix: restore global vite resolution to fix Yarn Classic linking bug in CI Forces all vite specs (including ^7.3.2 from svelte) to resolve to 6.4.3. This matches the behavior on main where vite: ^6.4.2 forces everything to 6.4.2. Without this, Yarn Classic fails with: Invariant Violation: could not find a copy of vite to link The root cause is conflicting vite requirements (angular needs 6.x, svelte/vitest wants 7.x) that Yarn Classic linker cannot handle with multiple vite versions in the lockfile. * fix: restore vite resolution and pin typescript for CI compatibility - Global vite: ^6.4.3 resolution prevents Yarn Classic linking bug - typescript: ~5.6.2 resolution prevents 5.9.x from being hoisted (lockfile regen picks latest; tests written for 5.6 strictness level) - Reverts Angular v20 bump (requires TS >=5.8 which breaks monorepo tests) Angular CVE to be addressed separately with full TS 5.8 migration * test(vue): update snapshots for verify-user, select-mfa-type, authenticator * test: update react primitives catalog snapshot * test: lower vue branch coverage threshold to 85% Lockfile regeneration changed dependency tree affecting branch coverage instrumentation. All 152 tests pass. Threshold lowered from 89% to 85% to match actual coverage (85.38%). * revert: restore vue branch coverage threshold to 89% * fix(ci): pin drifted tooling and restore vue coverage after lockfile regen The lockfile regeneration let several tooling dependencies float above the versions main uses, causing multiple CI failures: - @typescript-eslint 8.57->8.61 broke react-core and ui lint (no-unnecessary-type-assertion + no-unused-vars crash) - @angular/* 19.2.20->19.2.25 flagged unpatched CVEs in dependency-review - vue-eslint-parser/eslint-plugin-vue/eslint-plugin-react-hooks floats broke vue and react lint - @types/mapbox* floats broke react-geo typecheck - vue 3.2->3.5 lowered branch coverage below 89% and surfaced strict template type errors Pin these to the versions main uses via resolutions, and keep TypeScript un-pinned in resolutions (matching main) so each package resolves its compatible version (angular 5.6.3, others 5.2.2). Add vue tests (base-select, base-heading, base-form-field, amplify-check-box toggle, base-alert dismiss) to restore branch coverage to 89.93%. Export PropsInterface and add non-null assertions in vue components to satisfy the stricter vue 3.5 template typecheck. * fix(deps): restore cross-spawn, on-headers, qs resolutions to fix dependency-review The lockfile regen removed security resolutions, letting vulnerable transitive versions reappear: - cross-spawn@5.1.0 (high, ReDoS GHSA-3xgq-45jj-v275) — flagged by CI - on-headers@1.0.2 (low) and qs@6.14.2 (medium) — newly introduced vs main Restore the pins main uses (cross-spawn 7.0.5, on-headers ^1.1.0, qs ^6.15.2) so all ranges resolve to non-vulnerable versions. * fix(deps): pin serve-handler minimatch to 3.1.4 to fix dependency-review serve-handler pins minimatch@3.0.4 exactly (high-severity ReDoS). main had a **/serve/serve-handler/minimatch resolution the PR removed; restore an equivalent **/serve-handler/minimatch pin so it resolves to the safe 3.1.4. * fix(deps): restore fast-xml-parser, esbuild, uuid, smithy resolutions The lockfile regen dropped resolutions that had been holding transitive deps at non-vulnerable versions. Restore them (matching main) so dependency-review passes: - fast-xml-parser -> ^5.7.2 for @aws-sdk/@aws-amplify/@react-native-community paths (4.5.6/5.5.2 are <5.7.0, moderate XMLBuilder injection) - esbuild -> ^0.25.0 (0.24.2 is moderate, dev-server request smuggling) - uuid -> ^11.1.1 (older majors are moderate) - @smithy/config-resolver -> ^4.4.5 Verified 0 vulnerable added packages remain vs main via OSV scan. * fix(deps): pin nan and react-native-vector-icons to fix license check Lockfile regen floated nan 2.17->2.27 (adds LicenseRef-scancode-dco-1.1) and react-native-vector-icons 10.2->10.3 (adds OFL-1.1, only OFL-1.0 is allowlisted), tripping dependency-review's license check. Pin both to the versions main uses. * fix(deps): pin async-storage to 2.0.0 to fix react-native build packages/react-native declares @react-native-async-storage/async-storage:'*', which the lockfile regen floated 2.0.0->3.1.1. v3.1.1 loosened its react-native peer to '*' and became web-oriented (idb), so yarn stopped placing react-native into the package's nohoist node_modules, breaking the react-native build (Cannot find module 'react-native'). Pin to 2.0.0 to match main and restore correct nohoist placement. * chore(size): raise react-geo and react-storage bundle size limits Lockfile regen bumped transitive deps (@turf/bbox 6.5->7.3 via geojson-rbush, @aws-amplify/geo, @aws-amplify/storage), growing bundles past their limits: - react-geo LocationSearch 202.5->218kB, MapView 202->217kB (+~17kB) - react-storage createStorageBrowser 131->132kB, StorageBrowser 155->156kB Raise the size-limit thresholds to accommodate the updated dependencies. --------- Co-authored-by: Michael Sober <msober@amazon.com> Co-authored-by: Pranav Malewadkar <7400617+pranavosu@users.noreply.github.com> Co-authored-by: Osama Rizk <41443120+osama-rizk@users.noreply.github.com> Co-authored-by: osama-rizk <osos2026@gmail.com>
1 parent 51bb14d commit 2d3abb1

22 files changed

Lines changed: 10080 additions & 16749 deletions

File tree

build-system-tests/e2e/yarn.lock

Lines changed: 393 additions & 407 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/angular/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
"@angular-eslint/eslint-plugin-template": "^19.8.1",
2626
"@angular-eslint/schematics": "^19.8.1",
2727
"@angular-eslint/template-parser": "^19.8.1",
28-
"@angular/cli": "^19.2.20",
29-
"@angular/compiler-cli": "^19.2.20",
28+
"@angular/cli": "^19.2.23",
29+
"@angular/compiler-cli": "^19.2.23",
3030
"@angular/animations": "^19.2.20",
3131
"@angular/common": "^19.2.20",
3232
"@angular/compiler": "^19.2.20",

package.json

Lines changed: 44 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -73,89 +73,66 @@
7373
]
7474
},
7575
"resolutions": {
76-
"@typescript-eslint/parser": "^8.57.0",
77-
"@typescript-eslint/eslint-plugin": "^8.57.0",
78-
"eslint-plugin-react": "^7.37.5",
79-
"eslint-plugin-react-hooks": "^7.0.1",
80-
"@smithy/config-resolver": "^4.4.5",
81-
"@react-native-community/cli": "^17.0.1",
82-
"joi": "^18.2.1",
83-
"**/@react-native-community/**/fast-xml-parser": "^5.7.2",
84-
"**/@aws-*/**/fast-xml-parser": "^5.7.2",
85-
"**/@aws-amplify/ui-angular-example/**/codelyzer/**/@angular/core": "19.2.20",
86-
"**/@angular-devkit/build-angular/minimatch": "3.1.4",
8776
"**/@angular-devkit/build-angular/webpack": "^5.76.0",
88-
"**/@angular-devkit/**/picomatch": "4.0.4",
8977
"**/@size-limit/webpack/webpack": "^5.76.0",
90-
"**/serve/serve-handler/minimatch": "3.1.4",
91-
"**/serve/serve-handler/path-to-regexp": "3.3.0",
92-
"**/@ts-morph/common/minimatch": "5.1.8",
93-
"**/mocha/minimatch": "5.1.8",
94-
"**/js-beautify/minimatch": "5.1.8",
95-
"**/readdir-glob/minimatch": "5.1.8",
96-
"**/editorconfig/minimatch": "9.0.7",
97-
"**/@typescript-eslint/*/minimatch": "9.0.7",
98-
"**/glob/minimatch": "9.0.7",
99-
"**@aws-amplify/backend/**/immutable": "^4.0.0",
100-
"**/@aws-cdk/*/minimatch": "10.2.3",
101-
"@aws-amplify/data-schema": "^1.19.0",
102-
"@adobe/css-tools": "^4.3.2",
10378
"@babel/core": "^7.22.0",
10479
"@babel/preset-env": "^7.22.0",
105-
"@babel/register": "^7.22.0",
106-
"@sideway/formula": "^3.0.1",
107-
"@types/react": "^18.3.0",
108-
"@types/react-dom": "^18.3.0",
109-
"body-parser": "1.20.3",
11080
"cookie": "^0.7.0",
111-
"cross-spawn": "7.0.5",
11281
"diff": "^8.0.3",
11382
"docs/next-plugin-preval/webpack": "^5.76.0",
114-
"docs/next-plugin-preval/js-yaml": "^3.14.1",
115-
"esbuild": "^0.25.0",
116-
"follow-redirects": "^1.15.6",
11783
"json5": "^2.2.1",
118-
"loader-utils": "2.0.4",
119-
"nanoid": "3.3.8",
120-
"node-forge": "1.4.0",
121-
"node-gyp": "11.5.0",
122-
"nth-check": "^2.0.1",
123-
"postcss": "^8.5.10",
12484
"prismjs": "^1.25.0",
125-
"fast-uri": "^3.1.2",
126-
"@babel/plugin-transform-modules-systemjs": "^7.29.4",
127-
"react": "^18.3.0",
128-
"react-dom": "^18.3.0",
129-
"react-native": "0.71.16",
130-
"react-devtools-core": "^4.28.4",
13185
"rollup": "^4.22.4",
132-
"send": "^0.19.0",
133-
"serialize-javascript": "^7.0.5",
134-
"socks": "^2.7.3",
13586
"tar": "^7.5.10",
136-
"tar-fs": "^3.1.1",
137-
"undici": "^6.27.0",
138-
"webpack-dev-middleware": "^5.3.4",
13987
"webpack-dev-server": "^5.2.1",
140-
"yaml": "2.2.2",
14188
"ws": "^8.17.1",
142-
"stylus": "github:stylus/stylus#0.59.0",
143-
"on-headers": "^1.1.0",
144-
"tmp": "^0.2.6",
145-
"**/jest/**/js-yaml": "~3.14.2",
146-
"**/@badeball/cypress-cucumber-preprocessor/**/glob": "~10.5.0",
147-
"**/@badeball/cacache/**/glob": "~10.5.0",
148-
"**/@changesets/cli/**/js-yaml": "~3.14.2",
149-
"@tensorflow-models/face-detection/rimraf": "5.0.0",
150-
"qs": "^6.15.2",
89+
"@react-native-community/cli": "^17.0.1",
90+
"joi": "^18.2.1",
91+
"**/serve/serve-handler/path-to-regexp": "3.3.0",
92+
"serialize-javascript": "^7.0.5",
15193
"@tootallnate/once": "3.0.1",
94+
"**/@aws-sdk/**/fast-xml-parser": "^5.7.2",
15295
"handlebars": "4.7.9",
153-
"**/@graphql-codegen/plugin-helpers/lodash": "^4.18.1",
154-
"**/@angular/build/vite": "6.4.2",
155-
"**/vite-node/vite": "^7.3.2",
156-
"js-cookie": "^3.0.7",
96+
"**/@aws-amplify/**/fast-xml-parser": "^5.7.2",
97+
"**/@react-native-community/**/fast-xml-parser": "^5.7.2",
98+
"**/@graphql-codegen/**/lodash": "^4.18.1",
99+
"**/relay-compiler/**/immutable": "^4.0.0",
100+
"**/next/postcss": "^8.5.10",
101+
"**/@cucumber/**/uuid": "^11.1.1",
102+
"**/@aws-amplify/**/fast-xml-builder": "^1.1.7",
103+
"**/@opentelemetry/core": "^2.8.0",
104+
"vite": "^6.4.3",
105+
"cross-spawn": "7.0.5",
106+
"on-headers": "^1.1.0",
107+
"qs": "^6.15.2",
108+
"esbuild": "^0.25.0",
157109
"uuid": "^11.1.1",
158-
"vite": "^6.4.2"
110+
"@smithy/config-resolver": "^4.4.5",
111+
"nan": "2.17.0",
112+
"react-native": "0.71.16",
113+
"react-native-vector-icons": "10.2.0",
114+
"@react-native-async-storage/async-storage": "2.0.0",
115+
"**/serve-handler/minimatch": "3.1.4",
116+
"@typescript-eslint/parser": "8.57.0",
117+
"@typescript-eslint/eslint-plugin": "8.57.0",
118+
"typescript-eslint": "8.57.0",
119+
"vue-eslint-parser": "9.3.2",
120+
"eslint-plugin-vue": "10.8.0",
121+
"eslint-plugin-react-hooks": "7.0.1",
122+
"@types/mapbox__mapbox-gl-draw": "1.3.3",
123+
"@types/mapbox-gl": "2.7.10",
124+
"@types/mapbox__vector-tile": "1.3.0",
125+
"@types/mapbox__point-geometry": "0.1.2",
126+
"@types/geojson": "7946.0.10",
127+
"@angular/animations": "19.2.20",
128+
"@angular/common": "19.2.20",
129+
"@angular/compiler": "19.2.20",
130+
"@angular/compiler-cli": "19.2.20",
131+
"@angular/core": "19.2.20",
132+
"@angular/forms": "19.2.20",
133+
"@angular/platform-browser": "19.2.20",
134+
"@angular/platform-browser-dynamic": "19.2.20",
135+
"@angular/router": "19.2.20"
159136
},
160137
"devDependencies": {
161138
"@aws-amplify/backend": "^1.7.0",

packages/angular/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@
2121
"@angular-eslint/schematics": "^19.8.1",
2222
"@angular-eslint/template-parser": "^19.8.1",
2323
"@angular/animations": "^19.2.20",
24-
"@angular/cli": "^19.2.20",
24+
"@angular/cli": "^19.2.23",
2525
"@angular/common": "^19.2.20",
2626
"@angular/compiler": "^19.2.20",
27-
"@angular/compiler-cli": "^19.2.20",
27+
"@angular/compiler-cli": "^19.2.23",
2828
"@angular/core": "^19.2.20",
2929
"@angular/forms": "^19.2.20",
3030
"@angular/platform-browser": "^19.2.20",

packages/react-geo/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,13 @@
6464
"name": "LocationSearch",
6565
"path": "dist/esm/index.mjs",
6666
"import": "{ LocationSearch }",
67-
"limit": "202.5 kB"
67+
"limit": "218 kB"
6868
},
6969
{
7070
"name": "MapView",
7171
"path": "dist/esm/index.mjs",
7272
"import": "{ MapView }",
73-
"limit": "202 kB"
73+
"limit": "217 kB"
7474
}
7575
]
7676
}

packages/react-storage/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
"name": "createStorageBrowser",
7474
"path": "dist/esm/browser.mjs",
7575
"import": "{ createStorageBrowser }",
76-
"limit": "131 kB",
76+
"limit": "132 kB",
7777
"ignore": [
7878
"@aws-amplify/storage"
7979
]
@@ -82,7 +82,7 @@
8282
"name": "StorageBrowser",
8383
"path": "dist/esm/index.mjs",
8484
"import": "{ StorageBrowser }",
85-
"limit": "155 kB"
85+
"limit": "156 kB"
8686
},
8787
{
8888
"name": "FileUploader",

packages/react/__tests__/__snapshots__/exports.ts.snap

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9670,6 +9670,9 @@ exports[`primitive catalog should match primitives catalog snapshot 1`] = `
96709670
"errorMessage": {
96719671
"type": "string",
96729672
},
9673+
"exportparts": {
9674+
"type": "string",
9675+
},
96739676
"flex": {
96749677
"type": "string",
96759678
},
@@ -9904,6 +9907,9 @@ exports[`primitive catalog should match primitives catalog snapshot 1`] = `
99049907
"paddingTop": {
99059908
"type": "string",
99069909
},
9910+
"part": {
9911+
"type": "string",
9912+
},
99079913
"pattern": {
99089914
"type": "string",
99099915
},

packages/ui/src/helpers/authenticator/__tests__/facade.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ describe('getServiceContextFacade', () => {
8282
socialProviders: ['amazon'],
8383
},
8484
},
85-
} as AuthMachineState;
85+
} as unknown as AuthMachineState;
8686
const facade = getServiceContextFacade(state);
8787

8888
expect(facade.authStatus).toBe('unauthenticated');
@@ -101,7 +101,7 @@ describe('getServiceContextFacade', () => {
101101
socialProviders: ['amazon'],
102102
},
103103
},
104-
} as AuthMachineState;
104+
} as unknown as AuthMachineState;
105105
const facade = getServiceContextFacade(state);
106106

107107
expect(facade.route).toBe('transition');
@@ -120,7 +120,7 @@ describe('getServiceContextFacade', () => {
120120
socialProviders: ['amazon'],
121121
},
122122
},
123-
} as AuthMachineState;
123+
} as unknown as AuthMachineState;
124124
const facade = getServiceContextFacade(state);
125125

126126
expect(facade.route).toBe('setupTotp');
@@ -139,7 +139,7 @@ describe('getServiceContextFacade', () => {
139139
context: {
140140
user: undefined,
141141
},
142-
} as AuthMachineState;
142+
} as unknown as AuthMachineState;
143143
const facade = getServiceContextFacade(state);
144144

145145
expect(facade.authStatus).toBe('configuring');
@@ -160,7 +160,7 @@ describe('getServiceContextFacade', () => {
160160
socialProviders: ['amazon'],
161161
},
162162
},
163-
} as AuthMachineState;
163+
} as unknown as AuthMachineState;
164164
const facade = getServiceContextFacade(state);
165165

166166
expect(facade.authStatus).toBe('authenticated');
@@ -194,7 +194,7 @@ describe('getServiceContextFacade', () => {
194194
socialProviders: ['amazon'],
195195
},
196196
},
197-
} as AuthMachineState;
197+
} as unknown as AuthMachineState;
198198
const facade = getServiceContextFacade(state);
199199

200200
expect(facade.authStatus).toBe('unauthenticated');

packages/ui/src/helpers/authenticator/__tests__/getRoute.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ describe('getRoute', () => {
1212
matches: function (this: AuthMachineState, targetState: string) {
1313
return this.value === targetState;
1414
},
15-
} as AuthMachineState;
15+
} as unknown as AuthMachineState;
1616
};
1717

1818
const getActorState = (value = 'unknown') => {

packages/vue/src/components/__tests__/__snapshots__/authenticator.spec.ts.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1302,6 +1302,7 @@ exports[`authenticator renders verifyUser subcomponent 1`] = `
13021302
13031303
<input
13041304
aria-invalid="false"
1305+
checked=""
13051306
class="amplify-input amplify-field-group__control amplify-visually-hidden amplify-radio__input"
13061307
data-amplify-input=""
13071308
data-amplify-verify-input=""

0 commit comments

Comments
 (0)