next-runtime-env
Version:
Next.js Runtime Environment Configuration - Populates your environment at runtime rather than build time.
55 lines • 6.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const jsx_runtime_1 = require("react/jsx-runtime");
require("@testing-library/jest-dom");
const react_1 = require("@testing-library/react");
const env_script_1 = require("./env-script");
jest.mock('next/script', () =>
// eslint-disable-next-line @typescript-eslint/no-explicit-any
({ children, ...props }) => (0, jsx_runtime_1.jsx)("script", { ...props, children: children }));
beforeEach(() => {
process.env = {};
});
afterEach(() => {
process.env = {};
});
describe('EnvScript', () => {
it('should set the env in the script', () => {
const env = { NODE_ENV: 'test', API_URL: 'http://localhost:3000' };
(0, react_1.render)((0, jsx_runtime_1.jsx)(env_script_1.EnvScript, { env: env }));
expect(document.querySelector('script')?.textContent).toBe(`window['__ENV'] = ${JSON.stringify(env)}`);
});
it("should set a nonce when it's available", () => {
const env = { NODE_ENV: 'test', API_URL: 'http://localhost:3000' };
const nonce = 'test-nonce-xyz';
(0, react_1.render)((0, jsx_runtime_1.jsx)(env_script_1.EnvScript, { env: env, nonce: nonce }));
expect(document.querySelector('script')).toHaveAttribute('nonce', nonce);
});
it("should not set a nonce when it's not available", () => {
const env = { NODE_ENV: 'test', API_URL: 'http://localhost:3000' };
(0, react_1.render)((0, jsx_runtime_1.jsx)(env_script_1.EnvScript, { env: env }));
expect(document.querySelector('script')).not.toHaveAttribute('nonce');
});
it('should accept Next.js Script tag props', () => {
const env = { NODE_ENV: 'test', API_URL: 'http://localhost:3000' };
const nonce = 'test-nonce-xyz';
const id = 'text-id-abc';
(0, react_1.render)((0, jsx_runtime_1.jsx)(env_script_1.EnvScript, { env: env, nonce: nonce, nextScriptProps: {
strategy: 'afterInteractive',
id,
} }));
expect(document.querySelector('script')).toHaveAttribute('nonce', nonce);
expect(document.querySelector('script')).toHaveAttribute('id', id);
expect(document.querySelector('script')?.textContent).toBe(`window['__ENV'] = ${JSON.stringify(env)}`);
});
it('should not have Next.js Script props when a regular script tag is used', () => {
const env = { NODE_ENV: 'test', API_URL: 'http://localhost:3000' };
const id = 'text-id-abc';
(0, react_1.render)((0, jsx_runtime_1.jsx)(env_script_1.EnvScript, { env: env, disableNextScript: true, nextScriptProps: {
id,
} }));
expect(document.querySelector('script')).not.toHaveAttribute('id', id);
});
it.todo('should get the nonce from the headers when the headerKey is provided');
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LXNjcmlwdC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdC9lbnYtc2NyaXB0LnNwZWMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUFtQztBQUVuQyxrREFBZ0Q7QUFFaEQsNkNBQXlDO0FBRXpDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtBQUM1Qiw4REFBOEQ7QUFDOUQsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssRUFBTyxFQUFFLEVBQUUsQ0FBQyxzQ0FBWSxLQUFLLFlBQUcsUUFBUSxHQUFVLENBQ3hFLENBQUM7QUFFRixVQUFVLENBQUMsR0FBRyxFQUFFO0lBQ2QsT0FBTyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUM7QUFFSCxTQUFTLENBQUMsR0FBRyxFQUFFO0lBQ2IsT0FBTyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtJQUN6QixFQUFFLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO1FBQzFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQztRQUVuRSxJQUFBLGNBQU0sRUFBQyx1QkFBQyxzQkFBUyxJQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUksQ0FBQyxDQUFDO1FBRWhDLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDeEQscUJBQXFCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDM0MsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxNQUFNLEdBQUcsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUM7UUFDbkUsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7UUFFL0IsSUFBQSxjQUFNLEVBQUMsdUJBQUMsc0JBQVMsSUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUksQ0FBQyxDQUFDO1FBRTlDLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxHQUFHLEVBQUU7UUFDeEQsTUFBTSxHQUFHLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxDQUFDO1FBRW5FLElBQUEsY0FBTSxFQUFDLHVCQUFDLHNCQUFTLElBQUMsR0FBRyxFQUFFLEdBQUcsR0FBSSxDQUFDLENBQUM7UUFFaEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxNQUFNLEdBQUcsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUM7UUFDbkUsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7UUFDL0IsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDO1FBRXpCLElBQUEsY0FBTSxFQUNKLHVCQUFDLHNCQUFTLElBQ1IsR0FBRyxFQUFFLEdBQUcsRUFDUixLQUFLLEVBQUUsS0FBSyxFQUNaLGVBQWUsRUFBRTtnQkFDZixRQUFRLEVBQUUsa0JBQWtCO2dCQUM1QixFQUFFO2FBQ0gsR0FDRCxDQUNILENBQUM7UUFFRixNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDeEQscUJBQXFCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDM0MsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHdFQUF3RSxFQUFFLEdBQUcsRUFBRTtRQUNoRixNQUFNLEdBQUcsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUM7UUFDbkUsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDO1FBRXpCLElBQUEsY0FBTSxFQUNKLHVCQUFDLHNCQUFTLElBQ1IsR0FBRyxFQUFFLEdBQUcsRUFDUixpQkFBaUIsUUFDakIsZUFBZSxFQUFFO2dCQUNmLEVBQUU7YUFDSCxHQUNELENBQ0gsQ0FBQztRQUVGLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsSUFBSSxDQUNMLHNFQUFzRSxDQUN2RSxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUMifQ==