Compiled lib with export default class Gismeteo do not work. I receive TypeError: Gismeteo is not a constructor
Expected behavior
It should work:(
Additional context
There are class Gismeteo { ... } and exports.default = Gismeteo;in cjs.
Build with option --target node
My TS main file
```ts
import axios from 'axios'
import moment from 'moment'
import { Cheerio, CheerioAPI, Element, load } from 'cheerio'
import UserAgent from 'user-agents'
import is_number from 'is-number'
import { Endpoint, Unit, Wildcard } from './common/constants'
import { GismeteoCityError } from './common/errors'
import { CityUri, GismeteoMonth, GismeteoNow, GismeteoOptions, GismeteoTomorrow, GismeteoTwoWeeks } from './common/types'
export default class Gismeteo {
private _base_url: Endpoint
private _unit: {
temp: Unit
pressure: Unit
wind: Unit
}
private readonly _axios_config = {
headers: {
'user-agent': new UserAgent().toString(),
},
}
constructor(options?: GismeteoOptions) {
this._base_url = options?.lang === 'en' ? Endpoint.BASE_EN : Endpoint.BASE_RU
this._unit = {
temp: options?.unit_temp === 'F' ? Unit.TEMP_F : Unit.TEMP_C,
pressure: options?.unit_pressure === 'hPa' ? Unit.PRESSURE_HPA : Unit.PRESSURE_MMHG,
wind: options?.unit_wind === 'kmh' ? Unit.WIND_KMH : Unit.WIND_MS,
}
}
public async getTwoWeeks(city: string): Promise {
const city_uri = await this.getCityUri(city)
return axios.get(`${this._base_url}${city_uri}${Endpoint.TWOWEEKS}`, this._axios_config).then(({ data }) => {
const $ = load(data)
let out: Partial[] = []
out = this.parseDates>($, Wildcard.TWOWEEKS_DATE)
out = this.mergeArray(out, 'tmax', this.parseValue($, Wildcard.TWOWEEKS_TMAX))
out = this.mergeArray(out, 'tmin', this.parseValue($, Wildcard.TWOWEEKS_TMIN))
out = this.mergeArray(out, 'tavg', this.parseValue($, Wildcard.TWOWEEKS_TAVG))
out = this.mergeArray(out, 'pressure', this.parseValue($, Wildcard.TWOWEEKS_PRESSURE))
out = this.mergeArray(out, 'wind_speed', this.parseValue($, Wildcard.TWOWEEKS_WINDSPEED))
out = this.mergeArray(out, 'wind_gust', this.parseValue($, Wildcard.TWOWEEKS_WINDGUST))
out = this.mergeArray(out, 'wind_dir', this.parseValue($, Wildcard.TWOWEEKS_WINDDIR))
out = this.mergeArray(out, 'precipitation', this.parseValue($, Wildcard.TWOWEEKS_PRECIPITATION))
out = this.mergeArray(out, 'humidity', this.parseValue($, Wildcard.TWOWEEKS_HUMIDITY))
out = this.mergeArray(out, 'summary', this.parseAttr($, Wildcard.TWOWEEKS_SUMMARY, 'data-text'))
out = this.mergeArray(out, 'geomagnetic', this.parseValue($, Wildcard.TWOWEEKS_GEOMAGNETIC))
if ($(Wildcard.TWOWEEKS_ROADS).length > 0) {
out = this.mergeArray(out, 'road_condition', this.parseValue($, Wildcard.TWOWEEKS_ROADS))
} else {
out = this.mergeArray(out, 'road_condition', new Array(out.length).fill('unknown'))
}
if ($(Wildcard.TWOWEEKS_POLLEN_BIRCH).length > 0) {
out = this.mergeArray(out, 'pollen_birch', this.parseValue($, Wildcard.TWOWEEKS_POLLEN_BIRCH))
} else {
out = this.mergeArray(out, 'pollen_birch', new Array(out.length).fill(0))
}
if ($(Wildcard.TWOWEEKS_POLLEN_GRASS).length > 0) {
out = this.mergeArray(out, 'pollen_grass', this.parseValue($, Wildcard.TWOWEEKS_POLLEN_GRASS))
} else {
out = this.mergeArray(out, 'pollen_grass', new Array(out.length).fill(0))
}
if ($(Wildcard.TWOWEEKS_POLLEN_RAGWEED).length > 0) {
out = this.mergeArray(out, 'pollen_ragweed', this.parseValue($, Wildcard.TWOWEEKS_POLLEN_RAGWEED))
} else {
out = this.mergeArray(out, 'pollen_ragweed', new Array(out.length).fill(0))
}
return out as GismeteoTwoWeeks[]
})
}
public async getMonth(city: string): Promise {
const city_uri = await this.getCityUri(city)
return axios.get(`${this._base_url}${city_uri}${Endpoint.MONTH}`, this._axios_config).then(({ data }) => {
const $ = load(data)
let out: Partial[] = []
out = this.parseDates>($, Wildcard.MONTH_DATE)
out = this.mergeArray(out, 'tmax', this.parseValue($, Wildcard.MONTH_TMAX))
out = this.mergeArray(out, 'tmin', this.parseValue($, Wildcard.MONTH_TMIN))
return out as GismeteoMonth[]
})
}
public async getNow(city: string): Promise {
const city_uri = await this.getCityUri(city)
return axios.get(`${this._base_url}${city_uri}${Endpoint.NOW}`, this._axios_config).then(({ data }) => {
const $ = load(data)
const out: GismeteoNow = {
temp: this.numberify($(this.unitToWildcard(Wildcard.NOW_TEMP)).text()),
temp_feels: this.numberify($(this.unitToWildcard(Wildcard.NOW_TEMPFEELS)).text()),
wind_speed: this.numberify(this.parentText($, Wildcard.NOW_WINDSPEED)),
wind_dir: $(this.unitToWildcard(Wildcard.NOW_WINDDIR))
.last()
.text(),
pressure: this.numberify(this.parentText($, Wildcard.NOW_PRESSURE)),
humidity: this.numberify($(Wildcard.NOW_HUMIDITY).text()),
summary: $(Wildcard.NOW_SUMMARY).text(),
geomagnetic: this.numberify($(Wildcard.NOW_GEOMAGNETIC).text()),
water_temp: this.numberify($(this.unitToWildcard(Wildcard.NOW_WATER)).text()),
sunrise: moment(moment().format('DD MMM YYYY') + ' ' + $(Wildcard.NOW_SUNRISE).text(), 'DD MMM YYYY H:mm').unix(),
sunset: moment(moment().format('DD MMM YYYY') + ' ' + $(Wildcard.NOW_SUNSET).text(), 'DD MMM YYYY H:mm').unix(),
}
return out
})
}
public async getTommorow(city: string): Promise {
const city_uri = await this.getCityUri(city)
return axios.get(`${this._base_url}${city_uri}${Endpoint.TOMMOROW}`, this._axios_config).then(({ data }) => {
const $ = load(data)
let out: Partial[] = []
const dates = this.parseAttr($, Wildcard.TOMORROW_TIME, 'title')
out = this.parseDtFromStringArray>(dates)
out = this.mergeArray(out, 'temp', this.parseValue($, Wildcard.TOMORROW_TEMP))
out = this.mergeArray(out, 'pressure', this.parseValue($, Wildcard.TOMORROW_PRESSURE))
out = this.mergeArray(out, 'wind_speed', this.parseValue($, Wildcard.TOMORROW_WINDSPEED))
out = this.mergeArray(out, 'wind_gust', this.parseValue($, Wildcard.TOMORROW_WINDGUST))
out = this.mergeArray(out, 'wind_dir', this.parseValue($, Wildcard.TOMORROW_WINDDIR))
out = this.mergeArray(out, 'precipitation', this.parseValue($, Wildcard.TOMORROW_PRECIPITATION))
out = this.mergeArray(out, 'humidity', this.parseValue($, Wildcard.TOMORROW_HUMIDITY))
out = this.mergeArray(out, 'summary', this.parseAttr($, Wildcard.TOMORROW_SUMMARY, 'data-text'))
out = this.mergeArray(out, 'geomagnetic', this.parseValue($, Wildcard.TOMORROW_GEOMAGNETIC))
if ($(Wildcard.TOMORROW_ROADS).length > 0) {
out = this.mergeArray(out, 'road_condition', this.parseValue($, Wildcard.TOMORROW_ROADS))
} else {
out = this.mergeArray(out, 'road_condition', new Array(out.length).fill('unknown'))
}
if ($(Wildcard.TOMORROW_POLLEN_BIRCH).length > 0) {
out = this.mergeArray(out, 'pollen_birch', this.parseValue($, Wildcard.TOMORROW_POLLEN_BIRCH))
} else {
out = this.mergeArray(out, 'pollen_birch', new Array(out.length).fill(0))
}
if ($(Wildcard.TOMORROW_POLLEN_GRASS).length > 0) {
out = this.mergeArray(out, 'pollen_grass', this.parseValue($, Wildcard.TOMORROW_POLLEN_GRASS))
} else {
out = this.mergeArray(out, 'pollen_grass', new Array(out.length).fill(0))
}
if ($(Wildcard.TOMORROW_POLLEN_RAGWEED).length > 0) {
out = this.mergeArray(out, 'pollen_ragweed', this.parseValue($, Wildcard.TOMORROW_POLLEN_RAGWEED))
} else {
out = this.mergeArray(out, 'pollen_ragweed', new Array(out.length).fill(0))
}
return out as GismeteoTomorrow[]
})
}
private async getCityUri(city: string): Promise {
return axios.get(`${Endpoint.SEARCH}${encodeURIComponent(city)}/9/`, this._axios_config).then(({ data }) => {
if (data.data.length === 0 || data.data[0]?.url === undefined) {
throw new GismeteoCityError('Unable to find uri for given city name')
}
return data.data[0].url
})
}
private parseDates($: CheerioAPI, wildcard: Wildcard): T[] {
const search = $(wildcard)
const start_date = moment(search.first().text() + moment().format('YYYY'), 'DD MMMYYYY', 'ru')
const out: T[] = []
for (let i = 0; i < search.length; i++) {
out.push(({ dt: start_date.add(i, 'days').unix() } as unknown) as T)
}
return out
}
private parseDtFromStringArray(input: string[]): T[] {
const out: T[] = []
for (let i = 0; i < input.length; i++) {
const strip_date = input[i].split(', UTC: ')[1]
out.push(({ dt: moment(strip_date, 'YYYY-MM-DD HH:mm:ss').unix() } as unknown) as T)
}
return out
}
private parseValue($: CheerioAPI, wildcard: Wildcard): T[] {
const out: T[] = []
const search = $(this.unitToWildcard(wildcard))
search.each((i, el) => {
out[i] = ((is_number(
load(el)
.text()
.replace(',', '.'),
)
? this.numberify(load(el).text())
: load(el).text()) as unknown) as T
})
return out
}
private parseAttr($: CheerioAPI, wildcard: Wildcard, attr: string): T[] {
const out: T[] = []
const search = $(this.unitToWildcard(wildcard)) as Cheerio
search.each((i, el) => {
out[i] = ((is_number(el.attribs[attr].replace(',', '.'))
? Number(el.attribs[attr].replace(',', '.'))
: el.attribs[attr]) as unknown) as T
})
return out
}
private unitToWildcard(wildcard: Wildcard): string {
return String(wildcard)
.replace('UNIT_TEMP', this._unit.temp)
.replace('UNIT_PRESSURE', this._unit.pressure)
.replace('UNIT_WIND', this._unit.wind)
}
private mergeArray(input: T[], key: K, values: V[]): T[] {
return input.map((item, index) => {
item[key] = values[index]
return item
})
}
private numberify(value: string | number): number {
return Number(String(value).replace(',', '.'))
}
private parentText($: CheerioAPI, wildcard: Wildcard): string {
return $(this.unitToWildcard(wildcard))
.contents()
.filter(function() {
return this.nodeType === 3
})
.text()
}
}
```
My CJS main file
```js
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var axios = _interopDefault(require('axios'));
var moment = _interopDefault(require('moment'));
var cheerio = require('cheerio');
var UserAgent = _interopDefault(require('user-agents'));
var is_number = _interopDefault(require('is-number'));
var Endpoint;
(function (Endpoint) {
Endpoint["BASE_RU"] = "https://www.gismeteo.ru";
Endpoint["BASE_EN"] = "https://www.gismeteo.com";
Endpoint["SEARCH"] = "https://www.gismeteo.ru/mq/search/";
Endpoint["TWOWEEKS"] = "2-weeks/";
Endpoint["MONTH"] = "month/";
Endpoint["NOW"] = "now/";
Endpoint["TOMMOROW"] = "tomorrow/";
})(Endpoint || (Endpoint = {}));
var Unit;
(function (Unit) {
Unit["TEMP_C"] = "unit_temperature_c";
Unit["TEMP_F"] = "unit_temperature_f";
Unit["PRESSURE_MMHG"] = "unit_pressure_mm_hg_atm";
Unit["PRESSURE_HPA"] = "unit_pressure_h_pa";
Unit["WIND_MS"] = "unit_wind_m_s";
Unit["WIND_KMH"] = "unit_wind_km_h";
})(Unit || (Unit = {}));
var Wildcard;
(function (Wildcard) {
Wildcard["TWOWEEKS_DATE"] = "div[data-stat-value*=\"weather\"] div.widget-row-days-date div.date";
Wildcard["TWOWEEKS_TMAX"] = "div[data-stat-value*=\"weather\"] div.widget-row-chart-temperature div.value div.maxt span.UNIT_TEMP";
Wildcard["TWOWEEKS_TMIN"] = "div[data-stat-value*=\"weather\"] div.widget-row-chart-temperature div.value div.mint span.UNIT_TEMP";
Wildcard["TWOWEEKS_TAVG"] = "div[data-stat-value*=\"temperature-avg\"] div.value span.UNIT_TEMP";
Wildcard["TWOWEEKS_SUMMARY"] = "div[data-stat-value*=\"weather\"] div.widget-row-icon div.row-item div.tooltip";
Wildcard["TWOWEEKS_PRESSURE"] = "div[data-stat-value*=\"pressure\"] div.widget-row-chart-pressure div.value div.maxt span.UNIT_PRESSURE";
Wildcard["TWOWEEKS_WINDSPEED"] = "div[data-stat-value*=\"wind\"] div.widget-row-wind-speed div.row-item span.UNIT_WIND";
Wildcard["TWOWEEKS_WINDGUST"] = "div[data-stat-value*=\"wind\"] div.widget-row-wind-gust div.row-item span.UNIT_WIND";
Wildcard["TWOWEEKS_WINDDIR"] = "div[data-stat-value*=\"wind\"] div.widget-row-wind-direction div.row-item div.direction";
Wildcard["TWOWEEKS_PRECIPITATION"] = "div[data-stat-value*=\"weather\"] div.widget-row-precipitation-bars div.row-item div.item-unit";
Wildcard["TWOWEEKS_HUMIDITY"] = "div[data-stat-value*=\"humidity\"] div.widget-items div.row-item";
Wildcard["TWOWEEKS_ROADS"] = "div[data-stat-value*=\"roadcondition\"] div.row-item div.item-description";
Wildcard["TWOWEEKS_GEOMAGNETIC"] = "div[data-stat-value*=\"geomagnetic\"] div.row-item div.item";
Wildcard["TWOWEEKS_POLLEN_BIRCH"] = "div[data-stat-value*=\"pollen\"] div.widget-row-pollen-birch-point div.row-item div.item";
Wildcard["TWOWEEKS_POLLEN_GRASS"] = "div[data-stat-value*=\"pollen\"] div.widget-row-pollen-grass-point div.row-item div.item";
Wildcard["TWOWEEKS_POLLEN_RAGWEED"] = "div[data-stat-value*=\"pollen\"] div.widget-row-pollen-ragweed div.row-item div.item";
Wildcard["MONTH_DATE"] = "div.widget-month div.date";
Wildcard["MONTH_TMAX"] = "div.widget-month div.maxt span.UNIT_TEMP";
Wildcard["MONTH_TMIN"] = "div.widget-month div.mint span.UNIT_TEMP";
Wildcard["NOW_TEMP"] = "div.now div.now-weather span.UNIT_TEMP";
Wildcard["NOW_TEMPFEELS"] = "div.now div.now-feel span.UNIT_TEMP";
Wildcard["NOW_WINDSPEED"] = "div.now div.wind div.UNIT_WIND";
Wildcard["NOW_WINDDIR"] = "div.now div.wind div.UNIT_WIND div.item-measure div";
Wildcard["NOW_PRESSURE"] = "div.now div.pressure div.UNIT_PRESSURE";
Wildcard["NOW_HUMIDITY"] = "div.now div.humidity div.item-value";
Wildcard["NOW_SUMMARY"] = "div.now div.now-desc";
Wildcard["NOW_GEOMAGNETIC"] = "div.now div.gm div.item-value";
Wildcard["NOW_WATER"] = "div.now div.water div.item-value div.UNIT_TEMP";
Wildcard["NOW_SUNRISE"] = "div.now div.now-astro div.now-astro-sunrise div.time";
Wildcard["NOW_SUNSET"] = "div.now div.now-astro div.now-astro-sunset div.time";
Wildcard["TOMORROW_TIME"] = "div[data-stat-value*=\"weather\"] div.widget-row-time div.row-item";
Wildcard["TOMORROW_TEMP"] = "div[data-stat-value*=\"weather\"] div.widget-row-chart-temperature div.value span.UNIT_TEMP";
Wildcard["TOMORROW_PRECIPITATION"] = "div[data-stat-value*=\"weather\"] div.widget-row-precipitation-bars div.row-item div.item-unit";
Wildcard["TOMORROW_SUMMARY"] = "div[data-stat-value*=\"weather\"] div.widget-row-icon div.row-item div.tooltip";
Wildcard["TOMORROW_WINDSPEED"] = "div[data-stat-value*=\"wind\"] div.widget-row-wind-speed div.row-item span.UNIT_WIND";
Wildcard["TOMORROW_WINDGUST"] = "div[data-stat-value*=\"wind\"] div.widget-row-wind-gust div.row-item span.UNIT_WIND";
Wildcard["TOMORROW_WINDDIR"] = "div[data-stat-value*=\"wind\"] div.widget-row-wind-direction div.row-item div.direction";
Wildcard["TOMORROW_POLLEN_BIRCH"] = "div[data-stat-value*=\"pollen\"] div.widget-row-pollen-birch-point div.row-item div.item";
Wildcard["TOMORROW_POLLEN_GRASS"] = "div[data-stat-value*=\"pollen\"] div.widget-row-pollen-grass-point div.row-item div.item";
Wildcard["TOMORROW_POLLEN_RAGWEED"] = "div[data-stat-value*=\"pollen\"] div.widget-row-pollen-ragweed div.row-item div.item";
Wildcard["TOMORROW_ROADS"] = "div[data-stat-value*=\"roadcondition\"] div.row-item div.item-description";
Wildcard["TOMORROW_PRESSURE"] = "div[data-stat-value*=\"pressure\"] div.widget-row-chart-pressure div.value span.UNIT_PRESSURE";
Wildcard["TOMORROW_HUMIDITY"] = "div[data-stat-value*=\"humidity\"] div.widget-items div.row-item";
Wildcard["TOMORROW_GEOMAGNETIC"] = "div[data-stat-value*=\"geomagnetic\"] div.row-item div.item";
})(Wildcard || (Wildcard = {}));
class GismeteoCityError extends Error {}
class Gismeteo {
constructor(options) {
this._axios_config = {
headers: {
'user-agent': new UserAgent().toString()
}
};
this._base_url = (options == null ? void 0 : options.lang) === 'en' ? Endpoint.BASE_EN : Endpoint.BASE_RU;
this._unit = {
temp: (options == null ? void 0 : options.unit_temp) === 'F' ? Unit.TEMP_F : Unit.TEMP_C,
pressure: (options == null ? void 0 : options.unit_pressure) === 'hPa' ? Unit.PRESSURE_HPA : Unit.PRESSURE_MMHG,
wind: (options == null ? void 0 : options.unit_wind) === 'kmh' ? Unit.WIND_KMH : Unit.WIND_MS
};
}
async getTwoWeeks(city) {
const city_uri = await this.getCityUri(city);
return axios.get(`${this._base_url}${city_uri}${Endpoint.TWOWEEKS}`, this._axios_config).then(({
data
}) => {
const $ = cheerio.load(data);
let out = [];
out = this.parseDates($, Wildcard.TWOWEEKS_DATE);
out = this.mergeArray(out, 'tmax', this.parseValue($, Wildcard.TWOWEEKS_TMAX));
out = this.mergeArray(out, 'tmin', this.parseValue($, Wildcard.TWOWEEKS_TMIN));
out = this.mergeArray(out, 'tavg', this.parseValue($, Wildcard.TWOWEEKS_TAVG));
out = this.mergeArray(out, 'pressure', this.parseValue($, Wildcard.TWOWEEKS_PRESSURE));
out = this.mergeArray(out, 'wind_speed', this.parseValue($, Wildcard.TWOWEEKS_WINDSPEED));
out = this.mergeArray(out, 'wind_gust', this.parseValue($, Wildcard.TWOWEEKS_WINDGUST));
out = this.mergeArray(out, 'wind_dir', this.parseValue($, Wildcard.TWOWEEKS_WINDDIR));
out = this.mergeArray(out, 'precipitation', this.parseValue($, Wildcard.TWOWEEKS_PRECIPITATION));
out = this.mergeArray(out, 'humidity', this.parseValue($, Wildcard.TWOWEEKS_HUMIDITY));
out = this.mergeArray(out, 'summary', this.parseAttr($, Wildcard.TWOWEEKS_SUMMARY, 'data-text'));
out = this.mergeArray(out, 'geomagnetic', this.parseValue($, Wildcard.TWOWEEKS_GEOMAGNETIC));
if ($(Wildcard.TWOWEEKS_ROADS).length > 0) {
out = this.mergeArray(out, 'road_condition', this.parseValue($, Wildcard.TWOWEEKS_ROADS));
} else {
out = this.mergeArray(out, 'road_condition', new Array(out.length).fill('unknown'));
}
if ($(Wildcard.TWOWEEKS_POLLEN_BIRCH).length > 0) {
out = this.mergeArray(out, 'pollen_birch', this.parseValue($, Wildcard.TWOWEEKS_POLLEN_BIRCH));
} else {
out = this.mergeArray(out, 'pollen_birch', new Array(out.length).fill(0));
}
if ($(Wildcard.TWOWEEKS_POLLEN_GRASS).length > 0) {
out = this.mergeArray(out, 'pollen_grass', this.parseValue($, Wildcard.TWOWEEKS_POLLEN_GRASS));
} else {
out = this.mergeArray(out, 'pollen_grass', new Array(out.length).fill(0));
}
if ($(Wildcard.TWOWEEKS_POLLEN_RAGWEED).length > 0) {
out = this.mergeArray(out, 'pollen_ragweed', this.parseValue($, Wildcard.TWOWEEKS_POLLEN_RAGWEED));
} else {
out = this.mergeArray(out, 'pollen_ragweed', new Array(out.length).fill(0));
}
return out;
});
}
async getMonth(city) {
const city_uri = await this.getCityUri(city);
return axios.get(`${this._base_url}${city_uri}${Endpoint.MONTH}`, this._axios_config).then(({
data
}) => {
const $ = cheerio.load(data);
let out = [];
out = this.parseDates($, Wildcard.MONTH_DATE);
out = this.mergeArray(out, 'tmax', this.parseValue($, Wildcard.MONTH_TMAX));
out = this.mergeArray(out, 'tmin', this.parseValue($, Wildcard.MONTH_TMIN));
return out;
});
}
async getNow(city) {
const city_uri = await this.getCityUri(city);
return axios.get(`${this._base_url}${city_uri}${Endpoint.NOW}`, this._axios_config).then(({
data
}) => {
const $ = cheerio.load(data);
const out = {
temp: this.numberify($(this.unitToWildcard(Wildcard.NOW_TEMP)).text()),
temp_feels: this.numberify($(this.unitToWildcard(Wildcard.NOW_TEMPFEELS)).text()),
wind_speed: this.numberify(this.parentText($, Wildcard.NOW_WINDSPEED)),
wind_dir: $(this.unitToWildcard(Wildcard.NOW_WINDDIR)).last().text(),
pressure: this.numberify(this.parentText($, Wildcard.NOW_PRESSURE)),
humidity: this.numberify($(Wildcard.NOW_HUMIDITY).text()),
summary: $(Wildcard.NOW_SUMMARY).text(),
geomagnetic: this.numberify($(Wildcard.NOW_GEOMAGNETIC).text()),
water_temp: this.numberify($(this.unitToWildcard(Wildcard.NOW_WATER)).text()),
sunrise: moment(moment().format('DD MMM YYYY') + ' ' + $(Wildcard.NOW_SUNRISE).text(), 'DD MMM YYYY H:mm').unix(),
sunset: moment(moment().format('DD MMM YYYY') + ' ' + $(Wildcard.NOW_SUNSET).text(), 'DD MMM YYYY H:mm').unix()
};
return out;
});
}
async getTommorow(city) {
const city_uri = await this.getCityUri(city);
return axios.get(`${this._base_url}${city_uri}${Endpoint.TOMMOROW}`, this._axios_config).then(({
data
}) => {
const $ = cheerio.load(data);
let out = [];
const dates = this.parseAttr($, Wildcard.TOMORROW_TIME, 'title');
out = this.parseDtFromStringArray(dates);
out = this.mergeArray(out, 'temp', this.parseValue($, Wildcard.TOMORROW_TEMP));
out = this.mergeArray(out, 'pressure', this.parseValue($, Wildcard.TOMORROW_PRESSURE));
out = this.mergeArray(out, 'wind_speed', this.parseValue($, Wildcard.TOMORROW_WINDSPEED));
out = this.mergeArray(out, 'wind_gust', this.parseValue($, Wildcard.TOMORROW_WINDGUST));
out = this.mergeArray(out, 'wind_dir', this.parseValue($, Wildcard.TOMORROW_WINDDIR));
out = this.mergeArray(out, 'precipitation', this.parseValue($, Wildcard.TOMORROW_PRECIPITATION));
out = this.mergeArray(out, 'humidity', this.parseValue($, Wildcard.TOMORROW_HUMIDITY));
out = this.mergeArray(out, 'summary', this.parseAttr($, Wildcard.TOMORROW_SUMMARY, 'data-text'));
out = this.mergeArray(out, 'geomagnetic', this.parseValue($, Wildcard.TOMORROW_GEOMAGNETIC));
if ($(Wildcard.TOMORROW_ROADS).length > 0) {
out = this.mergeArray(out, 'road_condition', this.parseValue($, Wildcard.TOMORROW_ROADS));
} else {
out = this.mergeArray(out, 'road_condition', new Array(out.length).fill('unknown'));
}
if ($(Wildcard.TOMORROW_POLLEN_BIRCH).length > 0) {
out = this.mergeArray(out, 'pollen_birch', this.parseValue($, Wildcard.TOMORROW_POLLEN_BIRCH));
} else {
out = this.mergeArray(out, 'pollen_birch', new Array(out.length).fill(0));
}
if ($(Wildcard.TOMORROW_POLLEN_GRASS).length > 0) {
out = this.mergeArray(out, 'pollen_grass', this.parseValue($, Wildcard.TOMORROW_POLLEN_GRASS));
} else {
out = this.mergeArray(out, 'pollen_grass', new Array(out.length).fill(0));
}
if ($(Wildcard.TOMORROW_POLLEN_RAGWEED).length > 0) {
out = this.mergeArray(out, 'pollen_ragweed', this.parseValue($, Wildcard.TOMORROW_POLLEN_RAGWEED));
} else {
out = this.mergeArray(out, 'pollen_ragweed', new Array(out.length).fill(0));
}
return out;
});
}
async getCityUri(city) {
return axios.get(`${Endpoint.SEARCH}${encodeURIComponent(city)}/9/`, this._axios_config).then(({
data
}) => {
var _data$data$;
if (data.data.length === 0 || ((_data$data$ = data.data[0]) == null ? void 0 : _data$data$.url) === undefined) {
throw new GismeteoCityError('Unable to find uri for given city name');
}
return data.data[0].url;
});
}
parseDates($, wildcard) {
const search = $(wildcard);
const start_date = moment(search.first().text() + moment().format('YYYY'), 'DD MMMYYYY', 'ru');
const out = [];
for (let i = 0; i < search.length; i++) {
out.push({
dt: start_date.add(i, 'days').unix()
});
}
return out;
}
parseDtFromStringArray(input) {
const out = [];
for (let i = 0; i < input.length; i++) {
const strip_date = input[i].split(', UTC: ')[1];
out.push({
dt: moment(strip_date, 'YYYY-MM-DD HH:mm:ss').unix()
});
}
return out;
}
parseValue($, wildcard) {
const out = [];
const search = $(this.unitToWildcard(wildcard));
search.each((i, el) => {
out[i] = is_number(cheerio.load(el).text().replace(',', '.')) ? this.numberify(cheerio.load(el).text()) : cheerio.load(el).text();
});
return out;
}
parseAttr($, wildcard, attr) {
const out = [];
const search = $(this.unitToWildcard(wildcard));
search.each((i, el) => {
out[i] = is_number(el.attribs[attr].replace(',', '.')) ? Number(el.attribs[attr].replace(',', '.')) : el.attribs[attr];
});
return out;
}
unitToWildcard(wildcard) {
return String(wildcard).replace('UNIT_TEMP', this._unit.temp).replace('UNIT_PRESSURE', this._unit.pressure).replace('UNIT_WIND', this._unit.wind);
}
mergeArray(input, key, values) {
return input.map((item, index) => {
item[key] = values[index];
return item;
});
}
numberify(value) {
return Number(String(value).replace(',', '.'));
}
parentText($, wildcard) {
return $(this.unitToWildcard(wildcard)).contents().filter(function () {
return this.nodeType === 3;
}).text();
}
}
exports.default = Gismeteo;
//# sourceMappingURL=gismeteo.cjs.development.js.map
```
Trying to do this:
import Gismeteo from 'gismeteo'
console.log(new Gismeteo())
And here is the full error:
file:///E:/programming/ts/gismeteo-class/build/src/check.js:12
console.log(new Gismeteo());
^
TypeError: Gismeteo is not a constructor
at file:///E:/programming/ts/gismeteo-class/build/src/check.js:12:13
at ModuleJob.run (node:internal/modules/esm/module_job:185:25)
at async Promise.all (index 0)
at async ESMLoader.import (node:internal/modules/esm/loader:281:24)
at async loadESM (node:internal/process/esm_loader:88:5)
at async handleMainPromise (node:internal/modules/run_main:65:12)
error Command failed with exit code 1.
Current Behavior
Compiled lib with
export default class Gismeteo
do not work. I receiveTypeError: Gismeteo is not a constructor
Expected behavior
It should work:(
Additional context
There are
class Gismeteo { ... }
andexports.default = Gismeteo;
in cjs. Build with option--target node
My TS main file
```ts import axios from 'axios' import moment from 'moment' import { Cheerio, CheerioAPI, Element, load } from 'cheerio' import UserAgent from 'user-agents' import is_number from 'is-number' import { Endpoint, Unit, Wildcard } from './common/constants' import { GismeteoCityError } from './common/errors' import { CityUri, GismeteoMonth, GismeteoNow, GismeteoOptions, GismeteoTomorrow, GismeteoTwoWeeks } from './common/types' export default class Gismeteo { private _base_url: Endpoint private _unit: { temp: Unit pressure: Unit wind: Unit } private readonly _axios_config = { headers: { 'user-agent': new UserAgent().toString(), }, } constructor(options?: GismeteoOptions) { this._base_url = options?.lang === 'en' ? Endpoint.BASE_EN : Endpoint.BASE_RU this._unit = { temp: options?.unit_temp === 'F' ? Unit.TEMP_F : Unit.TEMP_C, pressure: options?.unit_pressure === 'hPa' ? Unit.PRESSURE_HPA : Unit.PRESSURE_MMHG, wind: options?.unit_wind === 'kmh' ? Unit.WIND_KMH : Unit.WIND_MS, } } public async getTwoWeeks(city: string): PromiseMy CJS main file
```js 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var axios = _interopDefault(require('axios')); var moment = _interopDefault(require('moment')); var cheerio = require('cheerio'); var UserAgent = _interopDefault(require('user-agents')); var is_number = _interopDefault(require('is-number')); var Endpoint; (function (Endpoint) { Endpoint["BASE_RU"] = "https://www.gismeteo.ru"; Endpoint["BASE_EN"] = "https://www.gismeteo.com"; Endpoint["SEARCH"] = "https://www.gismeteo.ru/mq/search/"; Endpoint["TWOWEEKS"] = "2-weeks/"; Endpoint["MONTH"] = "month/"; Endpoint["NOW"] = "now/"; Endpoint["TOMMOROW"] = "tomorrow/"; })(Endpoint || (Endpoint = {})); var Unit; (function (Unit) { Unit["TEMP_C"] = "unit_temperature_c"; Unit["TEMP_F"] = "unit_temperature_f"; Unit["PRESSURE_MMHG"] = "unit_pressure_mm_hg_atm"; Unit["PRESSURE_HPA"] = "unit_pressure_h_pa"; Unit["WIND_MS"] = "unit_wind_m_s"; Unit["WIND_KMH"] = "unit_wind_km_h"; })(Unit || (Unit = {})); var Wildcard; (function (Wildcard) { Wildcard["TWOWEEKS_DATE"] = "div[data-stat-value*=\"weather\"] div.widget-row-days-date div.date"; Wildcard["TWOWEEKS_TMAX"] = "div[data-stat-value*=\"weather\"] div.widget-row-chart-temperature div.value div.maxt span.UNIT_TEMP"; Wildcard["TWOWEEKS_TMIN"] = "div[data-stat-value*=\"weather\"] div.widget-row-chart-temperature div.value div.mint span.UNIT_TEMP"; Wildcard["TWOWEEKS_TAVG"] = "div[data-stat-value*=\"temperature-avg\"] div.value span.UNIT_TEMP"; Wildcard["TWOWEEKS_SUMMARY"] = "div[data-stat-value*=\"weather\"] div.widget-row-icon div.row-item div.tooltip"; Wildcard["TWOWEEKS_PRESSURE"] = "div[data-stat-value*=\"pressure\"] div.widget-row-chart-pressure div.value div.maxt span.UNIT_PRESSURE"; Wildcard["TWOWEEKS_WINDSPEED"] = "div[data-stat-value*=\"wind\"] div.widget-row-wind-speed div.row-item span.UNIT_WIND"; Wildcard["TWOWEEKS_WINDGUST"] = "div[data-stat-value*=\"wind\"] div.widget-row-wind-gust div.row-item span.UNIT_WIND"; Wildcard["TWOWEEKS_WINDDIR"] = "div[data-stat-value*=\"wind\"] div.widget-row-wind-direction div.row-item div.direction"; Wildcard["TWOWEEKS_PRECIPITATION"] = "div[data-stat-value*=\"weather\"] div.widget-row-precipitation-bars div.row-item div.item-unit"; Wildcard["TWOWEEKS_HUMIDITY"] = "div[data-stat-value*=\"humidity\"] div.widget-items div.row-item"; Wildcard["TWOWEEKS_ROADS"] = "div[data-stat-value*=\"roadcondition\"] div.row-item div.item-description"; Wildcard["TWOWEEKS_GEOMAGNETIC"] = "div[data-stat-value*=\"geomagnetic\"] div.row-item div.item"; Wildcard["TWOWEEKS_POLLEN_BIRCH"] = "div[data-stat-value*=\"pollen\"] div.widget-row-pollen-birch-point div.row-item div.item"; Wildcard["TWOWEEKS_POLLEN_GRASS"] = "div[data-stat-value*=\"pollen\"] div.widget-row-pollen-grass-point div.row-item div.item"; Wildcard["TWOWEEKS_POLLEN_RAGWEED"] = "div[data-stat-value*=\"pollen\"] div.widget-row-pollen-ragweed div.row-item div.item"; Wildcard["MONTH_DATE"] = "div.widget-month div.date"; Wildcard["MONTH_TMAX"] = "div.widget-month div.maxt span.UNIT_TEMP"; Wildcard["MONTH_TMIN"] = "div.widget-month div.mint span.UNIT_TEMP"; Wildcard["NOW_TEMP"] = "div.now div.now-weather span.UNIT_TEMP"; Wildcard["NOW_TEMPFEELS"] = "div.now div.now-feel span.UNIT_TEMP"; Wildcard["NOW_WINDSPEED"] = "div.now div.wind div.UNIT_WIND"; Wildcard["NOW_WINDDIR"] = "div.now div.wind div.UNIT_WIND div.item-measure div"; Wildcard["NOW_PRESSURE"] = "div.now div.pressure div.UNIT_PRESSURE"; Wildcard["NOW_HUMIDITY"] = "div.now div.humidity div.item-value"; Wildcard["NOW_SUMMARY"] = "div.now div.now-desc"; Wildcard["NOW_GEOMAGNETIC"] = "div.now div.gm div.item-value"; Wildcard["NOW_WATER"] = "div.now div.water div.item-value div.UNIT_TEMP"; Wildcard["NOW_SUNRISE"] = "div.now div.now-astro div.now-astro-sunrise div.time"; Wildcard["NOW_SUNSET"] = "div.now div.now-astro div.now-astro-sunset div.time"; Wildcard["TOMORROW_TIME"] = "div[data-stat-value*=\"weather\"] div.widget-row-time div.row-item"; Wildcard["TOMORROW_TEMP"] = "div[data-stat-value*=\"weather\"] div.widget-row-chart-temperature div.value span.UNIT_TEMP"; Wildcard["TOMORROW_PRECIPITATION"] = "div[data-stat-value*=\"weather\"] div.widget-row-precipitation-bars div.row-item div.item-unit"; Wildcard["TOMORROW_SUMMARY"] = "div[data-stat-value*=\"weather\"] div.widget-row-icon div.row-item div.tooltip"; Wildcard["TOMORROW_WINDSPEED"] = "div[data-stat-value*=\"wind\"] div.widget-row-wind-speed div.row-item span.UNIT_WIND"; Wildcard["TOMORROW_WINDGUST"] = "div[data-stat-value*=\"wind\"] div.widget-row-wind-gust div.row-item span.UNIT_WIND"; Wildcard["TOMORROW_WINDDIR"] = "div[data-stat-value*=\"wind\"] div.widget-row-wind-direction div.row-item div.direction"; Wildcard["TOMORROW_POLLEN_BIRCH"] = "div[data-stat-value*=\"pollen\"] div.widget-row-pollen-birch-point div.row-item div.item"; Wildcard["TOMORROW_POLLEN_GRASS"] = "div[data-stat-value*=\"pollen\"] div.widget-row-pollen-grass-point div.row-item div.item"; Wildcard["TOMORROW_POLLEN_RAGWEED"] = "div[data-stat-value*=\"pollen\"] div.widget-row-pollen-ragweed div.row-item div.item"; Wildcard["TOMORROW_ROADS"] = "div[data-stat-value*=\"roadcondition\"] div.row-item div.item-description"; Wildcard["TOMORROW_PRESSURE"] = "div[data-stat-value*=\"pressure\"] div.widget-row-chart-pressure div.value span.UNIT_PRESSURE"; Wildcard["TOMORROW_HUMIDITY"] = "div[data-stat-value*=\"humidity\"] div.widget-items div.row-item"; Wildcard["TOMORROW_GEOMAGNETIC"] = "div[data-stat-value*=\"geomagnetic\"] div.row-item div.item"; })(Wildcard || (Wildcard = {})); class GismeteoCityError extends Error {} class Gismeteo { constructor(options) { this._axios_config = { headers: { 'user-agent': new UserAgent().toString() } }; this._base_url = (options == null ? void 0 : options.lang) === 'en' ? Endpoint.BASE_EN : Endpoint.BASE_RU; this._unit = { temp: (options == null ? void 0 : options.unit_temp) === 'F' ? Unit.TEMP_F : Unit.TEMP_C, pressure: (options == null ? void 0 : options.unit_pressure) === 'hPa' ? Unit.PRESSURE_HPA : Unit.PRESSURE_MMHG, wind: (options == null ? void 0 : options.unit_wind) === 'kmh' ? Unit.WIND_KMH : Unit.WIND_MS }; } async getTwoWeeks(city) { const city_uri = await this.getCityUri(city); return axios.get(`${this._base_url}${city_uri}${Endpoint.TWOWEEKS}`, this._axios_config).then(({ data }) => { const $ = cheerio.load(data); let out = []; out = this.parseDates($, Wildcard.TWOWEEKS_DATE); out = this.mergeArray(out, 'tmax', this.parseValue($, Wildcard.TWOWEEKS_TMAX)); out = this.mergeArray(out, 'tmin', this.parseValue($, Wildcard.TWOWEEKS_TMIN)); out = this.mergeArray(out, 'tavg', this.parseValue($, Wildcard.TWOWEEKS_TAVG)); out = this.mergeArray(out, 'pressure', this.parseValue($, Wildcard.TWOWEEKS_PRESSURE)); out = this.mergeArray(out, 'wind_speed', this.parseValue($, Wildcard.TWOWEEKS_WINDSPEED)); out = this.mergeArray(out, 'wind_gust', this.parseValue($, Wildcard.TWOWEEKS_WINDGUST)); out = this.mergeArray(out, 'wind_dir', this.parseValue($, Wildcard.TWOWEEKS_WINDDIR)); out = this.mergeArray(out, 'precipitation', this.parseValue($, Wildcard.TWOWEEKS_PRECIPITATION)); out = this.mergeArray(out, 'humidity', this.parseValue($, Wildcard.TWOWEEKS_HUMIDITY)); out = this.mergeArray(out, 'summary', this.parseAttr($, Wildcard.TWOWEEKS_SUMMARY, 'data-text')); out = this.mergeArray(out, 'geomagnetic', this.parseValue($, Wildcard.TWOWEEKS_GEOMAGNETIC)); if ($(Wildcard.TWOWEEKS_ROADS).length > 0) { out = this.mergeArray(out, 'road_condition', this.parseValue($, Wildcard.TWOWEEKS_ROADS)); } else { out = this.mergeArray(out, 'road_condition', new Array(out.length).fill('unknown')); } if ($(Wildcard.TWOWEEKS_POLLEN_BIRCH).length > 0) { out = this.mergeArray(out, 'pollen_birch', this.parseValue($, Wildcard.TWOWEEKS_POLLEN_BIRCH)); } else { out = this.mergeArray(out, 'pollen_birch', new Array(out.length).fill(0)); } if ($(Wildcard.TWOWEEKS_POLLEN_GRASS).length > 0) { out = this.mergeArray(out, 'pollen_grass', this.parseValue($, Wildcard.TWOWEEKS_POLLEN_GRASS)); } else { out = this.mergeArray(out, 'pollen_grass', new Array(out.length).fill(0)); } if ($(Wildcard.TWOWEEKS_POLLEN_RAGWEED).length > 0) { out = this.mergeArray(out, 'pollen_ragweed', this.parseValue($, Wildcard.TWOWEEKS_POLLEN_RAGWEED)); } else { out = this.mergeArray(out, 'pollen_ragweed', new Array(out.length).fill(0)); } return out; }); } async getMonth(city) { const city_uri = await this.getCityUri(city); return axios.get(`${this._base_url}${city_uri}${Endpoint.MONTH}`, this._axios_config).then(({ data }) => { const $ = cheerio.load(data); let out = []; out = this.parseDates($, Wildcard.MONTH_DATE); out = this.mergeArray(out, 'tmax', this.parseValue($, Wildcard.MONTH_TMAX)); out = this.mergeArray(out, 'tmin', this.parseValue($, Wildcard.MONTH_TMIN)); return out; }); } async getNow(city) { const city_uri = await this.getCityUri(city); return axios.get(`${this._base_url}${city_uri}${Endpoint.NOW}`, this._axios_config).then(({ data }) => { const $ = cheerio.load(data); const out = { temp: this.numberify($(this.unitToWildcard(Wildcard.NOW_TEMP)).text()), temp_feels: this.numberify($(this.unitToWildcard(Wildcard.NOW_TEMPFEELS)).text()), wind_speed: this.numberify(this.parentText($, Wildcard.NOW_WINDSPEED)), wind_dir: $(this.unitToWildcard(Wildcard.NOW_WINDDIR)).last().text(), pressure: this.numberify(this.parentText($, Wildcard.NOW_PRESSURE)), humidity: this.numberify($(Wildcard.NOW_HUMIDITY).text()), summary: $(Wildcard.NOW_SUMMARY).text(), geomagnetic: this.numberify($(Wildcard.NOW_GEOMAGNETIC).text()), water_temp: this.numberify($(this.unitToWildcard(Wildcard.NOW_WATER)).text()), sunrise: moment(moment().format('DD MMM YYYY') + ' ' + $(Wildcard.NOW_SUNRISE).text(), 'DD MMM YYYY H:mm').unix(), sunset: moment(moment().format('DD MMM YYYY') + ' ' + $(Wildcard.NOW_SUNSET).text(), 'DD MMM YYYY H:mm').unix() }; return out; }); } async getTommorow(city) { const city_uri = await this.getCityUri(city); return axios.get(`${this._base_url}${city_uri}${Endpoint.TOMMOROW}`, this._axios_config).then(({ data }) => { const $ = cheerio.load(data); let out = []; const dates = this.parseAttr($, Wildcard.TOMORROW_TIME, 'title'); out = this.parseDtFromStringArray(dates); out = this.mergeArray(out, 'temp', this.parseValue($, Wildcard.TOMORROW_TEMP)); out = this.mergeArray(out, 'pressure', this.parseValue($, Wildcard.TOMORROW_PRESSURE)); out = this.mergeArray(out, 'wind_speed', this.parseValue($, Wildcard.TOMORROW_WINDSPEED)); out = this.mergeArray(out, 'wind_gust', this.parseValue($, Wildcard.TOMORROW_WINDGUST)); out = this.mergeArray(out, 'wind_dir', this.parseValue($, Wildcard.TOMORROW_WINDDIR)); out = this.mergeArray(out, 'precipitation', this.parseValue($, Wildcard.TOMORROW_PRECIPITATION)); out = this.mergeArray(out, 'humidity', this.parseValue($, Wildcard.TOMORROW_HUMIDITY)); out = this.mergeArray(out, 'summary', this.parseAttr($, Wildcard.TOMORROW_SUMMARY, 'data-text')); out = this.mergeArray(out, 'geomagnetic', this.parseValue($, Wildcard.TOMORROW_GEOMAGNETIC)); if ($(Wildcard.TOMORROW_ROADS).length > 0) { out = this.mergeArray(out, 'road_condition', this.parseValue($, Wildcard.TOMORROW_ROADS)); } else { out = this.mergeArray(out, 'road_condition', new Array(out.length).fill('unknown')); } if ($(Wildcard.TOMORROW_POLLEN_BIRCH).length > 0) { out = this.mergeArray(out, 'pollen_birch', this.parseValue($, Wildcard.TOMORROW_POLLEN_BIRCH)); } else { out = this.mergeArray(out, 'pollen_birch', new Array(out.length).fill(0)); } if ($(Wildcard.TOMORROW_POLLEN_GRASS).length > 0) { out = this.mergeArray(out, 'pollen_grass', this.parseValue($, Wildcard.TOMORROW_POLLEN_GRASS)); } else { out = this.mergeArray(out, 'pollen_grass', new Array(out.length).fill(0)); } if ($(Wildcard.TOMORROW_POLLEN_RAGWEED).length > 0) { out = this.mergeArray(out, 'pollen_ragweed', this.parseValue($, Wildcard.TOMORROW_POLLEN_RAGWEED)); } else { out = this.mergeArray(out, 'pollen_ragweed', new Array(out.length).fill(0)); } return out; }); } async getCityUri(city) { return axios.get(`${Endpoint.SEARCH}${encodeURIComponent(city)}/9/`, this._axios_config).then(({ data }) => { var _data$data$; if (data.data.length === 0 || ((_data$data$ = data.data[0]) == null ? void 0 : _data$data$.url) === undefined) { throw new GismeteoCityError('Unable to find uri for given city name'); } return data.data[0].url; }); } parseDates($, wildcard) { const search = $(wildcard); const start_date = moment(search.first().text() + moment().format('YYYY'), 'DD MMMYYYY', 'ru'); const out = []; for (let i = 0; i < search.length; i++) { out.push({ dt: start_date.add(i, 'days').unix() }); } return out; } parseDtFromStringArray(input) { const out = []; for (let i = 0; i < input.length; i++) { const strip_date = input[i].split(', UTC: ')[1]; out.push({ dt: moment(strip_date, 'YYYY-MM-DD HH:mm:ss').unix() }); } return out; } parseValue($, wildcard) { const out = []; const search = $(this.unitToWildcard(wildcard)); search.each((i, el) => { out[i] = is_number(cheerio.load(el).text().replace(',', '.')) ? this.numberify(cheerio.load(el).text()) : cheerio.load(el).text(); }); return out; } parseAttr($, wildcard, attr) { const out = []; const search = $(this.unitToWildcard(wildcard)); search.each((i, el) => { out[i] = is_number(el.attribs[attr].replace(',', '.')) ? Number(el.attribs[attr].replace(',', '.')) : el.attribs[attr]; }); return out; } unitToWildcard(wildcard) { return String(wildcard).replace('UNIT_TEMP', this._unit.temp).replace('UNIT_PRESSURE', this._unit.pressure).replace('UNIT_WIND', this._unit.wind); } mergeArray(input, key, values) { return input.map((item, index) => { item[key] = values[index]; return item; }); } numberify(value) { return Number(String(value).replace(',', '.')); } parentText($, wildcard) { return $(this.unitToWildcard(wildcard)).contents().filter(function () { return this.nodeType === 3; }).text(); } } exports.default = Gismeteo; //# sourceMappingURL=gismeteo.cjs.development.js.map ```Trying to do this:
And here is the full error:
Your environment