First upload version 0.0.1

This commit is contained in:
Neyra
2026-02-05 15:27:49 +08:00
commit 8e9b7201ed
4182 changed files with 593136 additions and 0 deletions

183
node_modules/env-var/lib/variable.js generated vendored Normal file
View File

@@ -0,0 +1,183 @@
'use strict'
const EnvVarError = require('./env-error')
const base64Regex = /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/
/**
* Returns an Object that contains functions to read and specify the format of
* the variable you wish to have returned
* @param {Object} container Encapsulated container (e.g., `process.env`).
* @param {String} varName Name of the requested property from `container`.
* @param {*} defValue Default value to return if `varName` is invalid.
* @param {Object} extraAccessors Extra accessors to install.
* @return {Object}
*/
module.exports = function getVariableAccessors (container, varName, extraAccessors, logger) {
let isBase64 = false
let isRequired = false
let defValue
let example
const builtInAccessors = require('./accessors/index')
/**
* Logs the given string using the provided logger
* @param {String} str
* @param {String} str
*/
function log (str) {
logger(varName, str)
}
/**
* Throw an error with a consistent type/format.
* @param {String} value
*/
function raiseError (value, msg) {
let errMsg = `"${varName}" ${msg}`
if (value) {
errMsg = `${errMsg}`
}
if (example) {
errMsg = `${errMsg}. An example of a valid value would be: ${example}`
}
throw new EnvVarError(errMsg)
}
/**
* Returns an accessor wrapped by error handling and args passing logic
* @param {Function} accessor
*/
function generateAccessor (accessor) {
return function () {
let value = container[varName]
log(`will be read from the environment using "${accessor.name}" accessor`)
if (typeof value === 'undefined') {
if (typeof defValue === 'undefined' && isRequired) {
log('was not found in the environment, but is required to be set')
// Var is not set, nor is a default. Throw an error
raiseError(undefined, 'is a required variable, but it was not set')
} else if (typeof defValue !== 'undefined') {
log(`was not found in the environment, parsing default value "${defValue}" instead`)
value = defValue
} else {
log('was not found in the environment, but is not required. returning undefined')
// return undefined since variable is not required and
// there's no default value provided
return undefined
}
}
if (isRequired) {
log('verifying variable value is not an empty string')
// Need to verify that required variables aren't just whitespace
if (value.trim().length === 0) {
raiseError(undefined, 'is a required variable, but its value was empty')
}
}
if (isBase64) {
log('verifying variable is a valid base64 string')
if (!value.match(base64Regex)) {
raiseError(value, 'should be a valid base64 string if using convertFromBase64')
}
log('converting from base64 to utf8 string')
value = Buffer.from(value, 'base64').toString()
}
const args = [value].concat(Array.prototype.slice.call(arguments))
try {
log(`passing value "${value}" to "${accessor.name}" accessor`)
const result = accessor.apply(
accessor,
args
)
log(`parsed successfully, returning ${result}`)
return result
} catch (error) {
raiseError(value, error.message)
}
}
}
const accessors = {
/**
* Instructs env-var to first convert the value of the variable from base64
* when reading it using a function such as asString()
*/
convertFromBase64: function () {
log('marking for base64 conversion')
isBase64 = true
return accessors
},
/**
* Set a default value for the variable
* @param {String} value
*/
default: function (value) {
if (typeof value === 'number') {
defValue = value.toString()
} else if (Array.isArray(value) || (typeof value === 'object' && value !== null)) {
defValue = JSON.stringify(value)
} else if (typeof value !== 'string') {
throw new EnvVarError('values passed to default() must be of Number, String, Array, or Object type')
} else {
defValue = value
}
log(`setting default value to "${defValue}"`)
return accessors
},
/**
* Ensures a variable is set in the given environment container. Throws an
* EnvVarError if the variable is not set or a default is not provided
* @param {Boolean} required
*/
required: function (required) {
if (typeof required === 'undefined') {
log('marked as required')
// If no value is passed assume that developer means "true"
// This is to retain support legacy usage (and intuitive)
isRequired = true
} else {
log(`setting required flag to ${required}`)
isRequired = required
}
return accessors
},
/**
* Set an example value for this variable. If the variable value is not set
* or is set to an invalid value this example will be show in error output.
* @param {String} example
*/
example: function (ex) {
example = ex
return accessors
}
}
// Attach accessors, and extra accessors if provided.
Object.entries({
...builtInAccessors,
...extraAccessors
}).forEach(([name, accessor]) => {
accessors[name] = generateAccessor(accessor)
})
return accessors
}