From 8e8a1b1be11908a91e11a0ab7b4521e0ecfcea12 Mon Sep 17 00:00:00 2001 From: Stan Wohlwend Date: Sun, 7 Jul 2024 17:28:14 -0700 Subject: [PATCH] Set target to ES2021 --- apps/backend/src/oauth/providers/base.tsx | 6 ++++++ packages/stack-emails/tsconfig.json | 3 ++- packages/stack-sc/tsconfig.json | 3 ++- packages/stack-shared/src/utils/arrays.tsx | 10 ++++++++++ packages/stack-shared/src/utils/globals.tsx | 4 ++++ packages/stack-shared/src/utils/strings.tsx | 3 ++- packages/stack-shared/src/utils/uuids.tsx | 5 ++++- packages/stack-shared/tsconfig.json | 3 ++- packages/stack-ui/tsconfig.json | 3 ++- packages/stack/tsconfig.json | 3 ++- 10 files changed, 36 insertions(+), 7 deletions(-) diff --git a/apps/backend/src/oauth/providers/base.tsx b/apps/backend/src/oauth/providers/base.tsx index bc6f62b0d..f849a3918 100644 --- a/apps/backend/src/oauth/providers/base.tsx +++ b/apps/backend/src/oauth/providers/base.tsx @@ -34,6 +34,12 @@ export abstract class OAuthBaseProvider { // facebook always return an id_token even in the OAuth2 flow, which is not supported by openid-client const oldGrant = this.oauthClient.grant; + if (!(oldGrant as any)) { + // it seems that on Sentry, this was undefined in one scenario, so let's log some data to help debug if it happens again + // not sure if that is actually what was going on? the error log has very few details + // https://stackframe-pw.sentry.io/issues/5515577938 + throw new StackAssertionError("oldGrant is undefined for some reason — that should never happen!", { options, oauthClient: this.oauthClient }); + } this.oauthClient.grant = async function (params) { const grant = await oldGrant.call(this, params); delete grant.id_token; diff --git a/packages/stack-emails/tsconfig.json b/packages/stack-emails/tsconfig.json index 70923d66b..35ed9fab9 100644 --- a/packages/stack-emails/tsconfig.json +++ b/packages/stack-emails/tsconfig.json @@ -4,7 +4,8 @@ "outDir": "dist", "rootDir": "src", "declaration": true, - "target": "ESNext", + "target": "ES2021", + "lib": ["DOM", "DOM.Iterable", "ES2021", "ES2022.Error"], "module": "ES2015", "moduleResolution": "Bundler", "esModuleInterop": true, diff --git a/packages/stack-sc/tsconfig.json b/packages/stack-sc/tsconfig.json index 59fa4e675..75ddb0baf 100644 --- a/packages/stack-sc/tsconfig.json +++ b/packages/stack-sc/tsconfig.json @@ -4,7 +4,8 @@ "outDir": "dist", "rootDir": "src", "declaration": true, - "target": "ESNext", + "target": "ES2021", + "lib": ["DOM", "DOM.Iterable", "ES2021", "ES2022.Error"], "module": "ES2015", "moduleResolution": "Bundler", "esModuleInterop": true, diff --git a/packages/stack-shared/src/utils/arrays.tsx b/packages/stack-shared/src/utils/arrays.tsx index 12e0cc3f2..6b889e25a 100644 --- a/packages/stack-shared/src/utils/arrays.tsx +++ b/packages/stack-shared/src/utils/arrays.tsx @@ -16,6 +16,16 @@ export function isShallowEqual(a: readonly any[], b: readonly any[]): boolean { return true; } +/** + * Ponyfill for ES2023's findLastIndex. + */ +export function findLastIndex(arr: readonly T[], predicate: (item: T) => boolean): number { + for (let i = arr.length - 1; i >= 0; i--) { + if (predicate(arr[i])) return i; + } + return -1; +} + export function groupBy( arr: Iterable, key: (item: T) => K, diff --git a/packages/stack-shared/src/utils/globals.tsx b/packages/stack-shared/src/utils/globals.tsx index d73807f44..2768be879 100644 --- a/packages/stack-shared/src/utils/globals.tsx +++ b/packages/stack-shared/src/utils/globals.tsx @@ -8,6 +8,10 @@ export { globalVar, }; +if (typeof globalThis === 'undefined') { + (globalVar as any).globalThis = globalVar; +} + const stackGlobalsSymbol = Symbol.for('__stack-globals'); globalVar[stackGlobalsSymbol] ??= {}; diff --git a/packages/stack-shared/src/utils/strings.tsx b/packages/stack-shared/src/utils/strings.tsx index 67a268bb3..8813fc337 100644 --- a/packages/stack-shared/src/utils/strings.tsx +++ b/packages/stack-shared/src/utils/strings.tsx @@ -1,3 +1,4 @@ +import { findLastIndex } from "./arrays"; import { StackAssertionError } from "./errors"; import { filterUndefined } from "./objects"; @@ -49,7 +50,7 @@ export function trimEmptyLinesStart(s: string): string { */ export function trimEmptyLinesEnd(s: string): string { const lines = s.split("\n"); - const lastNonEmptyLineIndex = lines.findLastIndex((line) => line.trim() !== ""); + const lastNonEmptyLineIndex = findLastIndex(lines, (line) => line.trim() !== ""); return lines.slice(0, lastNonEmptyLineIndex + 1).join("\n"); } diff --git a/packages/stack-shared/src/utils/uuids.tsx b/packages/stack-shared/src/utils/uuids.tsx index 984d04095..d3ac6e658 100644 --- a/packages/stack-shared/src/utils/uuids.tsx +++ b/packages/stack-shared/src/utils/uuids.tsx @@ -1,5 +1,8 @@ import { globalVar } from "./globals"; export function generateUuid() { - return globalVar.crypto.randomUUID(); + // crypto.randomUuid is not supported in all browsers, so this is a polyfill + return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c => + (+c ^ globalVar.crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> +c / 4).toString(16) + ); } diff --git a/packages/stack-shared/tsconfig.json b/packages/stack-shared/tsconfig.json index 70923d66b..35ed9fab9 100644 --- a/packages/stack-shared/tsconfig.json +++ b/packages/stack-shared/tsconfig.json @@ -4,7 +4,8 @@ "outDir": "dist", "rootDir": "src", "declaration": true, - "target": "ESNext", + "target": "ES2021", + "lib": ["DOM", "DOM.Iterable", "ES2021", "ES2022.Error"], "module": "ES2015", "moduleResolution": "Bundler", "esModuleInterop": true, diff --git a/packages/stack-ui/tsconfig.json b/packages/stack-ui/tsconfig.json index 70923d66b..35ed9fab9 100644 --- a/packages/stack-ui/tsconfig.json +++ b/packages/stack-ui/tsconfig.json @@ -4,7 +4,8 @@ "outDir": "dist", "rootDir": "src", "declaration": true, - "target": "ESNext", + "target": "ES2021", + "lib": ["DOM", "DOM.Iterable", "ES2021", "ES2022.Error"], "module": "ES2015", "moduleResolution": "Bundler", "esModuleInterop": true, diff --git a/packages/stack/tsconfig.json b/packages/stack/tsconfig.json index 87d69d3f8..c404863fd 100644 --- a/packages/stack/tsconfig.json +++ b/packages/stack/tsconfig.json @@ -4,7 +4,8 @@ "outDir": "dist", "rootDir": "src", "declaration": true, - "target": "ES2022", + "target": "ES2021", + "lib": ["DOM", "DOM.Iterable", "ES2021", "ES2022.Error"], "module": "ES2020", "moduleResolution": "Bundler", "esModuleInterop": true,