Files
smart-city-digital-twin-mar…/smart-app-city/frontend/node_modules/osenv/osenv.js
Eric FELIXINE e30ae8ed09 feat(smart-app): implement complete mobile app MVP
- App.tsx: full navigation (Auth stack + Main tabs with 5 screens)
- Auth: LoginScreen, RegisterScreen, ForgotPasswordScreen
- HomeScreen: dashboard with IoT metrics, weather widget, alerts, quick actions, sensors
- MapScreen: interactive map with layer toggles (6 layers)
- MarketplaceScreen: categories (6), products (5), search
- ChatScreen: AI chat with quick prompts (4), bot responses
- ProfileScreen: user info, stats, menu (9 items), logout
- AlertsScreen: alert list with severity, acknowledge
- SensorsScreen: sensor list with type filters (6 types), search
- ZonesScreen: zone cards with stats
- SettingsScreen: language picker (FR/EN/ES/DE), privacy, about
- Stores: iotStore (sensors, zones, alerts), notificationStore, uiStore + i18n
- Hooks: useSensors, useAlerts, useNotifications, useLocation
- Components: Card, Button, LoadingSpinner, ErrorBoundary, Header
- Services: iotService, notificationService (with axios API client)
- Utils: formatters (temp, AQI, noise, dates), validators (email, password, IBAN)
- Theme: colors.ts with full design system (Blue Ocean palette)
- Ditto: fixed MongoDB connection, new JWT secrets, official gateway image
2026-06-01 18:00:35 -04:00

73 lines
1.8 KiB
JavaScript

var isWindows = process.platform === 'win32'
var path = require('path')
var exec = require('child_process').exec
var osTmpdir = require('os-tmpdir')
var osHomedir = require('os-homedir')
// looking up envs is a bit costly.
// Also, sometimes we want to have a fallback
// Pass in a callback to wait for the fallback on failures
// After the first lookup, always returns the same thing.
function memo (key, lookup, fallback) {
var fell = false
var falling = false
exports[key] = function (cb) {
var val = lookup()
if (!val && !fell && !falling && fallback) {
fell = true
falling = true
exec(fallback, function (er, output, stderr) {
falling = false
if (er) return // oh well, we tried
val = output.trim()
})
}
exports[key] = function (cb) {
if (cb) process.nextTick(cb.bind(null, null, val))
return val
}
if (cb && !falling) process.nextTick(cb.bind(null, null, val))
return val
}
}
memo('user', function () {
return ( isWindows
? process.env.USERDOMAIN + '\\' + process.env.USERNAME
: process.env.USER
)
}, 'whoami')
memo('prompt', function () {
return isWindows ? process.env.PROMPT : process.env.PS1
})
memo('hostname', function () {
return isWindows ? process.env.COMPUTERNAME : process.env.HOSTNAME
}, 'hostname')
memo('tmpdir', function () {
return osTmpdir()
})
memo('home', function () {
return osHomedir()
})
memo('path', function () {
return (process.env.PATH ||
process.env.Path ||
process.env.path).split(isWindows ? ';' : ':')
})
memo('editor', function () {
return process.env.EDITOR ||
process.env.VISUAL ||
(isWindows ? 'notepad.exe' : 'vi')
})
memo('shell', function () {
return isWindows ? process.env.ComSpec || 'cmd'
: process.env.SHELL || 'bash'
})