UNPKG

lambda-live-debugger

Version:

Debug Lambda functions locally like it is running in the cloud

130 lines (119 loc) 4.88 kB
'use strict'; var node_os = require('node:os'); var node_process = require('node:process'); var promises = require('node:fs/promises'); var node_path = require('node:path'); var middlewareUserAgent = require('@aws-sdk/middleware-user-agent'); const getRuntimeUserAgentPair = () => { const runtimesToCheck = ["deno", "bun", "llrt"]; for (const runtime of runtimesToCheck) { if (node_process.versions[runtime]) { return [`md/${runtime}`, node_process.versions[runtime]]; } } return ["md/nodejs", node_process.versions.node]; }; const SEMVER_REGEX = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*)?$/; const getSanitizedTypeScriptVersion = (version = "") => { const match = version.match(SEMVER_REGEX); if (!match) { return undefined; } const [major, minor, patch, prerelease] = [match[1], match[2], match[3], match[4]]; return prerelease ? `${major}.${minor}.${patch}-${prerelease}` : `${major}.${minor}.${patch}`; }; const typescriptPackageJsonPath = node_path.join("node_modules", "typescript", "package.json"); const getTypeScriptPackageJsonPaths = (dirname) => { const cwdPath = node_path.join(process.cwd(), typescriptPackageJsonPath); if (!dirname) { return [cwdPath]; } const normalizedPath = node_path.normalize(dirname); const parts = normalizedPath.split(node_path.sep); const nodeModulesIndex = parts.indexOf("node_modules"); const parentDir = nodeModulesIndex !== -1 ? parts.slice(0, nodeModulesIndex).join(node_path.sep) : dirname; const parentDirPath = node_path.join(parentDir, typescriptPackageJsonPath); if (cwdPath === parentDirPath) { return [cwdPath]; } return [parentDirPath, cwdPath]; }; let tscVersion; const getTypeScriptUserAgentPair = async () => { if (tscVersion === null) { return undefined; } else if (typeof tscVersion === "string") { return ["md/tsc", tscVersion]; } const dirname = typeof __dirname !== "undefined" ? __dirname : undefined; for (const typescriptPackageJsonPath of getTypeScriptPackageJsonPaths(dirname)) { try { const packageJson = await promises.readFile(typescriptPackageJsonPath, "utf-8"); const { version } = JSON.parse(packageJson); const sanitizedVersion = getSanitizedTypeScriptVersion(version); if (typeof sanitizedVersion !== "string") { continue; } tscVersion = sanitizedVersion; return ["md/tsc", tscVersion]; } catch { } } tscVersion = null; return undefined; }; const crtAvailability = { isCrtAvailable: false, }; const isCrtAvailable = () => { if (crtAvailability.isCrtAvailable) { return ["md/crt-avail"]; } return null; }; const createDefaultUserAgentProvider = ({ serviceId, clientVersion }) => { const runtimeUserAgentPair = getRuntimeUserAgentPair(); return async (config) => { const sections = [ ["aws-sdk-js", clientVersion], ["ua", "2.1"], [`os/${node_os.platform()}`, node_os.release()], ["lang/js"], runtimeUserAgentPair, ]; const typescriptUserAgentPair = await getTypeScriptUserAgentPair(); if (typescriptUserAgentPair) { sections.push(typescriptUserAgentPair); } const crtAvailable = isCrtAvailable(); if (crtAvailable) { sections.push(crtAvailable); } if (serviceId) { sections.push([`api/${serviceId}`, clientVersion]); } if (node_process.env.AWS_EXECUTION_ENV) { sections.push([`exec-env/${node_process.env.AWS_EXECUTION_ENV}`]); } const appId = await config?.userAgentAppId?.(); const resolvedUserAgent = appId ? [...sections, [`app/${appId}`]] : [...sections]; return resolvedUserAgent; }; }; const defaultUserAgent = createDefaultUserAgentProvider; const UA_APP_ID_ENV_NAME = "AWS_SDK_UA_APP_ID"; const UA_APP_ID_INI_NAME = "sdk_ua_app_id"; const UA_APP_ID_INI_NAME_DEPRECATED = "sdk-ua-app-id"; const NODE_APP_ID_CONFIG_OPTIONS = { environmentVariableSelector: (env) => env[UA_APP_ID_ENV_NAME], configFileSelector: (profile) => profile[UA_APP_ID_INI_NAME] ?? profile[UA_APP_ID_INI_NAME_DEPRECATED], default: middlewareUserAgent.DEFAULT_UA_APP_ID, }; exports.NODE_APP_ID_CONFIG_OPTIONS = NODE_APP_ID_CONFIG_OPTIONS; exports.UA_APP_ID_ENV_NAME = UA_APP_ID_ENV_NAME; exports.UA_APP_ID_INI_NAME = UA_APP_ID_INI_NAME; exports.createDefaultUserAgentProvider = createDefaultUserAgentProvider; exports.crtAvailability = crtAvailability; exports.defaultUserAgent = defaultUserAgent;