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
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:
49
packages/worker-shared/src/env.ts
Normal file
49
packages/worker-shared/src/env.ts
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user