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
This commit is contained in:
Eric FELIXINE
2026-06-01 18:00:35 -04:00
parent 08ca495bde
commit e30ae8ed09
35578 changed files with 3703534 additions and 43 deletions

View File

@@ -0,0 +1,12 @@
import { IFilter, Entry } from '../types';
export default class AndroidFilter implements IFilter {
private readonly minPriority;
private filter;
constructor(minPriority?: number);
setFilterByTag(tags: string[]): void;
setFilterByApp(applicationId: string, adbPath?: string): void;
setFilterByMatch(regexes: RegExp[]): void;
setCustomFilter(patterns: string[]): void;
shouldInclude(entry: Entry): boolean;
}
//# sourceMappingURL=AndroidFilter.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"AndroidFilter.d.ts","sourceRoot":"","sources":["../../src/android/AndroidFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAM1C,MAAM,CAAC,OAAO,OAAO,aAAc,YAAW,OAAO;IACnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,MAAM,CAAS;gBAEX,WAAW,GAAE,MAAU;IAQnC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE;IAU7B,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAOtD,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE;IAalC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE;IAoBlC,aAAa,CAAC,KAAK,EAAE,KAAK;CAG3B"}

View File

@@ -0,0 +1,67 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _adb = require("./adb");
var _constants = require("./constants");
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
class AndroidFilter {
constructor(minPriority = 0) {
_defineProperty(this, "minPriority", void 0);
_defineProperty(this, "filter", void 0);
this.minPriority = minPriority; // Default filter by all
this.filter = entry => {
return entry.priority >= this.minPriority;
};
}
setFilterByTag(tags) {
this.filter = entry => {
return Boolean(entry.priority >= this.minPriority && entry.tag && tags.indexOf(entry.tag) > -1);
};
}
setFilterByApp(applicationId, adbPath) {
const pid = (0, _adb.getApplicationPid)(applicationId, adbPath);
this.filter = entry => {
return entry.priority >= this.minPriority && entry.pid === pid;
};
}
setFilterByMatch(regexes) {
this.filter = entry => {
return entry.priority >= this.minPriority && Boolean(regexes.find(reg => Boolean(entry.messages.find(message => reg.test(message)))));
};
}
setCustomFilter(patterns) {
const tagFilters = patterns.reduce((acc, pattern) => {
const [tag, priority] = pattern.split(':');
return { ...acc,
[tag]: _constants.Priority.fromLetter(priority)
};
}, {});
this.filter = entry => {
return entry.tag && entry.priority >= (tagFilters[entry.tag] || _constants.Priority.SILENT) || entry.priority >= (tagFilters['*'] || _constants.Priority.UNKNOWN);
};
}
shouldInclude(entry) {
return this.filter(entry);
}
}
exports.default = AndroidFilter;
//# sourceMappingURL=AndroidFilter.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../src/android/AndroidFilter.ts"],"names":["AndroidFilter","constructor","minPriority","filter","entry","priority","setFilterByTag","tags","Boolean","tag","indexOf","setFilterByApp","applicationId","adbPath","pid","setFilterByMatch","regexes","find","reg","messages","message","test","setCustomFilter","patterns","tagFilters","reduce","acc","pattern","split","Priority","fromLetter","SILENT","UNKNOWN","shouldInclude"],"mappings":";;;;;;;AACA;;AACA;;;;AAIe,MAAMA,aAAN,CAAuC;AAIpDC,EAAAA,WAAW,CAACC,WAAmB,GAAG,CAAvB,EAA0B;AAAA;;AAAA;;AACnC,SAAKA,WAAL,GAAmBA,WAAnB,CADmC,CAEnC;;AACA,SAAKC,MAAL,GAAeC,KAAD,IAAkB;AAC9B,aAAOA,KAAK,CAACC,QAAN,IAAkB,KAAKH,WAA9B;AACD,KAFD;AAGD;;AAEDI,EAAAA,cAAc,CAACC,IAAD,EAAiB;AAC7B,SAAKJ,MAAL,GAAeC,KAAD,IAAkB;AAC9B,aAAOI,OAAO,CACZJ,KAAK,CAACC,QAAN,IAAkB,KAAKH,WAAvB,IACEE,KAAK,CAACK,GADR,IAEEF,IAAI,CAACG,OAAL,CAAaN,KAAK,CAACK,GAAnB,IAA0B,CAAC,CAHjB,CAAd;AAKD,KAND;AAOD;;AAEDE,EAAAA,cAAc,CAACC,aAAD,EAAwBC,OAAxB,EAA0C;AACtD,UAAMC,GAAG,GAAG,4BAAkBF,aAAlB,EAAiCC,OAAjC,CAAZ;;AACA,SAAKV,MAAL,GAAeC,KAAD,IAAkB;AAC9B,aAAOA,KAAK,CAACC,QAAN,IAAkB,KAAKH,WAAvB,IAAsCE,KAAK,CAACU,GAAN,KAAcA,GAA3D;AACD,KAFD;AAGD;;AAEDC,EAAAA,gBAAgB,CAACC,OAAD,EAAoB;AAClC,SAAKb,MAAL,GAAeC,KAAD,IAAkB;AAC9B,aACEA,KAAK,CAACC,QAAN,IAAkB,KAAKH,WAAvB,IACAM,OAAO,CACLQ,OAAO,CAACC,IAAR,CAAcC,GAAD,IACXV,OAAO,CAACJ,KAAK,CAACe,QAAN,CAAeF,IAAf,CAAqBG,OAAD,IAAqBF,GAAG,CAACG,IAAJ,CAASD,OAAT,CAAzC,CAAD,CADT,CADK,CAFT;AAQD,KATD;AAUD;;AAEDE,EAAAA,eAAe,CAACC,QAAD,EAAqB;AAClC,UAAMC,UAAqC,GAAGD,QAAQ,CAACE,MAAT,CAC5C,CAACC,GAAD,EAAiCC,OAAjC,KAAqD;AACnD,YAAM,CAAClB,GAAD,EAAMJ,QAAN,IAAkBsB,OAAO,CAACC,KAAR,CAAc,GAAd,CAAxB;AACA,aAAO,EACL,GAAGF,GADE;AAEL,SAACjB,GAAD,GAAOoB,oBAASC,UAAT,CAAoBzB,QAApB;AAFF,OAAP;AAID,KAP2C,EAQ5C,EAR4C,CAA9C;;AAUA,SAAKF,MAAL,GAAeC,KAAD,IAAkB;AAC9B,aACGA,KAAK,CAACK,GAAN,IACCL,KAAK,CAACC,QAAN,KAAmBmB,UAAU,CAACpB,KAAK,CAACK,GAAP,CAAV,IAAyBoB,oBAASE,MAArD,CADF,IAEA3B,KAAK,CAACC,QAAN,KAAmBmB,UAAU,CAAC,GAAD,CAAV,IAAmBK,oBAASG,OAA/C,CAHF;AAKD,KAND;AAOD;;AAEDC,EAAAA,aAAa,CAAC7B,KAAD,EAAe;AAC1B,WAAO,KAAKD,MAAL,CAAYC,KAAZ,CAAP;AACD;;AAhEmD","sourcesContent":["import { IFilter, Entry } from '../types';\nimport { getApplicationPid } from './adb';\nimport { Priority } from './constants';\n\ntype Filter = (entry: Entry) => boolean;\n\nexport default class AndroidFilter implements IFilter {\n private readonly minPriority: number;\n private filter: Filter;\n\n constructor(minPriority: number = 0) {\n this.minPriority = minPriority;\n // Default filter by all\n this.filter = (entry: Entry) => {\n return entry.priority >= this.minPriority;\n };\n }\n\n setFilterByTag(tags: string[]) {\n this.filter = (entry: Entry) => {\n return Boolean(\n entry.priority >= this.minPriority &&\n entry.tag &&\n tags.indexOf(entry.tag) > -1\n );\n };\n }\n\n setFilterByApp(applicationId: string, adbPath?: string) {\n const pid = getApplicationPid(applicationId, adbPath);\n this.filter = (entry: Entry) => {\n return entry.priority >= this.minPriority && entry.pid === pid;\n };\n }\n\n setFilterByMatch(regexes: RegExp[]) {\n this.filter = (entry: Entry) => {\n return (\n entry.priority >= this.minPriority &&\n Boolean(\n regexes.find((reg: RegExp) =>\n Boolean(entry.messages.find((message: string) => reg.test(message)))\n )\n )\n );\n };\n }\n\n setCustomFilter(patterns: string[]) {\n const tagFilters: { [key: string]: number } = patterns.reduce(\n (acc: { [key: string]: number }, pattern: string) => {\n const [tag, priority] = pattern.split(':');\n return {\n ...acc,\n [tag]: Priority.fromLetter(priority),\n };\n },\n {}\n );\n this.filter = (entry: Entry) => {\n return (\n (entry.tag &&\n entry.priority >= (tagFilters[entry.tag] || Priority.SILENT)) ||\n entry.priority >= (tagFilters['*'] || Priority.UNKNOWN)\n );\n };\n }\n\n shouldInclude(entry: Entry) {\n return this.filter(entry);\n }\n}\n"],"file":"AndroidFilter.js"}

