liftie 3.56.5 → 4.0.1
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/Makefile +2 -2
- package/app.js +33 -25
- package/lib/checker.js +1 -1
- package/lib/cli/curl.js +8 -8
- package/lib/cli/dirs.js +8 -6
- package/lib/cli/fetch.js +16 -17
- package/lib/cli/for-each-resort.js +4 -11
- package/lib/cli/generate.js +11 -11
- package/lib/cli/noaa.js +28 -42
- package/lib/client/about/index.js +2 -6
- package/lib/client/boot/height.js +2 -6
- package/lib/client/boot/index.js +8 -11
- package/lib/client/boot/service-worker.js +1 -5
- package/lib/client/minimax/index.js +1 -3
- package/lib/client/resort/dom.js +2 -7
- package/lib/client/resort/index.js +7 -10
- package/lib/client/resort/lifts.js +4 -5
- package/lib/client/resort/snow.js +3 -4
- package/lib/client/resort/weather.js +3 -4
- package/lib/client/resort/webcams.js +5 -8
- package/lib/client/state/index.js +4 -7
- package/lib/client/stats/index.js +1 -5
- package/lib/client/tag/index.js +1 -3
- package/lib/embed/index.js +0 -2
- package/lib/lifts/index.js +12 -12
- package/lib/lifts/parse.js +5 -5
- package/lib/lifts/parser.js +6 -10
- package/lib/lifts/pipe.js +3 -3
- package/lib/lifts/request.js +1 -3
- package/lib/lifts/rest.js +2 -4
- package/lib/lifts/stats.js +2 -5
- package/lib/loader.js +9 -12
- package/lib/loaders.js +7 -8
- package/lib/opening.js +6 -5
- package/lib/plugins.js +3 -8
- package/lib/resorts/3cime/index.js +1 -1
- package/lib/resorts/3cime/resort.json +1 -1
- package/lib/resorts/49-degrees-north/index.js +1 -1
- package/lib/resorts/abasin/index.js +2 -2
- package/lib/resorts/alpe-lusia-san-pellegrino/index.js +1 -1
- package/lib/resorts/alpe-lusia-san-pellegrino/resort.json +1 -1
- package/lib/resorts/alpine/index.js +1 -1
- package/lib/resorts/alta/index.js +6 -7
- package/lib/resorts/alta-badia/index.js +1 -1
- package/lib/resorts/alta-badia/resort.json +1 -1
- package/lib/resorts/alyeska/index.js +1 -1
- package/lib/resorts/alyeska/resort.json +1 -1
- package/lib/resorts/angel-fire/index.js +1 -1
- package/lib/resorts/arabba/index.js +1 -1
- package/lib/resorts/arabba/resort.json +1 -1
- package/lib/resorts/aspen-highlands/index.js +1 -1
- package/lib/resorts/aspen-mountain/index.js +1 -1
- package/lib/resorts/attitash/index.js +1 -1
- package/lib/resorts/attitash/resort.json +1 -1
- package/lib/resorts/beavercreek/index.js +1 -1
- package/lib/resorts/berkshire-east/index.js +1 -1
- package/lib/resorts/big-sky/index.js +1 -1
- package/lib/resorts/big-white/index.js +1 -1
- package/lib/resorts/big-white/resort.json +1 -1
- package/lib/resorts/blue-mountain-pa/index.js +1 -1
- package/lib/resorts/bluemountain/index.js +1 -1
- package/lib/resorts/bogusbasin/index.js +5 -4
- package/lib/resorts/bolton-valley/index.js +2 -3
- package/lib/resorts/boreal/index.js +1 -1
- package/lib/resorts/breck/index.js +1 -1
- package/lib/resorts/brettonwoods/index.js +7 -5
- package/lib/resorts/brettonwoods/resort.json +1 -1
- package/lib/resorts/brianhead/index.js +1 -1
- package/lib/resorts/bridger-bowl/index.js +4 -3
- package/lib/resorts/brighton/index.js +1 -1
- package/lib/resorts/bromley-mountain/index.js +1 -1
- package/lib/resorts/burke-mountain/index.js +1 -1
- package/lib/resorts/buttermilk/index.js +1 -1
- package/lib/resorts/caberfae-peaks/index.js +1 -1
- package/lib/resorts/camelback/index.js +1 -1
- package/lib/resorts/campo-felice/index.js +1 -1
- package/lib/resorts/campo-felice/resort.json +1 -1
- package/lib/resorts/canada-olympic-park/index.js +1 -1
- package/lib/resorts/cannon/index.js +1 -1
- package/lib/resorts/cannon/resort.json +1 -1
- package/lib/resorts/cataloochee/index.js +1 -1
- package/lib/resorts/catedral/index.js +1 -1
- package/lib/resorts/cervino/index.js +2 -2
- package/lib/resorts/chamonix/index.js +2 -2
- package/lib/resorts/chamonix/resort.json +1 -1
- package/lib/resorts/chinapeak/index.js +1 -1
- package/lib/resorts/civetta/index.js +1 -1
- package/lib/resorts/civetta/resort.json +1 -1
- package/lib/resorts/claviere/index.js +1 -1
- package/lib/resorts/copper/index.js +1 -1
- package/lib/resorts/coronetpeak/index.js +1 -1
- package/lib/resorts/coronetpeak/resort.json +1 -1
- package/lib/resorts/cortina-d-ampezzo/index.js +1 -1
- package/lib/resorts/cortina-d-ampezzo/resort.json +1 -1
- package/lib/resorts/courchevel/index.js +1 -1
- package/lib/resorts/courchevel/resort.json +2 -1
- package/lib/resorts/cranmore-mountain/index.js +1 -1
- package/lib/resorts/cranmore-mountain/resort.json +1 -1
- package/lib/resorts/cransmontana/index.js +2 -2
- package/lib/resorts/crested-butte/index.js +1 -1
- package/lib/resorts/crystal-mountain/index.js +1 -1
- package/lib/resorts/cypress-mountain/index.js +1 -1
- package/lib/resorts/deer-valley/index.js +1 -1
- package/lib/resorts/devils-head/index.js +1 -1
- package/lib/resorts/diamondpeak/index.js +1 -1
- package/lib/resorts/falls-creek/index.js +5 -3
- package/lib/resorts/falls-creek/resort.json +1 -1
- package/lib/resorts/flims-laax-falera/index.js +1 -1
- package/lib/resorts/flims-laax-falera/resort.json +1 -1
- package/lib/resorts/folgaria/index.js +1 -1
- package/lib/resorts/folgaria/resort.json +1 -1
- package/lib/resorts/folgarida-marilleva/index.js +2 -1
- package/lib/resorts/forni/index.js +1 -1
- package/lib/resorts/forni/resort.json +1 -1
- package/lib/resorts/gore-mountain/index.js +1 -1
- package/lib/resorts/grand-targhee/index.js +1 -1
- package/lib/resorts/grouse/index.js +1 -1
- package/lib/resorts/gunstock/index.js +1 -1
- package/lib/resorts/gunstock/resort.json +1 -1
- package/lib/resorts/heavenly/index.js +1 -1
- package/lib/resorts/hochfuegen/index.js +2 -2
- package/lib/resorts/homewood/index.js +1 -1
- package/lib/resorts/hoodoo/index.js +1 -1
- package/lib/resorts/hunter/index.js +1 -1
- package/lib/resorts/ischgl-silvretta-arena/index.js +1 -1
- package/lib/resorts/jackson-hole/index.js +5 -3
- package/lib/resorts/jay-peak/index.js +1 -1
- package/lib/resorts/jiminypeak/index.js +1 -1
- package/lib/resorts/june-mountain/index.js +1 -1
- package/lib/resorts/keystone/index.js +1 -1
- package/lib/resorts/killington/index.js +1 -1
- package/lib/resorts/king-pine/index.js +5 -3
- package/lib/resorts/king-pine/resort.json +1 -1
- package/lib/resorts/kirkwood/index.js +1 -1
- package/lib/resorts/kitzbuehel/index.js +1 -1
- package/lib/resorts/lamolina/index.js +1 -1
- package/lib/resorts/lamolina/resort.json +1 -1
- package/lib/resorts/laplagne/index.js +1 -1
- package/lib/resorts/laplagne/resort.json +2 -1
- package/lib/resorts/larosiere/index.js +1 -1
- package/lib/resorts/lavarone/index.js +1 -1
- package/lib/resorts/lavarone/resort.json +1 -1
- package/lib/resorts/lesarcs/index.js +1 -1
- package/lib/resorts/lesmenuires/index.js +1 -1
- package/lib/resorts/lesmenuires/resort.json +2 -1
- package/lib/resorts/loon/index.js +1 -1
- package/lib/resorts/loon/resort.json +1 -1
- package/lib/resorts/loveland/index.js +2 -2
- package/lib/resorts/mad-river-glen/index.js +2 -2
- package/lib/resorts/madonna-di-campiglio/index.js +2 -1
- package/lib/resorts/mammoth-lakes/index.js +1 -1
- package/lib/resorts/manning-park/index.js +1 -1
- package/lib/resorts/manning-park/resort.json +1 -1
- package/lib/resorts/megeve/index.js +1 -1
- package/lib/resorts/megeve/resort.json +2 -1
- package/lib/resorts/meribel/index.js +1 -1
- package/lib/resorts/meribel/resort.json +2 -1
- package/lib/resorts/monarch/index.js +2 -2
- package/lib/resorts/monte-amiata/index.js +1 -1
- package/lib/resorts/monte-amiata/resort.json +1 -1
- package/lib/resorts/monte-bondone/index.js +1 -1
- package/lib/resorts/montegenevre/index.js +1 -1
- package/lib/resorts/monterosa/index.js +1 -1
- package/lib/resorts/morzine/index.js +1 -1
- package/lib/resorts/morzine/resort.json +6 -2
- package/lib/resorts/mount-sunapee/index.js +1 -1
- package/lib/resorts/mount-sunapee/resort.json +1 -1
- package/lib/resorts/mountsnow/index.js +1 -1
- package/lib/resorts/mt-buller/index.js +1 -1
- package/lib/resorts/mt-hotham/index.js +5 -3
- package/lib/resorts/mt-seymour/index.js +1 -1
- package/lib/resorts/mt-spokane/index.js +1 -1
- package/lib/resorts/mtbachelor/index.js +1 -1
- package/lib/resorts/mtbrighton/index.js +1 -1
- package/lib/resorts/mthigh/index.js +1 -1
- package/lib/resorts/mthood/index.js +1 -1
- package/lib/resorts/mtpeter/index.js +1 -1
- package/lib/resorts/mtpeter/resort.json +1 -1
- package/lib/resorts/mtrose/index.js +1 -1
- package/lib/resorts/niseko/index.js +1 -1
- package/lib/resorts/niseko/resort.json +1 -1
- package/lib/resorts/northstar/index.js +1 -1
- package/lib/resorts/okemo/index.js +1 -1
- package/lib/resorts/ovindoli/index.js +1 -1
- package/lib/resorts/ovindoli/resort.json +1 -1
- package/lib/resorts/owlshead/index.js +1 -1
- package/lib/resorts/paganella/index.js +1 -1
- package/lib/resorts/paganella/resort.json +1 -1
- package/lib/resorts/palisades/index.js +1 -1
- package/lib/resorts/parkcity/index.js +1 -1
- package/lib/resorts/pats-peak/index.js +4 -2
- package/lib/resorts/pats-peak/resort.json +1 -1
- package/lib/resorts/peio/index.js +2 -2
- package/lib/resorts/perisher/index.js +1 -1
- package/lib/resorts/perisher/resort.json +1 -1
- package/lib/resorts/piancavallo/index.js +1 -1
- package/lib/resorts/piancavallo/resort.json +1 -1
- package/lib/resorts/pico/index.js +1 -1
- package/lib/resorts/pinzolo/index.js +2 -1
- package/lib/resorts/plan-de-corones/index.js +1 -1
- package/lib/resorts/plan-de-corones/resort.json +1 -1
- package/lib/resorts/pleasant-mountain/index.js +1 -1
- package/lib/resorts/pleasant-mountain/resort.json +1 -1
- package/lib/resorts/pontedilegno-tonale/index.js +1 -1
- package/lib/resorts/ragged-mountain/index.js +1 -1
- package/lib/resorts/ragged-mountain/resort.json +1 -1
- package/lib/resorts/ravascletto-zoncolan/index.js +1 -1
- package/lib/resorts/ravascletto-zoncolan/resort.json +1 -1
- package/lib/resorts/red-lodge-mountain/index.js +1 -1
- package/lib/resorts/red-mountain/index.js +2 -3
- package/lib/resorts/rio-pusteria-bressanone/index.js +1 -1
- package/lib/resorts/rio-pusteria-bressanone/resort.json +1 -1
- package/lib/resorts/roccaraso/index.js +1 -1
- package/lib/resorts/roccaraso/resort.json +1 -1
- package/lib/resorts/saddleback/index.js +1 -1
- package/lib/resorts/saddleback/resort.json +1 -1
- package/lib/resorts/san-martino-di-castrozza-passo-rolle/index.js +1 -1
- package/lib/resorts/san-martino-di-castrozza-passo-rolle/resort.json +1 -1
- package/lib/resorts/sansicario/index.js +1 -1
- package/lib/resorts/sappada/index.js +1 -1
- package/lib/resorts/sappada/resort.json +1 -1
- package/lib/resorts/sasquatch-mountain/index.js +1 -1
- package/lib/resorts/sauris/index.js +1 -1
- package/lib/resorts/sauris/resort.json +1 -1
- package/lib/resorts/sauze/index.js +1 -1
- package/lib/resorts/schweitzer/index.js +1 -1
- package/lib/resorts/sella/index.js +1 -1
- package/lib/resorts/sella/resort.json +1 -1
- package/lib/resorts/serfaus-fiss-ladis/index.js +1 -1
- package/lib/resorts/sestriere/index.js +1 -1
- package/lib/resorts/sestriere/resort.json +1 -1
- package/lib/resorts/shawnee-mountain/index.js +4 -2
- package/lib/resorts/sierra/index.js +1 -1
- package/lib/resorts/silver-star/index.js +2 -2
- package/lib/resorts/skiwelt/index.js +1 -1
- package/lib/resorts/smuggs/index.js +1 -1
- package/lib/resorts/snow-valley/index.js +2 -2
- package/lib/resorts/snowbasin/index.js +1 -1
- package/lib/resorts/snowbird/index.js +2 -3
- package/lib/resorts/snowmass/index.js +1 -1
- package/lib/resorts/snowshoe/index.js +1 -1
- package/lib/resorts/soelden/index.js +1 -1
- package/lib/resorts/solitude/index.js +1 -1
- package/lib/resorts/st-anton-am-arlberg/index.js +1 -1
- package/lib/resorts/steamboat/index.js +1 -1
- package/lib/resorts/stevens/index.js +1 -1
- package/lib/resorts/stowe/index.js +1 -1
- package/lib/resorts/stratton/index.js +1 -1
- package/lib/resorts/sugarbowl/index.js +1 -1
- package/lib/resorts/sugarbush/index.js +1 -1
- package/lib/resorts/sugarloaf/index.js +1 -1
- package/lib/resorts/sugarloaf/resort.json +1 -1
- package/lib/resorts/sun-peaks/index.js +1 -1
- package/lib/resorts/sun-peaks/resort.json +1 -1
- package/lib/resorts/sunday-river/index.js +1 -1
- package/lib/resorts/sunday-river/resort.json +1 -1
- package/lib/resorts/sunshine-village/index.js +6 -3
- package/lib/resorts/sunvalley/index.js +1 -1
- package/lib/resorts/tahoe-donner/index.js +1 -1
- package/lib/resorts/taos/index.js +1 -1
- package/lib/resorts/tarvisio/index.js +1 -1
- package/lib/resorts/tarvisio/resort.json +1 -1
- package/lib/resorts/telluride/index.js +1 -1
- package/lib/resorts/thredbo/index.js +1 -1
- package/lib/resorts/tignes/index.js +1 -1
- package/lib/resorts/tignes/resort.json +1 -1
- package/lib/resorts/timberline-lodge/index.js +1 -1
- package/lib/resorts/tremblant/index.js +1 -1
- package/lib/resorts/vail/index.js +1 -1
- package/lib/resorts/val-di-fassa/index.js +1 -1
- package/lib/resorts/val-di-fassa/resort.json +1 -1
- package/lib/resorts/val-di-fiemme/index.js +1 -1
- package/lib/resorts/val-di-fiemme/resort.json +1 -1
- package/lib/resorts/val-gardena/index.js +1 -1
- package/lib/resorts/val-gardena/resort.json +1 -1
- package/lib/resorts/valdisere/index.js +1 -1
- package/lib/resorts/valdisere/resort.json +1 -1
- package/lib/resorts/verbier/index.js +1 -1
- package/lib/resorts/waterville/index.js +1 -1
- package/lib/resorts/waterville/resort.json +1 -1
- package/lib/resorts/whistler-blackcomb/index.js +2 -2
- package/lib/resorts/whistler-blackcomb/resort.json +1 -1
- package/lib/resorts/whiteface/index.js +1 -1
- package/lib/resorts/whitefish/index.js +1 -1
- package/lib/resorts/wildcat/index.js +1 -1
- package/lib/resorts/wildcat/resort.json +1 -1
- package/lib/resorts/windham/index.js +1 -1
- package/lib/resorts/winter-park/index.js +1 -1
- package/lib/resorts/winterplace/index.js +1 -1
- package/lib/routes/cache.js +4 -4
- package/lib/routes/canonical.js +1 -3
- package/lib/routes/data.js +10 -12
- package/lib/routes/database.js +6 -7
- package/lib/routes/headers.js +2 -2
- package/lib/routes/index.js +9 -11
- package/lib/routes/plan.js +2 -4
- package/lib/routes/service-worker.js +6 -7
- package/lib/routes/sorter.js +2 -4
- package/lib/routes/tags.js +2 -4
- package/lib/select.js +3 -5
- package/lib/tools/aspen.js +4 -4
- package/lib/tools/boyne.js +4 -4
- package/lib/tools/campiglio-dolomiti.js +1 -1
- package/lib/tools/coerce.js +4 -4
- package/lib/tools/dolomitisuperski.js +1 -1
- package/lib/tools/domutil.js +11 -18
- package/lib/tools/infosnow.js +6 -6
- package/lib/tools/intrawest.js +3 -3
- package/lib/tools/limiter.js +2 -4
- package/lib/tools/lumiplan.js +2 -2
- package/lib/tools/millis.js +4 -11
- package/lib/tools/powdr.js +4 -4
- package/lib/tools/prism.js +5 -5
- package/lib/tools/skiplan.js +1 -1
- package/lib/tools/turismofvg.js +2 -2
- package/lib/tools/vail.js +8 -10
- package/lib/tools/vialattea.js +1 -1
- package/lib/weather/icons.js +3 -8
- package/lib/weather/index.js +5 -6
- package/lib/weather/noaa.js +5 -3
- package/lib/weather/openweather.js +6 -7
- package/lib/webcams.js +6 -6
- package/package.json +4 -3
- package/public/scripts/liftie-embed.js +41 -0
- package/public/scripts/liftie-embed.js.map +7 -0
- package/public/scripts/liftie.js +1561 -0
- package/public/scripts/liftie.js.map +7 -0
- package/public/stylesheets/style.css +864 -0
- package/public/stylesheets/style.mix.css +0 -1
package/lib/tools/millis.js
CHANGED
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
const second = 1000;
|
|
2
|
-
const minute = 60 * second;
|
|
3
|
-
const hour = 60 * minute;
|
|
4
|
-
const day = 24 * hour;
|
|
5
|
-
|
|
6
|
-
module.exports = {
|
|
7
|
-
second,
|
|
8
|
-
minute,
|
|
9
|
-
hour,
|
|
10
|
-
day
|
|
11
|
-
};
|
|
1
|
+
export const second = 1000;
|
|
2
|
+
export const minute = 60 * second;
|
|
3
|
+
export const hour = 60 * minute;
|
|
4
|
+
export const day = 24 * hour;
|
package/lib/tools/powdr.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import Debug from 'debug';
|
|
2
|
+
import coerce from './coerce.js';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
const debug = Debug('liftie:resort:powdr');
|
|
5
5
|
|
|
6
|
-
function parse(data) {
|
|
6
|
+
export default function parse(data) {
|
|
7
7
|
const liftStatus = {};
|
|
8
8
|
|
|
9
9
|
data.forEach(({ name, status }) => {
|
package/lib/tools/prism.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import Debug from 'debug';
|
|
2
|
+
import * as domutil from './domutil.js';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
const debug = Debug('liftie:resort');
|
|
5
|
+
|
|
6
|
+
export default function parse(dom) {
|
|
5
7
|
const liftStatus = domutil.collect(dom, '.lift_list_table tbody tr', tr => {
|
|
6
8
|
const last = tr.children[tr.children.length - 1];
|
|
7
9
|
let status = domutil.findText(last);
|
|
@@ -21,5 +23,3 @@ function parse(dom) {
|
|
|
21
23
|
debug('Lift Status:', liftStatus);
|
|
22
24
|
return liftStatus;
|
|
23
25
|
}
|
|
24
|
-
|
|
25
|
-
module.exports = parse;
|
package/lib/tools/skiplan.js
CHANGED
package/lib/tools/turismofvg.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
export default {
|
|
2
2
|
// Can't use `.c-snowreportdetail__tablerowcontent@landscape` because the @ symbol breaks the selector
|
|
3
3
|
selector: '[class*="c-snowreportdetail__tablerowcontent@landscape"]',
|
|
4
4
|
parse: {
|
|
@@ -8,7 +8,7 @@ module.exports = {
|
|
|
8
8
|
status: {
|
|
9
9
|
child: '0',
|
|
10
10
|
attribute: 'class',
|
|
11
|
-
regex: /o
|
|
11
|
+
regex: /o-status--(\w+)$/
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
};
|
package/lib/tools/vail.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import vm from 'node:vm';
|
|
2
|
+
import Debug from 'debug';
|
|
3
|
+
import { Parser as htmlparser } from 'htmlparser2';
|
|
4
|
+
import request from '../lifts/request.js';
|
|
5
|
+
import select from '../select.js';
|
|
6
|
+
import * as domutil from './domutil.js';
|
|
3
7
|
|
|
4
|
-
const
|
|
5
|
-
const select = require('../select');
|
|
6
|
-
|
|
7
|
-
const request = require('../lifts/request');
|
|
8
|
-
const htmlparser = require('htmlparser2');
|
|
9
|
-
|
|
10
|
-
module.exports = parse;
|
|
8
|
+
const debug = Debug('liftie:resort:vail');
|
|
11
9
|
|
|
12
10
|
const statuses = ['closed', 'open', 'hold', 'scheduled'];
|
|
13
11
|
|
|
@@ -51,7 +49,7 @@ function followWaitingRoom(waitingRoom) {
|
|
|
51
49
|
}
|
|
52
50
|
|
|
53
51
|
// common parser for Vail Resorts lift status
|
|
54
|
-
function parse(dom) {
|
|
52
|
+
export default function parse(dom) {
|
|
55
53
|
const waitingRoom = select(dom, 'script')
|
|
56
54
|
.map(script => domutil.allText(script).trim())
|
|
57
55
|
.find(script => script.includes("document.location.href = '/?c=vailresorts"));
|
package/lib/tools/vialattea.js
CHANGED
package/lib/weather/icons.js
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
module.exports = {
|
|
4
|
-
iconsFromUrl,
|
|
5
|
-
iconsFrom
|
|
6
|
-
};
|
|
1
|
+
import url from 'node:url';
|
|
7
2
|
|
|
8
3
|
const DAY = {
|
|
9
4
|
skc: ['basenone', 'icon-sun'],
|
|
@@ -74,12 +69,12 @@ const NIGHT = {
|
|
|
74
69
|
|
|
75
70
|
const ICONS = { DAY, NIGHT };
|
|
76
71
|
|
|
77
|
-
function iconsFromUrl(iconUrl) {
|
|
72
|
+
export function iconsFromUrl(iconUrl) {
|
|
78
73
|
const { pathname } = url.parse(iconUrl);
|
|
79
74
|
return iconsFrom(...pathname.split('/').slice(-2));
|
|
80
75
|
}
|
|
81
76
|
|
|
82
|
-
function iconsFrom(period = '', key = '') {
|
|
77
|
+
export function iconsFrom(period = '', key = '') {
|
|
83
78
|
key = key.split(',')[0];
|
|
84
79
|
period = period.toUpperCase();
|
|
85
80
|
|
package/lib/weather/index.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { hour } from '../tools/millis.js';
|
|
2
|
+
import noaa from './noaa.js';
|
|
3
|
+
import openweather from './openweather.js';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
module.exports.interval = {
|
|
5
|
+
fetch.interval = {
|
|
7
6
|
active: 2 * hour, // once every 2 hours for active resorts
|
|
8
7
|
inactive: Number.POSITIVE_INFINITY // don't fetch on inactive
|
|
9
8
|
};
|
|
@@ -11,7 +10,7 @@ module.exports.interval = {
|
|
|
11
10
|
// see: https://openweathermap.org/forecast5
|
|
12
11
|
const { OPENWEATHER_API_KEY } = process.env;
|
|
13
12
|
|
|
14
|
-
function fetch(resort, fn) {
|
|
13
|
+
export default function fetch(resort, fn) {
|
|
15
14
|
if (resort.noaa) {
|
|
16
15
|
noaa(resort, fn);
|
|
17
16
|
} else if (OPENWEATHER_API_KEY) {
|
package/lib/weather/noaa.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
const { iconsFromUrl } = require('./icons');
|
|
1
|
+
import Debug from 'debug';
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
const debug = Debug('liftie:weather');
|
|
4
|
+
|
|
5
|
+
import { iconsFromUrl } from './icons.js';
|
|
6
|
+
export default fetchWeather;
|
|
5
7
|
|
|
6
8
|
const userAgent = 'Mozilla/5.0 (compatible; Liftie/1.0; +https://liftie.info)';
|
|
7
9
|
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
import Debug from 'debug';
|
|
2
|
+
import limiter from '../tools/limiter.js';
|
|
3
|
+
import * as millis from '../tools/millis.js';
|
|
4
|
+
import { iconsFrom } from './icons.js';
|
|
2
5
|
|
|
3
|
-
const
|
|
4
|
-
const limiter = require('../tools/limiter');
|
|
5
|
-
const { iconsFrom } = require('./icons');
|
|
6
|
+
const debug = Debug('liftie:weather');
|
|
6
7
|
|
|
7
8
|
// not more than 30 a minute (60 per documentation)
|
|
8
9
|
const limit = limiter(30, millis.minute);
|
|
9
10
|
|
|
10
|
-
module.exports = fetchForecast;
|
|
11
|
-
|
|
12
11
|
function tempInF(kelvins) {
|
|
13
12
|
return Math.round((kelvins - 273.15) * 1.8) + 32;
|
|
14
13
|
}
|
|
@@ -73,7 +72,7 @@ function sanitize({ city, list }) {
|
|
|
73
72
|
};
|
|
74
73
|
}
|
|
75
74
|
|
|
76
|
-
function fetchForecast(resort, appid, fn) {
|
|
75
|
+
export default function fetchForecast(resort, appid, fn) {
|
|
77
76
|
limit(err => {
|
|
78
77
|
if (err) {
|
|
79
78
|
debug('Weather API limit %s', resort.id);
|
package/lib/webcams.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
import Debug from 'debug';
|
|
2
|
+
import limiter from './tools/limiter.js';
|
|
3
|
+
import { minute } from './tools/millis.js';
|
|
2
4
|
|
|
3
|
-
const
|
|
4
|
-
const limiter = require('./tools/limiter');
|
|
5
|
+
const debug = Debug('liftie:webcams');
|
|
5
6
|
|
|
6
7
|
const userAgent = 'Mozilla/5.0 (compatible; Liftie/1.0; +https://liftie.info)';
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
module.exports.interval = {
|
|
9
|
+
fetchWebcams.interval = {
|
|
10
10
|
active: 8.5 * minute, // v3 API images are only valid for 10 minutes
|
|
11
11
|
inactive: Number.POSITIVE_INFINITY
|
|
12
12
|
};
|
|
@@ -33,7 +33,7 @@ function getStatic({ webcams }) {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
function fetchWebcams(resort, fn) {
|
|
36
|
+
export default function fetchWebcams(resort, fn) {
|
|
37
37
|
debug('Fetching webcams for %s', resort.id);
|
|
38
38
|
const { WEBCAMS_API_KEY } = process.env;
|
|
39
39
|
if (!resort.ll || !WEBCAMS_API_KEY) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "liftie",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.1",
|
|
4
4
|
"description": "Clean, simple, easy to read, fast ski resort lift status",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"keywords": [
|
|
6
7
|
"ski",
|
|
7
8
|
"snowboard"
|
|
@@ -57,9 +58,9 @@
|
|
|
57
58
|
"to-title-case": "^1.0.0"
|
|
58
59
|
},
|
|
59
60
|
"devDependencies": {
|
|
60
|
-
"@biomejs/biome": "
|
|
61
|
+
"@biomejs/biome": "2.2.6",
|
|
61
62
|
"@pirxpilot/stylus": "^1.2.0",
|
|
62
|
-
"commander": "~
|
|
63
|
+
"commander": "~14",
|
|
63
64
|
"postcss": "~8",
|
|
64
65
|
"postcss-cachify": "^4.0.0",
|
|
65
66
|
"postcss-cli-simple": "~4.0.0",
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
// lib/embed/index.js
|
|
3
|
+
function el(attrs) {
|
|
4
|
+
const attrStr = Object.keys(attrs).map((attr) => `${attr}="${attrs[attr]}"`).join(" ");
|
|
5
|
+
return ["<iframe ", attrStr, "></iframe>"].join("");
|
|
6
|
+
}
|
|
7
|
+
function addWidget(parent, resort, style) {
|
|
8
|
+
const query = style ? `?style=${encodeURIComponent(style)}` : "";
|
|
9
|
+
let html = el({
|
|
10
|
+
class: `lift-status ${resort}`,
|
|
11
|
+
src: `https://liftie.info/widget/resort/${resort}${query}`,
|
|
12
|
+
scrolling: "no"
|
|
13
|
+
});
|
|
14
|
+
html += '<p class="liftie-link">Lift status by <a href="https://liftie.info" target="_blank">Liftie</a></p>';
|
|
15
|
+
parent.insertAdjacentHTML("afterBegin", html);
|
|
16
|
+
}
|
|
17
|
+
function receiveMessage(event) {
|
|
18
|
+
if (!/^https?:\/\/liftie.info$/.test(event.origin)) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (!event.data.height) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const iframe = document.querySelector(`.liftie-widget[data-resort="${event.data.resort}"] iframe`);
|
|
25
|
+
if (iframe) {
|
|
26
|
+
iframe.style.height = `${event.data.height}px`;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function embed() {
|
|
30
|
+
let i;
|
|
31
|
+
const els = document.querySelectorAll(".liftie-widget[data-resort]");
|
|
32
|
+
if (els.length) {
|
|
33
|
+
window.addEventListener("message", receiveMessage, false);
|
|
34
|
+
}
|
|
35
|
+
for (i = 0; i < els.length; i++) {
|
|
36
|
+
addWidget(els[i], els[i].getAttribute("data-resort"), els[i].getAttribute("data-style"));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
embed();
|
|
40
|
+
})();
|
|
41
|
+
//# sourceMappingURL=liftie-embed.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../lib/embed/index.js"],
|
|
4
|
+
"sourcesContent": ["function el(attrs) {\n const attrStr = Object.keys(attrs)\n .map(attr => `${attr}=\"${attrs[attr]}\"`)\n .join(' ');\n\n return ['<iframe ', attrStr, '></iframe>'].join('');\n}\n\nfunction addWidget(parent, resort, style) {\n const query = style ? `?style=${encodeURIComponent(style)}` : '';\n let html = el({\n class: `lift-status ${resort}`,\n src: `https://liftie.info/widget/resort/${resort}${query}`,\n scrolling: 'no'\n });\n html += '<p class=\"liftie-link\">Lift status by <a href=\"https://liftie.info\" target=\"_blank\">Liftie</a></p>';\n parent.insertAdjacentHTML('afterBegin', html);\n}\n\nfunction receiveMessage(event) {\n // from liftie?\n if (!/^https?:\\/\\/liftie.info$/.test(event.origin)) {\n return;\n }\n // anything interesting?\n if (!event.data.height) {\n return;\n }\n const iframe = document.querySelector(`.liftie-widget[data-resort=\"${event.data.resort}\"] iframe`);\n if (iframe) {\n iframe.style.height = `${event.data.height}px`;\n }\n}\n\nfunction embed() {\n let i;\n const els = document.querySelectorAll('.liftie-widget[data-resort]');\n if (els.length) {\n window.addEventListener('message', receiveMessage, false);\n }\n for (i = 0; i < els.length; i++) {\n addWidget(els[i], els[i].getAttribute('data-resort'), els[i].getAttribute('data-style'));\n }\n}\n\nembed();\n"],
|
|
5
|
+
"mappings": ";;AAAA,WAAS,GAAG,OAAO;AACjB,UAAM,UAAU,OAAO,KAAK,KAAK,EAC9B,IAAI,UAAQ,GAAG,IAAI,KAAK,MAAM,IAAI,CAAC,GAAG,EACtC,KAAK,GAAG;AAEX,WAAO,CAAC,YAAY,SAAS,YAAY,EAAE,KAAK,EAAE;AAAA,EACpD;AAEA,WAAS,UAAU,QAAQ,QAAQ,OAAO;AACxC,UAAM,QAAQ,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAC9D,QAAI,OAAO,GAAG;AAAA,MACZ,OAAO,eAAe,MAAM;AAAA,MAC5B,KAAK,qCAAqC,MAAM,GAAG,KAAK;AAAA,MACxD,WAAW;AAAA,IACb,CAAC;AACD,YAAQ;AACR,WAAO,mBAAmB,cAAc,IAAI;AAAA,EAC9C;AAEA,WAAS,eAAe,OAAO;AAE7B,QAAI,CAAC,2BAA2B,KAAK,MAAM,MAAM,GAAG;AAClD;AAAA,IACF;AAEA,QAAI,CAAC,MAAM,KAAK,QAAQ;AACtB;AAAA,IACF;AACA,UAAM,SAAS,SAAS,cAAc,+BAA+B,MAAM,KAAK,MAAM,WAAW;AACjG,QAAI,QAAQ;AACV,aAAO,MAAM,SAAS,GAAG,MAAM,KAAK,MAAM;AAAA,IAC5C;AAAA,EACF;AAEA,WAAS,QAAQ;AACf,QAAI;AACJ,UAAM,MAAM,SAAS,iBAAiB,6BAA6B;AACnE,QAAI,IAAI,QAAQ;AACd,aAAO,iBAAiB,WAAW,gBAAgB,KAAK;AAAA,IAC1D;AACA,SAAK,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AAC/B,gBAAU,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,aAAa,aAAa,GAAG,IAAI,CAAC,EAAE,aAAa,YAAY,CAAC;AAAA,IACzF;AAAA,EACF;AAEA,QAAM;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|