Mercurial
view third_party/bun/node_modules/loose-envify/replace.js @ 71:75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Sun, 28 Dec 2025 20:34:22 -0800 |
| parents | de54585a40f1 |
| children |
line wrap: on
line source
'use strict'; var jsTokens = require('js-tokens').default; var processEnvRe = /\bprocess\.env\.[_$a-zA-Z][$\w]+\b/; var spaceOrCommentRe = /^(?:\s|\/[/*])/; function replace(src, envs) { if (!processEnvRe.test(src)) { return src; } var out = []; var purge = envs.some(function(env) { return env._ && env._.indexOf('purge') !== -1; }); jsTokens.lastIndex = 0 var parts = src.match(jsTokens); for (var i = 0; i < parts.length; i++) { if (parts[i ] === 'process' && parts[i + 1] === '.' && parts[i + 2] === 'env' && parts[i + 3] === '.') { var prevCodeToken = getAdjacentCodeToken(-1, parts, i); var nextCodeToken = getAdjacentCodeToken(1, parts, i + 4); var replacement = getReplacementString(envs, parts[i + 4], purge); if (prevCodeToken !== '.' && nextCodeToken !== '.' && nextCodeToken !== '=' && typeof replacement === 'string') { out.push(replacement); i += 4; continue; } } out.push(parts[i]); } return out.join(''); } function getAdjacentCodeToken(dir, parts, i) { while (true) { var part = parts[i += dir]; if (!spaceOrCommentRe.test(part)) { return part; } } } function getReplacementString(envs, name, purge) { for (var j = 0; j < envs.length; j++) { var env = envs[j]; if (typeof env[name] !== 'undefined') { return JSON.stringify(env[name]); } } if (purge) { return 'undefined'; } } module.exports = replace;