View File

@@ -0,0 +1,8 @@
import { IParser, Entry } from '../types';
export default class AndroidParser implements IParser {
static timeRegex: RegExp;
static headerRegex: RegExp;
splitMessages(raw: string): string[];
parseMessages(messages: string[]): Entry[];
}
//# sourceMappingURL=AndroidParser.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"AndroidParser.d.ts","sourceRoot":"","sources":["../../src/android/AndroidParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAG1C,MAAM,CAAC,OAAO,OAAO,aAAc,YAAW,OAAO;IACnD,MAAM,CAAC,SAAS,EAAE,MAAM,CAAoD;IAC5E,MAAM,CAAC,WAAW,EAAE,MAAM,CAAkC;IAE5D,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAepC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE;CAmD3C"}

View File

@@ -0,0 +1,69 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _dayjs = _interopRequireDefault(require("dayjs"));
var _constants = require("./constants");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
class AndroidParser {
splitMessages(raw) {
const messages = [];
let data = raw.toString();
let match = data.match(AndroidParser.timeRegex);
while (match) {
const timeHeader = match[0];
data = data.slice((match.index || 0) + timeHeader.length);
const nextMatch = data.match(AndroidParser.timeRegex);
const body = nextMatch ? data.slice(0, nextMatch.index) : data;
messages.push(`${timeHeader} ${body}`);
match = nextMatch;
}
return messages;
}
parseMessages(messages) {
return messages.map(rawMessage => {
const timeMatch = rawMessage.match(AndroidParser.timeRegex);
if (!timeMatch) {
throw new Error(`Time regex was not matched in message: ${rawMessage}`);
}
const headerMatch = rawMessage.slice(timeMatch[0].length).match(AndroidParser.headerRegex) || ['', 'U', 'unknown', '-1'];
const [, priority, tag, pid] = headerMatch;
return {
platform: 'android',
date: (0, _dayjs.default)().set('month', parseInt(timeMatch[1], 10)).set('day', parseInt(timeMatch[2], 10)).set('hour', parseInt(timeMatch[3], 10)).set('minute', parseInt(timeMatch[4], 10)).set('second', parseInt(timeMatch[5], 10)).set('millisecond', 0),
pid: parseInt(pid.trim(), 10) || 0,
priority: _constants.Priority.fromLetter(priority),
tag: tag.trim() || 'unknown',
messages: [rawMessage.slice(timeMatch[0].length + headerMatch[0].length).trim()]
};
}).reduce((acc, entry) => {
if (acc.length > 0 && acc[acc.length - 1].date.isSame(entry.date) && acc[acc.length - 1].tag === entry.tag && acc[acc.length - 1].pid === entry.pid && acc[acc.length - 1].priority === entry.priority) {
acc[acc.length - 1].messages.push(...entry.messages);
return acc;
}
return [...acc, entry];
}, []);
}
}
exports.default = AndroidParser;
_defineProperty(AndroidParser, "timeRegex", /(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}).\d{3}/m);
_defineProperty(AndroidParser, "headerRegex", /^\s*(\w)\/(.+)\(([\s\d]+)\):/);
//# sourceMappingURL=AndroidParser.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,7 @@
/// <reference types="node" />
import { ChildProcess } from 'child_process';
export declare function runAndroidLoggingProcess(adbPath?: string): ChildProcess;
export declare function getAdbPath(customPath?: string): string;
export declare function spawnLogcatProcess(adbPath: string): ChildProcess;
export declare function getApplicationPid(applicationId: string, adbPath?: string): number;
//# sourceMappingURL=adb.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"adb.d.ts","sourceRoot":"","sources":["../../src/android/adb.ts"],"names":[],"mappings":";AAAA,OAAO,EAAuB,YAAY,EAAE,MAAM,eAAe,CAAC;AAUlE,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CAGvE;AAED,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAQtD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAoBhE;AAED,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAsBR"}

