mirror of
https://github.com/withastro/astro.git
synced 2025-02-17 22:44:24 -05:00
feat: astro:env allow schema keys to include numbers (#11437)
Co-authored-by: Florian Lefebvre <contact@florian-lefebvre.dev>
This commit is contained in:
parent
ea4bc04e94
commit
6ccb30e610
3 changed files with 53 additions and 4 deletions
5
.changeset/loud-socks-doubt.md
Normal file
5
.changeset/loud-socks-doubt.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
'astro': patch
|
||||
---
|
||||
|
||||
Fixes a case where Astro's config `experimental.env.schema` keys did not allow numbers. Numbers are still not allowed as the first character to be able to generate valid JavaScript identifiers
|
14
packages/astro/src/env/schema.ts
vendored
14
packages/astro/src/env/schema.ts
vendored
|
@ -81,12 +81,18 @@ const EnvFieldMetadata = z.union([
|
|||
SecretServerEnvFieldMetadata,
|
||||
]);
|
||||
|
||||
const KEY_REGEX = /^[A-Z_]+$/;
|
||||
const EnvSchemaKey = z
|
||||
.string()
|
||||
.min(1)
|
||||
.refine(([firstChar]) => isNaN(Number.parseInt(firstChar)), {
|
||||
message: 'A valid variable name cannot start with a number.',
|
||||
})
|
||||
.refine((str) => /^[A-Z0-9_]+$/.test(str), {
|
||||
message: 'A valid variable name can only contain uppercase letters, numbers and underscores.',
|
||||
});
|
||||
|
||||
export const EnvSchema = z.record(
|
||||
z.string().regex(KEY_REGEX, {
|
||||
message: 'A valid variable name can only contain uppercase letters and underscores.',
|
||||
}),
|
||||
EnvSchemaKey,
|
||||
z.intersection(EnvFieldMetadata, EnvFieldType)
|
||||
);
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ import { describe, it } from 'node:test';
|
|||
import stripAnsi from 'strip-ansi';
|
||||
import { z } from 'zod';
|
||||
import { validateConfig } from '../../../dist/core/config/validate.js';
|
||||
import { envField } from '../../../dist/env/config.js';
|
||||
import { formatConfigErrorMessage } from '../../../dist/core/messages.js';
|
||||
|
||||
describe('Config Validation', () => {
|
||||
|
@ -367,5 +368,42 @@ describe('Config Validation', () => {
|
|||
).catch((err) => err)
|
||||
);
|
||||
});
|
||||
|
||||
it('Should allow schema variables with numbers', () => {
|
||||
assert.doesNotThrow(() =>
|
||||
validateConfig(
|
||||
{
|
||||
experimental: {
|
||||
env: {
|
||||
schema: {
|
||||
ABC123: envField.string({ access: 'public', context: 'server' }),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
process.cwd()
|
||||
).catch((err) => err)
|
||||
);
|
||||
});
|
||||
|
||||
it('Should not allow schema variables starting with a number', async () => {
|
||||
const configError = await validateConfig(
|
||||
{
|
||||
experimental: {
|
||||
env: {
|
||||
schema: {
|
||||
"123ABC": envField.string({ access: 'public', context: 'server' }),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
process.cwd()
|
||||
).catch((err) => err);
|
||||
assert.equal(configError instanceof z.ZodError, true);
|
||||
assert.equal(
|
||||
configError.errors[0].message,
|
||||
'A valid variable name cannot start with a number.'
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Reference in a new issue