mockba 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/MOCKBA CHANGED
@@ -23,6 +23,9 @@ if(json) {
23
23
  } else {
24
24
  var москва = new MOCKBA({
25
25
  human:true,
26
+ ...{
27
+ skip:['country','region','location']
28
+ },
26
29
  ...(ru?{
27
30
  skip:['страна','регион','местоположение'],
28
31
  translate:'ru',
package/changes.md CHANGED
@@ -1,6 +1,10 @@
1
1
  ## 30 jan 2026
2
2
 
3
- ### v0.3.1
3
+ ### v0.3.3
4
+
5
+ - print correct format in english
6
+
7
+ ### v0.3.2
4
8
 
5
9
  - print json and js formats, better cli
6
10
  - print each dashboard item in ru
package/index.js CHANGED
@@ -12,38 +12,22 @@ class MOCKBA extends Moskva {
12
12
  // printRu = false
13
13
  human = void 0
14
14
  json = false
15
- skip=[]
15
+ // skip=['country','region','location']
16
16
  период_осреднения=null
17
17
  static get emojiMap() {
18
18
  return new Map(Object.entries({ // does not have default?
19
19
  'страна':'🌍 Страна',
20
20
  'регион':'📍 Регион',
21
21
  'местоположение':'📌 Местоположение',
22
- 'время_наблюдения':'⏰ Дата и время', // units map also?
23
- 'атмосферное_давление_мм_рт_ст':'🌡️ Атм. давление (мм рт.ст.)',
24
- 'температура_°C':'🌡️ Температура (°C)',
25
- 'относительная_влажность_процент':'💧 Влажность (%)',
26
- 'направление_ветра':'🧭 Направление ветра',
27
- 'средняя_скорость_ветра_м_с':'🌬️ Скорость ветра (м/с)',
28
- 'горизонтальная_видимость_км':'👀 Видимость (км)',
29
- 'долгосрочные_наблюдения':'┬ 📈 Долгосрочные наблюдения',
30
- 'мин_температура_°C':'⛄️ Мин. температура (°C)',
31
- 'год_мин_температуры':'☃️ Год мин. температуры',
32
- 'макс_температура_°C':'🥵 Макс. температура (°C)',
33
- 'год_макс_температуры':'🔥 Год макс. температуры',
34
- 'макс_осадки_мм':' 🌧️ Макс. осадки',
35
- 'год_макс_осадков':'🌊 Год макс. осадков',
36
- 'среднемесячные_показатели':'📊 Среднемесячные показатели (январь)',
37
- 'средняя_температура_°C':'🌡️ Средняя температура (°C)',
38
- 'осадки_мм':'🌧️ Осадки (мм)',
39
- 'период_осреднения':'📊 Период осреднения'
22
+ 'время_наблюдения':'⏰ Дата и время',
23
+ 'observation_time':'',
40
24
  }))
41
25
  }
42
26
  printWeather(obj){
43
- return this.printRuWeather(obj)
27
+ return this.printObj(obj,'')
44
28
  }
45
29
  printRuWeather(obj){
46
- this.printObj(obj,'')
30
+ this.printRuObj(obj,'')
47
31
  }
48
32
  tempEmoji(t){
49
33
  if(t<=-20) return '🥶'
@@ -61,6 +45,121 @@ class MOCKBA extends Moskva {
61
45
  }
62
46
 
63
47
  printObj(o,prefix){
48
+ // период_осреднения =
49
+ for(var k in o){
50
+ if(this.skip&&this.skip.includes(k)) {
51
+ continue
52
+ }
53
+ var logNl=console.log
54
+ var log=data=>{
55
+ process.stdout.write(data)
56
+ }
57
+ // var log1=process.stdout.write;
58
+ if(typeof o[k]=='object'&&o[k]!=null){
59
+ switch(k){
60
+ case 'monthly_averages':
61
+ logNl('┬ 📊 Monthly averages since '+o[k].averaging_period+':')
62
+ this.printObj(o[k],prefix+' ')
63
+ break
64
+ case 'long_term_obs':
65
+ logNl('┬ 📈 Long term observations:')
66
+ this.printObj(o[k],prefix+' ')
67
+ break
68
+ default:
69
+ logNl(prefix+(MOCKBA.emojiMap.get(k)||k))
70
+ this.printObj(o[k],prefix+' ')
71
+ }
72
+ } else {
73
+ switch(k){
74
+ case 'avg_temperature_C': // monthly averages group
75
+ var v=o[k]
76
+ logNl('├─🌡️ \tTemperature\t'+v+'°C')
77
+ break
78
+ case 'precipitation_mm':
79
+ logNl('└─ 🌧️ \tPrecipitation\t'+o[k]+'mm')
80
+ break
81
+
82
+ case 'atmospheric_pressure_mm':
83
+ // logNl('🌡️ Атм. давление\t\t'+o[k]+' мм рт.ст.')
84
+ logNl('⬇️ Atm. pressure\t'+o[k]+' mm')
85
+ break
86
+ case 'temperature_C':
87
+ var температура=parseFloat(o[k])
88
+ logNl(this.tempEmoji(температура)+' Temperature\t\t'+температура+'°C')
89
+ break
90
+ case 'averaging_period':
91
+ // this.период_осреднения = o[k]
92
+ // logNl(' 💧 Влажность: '+o[k]+'%')
93
+ break
94
+ case 'relative_humidity_percent':
95
+ logNl('💧 Humidity\t\t'+o[k]+'%')
96
+ break
97
+ case 'horizontal_visibility_km':
98
+ logNl('👀 Visibility\t\t'+o[k]+'km')
99
+ break
100
+ case 'wind_speed_m_s':
101
+ // convert english into ru
102
+ logNl('🌬️ Wind speed\t\t'+o[k]+' m/s')
103
+ break
104
+ case 'wind_direction':
105
+ var windMap={
106
+ // N:'северный',
107
+ // NNE:'северо-северо-восточный',
108
+ // NE:'северо-восточный',
109
+ // ENE:'вост.-сев.-восточный',
110
+ // E:'восточный',
111
+ // ESE:'вост.-юго-восточный',
112
+ // SE:'юго-восточный',
113
+ // SSE:'юго-юго-восточный',
114
+ // S:'южный',
115
+ // SSW:'юго-юго-западный',
116
+ // SW:'юго-западный',
117
+ // WSW:'зап.-юго-западный',
118
+ // W:'западный',
119
+ // WNW:'зап.-сев.-западный',
120
+ // NW:'северо-западный',
121
+ // NNW:'сев.-сев.-западный'
122
+ }
123
+ // convert english into ru
124
+ // var V=o[k]
125
+ var V=o[k]
126
+ var ru=windMap[V]||V
127
+ logNl('🧭 Wind\t\t\t'+ru)
128
+ break
129
+ case 'observation_time':
130
+ let d_val=this.parseDate(o[k]) // store date on this
131
+ let val=this.printDate(d_val);
132
+ // logNl(prefix+(MOCKBA.emojiMap.get(k)||k)+'\t\t'+val)
133
+ logNl(prefix+(MOCKBA.emojiMap.get('observation_time')+' Date and time')+'\t'+val)
134
+ break
135
+ case 'max_temperature': // need to see when was min
136
+ // let d_val=this.parseDate(o[k]) // store date on this
137
+ var V=`${o[k]}`.padStart(5,' ')
138
+ log('├─ 🥵\t'+V+'°C')
139
+ break
140
+ case 'max_precipitation_mm':
141
+ var V=`+${o[k]}`.padStart(5,' ')
142
+ log('└─ 🌧️ \t'+V+'mm')
143
+ break
144
+ case 'min_temperature':
145
+ var V=`${o[k]}`.padStart(4,' ')
146
+ log('├─ ⛄️\t'+V+'°C')
147
+ break
148
+ case 'min_temp_year':
149
+ case 'max_temp_year':
150
+ case 'max_precip_year':
151
+ log(' in '+o[k])
152
+ let y_val=this.yearsAgo(o[k])
153
+ logNl(', '+y_val+' years ago')
154
+ break
155
+ default:
156
+ logNl(prefix+(MOCKBA.emojiMap.get(k)||k)+': '+o[k])
157
+ }
158
+ }
159
+ }
160
+ }
161
+
162
+ printRuObj(o,prefix){
64
163
  // период_осреднения =
65
164
  for(var k in o){
66
165
  if(this.skip&&this.skip.includes(k)) {
@@ -76,11 +175,11 @@ class MOCKBA extends Moskva {
76
175
  switch(k){
77
176
  case 'среднемесячные_показатели':
78
177
  logNl('┬ 📊 Среднемесячные показатели с '+o[k].период_осреднения+':')
79
- this.printObj(o[k],prefix+' ')
178
+ this.printRuObj(o[k],prefix+' ')
80
179
  break
81
180
  default:
82
181
  logNl(prefix+(MOCKBA.emojiMap.get(k)||k))
83
- this.printObj(o[k],prefix+' ')
182
+ this.printRuObj(o[k],prefix+' ')
84
183
  }
85
184
  // logNl(prefix+(MOCKBA.emojiMap.get(k)||k)+':')
86
185
  }else{
@@ -178,6 +277,14 @@ class MOCKBA extends Moskva {
178
277
  }
179
278
 
180
279
  /** --- @arg {Date} _val */
280
+ printDate(_val){
281
+ var val=_val?_val.toLocaleString('en',{
282
+ year:'numeric',month:'short',day:'2-digit',hour:'numeric',
283
+ hour12:true,
284
+ }):_val
285
+ val=val.replace(',','')
286
+ return val
287
+ }
181
288
  printDateRu(_val){
182
289
  var val=_val?_val.toLocaleString('ru',{
183
290
  year:'numeric',month:'short',day:'2-digit',hour:'2-digit',minute:'2-digit',
@@ -198,7 +305,11 @@ class MOCKBA extends Moskva {
198
305
  super._log=true
199
306
  }
200
307
  if(!this.disableIndicator) {
201
- var t = await indicatrix('Загружаем данные по Москве',super.fetchMoscow())
308
+ if(this.translate=='ru') {
309
+ var t = await indicatrix('Загружаем данные по Москве',super.fetchMoscow())
310
+ }else {
311
+ var t = await indicatrix('Loading data for Moscow',super.fetchMoscow())
312
+ }
202
313
  }else {
203
314
  var t = await super.fetchMoscow()
204
315
  }
@@ -293,7 +404,7 @@ class MOCKBA extends Moskva {
293
404
  }
294
405
 
295
406
  var monthly_averages = {
296
- temperature_C: parseFloat(matchSingle(/<td>Temperature<\/td><td[^>]*>([^&]+)/i, html)),
407
+ avg_temperature_C: parseFloat(matchSingle(/<td>Temperature<\/td><td[^>]*>([^&]+)/i, html)),
297
408
  precipitation_mm: parseFloat(matchSingle(/<td>Amount of precipitation<\/td><td[^>]*>([^ ]+)/i, html)),
298
409
  averaging_period: matchSingle(/The averaging period: ([^<]+)/i, html)
299
410
  }
@@ -332,7 +443,7 @@ class MOCKBA extends Moskva {
332
443
  max_precip_year:'год_макс_осадков'
333
444
  },
334
445
  monthly_averages:{
335
- temperature_C:'средняя_температура_°C',
446
+ avg_temperature_C:'средняя_температура_°C',
336
447
  precipitation_mm:'осадки_мм',
337
448
  averaging_period:'период_осреднения'
338
449
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mockba",
3
3
  "homepage": "https://рантайм.москва",
4
- "version": "0.3.2",
4
+ "version": "0.3.4",
5
5
  "license": "CC-BY-ND-4.0",
6
6
  "dependencies": {
7
7
  "indicatrix": "^1.4.1",
package/readme.md CHANGED
@@ -4,12 +4,40 @@
4
4
  <img src="https://рантайм.москва/img/MOCKBA-npm.jpg">
5
5
  </a>
6
6
 
7
+ Aims to provide access to Moscow services via unified city runtime
8
+ https://рантайм.москва.
9
+
7
10
  ```sh
8
11
  yarn add mockba
9
- yarn MOCKBA # use
12
+ yarn MOCKBA # use global binary
13
+ ```
14
+
15
+ ## Capabilities
16
+
17
+ ### Weather
18
+
19
+ Currently displays data from Hydrometcenter for Moscow.
20
+
21
+ ```sh
22
+ ⏰ Date and time Jan 30 2026, 9 PM
23
+ ⬇️ Atm. pressure 752 mm
24
+ 🧊 Temperature -15.9°C
25
+ 💧 Humidity 75%
26
+ 🧭 Wind N
27
+ 🌬️ Wind speed 1 m/s
28
+ 👀 Visibility 20km
29
+ ┬ 📈 Long term observations:
30
+ ├─ ⛄️ -35.7°C in 1956, 70 years ago
31
+ ├─ 🥵 3°C in 2016, 10 years ago
32
+ └─ 🌧️ 10mm in 1983, 43 years ago
33
+ ┬ 📊 Monthly averages since 1981-2010:
34
+ ├─🌡️ Temperature -6.5°C
35
+ └─ 🌧️ Precipitation 52mm
10
36
  ```
11
37
 
12
- ###
38
+ <!-- http://wis2box.mecom.ru/oapi?f=json -->
39
+
40
+ ### API
13
41
 
14
42
  The package can be imported directly and run with configuration:
15
43
 
@@ -32,7 +60,7 @@ equivalent to invoking the API example above.
32
60
 
33
61
  ```sh
34
62
  ⏰ Дата и время 30 янв. 2026 г. 21:00
35
- ⬇️ Атм. давление 752 мм рт.ст.
63
+ ⬇️ Атм. давление 752 мм рт.ст.
36
64
  🧊 Температура -15.8°C
37
65
  💧 Влажность 76.4%
38
66
  🧭 Ветер северный
@@ -41,13 +69,22 @@ equivalent to invoking the API example above.
41
69
  ┬ 📈 Долгосрочные наблюдения
42
70
  ├─ ⛄️ -35.7°C в 1956, 70 лет назад
43
71
  ├─ 🥵 3°C в 2016, 10 лет назад
44
- └─ 🌧️ +10мм в 1983, 43 лет назад
72
+ └─ 🌧️ 10мм в 1983, 43 лет назад
45
73
  ┬ 📊 Среднемесячные показатели с 1981-2010:
46
74
  ├─🌡️ Температура -6.5°C
47
75
  └─ 🌧️ Осадки 52мм
48
76
  ```
49
77
 
78
+ ---
79
+
80
+ The package can work in either json/js mode or in human-readable mode (default).
81
+ To support printing in a translation, pass target language like `-ru`.
82
+
83
+ <details>
84
+ <summary>
85
+
50
86
  ### MOCKBA -json
87
+ </summary>
51
88
 
52
89
  ```json
53
90
  {
@@ -76,8 +113,13 @@ equivalent to invoking the API example above.
76
113
  }
77
114
  }
78
115
  ```
116
+ </details>
117
+
118
+ <details>
119
+ <summary>
79
120
 
80
121
  ### MOCKBA -json -ru
122
+ </summary>
81
123
 
82
124
  ```json
83
125
  {
@@ -106,8 +148,13 @@ equivalent to invoking the API example above.
106
148
  }
107
149
  }
108
150
  ```
151
+ </details>
152
+
153
+ <details>
154
+ <summary>
109
155
 
110
156
  ### MOCKBA -js
157
+ </summary>
111
158
 
112
159
  ```js
113
160
  {
@@ -136,8 +183,12 @@ equivalent to invoking the API example above.
136
183
  }
137
184
  }
138
185
  ```
186
+ </details>
187
+ <details>
188
+ <summary>
139
189
 
140
190
  ### MOCKBA -js -ru
191
+ </summary>
141
192
 
142
193
  ```js
143
194
  {
@@ -166,5 +217,6 @@ equivalent to invoking the API example above.
166
217
  }
167
218
  }
168
219
  ```
220
+ </details>
169
221
 
170
222
  <!-- https://xn--80aa1amcqq.xn--80adxhks/img/MOCKBA-npm.jpg -->