View File

@@ -0,0 +1,65 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.runAndroidLoggingProcess = runAndroidLoggingProcess;
exports.getAdbPath = getAdbPath;
exports.spawnLogcatProcess = spawnLogcatProcess;
exports.getApplicationPid = getApplicationPid;
var _child_process = require("child_process");
var _path = _interopRequireDefault(require("path"));
var _errors = require("../errors");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function runAndroidLoggingProcess(adbPath) {
const execPath = getAdbPath(adbPath);
return spawnLogcatProcess(execPath);
}
function getAdbPath(customPath) {
if (customPath) {
return _path.default.resolve(customPath);
}
return process.env.ANDROID_HOME ? `${process.env.ANDROID_HOME}/platform-tools/adb` : 'adb';
}
function spawnLogcatProcess(adbPath) {
try {
(0, _child_process.execFileSync)(adbPath, ['logcat', '-c']);
} catch (error) {
throw new _errors.CodeError(_errors.ERR_ANDROID_CANNOT_CLEAN_LOGCAT_BUFFER, error.message);
}
try {
return (0, _child_process.spawn)(adbPath, ['logcat', '-v', 'time', 'process', 'tag'], {
stdio: 'pipe'
});
} catch (error) {
throw new _errors.CodeError(_errors.ERR_ANDROID_CANNOT_START_LOGCAT, error.message);
}
}
function getApplicationPid(applicationId, adbPath) {
let output;
try {
output = (0, _child_process.execFileSync)(getAdbPath(adbPath), ['shell', 'pidof', '-s', applicationId]);
} catch (error) {
throw new _errors.CodeError(_errors.ERR_ANDROID_CANNOT_GET_APP_PID, error.message);
}
const pid = output ? parseInt(output.toString(), 10) : NaN;
if (isNaN(pid)) {
throw new _errors.CodeError(_errors.ERR_ANDROID_UNPROCESSABLE_PID);
}
return pid;
}
//# sourceMappingURL=adb.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../src/android/adb.ts"],"names":["runAndroidLoggingProcess","adbPath","execPath","getAdbPath","spawnLogcatProcess","customPath","path","resolve","process","env","ANDROID_HOME","error","CodeError","ERR_ANDROID_CANNOT_CLEAN_LOGCAT_BUFFER","message","stdio","ERR_ANDROID_CANNOT_START_LOGCAT","getApplicationPid","applicationId","output","ERR_ANDROID_CANNOT_GET_APP_PID","pid","parseInt","toString","NaN","isNaN","ERR_ANDROID_UNPROCESSABLE_PID"],"mappings":";;;;;;;;;;AAAA;;AACA;;AACA;;;;AAQO,SAASA,wBAAT,CAAkCC,OAAlC,EAAkE;AACvE,QAAMC,QAAQ,GAAGC,UAAU,CAACF,OAAD,CAA3B;AACA,SAAOG,kBAAkB,CAACF,QAAD,CAAzB;AACD;;AAEM,SAASC,UAAT,CAAoBE,UAApB,EAAiD;AACtD,MAAIA,UAAJ,EAAgB;AACd,WAAOC,cAAKC,OAAL,CAAaF,UAAb,CAAP;AACD;;AAED,SAAOG,OAAO,CAACC,GAAR,CAAYC,YAAZ,GACF,GAAEF,OAAO,CAACC,GAAR,CAAYC,YAAa,qBADzB,GAEH,KAFJ;AAGD;;AAEM,SAASN,kBAAT,CAA4BH,OAA5B,EAA2D;AAChE,MAAI;AACF,qCAAaA,OAAb,EAAsB,CAAC,QAAD,EAAW,IAAX,CAAtB;AACD,GAFD,CAEE,OAAOU,KAAP,EAAc;AACd,UAAM,IAAIC,iBAAJ,CACJC,8CADI,EAEHF,KAAD,CAAiBG,OAFb,CAAN;AAID;;AAED,MAAI;AACF,WAAO,0BAAMb,OAAN,EAAe,CAAC,QAAD,EAAW,IAAX,EAAiB,MAAjB,EAAyB,SAAzB,EAAoC,KAApC,CAAf,EAA2D;AAChEc,MAAAA,KAAK,EAAE;AADyD,KAA3D,CAAP;AAGD,GAJD,CAIE,OAAOJ,KAAP,EAAc;AACd,UAAM,IAAIC,iBAAJ,CACJI,uCADI,EAEHL,KAAD,CAAiBG,OAFb,CAAN;AAID;AACF;;AAEM,SAASG,iBAAT,CACLC,aADK,EAELjB,OAFK,EAGG;AACR,MAAIkB,MAAJ;;AACA,MAAI;AACFA,IAAAA,MAAM,GAAG,iCAAahB,UAAU,CAACF,OAAD,CAAvB,EAAkC,CACzC,OADyC,EAEzC,OAFyC,EAGzC,IAHyC,EAIzCiB,aAJyC,CAAlC,CAAT;AAMD,GAPD,CAOE,OAAOP,KAAP,EAAc;AACd,UAAM,IAAIC,iBAAJ,CACJQ,sCADI,EAEHT,KAAD,CAAiBG,OAFb,CAAN;AAID;;AAED,QAAMO,GAAG,GAAGF,MAAM,GAAGG,QAAQ,CAACH,MAAM,CAACI,QAAP,EAAD,EAAoB,EAApB,CAAX,GAAqCC,GAAvD;;AACA,MAAIC,KAAK,CAACJ,GAAD,CAAT,EAAgB;AACd,UAAM,IAAIT,iBAAJ,CAAcc,qCAAd,CAAN;AACD;;AAED,SAAOL,GAAP;AACD","sourcesContent":["import { spawn, execFileSync, ChildProcess } from 'child_process';\nimport path from 'path';\nimport {\n CodeError,\n ERR_ANDROID_UNPROCESSABLE_PID,\n ERR_ANDROID_CANNOT_GET_APP_PID,\n ERR_ANDROID_CANNOT_CLEAN_LOGCAT_BUFFER,\n ERR_ANDROID_CANNOT_START_LOGCAT,\n} from '../errors';\n\nexport function runAndroidLoggingProcess(adbPath?: string): ChildProcess {\n const execPath = getAdbPath(adbPath);\n return spawnLogcatProcess(execPath);\n}\n\nexport function getAdbPath(customPath?: string): string {\n if (customPath) {\n return path.resolve(customPath);\n }\n\n return process.env.ANDROID_HOME\n ? `${process.env.ANDROID_HOME}/platform-tools/adb`\n : 'adb';\n}\n\nexport function spawnLogcatProcess(adbPath: string): ChildProcess {\n try {\n execFileSync(adbPath, ['logcat', '-c']);\n } catch (error) {\n throw new CodeError(\n ERR_ANDROID_CANNOT_CLEAN_LOGCAT_BUFFER,\n (error as Error).message\n );\n }\n\n try {\n return spawn(adbPath, ['logcat', '-v', 'time', 'process', 'tag'], {\n stdio: 'pipe',\n });\n } catch (error) {\n throw new CodeError(\n ERR_ANDROID_CANNOT_START_LOGCAT,\n (error as Error).message\n );\n }\n}\n\nexport function getApplicationPid(\n applicationId: string,\n adbPath?: string\n): number {\n let output: Buffer | String | undefined;\n try {\n output = execFileSync(getAdbPath(adbPath), [\n 'shell',\n 'pidof',\n '-s',\n applicationId,\n ]);\n } catch (error) {\n throw new CodeError(\n ERR_ANDROID_CANNOT_GET_APP_PID,\n (error as Error).message\n );\n }\n\n const pid = output ? parseInt(output.toString(), 10) : NaN;\n if (isNaN(pid)) {\n throw new CodeError(ERR_ANDROID_UNPROCESSABLE_PID);\n }\n\n return pid;\n}\n"],"file":"adb.js"}

