From de2f04f31f29e976fd98648736ee9d39cf71754b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=84=86=E8=96=AF=E9=A5=BC?= Date: Mon, 2 Dec 2024 16:53:09 +0800 Subject: [PATCH] feat: Console Update CHANGELOG.md Update response.dev.js Update response.js Update setENV.mjs --- CHANGELOG.md | 6 +++ src/class/AirQuality.mjs | 78 ++++++++++++++--------------- src/class/ColorfulClouds.mjs | 34 ++++++------- src/class/ForecastNextHour.mjs | 67 +++++++++++++------------ src/class/QWeather.mjs | 66 ++++++++++++------------ src/class/WAQI.mjs | 50 +++++++++--------- src/class/WeatherKit2.mjs | 10 ++-- src/function/parseWeatherKitURL.mjs | 8 +-- src/function/providerNameToLogo.mjs | 6 +-- src/function/setENV.mjs | 9 ++-- src/response.dev.js | 73 +++++++++++++-------------- src/response.js | 42 ++++++++-------- 12 files changed, 226 insertions(+), 223 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1dc2ff2..d2c6c56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ +### 🛠️ Bug Fixes + * 修复 `$argument` 和 `$persistentStore` 载入顺序颠倒的问题 + * 正确顺序为先读取 `$argument` 再读取 `$persistentStore (BoxJs)` + * 即,有相同键名时,`$persistentStore (BoxJs)` 的值会覆盖 `$argument` 的值 + ### 🔣 Dependencies * 升级了 `@nsnanocat/util` * `util` 由 `submodule` 更改为 `package` * `$platform` 改为 `$app` + * 使用了全新的 `Console` polyfill diff --git a/src/class/AirQuality.mjs b/src/class/AirQuality.mjs index 464f2fc..fbe26b9 100644 --- a/src/class/AirQuality.mjs +++ b/src/class/AirQuality.mjs @@ -1,4 +1,4 @@ -import { log } from "@nsnanocat/util"; +import { Console } from "@nsnanocat/util"; export default class AirQuality { static Name = "AirQuality"; @@ -429,58 +429,58 @@ export default class AirQuality { }; static Pollutants(pollutants = [], scale = "WAQI_InstantCast") { - log(`☑️ Pollutants, scale: ${scale}`, ""); + Console.log("☑️ Pollutants", `scale: ${scale}`); pollutants = pollutants.map(pollutant => { // Convert unit based on standard - const PollutantStandard = this.#Config.Scales[scale].pollutants[pollutant.pollutantType]; - pollutant.convertedAmount = this.ConvertUnit(pollutant.amount, pollutant.units, PollutantStandard.units, PollutantStandard.ppxToXGM3); + const PollutantStandard = AirQuality.#Config.Scales[scale].pollutants[pollutant.pollutantType]; + pollutant.convertedAmount = AirQuality.ConvertUnit(pollutant.amount, pollutant.units, PollutantStandard.units, PollutantStandard.ppxToXGM3); pollutant.convertedUnits = PollutantStandard.units; pollutant = { ...PollutantStandard, ...pollutant }; // Calculate AQI for each pollutant let categoryIndexKey; for (const [key, value] of Object.entries(pollutant.ranges)) { - categoryIndexKey = parseInt(key, 10); + categoryIndexKey = Number.parseInt(key, 10); if (pollutant.convertedAmount >= value[0] && pollutant.convertedAmount <= value[1]) break; }; pollutant.range = pollutant.ranges[categoryIndexKey]; - pollutant.categoryIndex = parseInt(categoryIndexKey, 10); - pollutant.category = this.#Config.Scales[scale].categoryIndex[categoryIndexKey]; + pollutant.categoryIndex = Number.parseInt(categoryIndexKey, 10); + pollutant.category = AirQuality.#Config.Scales[scale].categoryIndex[categoryIndexKey]; pollutant.AQI = Math.round( ((pollutant.category[1] - pollutant.category[0]) * (pollutant.convertedAmount - pollutant.range[0])) / (pollutant.range[1] - pollutant.range[0]) + pollutant.category[0], ); return pollutant; }); - //log(`🚧 Pollutants, pollutants: ${JSON.stringify(pollutants, null, 2)}`, ""); - log(`✅ Pollutants`, ""); + //Console.debug(`pollutants: ${JSON.stringify(pollutants, null, 2)}`); + Console.log("✅ Pollutants"); return pollutants; }; static ConvertScale(pollutants = [], scale = "WAQI_InstantCast", convertUnits = false) { - log(`☑️ ConvertScale`, ""); - pollutants = this.Pollutants(pollutants, scale); + Console.log("☑️ ConvertScale"); + pollutants = AirQuality.Pollutants(pollutants, scale); const { AQI: index, pollutantType: primaryPollutant } = pollutants.reduce((previous, current) => previous.AQI > current.AQI ? previous : current); - let airQuality = { + const airQuality = { "index": index, "pollutants": pollutants, - "scale": this.#Config.Scales[scale].scale, + "scale": AirQuality.#Config.Scales[scale].scale, "primaryPollutant": primaryPollutant, - "categoryIndex": this.CategoryIndex(index, scale), + "categoryIndex": AirQuality.CategoryIndex(index, scale), }; - airQuality.isSignificant = airQuality.categoryIndex >= this.#Config.Scales[scale].significant; + airQuality.isSignificant = airQuality.categoryIndex >= AirQuality.#Config.Scales[scale].significant; if (convertUnits) airQuality.pollutants = airQuality.pollutants.map(pollutant => { pollutant.amount = pollutant.convertedAmount; pollutant.units = pollutant.convertedUnits; return pollutant; }); - //log(`🚧 ConvertScale, airQuality: ${JSON.stringify(airQuality, null, 2)}`, ""); - log(`✅ ConvertScale`, ""); + //Console.debug(`airQuality: ${JSON.stringify(airQuality, null, 2)}`); + Console.log("✅ ConvertScale"); return airQuality; }; - static ConvertUnit(amount = Number(), unitFrom, unitTo, ppxToXGM3Value = -1) { - //log(`☑️ ConvertUnit`, ""); - //log(`☑️ ConvertUnit\namount: ${amount} ppxToXGM3Value: ${ppxToXGM3Value}\nunitFrom: ${unitFrom} unitTo: ${unitTo}`, ""); + static ConvertUnit(amount, unitFrom, unitTo, ppxToXGM3Value = -1) { + Console.log("☑️ ConvertUnit"); + Console.debug(`amount: ${amount}`, `ppxToXGM3Value: ${ppxToXGM3Value}`, `unitFrom: ${unitFrom}`, `unitTo: ${unitTo}`); if (amount < 0) amount = -1; else switch (unitFrom) { case 'PARTS_PER_MILLION': @@ -494,10 +494,10 @@ export default class AirQuality { amount = amount * ppxToXGM3Value; break; case 'MICROGRAMS_PER_CUBIC_METER': { - const inPpb = this.ConvertUnit(amount, unitFrom, 'PARTS_PER_BILLION', ppxToXGM3Value); + const inPpb = AirQuality.ConvertUnit(amount, unitFrom, 'PARTS_PER_BILLION', ppxToXGM3Value); amount = inPpb * ppxToXGM3Value; break; - }; + } default: amount = -1; break; @@ -511,10 +511,10 @@ export default class AirQuality { amount = amount * 0.001; break; case 'MILLIGRAMS_PER_CUBIC_METER': { - const inPpm = this.ConvertUnit(amount, unitFrom, 'PARTS_PER_MILLION', ppxToXGM3Value); + const inPpm = AirQuality.ConvertUnit(amount, unitFrom, 'PARTS_PER_MILLION', ppxToXGM3Value); amount = inPpm * ppxToXGM3Value; break; - }; + } case 'MICROGRAMS_PER_CUBIC_METER': amount = amount * ppxToXGM3Value; break; @@ -534,10 +534,10 @@ export default class AirQuality { amount = amount / ppxToXGM3Value; break; case 'PARTS_PER_BILLION': { - const inUgM3 = this.ConvertUnit(amount, unitFrom, 'MICROGRAMS_PER_CUBIC_METER', ppxToXGM3Value); + const inUgM3 = AirQuality.ConvertUnit(amount, unitFrom, 'MICROGRAMS_PER_CUBIC_METER', ppxToXGM3Value); amount = inUgM3 / ppxToXGM3Value; break; - }; + } default: amount = -1; break; @@ -551,10 +551,10 @@ export default class AirQuality { amount = amount * 0.001; break; case 'PARTS_PER_MILLION': { - const inMgM3 = this.ConvertUnit(amount, unitFrom, 'MILLIGRAMS_PER_CUBIC_METER', ppxToXGM3Value); + const inMgM3 = AirQuality.ConvertUnit(amount, unitFrom, 'MILLIGRAMS_PER_CUBIC_METER', ppxToXGM3Value); amount = inMgM3 / ppxToXGM3Value; break; - }; + } case 'PARTS_PER_BILLION': amount = amount / ppxToXGM3Value; break; @@ -567,7 +567,7 @@ export default class AirQuality { amount = -1; break; }; - //log(`✅ ConvertUnit, amount: ${amount}`, ""); + //Console.log("✅ ConvertUnit", `amount: ${amount}`); return amount; }; @@ -576,21 +576,21 @@ export default class AirQuality { case "number": break; case "string": - aqi = parseInt(aqi, 10); + aqi = Number.parseInt(aqi, 10); break; }; - log(`☑️ CategoryIndex, aqi: ${aqi}`, ""); + Console.log("☑️ CategoryIndex", `aqi: ${aqi}`); let categoryIndex; - for (const [key, value] of Object.entries(this.#Config.Scales[scale].categoryIndex)) { - categoryIndex = parseInt(key, 10); + for (const [key, value] of Object.entries(AirQuality.#Config.Scales[scale].categoryIndex)) { + categoryIndex = Number.parseInt(key, 10); if (aqi >= value[0] && aqi <= value[1]) break; }; - log(`✅ CategoryIndex, categoryIndex: ${categoryIndex}`, ""); + Console.log("✅ CategoryIndex", `categoryIndex: ${categoryIndex}`); return categoryIndex; }; static ComparisonTrend(todayAQI, yesterdayAQI) { - log(`☑️ ComparisonTrend, todayAQI: ${todayAQI}, yesterdayAQI: ${yesterdayAQI}`, ""); + Console.log("☑️ ComparisonTrend", `todayAQI: ${todayAQI}`, `yesterdayAQI: ${yesterdayAQI}`); let trend = "UNKNOWN"; if (isNaN(todayAQI - yesterdayAQI)) trend = "UNKNOWN"; else switch (todayAQI - yesterdayAQI) { @@ -636,12 +636,12 @@ export default class AirQuality { }; break; }; - log(`✅ ComparisonTrend, trend: ${trend}`, ""); + Console.log("✅ ComparisonTrend", `trend: ${trend}`); return trend; }; static FixUnits(pollutants = []) { - log(`☑️ FixUnits`, ""); + Console.log("☑️ FixUnits"); pollutants = pollutants.map(pollutant => { switch (pollutant.units) { case "PARTS_PER_MILLION": @@ -657,8 +657,8 @@ export default class AirQuality { }; return pollutant; }); - //log(`🚧 FixUnits, pollutants: ${JSON.stringify(pollutants, null, 2)}`, ""); - log(`✅ FixUnits`, ""); + //Console.debug(`pollutants: ${JSON.stringify(pollutants, null, 2)}`); + Console.log("✅ FixUnits"); return pollutants; }; }; diff --git a/src/class/ColorfulClouds.mjs b/src/class/ColorfulClouds.mjs index 14af49f..391280d 100644 --- a/src/class/ColorfulClouds.mjs +++ b/src/class/ColorfulClouds.mjs @@ -1,4 +1,4 @@ -import { Lodash as _, fetch, log, logError } from "@nsnanocat/util"; +import { Console, fetch, Lodash as _ } from "@nsnanocat/util"; import AirQuality from "./AirQuality.mjs"; import ForecastNextHour from "./ForecastNextHour.mjs"; import parseWeatherKitURL from "../function/parseWeatherKitURL.mjs"; @@ -8,7 +8,7 @@ export default class ColorfulClouds { constructor(options) { this.Name = "ColorfulClouds"; this.Version = "3.0.5"; - log(`\n🟧 ${this.Name} v${this.Version}\n`, ""); + Console.log(`🟧 ${this.Name} v${this.Version}`); this.url = new URL($request.url); this.header = { "Content-Type": "application/json" }; const Parameters = parseWeatherKitURL(this.url); @@ -30,7 +30,7 @@ export default class ColorfulClouds { }; async RealTime(token = this.token) { - log(`☑️ RealTime`, ""); + Console.log("☑️ RealTime"); const request = { "url": `https://api.caiyunapp.com/v2.6/${token}/${this.longitude},${this.latitude}/realtime`, "header": this.header, @@ -58,7 +58,7 @@ export default class ColorfulClouds { "sourceType": "STATION", }, "categoryIndex": AirQuality.CategoryIndex(body?.result?.realtime?.air_quality?.aqi.chn, "HJ_633"), - "index": parseInt(body?.result?.realtime?.air_quality?.aqi.chn, 10), + "index": Number.parseInt(body?.result?.realtime?.air_quality?.aqi.chn, 10), "isSignificant": true, "pollutants": this.#CreatePollutants(body?.result?.realtime?.air_quality), "previousDayComparison": "UNKNOWN", @@ -79,14 +79,14 @@ export default class ColorfulClouds { } catch (error) { this.logErr(error); } finally { - //log(`🚧 RealTime airQuality: ${JSON.stringify(airQuality, null, 2)}`, ""); - log(`✅ RealTime`, ""); + //Console.debug(`airQuality: ${JSON.stringify(airQuality, null, 2)}`); + Console.log("✅ RealTime"); return airQuality; }; }; async Minutely(token = this.token) { - log(`☑️ Minutely`, ""); + Console.log("☑️ Minutely"); const request = { "url": `https://api.caiyunapp.com/v2.6/${token}/${this.longitude},${this.latitude}/minutely?unit=metric:v2`, "header": this.header, @@ -152,16 +152,16 @@ export default class ColorfulClouds { throw Error(JSON.stringify(body ?? {})); }; } catch (error) { - logError(error); + Console.error(error); } finally { - //log(`🚧 forecastNextHour: ${JSON.stringify(forecastNextHour, null, 2)}`, ""); - log(`✅ Minutely`, ""); + //Console.debug(`forecastNextHour: ${JSON.stringify(forecastNextHour, null, 2)}`); + Console.log("✅ Minutely"); return forecastNextHour; }; }; async Hourly(token = this.token, hourlysteps = 1, begin = Date.now()) { - log(`☑️ Hourly`, ""); + Console.log("☑️ Hourly"); const request = { "url": `https://api.caiyunapp.com/v2.6/${token}/${this.longitude},${this.latitude}/hourly?hourlysteps=${hourlysteps}&begin=${parseInt(begin / 1000, 10)}`, "header": this.header, @@ -189,7 +189,7 @@ export default class ColorfulClouds { "sourceType": "STATION", }, "categoryIndex": AirQuality.CategoryIndex(body?.result?.hourly?.air_quality?.aqi?.[0]?.value?.chn, "HJ_633"), - "index": parseInt(body?.result?.hourly?.air_quality?.aqi?.[0]?.value?.chn, 10), + "index": Number.parseInt(body?.result?.hourly?.air_quality?.aqi?.[0]?.value?.chn, 10), "isSignificant": true, "pollutants": [], "previousDayComparison": "UNKNOWN", @@ -210,14 +210,14 @@ export default class ColorfulClouds { } catch (error) { this.logErr(error); } finally { - //log(`🚧 Hourly airQuality: ${JSON.stringify(airQuality, null, 2)}`, ""); - log(`✅ Hourly`, ""); + //Console.debug(`airQuality: ${JSON.stringify(airQuality, null, 2)}`); + Console.log("✅ Hourly"); return airQuality; }; }; #CreatePollutants(pollutantsObj = {}) { - console.log(`☑️ CreatePollutants`, ""); + Console.log("☑️ CreatePollutants"); let pollutants = []; for (const [key, value] of Object.entries(pollutantsObj)) { switch (key) { @@ -243,8 +243,8 @@ export default class ColorfulClouds { break; }; }; - //console.log(`🚧 CreatePollutants, pollutants: ${JSON.stringify(pollutants, null, 2)}`, ""); - console.log(`✅ CreatePollutants`, ""); + //Console.debug(`pollutants: ${JSON.stringify(pollutants, null, 2)}`); + Console.log("✅ CreatePollutants"); return pollutants; }; }; diff --git a/src/class/ForecastNextHour.mjs b/src/class/ForecastNextHour.mjs index 1c5ea0d..c17d648 100644 --- a/src/class/ForecastNextHour.mjs +++ b/src/class/ForecastNextHour.mjs @@ -1,4 +1,5 @@ -import { log } from "@nsnanocat/util"; +import { Console } from "@nsnanocat/util"; + export default class ForecastNextHour { Name = "ForecastNextHour"; Version = "v1.3.2"; @@ -79,30 +80,30 @@ export default class ForecastNextHour { }; static WeatherCondition(sentence) { - log(`☑️ WeatherCondition, sentence: ${sentence}`, ""); + Console.log("☑️ WeatherCondition", `sentence: ${sentence}`); let weatherCondition = "CLEAR"; - Object.keys(this.#Configs.WeatherCondition).forEach(key => { - if (sentence.includes(key)) weatherCondition = this.#Configs.WeatherCondition[key]; + Object.keys(ForecastNextHour.#Configs.WeatherCondition).forEach(key => { + if (sentence.includes(key)) weatherCondition = ForecastNextHour.#Configs.WeatherCondition[key]; }); - log(`✅ WeatherCondition: ${weatherCondition}`, ""); + Console.log(`✅ WeatherCondition: ${weatherCondition}`); return weatherCondition; }; static PrecipitationType(sentence) { - log(`☑️ PrecipitationType, sentence: ${sentence}`, ""); + Console.log("☑️ PrecipitationType", `sentence: ${sentence}`); let precipitationType = "CLEAR"; - Object.keys(this.#Configs.PrecipitationType).forEach(key => { - if (sentence.includes(key)) precipitationType = this.#Configs.PrecipitationType[key]; + Object.keys(ForecastNextHour.#Configs.PrecipitationType).forEach(key => { + if (sentence.includes(key)) precipitationType = ForecastNextHour.#Configs.PrecipitationType[key]; }); - log(`✅ PrecipitationType: ${precipitationType}`, ""); + Console.log(`✅ PrecipitationType: ${precipitationType}`); return precipitationType; }; static ConditionType(precipitationIntensity, precipitationType, units = "mmph") { // refer: https://docs.caiyunapp.com/weather-api/v2/v2.6/tables/precip.html - //log(`☑️ ConditionType`, ""); - //log(`☑️ ConditionType, precipitationIntensity: ${precipitationIntensity}, precipitationChance: ${precipitationChance}, precipitationType: ${precipitationType}`, ""); - const Range = this.#Configs.Precipitation.Range[units]; + //Console.log("☑️ ConditionType"); + //Console.debug(`precipitationIntensity: ${precipitationIntensity}`, `precipitationChance: ${precipitationChance}`, `precipitationType: ${precipitationType}`); + const Range = ForecastNextHour.#Configs.Precipitation.Range[units]; let condition = "CLEAR"; if (precipitationIntensity === 0) condition = "CLEAR" else if (precipitationIntensity > Range.NO[0] && precipitationIntensity <= Range.NO[1]) { @@ -154,26 +155,26 @@ export default class ForecastNextHour { break; }; }; - //log(`✅ #ConditionType: ${condition}`, ""); + //Console.log(`✅ #ConditionType: ${condition}`); return condition; }; static Minute(minutes = [], description = "", units = "mmph") { - log(`☑️ Minute`, ""); - const PrecipitationType = this.PrecipitationType(description); + Console.log("☑️ Minute"); + const PrecipitationType = ForecastNextHour.PrecipitationType(description); minutes = minutes.map(minute => { //minute.precipitationIntensity = Math.round(minute.precipitationIntensity * 1000000) / 1000000; // 六位小数 - minute.condition = this.ConditionType(minute.precipitationIntensity, PrecipitationType, units); - minute.perceivedPrecipitationIntensity = this.ConvertPrecipitationIntensity(minute.precipitationIntensity, minute.condition, units); + minute.condition = ForecastNextHour.ConditionType(minute.precipitationIntensity, PrecipitationType, units); + minute.perceivedPrecipitationIntensity = ForecastNextHour.ConvertPrecipitationIntensity(minute.precipitationIntensity, minute.condition, units); minute.precipitationType = (minute.perceivedPrecipitationIntensity) ? PrecipitationType : "CLEAR"; return minute; }); - log(`✅ Minute`, ""); + Console.log("✅ Minute"); return minutes; }; static Summary(minutes = []) { - log(`☑️ Summary`, ""); + Console.log("☑️ Summary"); const Summaries = []; const Summary = { "condition": "CLEAR", @@ -240,12 +241,12 @@ export default class ForecastNextHour { break; }; }; - log(`✅ Summary`, ""); + Console.log("✅ Summary"); return Summaries; }; static Condition(minutes = []) { - log(`☑️ Condition`, ""); + Console.log("☑️ Condition"); const Conditions = []; const Condition = { "beginCondition": "CLEAR", @@ -258,10 +259,10 @@ export default class ForecastNextHour { for (let i = 0; i < Length; i++) { const minute = minutes[i]; const previousMinute = minutes[i - 1]; - //log(`⚠️ ${i}, before, minute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`, ""); + //Console.debug(`⚠️ ${i}, before, minute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`); switch (i) { case 0: - //log(`⚠️ ${i}, before, minute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`, ""); + //Console.debug(`⚠️ ${i}, before, minute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`); Condition.beginCondition = minute.condition; Condition.endCondition = minute.condition; Condition.startTime = minute.startTime; @@ -274,7 +275,7 @@ export default class ForecastNextHour { break; }; Condition.parameters = []; - //log(`⚠️ ${i}, after, minute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`, ""); + //Console.debug(`⚠️ ${i}, after, minute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`); break; default: switch (minute?.precipitationType) { @@ -356,10 +357,10 @@ export default class ForecastNextHour { Condition.parameters = [{ "date": Condition.endTime, "type": "FIRST_AT" }]; break; case "START_STOP": // ✅当前RAIN - log(`⚠️ START_STOP\nminute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`, ""); + Console.error(`⚠️ START_STOP\nminute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`); break; case "STOP_START": // ✅当前CLEAR - log(`⚠️ STOP_START\nminute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`, ""); + Console.error(`⚠️ STOP_START\nminute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`); break; }; break; @@ -401,10 +402,10 @@ export default class ForecastNextHour { Condition.startTime = Condition.endTime; break; case "START_STOP": // ✅当前CLEAR - log(`⚠️ START_STOP\nminute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`); + Console.error(`⚠️ START_STOP\nminute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`); break; case "STOP_START": // ✅当前RAIN - log(`⚠️ STOP_START\nminute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`); + Console.error(`⚠️ STOP_START\nminute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`); break; }; Condition.endTime = 0; // ⚠️空值必须写零! @@ -412,16 +413,16 @@ export default class ForecastNextHour { Conditions.push({ ...Condition }); break; }; - //log(`⚠️ ${i}, after, minute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`, ""); + //Console.debug(`⚠️ ${i}, after, minute: ${JSON.stringify(minute, null, 2)}\nCondition: ${JSON.stringify(Condition, null, 2)}`); }; - log(`✅ Condition`, ""); + Console.log("✅ Condition"); return Conditions; }; static ConvertPrecipitationIntensity(precipitationIntensity, condition, units = "mmph") { - //log(`☑️ ConvertPrecipitationIntensity`, ""); + //Console.log("☑️ ConvertPrecipitationIntensity"); let perceivedPrecipitationIntensity = 0; - const Range = this.#Configs.Precipitation.Range[units]; + const Range = ForecastNextHour.#Configs.Precipitation.Range[units]; let level = 0; let range = []; switch (condition) { @@ -454,7 +455,7 @@ export default class ForecastNextHour { perceivedPrecipitationIntensity = Math.round(perceivedPrecipitationIntensity * 1000) / 1000; perceivedPrecipitationIntensity = Math.max(0, perceivedPrecipitationIntensity); perceivedPrecipitationIntensity = Math.min(3, perceivedPrecipitationIntensity); - //log(`✅ ConvertPrecipitationIntensity: ${perceivedPrecipitationIntensity}`, ""); + //Console.log(`✅ ConvertPrecipitationIntensity: ${perceivedPrecipitationIntensity}`); return perceivedPrecipitationIntensity; }; }; diff --git a/src/class/QWeather.mjs b/src/class/QWeather.mjs index 026c8f1..c897cbd 100644 --- a/src/class/QWeather.mjs +++ b/src/class/QWeather.mjs @@ -1,4 +1,4 @@ -import { fetch, log, logError, time } from "@nsnanocat/util"; +import { Console, fetch, Lodash as _, time } from "@nsnanocat/util"; import AirQuality from "../class/AirQuality.mjs"; import ForecastNextHour from "./ForecastNextHour.mjs"; import parseWeatherKitURL from "../function/parseWeatherKitURL.mjs"; @@ -8,7 +8,7 @@ export default class QWeather { constructor(options) { this.Name = "QWeather"; this.Version = "4.1.4"; - log(`\n🟧 ${this.Name} v${this.Version}\n`, ""); + Console.log(`🟧 ${this.Name} v${this.Version}`); this.url = new URL($request.url); this.host = "devapi.qweather.com"; this.header = { "Content-Type": "application/json" }; @@ -41,7 +41,7 @@ export default class QWeather { }; async GeoAPI(token = this.token, path = "city/lookup") { - log(`☑️ GeoAPI`, ""); + Console.log("☑️ GeoAPI"); const request = { "url": `https://geoapi.qweather.com/v2/${path}?location=${this.longitude},${this.latitude}&key=${token}`, "header": this.header, @@ -63,16 +63,16 @@ export default class QWeather { throw Error(body?.code); }; } catch (error) { - logError(error); + Console.error(error); } finally { - log(`🚧 GeoAPI metadata: ${JSON.stringify(metadata, null, 2)}`, ""); - log(`✅ GeoAPI`, ""); + Console.debug(`metadata: ${JSON.stringify(metadata, null, 2)}`); + Console.log("✅ GeoAPI"); return metadata; }; }; async AirNow(token = this.token) { - log(`☑️ AirNow`, ""); + Console.log("☑️ AirNow"); const request = { "url": `https://${this.host}/v7/air/now?location=${this.longitude},${this.latitude}&key=${token}`, "header": this.header, @@ -97,8 +97,8 @@ export default class QWeather { "temporarilyUnavailable": false, "sourceType": "STATION", }, - "categoryIndex": parseInt(body?.now?.level, 10), - "index": parseInt(body?.now?.aqi, 10), + "categoryIndex": Number.parseInt(body?.now?.level, 10), + "index": Number.parseInt(body?.now?.aqi, 10), "isSignificant": true, "pollutants": this.#CreatePollutants(body?.now), "previousDayComparison": "UNKNOWN", @@ -119,16 +119,16 @@ export default class QWeather { throw Error(body?.code); }; } catch (error) { - logError(error); + Console.error(error); } finally { - //log(`🚧 AirNow airQuality: ${JSON.stringify(airQuality, null, 2)}`, ""); - log(`✅ AirNow`, ""); + //Console.debug(`airQuality: ${JSON.stringify(airQuality, null, 2)}`); + Console.log("✅ AirNow"); return airQuality; }; }; async AirQualityCurrent(token = this.token) { - log(`☑️ AirQualityCurrent`, ""); + Console.log("☑️ AirQualityCurrent"); const request = { "url": `https://${this.host}/airquality/v1/current/${this.latitude}/${this.longitude}?key=${token}`, "header": this.header, @@ -154,7 +154,7 @@ export default class QWeather { "sourceType": "STATION", "stationID": body?.stations?.[0]?.id, }, - "categoryIndex": parseInt(body?.indexes?.[0]?.level, 10), + "categoryIndex": Number.parseInt(body?.indexes?.[0]?.level, 10), "index": body?.indexes?.[0]?.aqi, "isSignificant": true, "pollutants": body?.pollutants?.map(pollutant => { @@ -173,16 +173,16 @@ export default class QWeather { throw Error(JSON.stringify(body?.error, null, 2)); }; } catch (error) { - logError(error); + Console.error(error); } finally { - //log(`🚧 AirQualityCurrent airQuality: ${JSON.stringify(airQuality, null, 2)}`, ""); - log(`✅ AirQualityCurrent`, ""); + //Console.debug(`airQuality: ${JSON.stringify(airQuality, null, 2)}`); + Console.log("✅ AirQualityCurrent"); return airQuality; }; }; async Minutely(token = this.token) { - log(`☑️ Minutely, host: ${this.host}`, ""); + Console.log("☑️ Minutely", `host: ${this.host}`); const request = { "url": `https://${this.host}/v7/minutely/5m?location=${this.longitude},${this.latitude}&key=${token}`, "header": this.header, @@ -216,7 +216,7 @@ export default class QWeather { const minute = { "perceivedPrecipitationIntensity": 0, "precipitationChance": 0, - "precipitationIntensity": parseFloat(minutely.precip), + "precipitationIntensity": Number.parseFloat(minutely.precip), "startTime": new Date(minutely.fxTime) / 1000, }; let minutes = [{ ...minute }, { ...minute }, { ...minute }, { ...minute }, { ...minute }]; @@ -225,7 +225,7 @@ export default class QWeather { return minute; }); return minutes; - }).flat(Infinity), + }).flat(Number.POSITIVE_INFINITY), "summary": [] }; forecastNextHour.minutes.length = Math.min(85, forecastNextHour.minutes.length); @@ -246,16 +246,16 @@ export default class QWeather { throw Error(body?.code); }; } catch (error) { - logError(error); + Console.error(error); } finally { - //log(`🚧 forecastNextHour: ${JSON.stringify(forecastNextHour, null, 2)}`, ""); - log(`✅ Minutely`, ""); + //Console.debug(`forecastNextHour: ${JSON.stringify(forecastNextHour, null, 2)}`); + Console.log("✅ Minutely"); return forecastNextHour; }; }; async HistoricalAir(token = this.token, locationID = new Number, date = time("yyyyMMdd", Date.now() - 24 * 60 * 60 * 1000)) { - log(`☑️ HistoricalAir, locationID:${locationID}, date: ${date}`, ""); + Console.log("☑️ HistoricalAir", `locationID:${locationID}`, `date: ${date}`); const request = { "url": `https://${this.host}/v7/historical/air/?location=${locationID}&date=${date}&key=${token}`, "header": this.header, @@ -273,8 +273,8 @@ export default class QWeather { "providerName": "和风天气", "sourceType": "STATION", }, - "categoryIndex": parseInt(body?.airHourly?.[Hour]?.level, 10), - "index": parseInt(body?.airHourly?.[Hour]?.aqi, 10), + "categoryIndex": Number.parseInt(body?.airHourly?.[Hour]?.level, 10), + "index": Number.parseInt(body?.airHourly?.[Hour]?.aqi, 10), "pollutants": this.#CreatePollutants(body?.airHourly?.[Hour]), "primaryPollutant": this.#Config.Pollutants[body?.airHourly?.[Hour]?.primary] || "NOT_AVAILABLE", "scale": "HJ6332012" @@ -292,16 +292,16 @@ export default class QWeather { throw Error(body?.code); }; } catch (error) { - logError(error); + Console.error(error); } finally { - log(`🚧 HistoricalAir airQuality: ${JSON.stringify(airQuality, null, 2)}`, ""); - log(`✅ HistoricalAir`, ""); + Console.debug(`airQuality: ${JSON.stringify(airQuality, null, 2)}`); + Console.log("✅ HistoricalAir"); return airQuality; }; }; #CreatePollutants(pollutantsObj = {}) { - log(`☑️ CreatePollutants`, ""); + Console.log("☑️ CreatePollutants"); let pollutants = []; for (const [key, value] of Object.entries(pollutantsObj)) { switch (key) { @@ -315,15 +315,15 @@ export default class QWeather { case "pm2p5": case "pm10": pollutants.push({ - "amount": parseFloat(value ?? -1), + "amount": Number.parseFloat(value ?? -1), "pollutantType": this.#Config.Pollutants[key], "units": "MICROGRAMS_PER_CUBIC_METER", }); break; }; }; - //log(`🚧 CreatePollutants, pollutants: ${JSON.stringify(pollutants, null, 2)}`, ""); - log(`✅ CreatePollutants`, ""); + //Console.debug(`pollutants: ${JSON.stringify(pollutants, null, 2)}`); + Console.log("✅ CreatePollutants"); return pollutants; }; }; diff --git a/src/class/WAQI.mjs b/src/class/WAQI.mjs index bd5d3c2..b165a42 100644 --- a/src/class/WAQI.mjs +++ b/src/class/WAQI.mjs @@ -1,4 +1,4 @@ -import { fetch, log, logError } from "@nsnanocat/util"; +import { Console, fetch } from "@nsnanocat/util"; import AirQuality from "../class/AirQuality.mjs"; import parseWeatherKitURL from "../function/parseWeatherKitURL.mjs"; import providerNameToLogo from "../function/providerNameToLogo.mjs"; @@ -7,7 +7,7 @@ export default class WAQI { constructor(options) { this.Name = "WAQI"; this.Version = "1.3.9"; - log(`\n🟧 ${this.Name} v${this.Version}\n`, ""); + Console.log(`🟧 ${this.Name} v${this.Version}`); this.url = new URL($request.url); this.header = { "Content-Type": "application/json" }; const Parameters = parseWeatherKitURL(this.url); @@ -29,7 +29,7 @@ export default class WAQI { }; async Nearest(mapqVersion = "mapq") { - log(`☑️ Nearest, mapqVersion: ${mapqVersion}`, ""); + Console.log("☑️ Nearest", `mapqVersion: ${mapqVersion}`); const request = { "url": `https://api.waqi.info/${mapqVersion}/nearest?n=1&geo=1/${this.latitude}/${this.longitude}`, //"url": `https://mapq.waqi.info/${mapqVersion}/nearest/station/${stationId}?n=1`, @@ -57,11 +57,11 @@ export default class WAQI { "reportedTime": body?.d?.[0]?.t, "temporarilyUnavailable": false, "sourceType": "STATION", - "stationId": parseInt(body?.d?.[0]?.x, 10), + "stationId": Number.parseInt(body?.d?.[0]?.x, 10), "stationKey": body?.d?.[0]?.k, }, "categoryIndex": AirQuality.CategoryIndex(body?.d?.[0]?.v, "WAQI_InstantCast"), - "index": parseInt(body?.d?.[0]?.v, 10), + "index": Number.parseInt(body?.d?.[0]?.v, 10), //"previousDayComparison": "UNKNOWN", "primaryPollutant": this.#Configs.Pollutants[body?.d?.[0]?.pol] || "NOT_AVAILABLE", "scale": "EPA_NowCast" @@ -88,10 +88,10 @@ export default class WAQI { "reportedTime": Math.round(new Date(body?.data?.stations?.[0]?.utime).getTime() / 1000), "temporarilyUnavailable": false, "sourceType": "STATION", - "stationId": parseInt(body?.data?.stations?.[0]?.idx, 10), + "stationId": Number.parseInt(body?.data?.stations?.[0]?.idx, 10), }, "categoryIndex": AirQuality.CategoryIndex(body?.data?.stations?.[0]?.aqi, "WAQI_InstantCast"), - "index": parseInt(body?.data?.stations?.[0]?.aqi, 10), + "index": Number.parseInt(body?.data?.stations?.[0]?.aqi, 10), //"previousDayComparison": "UNKNOWN", "primaryPollutant": "NOT_AVAILABLE", "scale": "EPA_NowCast" @@ -107,16 +107,16 @@ export default class WAQI { break; }; } catch (error) { - logError(error); + Console.error(error); } finally { - //log(`🚧 airQuality: ${JSON.stringify(airQuality, null, 2)}`, ""); - log(`✅ Nearest`, ""); + //Console.debug(`airQuality: ${JSON.stringify(airQuality, null, 2)}`); + Console.log("✅ Nearest"); return airQuality; }; }; async Token(stationId = Number()) { - log(`☑️ Token, stationId: ${stationId}`, ""); + Console.log("☑️ Token", `stationId: ${stationId}`); const request = { "url": `https://api.waqi.info/api/token/${stationId}`, "header": this.header, @@ -147,16 +147,16 @@ export default class WAQI { break; }; } catch (error) { - logError(error); + Console.error(error); } finally { - //log(`🚧 token: ${token}`, ""); - log(`✅ Token`, ""); + //Console.debug(`token: ${token}`); + Console.log("✅ Token"); return token; }; }; async AQI(stationId = Number(), token = this.token) { - log(`☑️ AQI, stationId: ${stationId}, token: ${token}`, ""); + Console.log("☑️ AQI", `stationId: ${stationId}`, `token: ${token}`); const request = { "url": `https://api.waqi.info/api/feed/@${stationId}/aqi.json`, "header": this.header, @@ -191,7 +191,7 @@ export default class WAQI { "stationId": stationId, }, "categoryIndex": AirQuality.CategoryIndex(body?.rxs?.obs?.[0]?.msg?.aqi, "WAQI_InstantCast"), - "index": parseInt(body?.rxs?.obs?.[0]?.msg?.aqi, 10), + "index": Number.parseInt(body?.rxs?.obs?.[0]?.msg?.aqi, 10), //"previousDayComparison": "UNKNOWN", "primaryPollutant": this.#Configs.Pollutants[body?.rxs?.obs?.[0]?.msg?.dominentpol] || "NOT_AVAILABLE", "scale": "EPA_NowCast" @@ -210,16 +210,16 @@ export default class WAQI { break; }; } catch (error) { - logError(error); + Console.error(error); } finally { - //log(`🚧 airQuality: ${JSON.stringify(airQuality, null, 2)}`, ""); - log(`✅ AQI`, ""); + //Console.debug(`airQuality: ${JSON.stringify(airQuality, null, 2)}`); + Console.log("✅ AQI"); return airQuality; }; }; async AQI2(stationId = Number(), token = this.token) { - log(`☑️ AQI2, stationId: ${stationId}`, ""); + Console.log("☑️ AQI2", `stationId: ${stationId}`); const request = { "url": `https://api2.waqi.info/feed/geo:${this.latitude};${this.longitude}/?token=${token}`, "header": this.header, @@ -244,10 +244,10 @@ export default class WAQI { "reportedTime": body?.data?.time?.v, "temporarilyUnavailable": false, "sourceType": "STATION", - "stationId": stationId || parseInt(body?.data?.idx, 10), + "stationId": stationId || Number.parseInt(body?.data?.idx, 10), }, "categoryIndex": AirQuality.CategoryIndex(body?.data?.aqi, "WAQI_InstantCast"), - "index": parseInt(body?.data?.aqi, 10), + "index": Number.parseInt(body?.data?.aqi, 10), //"previousDayComparison": "UNKNOWN", "primaryPollutant": this.#Configs.Pollutants[body?.data?.dominentpol] || "NOT_AVAILABLE", "scale": "EPA_NowCast" @@ -259,10 +259,10 @@ export default class WAQI { throw JSON.stringify({ "status": body?.status, "reason": body?.data }); }; } catch (error) { - logError(error); + Console.error(error); } finally { - //log(`🚧 airQuality: ${JSON.stringify(airQuality, null, 2)}`, ""); - log(`✅ AQI2`, ""); + //Console.debug(`airQuality: ${JSON.stringify(airQuality, null, 2)}`); + Console.log("✅ AQI2"); return airQuality; }; }; diff --git a/src/class/WeatherKit2.mjs b/src/class/WeatherKit2.mjs index b41524e..d752f9c 100644 --- a/src/class/WeatherKit2.mjs +++ b/src/class/WeatherKit2.mjs @@ -1,11 +1,11 @@ -import { log } from "@nsnanocat/util"; +import { Console } from "@nsnanocat/util"; import * as WK2 from "../proto/apple/wk2.js"; export default class WeatherKit2 { static Name = "WeatherKit2"; static Version = "1.2.0"; static encode(builder, dataSet = "all", data = {}) { - log(`☑️ WeatherKit2.encode, dataSet: ${dataSet}`, ""); + Console.log("☑️ WeatherKit2.encode", `dataSet: ${dataSet}`); let offset; let metadataOffset; if (data?.metadata) metadataOffset = WK2.Metadata.createMetadata(builder, builder.createString(data?.metadata?.attributionUrl), data?.metadata?.expireTime, builder.createString(data?.metadata?.language), data?.metadata?.latitude, data?.metadata?.longitude, builder.createString(data?.metadata?.providerLogo), builder.createString(data?.metadata?.providerName), data?.metadata?.readTime, data?.metadata?.reportedTime, data?.metadata?.temporarilyUnavailable, WK2.SourceType[data?.metadata?.sourceType], data?.metadata?.unknown11, data?.metadata?.unknown12, data?.metadata?.unknown13, data?.metadata?.unknown14, data?.metadata?.unknown15); @@ -174,12 +174,12 @@ export default class WeatherKit2 { offset = WK2.LocationInfo.createLocationInfo(builder, metadataOffset, builder.createString(data?.preciseName), builder.createString(data?.countryCode), builder.createString(data?.timeZone), builder.createString(data?.primaryName)); break; }; - log(`✅ WeatherKit2.encode, dataSet: ${dataSet}`, ""); + Console.log("✅ WeatherKit2.encode", `dataSet: ${dataSet}`); return offset; }; static decode(byteBuffer, dataSet = "all", data = {}) { - log(`☑️ WeatherKit2.decode, dataSet: ${dataSet}`, ""); + Console.log("☑️ WeatherKit2.decode", `dataSet: ${dataSet}`); const Weather = WK2.Weather.getRootAsWeather(byteBuffer); const AirQualityData = Weather?.airQuality(); const CurrentWeatherData = Weather?.currentWeather(); @@ -663,7 +663,7 @@ export default class WeatherKit2 { "timeZone": LocationInfoData?.timeZone(), }; }; - log(`✅ WeatherKit2.decode, dataSet: ${dataSet}`, ""); + Console.log("✅ WeatherKit2.decode", `dataSet: ${dataSet}`); return data; }; diff --git a/src/function/parseWeatherKitURL.mjs b/src/function/parseWeatherKitURL.mjs index aa00261..410859f 100644 --- a/src/function/parseWeatherKitURL.mjs +++ b/src/function/parseWeatherKitURL.mjs @@ -1,7 +1,7 @@ -import { log } from "@nsnanocat/util"; +import { Console } from "@nsnanocat/util"; export default function parseWeatherKitURL(url = new URL($request.url)) { - log("☑️ parseWeatherKitURL", ""); + Console.log("☑️ parseWeatherKitURL"); const WeatherKitRegExp = /^\/api\/(?v1|v2|v3)\/(availability|weather)\/(?\w+)(?:-\w+)?(-(?[A-Z]{2}))?\/(?-?\d+\.?\d*)\/(?-?\d+\.?\d*)$/i; //const LanguageRegExp = /^(?\w+(-\w+)?)-(?[A-Z]{2})$/i; const Parameters = url?.pathname.match(WeatherKitRegExp)?.groups; @@ -12,10 +12,10 @@ export default function parseWeatherKitURL(url = new URL($request.url)) { "longitude": Parameters?.longitude, "country": Parameters?.country || url?.searchParams?.get("country") }; - //log(JSON.stringify(result, null, 2), ""); + //log(JSON.stringify(result, null, 2)); //const LanguageParameters = result.language.match(LanguageRegExp)?.groups; //result.language = LanguageParameters.language; //result.country = result.country || LanguageParameters.country - log(`✅ parseWeatherKitURL\n🟧version: ${result.version} 🟧language: ${result.language} 🟧country: ${result.country}\n🟧latitude: ${result.latitude} 🟧longitude: ${result.longitude}\n`, "") + Console.log("✅ parseWeatherKitURL", `🟧version: ${result.version} 🟧language: ${result.language} 🟧country: ${result.country}`, `🟧latitude: ${result.latitude} 🟧longitude: ${result.longitude}`); return result; } diff --git a/src/function/providerNameToLogo.mjs b/src/function/providerNameToLogo.mjs index e3d6284..dbec92a 100644 --- a/src/function/providerNameToLogo.mjs +++ b/src/function/providerNameToLogo.mjs @@ -1,7 +1,7 @@ -import { log } from "@nsnanocat/util"; +import { Console } from "@nsnanocat/util"; export default function providerNameToLogo(providerName, version) { - log(`☑️ providerNameToLogo, providerName: ${providerName}, version: ${version}`, ""); + Console.log("☑️ providerNameToLogo", `providerName: ${providerName}`, `version: ${version}`); let providerLogo; switch (providerName?.split("\n")?.[0]) { case "WAQI": @@ -36,6 +36,6 @@ export default function providerNameToLogo(providerName, version) { default: break; }; - log("✅ providerNameToLogo", ""); + Console.log("✅ providerNameToLogo"); return providerLogo; }; diff --git a/src/function/setENV.mjs b/src/function/setENV.mjs index ef1961a..cb6763f 100644 --- a/src/function/setENV.mjs +++ b/src/function/setENV.mjs @@ -1,4 +1,4 @@ -import { Lodash as _, getStorage, log } from "@nsnanocat/util"; +import { Console, getStorage, Lodash as _ } from "@nsnanocat/util"; /** * Set Environment Variables @@ -9,7 +9,7 @@ import { Lodash as _, getStorage, log } from "@nsnanocat/util"; * @return {Object} { Settings, Caches, Configs } */ export default function setENV(name, platforms, database) { - log("☑️ Set Environment Variables", ""); + Console.log("☑️ Set Environment Variables"); const { Settings, Caches, Configs } = getStorage(name, platforms, database); /***************** Settings *****************/ switch (platforms) { @@ -28,12 +28,13 @@ export default function setENV(name, platforms, database) { if (!Array.isArray(Settings?.Tabs)) _.set(Settings, "Tabs", (Settings?.Tabs) ? [Settings.Tabs.toString()] : []); break; }; - log(`✅ Set Environment Variables, Settings: ${typeof Settings}, Settings内容: ${JSON.stringify(Settings)}`, ""); + Console.debug(`typeof Settings: ${typeof Settings}`, `Settings: ${JSON.stringify(Settings, null, 2)}`); /***************** Caches *****************/ - //log(`✅ Set Environment Variables, Caches: ${typeof Caches}, Caches内容: ${JSON.stringify(Caches)}`, ""); + //Console.debug(`typeof Caches: ${typeof Caches}`, `Caches: ${JSON.stringify(Caches)}`); /***************** Configs *****************/ //Configs.Storefront = new Map(Configs.Storefront); if (Configs.Locale) Configs.Locale = new Map(Configs.Locale); if (Configs.i18n) for (const type in Configs.i18n) Configs.i18n[type] = new Map(Configs.i18n[type]); + Console.log("✅ Set Environment Variables"); return { Settings, Caches, Configs }; }; diff --git a/src/response.dev.js b/src/response.dev.js index d9403e7..e07f342 100644 --- a/src/response.dev.js +++ b/src/response.dev.js @@ -1,4 +1,4 @@ -import { $app, Lodash as _, Storage, fetch, notification, log, logError, wait, done } from "@nsnanocat/util"; +import { $app, Console, done, fetch, Lodash as _, notification, Storage, wait } from "@nsnanocat/util"; import database from "./function/database.mjs"; import setENV from "./function/setENV.mjs"; import providerNameToLogo from "./function/providerNameToLogo.mjs"; @@ -11,16 +11,13 @@ import * as flatbuffers from "flatbuffers"; /***************** Processing *****************/ // 解构URL const url = new URL($request.url); -log(`⚠ url: ${url.toJSON()}`, ""); +Console.info(`url: ${url.toJSON()}`); // 获取连接参数 -const METHOD = $request.method, - HOST = url.hostname, - PATH = url.pathname, - PATHs = url.pathname.split("/").filter(Boolean); -log(`⚠ METHOD: ${METHOD}, HOST: ${HOST}, PATH: ${PATH}, PATHs: ${PATHs}`, ""); +const PATHs = url.pathname.split("/").filter(Boolean); +Console.info(`PATHs: ${PATHs}`); // 解析格式 const FORMAT = ($response.headers?.["Content-Type"] ?? $response.headers?.["content-type"])?.split(";")?.[0]; -log(`⚠ FORMAT: ${FORMAT}`, ""); +Console.info(`FORMAT: ${FORMAT}`); !(async () => { /** * 设置 @@ -36,14 +33,14 @@ log(`⚠ FORMAT: ${FORMAT}`, ""); case "application/x-www-form-urlencoded": case "text/plain": default: - //log(`🚧 body: ${body}`, ""); + //Console.debug(`body: ${body}`); break; case "application/x-mpegURL": case "application/x-mpegurl": case "application/vnd.apple.mpegurl": case "audio/mpegurl": //body = M3U8.parse($response.body); - //log(`🚧 body: ${JSON.stringify(body)}`, ""); + //Console.debug(`body: ${JSON.stringify(body)}`); //$response.body = M3U8.stringify(body); break; case "text/xml": @@ -53,23 +50,23 @@ log(`⚠ FORMAT: ${FORMAT}`, ""); case "application/plist": case "application/x-plist": //body = XML.parse($response.body); - //log(`🚧 body: ${JSON.stringify(body)}`, ""); + //Console.debug(`body: ${JSON.stringify(body)}`); //$response.body = XML.stringify(body); break; case "text/vtt": case "application/vtt": //body = VTT.parse($response.body); - //log(`🚧 body: ${JSON.stringify(body)}`, ""); + //Console.debug(`body: ${JSON.stringify(body)}`); //$response.body = VTT.stringify(body); break; case "text/json": case "application/json": body = JSON.parse($response.body ?? "{}"); - switch (HOST) { + switch (url.hostname) { case "weatherkit.apple.com": // 路径判断 - if (PATH.startsWith("/api/v1/availability/")) { - log(`🚧 body: ${JSON.stringify(body)}`, ""); + if (url.pathname.startsWith("/api/v1/availability/")) { + Console.debug(`body: ${JSON.stringify(body)}`); body = Configs?.Availability?.v2; } break; @@ -83,22 +80,22 @@ log(`⚠ FORMAT: ${FORMAT}`, ""); case "application/grpc": case "application/grpc+proto": case "application/octet-stream": { - //log(`🚧 $response: ${JSON.stringify($response, null, 2)}`, ""); + //Console.debug(`$response: ${JSON.stringify($response, null, 2)}`); let rawBody = $app === "Quantumult X" ? new Uint8Array($response.bodyBytes ?? []) : ($response.body ?? new Uint8Array()); - //log(`🚧 isBuffer? ${ArrayBuffer.isView(rawBody)}: ${JSON.stringify(rawBody)}`, ""); + //Console.debug(`isBuffer? ${ArrayBuffer.isView(rawBody)}: ${JSON.stringify(rawBody)}`); switch (FORMAT) { case "application/vnd.apple.flatbuffer": { // 解析FlatBuffer const ByteBuffer = new flatbuffers.ByteBuffer(rawBody); const Builder = new flatbuffers.Builder(); // 主机判断 - switch (HOST) { + switch (url.hostname) { case "weatherkit.apple.com": // 路径判断 - if (PATH.startsWith("/api/v2/weather/")) { + if (url.pathname.startsWith("/api/v2/weather/")) { body = WeatherKit2.decode(ByteBuffer, "all"); if (url.searchParams.get("dataSets").includes("airQuality")) { - log(`🚧 body.airQuality: ${JSON.stringify(body?.airQuality, null, 2)}`, ""); + Console.debug(`body.airQuality: ${JSON.stringify(body?.airQuality, null, 2)}`); // InjectAirQuality if (Settings?.AQI?.ReplaceProviders?.includes(body?.airQuality?.metadata?.providerName)) body = await InjectAirQuality(url, body, Settings); // CompareAirQuality @@ -129,28 +126,28 @@ log(`⚠ FORMAT: ${FORMAT}`, ""); } if (url.searchParams.get("dataSets").includes("currentWeather")) { if (body?.currentWeather?.metadata?.providerName && !body?.currentWeather?.metadata?.providerLogo) body.currentWeather.metadata.providerLogo = providerNameToLogo(body?.currentWeather?.metadata?.providerName, "v2"); - //log(`🚧 body.currentWeather: ${JSON.stringify(body?.currentWeather, null, 2)}`, ""); + //Console.debug(`body.currentWeather: ${JSON.stringify(body?.currentWeather, null, 2)}`); } if (url.searchParams.get("dataSets").includes("forecastNextHour")) { - log(`🚧 body.forecastNextHour: ${JSON.stringify(body?.forecastNextHour, null, 2)}`, ""); + Console.debug(`body.forecastNextHour: ${JSON.stringify(body?.forecastNextHour, null, 2)}`); if (!body?.forecastNextHour) body = await InjectForecastNextHour(url, body, Settings); if (body?.forecastNextHour?.metadata?.providerName && !body?.forecastNextHour?.metadata?.providerLogo) body.forecastNextHour.metadata.providerLogo = providerNameToLogo(body?.forecastNextHour?.metadata?.providerName, "v2"); } if (url.searchParams.get("dataSets").includes("weatherAlerts")) { if (body?.weatherAlerts?.metadata?.providerName && !body?.weatherAlerts?.metadata?.providerLogo) body.weatherAlerts.metadata.providerLogo = providerNameToLogo(body?.weatherAlerts?.metadata?.providerName, "v2"); - log(`🚧 body.weatherAlerts: ${JSON.stringify(body?.weatherAlerts, null, 2)}`, ""); + Console.debug(`body.weatherAlerts: ${JSON.stringify(body?.weatherAlerts, null, 2)}`); } if (url.searchParams.get("dataSets").includes("WeatherChange")) { if (body?.WeatherChanges?.metadata?.providerName && !body?.WeatherChanges?.metadata?.providerLogo) body.WeatherChanges.metadata.providerLogo = providerNameToLogo(body?.WeatherChanges?.metadata?.providerName, "v2"); - log(`🚧 body.WeatherChanges: ${JSON.stringify(body?.WeatherChanges, null, 2)}`, ""); + Console.debug(`body.WeatherChanges: ${JSON.stringify(body?.WeatherChanges, null, 2)}`); } if (url.searchParams.get("dataSets").includes("trendComparison")) { if (body?.historicalComparisons?.metadata?.providerName && !body?.historicalComparisons?.metadata?.providerLogo) body.historicalComparisons.metadata.providerLogo = providerNameToLogo(body?.historicalComparisons?.metadata?.providerName, "v2"); - log(`🚧 body.historicalComparisons: ${JSON.stringify(body?.historicalComparisons, null, 2)}`, ""); + Console.debug(`body.historicalComparisons: ${JSON.stringify(body?.historicalComparisons, null, 2)}`); } if (url.searchParams.get("dataSets").includes("locationInfo")) { if (body?.locationInfo?.metadata?.providerName && !body?.locationInfo?.metadata?.providerLogo) body.locationInfo.metadata.providerLogo = providerNameToLogo(body?.locationInfo?.metadata?.providerName, "v2"); - log(`🚧 body.locationInfo: ${JSON.stringify(body?.locationInfo, null, 2)}`, ""); + Console.debug(`body.locationInfo: ${JSON.stringify(body?.locationInfo, null, 2)}`); } const WeatherData = WeatherKit2.encode(Builder, "all", body); Builder.finish(WeatherData); @@ -177,7 +174,7 @@ log(`⚠ FORMAT: ${FORMAT}`, ""); } } })() - .catch(e => logError(e)) + .catch(e => Console.error(e)) .finally(() => done($response)); /** @@ -186,7 +183,7 @@ log(`⚠ FORMAT: ${FORMAT}`, ""); * @param {import('./types').Settings} Settings */ async function InjectAirQuality(url, body, Settings) { - log("☑️ InjectAirQuality", ""); + Console.log("☑️ InjectAirQuality"); let airQuality; switch (Settings?.AQI?.Provider) { case "WeatherKit": @@ -222,9 +219,9 @@ async function InjectAirQuality(url, body, Settings) { airQuality.metadata = { ...body?.airQuality?.metadata, ...airQuality.metadata }; body.airQuality = { ...body?.airQuality, ...airQuality }; if (!body?.airQuality?.pollutants) body.airQuality.pollutants = []; - log(`🚧 body.airQuality: ${JSON.stringify(body?.airQuality, null, 2)}`, ""); + Console.debug(`body.airQuality: ${JSON.stringify(body?.airQuality, null, 2)}`); } - log("✅ InjectAirQuality", ""); + Console.log("✅ InjectAirQuality"); return body; } @@ -234,7 +231,7 @@ async function InjectAirQuality(url, body, Settings) { * @param {import('./types').Settings} Settings */ async function CompareAirQuality(url, body, Settings) { - log("☑️ CompareAirQuality", ""); + Console.log("☑️ CompareAirQuality"); switch (body?.airQuality?.metadata?.providerName?.split("\n")?.[0]) { case null: case undefined: @@ -267,7 +264,7 @@ async function CompareAirQuality(url, body, Settings) { break; } } - log("✅ CompareAirQuality", ""); + Console.log("✅ CompareAirQuality"); return body; } @@ -276,7 +273,7 @@ async function CompareAirQuality(url, body, Settings) { * @param {import('./types').Settings} Settings */ function ConvertAirQuality(body, Settings) { - log("☑️ ConvertAirQuality", ""); + Console.log("☑️ ConvertAirQuality"); let airQuality; switch (Settings?.AQI?.Local?.Scale) { case "NONE": @@ -291,9 +288,9 @@ function ConvertAirQuality(body, Settings) { if (airQuality.index) { body.airQuality = { ...body.airQuality, ...airQuality }; body.airQuality.metadata.providerName += `\nConverted using ${Settings?.AQI?.Local?.Scale}`; - log(`🚧 body.airQuality: ${JSON.stringify(body.airQuality, null, 2)}`, ""); + Console.debug(`body.airQuality: ${JSON.stringify(body.airQuality, null, 2)}`); } - log("✅ ConvertAirQuality", ""); + Console.log("✅ ConvertAirQuality"); return body; } @@ -303,7 +300,7 @@ function ConvertAirQuality(body, Settings) { * @param {import('./types').Settings} Settings */ async function InjectForecastNextHour(url, body, Settings) { - log("☑️ InjectForecastNextHour", ""); + Console.log("☑️ InjectForecastNextHour"); let forecastNextHour; switch (Settings?.NextHour?.Provider) { case "WeatherKit": @@ -323,8 +320,8 @@ async function InjectForecastNextHour(url, body, Settings) { if (forecastNextHour?.metadata) { forecastNextHour.metadata = { ...body?.forecastNextHour?.metadata, ...forecastNextHour.metadata }; body.forecastNextHour = { ...body?.forecastNextHour, ...forecastNextHour }; - log(`🚧 body.forecastNextHour: ${JSON.stringify(body?.forecastNextHour, null, 2)}`, ""); + Console.debug(`body.forecastNextHour: ${JSON.stringify(body?.forecastNextHour, null, 2)}`); } - log("✅ InjectForecastNextHour", ""); + Console.log("✅ InjectForecastNextHour"); return body; } diff --git a/src/response.js b/src/response.js index cb91b6c..763a7a7 100644 --- a/src/response.js +++ b/src/response.js @@ -1,4 +1,4 @@ -import { $app, Lodash as _, Storage, fetch, notification, log, logError, wait, done } from "@nsnanocat/util"; +import { $app, Console, done, fetch, Lodash as _, notification, Storage, wait } from "@nsnanocat/util"; import database from "./function/database.mjs"; import setENV from "./function/setENV.mjs"; import providerNameToLogo from "./function/providerNameToLogo.mjs"; @@ -8,19 +8,17 @@ import ColorfulClouds from "./class/ColorfulClouds.mjs"; import QWeather from "./class/QWeather.mjs"; import AirQuality from "./class/AirQuality.mjs"; import * as flatbuffers from "flatbuffers"; +Console.debug = () => {}; /***************** Processing *****************/ // 解构URL const url = new URL($request.url); -log(`⚠ url: ${url.toJSON()}`, ""); +Console.info(`url: ${url.toJSON()}`); // 获取连接参数 -const METHOD = $request.method, - HOST = url.hostname, - PATH = url.pathname, - PATHs = url.pathname.split("/").filter(Boolean); -log(`⚠ METHOD: ${METHOD}, HOST: ${HOST}, PATH: ${PATH}, PATHs: ${PATHs}`, ""); +const PATHs = url.pathname.split("/").filter(Boolean); +Console.info(`PATHs: ${PATHs}`); // 解析格式 const FORMAT = ($response.headers?.["Content-Type"] ?? $response.headers?.["content-type"])?.split(";")?.[0]; -log(`⚠ FORMAT: ${FORMAT}`, ""); +Console.info(`FORMAT: ${FORMAT}`); !(async () => { /** * 设置 @@ -55,11 +53,11 @@ log(`⚠ FORMAT: ${FORMAT}`, ""); case "text/json": case "application/json": body = JSON.parse($response.body ?? "{}"); - switch (HOST) { + switch (url.hostname) { case "weatherkit.apple.com": // 路径判断 - if (PATH.startsWith("/api/v1/availability/")) { - log(`🚧 body: ${JSON.stringify(body)}`, ""); + if (url.pathname.startsWith("/api/v1/availability/")) { + Console.debug(`body: ${JSON.stringify(body)}`); body = Configs?.Availability?.v2; } break; @@ -80,10 +78,10 @@ log(`⚠ FORMAT: ${FORMAT}`, ""); const ByteBuffer = new flatbuffers.ByteBuffer(rawBody); const Builder = new flatbuffers.Builder(); // 主机判断 - switch (HOST) { + switch (url.hostname) { case "weatherkit.apple.com": // 路径判断 - if (PATH.startsWith("/api/v2/weather/")) { + if (url.pathname.startsWith("/api/v2/weather/")) { body = WeatherKit2.decode(ByteBuffer, "all"); if (url.searchParams.get("dataSets").includes("airQuality")) { // InjectAirQuality @@ -143,7 +141,7 @@ log(`⚠ FORMAT: ${FORMAT}`, ""); } } })() - .catch(e => logError(e)) + .catch(e => Console.error(e)) .finally(() => done($response)); /** @@ -152,7 +150,7 @@ log(`⚠ FORMAT: ${FORMAT}`, ""); * @param {import('./types').Settings} Settings */ async function InjectAirQuality(url, body, Settings) { - log("☑️ InjectAirQuality", ""); + Console.log("☑️ InjectAirQuality"); let airQuality; switch (Settings?.AQI?.Provider) { case "WeatherKit": @@ -188,7 +186,7 @@ async function InjectAirQuality(url, body, Settings) { body.airQuality = { ...body?.airQuality, ...airQuality }; if (!body?.airQuality?.pollutants) body.airQuality.pollutants = []; } - log("✅ InjectAirQuality", ""); + Console.log("✅ InjectAirQuality"); return body; } @@ -198,7 +196,7 @@ async function InjectAirQuality(url, body, Settings) { * @param {import('./types').Settings} Settings */ async function CompareAirQuality(url, body, Settings) { - log("☑️ CompareAirQuality", ""); + Console.log("☑️ CompareAirQuality"); switch (body?.airQuality?.metadata?.providerName?.split("\n")?.[0]) { case null: case undefined: @@ -231,7 +229,7 @@ async function CompareAirQuality(url, body, Settings) { break; } } - log("✅ CompareAirQuality", ""); + Console.log("✅ CompareAirQuality"); return body; } @@ -240,7 +238,7 @@ async function CompareAirQuality(url, body, Settings) { * @param {import('./types').Settings} Settings */ function ConvertAirQuality(body, Settings) { - log("☑️ ConvertAirQuality", ""); + Console.log("☑️ ConvertAirQuality"); let airQuality; switch (Settings?.AQI?.Local?.Scale) { case "NONE": @@ -256,7 +254,7 @@ function ConvertAirQuality(body, Settings) { body.airQuality = { ...body.airQuality, ...airQuality }; body.airQuality.metadata.providerName += `\nConverted using ${Settings?.AQI?.Local?.Scale}`; } - log("✅ ConvertAirQuality", ""); + Console.log("✅ ConvertAirQuality"); return body; } @@ -266,7 +264,7 @@ function ConvertAirQuality(body, Settings) { * @param {import('./types').Settings} Settings */ async function InjectForecastNextHour(url, body, Settings) { - log("☑️ InjectForecastNextHour", ""); + Console.log("☑️ InjectForecastNextHour"); let forecastNextHour; switch (Settings?.NextHour?.Provider) { case "WeatherKit": @@ -287,6 +285,6 @@ async function InjectForecastNextHour(url, body, Settings) { forecastNextHour.metadata = { ...body?.forecastNextHour?.metadata, ...forecastNextHour.metadata }; body.forecastNextHour = { ...body?.forecastNextHour, ...forecastNextHour }; } - log("✅ InjectForecastNextHour", ""); + Console.log("✅ InjectForecastNextHour"); return body; }