- 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
79 lines
2.5 KiB
JavaScript
79 lines
2.5 KiB
JavaScript
"use strict"
|
|
// global key for user preferred registration
|
|
var REGISTRATION_KEY = '@@any-promise/REGISTRATION',
|
|
// Prior registration (preferred or detected)
|
|
registered = null
|
|
|
|
/**
|
|
* Registers the given implementation. An implementation must
|
|
* be registered prior to any call to `require("any-promise")`,
|
|
* typically on application load.
|
|
*
|
|
* If called with no arguments, will return registration in
|
|
* following priority:
|
|
*
|
|
* For Node.js:
|
|
*
|
|
* 1. Previous registration
|
|
* 2. global.Promise if node.js version >= 0.12
|
|
* 3. Auto detected promise based on first sucessful require of
|
|
* known promise libraries. Note this is a last resort, as the
|
|
* loaded library is non-deterministic. node.js >= 0.12 will
|
|
* always use global.Promise over this priority list.
|
|
* 4. Throws error.
|
|
*
|
|
* For Browser:
|
|
*
|
|
* 1. Previous registration
|
|
* 2. window.Promise
|
|
* 3. Throws error.
|
|
*
|
|
* Options:
|
|
*
|
|
* Promise: Desired Promise constructor
|
|
* global: Boolean - Should the registration be cached in a global variable to
|
|
* allow cross dependency/bundle registration? (default true)
|
|
*/
|
|
module.exports = function(root, loadImplementation){
|
|
return function register(implementation, opts){
|
|
implementation = implementation || null
|
|
opts = opts || {}
|
|
// global registration unless explicitly {global: false} in options (default true)
|
|
var registerGlobal = opts.global !== false;
|
|
|
|
// load any previous global registration
|
|
if(registered === null && registerGlobal){
|
|
registered = root[REGISTRATION_KEY] || null
|
|
}
|
|
|
|
if(registered !== null
|
|
&& implementation !== null
|
|
&& registered.implementation !== implementation){
|
|
// Throw error if attempting to redefine implementation
|
|
throw new Error('any-promise already defined as "'+registered.implementation+
|
|
'". You can only register an implementation before the first '+
|
|
' call to require("any-promise") and an implementation cannot be changed')
|
|
}
|
|
|
|
if(registered === null){
|
|
// use provided implementation
|
|
if(implementation !== null && typeof opts.Promise !== 'undefined'){
|
|
registered = {
|
|
Promise: opts.Promise,
|
|
implementation: implementation
|
|
}
|
|
} else {
|
|
// require implementation if implementation is specified but not provided
|
|
registered = loadImplementation(implementation)
|
|
}
|
|
|
|
if(registerGlobal){
|
|
// register preference globally in case multiple installations
|
|
root[REGISTRATION_KEY] = registered
|
|
}
|
|
}
|
|
|
|
return registered
|
|
}
|
|
}
|