@ncoderz/env-m8
Advanced tools
@@ -36,3 +36,3 @@ "use strict"; | ||
| "name": "@ncoderz/env-m8", | ||
| "version": "0.1.0", | ||
| "version": "0.1.1", | ||
| "author": "RA Sewell <richard.sewell@ncoderz.com>", | ||
@@ -370,3 +370,3 @@ "license": "BSD-2-Clause", | ||
| } | ||
| get upTimestamp() { | ||
| get upTime() { | ||
| return Date.now() - this.bootTimestamp; | ||
@@ -373,0 +373,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/index.ts","../../src/_generated/package_info.ts","../../src/Os.ts","../../src/Platform.ts","../../src/Version.ts","../../src/EnvM8Utils.ts","../../src/userAgent.ts","../../src/EnvM8.ts"],"sourcesContent":["// Type exports for public API\nexport { PACKAGE_INFO } from './_generated/package_info.ts';\nexport { Os, type OsType } from './Os.ts';\nexport { Platform, type PlatformType } from './Platform.ts';\nexport { type Version } from './Version.ts';\n\n/**\n *\n */\nexport { EnvM8Utils } from './EnvM8Utils.ts';\n\n/**\n *\n */\nexport { EnvM8 } from './EnvM8.ts';\n","// This file is automatically generated. DO NOT EDIT.\n\n/* eslint-disable */\n\nexport const PACKAGE_INFO = {\n \"name\": \"@ncoderz/env-m8\",\n \"version\": \"0.1.0\",\n \"author\": \"RA Sewell <richard.sewell@ncoderz.com>\",\n \"license\": \"BSD-2-Clause\",\n \"description\": \"Where am I? Information about the environment in which your TypeScript or JavaScript is executing.\"\n};\n","/**\n * Os\n */\nconst Os = {\n unknown: '',\n macos: 'macos',\n windows: 'windows',\n linux: 'linux',\n android: 'android',\n ios: 'ios',\n aix: 'aix',\n freebsd: 'freebsd',\n openbsd: 'openbsd',\n solaris: 'solaris',\n cygwin: 'cygwin',\n netbsd: 'netbsd',\n haiku: 'haiku',\n illumos: 'illumos',\n} as const;\n\nexport type OsType = (typeof Os)[keyof typeof Os];\n\nexport { Os };\n","/**\n * Application platform\n */\nconst Platform = {\n unknown: '',\n node: 'node',\n bun: 'bun',\n deno: 'deno',\n chrome: 'chrome',\n safari: 'safari',\n firefox: 'firefox',\n edge: 'edge',\n ie: 'ie',\n} as const;\n\nexport type PlatformType = (typeof Platform)[keyof typeof Platform];\n\nexport { Platform };\n","/**\n * A version object.\n *\n * It contains the full version string and its components.\n *\n */\nexport interface Version {\n full: string;\n major: string;\n minor: string;\n patch: string;\n prerelease: string;\n build: string;\n}\n\nconst EMPTY_VERSION: Version = {\n full: '',\n major: '',\n minor: '',\n patch: '',\n prerelease: '',\n build: '',\n};\n\nexport { EMPTY_VERSION };\n","import { EMPTY_VERSION, type Version } from './Version.ts';\n\nlet SEM_VER_REGEX: RegExp | undefined;\nlet SIMPLE_VER_REGEX: RegExp | undefined;\n\nclass EnvM8Utils {\n public static parseVersionString(version?: string): Version {\n if (!version) return EMPTY_VERSION;\n\n // Remove leading v\n if (version.startsWith('v')) {\n version = version.substring(1);\n }\n\n for (let i = 0; i < 2; i++) {\n let v: RegExpMatchArray | string[] | null;\n const semVer = i === 0;\n if (semVer) {\n // Lenient Semver 2.0 regex, lazy init and cached\n const regex = (SEM_VER_REGEX ??=\n /^([0-9a-zA-Z]+)\\.([0-9a-zA-Z]+)\\.([0-9a-zA-Z]+)(?:-([0-9a-zA-Z\\.-]+))?(?:\\+([0-9a-zA-Z\\.-]+))?$/);\n v = version.match(regex);\n } else {\n const regex = (SIMPLE_VER_REGEX ??= /[._\\-+]/);\n // Simple version, major.minor.patch.build where everything is optional\n v = ['', ...version.split(regex, 4)];\n }\n\n if (v) {\n return {\n full: version,\n major: v[1] ?? '',\n minor: v[2] ?? '',\n patch: v[3] ?? '',\n prerelease: semVer ? (v[4] ?? '') : '',\n build: (semVer ? v[5] : v[4]) ?? '',\n };\n }\n }\n return EMPTY_VERSION;\n }\n}\n\nexport { EnvM8Utils };\n","import { Os, type OsType } from './Os.ts';\nimport { Platform, type PlatformType } from './Platform.ts';\n\nexport interface UserAgentInfo {\n browser: PlatformType;\n browserVersion?: string;\n os: OsType;\n osVersion?: string;\n}\n\ninterface TokenizedUserAgent {\n keys: Set<string>;\n versions: {\n [key: string]: string;\n };\n}\n\nfunction parseUserAgent(): UserAgentInfo | undefined {\n if (typeof window === 'undefined' || !window.navigator || !window.navigator.userAgent)\n return undefined;\n\n const uai: UserAgentInfo = {\n browser: Platform.unknown,\n os: Os.unknown,\n };\n\n const userAgent = window.navigator.userAgent;\n const tua = tokenizeUserAgent(userAgent);\n\n // const containsIphoneIpadIpod = tua.keys.has('iphone') || tua.keys.has('ipad') || tua.keys.has('ipod');\n // const containsMobi = tua.keys.has('mobi');\n const containsFirefox = tua.keys.has('firefox');\n // const containsSeamonkey = tua.keys.has('seamonkey');\n const containsChrome = tua.keys.has('chrome');\n const containsChromium = tua.keys.has('chromium');\n const containsSafari = tua.keys.has('safari');\n // const containsOperaOPR = tua.keys.has('opera') || tua.keys.has('opr');\n // const containsTridentMSIE = tua.keys.has('trident') || tua.keys.has('msie');\n const containsMacintosh = tua.keys.has('macintosh');\n\n const isSafari = containsSafari && !containsChrome && !containsChromium;\n const isChrome = containsChrome;\n // const isChromium = containsChromium && !containsChrome;\n const isFirefox = containsFirefox;\n // const isSeamonkey = containsSeamonkey && !containsFirefox;\n // const isOpera = containsOperaOPR;\n // const isIE = containsTridentMSIE;\n // const isMobileOrTablet = containsMobi;\n // const isIOS = containsIphoneIpadIpod;\n const isMacOS = containsMacintosh;\n\n // Browser\n if (isSafari) {\n uai.browser = Platform.safari;\n uai.browserVersion = tua.versions.version;\n } else if (isChrome) {\n uai.browser = Platform.chrome;\n uai.browserVersion = tua.versions.chrome;\n } else if (isFirefox) {\n uai.browser = Platform.firefox;\n uai.browserVersion = tua.versions.firefox;\n }\n\n // OS\n if (isMacOS) {\n uai.os = Os.macos;\n uai.osVersion = tua.versions.x;\n }\n\n return uai;\n}\n\nfunction tokenizeUserAgent(userAgent: string): TokenizedUserAgent {\n const rawKeys = userAgent\n .toLowerCase()\n .split(new RegExp('[ /,;()]', 'g'))\n .reduce((acc, val) => {\n if (val) acc.push(val);\n return acc;\n }, [] as string[]);\n\n const tua: TokenizedUserAgent = {\n keys: new Set(),\n versions: {},\n };\n\n let prevRawKey = '';\n for (let i = 0, len = rawKeys.length; i < len; i++) {\n const rawKey = rawKeys[i];\n\n let isNumber = false;\n for (let i = 0; i <= 9; i++) {\n if (rawKey.startsWith(`${i}`)) {\n isNumber = true;\n break;\n }\n }\n if (isNumber) {\n tua.versions[prevRawKey] = rawKey.split('_').join('.');\n } else {\n tua.keys.add(rawKey);\n }\n prevRawKey = rawKey;\n }\n\n return tua;\n}\n\nexport { parseUserAgent };\n","\nimport { EnvM8Utils } from './EnvM8Utils.ts';\nimport { Os, type OsType } from './Os.ts';\nimport { Platform, type PlatformType } from './Platform.ts';\nimport { parseUserAgent, type UserAgentInfo } from './userAgent.ts';\nimport { EMPTY_VERSION, type Version } from './Version.ts';\n\nexport interface InitEnvOptions {\n app?: string;\n version?: string;\n}\n\ndeclare const process: {\n env: { [key: string]: string };\n version?: string;\n versions?: { [key: string]: string };\n};\n\ndeclare const Deno: {\n version?: {\n deno: string;\n v8: string;\n typescript: string;\n };\n build: {\n os: string;\n };\n env: {\n get(name: string): string | undefined;\n };\n osRelease(): string;\n};\n\nconst _bootTimestamp = Date.now();\nlet _initialized = false;\nlet _userAgentInfo!: UserAgentInfo | undefined;\nlet _platform!: PlatformType;\nlet _platformVersion!: Version;\nlet _os!: OsType;\nlet _osVersion!: Version;\nlet _isBrowser!: boolean;\nlet _isCI!: boolean;\nlet _NODE_ENV!: string;\n\nlet _app: string = '';\nlet _appVersion: Version = EMPTY_VERSION;\n\nfunction getPlatform(): PlatformType {\n if (typeof Deno !== 'undefined' && Deno.version != null) {\n return Platform.deno;\n } else if (_userAgentInfo) {\n return _userAgentInfo.browser;\n } else if (typeof process !== 'undefined') {\n if (process.versions !== undefined) {\n if (process.versions.bun) return Platform.bun;\n if (process.versions.deno) return Platform.deno;\n if (process.versions.node) return Platform.node;\n }\n }\n\n return Platform.unknown;\n}\n\nfunction getPlatformVersion(): Version {\n switch (_platform) {\n case Platform.bun:\n return EnvM8Utils.parseVersionString(process.versions?.bun);\n case Platform.deno:\n return EnvM8Utils.parseVersionString(Deno.version?.deno);\n case Platform.node:\n return EnvM8Utils.parseVersionString(process.version);\n default:\n if (_userAgentInfo) {\n return EnvM8Utils.parseVersionString(_userAgentInfo.browserVersion);\n }\n }\n\n return EMPTY_VERSION;\n}\n\nfunction getOs(): OsType {\n switch (_platform) {\n case Platform.bun:\n case Platform.deno:\n case Platform.node:\n if (typeof os !== 'undefined') {\n return getOsFromNode();\n } else if (Platform.deno) {\n return getOsFromDeno();\n }\n default:\n if (_userAgentInfo) {\n return _userAgentInfo.os;\n }\n }\n\n return Os.unknown;\n}\n\nfunction getOsFromNode(): OsType {\n const p: NodeJS.Platform = os.platform();\n if (p === 'darwin') return Os.macos;\n if (p === 'win32') return Os.windows;\n if (p === 'linux') return Os.linux;\n if (p === 'android') return Os.android;\n if (p === 'aix') return Os.aix;\n if (p === 'freebsd') return Os.freebsd;\n if (p === 'openbsd') return Os.openbsd;\n if (p === 'sunos') return Os.solaris;\n if (p === 'haiku') return Os.haiku;\n if (p === 'cygwin') return Os.cygwin;\n if (p === 'netbsd') return Os.netbsd;\n return Os.unknown;\n}\n\nfunction getOsFromDeno(): OsType {\n const p = Deno.build.os;\n if (p === 'darwin') return Os.macos;\n if (p === 'windows') return Os.windows;\n if (p === 'linux') return Os.linux;\n if (p === 'android') return Os.android;\n if (p === 'aix') return Os.aix;\n if (p === 'freebsd') return Os.freebsd;\n if (p === 'solaris') return Os.solaris;\n if (p === 'netbsd') return Os.netbsd;\n if (p === 'illumos') return Os.illumos;\n return Os.unknown;\n}\n\nfunction getOsVersion(): Version {\n switch (_platform) {\n case Platform.bun:\n case Platform.deno:\n case Platform.node:\n if (typeof os !== 'undefined') {\n return getOsVersionFromNode();\n } else if (Platform.deno) {\n return getOsVersionFromDeno();\n }\n default:\n if (_userAgentInfo) {\n return EnvM8Utils.parseVersionString(_userAgentInfo.osVersion);\n }\n }\n\n return EMPTY_VERSION;\n}\n\nfunction getOsVersionFromNode(): Version {\n return EnvM8Utils.parseVersionString(os.release());\n}\n\nfunction getOsVersionFromDeno(): Version {\n return EnvM8Utils.parseVersionString(Deno.osRelease());\n}\n\nfunction getIsBrowser(): boolean {\n return !!(\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof navigator !== 'undefined' &&\n navigator.userAgent\n );\n}\n\nfunction getSafeProcessEnvProperty(name: string): string | undefined {\n switch (_platform) {\n case Platform.deno:\n return Deno.env.get(name);\n default:\n return typeof process !== 'undefined' ? process.env[name] : undefined;\n }\n}\n\nfunction getIsCI(): boolean {\n const ci = getSafeProcessEnvProperty('CI');\n return ci != undefined && toBoolean(ci, true);\n}\n\nfunction getNodeEnv(): string {\n return getSafeProcessEnvProperty('NODE_ENV') ?? 'production';\n}\n\n/**\n * Convert a value to a boolean.\n *\n * By default, the return will be false unless the value is truthy (true, \"true\", \"1\").\n * Setting defaultVal to true will return true unless the value is falsy (false, \"false\", \"0\").\n *\n * String comparisons are case insensitive.\n *\n * @param val input value\n * @param defaultVal default value to return if val does not match a boolean or 'true' / 'false'\n * @returns val, converted to a boolean\n */\nfunction toBoolean(val: unknown | undefined, defaultVal?: boolean): boolean {\n if (defaultVal) {\n if (val === false) return false;\n if (val === '0') return false;\n if (typeof val === 'string' && val.toLowerCase() === 'false') return false;\n return true;\n } else {\n if (val === true) return true;\n if (val === '1') return true;\n if (typeof val === 'string' && val.toLowerCase() === 'true') return true;\n return false;\n }\n}\n\nclass EnvM8 {\n public bootTimestamp: number;\n public app: string;\n public appVersion: Version;\n public platform: PlatformType;\n public platformVersion: Version;\n public os: OsType;\n public osVersion: Version;\n public isBrowser: boolean;\n public isBackend: boolean;\n public isCI: boolean;\n public NODE_ENV: string;\n\n constructor() {\n if (!_initialized) {\n _userAgentInfo = parseUserAgent();\n // this.app = '';\n // this.appVersion = EMPTY_VERSION;\n _platform = getPlatform();\n _platformVersion = getPlatformVersion();\n _isBrowser = getIsBrowser();\n _isCI = getIsCI();\n _NODE_ENV = getNodeEnv();\n _os = getOs();\n _osVersion = getOsVersion();\n _initialized = true;\n }\n\n this.bootTimestamp = _bootTimestamp;\n this.app = _app;\n this.appVersion = _appVersion;\n this.platform = _platform;\n this.platformVersion = _platformVersion;\n this.isBrowser = _isBrowser;\n this.isBackend = !_isBrowser;\n this.isCI = _isCI;\n this.NODE_ENV = _NODE_ENV;\n this.os = _os;\n this.osVersion = _osVersion;\n }\n\n public setApp(app: string) {\n this.app = app;\n _app = app;\n }\n\n public setAppVersion(version: string) {\n this.appVersion = EnvM8Utils.parseVersionString(version);\n _appVersion = this.appVersion;\n }\n\n public get upTimestamp(): number {\n return Date.now() - this.bootTimestamp;\n }\n\n public getEnv(name: string): string | undefined {\n return getSafeProcessEnvProperty(name);\n }\n}\n\nexport { EnvM8 };\n"],"mappings":"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","names":["i"]} | ||
| {"version":3,"sources":["../../src/index.ts","../../src/_generated/package_info.ts","../../src/Os.ts","../../src/Platform.ts","../../src/Version.ts","../../src/EnvM8Utils.ts","../../src/userAgent.ts","../../src/EnvM8.ts"],"sourcesContent":["// Type exports for public API\nexport { PACKAGE_INFO } from './_generated/package_info.ts';\nexport { Os, type OsType } from './Os.ts';\nexport { Platform, type PlatformType } from './Platform.ts';\nexport { type Version } from './Version.ts';\n\n/**\n *\n */\nexport { EnvM8Utils } from './EnvM8Utils.ts';\n\n/**\n *\n */\nexport { EnvM8 } from './EnvM8.ts';\n","// This file is automatically generated. DO NOT EDIT.\n\n/* eslint-disable */\n\nexport const PACKAGE_INFO = {\n \"name\": \"@ncoderz/env-m8\",\n \"version\": \"0.1.1\",\n \"author\": \"RA Sewell <richard.sewell@ncoderz.com>\",\n \"license\": \"BSD-2-Clause\",\n \"description\": \"Where am I? Information about the environment in which your TypeScript or JavaScript is executing.\"\n};\n","/**\n * Os\n */\nconst Os = {\n unknown: '',\n macos: 'macos',\n windows: 'windows',\n linux: 'linux',\n android: 'android',\n ios: 'ios',\n aix: 'aix',\n freebsd: 'freebsd',\n openbsd: 'openbsd',\n solaris: 'solaris',\n cygwin: 'cygwin',\n netbsd: 'netbsd',\n haiku: 'haiku',\n illumos: 'illumos',\n} as const;\n\nexport type OsType = (typeof Os)[keyof typeof Os];\n\nexport { Os };\n","/**\n * Application platform\n */\nconst Platform = {\n unknown: '',\n node: 'node',\n bun: 'bun',\n deno: 'deno',\n chrome: 'chrome',\n safari: 'safari',\n firefox: 'firefox',\n edge: 'edge',\n ie: 'ie',\n} as const;\n\nexport type PlatformType = (typeof Platform)[keyof typeof Platform];\n\nexport { Platform };\n","/**\n * A version object.\n *\n * It contains the full version string and its components.\n *\n */\nexport interface Version {\n full: string;\n major: string;\n minor: string;\n patch: string;\n prerelease: string;\n build: string;\n}\n\nconst EMPTY_VERSION: Version = {\n full: '',\n major: '',\n minor: '',\n patch: '',\n prerelease: '',\n build: '',\n};\n\nexport { EMPTY_VERSION };\n","import { EMPTY_VERSION, type Version } from './Version.ts';\n\nlet SEM_VER_REGEX: RegExp | undefined;\nlet SIMPLE_VER_REGEX: RegExp | undefined;\n\nclass EnvM8Utils {\n public static parseVersionString(version?: string): Version {\n if (!version) return EMPTY_VERSION;\n\n // Remove leading v\n if (version.startsWith('v')) {\n version = version.substring(1);\n }\n\n for (let i = 0; i < 2; i++) {\n let v: RegExpMatchArray | string[] | null;\n const semVer = i === 0;\n if (semVer) {\n // Lenient Semver 2.0 regex, lazy init and cached\n const regex = (SEM_VER_REGEX ??=\n /^([0-9a-zA-Z]+)\\.([0-9a-zA-Z]+)\\.([0-9a-zA-Z]+)(?:-([0-9a-zA-Z\\.-]+))?(?:\\+([0-9a-zA-Z\\.-]+))?$/);\n v = version.match(regex);\n } else {\n const regex = (SIMPLE_VER_REGEX ??= /[._\\-+]/);\n // Simple version, major.minor.patch.build where everything is optional\n v = ['', ...version.split(regex, 4)];\n }\n\n if (v) {\n return {\n full: version,\n major: v[1] ?? '',\n minor: v[2] ?? '',\n patch: v[3] ?? '',\n prerelease: semVer ? (v[4] ?? '') : '',\n build: (semVer ? v[5] : v[4]) ?? '',\n };\n }\n }\n return EMPTY_VERSION;\n }\n}\n\nexport { EnvM8Utils };\n","import { Os, type OsType } from './Os.ts';\nimport { Platform, type PlatformType } from './Platform.ts';\n\nexport interface UserAgentInfo {\n browser: PlatformType;\n browserVersion?: string;\n os: OsType;\n osVersion?: string;\n}\n\ninterface TokenizedUserAgent {\n keys: Set<string>;\n versions: {\n [key: string]: string;\n };\n}\n\nfunction parseUserAgent(): UserAgentInfo | undefined {\n if (typeof window === 'undefined' || !window.navigator || !window.navigator.userAgent)\n return undefined;\n\n const uai: UserAgentInfo = {\n browser: Platform.unknown,\n os: Os.unknown,\n };\n\n const userAgent = window.navigator.userAgent;\n const tua = tokenizeUserAgent(userAgent);\n\n // const containsIphoneIpadIpod = tua.keys.has('iphone') || tua.keys.has('ipad') || tua.keys.has('ipod');\n // const containsMobi = tua.keys.has('mobi');\n const containsFirefox = tua.keys.has('firefox');\n // const containsSeamonkey = tua.keys.has('seamonkey');\n const containsChrome = tua.keys.has('chrome');\n const containsChromium = tua.keys.has('chromium');\n const containsSafari = tua.keys.has('safari');\n // const containsOperaOPR = tua.keys.has('opera') || tua.keys.has('opr');\n // const containsTridentMSIE = tua.keys.has('trident') || tua.keys.has('msie');\n const containsMacintosh = tua.keys.has('macintosh');\n\n const isSafari = containsSafari && !containsChrome && !containsChromium;\n const isChrome = containsChrome;\n // const isChromium = containsChromium && !containsChrome;\n const isFirefox = containsFirefox;\n // const isSeamonkey = containsSeamonkey && !containsFirefox;\n // const isOpera = containsOperaOPR;\n // const isIE = containsTridentMSIE;\n // const isMobileOrTablet = containsMobi;\n // const isIOS = containsIphoneIpadIpod;\n const isMacOS = containsMacintosh;\n\n // Browser\n if (isSafari) {\n uai.browser = Platform.safari;\n uai.browserVersion = tua.versions.version;\n } else if (isChrome) {\n uai.browser = Platform.chrome;\n uai.browserVersion = tua.versions.chrome;\n } else if (isFirefox) {\n uai.browser = Platform.firefox;\n uai.browserVersion = tua.versions.firefox;\n }\n\n // OS\n if (isMacOS) {\n uai.os = Os.macos;\n uai.osVersion = tua.versions.x;\n }\n\n return uai;\n}\n\nfunction tokenizeUserAgent(userAgent: string): TokenizedUserAgent {\n const rawKeys = userAgent\n .toLowerCase()\n .split(new RegExp('[ /,;()]', 'g'))\n .reduce((acc, val) => {\n if (val) acc.push(val);\n return acc;\n }, [] as string[]);\n\n const tua: TokenizedUserAgent = {\n keys: new Set(),\n versions: {},\n };\n\n let prevRawKey = '';\n for (let i = 0, len = rawKeys.length; i < len; i++) {\n const rawKey = rawKeys[i];\n\n let isNumber = false;\n for (let i = 0; i <= 9; i++) {\n if (rawKey.startsWith(`${i}`)) {\n isNumber = true;\n break;\n }\n }\n if (isNumber) {\n tua.versions[prevRawKey] = rawKey.split('_').join('.');\n } else {\n tua.keys.add(rawKey);\n }\n prevRawKey = rawKey;\n }\n\n return tua;\n}\n\nexport { parseUserAgent };\n","\nimport { EnvM8Utils } from './EnvM8Utils.ts';\nimport { Os, type OsType } from './Os.ts';\nimport { Platform, type PlatformType } from './Platform.ts';\nimport { parseUserAgent, type UserAgentInfo } from './userAgent.ts';\nimport { EMPTY_VERSION, type Version } from './Version.ts';\n\nexport interface InitEnvOptions {\n app?: string;\n version?: string;\n}\n\ndeclare const process: {\n env: { [key: string]: string };\n version?: string;\n versions?: { [key: string]: string };\n};\n\ndeclare const Deno: {\n version?: {\n deno: string;\n v8: string;\n typescript: string;\n };\n build: {\n os: string;\n };\n env: {\n get(name: string): string | undefined;\n };\n osRelease(): string;\n};\n\nconst _bootTimestamp = Date.now();\nlet _initialized = false;\nlet _userAgentInfo!: UserAgentInfo | undefined;\nlet _platform!: PlatformType;\nlet _platformVersion!: Version;\nlet _os!: OsType;\nlet _osVersion!: Version;\nlet _isBrowser!: boolean;\nlet _isCI!: boolean;\nlet _NODE_ENV!: string;\n\nlet _app: string = '';\nlet _appVersion: Version = EMPTY_VERSION;\n\nfunction getPlatform(): PlatformType {\n if (typeof Deno !== 'undefined' && Deno.version != null) {\n return Platform.deno;\n } else if (_userAgentInfo) {\n return _userAgentInfo.browser;\n } else if (typeof process !== 'undefined') {\n if (process.versions !== undefined) {\n if (process.versions.bun) return Platform.bun;\n if (process.versions.deno) return Platform.deno;\n if (process.versions.node) return Platform.node;\n }\n }\n\n return Platform.unknown;\n}\n\nfunction getPlatformVersion(): Version {\n switch (_platform) {\n case Platform.bun:\n return EnvM8Utils.parseVersionString(process.versions?.bun);\n case Platform.deno:\n return EnvM8Utils.parseVersionString(Deno.version?.deno);\n case Platform.node:\n return EnvM8Utils.parseVersionString(process.version);\n default:\n if (_userAgentInfo) {\n return EnvM8Utils.parseVersionString(_userAgentInfo.browserVersion);\n }\n }\n\n return EMPTY_VERSION;\n}\n\nfunction getOs(): OsType {\n switch (_platform) {\n case Platform.bun:\n case Platform.deno:\n case Platform.node:\n if (typeof os !== 'undefined') {\n return getOsFromNode();\n } else if (Platform.deno) {\n return getOsFromDeno();\n }\n default:\n if (_userAgentInfo) {\n return _userAgentInfo.os;\n }\n }\n\n return Os.unknown;\n}\n\nfunction getOsFromNode(): OsType {\n const p: NodeJS.Platform = os.platform();\n if (p === 'darwin') return Os.macos;\n if (p === 'win32') return Os.windows;\n if (p === 'linux') return Os.linux;\n if (p === 'android') return Os.android;\n if (p === 'aix') return Os.aix;\n if (p === 'freebsd') return Os.freebsd;\n if (p === 'openbsd') return Os.openbsd;\n if (p === 'sunos') return Os.solaris;\n if (p === 'haiku') return Os.haiku;\n if (p === 'cygwin') return Os.cygwin;\n if (p === 'netbsd') return Os.netbsd;\n return Os.unknown;\n}\n\nfunction getOsFromDeno(): OsType {\n const p = Deno.build.os;\n if (p === 'darwin') return Os.macos;\n if (p === 'windows') return Os.windows;\n if (p === 'linux') return Os.linux;\n if (p === 'android') return Os.android;\n if (p === 'aix') return Os.aix;\n if (p === 'freebsd') return Os.freebsd;\n if (p === 'solaris') return Os.solaris;\n if (p === 'netbsd') return Os.netbsd;\n if (p === 'illumos') return Os.illumos;\n return Os.unknown;\n}\n\nfunction getOsVersion(): Version {\n switch (_platform) {\n case Platform.bun:\n case Platform.deno:\n case Platform.node:\n if (typeof os !== 'undefined') {\n return getOsVersionFromNode();\n } else if (Platform.deno) {\n return getOsVersionFromDeno();\n }\n default:\n if (_userAgentInfo) {\n return EnvM8Utils.parseVersionString(_userAgentInfo.osVersion);\n }\n }\n\n return EMPTY_VERSION;\n}\n\nfunction getOsVersionFromNode(): Version {\n return EnvM8Utils.parseVersionString(os.release());\n}\n\nfunction getOsVersionFromDeno(): Version {\n return EnvM8Utils.parseVersionString(Deno.osRelease());\n}\n\nfunction getIsBrowser(): boolean {\n return !!(\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof navigator !== 'undefined' &&\n navigator.userAgent\n );\n}\n\nfunction getSafeProcessEnvProperty(name: string): string | undefined {\n switch (_platform) {\n case Platform.deno:\n return Deno.env.get(name);\n default:\n return typeof process !== 'undefined' ? process.env[name] : undefined;\n }\n}\n\nfunction getIsCI(): boolean {\n const ci = getSafeProcessEnvProperty('CI');\n return ci != undefined && toBoolean(ci, true);\n}\n\nfunction getNodeEnv(): string {\n return getSafeProcessEnvProperty('NODE_ENV') ?? 'production';\n}\n\n/**\n * Convert a value to a boolean.\n *\n * By default, the return will be false unless the value is truthy (true, \"true\", \"1\").\n * Setting defaultVal to true will return true unless the value is falsy (false, \"false\", \"0\").\n *\n * String comparisons are case insensitive.\n *\n * @param val input value\n * @param defaultVal default value to return if val does not match a boolean or 'true' / 'false'\n * @returns val, converted to a boolean\n */\nfunction toBoolean(val: unknown | undefined, defaultVal?: boolean): boolean {\n if (defaultVal) {\n if (val === false) return false;\n if (val === '0') return false;\n if (typeof val === 'string' && val.toLowerCase() === 'false') return false;\n return true;\n } else {\n if (val === true) return true;\n if (val === '1') return true;\n if (typeof val === 'string' && val.toLowerCase() === 'true') return true;\n return false;\n }\n}\n\nclass EnvM8 {\n public bootTimestamp: number;\n public app: string;\n public appVersion: Version;\n public platform: PlatformType;\n public platformVersion: Version;\n public os: OsType;\n public osVersion: Version;\n public isBrowser: boolean;\n public isBackend: boolean;\n public isCI: boolean;\n public NODE_ENV: string;\n\n constructor() {\n if (!_initialized) {\n _userAgentInfo = parseUserAgent();\n // this.app = '';\n // this.appVersion = EMPTY_VERSION;\n _platform = getPlatform();\n _platformVersion = getPlatformVersion();\n _isBrowser = getIsBrowser();\n _isCI = getIsCI();\n _NODE_ENV = getNodeEnv();\n _os = getOs();\n _osVersion = getOsVersion();\n _initialized = true;\n }\n\n this.bootTimestamp = _bootTimestamp;\n this.app = _app;\n this.appVersion = _appVersion;\n this.platform = _platform;\n this.platformVersion = _platformVersion;\n this.isBrowser = _isBrowser;\n this.isBackend = !_isBrowser;\n this.isCI = _isCI;\n this.NODE_ENV = _NODE_ENV;\n this.os = _os;\n this.osVersion = _osVersion;\n }\n\n public setApp(app: string) {\n this.app = app;\n _app = app;\n }\n\n public setAppVersion(version: string) {\n this.appVersion = EnvM8Utils.parseVersionString(version);\n _appVersion = this.appVersion;\n }\n\n public get upTime(): number {\n return Date.now() - this.bootTimestamp;\n }\n\n public getEnv(name: string): string | undefined {\n return getSafeProcessEnvProperty(name);\n }\n}\n\nexport { EnvM8 };\n"],"mappings":"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","names":["i"]} |
+2
-2
@@ -46,3 +46,3 @@ "use strict"; | ||
| "name": "@ncoderz/env-m8", | ||
| "version": "0.1.0", | ||
| "version": "0.1.1", | ||
| "author": "RA Sewell <richard.sewell@ncoderz.com>", | ||
@@ -380,3 +380,3 @@ "license": "BSD-2-Clause", | ||
| } | ||
| get upTimestamp() { | ||
| get upTime() { | ||
| return Date.now() - this.bootTimestamp; | ||
@@ -383,0 +383,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/index.ts","../src/_generated/package_info.ts","../src/Os.ts","../src/Platform.ts","../src/Version.ts","../src/EnvM8Utils.ts","../src/EnvM8.ts","../src/userAgent.ts"],"sourcesContent":["// Type exports for public API\nexport { PACKAGE_INFO } from './_generated/package_info.ts';\nexport { Os, type OsType } from './Os.ts';\nexport { Platform, type PlatformType } from './Platform.ts';\nexport { type Version } from './Version.ts';\n\n/**\n *\n */\nexport { EnvM8Utils } from './EnvM8Utils.ts';\n\n/**\n *\n */\nexport { EnvM8 } from './EnvM8.ts';\n","// This file is automatically generated. DO NOT EDIT.\n\n/* eslint-disable */\n\nexport const PACKAGE_INFO = {\n \"name\": \"@ncoderz/env-m8\",\n \"version\": \"0.1.0\",\n \"author\": \"RA Sewell <richard.sewell@ncoderz.com>\",\n \"license\": \"BSD-2-Clause\",\n \"description\": \"Where am I? Information about the environment in which your TypeScript or JavaScript is executing.\"\n};\n","/**\n * Os\n */\nconst Os = {\n unknown: '',\n macos: 'macos',\n windows: 'windows',\n linux: 'linux',\n android: 'android',\n ios: 'ios',\n aix: 'aix',\n freebsd: 'freebsd',\n openbsd: 'openbsd',\n solaris: 'solaris',\n cygwin: 'cygwin',\n netbsd: 'netbsd',\n haiku: 'haiku',\n illumos: 'illumos',\n} as const;\n\nexport type OsType = (typeof Os)[keyof typeof Os];\n\nexport { Os };\n","/**\n * Application platform\n */\nconst Platform = {\n unknown: '',\n node: 'node',\n bun: 'bun',\n deno: 'deno',\n chrome: 'chrome',\n safari: 'safari',\n firefox: 'firefox',\n edge: 'edge',\n ie: 'ie',\n} as const;\n\nexport type PlatformType = (typeof Platform)[keyof typeof Platform];\n\nexport { Platform };\n","/**\n * A version object.\n *\n * It contains the full version string and its components.\n *\n */\nexport interface Version {\n full: string;\n major: string;\n minor: string;\n patch: string;\n prerelease: string;\n build: string;\n}\n\nconst EMPTY_VERSION: Version = {\n full: '',\n major: '',\n minor: '',\n patch: '',\n prerelease: '',\n build: '',\n};\n\nexport { EMPTY_VERSION };\n","import { EMPTY_VERSION, type Version } from './Version.ts';\n\nlet SEM_VER_REGEX: RegExp | undefined;\nlet SIMPLE_VER_REGEX: RegExp | undefined;\n\nclass EnvM8Utils {\n public static parseVersionString(version?: string): Version {\n if (!version) return EMPTY_VERSION;\n\n // Remove leading v\n if (version.startsWith('v')) {\n version = version.substring(1);\n }\n\n for (let i = 0; i < 2; i++) {\n let v: RegExpMatchArray | string[] | null;\n const semVer = i === 0;\n if (semVer) {\n // Lenient Semver 2.0 regex, lazy init and cached\n const regex = (SEM_VER_REGEX ??=\n /^([0-9a-zA-Z]+)\\.([0-9a-zA-Z]+)\\.([0-9a-zA-Z]+)(?:-([0-9a-zA-Z\\.-]+))?(?:\\+([0-9a-zA-Z\\.-]+))?$/);\n v = version.match(regex);\n } else {\n const regex = (SIMPLE_VER_REGEX ??= /[._\\-+]/);\n // Simple version, major.minor.patch.build where everything is optional\n v = ['', ...version.split(regex, 4)];\n }\n\n if (v) {\n return {\n full: version,\n major: v[1] ?? '',\n minor: v[2] ?? '',\n patch: v[3] ?? '',\n prerelease: semVer ? (v[4] ?? '') : '',\n build: (semVer ? v[5] : v[4]) ?? '',\n };\n }\n }\n return EMPTY_VERSION;\n }\n}\n\nexport { EnvM8Utils };\n","/* NODEJS:START */\nimport os from 'node:os';\n\n/* NODEJS:END */\nimport { EnvM8Utils } from './EnvM8Utils.ts';\nimport { Os, type OsType } from './Os.ts';\nimport { Platform, type PlatformType } from './Platform.ts';\nimport { parseUserAgent, type UserAgentInfo } from './userAgent.ts';\nimport { EMPTY_VERSION, type Version } from './Version.ts';\n\nexport interface InitEnvOptions {\n app?: string;\n version?: string;\n}\n\ndeclare const process: {\n env: { [key: string]: string };\n version?: string;\n versions?: { [key: string]: string };\n};\n\ndeclare const Deno: {\n version?: {\n deno: string;\n v8: string;\n typescript: string;\n };\n build: {\n os: string;\n };\n env: {\n get(name: string): string | undefined;\n };\n osRelease(): string;\n};\n\nconst _bootTimestamp = Date.now();\nlet _initialized = false;\nlet _userAgentInfo!: UserAgentInfo | undefined;\nlet _platform!: PlatformType;\nlet _platformVersion!: Version;\nlet _os!: OsType;\nlet _osVersion!: Version;\nlet _isBrowser!: boolean;\nlet _isCI!: boolean;\nlet _NODE_ENV!: string;\n\nlet _app: string = '';\nlet _appVersion: Version = EMPTY_VERSION;\n\nfunction getPlatform(): PlatformType {\n if (typeof Deno !== 'undefined' && Deno.version != null) {\n return Platform.deno;\n } else if (_userAgentInfo) {\n return _userAgentInfo.browser;\n } else if (typeof process !== 'undefined') {\n if (process.versions !== undefined) {\n if (process.versions.bun) return Platform.bun;\n if (process.versions.deno) return Platform.deno;\n if (process.versions.node) return Platform.node;\n }\n }\n\n return Platform.unknown;\n}\n\nfunction getPlatformVersion(): Version {\n switch (_platform) {\n case Platform.bun:\n return EnvM8Utils.parseVersionString(process.versions?.bun);\n case Platform.deno:\n return EnvM8Utils.parseVersionString(Deno.version?.deno);\n case Platform.node:\n return EnvM8Utils.parseVersionString(process.version);\n default:\n if (_userAgentInfo) {\n return EnvM8Utils.parseVersionString(_userAgentInfo.browserVersion);\n }\n }\n\n return EMPTY_VERSION;\n}\n\nfunction getOs(): OsType {\n switch (_platform) {\n case Platform.bun:\n case Platform.deno:\n case Platform.node:\n if (typeof os !== 'undefined') {\n return getOsFromNode();\n } else if (Platform.deno) {\n return getOsFromDeno();\n }\n default:\n if (_userAgentInfo) {\n return _userAgentInfo.os;\n }\n }\n\n return Os.unknown;\n}\n\nfunction getOsFromNode(): OsType {\n const p: NodeJS.Platform = os.platform();\n if (p === 'darwin') return Os.macos;\n if (p === 'win32') return Os.windows;\n if (p === 'linux') return Os.linux;\n if (p === 'android') return Os.android;\n if (p === 'aix') return Os.aix;\n if (p === 'freebsd') return Os.freebsd;\n if (p === 'openbsd') return Os.openbsd;\n if (p === 'sunos') return Os.solaris;\n if (p === 'haiku') return Os.haiku;\n if (p === 'cygwin') return Os.cygwin;\n if (p === 'netbsd') return Os.netbsd;\n return Os.unknown;\n}\n\nfunction getOsFromDeno(): OsType {\n const p = Deno.build.os;\n if (p === 'darwin') return Os.macos;\n if (p === 'windows') return Os.windows;\n if (p === 'linux') return Os.linux;\n if (p === 'android') return Os.android;\n if (p === 'aix') return Os.aix;\n if (p === 'freebsd') return Os.freebsd;\n if (p === 'solaris') return Os.solaris;\n if (p === 'netbsd') return Os.netbsd;\n if (p === 'illumos') return Os.illumos;\n return Os.unknown;\n}\n\nfunction getOsVersion(): Version {\n switch (_platform) {\n case Platform.bun:\n case Platform.deno:\n case Platform.node:\n if (typeof os !== 'undefined') {\n return getOsVersionFromNode();\n } else if (Platform.deno) {\n return getOsVersionFromDeno();\n }\n default:\n if (_userAgentInfo) {\n return EnvM8Utils.parseVersionString(_userAgentInfo.osVersion);\n }\n }\n\n return EMPTY_VERSION;\n}\n\nfunction getOsVersionFromNode(): Version {\n return EnvM8Utils.parseVersionString(os.release());\n}\n\nfunction getOsVersionFromDeno(): Version {\n return EnvM8Utils.parseVersionString(Deno.osRelease());\n}\n\nfunction getIsBrowser(): boolean {\n return !!(\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof navigator !== 'undefined' &&\n navigator.userAgent\n );\n}\n\nfunction getSafeProcessEnvProperty(name: string): string | undefined {\n switch (_platform) {\n case Platform.deno:\n return Deno.env.get(name);\n default:\n return typeof process !== 'undefined' ? process.env[name] : undefined;\n }\n}\n\nfunction getIsCI(): boolean {\n const ci = getSafeProcessEnvProperty('CI');\n return ci != undefined && toBoolean(ci, true);\n}\n\nfunction getNodeEnv(): string {\n return getSafeProcessEnvProperty('NODE_ENV') ?? 'production';\n}\n\n/**\n * Convert a value to a boolean.\n *\n * By default, the return will be false unless the value is truthy (true, \"true\", \"1\").\n * Setting defaultVal to true will return true unless the value is falsy (false, \"false\", \"0\").\n *\n * String comparisons are case insensitive.\n *\n * @param val input value\n * @param defaultVal default value to return if val does not match a boolean or 'true' / 'false'\n * @returns val, converted to a boolean\n */\nfunction toBoolean(val: unknown | undefined, defaultVal?: boolean): boolean {\n if (defaultVal) {\n if (val === false) return false;\n if (val === '0') return false;\n if (typeof val === 'string' && val.toLowerCase() === 'false') return false;\n return true;\n } else {\n if (val === true) return true;\n if (val === '1') return true;\n if (typeof val === 'string' && val.toLowerCase() === 'true') return true;\n return false;\n }\n}\n\nclass EnvM8 {\n public bootTimestamp: number;\n public app: string;\n public appVersion: Version;\n public platform: PlatformType;\n public platformVersion: Version;\n public os: OsType;\n public osVersion: Version;\n public isBrowser: boolean;\n public isBackend: boolean;\n public isCI: boolean;\n public NODE_ENV: string;\n\n constructor() {\n if (!_initialized) {\n _userAgentInfo = parseUserAgent();\n // this.app = '';\n // this.appVersion = EMPTY_VERSION;\n _platform = getPlatform();\n _platformVersion = getPlatformVersion();\n _isBrowser = getIsBrowser();\n _isCI = getIsCI();\n _NODE_ENV = getNodeEnv();\n _os = getOs();\n _osVersion = getOsVersion();\n _initialized = true;\n }\n\n this.bootTimestamp = _bootTimestamp;\n this.app = _app;\n this.appVersion = _appVersion;\n this.platform = _platform;\n this.platformVersion = _platformVersion;\n this.isBrowser = _isBrowser;\n this.isBackend = !_isBrowser;\n this.isCI = _isCI;\n this.NODE_ENV = _NODE_ENV;\n this.os = _os;\n this.osVersion = _osVersion;\n }\n\n public setApp(app: string) {\n this.app = app;\n _app = app;\n }\n\n public setAppVersion(version: string) {\n this.appVersion = EnvM8Utils.parseVersionString(version);\n _appVersion = this.appVersion;\n }\n\n public get upTimestamp(): number {\n return Date.now() - this.bootTimestamp;\n }\n\n public getEnv(name: string): string | undefined {\n return getSafeProcessEnvProperty(name);\n }\n}\n\nexport { EnvM8 };\n","import { Os, type OsType } from './Os.ts';\nimport { Platform, type PlatformType } from './Platform.ts';\n\nexport interface UserAgentInfo {\n browser: PlatformType;\n browserVersion?: string;\n os: OsType;\n osVersion?: string;\n}\n\ninterface TokenizedUserAgent {\n keys: Set<string>;\n versions: {\n [key: string]: string;\n };\n}\n\nfunction parseUserAgent(): UserAgentInfo | undefined {\n if (typeof window === 'undefined' || !window.navigator || !window.navigator.userAgent)\n return undefined;\n\n const uai: UserAgentInfo = {\n browser: Platform.unknown,\n os: Os.unknown,\n };\n\n const userAgent = window.navigator.userAgent;\n const tua = tokenizeUserAgent(userAgent);\n\n // const containsIphoneIpadIpod = tua.keys.has('iphone') || tua.keys.has('ipad') || tua.keys.has('ipod');\n // const containsMobi = tua.keys.has('mobi');\n const containsFirefox = tua.keys.has('firefox');\n // const containsSeamonkey = tua.keys.has('seamonkey');\n const containsChrome = tua.keys.has('chrome');\n const containsChromium = tua.keys.has('chromium');\n const containsSafari = tua.keys.has('safari');\n // const containsOperaOPR = tua.keys.has('opera') || tua.keys.has('opr');\n // const containsTridentMSIE = tua.keys.has('trident') || tua.keys.has('msie');\n const containsMacintosh = tua.keys.has('macintosh');\n\n const isSafari = containsSafari && !containsChrome && !containsChromium;\n const isChrome = containsChrome;\n // const isChromium = containsChromium && !containsChrome;\n const isFirefox = containsFirefox;\n // const isSeamonkey = containsSeamonkey && !containsFirefox;\n // const isOpera = containsOperaOPR;\n // const isIE = containsTridentMSIE;\n // const isMobileOrTablet = containsMobi;\n // const isIOS = containsIphoneIpadIpod;\n const isMacOS = containsMacintosh;\n\n // Browser\n if (isSafari) {\n uai.browser = Platform.safari;\n uai.browserVersion = tua.versions.version;\n } else if (isChrome) {\n uai.browser = Platform.chrome;\n uai.browserVersion = tua.versions.chrome;\n } else if (isFirefox) {\n uai.browser = Platform.firefox;\n uai.browserVersion = tua.versions.firefox;\n }\n\n // OS\n if (isMacOS) {\n uai.os = Os.macos;\n uai.osVersion = tua.versions.x;\n }\n\n return uai;\n}\n\nfunction tokenizeUserAgent(userAgent: string): TokenizedUserAgent {\n const rawKeys = userAgent\n .toLowerCase()\n .split(new RegExp('[ /,;()]', 'g'))\n .reduce((acc, val) => {\n if (val) acc.push(val);\n return acc;\n }, [] as string[]);\n\n const tua: TokenizedUserAgent = {\n keys: new Set(),\n versions: {},\n };\n\n let prevRawKey = '';\n for (let i = 0, len = rawKeys.length; i < len; i++) {\n const rawKey = rawKeys[i];\n\n let isNumber = false;\n for (let i = 0; i <= 9; i++) {\n if (rawKey.startsWith(`${i}`)) {\n isNumber = true;\n break;\n }\n }\n if (isNumber) {\n tua.versions[prevRawKey] = rawKey.split('_').join('.');\n } else {\n tua.keys.add(rawKey);\n }\n prevRawKey = rawKey;\n }\n\n return tua;\n}\n\nexport { parseUserAgent };\n"],"mappings":"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","names":["i","os"]} | ||
| {"version":3,"sources":["../src/index.ts","../src/_generated/package_info.ts","../src/Os.ts","../src/Platform.ts","../src/Version.ts","../src/EnvM8Utils.ts","../src/EnvM8.ts","../src/userAgent.ts"],"sourcesContent":["// Type exports for public API\nexport { PACKAGE_INFO } from './_generated/package_info.ts';\nexport { Os, type OsType } from './Os.ts';\nexport { Platform, type PlatformType } from './Platform.ts';\nexport { type Version } from './Version.ts';\n\n/**\n *\n */\nexport { EnvM8Utils } from './EnvM8Utils.ts';\n\n/**\n *\n */\nexport { EnvM8 } from './EnvM8.ts';\n","// This file is automatically generated. DO NOT EDIT.\n\n/* eslint-disable */\n\nexport const PACKAGE_INFO = {\n \"name\": \"@ncoderz/env-m8\",\n \"version\": \"0.1.1\",\n \"author\": \"RA Sewell <richard.sewell@ncoderz.com>\",\n \"license\": \"BSD-2-Clause\",\n \"description\": \"Where am I? Information about the environment in which your TypeScript or JavaScript is executing.\"\n};\n","/**\n * Os\n */\nconst Os = {\n unknown: '',\n macos: 'macos',\n windows: 'windows',\n linux: 'linux',\n android: 'android',\n ios: 'ios',\n aix: 'aix',\n freebsd: 'freebsd',\n openbsd: 'openbsd',\n solaris: 'solaris',\n cygwin: 'cygwin',\n netbsd: 'netbsd',\n haiku: 'haiku',\n illumos: 'illumos',\n} as const;\n\nexport type OsType = (typeof Os)[keyof typeof Os];\n\nexport { Os };\n","/**\n * Application platform\n */\nconst Platform = {\n unknown: '',\n node: 'node',\n bun: 'bun',\n deno: 'deno',\n chrome: 'chrome',\n safari: 'safari',\n firefox: 'firefox',\n edge: 'edge',\n ie: 'ie',\n} as const;\n\nexport type PlatformType = (typeof Platform)[keyof typeof Platform];\n\nexport { Platform };\n","/**\n * A version object.\n *\n * It contains the full version string and its components.\n *\n */\nexport interface Version {\n full: string;\n major: string;\n minor: string;\n patch: string;\n prerelease: string;\n build: string;\n}\n\nconst EMPTY_VERSION: Version = {\n full: '',\n major: '',\n minor: '',\n patch: '',\n prerelease: '',\n build: '',\n};\n\nexport { EMPTY_VERSION };\n","import { EMPTY_VERSION, type Version } from './Version.ts';\n\nlet SEM_VER_REGEX: RegExp | undefined;\nlet SIMPLE_VER_REGEX: RegExp | undefined;\n\nclass EnvM8Utils {\n public static parseVersionString(version?: string): Version {\n if (!version) return EMPTY_VERSION;\n\n // Remove leading v\n if (version.startsWith('v')) {\n version = version.substring(1);\n }\n\n for (let i = 0; i < 2; i++) {\n let v: RegExpMatchArray | string[] | null;\n const semVer = i === 0;\n if (semVer) {\n // Lenient Semver 2.0 regex, lazy init and cached\n const regex = (SEM_VER_REGEX ??=\n /^([0-9a-zA-Z]+)\\.([0-9a-zA-Z]+)\\.([0-9a-zA-Z]+)(?:-([0-9a-zA-Z\\.-]+))?(?:\\+([0-9a-zA-Z\\.-]+))?$/);\n v = version.match(regex);\n } else {\n const regex = (SIMPLE_VER_REGEX ??= /[._\\-+]/);\n // Simple version, major.minor.patch.build where everything is optional\n v = ['', ...version.split(regex, 4)];\n }\n\n if (v) {\n return {\n full: version,\n major: v[1] ?? '',\n minor: v[2] ?? '',\n patch: v[3] ?? '',\n prerelease: semVer ? (v[4] ?? '') : '',\n build: (semVer ? v[5] : v[4]) ?? '',\n };\n }\n }\n return EMPTY_VERSION;\n }\n}\n\nexport { EnvM8Utils };\n","/* NODEJS:START */\nimport os from 'node:os';\n\n/* NODEJS:END */\nimport { EnvM8Utils } from './EnvM8Utils.ts';\nimport { Os, type OsType } from './Os.ts';\nimport { Platform, type PlatformType } from './Platform.ts';\nimport { parseUserAgent, type UserAgentInfo } from './userAgent.ts';\nimport { EMPTY_VERSION, type Version } from './Version.ts';\n\nexport interface InitEnvOptions {\n app?: string;\n version?: string;\n}\n\ndeclare const process: {\n env: { [key: string]: string };\n version?: string;\n versions?: { [key: string]: string };\n};\n\ndeclare const Deno: {\n version?: {\n deno: string;\n v8: string;\n typescript: string;\n };\n build: {\n os: string;\n };\n env: {\n get(name: string): string | undefined;\n };\n osRelease(): string;\n};\n\nconst _bootTimestamp = Date.now();\nlet _initialized = false;\nlet _userAgentInfo!: UserAgentInfo | undefined;\nlet _platform!: PlatformType;\nlet _platformVersion!: Version;\nlet _os!: OsType;\nlet _osVersion!: Version;\nlet _isBrowser!: boolean;\nlet _isCI!: boolean;\nlet _NODE_ENV!: string;\n\nlet _app: string = '';\nlet _appVersion: Version = EMPTY_VERSION;\n\nfunction getPlatform(): PlatformType {\n if (typeof Deno !== 'undefined' && Deno.version != null) {\n return Platform.deno;\n } else if (_userAgentInfo) {\n return _userAgentInfo.browser;\n } else if (typeof process !== 'undefined') {\n if (process.versions !== undefined) {\n if (process.versions.bun) return Platform.bun;\n if (process.versions.deno) return Platform.deno;\n if (process.versions.node) return Platform.node;\n }\n }\n\n return Platform.unknown;\n}\n\nfunction getPlatformVersion(): Version {\n switch (_platform) {\n case Platform.bun:\n return EnvM8Utils.parseVersionString(process.versions?.bun);\n case Platform.deno:\n return EnvM8Utils.parseVersionString(Deno.version?.deno);\n case Platform.node:\n return EnvM8Utils.parseVersionString(process.version);\n default:\n if (_userAgentInfo) {\n return EnvM8Utils.parseVersionString(_userAgentInfo.browserVersion);\n }\n }\n\n return EMPTY_VERSION;\n}\n\nfunction getOs(): OsType {\n switch (_platform) {\n case Platform.bun:\n case Platform.deno:\n case Platform.node:\n if (typeof os !== 'undefined') {\n return getOsFromNode();\n } else if (Platform.deno) {\n return getOsFromDeno();\n }\n default:\n if (_userAgentInfo) {\n return _userAgentInfo.os;\n }\n }\n\n return Os.unknown;\n}\n\nfunction getOsFromNode(): OsType {\n const p: NodeJS.Platform = os.platform();\n if (p === 'darwin') return Os.macos;\n if (p === 'win32') return Os.windows;\n if (p === 'linux') return Os.linux;\n if (p === 'android') return Os.android;\n if (p === 'aix') return Os.aix;\n if (p === 'freebsd') return Os.freebsd;\n if (p === 'openbsd') return Os.openbsd;\n if (p === 'sunos') return Os.solaris;\n if (p === 'haiku') return Os.haiku;\n if (p === 'cygwin') return Os.cygwin;\n if (p === 'netbsd') return Os.netbsd;\n return Os.unknown;\n}\n\nfunction getOsFromDeno(): OsType {\n const p = Deno.build.os;\n if (p === 'darwin') return Os.macos;\n if (p === 'windows') return Os.windows;\n if (p === 'linux') return Os.linux;\n if (p === 'android') return Os.android;\n if (p === 'aix') return Os.aix;\n if (p === 'freebsd') return Os.freebsd;\n if (p === 'solaris') return Os.solaris;\n if (p === 'netbsd') return Os.netbsd;\n if (p === 'illumos') return Os.illumos;\n return Os.unknown;\n}\n\nfunction getOsVersion(): Version {\n switch (_platform) {\n case Platform.bun:\n case Platform.deno:\n case Platform.node:\n if (typeof os !== 'undefined') {\n return getOsVersionFromNode();\n } else if (Platform.deno) {\n return getOsVersionFromDeno();\n }\n default:\n if (_userAgentInfo) {\n return EnvM8Utils.parseVersionString(_userAgentInfo.osVersion);\n }\n }\n\n return EMPTY_VERSION;\n}\n\nfunction getOsVersionFromNode(): Version {\n return EnvM8Utils.parseVersionString(os.release());\n}\n\nfunction getOsVersionFromDeno(): Version {\n return EnvM8Utils.parseVersionString(Deno.osRelease());\n}\n\nfunction getIsBrowser(): boolean {\n return !!(\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof navigator !== 'undefined' &&\n navigator.userAgent\n );\n}\n\nfunction getSafeProcessEnvProperty(name: string): string | undefined {\n switch (_platform) {\n case Platform.deno:\n return Deno.env.get(name);\n default:\n return typeof process !== 'undefined' ? process.env[name] : undefined;\n }\n}\n\nfunction getIsCI(): boolean {\n const ci = getSafeProcessEnvProperty('CI');\n return ci != undefined && toBoolean(ci, true);\n}\n\nfunction getNodeEnv(): string {\n return getSafeProcessEnvProperty('NODE_ENV') ?? 'production';\n}\n\n/**\n * Convert a value to a boolean.\n *\n * By default, the return will be false unless the value is truthy (true, \"true\", \"1\").\n * Setting defaultVal to true will return true unless the value is falsy (false, \"false\", \"0\").\n *\n * String comparisons are case insensitive.\n *\n * @param val input value\n * @param defaultVal default value to return if val does not match a boolean or 'true' / 'false'\n * @returns val, converted to a boolean\n */\nfunction toBoolean(val: unknown | undefined, defaultVal?: boolean): boolean {\n if (defaultVal) {\n if (val === false) return false;\n if (val === '0') return false;\n if (typeof val === 'string' && val.toLowerCase() === 'false') return false;\n return true;\n } else {\n if (val === true) return true;\n if (val === '1') return true;\n if (typeof val === 'string' && val.toLowerCase() === 'true') return true;\n return false;\n }\n}\n\nclass EnvM8 {\n public bootTimestamp: number;\n public app: string;\n public appVersion: Version;\n public platform: PlatformType;\n public platformVersion: Version;\n public os: OsType;\n public osVersion: Version;\n public isBrowser: boolean;\n public isBackend: boolean;\n public isCI: boolean;\n public NODE_ENV: string;\n\n constructor() {\n if (!_initialized) {\n _userAgentInfo = parseUserAgent();\n // this.app = '';\n // this.appVersion = EMPTY_VERSION;\n _platform = getPlatform();\n _platformVersion = getPlatformVersion();\n _isBrowser = getIsBrowser();\n _isCI = getIsCI();\n _NODE_ENV = getNodeEnv();\n _os = getOs();\n _osVersion = getOsVersion();\n _initialized = true;\n }\n\n this.bootTimestamp = _bootTimestamp;\n this.app = _app;\n this.appVersion = _appVersion;\n this.platform = _platform;\n this.platformVersion = _platformVersion;\n this.isBrowser = _isBrowser;\n this.isBackend = !_isBrowser;\n this.isCI = _isCI;\n this.NODE_ENV = _NODE_ENV;\n this.os = _os;\n this.osVersion = _osVersion;\n }\n\n public setApp(app: string) {\n this.app = app;\n _app = app;\n }\n\n public setAppVersion(version: string) {\n this.appVersion = EnvM8Utils.parseVersionString(version);\n _appVersion = this.appVersion;\n }\n\n public get upTime(): number {\n return Date.now() - this.bootTimestamp;\n }\n\n public getEnv(name: string): string | undefined {\n return getSafeProcessEnvProperty(name);\n }\n}\n\nexport { EnvM8 };\n","import { Os, type OsType } from './Os.ts';\nimport { Platform, type PlatformType } from './Platform.ts';\n\nexport interface UserAgentInfo {\n browser: PlatformType;\n browserVersion?: string;\n os: OsType;\n osVersion?: string;\n}\n\ninterface TokenizedUserAgent {\n keys: Set<string>;\n versions: {\n [key: string]: string;\n };\n}\n\nfunction parseUserAgent(): UserAgentInfo | undefined {\n if (typeof window === 'undefined' || !window.navigator || !window.navigator.userAgent)\n return undefined;\n\n const uai: UserAgentInfo = {\n browser: Platform.unknown,\n os: Os.unknown,\n };\n\n const userAgent = window.navigator.userAgent;\n const tua = tokenizeUserAgent(userAgent);\n\n // const containsIphoneIpadIpod = tua.keys.has('iphone') || tua.keys.has('ipad') || tua.keys.has('ipod');\n // const containsMobi = tua.keys.has('mobi');\n const containsFirefox = tua.keys.has('firefox');\n // const containsSeamonkey = tua.keys.has('seamonkey');\n const containsChrome = tua.keys.has('chrome');\n const containsChromium = tua.keys.has('chromium');\n const containsSafari = tua.keys.has('safari');\n // const containsOperaOPR = tua.keys.has('opera') || tua.keys.has('opr');\n // const containsTridentMSIE = tua.keys.has('trident') || tua.keys.has('msie');\n const containsMacintosh = tua.keys.has('macintosh');\n\n const isSafari = containsSafari && !containsChrome && !containsChromium;\n const isChrome = containsChrome;\n // const isChromium = containsChromium && !containsChrome;\n const isFirefox = containsFirefox;\n // const isSeamonkey = containsSeamonkey && !containsFirefox;\n // const isOpera = containsOperaOPR;\n // const isIE = containsTridentMSIE;\n // const isMobileOrTablet = containsMobi;\n // const isIOS = containsIphoneIpadIpod;\n const isMacOS = containsMacintosh;\n\n // Browser\n if (isSafari) {\n uai.browser = Platform.safari;\n uai.browserVersion = tua.versions.version;\n } else if (isChrome) {\n uai.browser = Platform.chrome;\n uai.browserVersion = tua.versions.chrome;\n } else if (isFirefox) {\n uai.browser = Platform.firefox;\n uai.browserVersion = tua.versions.firefox;\n }\n\n // OS\n if (isMacOS) {\n uai.os = Os.macos;\n uai.osVersion = tua.versions.x;\n }\n\n return uai;\n}\n\nfunction tokenizeUserAgent(userAgent: string): TokenizedUserAgent {\n const rawKeys = userAgent\n .toLowerCase()\n .split(new RegExp('[ /,;()]', 'g'))\n .reduce((acc, val) => {\n if (val) acc.push(val);\n return acc;\n }, [] as string[]);\n\n const tua: TokenizedUserAgent = {\n keys: new Set(),\n versions: {},\n };\n\n let prevRawKey = '';\n for (let i = 0, len = rawKeys.length; i < len; i++) {\n const rawKey = rawKeys[i];\n\n let isNumber = false;\n for (let i = 0; i <= 9; i++) {\n if (rawKey.startsWith(`${i}`)) {\n isNumber = true;\n break;\n }\n }\n if (isNumber) {\n tua.versions[prevRawKey] = rawKey.split('_').join('.');\n } else {\n tua.keys.add(rawKey);\n }\n prevRawKey = rawKey;\n }\n\n return tua;\n}\n\nexport { parseUserAgent };\n"],"mappings":"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","names":["i","os"]} |
+1
-1
@@ -80,3 +80,3 @@ declare const PACKAGE_INFO: { | ||
| setAppVersion(version: string): void; | ||
| get upTimestamp(): number; | ||
| get upTime(): number; | ||
| getEnv(name: string): string | undefined; | ||
@@ -83,0 +83,0 @@ } |
+1
-1
@@ -80,3 +80,3 @@ declare const PACKAGE_INFO: { | ||
| setAppVersion(version: string): void; | ||
| get upTimestamp(): number; | ||
| get upTime(): number; | ||
| getEnv(name: string): string | undefined; | ||
@@ -83,0 +83,0 @@ } |
+2
-2
@@ -8,3 +8,3 @@ var __defProp = Object.defineProperty; | ||
| "name": "@ncoderz/env-m8", | ||
| "version": "0.1.0", | ||
| "version": "0.1.1", | ||
| "author": "RA Sewell <richard.sewell@ncoderz.com>", | ||
@@ -342,3 +342,3 @@ "license": "BSD-2-Clause", | ||
| } | ||
| get upTimestamp() { | ||
| get upTime() { | ||
| return Date.now() - this.bootTimestamp; | ||
@@ -345,0 +345,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/_generated/package_info.ts","../src/Os.ts","../src/Platform.ts","../src/Version.ts","../src/EnvM8Utils.ts","../src/EnvM8.ts","../src/userAgent.ts"],"sourcesContent":["// This file is automatically generated. DO NOT EDIT.\n\n/* eslint-disable */\n\nexport const PACKAGE_INFO = {\n \"name\": \"@ncoderz/env-m8\",\n \"version\": \"0.1.0\",\n \"author\": \"RA Sewell <richard.sewell@ncoderz.com>\",\n \"license\": \"BSD-2-Clause\",\n \"description\": \"Where am I? Information about the environment in which your TypeScript or JavaScript is executing.\"\n};\n","/**\n * Os\n */\nconst Os = {\n unknown: '',\n macos: 'macos',\n windows: 'windows',\n linux: 'linux',\n android: 'android',\n ios: 'ios',\n aix: 'aix',\n freebsd: 'freebsd',\n openbsd: 'openbsd',\n solaris: 'solaris',\n cygwin: 'cygwin',\n netbsd: 'netbsd',\n haiku: 'haiku',\n illumos: 'illumos',\n} as const;\n\nexport type OsType = (typeof Os)[keyof typeof Os];\n\nexport { Os };\n","/**\n * Application platform\n */\nconst Platform = {\n unknown: '',\n node: 'node',\n bun: 'bun',\n deno: 'deno',\n chrome: 'chrome',\n safari: 'safari',\n firefox: 'firefox',\n edge: 'edge',\n ie: 'ie',\n} as const;\n\nexport type PlatformType = (typeof Platform)[keyof typeof Platform];\n\nexport { Platform };\n","/**\n * A version object.\n *\n * It contains the full version string and its components.\n *\n */\nexport interface Version {\n full: string;\n major: string;\n minor: string;\n patch: string;\n prerelease: string;\n build: string;\n}\n\nconst EMPTY_VERSION: Version = {\n full: '',\n major: '',\n minor: '',\n patch: '',\n prerelease: '',\n build: '',\n};\n\nexport { EMPTY_VERSION };\n","import { EMPTY_VERSION, type Version } from './Version.ts';\n\nlet SEM_VER_REGEX: RegExp | undefined;\nlet SIMPLE_VER_REGEX: RegExp | undefined;\n\nclass EnvM8Utils {\n public static parseVersionString(version?: string): Version {\n if (!version) return EMPTY_VERSION;\n\n // Remove leading v\n if (version.startsWith('v')) {\n version = version.substring(1);\n }\n\n for (let i = 0; i < 2; i++) {\n let v: RegExpMatchArray | string[] | null;\n const semVer = i === 0;\n if (semVer) {\n // Lenient Semver 2.0 regex, lazy init and cached\n const regex = (SEM_VER_REGEX ??=\n /^([0-9a-zA-Z]+)\\.([0-9a-zA-Z]+)\\.([0-9a-zA-Z]+)(?:-([0-9a-zA-Z\\.-]+))?(?:\\+([0-9a-zA-Z\\.-]+))?$/);\n v = version.match(regex);\n } else {\n const regex = (SIMPLE_VER_REGEX ??= /[._\\-+]/);\n // Simple version, major.minor.patch.build where everything is optional\n v = ['', ...version.split(regex, 4)];\n }\n\n if (v) {\n return {\n full: version,\n major: v[1] ?? '',\n minor: v[2] ?? '',\n patch: v[3] ?? '',\n prerelease: semVer ? (v[4] ?? '') : '',\n build: (semVer ? v[5] : v[4]) ?? '',\n };\n }\n }\n return EMPTY_VERSION;\n }\n}\n\nexport { EnvM8Utils };\n","/* NODEJS:START */\nimport os from 'node:os';\n\n/* NODEJS:END */\nimport { EnvM8Utils } from './EnvM8Utils.ts';\nimport { Os, type OsType } from './Os.ts';\nimport { Platform, type PlatformType } from './Platform.ts';\nimport { parseUserAgent, type UserAgentInfo } from './userAgent.ts';\nimport { EMPTY_VERSION, type Version } from './Version.ts';\n\nexport interface InitEnvOptions {\n app?: string;\n version?: string;\n}\n\ndeclare const process: {\n env: { [key: string]: string };\n version?: string;\n versions?: { [key: string]: string };\n};\n\ndeclare const Deno: {\n version?: {\n deno: string;\n v8: string;\n typescript: string;\n };\n build: {\n os: string;\n };\n env: {\n get(name: string): string | undefined;\n };\n osRelease(): string;\n};\n\nconst _bootTimestamp = Date.now();\nlet _initialized = false;\nlet _userAgentInfo!: UserAgentInfo | undefined;\nlet _platform!: PlatformType;\nlet _platformVersion!: Version;\nlet _os!: OsType;\nlet _osVersion!: Version;\nlet _isBrowser!: boolean;\nlet _isCI!: boolean;\nlet _NODE_ENV!: string;\n\nlet _app: string = '';\nlet _appVersion: Version = EMPTY_VERSION;\n\nfunction getPlatform(): PlatformType {\n if (typeof Deno !== 'undefined' && Deno.version != null) {\n return Platform.deno;\n } else if (_userAgentInfo) {\n return _userAgentInfo.browser;\n } else if (typeof process !== 'undefined') {\n if (process.versions !== undefined) {\n if (process.versions.bun) return Platform.bun;\n if (process.versions.deno) return Platform.deno;\n if (process.versions.node) return Platform.node;\n }\n }\n\n return Platform.unknown;\n}\n\nfunction getPlatformVersion(): Version {\n switch (_platform) {\n case Platform.bun:\n return EnvM8Utils.parseVersionString(process.versions?.bun);\n case Platform.deno:\n return EnvM8Utils.parseVersionString(Deno.version?.deno);\n case Platform.node:\n return EnvM8Utils.parseVersionString(process.version);\n default:\n if (_userAgentInfo) {\n return EnvM8Utils.parseVersionString(_userAgentInfo.browserVersion);\n }\n }\n\n return EMPTY_VERSION;\n}\n\nfunction getOs(): OsType {\n switch (_platform) {\n case Platform.bun:\n case Platform.deno:\n case Platform.node:\n if (typeof os !== 'undefined') {\n return getOsFromNode();\n } else if (Platform.deno) {\n return getOsFromDeno();\n }\n default:\n if (_userAgentInfo) {\n return _userAgentInfo.os;\n }\n }\n\n return Os.unknown;\n}\n\nfunction getOsFromNode(): OsType {\n const p: NodeJS.Platform = os.platform();\n if (p === 'darwin') return Os.macos;\n if (p === 'win32') return Os.windows;\n if (p === 'linux') return Os.linux;\n if (p === 'android') return Os.android;\n if (p === 'aix') return Os.aix;\n if (p === 'freebsd') return Os.freebsd;\n if (p === 'openbsd') return Os.openbsd;\n if (p === 'sunos') return Os.solaris;\n if (p === 'haiku') return Os.haiku;\n if (p === 'cygwin') return Os.cygwin;\n if (p === 'netbsd') return Os.netbsd;\n return Os.unknown;\n}\n\nfunction getOsFromDeno(): OsType {\n const p = Deno.build.os;\n if (p === 'darwin') return Os.macos;\n if (p === 'windows') return Os.windows;\n if (p === 'linux') return Os.linux;\n if (p === 'android') return Os.android;\n if (p === 'aix') return Os.aix;\n if (p === 'freebsd') return Os.freebsd;\n if (p === 'solaris') return Os.solaris;\n if (p === 'netbsd') return Os.netbsd;\n if (p === 'illumos') return Os.illumos;\n return Os.unknown;\n}\n\nfunction getOsVersion(): Version {\n switch (_platform) {\n case Platform.bun:\n case Platform.deno:\n case Platform.node:\n if (typeof os !== 'undefined') {\n return getOsVersionFromNode();\n } else if (Platform.deno) {\n return getOsVersionFromDeno();\n }\n default:\n if (_userAgentInfo) {\n return EnvM8Utils.parseVersionString(_userAgentInfo.osVersion);\n }\n }\n\n return EMPTY_VERSION;\n}\n\nfunction getOsVersionFromNode(): Version {\n return EnvM8Utils.parseVersionString(os.release());\n}\n\nfunction getOsVersionFromDeno(): Version {\n return EnvM8Utils.parseVersionString(Deno.osRelease());\n}\n\nfunction getIsBrowser(): boolean {\n return !!(\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof navigator !== 'undefined' &&\n navigator.userAgent\n );\n}\n\nfunction getSafeProcessEnvProperty(name: string): string | undefined {\n switch (_platform) {\n case Platform.deno:\n return Deno.env.get(name);\n default:\n return typeof process !== 'undefined' ? process.env[name] : undefined;\n }\n}\n\nfunction getIsCI(): boolean {\n const ci = getSafeProcessEnvProperty('CI');\n return ci != undefined && toBoolean(ci, true);\n}\n\nfunction getNodeEnv(): string {\n return getSafeProcessEnvProperty('NODE_ENV') ?? 'production';\n}\n\n/**\n * Convert a value to a boolean.\n *\n * By default, the return will be false unless the value is truthy (true, \"true\", \"1\").\n * Setting defaultVal to true will return true unless the value is falsy (false, \"false\", \"0\").\n *\n * String comparisons are case insensitive.\n *\n * @param val input value\n * @param defaultVal default value to return if val does not match a boolean or 'true' / 'false'\n * @returns val, converted to a boolean\n */\nfunction toBoolean(val: unknown | undefined, defaultVal?: boolean): boolean {\n if (defaultVal) {\n if (val === false) return false;\n if (val === '0') return false;\n if (typeof val === 'string' && val.toLowerCase() === 'false') return false;\n return true;\n } else {\n if (val === true) return true;\n if (val === '1') return true;\n if (typeof val === 'string' && val.toLowerCase() === 'true') return true;\n return false;\n }\n}\n\nclass EnvM8 {\n public bootTimestamp: number;\n public app: string;\n public appVersion: Version;\n public platform: PlatformType;\n public platformVersion: Version;\n public os: OsType;\n public osVersion: Version;\n public isBrowser: boolean;\n public isBackend: boolean;\n public isCI: boolean;\n public NODE_ENV: string;\n\n constructor() {\n if (!_initialized) {\n _userAgentInfo = parseUserAgent();\n // this.app = '';\n // this.appVersion = EMPTY_VERSION;\n _platform = getPlatform();\n _platformVersion = getPlatformVersion();\n _isBrowser = getIsBrowser();\n _isCI = getIsCI();\n _NODE_ENV = getNodeEnv();\n _os = getOs();\n _osVersion = getOsVersion();\n _initialized = true;\n }\n\n this.bootTimestamp = _bootTimestamp;\n this.app = _app;\n this.appVersion = _appVersion;\n this.platform = _platform;\n this.platformVersion = _platformVersion;\n this.isBrowser = _isBrowser;\n this.isBackend = !_isBrowser;\n this.isCI = _isCI;\n this.NODE_ENV = _NODE_ENV;\n this.os = _os;\n this.osVersion = _osVersion;\n }\n\n public setApp(app: string) {\n this.app = app;\n _app = app;\n }\n\n public setAppVersion(version: string) {\n this.appVersion = EnvM8Utils.parseVersionString(version);\n _appVersion = this.appVersion;\n }\n\n public get upTimestamp(): number {\n return Date.now() - this.bootTimestamp;\n }\n\n public getEnv(name: string): string | undefined {\n return getSafeProcessEnvProperty(name);\n }\n}\n\nexport { EnvM8 };\n","import { Os, type OsType } from './Os.ts';\nimport { Platform, type PlatformType } from './Platform.ts';\n\nexport interface UserAgentInfo {\n browser: PlatformType;\n browserVersion?: string;\n os: OsType;\n osVersion?: string;\n}\n\ninterface TokenizedUserAgent {\n keys: Set<string>;\n versions: {\n [key: string]: string;\n };\n}\n\nfunction parseUserAgent(): UserAgentInfo | undefined {\n if (typeof window === 'undefined' || !window.navigator || !window.navigator.userAgent)\n return undefined;\n\n const uai: UserAgentInfo = {\n browser: Platform.unknown,\n os: Os.unknown,\n };\n\n const userAgent = window.navigator.userAgent;\n const tua = tokenizeUserAgent(userAgent);\n\n // const containsIphoneIpadIpod = tua.keys.has('iphone') || tua.keys.has('ipad') || tua.keys.has('ipod');\n // const containsMobi = tua.keys.has('mobi');\n const containsFirefox = tua.keys.has('firefox');\n // const containsSeamonkey = tua.keys.has('seamonkey');\n const containsChrome = tua.keys.has('chrome');\n const containsChromium = tua.keys.has('chromium');\n const containsSafari = tua.keys.has('safari');\n // const containsOperaOPR = tua.keys.has('opera') || tua.keys.has('opr');\n // const containsTridentMSIE = tua.keys.has('trident') || tua.keys.has('msie');\n const containsMacintosh = tua.keys.has('macintosh');\n\n const isSafari = containsSafari && !containsChrome && !containsChromium;\n const isChrome = containsChrome;\n // const isChromium = containsChromium && !containsChrome;\n const isFirefox = containsFirefox;\n // const isSeamonkey = containsSeamonkey && !containsFirefox;\n // const isOpera = containsOperaOPR;\n // const isIE = containsTridentMSIE;\n // const isMobileOrTablet = containsMobi;\n // const isIOS = containsIphoneIpadIpod;\n const isMacOS = containsMacintosh;\n\n // Browser\n if (isSafari) {\n uai.browser = Platform.safari;\n uai.browserVersion = tua.versions.version;\n } else if (isChrome) {\n uai.browser = Platform.chrome;\n uai.browserVersion = tua.versions.chrome;\n } else if (isFirefox) {\n uai.browser = Platform.firefox;\n uai.browserVersion = tua.versions.firefox;\n }\n\n // OS\n if (isMacOS) {\n uai.os = Os.macos;\n uai.osVersion = tua.versions.x;\n }\n\n return uai;\n}\n\nfunction tokenizeUserAgent(userAgent: string): TokenizedUserAgent {\n const rawKeys = userAgent\n .toLowerCase()\n .split(new RegExp('[ /,;()]', 'g'))\n .reduce((acc, val) => {\n if (val) acc.push(val);\n return acc;\n }, [] as string[]);\n\n const tua: TokenizedUserAgent = {\n keys: new Set(),\n versions: {},\n };\n\n let prevRawKey = '';\n for (let i = 0, len = rawKeys.length; i < len; i++) {\n const rawKey = rawKeys[i];\n\n let isNumber = false;\n for (let i = 0; i <= 9; i++) {\n if (rawKey.startsWith(`${i}`)) {\n isNumber = true;\n break;\n }\n }\n if (isNumber) {\n tua.versions[prevRawKey] = rawKey.split('_').join('.');\n } else {\n tua.keys.add(rawKey);\n }\n prevRawKey = rawKey;\n }\n\n return tua;\n}\n\nexport { parseUserAgent };\n"],"mappings":"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","names":["i"]} | ||
| {"version":3,"sources":["../src/_generated/package_info.ts","../src/Os.ts","../src/Platform.ts","../src/Version.ts","../src/EnvM8Utils.ts","../src/EnvM8.ts","../src/userAgent.ts"],"sourcesContent":["// This file is automatically generated. DO NOT EDIT.\n\n/* eslint-disable */\n\nexport const PACKAGE_INFO = {\n \"name\": \"@ncoderz/env-m8\",\n \"version\": \"0.1.1\",\n \"author\": \"RA Sewell <richard.sewell@ncoderz.com>\",\n \"license\": \"BSD-2-Clause\",\n \"description\": \"Where am I? Information about the environment in which your TypeScript or JavaScript is executing.\"\n};\n","/**\n * Os\n */\nconst Os = {\n unknown: '',\n macos: 'macos',\n windows: 'windows',\n linux: 'linux',\n android: 'android',\n ios: 'ios',\n aix: 'aix',\n freebsd: 'freebsd',\n openbsd: 'openbsd',\n solaris: 'solaris',\n cygwin: 'cygwin',\n netbsd: 'netbsd',\n haiku: 'haiku',\n illumos: 'illumos',\n} as const;\n\nexport type OsType = (typeof Os)[keyof typeof Os];\n\nexport { Os };\n","/**\n * Application platform\n */\nconst Platform = {\n unknown: '',\n node: 'node',\n bun: 'bun',\n deno: 'deno',\n chrome: 'chrome',\n safari: 'safari',\n firefox: 'firefox',\n edge: 'edge',\n ie: 'ie',\n} as const;\n\nexport type PlatformType = (typeof Platform)[keyof typeof Platform];\n\nexport { Platform };\n","/**\n * A version object.\n *\n * It contains the full version string and its components.\n *\n */\nexport interface Version {\n full: string;\n major: string;\n minor: string;\n patch: string;\n prerelease: string;\n build: string;\n}\n\nconst EMPTY_VERSION: Version = {\n full: '',\n major: '',\n minor: '',\n patch: '',\n prerelease: '',\n build: '',\n};\n\nexport { EMPTY_VERSION };\n","import { EMPTY_VERSION, type Version } from './Version.ts';\n\nlet SEM_VER_REGEX: RegExp | undefined;\nlet SIMPLE_VER_REGEX: RegExp | undefined;\n\nclass EnvM8Utils {\n public static parseVersionString(version?: string): Version {\n if (!version) return EMPTY_VERSION;\n\n // Remove leading v\n if (version.startsWith('v')) {\n version = version.substring(1);\n }\n\n for (let i = 0; i < 2; i++) {\n let v: RegExpMatchArray | string[] | null;\n const semVer = i === 0;\n if (semVer) {\n // Lenient Semver 2.0 regex, lazy init and cached\n const regex = (SEM_VER_REGEX ??=\n /^([0-9a-zA-Z]+)\\.([0-9a-zA-Z]+)\\.([0-9a-zA-Z]+)(?:-([0-9a-zA-Z\\.-]+))?(?:\\+([0-9a-zA-Z\\.-]+))?$/);\n v = version.match(regex);\n } else {\n const regex = (SIMPLE_VER_REGEX ??= /[._\\-+]/);\n // Simple version, major.minor.patch.build where everything is optional\n v = ['', ...version.split(regex, 4)];\n }\n\n if (v) {\n return {\n full: version,\n major: v[1] ?? '',\n minor: v[2] ?? '',\n patch: v[3] ?? '',\n prerelease: semVer ? (v[4] ?? '') : '',\n build: (semVer ? v[5] : v[4]) ?? '',\n };\n }\n }\n return EMPTY_VERSION;\n }\n}\n\nexport { EnvM8Utils };\n","/* NODEJS:START */\nimport os from 'node:os';\n\n/* NODEJS:END */\nimport { EnvM8Utils } from './EnvM8Utils.ts';\nimport { Os, type OsType } from './Os.ts';\nimport { Platform, type PlatformType } from './Platform.ts';\nimport { parseUserAgent, type UserAgentInfo } from './userAgent.ts';\nimport { EMPTY_VERSION, type Version } from './Version.ts';\n\nexport interface InitEnvOptions {\n app?: string;\n version?: string;\n}\n\ndeclare const process: {\n env: { [key: string]: string };\n version?: string;\n versions?: { [key: string]: string };\n};\n\ndeclare const Deno: {\n version?: {\n deno: string;\n v8: string;\n typescript: string;\n };\n build: {\n os: string;\n };\n env: {\n get(name: string): string | undefined;\n };\n osRelease(): string;\n};\n\nconst _bootTimestamp = Date.now();\nlet _initialized = false;\nlet _userAgentInfo!: UserAgentInfo | undefined;\nlet _platform!: PlatformType;\nlet _platformVersion!: Version;\nlet _os!: OsType;\nlet _osVersion!: Version;\nlet _isBrowser!: boolean;\nlet _isCI!: boolean;\nlet _NODE_ENV!: string;\n\nlet _app: string = '';\nlet _appVersion: Version = EMPTY_VERSION;\n\nfunction getPlatform(): PlatformType {\n if (typeof Deno !== 'undefined' && Deno.version != null) {\n return Platform.deno;\n } else if (_userAgentInfo) {\n return _userAgentInfo.browser;\n } else if (typeof process !== 'undefined') {\n if (process.versions !== undefined) {\n if (process.versions.bun) return Platform.bun;\n if (process.versions.deno) return Platform.deno;\n if (process.versions.node) return Platform.node;\n }\n }\n\n return Platform.unknown;\n}\n\nfunction getPlatformVersion(): Version {\n switch (_platform) {\n case Platform.bun:\n return EnvM8Utils.parseVersionString(process.versions?.bun);\n case Platform.deno:\n return EnvM8Utils.parseVersionString(Deno.version?.deno);\n case Platform.node:\n return EnvM8Utils.parseVersionString(process.version);\n default:\n if (_userAgentInfo) {\n return EnvM8Utils.parseVersionString(_userAgentInfo.browserVersion);\n }\n }\n\n return EMPTY_VERSION;\n}\n\nfunction getOs(): OsType {\n switch (_platform) {\n case Platform.bun:\n case Platform.deno:\n case Platform.node:\n if (typeof os !== 'undefined') {\n return getOsFromNode();\n } else if (Platform.deno) {\n return getOsFromDeno();\n }\n default:\n if (_userAgentInfo) {\n return _userAgentInfo.os;\n }\n }\n\n return Os.unknown;\n}\n\nfunction getOsFromNode(): OsType {\n const p: NodeJS.Platform = os.platform();\n if (p === 'darwin') return Os.macos;\n if (p === 'win32') return Os.windows;\n if (p === 'linux') return Os.linux;\n if (p === 'android') return Os.android;\n if (p === 'aix') return Os.aix;\n if (p === 'freebsd') return Os.freebsd;\n if (p === 'openbsd') return Os.openbsd;\n if (p === 'sunos') return Os.solaris;\n if (p === 'haiku') return Os.haiku;\n if (p === 'cygwin') return Os.cygwin;\n if (p === 'netbsd') return Os.netbsd;\n return Os.unknown;\n}\n\nfunction getOsFromDeno(): OsType {\n const p = Deno.build.os;\n if (p === 'darwin') return Os.macos;\n if (p === 'windows') return Os.windows;\n if (p === 'linux') return Os.linux;\n if (p === 'android') return Os.android;\n if (p === 'aix') return Os.aix;\n if (p === 'freebsd') return Os.freebsd;\n if (p === 'solaris') return Os.solaris;\n if (p === 'netbsd') return Os.netbsd;\n if (p === 'illumos') return Os.illumos;\n return Os.unknown;\n}\n\nfunction getOsVersion(): Version {\n switch (_platform) {\n case Platform.bun:\n case Platform.deno:\n case Platform.node:\n if (typeof os !== 'undefined') {\n return getOsVersionFromNode();\n } else if (Platform.deno) {\n return getOsVersionFromDeno();\n }\n default:\n if (_userAgentInfo) {\n return EnvM8Utils.parseVersionString(_userAgentInfo.osVersion);\n }\n }\n\n return EMPTY_VERSION;\n}\n\nfunction getOsVersionFromNode(): Version {\n return EnvM8Utils.parseVersionString(os.release());\n}\n\nfunction getOsVersionFromDeno(): Version {\n return EnvM8Utils.parseVersionString(Deno.osRelease());\n}\n\nfunction getIsBrowser(): boolean {\n return !!(\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof navigator !== 'undefined' &&\n navigator.userAgent\n );\n}\n\nfunction getSafeProcessEnvProperty(name: string): string | undefined {\n switch (_platform) {\n case Platform.deno:\n return Deno.env.get(name);\n default:\n return typeof process !== 'undefined' ? process.env[name] : undefined;\n }\n}\n\nfunction getIsCI(): boolean {\n const ci = getSafeProcessEnvProperty('CI');\n return ci != undefined && toBoolean(ci, true);\n}\n\nfunction getNodeEnv(): string {\n return getSafeProcessEnvProperty('NODE_ENV') ?? 'production';\n}\n\n/**\n * Convert a value to a boolean.\n *\n * By default, the return will be false unless the value is truthy (true, \"true\", \"1\").\n * Setting defaultVal to true will return true unless the value is falsy (false, \"false\", \"0\").\n *\n * String comparisons are case insensitive.\n *\n * @param val input value\n * @param defaultVal default value to return if val does not match a boolean or 'true' / 'false'\n * @returns val, converted to a boolean\n */\nfunction toBoolean(val: unknown | undefined, defaultVal?: boolean): boolean {\n if (defaultVal) {\n if (val === false) return false;\n if (val === '0') return false;\n if (typeof val === 'string' && val.toLowerCase() === 'false') return false;\n return true;\n } else {\n if (val === true) return true;\n if (val === '1') return true;\n if (typeof val === 'string' && val.toLowerCase() === 'true') return true;\n return false;\n }\n}\n\nclass EnvM8 {\n public bootTimestamp: number;\n public app: string;\n public appVersion: Version;\n public platform: PlatformType;\n public platformVersion: Version;\n public os: OsType;\n public osVersion: Version;\n public isBrowser: boolean;\n public isBackend: boolean;\n public isCI: boolean;\n public NODE_ENV: string;\n\n constructor() {\n if (!_initialized) {\n _userAgentInfo = parseUserAgent();\n // this.app = '';\n // this.appVersion = EMPTY_VERSION;\n _platform = getPlatform();\n _platformVersion = getPlatformVersion();\n _isBrowser = getIsBrowser();\n _isCI = getIsCI();\n _NODE_ENV = getNodeEnv();\n _os = getOs();\n _osVersion = getOsVersion();\n _initialized = true;\n }\n\n this.bootTimestamp = _bootTimestamp;\n this.app = _app;\n this.appVersion = _appVersion;\n this.platform = _platform;\n this.platformVersion = _platformVersion;\n this.isBrowser = _isBrowser;\n this.isBackend = !_isBrowser;\n this.isCI = _isCI;\n this.NODE_ENV = _NODE_ENV;\n this.os = _os;\n this.osVersion = _osVersion;\n }\n\n public setApp(app: string) {\n this.app = app;\n _app = app;\n }\n\n public setAppVersion(version: string) {\n this.appVersion = EnvM8Utils.parseVersionString(version);\n _appVersion = this.appVersion;\n }\n\n public get upTime(): number {\n return Date.now() - this.bootTimestamp;\n }\n\n public getEnv(name: string): string | undefined {\n return getSafeProcessEnvProperty(name);\n }\n}\n\nexport { EnvM8 };\n","import { Os, type OsType } from './Os.ts';\nimport { Platform, type PlatformType } from './Platform.ts';\n\nexport interface UserAgentInfo {\n browser: PlatformType;\n browserVersion?: string;\n os: OsType;\n osVersion?: string;\n}\n\ninterface TokenizedUserAgent {\n keys: Set<string>;\n versions: {\n [key: string]: string;\n };\n}\n\nfunction parseUserAgent(): UserAgentInfo | undefined {\n if (typeof window === 'undefined' || !window.navigator || !window.navigator.userAgent)\n return undefined;\n\n const uai: UserAgentInfo = {\n browser: Platform.unknown,\n os: Os.unknown,\n };\n\n const userAgent = window.navigator.userAgent;\n const tua = tokenizeUserAgent(userAgent);\n\n // const containsIphoneIpadIpod = tua.keys.has('iphone') || tua.keys.has('ipad') || tua.keys.has('ipod');\n // const containsMobi = tua.keys.has('mobi');\n const containsFirefox = tua.keys.has('firefox');\n // const containsSeamonkey = tua.keys.has('seamonkey');\n const containsChrome = tua.keys.has('chrome');\n const containsChromium = tua.keys.has('chromium');\n const containsSafari = tua.keys.has('safari');\n // const containsOperaOPR = tua.keys.has('opera') || tua.keys.has('opr');\n // const containsTridentMSIE = tua.keys.has('trident') || tua.keys.has('msie');\n const containsMacintosh = tua.keys.has('macintosh');\n\n const isSafari = containsSafari && !containsChrome && !containsChromium;\n const isChrome = containsChrome;\n // const isChromium = containsChromium && !containsChrome;\n const isFirefox = containsFirefox;\n // const isSeamonkey = containsSeamonkey && !containsFirefox;\n // const isOpera = containsOperaOPR;\n // const isIE = containsTridentMSIE;\n // const isMobileOrTablet = containsMobi;\n // const isIOS = containsIphoneIpadIpod;\n const isMacOS = containsMacintosh;\n\n // Browser\n if (isSafari) {\n uai.browser = Platform.safari;\n uai.browserVersion = tua.versions.version;\n } else if (isChrome) {\n uai.browser = Platform.chrome;\n uai.browserVersion = tua.versions.chrome;\n } else if (isFirefox) {\n uai.browser = Platform.firefox;\n uai.browserVersion = tua.versions.firefox;\n }\n\n // OS\n if (isMacOS) {\n uai.os = Os.macos;\n uai.osVersion = tua.versions.x;\n }\n\n return uai;\n}\n\nfunction tokenizeUserAgent(userAgent: string): TokenizedUserAgent {\n const rawKeys = userAgent\n .toLowerCase()\n .split(new RegExp('[ /,;()]', 'g'))\n .reduce((acc, val) => {\n if (val) acc.push(val);\n return acc;\n }, [] as string[]);\n\n const tua: TokenizedUserAgent = {\n keys: new Set(),\n versions: {},\n };\n\n let prevRawKey = '';\n for (let i = 0, len = rawKeys.length; i < len; i++) {\n const rawKey = rawKeys[i];\n\n let isNumber = false;\n for (let i = 0; i <= 9; i++) {\n if (rawKey.startsWith(`${i}`)) {\n isNumber = true;\n break;\n }\n }\n if (isNumber) {\n tua.versions[prevRawKey] = rawKey.split('_').join('.');\n } else {\n tua.keys.add(rawKey);\n }\n prevRawKey = rawKey;\n }\n\n return tua;\n}\n\nexport { parseUserAgent };\n"],"mappings":"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","names":["i"]} |
+1
-1
| { | ||
| "name": "@ncoderz/env-m8", | ||
| "version": "0.1.0", | ||
| "version": "0.1.1", | ||
| "description": "Where am I? Information about the environment in which your TypeScript or JavaScript is executing.", | ||
@@ -5,0 +5,0 @@ "author": "RA Sewell <richard.sewell@ncoderz.com>", |
+26
-11
@@ -38,28 +38,45 @@ # env-m8 | ||
| // Get an instance, will calculate environment only on first instance creation | ||
| const env = new EnvM8(); | ||
| // | ||
| // Find what you need to know about the environment | ||
| // | ||
| // Running in a browser | ||
| const isBrowser = env.isBrowser; | ||
| // Running in a backend | ||
| const isBackend = env.isBackend; | ||
| const isCI = env.isCI; // true if CI environemt variable is set and is not 'false' or '0' (case-insensitive) | ||
| // Running in a CI environment | ||
| // true if CI environment variable is set and is not 'false' or '0' (case-insensitive) | ||
| const isCI = env.isCI; | ||
| const platform = env.platform; // e.g., chrome, safari, node, bun, deno - see Platform type | ||
| // Which platform? | ||
| // e.g., chrome, safari, node, bun, deno - see Platform type | ||
| const platform = env.platform; | ||
| const os = env.os; // e.g., macos, windows, linux, android, ios - see Os type | ||
| // Which OS? | ||
| // e.g., macos, windows, linux, android, ios - see Os type | ||
| const os = env.os; | ||
| // Time library was loaded (usually at app start) | ||
| // in milliseconds elapsed since midnight, January 1, 1970 Universal Coordinated Time (UTC) | ||
| const bootTimestamp = env.bootTimestamp; | ||
| const upTimestamp = env.upTimestamp; | ||
| // Time since bootTimestamp in milliseconds | ||
| const upTime = env.upTime; | ||
| const { full, major, minor, patch, prerelease, build } = env.environmentVersion; | ||
| // The version of the platform | ||
| const { full, major, minor, patch, prerelease, build } = env.platformVersion; | ||
| // The version of the OS | ||
| const { full, major, minor, patch, prerelease, build } = env.osVersion; | ||
| const NODE_ENV = env.NODE_ENV; // NODE_ENV at initialisation time, returns 'production' if not set | ||
| // NODE_ENV at initialisation time, returns 'production' if not set | ||
| const NODE_ENV = env.NODE_ENV; | ||
| // On any instance of EnvM8, you can set your app name and version | ||
| env.setApp('MyApp'); | ||
@@ -70,3 +87,2 @@ env.setAppVersion('2.1.3-alpha+exp.sha.5114f85'); | ||
| // The values will then be available on any instance of EnvM8 | ||
| const appName = env.app; // MyApp | ||
@@ -84,3 +100,2 @@ const { | ||
| // Get a process.env environment variable safely, whatever the environment | ||
| env.getEnv('LOG_LEVEL'); // string | undefined | ||
@@ -156,4 +171,4 @@ ``` | ||
| const bootTimestamp = env.bootTimestamp; // script load timestamp | ||
| const upTimestamp = env.upTimestamp; // time since script load | ||
| const { full, major, minor, patch, prerelease, build } = env.environmentVersion; // browser version | ||
| const upTime = env.upTime; // time since script load | ||
| const { full, major, minor, patch, prerelease, build } = env.platformVersion; // browser version | ||
@@ -160,0 +175,0 @@ </script> |
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
108211
0.27%177
9.26%