View File

@@ -0,0 +1,27 @@
declare const codes: {
UNKNOWN: number;
VERBOSE: number;
DEBUG: number;
INFO: number;
WARN: number;
ERROR: number;
FATAL: number;
SILENT: number;
};
export declare type PriorityNames = keyof typeof codes;
export declare const Priority: {
fromName(name: "UNKNOWN" | "VERBOSE" | "DEBUG" | "INFO" | "WARN" | "ERROR" | "FATAL" | "SILENT"): number;
toName(code: number): "UNKNOWN" | "VERBOSE" | "DEBUG" | "INFO" | "WARN" | "ERROR" | "FATAL" | "SILENT";
fromLetter(letter: string): number;
toLetter(code: number): string;
UNKNOWN: number;
VERBOSE: number;
DEBUG: number;
INFO: number;
WARN: number;
ERROR: number;
FATAL: number;
SILENT: number;
};
export {};
//# sourceMappingURL=constants.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/android/constants.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,KAAK;;;;;;;;;CASV,CAAC;AAEF,oBAAY,aAAa,GAAG,MAAM,OAAO,KAAK,CAAC;AAE/C,eAAO,MAAM,QAAQ;;;;;;;;;;;;;CAuBpB,CAAC"}

View File

@@ -0,0 +1,38 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Priority = void 0;
const codes = {
UNKNOWN: 0,
VERBOSE: 1,
DEBUG: 2,
INFO: 3,
WARN: 4,
ERROR: 5,
FATAL: 6,
SILENT: 7
};
const Priority = { ...codes,
fromName(name) {
const value = codes[name.toUpperCase()];
return value ? value : 0;
},
toName(code) {
return Object.keys(codes).find(key => codes[key] === code) || 'UNKNOWN';
},
fromLetter(letter) {
return codes[Object.keys(codes).find(key => key[0] === letter.toUpperCase()) || 'UNKNOWN'];
},
toLetter(code) {
return Priority.toName(code)[0];
}
};
exports.Priority = Priority;
//# sourceMappingURL=constants.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../src/android/constants.ts"],"names":["codes","UNKNOWN","VERBOSE","DEBUG","INFO","WARN","ERROR","FATAL","SILENT","Priority","fromName","name","value","toUpperCase","toName","code","Object","keys","find","key","fromLetter","letter","toLetter"],"mappings":";;;;;;AAAA,MAAMA,KAAK,GAAG;AACZC,EAAAA,OAAO,EAAE,CADG;AAEZC,EAAAA,OAAO,EAAE,CAFG;AAGZC,EAAAA,KAAK,EAAE,CAHK;AAIZC,EAAAA,IAAI,EAAE,CAJM;AAKZC,EAAAA,IAAI,EAAE,CALM;AAMZC,EAAAA,KAAK,EAAE,CANK;AAOZC,EAAAA,KAAK,EAAE,CAPK;AAQZC,EAAAA,MAAM,EAAE;AARI,CAAd;AAaO,MAAMC,QAAQ,GAAG,EACtB,GAAGT,KADmB;;AAEtBU,EAAAA,QAAQ,CAACC,IAAD,EAA8B;AACpC,UAAMC,KAAK,GAAGZ,KAAK,CAACW,IAAI,CAACE,WAAL,EAAD,CAAnB;AACA,WAAOD,KAAK,GAAGA,KAAH,GAAW,CAAvB;AACD,GALqB;;AAMtBE,EAAAA,MAAM,CAACC,IAAD,EAA8B;AAClC,WACGC,MAAM,CAACC,IAAP,CAAYjB,KAAZ,CAAD,CAAwCkB,IAAxC,CACGC,GAAD,IAAwBnB,KAAK,CAACmB,GAAD,CAAL,KAAeJ,IADzC,KAEK,SAHP;AAKD,GAZqB;;AAatBK,EAAAA,UAAU,CAACC,MAAD,EAAyB;AACjC,WAAOrB,KAAK,CACTgB,MAAM,CAACC,IAAP,CAAYjB,KAAZ,CAAD,CAAwCkB,IAAxC,CACGC,GAAD,IAAwBA,GAAG,CAAC,CAAD,CAAH,KAAWE,MAAM,CAACR,WAAP,EADrC,KAEK,SAHK,CAAZ;AAKD,GAnBqB;;AAoBtBS,EAAAA,QAAQ,CAACP,IAAD,EAAuB;AAC7B,WAAON,QAAQ,CAACK,MAAT,CAAgBC,IAAhB,EAAsB,CAAtB,CAAP;AACD;;AAtBqB,CAAjB","sourcesContent":["const codes = {\n UNKNOWN: 0,\n VERBOSE: 1,\n DEBUG: 2,\n INFO: 3,\n WARN: 4,\n ERROR: 5,\n FATAL: 6,\n SILENT: 7,\n};\n\nexport type PriorityNames = keyof typeof codes;\n\nexport const Priority = {\n ...codes,\n fromName(name: PriorityNames): number {\n const value = codes[name.toUpperCase() as PriorityNames];\n return value ? value : 0;\n },\n toName(code: number): PriorityNames {\n return (\n (Object.keys(codes) as PriorityNames[]).find(\n (key: PriorityNames) => codes[key] === code\n ) || 'UNKNOWN'\n );\n },\n fromLetter(letter: string): number {\n return codes[\n (Object.keys(codes) as PriorityNames[]).find(\n (key: PriorityNames) => key[0] === letter.toUpperCase()\n ) || 'UNKNOWN'\n ];\n },\n toLetter(code: number): string {\n return Priority.toName(code)[0];\n },\n};\n"],"file":"constants.js"}