snapshot of https://github.com/tldraw/tldraw.git (main, 2026-09-23; blobs > 131072B omitted)
Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled

This commit is contained in:
upstream-mirror
2026-09-23 16:12:52 +05:00
commit a774ac673a
4541 changed files with 770499 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
import { getOwnProperty } from '@tldraw/utils'
/**
* Validates that specified environment variables are present and non-nullish in the provided environment object.
* Throws an error if any required variables are missing, otherwise returns the environment with guaranteed
* non-nullable types for the specified keys.
*
* @param env - The environment object containing potential environment variables
* @param keys - An object specifying which keys from the environment are required, where each key maps to `true`
* @returns The environment object with type-safe guarantees that the specified keys are non-null and defined
* @throws Error When any of the specified required environment variables are undefined
*
* @example
* ```typescript
* interface MyEnv {
* readonly DATABASE_URL?: string
* readonly API_KEY?: string
* readonly OPTIONAL_VAR?: string
* }
*
* const env: MyEnv = {
* DATABASE_URL: 'postgres://...',
* API_KEY: 'secret-key',
* // OPTIONAL_VAR is undefined
* }
*
* // Validate only the required variables
* const config = requiredEnv(env, {
* DATABASE_URL: true,
* API_KEY: true,
* })
*
* // config.DATABASE_URL and config.API_KEY are now guaranteed to be strings
* console.log(config.DATABASE_URL) // TypeScript knows this is string, not string | undefined
* ```
*
* @public
*/
export function requiredEnv<T extends object>(
env: T,
keys: { [K in keyof T]: true }
): { [K in keyof T]-?: NonNullable<T[K]> } {
for (const key of Object.keys(keys)) {
if (getOwnProperty(env, key) === undefined) {
throw new Error(`Missing required env var: ${key}`)
}
}
return env as any
}