- 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
95 lines
2.8 KiB
JavaScript
95 lines
2.8 KiB
JavaScript
"use strict"
|
|
module.exports = require('./loader')(global, loadImplementation);
|
|
|
|
/**
|
|
* Node.js version of loadImplementation.
|
|
*
|
|
* Requires the given implementation and returns the registration
|
|
* containing {Promise, implementation}
|
|
*
|
|
* If implementation is undefined or global.Promise, loads it
|
|
* Otherwise uses require
|
|
*/
|
|
function loadImplementation(implementation){
|
|
var impl = null
|
|
|
|
if(shouldPreferGlobalPromise(implementation)){
|
|
// if no implementation or env specified use global.Promise
|
|
impl = {
|
|
Promise: global.Promise,
|
|
implementation: 'global.Promise'
|
|
}
|
|
} else if(implementation){
|
|
// if implementation specified, require it
|
|
var lib = require(implementation)
|
|
impl = {
|
|
Promise: lib.Promise || lib,
|
|
implementation: implementation
|
|
}
|
|
} else {
|
|
// try to auto detect implementation. This is non-deterministic
|
|
// and should prefer other branches, but this is our last chance
|
|
// to load something without throwing error
|
|
impl = tryAutoDetect()
|
|
}
|
|
|
|
if(impl === null){
|
|
throw new Error('Cannot find any-promise implementation nor'+
|
|
' global.Promise. You must install polyfill or call'+
|
|
' require("any-promise/register") with your preferred'+
|
|
' implementation, e.g. require("any-promise/register/bluebird")'+
|
|
' on application load prior to any require("any-promise").')
|
|
}
|
|
|
|
return impl
|
|
}
|
|
|
|
/**
|
|
* Determines if the global.Promise should be preferred if an implementation
|
|
* has not been registered.
|
|
*/
|
|
function shouldPreferGlobalPromise(implementation){
|
|
if(implementation){
|
|
return implementation === 'global.Promise'
|
|
} else if(typeof global.Promise !== 'undefined'){
|
|
// Load global promise if implementation not specified
|
|
// Versions < 0.11 did not have global Promise
|
|
// Do not use for version < 0.12 as version 0.11 contained buggy versions
|
|
var version = (/v(\d+)\.(\d+)\.(\d+)/).exec(process.version)
|
|
return !(version && +version[1] == 0 && +version[2] < 12)
|
|
}
|
|
|
|
// do not have global.Promise or another implementation was specified
|
|
return false
|
|
}
|
|
|
|
/**
|
|
* Look for common libs as last resort there is no guarantee that
|
|
* this will return a desired implementation or even be deterministic.
|
|
* The priority is also nearly arbitrary. We are only doing this
|
|
* for older versions of Node.js <0.12 that do not have a reasonable
|
|
* global.Promise implementation and we the user has not registered
|
|
* the preference. This preserves the behavior of any-promise <= 0.1
|
|
* and may be deprecated or removed in the future
|
|
*/
|
|
function tryAutoDetect(){
|
|
var libs = [
|
|
"es6-promise",
|
|
"promise",
|
|
"native-promise-only",
|
|
"bluebird",
|
|
"rsvp",
|
|
"when",
|
|
"q",
|
|
"pinkie",
|
|
"lie",
|
|
"vow"]
|
|
var i = 0, len = libs.length
|
|
for(; i < len; i++){
|
|
try {
|
|
return loadImplementation(libs[i])
|
|
} catch(e){}
|
|
}
|
|
return null
|
|
}
|