- 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
260 lines
11 KiB
JavaScript
Executable File
260 lines
11 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
"use strict";
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
function _arg() {
|
|
const data = /*#__PURE__*/ _interopRequireDefault(require("arg"));
|
|
_arg = function() {
|
|
return data;
|
|
};
|
|
return data;
|
|
}
|
|
function _chalk() {
|
|
const data = /*#__PURE__*/ _interopRequireDefault(require("chalk"));
|
|
_chalk = function() {
|
|
return data;
|
|
};
|
|
return data;
|
|
}
|
|
function _debug() {
|
|
const data = /*#__PURE__*/ _interopRequireDefault(require("debug"));
|
|
_debug = function() {
|
|
return data;
|
|
};
|
|
return data;
|
|
}
|
|
function _getenv() {
|
|
const data = require("getenv");
|
|
_getenv = function() {
|
|
return data;
|
|
};
|
|
return data;
|
|
}
|
|
function _interopRequireDefault(obj) {
|
|
return obj && obj.__esModule ? obj : {
|
|
default: obj
|
|
};
|
|
}
|
|
function _getRequireWildcardCache(nodeInterop) {
|
|
if (typeof WeakMap !== "function") return null;
|
|
var cacheBabelInterop = new WeakMap();
|
|
var cacheNodeInterop = new WeakMap();
|
|
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
})(nodeInterop);
|
|
}
|
|
function _interopRequireWildcard(obj, nodeInterop) {
|
|
if (!nodeInterop && obj && obj.__esModule) {
|
|
return obj;
|
|
}
|
|
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
return {
|
|
default: obj
|
|
};
|
|
}
|
|
var cache = _getRequireWildcardCache(nodeInterop);
|
|
if (cache && cache.has(obj)) {
|
|
return cache.get(obj);
|
|
}
|
|
var newObj = {};
|
|
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
for(var key in obj){
|
|
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
if (desc && (desc.get || desc.set)) {
|
|
Object.defineProperty(newObj, key, desc);
|
|
} else {
|
|
newObj[key] = obj[key];
|
|
}
|
|
}
|
|
}
|
|
newObj.default = obj;
|
|
if (cache) {
|
|
cache.set(obj, newObj);
|
|
}
|
|
return newObj;
|
|
}
|
|
// Setup before requiring `debug`.
|
|
if ((0, _getenv().boolish)("EXPO_DEBUG", false)) {
|
|
_debug().default.enable("expo:*");
|
|
} else if (_debug().default.enabled("expo:")) {
|
|
process.env.EXPO_DEBUG = "1";
|
|
}
|
|
const defaultCmd = "start";
|
|
const commands = {
|
|
// Add a new command here
|
|
// NOTE(EvanBacon): Ensure every bundler-related command sets `NODE_ENV` as expected for the command.
|
|
run: ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/run/index.js"))).then((i)=>i.expoRun),
|
|
"run:ios": ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/run/ios/index.js"))).then((i)=>i.expoRunIos),
|
|
"run:android": ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/run/android/index.js"))).then((i)=>i.expoRunAndroid),
|
|
start: ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/start/index.js"))).then((i)=>i.expoStart),
|
|
prebuild: ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/prebuild/index.js"))).then((i)=>i.expoPrebuild),
|
|
config: ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/config/index.js"))).then((i)=>i.expoConfig),
|
|
export: ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/export/index.js"))).then((i)=>i.expoExport),
|
|
"export:web": ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/export/web/index.js"))).then((i)=>i.expoExportWeb),
|
|
"export:embed": ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/export/embed/index.js"))).then((i)=>i.expoExportEmbed),
|
|
// Auxiliary commands
|
|
install: ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/install/index.js"))).then((i)=>i.expoInstall),
|
|
add: ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/install/index.js"))).then((i)=>i.expoInstall),
|
|
customize: ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/customize/index.js"))).then((i)=>i.expoCustomize),
|
|
lint: ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/lint/index.js"))).then((i)=>i.expoLint),
|
|
// Auth
|
|
login: ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/login/index.js"))).then((i)=>i.expoLogin),
|
|
logout: ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/logout/index.js"))).then((i)=>i.expoLogout),
|
|
register: ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/register/index.js"))).then((i)=>i.expoRegister),
|
|
whoami: ()=>Promise.resolve().then(()=>/*#__PURE__*/ _interopRequireWildcard(require("../src/whoami/index.js"))).then((i)=>i.expoWhoami)
|
|
};
|
|
const args = (0, _arg().default)({
|
|
// Types
|
|
"--version": Boolean,
|
|
"--help": Boolean,
|
|
// NOTE(EvanBacon): This is here to silence warnings from processes that
|
|
// expect the global expo-cli.
|
|
"--non-interactive": Boolean,
|
|
// Aliases
|
|
"-v": "--version",
|
|
"-h": "--help"
|
|
}, {
|
|
permissive: true
|
|
});
|
|
if (args["--version"]) {
|
|
// Version is added in the build script.
|
|
console.log("0.18.31");
|
|
process.exit(0);
|
|
}
|
|
if (args["--non-interactive"]) {
|
|
console.warn(_chalk().default.yellow` {bold --non-interactive} is not supported, use {bold $CI=1} instead`);
|
|
}
|
|
// Check if we are running `npx expo <subcommand>` or `npx expo`
|
|
const isSubcommand = Boolean(commands[args._[0]]);
|
|
// Handle `--help` flag
|
|
if (!isSubcommand && args["--help"]) {
|
|
const { login , logout , whoami , register , start , install , add , export: _export , config , customize , prebuild , "run:ios": runIos , "run:android": runAndroid , // NOTE(EvanBacon): Don't document this command as it's a temporary
|
|
// workaround until we can use `expo export` for all production bundling.
|
|
// https://github.com/expo/expo/pull/21396/files#r1121025873
|
|
"export:embed": exportEmbed_unused , // The export:web command is deprecated. Hide it from the help prompt.
|
|
"export:web": exportWeb_unused , // Other ignored commands, these are intentially not listed in the `--help` output
|
|
run: _run , // NOTE(cedric): Still pending the migration to ESLint's flat config
|
|
lint: _lint , // All other commands
|
|
...others } = commands;
|
|
console.log((0, _chalk().default)`
|
|
{bold Usage}
|
|
{dim $} npx expo <command>
|
|
|
|
{bold Commands}
|
|
${Object.keys({
|
|
start,
|
|
export: _export,
|
|
...others
|
|
}).join(", ")}
|
|
${Object.keys({
|
|
"run:ios": runIos,
|
|
"run:android": runAndroid,
|
|
prebuild
|
|
}).join(", ")}
|
|
${Object.keys({
|
|
install,
|
|
customize,
|
|
config
|
|
}).join(", ")}
|
|
{dim ${Object.keys({
|
|
login,
|
|
logout,
|
|
whoami,
|
|
register
|
|
}).join(", ")}}
|
|
|
|
{bold Options}
|
|
--version, -v Version number
|
|
--help, -h Usage info
|
|
|
|
For more info run a command with the {bold --help} flag
|
|
{dim $} npx expo start --help
|
|
`);
|
|
process.exit(0);
|
|
}
|
|
// NOTE(EvanBacon): Squat some directory names to help with migration,
|
|
// users can still use folders named "send" or "eject" by using the fully qualified `npx expo start ./send`.
|
|
if (!isSubcommand) {
|
|
const migrationMap = {
|
|
init: "npx create-expo-app",
|
|
eject: "npx expo prebuild",
|
|
web: "npx expo start --web",
|
|
"start:web": "npx expo start --web",
|
|
"build:ios": "eas build -p ios",
|
|
"build:android": "eas build -p android",
|
|
"client:install:ios": "npx expo start --ios",
|
|
"client:install:android": "npx expo start --android",
|
|
doctor: "npx expo-doctor",
|
|
upgrade: "https://docs.expo.dev/workflow/upgrading-expo-sdk-walkthrough/",
|
|
"customize:web": "npx expo customize",
|
|
publish: "eas update",
|
|
"publish:set": "eas update",
|
|
"publish:rollback": "eas update",
|
|
"publish:history": "eas update",
|
|
"publish:details": "eas update",
|
|
"build:web": "npx expo export:web",
|
|
"credentials:manager": `eas credentials`,
|
|
"fetch:ios:certs": `eas credentials`,
|
|
"fetch:android:keystore": `eas credentials`,
|
|
"fetch:android:hashes": `eas credentials`,
|
|
"fetch:android:upload-cert": `eas credentials`,
|
|
"push:android:upload": `eas credentials`,
|
|
"push:android:show": `eas credentials`,
|
|
"push:android:clear": `eas credentials`,
|
|
url: `eas build:list`,
|
|
"url:ipa": `eas build:list`,
|
|
"url:apk": `eas build:list`,
|
|
webhooks: `eas webhook`,
|
|
"webhooks:add": `eas webhook:create`,
|
|
"webhooks:remove": `eas webhook:delete`,
|
|
"webhooks:update": `eas webhook:update`,
|
|
"build:status": `eas build:list`,
|
|
"upload:android": `eas submit -p android`,
|
|
"upload:ios": `eas submit -p ios`
|
|
};
|
|
// TODO: Log telemetry about invalid command used.
|
|
const subcommand = args._[0];
|
|
if (subcommand in migrationMap) {
|
|
const replacement = migrationMap[subcommand];
|
|
console.log();
|
|
const instruction = subcommand === "upgrade" ? "follow this guide" : "use";
|
|
console.log(_chalk().default.yellow` {gray $} {bold expo ${subcommand}} is not supported in the local CLI, please ${instruction} {bold ${replacement}} instead`);
|
|
console.log();
|
|
process.exit(1);
|
|
}
|
|
const deprecated = [
|
|
"send",
|
|
"client:ios"
|
|
];
|
|
if (deprecated.includes(subcommand)) {
|
|
console.log();
|
|
console.log(_chalk().default.yellow` {gray $} {bold expo ${subcommand}} is deprecated`);
|
|
console.log();
|
|
process.exit(1);
|
|
}
|
|
}
|
|
const command = isSubcommand ? args._[0] : defaultCmd;
|
|
const commandArgs = isSubcommand ? args._.slice(1) : args._;
|
|
// Push the help flag to the subcommand args.
|
|
if (args["--help"]) {
|
|
commandArgs.push("--help");
|
|
}
|
|
// Install exit hooks
|
|
process.on("SIGINT", ()=>process.exit(0));
|
|
process.on("SIGTERM", ()=>process.exit(0));
|
|
commands[command]().then((exec)=>{
|
|
exec(commandArgs);
|
|
if (!(0, _getenv().boolish)("EXPO_NO_TELEMETRY", false)) {
|
|
// NOTE(EvanBacon): Track some basic telemetry events indicating the command
|
|
// that was run. This can be disabled with the $EXPO_NO_TELEMETRY environment variable.
|
|
// We do this to determine how well deprecations are going before removing a command.
|
|
const { logEventAsync } = require("../src/utils/telemetry");
|
|
logEventAsync("action", {
|
|
action: `expo ${command}`
|
|
});
|
|
}
|
|
});
|
|
|
|
//# sourceMappingURL=cli.map
|