next-runtime-env
Version:
Next.js Runtime Environment Configuration - Populates your environment at runtime rather than build time.
46 lines • 3.33 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.EnvScript = void 0;
const jsx_runtime_1 = require("react/jsx-runtime");
// XXX: Blocked by https://github.com/vercel/next.js/pull/58129
// import { headers } from 'next/headers';
const script_1 = __importDefault(require("next/script"));
const constants_1 = require("./constants");
/**
* Sets the provided environment variables in the browser. If an nonce is
* available, it will be set on the script tag.
*
* Usage:
* ```ts
* <head>
* <EnvScript env={{ NODE_ENV: 'test', API_URL: 'http://localhost:3000' }} />
* </head>
* ```
*/
const EnvScript = ({ env, nonce, disableNextScript = false, nextScriptProps = { strategy: 'beforeInteractive' }, }) => {
let nonceString;
// XXX: Blocked by https://github.com/vercel/next.js/pull/58129
// if (typeof nonce === 'object' && nonce !== null) {
// // It's strongly recommended to set a nonce on your script tags.
// nonceString = headers().get(nonce.headerKey) ?? undefined;
// }
if (typeof nonce === 'string') {
nonceString = nonce;
}
const innerHTML = {
__html: `window['${constants_1.PUBLIC_ENV_KEY}'] = ${JSON.stringify(env)}`,
};
// You can opt to use a regular "<script>" tag instead of Next.js' Script Component.
// Note: When using Sentry, sentry.client.config.ts might run after the Next.js <Script> component, even when the strategy is "beforeInteractive"
// This results in the runtime environments being undefined and the Sentry client config initialized without the correct configuration.
if (disableNextScript) {
return (0, jsx_runtime_1.jsx)("script", { nonce: nonceString, dangerouslySetInnerHTML: innerHTML });
}
// Use Next.js Script Component by default
return ((0, jsx_runtime_1.jsx)(script_1.default, { ...nextScriptProps, nonce: nonceString, dangerouslySetInnerHTML: innerHTML }));
};
exports.EnvScript = EnvScript;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHQvZW52LXNjcmlwdC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLCtEQUErRDtBQUMvRCwwQ0FBMEM7QUFDMUMseURBQXVEO0FBS3ZELDJDQUE2QztBQVM3Qzs7Ozs7Ozs7OztHQVVHO0FBQ0ksTUFBTSxTQUFTLEdBQXVCLENBQUMsRUFDNUMsR0FBRyxFQUNILEtBQUssRUFDTCxpQkFBaUIsR0FBRyxLQUFLLEVBQ3pCLGVBQWUsR0FBRyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxHQUNwRCxFQUFFLEVBQUU7SUFDSCxJQUFJLFdBQStCLENBQUM7SUFFcEMsK0RBQStEO0lBQy9ELHFEQUFxRDtJQUNyRCxxRUFBcUU7SUFDckUsK0RBQStEO0lBQy9ELElBQUk7SUFFSixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHO1FBQ2hCLE1BQU0sRUFBRSxXQUFXLDBCQUFjLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtLQUMvRCxDQUFDO0lBRUYsb0ZBQW9GO0lBQ3BGLGlKQUFpSjtJQUNqSix1SUFBdUk7SUFDdkksSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sbUNBQVEsS0FBSyxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEdBQUksQ0FBQztJQUM1RSxDQUFDO0lBRUQsMENBQTBDO0lBQzFDLE9BQU8sQ0FDTCx1QkFBQyxnQkFBTSxPQUNELGVBQWUsRUFDbkIsS0FBSyxFQUFFLFdBQVcsRUFDbEIsdUJBQXVCLEVBQUUsU0FBUyxHQUNsQyxDQUNILENBQUM7QUFDSixDQUFDLENBQUM7QUFyQ1csUUFBQSxTQUFTLGFBcUNwQiJ9