@sebbo2002/fitness-first-ical-proxy 3.0.0-develop.1 → 3.0.0-develop.3

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.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ "use strict";var b=Object.create;var m=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var T=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of _(e))!R.call(o,s)&&s!==t&&m(o,s,{get:()=>e[s],enumerable:!(r=y(e,s))||r.enumerable});return o};var u=(o,e,t)=>(t=o!=null?b(C(o)):{},T(e||!o||!o.__esModule?m(t,"default",{value:o,enumerable:!0}):t,o));var l=(o,e,t)=>new Promise((r,s)=>{var n=c=>{try{a(t.next(c))}catch(f){s(f)}},i=c=>{try{a(t.throw(c))}catch(f){s(f)}},a=c=>c.done?r(c.value):Promise.resolve(c.value).then(n,i);a((t=t.apply(o,e)).next())});var w=u(require("express"),1);var h=require("https"),g=u(require("ical-generator"),1);var p=class{static request(e){return l(this,null,function*(){let t=yield this.getCourses(e);return this.createCalendar(t)})}static getCourses(e){return l(this,null,function*(){let t="https://www.fitnessfirst.de/kurse/kursplan/search/"+this.paramToString(e.club_id)+"/"+this.paramToString(e.category_id)+"/"+this.paramToString(e.class_id)+"/"+this.paramToString(e.daytime_id),r=yield this.miniGet(t);return e.club_id==="0115"&&(e.category_id==="431"||!e.category_id)&&Object.entries(r.data.classes).forEach(([s,n])=>{if(s.split("_",2)[1]==="sa"){let i={id:`kinderschwimmen-${s}`,title:"Kinderschwimmen",time:{from:"09:00:00",to:"12:15:00"},category:"Aqua",categoryIcon:"https://www.fitnessfirst.de/sites/g/files/tbchtk201/files/2020-10/fitness-first-kurse-special.png",level:"Alle",club:"Berlin - Gendarmenmarkt",url:"https://www.fitnessfirst.de/news/kinderschwimmen-1635593849",calendarUrl:null,is_cancelled:!1,is_changed:!1};Array.isArray(n)?r.data.classes[s]={before_noon:[i]}:(n.before_noon=n.before_noon||[],n.before_noon.push(i))}if(s.split("_",2)[1]==="th"){let i={id:`kinderschwimmen-${s}`,title:"Kinderschwimmen",time:{from:"15:00:00",to:"16:30:00"},category:"Aqua",categoryIcon:"https://www.fitnessfirst.de/sites/g/files/tbchtk201/files/2020-10/fitness-first-kurse-special.png",level:"Alle",club:"Berlin - Gendarmenmarkt",url:"https://www.fitnessfirst.de/news/kinderschwimmen-1635593849",calendarUrl:null,is_cancelled:!1,is_changed:!1};Array.isArray(n)?r.data.classes[s]={before_noon:[i]}:(n.before_noon=n.before_noon||[],n.before_noon.push(i))}}),r.data.classes})}static createCalendar(e){let t=(0,g.default)({name:"Fitness First",ttl:21600,prodId:{company:"sebbo.net",product:"fitness-first-ical-proxy"}});return Object.entries(e).forEach(([r,s])=>{let n=r.split("_")[0];(Array.isArray(s)?s:Object.values(s)).forEach(i=>{i.forEach(a=>{if(a.is_cancelled)return;let c=new Date(n+"T"+a.time.from+"Z"),f=new Date(n+"T"+a.time.to+"Z");t.createEvent({id:a.id,start:c,end:f,floating:!0,summary:a.title,location:a.club,url:a.url})})})}),t}static paramToString(e){return typeof e=="string"?e:typeof e=="undefined"||e.length===0?"all":e.map(t=>t.toString()).join("-")}static miniGet(e){return l(this,null,function*(){return new Promise((t,r)=>{(0,h.get)(e,s=>{let n=[];s.on("data",i=>{n.push(i)}),s.on("end",()=>{let i=String(Buffer.concat(n));if(s.statusCode!==200){r(new Error("Unable to get data: "+i));return}let a=JSON.parse(i);t(a)})}).on("error",s=>{r(s)})})})}};var d=class{static run(){new d}constructor(){this.app=(0,w.default)(),this.setupRoutes(),this.server=this.app.listen(process.env.PORT||8080),process.on("SIGINT",()=>this.stop()),process.on("SIGTERM",()=>this.stop())}setupRoutes(){this.app.get("/ping",(e,t)=>{t.send("pong")}),this.app.get("/ical",(e,t)=>{p.request(e.query).then(r=>r.serve(t))})}stop(){return l(this,null,function*(){yield new Promise(e=>this.server.close(e)),process.exit()})}};d.run();
3
+ //# sourceMappingURL=start.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/bin/start.ts","../../src/lib/index.ts"],"sourcesContent":["#!/usr/bin/env node\n'use strict';\n\nimport express, {Express} from 'express';\nimport {Server} from 'http';\nimport FitnessFirstIcalProxy from '../lib/index.js';\n\n\nclass AppServer {\n static run() {\n new AppServer();\n }\n\n private app: Express;\n private server: Server;\n\n constructor() {\n this.app = express();\n\n this.setupRoutes();\n this.server = this.app.listen(process.env.PORT || 8080);\n\n process.on('SIGINT', () => this.stop());\n process.on('SIGTERM', () => this.stop());\n }\n\n setupRoutes() {\n this.app.get('/ping', (req, res) => {\n res.send('pong');\n });\n\n this.app.get('/ical', (req, res) => {\n FitnessFirstIcalProxy.request(req.query)\n .then(calendar => calendar.serve(res));\n });\n }\n\n async stop() {\n await new Promise(cb => this.server.close(cb));\n\n process.exit();\n }\n}\n\nAppServer.run();\n","import { get } from 'https';\nimport { RequestParams, Response, ResponseClasses, ResponseCourse } from './types.js';\nimport type { ICalCalendar } from 'ical-generator';\nimport ical from 'ical-generator';\n\nexport default class FitnessFirstIcalProxy {\n static async request(params: RequestParams): Promise<ICalCalendar> {\n const courses = await this.getCourses(params);\n return this.createCalendar(courses);\n }\n\n static async getCourses(params: RequestParams): Promise<ResponseClasses> {\n const url = 'https://www.fitnessfirst.de/kurse/kursplan/search/' +\n this.paramToString(params.club_id) + '/' +\n this.paramToString(params.category_id) + '/' +\n this.paramToString(params.class_id) + '/' +\n this.paramToString(params.daytime_id);\n\n const response = await this.miniGet<Response>(url);\n\n // Kinderschwimmen @ Gendarmenmarkt\n if (params.club_id === '0115' && (params.category_id === '431' || !params.category_id)) {\n Object.entries(response.data.classes).forEach(([key, classes]) => {\n if (key.split('_', 2)[1] === 'sa') {\n const event = {\n id: `kinderschwimmen-${key}`,\n title: 'Kinderschwimmen',\n time: {\n from: '09:00:00',\n to: '12:15:00'\n },\n category: 'Aqua',\n categoryIcon: 'https://www.fitnessfirst.de/sites/g/files/tbchtk201/files/2020-10/fitness-first-kurse-special.png',\n level: 'Alle',\n club: 'Berlin - Gendarmenmarkt',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n calendarUrl: null,\n is_cancelled: false,\n is_changed: false\n };\n\n if (Array.isArray(classes)) {\n response.data.classes[key] = {\n before_noon: [\n event\n ]\n };\n } else {\n classes.before_noon = classes.before_noon || [];\n classes.before_noon.push(event);\n }\n }\n if (key.split('_', 2)[1] === 'th') {\n const event = {\n id: `kinderschwimmen-${key}`,\n title: 'Kinderschwimmen',\n time: {\n from: '15:00:00',\n to: '16:30:00'\n },\n category: 'Aqua',\n categoryIcon: 'https://www.fitnessfirst.de/sites/g/files/tbchtk201/files/2020-10/fitness-first-kurse-special.png',\n level: 'Alle',\n club: 'Berlin - Gendarmenmarkt',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n calendarUrl: null,\n is_cancelled: false,\n is_changed: false\n };\n\n if (Array.isArray(classes)) {\n response.data.classes[key] = {\n before_noon: [\n event\n ]\n };\n } else {\n classes.before_noon = classes.before_noon || [];\n classes.before_noon.push(event);\n }\n }\n });\n }\n\n return response.data.classes;\n }\n\n static createCalendar(courses: ResponseClasses): ICalCalendar {\n const cal = ical({\n name: 'Fitness First',\n ttl: 60 * 60 * 6,\n prodId: {\n company: 'sebbo.net',\n product: 'fitness-first-ical-proxy'\n }\n });\n\n Object.entries(courses).forEach(([key, classes]) => {\n const day = key.split('_')[0];\n\n (Array.isArray(classes) ? classes : Object.values(classes)).forEach(courses => {\n courses.forEach((course: ResponseCourse) => {\n if (course.is_cancelled) {\n return;\n }\n\n const start = new Date(day + 'T' + course.time.from + 'Z');\n const end = new Date(day + 'T' + course.time.to + 'Z');\n\n cal.createEvent({\n id: course.id,\n start,\n end,\n floating: true,\n summary: course.title,\n location: course.club,\n url: course.url\n });\n });\n });\n });\n\n return cal;\n }\n\n static paramToString(value: string | Array<string | number> | undefined): string {\n if (typeof value === 'string') {\n return value;\n }\n if(typeof value === 'undefined' || value.length === 0) {\n return 'all';\n }\n\n return value\n .map(v => v.toString())\n .join('-');\n }\n\n static async miniGet<T>(url: string): Promise<T> {\n return new Promise((resolve, reject) => {\n get(url, res => {\n const data: Uint8Array[] = [];\n\n res.on('data', chunk => {\n data.push(chunk);\n });\n\n res.on('end', () => {\n const text = String(Buffer.concat(data));\n if (res.statusCode !== 200) {\n reject(new Error('Unable to get data: ' + text));\n return;\n }\n\n const json = JSON.parse(text) as T;\n resolve(json);\n });\n }).on('error', err => {\n reject(err);\n });\n });\n }\n}\n"],"mappings":"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","names":["import_express","import_https","import_ical_generator","FitnessFirstIcalProxy","params","__async","courses","url","response","key","classes","event","cal","ical","day","course","start","end","value","v","resolve","reject","res","data","chunk","text","json","err","AppServer","express","req","res","FitnessFirstIcalProxy","calendar","__async","cb"]}
@@ -1,2 +1 @@
1
1
  #!/usr/bin/env node
2
- export {};
package/dist/bin/start.js CHANGED
@@ -1,42 +1,3 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';
3
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
- return new (P || (P = Promise))(function (resolve, reject) {
6
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
- step((generator = generator.apply(thisArg, _arguments || [])).next());
10
- });
11
- };
12
- import express from 'express';
13
- import FitnessFirstIcalProxy from '../lib/index.js';
14
- class AppServer {
15
- static run() {
16
- new AppServer();
17
- }
18
- constructor() {
19
- this.app = express();
20
- this.setupRoutes();
21
- this.server = this.app.listen(process.env.PORT || 8080);
22
- process.on('SIGINT', () => this.stop());
23
- process.on('SIGTERM', () => this.stop());
24
- }
25
- setupRoutes() {
26
- this.app.get('/ping', (req, res) => {
27
- res.send('pong');
28
- });
29
- this.app.get('/ical', (req, res) => {
30
- FitnessFirstIcalProxy.request(req.query)
31
- .then(calendar => calendar.serve(res));
32
- });
33
- }
34
- stop() {
35
- return __awaiter(this, void 0, void 0, function* () {
36
- yield new Promise(cb => this.server.close(cb));
37
- process.exit();
38
- });
39
- }
40
- }
41
- AppServer.run();
2
+ import{a as r,b as i}from"../chunk-FYXTGIF4.js";import o from"express";var s=class{static run(){new s}constructor(){this.app=o(),this.setupRoutes(),this.server=this.app.listen(process.env.PORT||8080),process.on("SIGINT",()=>this.stop()),process.on("SIGTERM",()=>this.stop())}setupRoutes(){this.app.get("/ping",(e,t)=>{t.send("pong")}),this.app.get("/ical",(e,t)=>{i.request(e.query).then(p=>p.serve(t))})}stop(){return r(this,null,function*(){yield new Promise(e=>this.server.close(e)),process.exit()})}};s.run();
42
3
  //# sourceMappingURL=start.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/bin/start.ts"],"names":[],"mappings":";AACA,YAAY,CAAC;;;;;;;;;;AAEb,OAAO,OAAkB,MAAM,SAAS,CAAC;AAEzC,OAAO,qBAAqB,MAAM,iBAAiB,CAAC;AAGpD,MAAM,SAAS;IACX,MAAM,CAAC,GAAG;QACN,IAAI,SAAS,EAAE,CAAC;IACpB,CAAC;IAKD;QACI,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC;QAErB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QAExD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,WAAW;QACP,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC/B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC/B,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;iBACnC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACP,CAAC;IAEK,IAAI;;YACN,MAAM,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAE/C,OAAO,CAAC,IAAI,EAAE,CAAC;QACnB,CAAC;KAAA;CACJ;AAED,SAAS,CAAC,GAAG,EAAE,CAAC"}
1
+ {"version":3,"sources":["../../src/bin/start.ts"],"sourcesContent":["#!/usr/bin/env node\n'use strict';\n\nimport express, {Express} from 'express';\nimport {Server} from 'http';\nimport FitnessFirstIcalProxy from '../lib/index.js';\n\n\nclass AppServer {\n static run() {\n new AppServer();\n }\n\n private app: Express;\n private server: Server;\n\n constructor() {\n this.app = express();\n\n this.setupRoutes();\n this.server = this.app.listen(process.env.PORT || 8080);\n\n process.on('SIGINT', () => this.stop());\n process.on('SIGTERM', () => this.stop());\n }\n\n setupRoutes() {\n this.app.get('/ping', (req, res) => {\n res.send('pong');\n });\n\n this.app.get('/ical', (req, res) => {\n FitnessFirstIcalProxy.request(req.query)\n .then(calendar => calendar.serve(res));\n });\n }\n\n async stop() {\n await new Promise(cb => this.server.close(cb));\n\n process.exit();\n }\n}\n\nAppServer.run();\n"],"mappings":";gDAGA,OAAOA,MAAwB,UAK/B,IAAMC,EAAN,KAAgB,CACZ,OAAO,KAAM,CACT,IAAIA,CACR,CAKA,aAAc,CACV,KAAK,IAAMC,EAAQ,EAEnB,KAAK,YAAY,EACjB,KAAK,OAAS,KAAK,IAAI,OAAO,QAAQ,IAAI,MAAQ,IAAI,EAEtD,QAAQ,GAAG,SAAU,IAAM,KAAK,KAAK,CAAC,EACtC,QAAQ,GAAG,UAAW,IAAM,KAAK,KAAK,CAAC,CAC3C,CAEA,aAAc,CACV,KAAK,IAAI,IAAI,QAAS,CAACC,EAAKC,IAAQ,CAChCA,EAAI,KAAK,MAAM,CACnB,CAAC,EAED,KAAK,IAAI,IAAI,QAAS,CAACD,EAAKC,IAAQ,CAChCC,EAAsB,QAAQF,EAAI,KAAK,EAClC,KAAKG,GAAYA,EAAS,MAAMF,CAAG,CAAC,CAC7C,CAAC,CACL,CAEM,MAAO,QAAAG,EAAA,sBACT,MAAM,IAAI,QAAQC,GAAM,KAAK,OAAO,MAAMA,CAAE,CAAC,EAE7C,QAAQ,KAAK,CACjB,GACJ,EAEAP,EAAU,IAAI","names":["express","AppServer","express","req","res","FitnessFirstIcalProxy","calendar","__async","cb"]}
@@ -0,0 +1,2 @@
1
+ var c=(d,e,n)=>new Promise((a,t)=>{var r=o=>{try{i(n.next(o))}catch(l){t(l)}},s=o=>{try{i(n.throw(o))}catch(l){t(l)}},i=o=>o.done?a(o.value):Promise.resolve(o.value).then(r,s);i((n=n.apply(d,e)).next())});import{get as m}from"https";import u from"ical-generator";var f=class{static request(e){return c(this,null,function*(){let n=yield this.getCourses(e);return this.createCalendar(n)})}static getCourses(e){return c(this,null,function*(){let n="https://www.fitnessfirst.de/kurse/kursplan/search/"+this.paramToString(e.club_id)+"/"+this.paramToString(e.category_id)+"/"+this.paramToString(e.class_id)+"/"+this.paramToString(e.daytime_id),a=yield this.miniGet(n);return e.club_id==="0115"&&(e.category_id==="431"||!e.category_id)&&Object.entries(a.data.classes).forEach(([t,r])=>{if(t.split("_",2)[1]==="sa"){let s={id:`kinderschwimmen-${t}`,title:"Kinderschwimmen",time:{from:"09:00:00",to:"12:15:00"},category:"Aqua",categoryIcon:"https://www.fitnessfirst.de/sites/g/files/tbchtk201/files/2020-10/fitness-first-kurse-special.png",level:"Alle",club:"Berlin - Gendarmenmarkt",url:"https://www.fitnessfirst.de/news/kinderschwimmen-1635593849",calendarUrl:null,is_cancelled:!1,is_changed:!1};Array.isArray(r)?a.data.classes[t]={before_noon:[s]}:(r.before_noon=r.before_noon||[],r.before_noon.push(s))}if(t.split("_",2)[1]==="th"){let s={id:`kinderschwimmen-${t}`,title:"Kinderschwimmen",time:{from:"15:00:00",to:"16:30:00"},category:"Aqua",categoryIcon:"https://www.fitnessfirst.de/sites/g/files/tbchtk201/files/2020-10/fitness-first-kurse-special.png",level:"Alle",club:"Berlin - Gendarmenmarkt",url:"https://www.fitnessfirst.de/news/kinderschwimmen-1635593849",calendarUrl:null,is_cancelled:!1,is_changed:!1};Array.isArray(r)?a.data.classes[t]={before_noon:[s]}:(r.before_noon=r.before_noon||[],r.before_noon.push(s))}}),a.data.classes})}static createCalendar(e){let n=u({name:"Fitness First",ttl:21600,prodId:{company:"sebbo.net",product:"fitness-first-ical-proxy"}});return Object.entries(e).forEach(([a,t])=>{let r=a.split("_")[0];(Array.isArray(t)?t:Object.values(t)).forEach(s=>{s.forEach(i=>{if(i.is_cancelled)return;let o=new Date(r+"T"+i.time.from+"Z"),l=new Date(r+"T"+i.time.to+"Z");n.createEvent({id:i.id,start:o,end:l,floating:!0,summary:i.title,location:i.club,url:i.url})})})}),n}static paramToString(e){return typeof e=="string"?e:typeof e=="undefined"||e.length===0?"all":e.map(n=>n.toString()).join("-")}static miniGet(e){return c(this,null,function*(){return new Promise((n,a)=>{m(e,t=>{let r=[];t.on("data",s=>{r.push(s)}),t.on("end",()=>{let s=String(Buffer.concat(r));if(t.statusCode!==200){a(new Error("Unable to get data: "+s));return}let i=JSON.parse(s);n(i)})}).on("error",t=>{a(t)})})})}};export{c as a,f as b};
2
+ //# sourceMappingURL=chunk-FYXTGIF4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/index.ts"],"sourcesContent":["import { get } from 'https';\nimport { RequestParams, Response, ResponseClasses, ResponseCourse } from './types.js';\nimport type { ICalCalendar } from 'ical-generator';\nimport ical from 'ical-generator';\n\nexport default class FitnessFirstIcalProxy {\n static async request(params: RequestParams): Promise<ICalCalendar> {\n const courses = await this.getCourses(params);\n return this.createCalendar(courses);\n }\n\n static async getCourses(params: RequestParams): Promise<ResponseClasses> {\n const url = 'https://www.fitnessfirst.de/kurse/kursplan/search/' +\n this.paramToString(params.club_id) + '/' +\n this.paramToString(params.category_id) + '/' +\n this.paramToString(params.class_id) + '/' +\n this.paramToString(params.daytime_id);\n\n const response = await this.miniGet<Response>(url);\n\n // Kinderschwimmen @ Gendarmenmarkt\n if (params.club_id === '0115' && (params.category_id === '431' || !params.category_id)) {\n Object.entries(response.data.classes).forEach(([key, classes]) => {\n if (key.split('_', 2)[1] === 'sa') {\n const event = {\n id: `kinderschwimmen-${key}`,\n title: 'Kinderschwimmen',\n time: {\n from: '09:00:00',\n to: '12:15:00'\n },\n category: 'Aqua',\n categoryIcon: 'https://www.fitnessfirst.de/sites/g/files/tbchtk201/files/2020-10/fitness-first-kurse-special.png',\n level: 'Alle',\n club: 'Berlin - Gendarmenmarkt',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n calendarUrl: null,\n is_cancelled: false,\n is_changed: false\n };\n\n if (Array.isArray(classes)) {\n response.data.classes[key] = {\n before_noon: [\n event\n ]\n };\n } else {\n classes.before_noon = classes.before_noon || [];\n classes.before_noon.push(event);\n }\n }\n if (key.split('_', 2)[1] === 'th') {\n const event = {\n id: `kinderschwimmen-${key}`,\n title: 'Kinderschwimmen',\n time: {\n from: '15:00:00',\n to: '16:30:00'\n },\n category: 'Aqua',\n categoryIcon: 'https://www.fitnessfirst.de/sites/g/files/tbchtk201/files/2020-10/fitness-first-kurse-special.png',\n level: 'Alle',\n club: 'Berlin - Gendarmenmarkt',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n calendarUrl: null,\n is_cancelled: false,\n is_changed: false\n };\n\n if (Array.isArray(classes)) {\n response.data.classes[key] = {\n before_noon: [\n event\n ]\n };\n } else {\n classes.before_noon = classes.before_noon || [];\n classes.before_noon.push(event);\n }\n }\n });\n }\n\n return response.data.classes;\n }\n\n static createCalendar(courses: ResponseClasses): ICalCalendar {\n const cal = ical({\n name: 'Fitness First',\n ttl: 60 * 60 * 6,\n prodId: {\n company: 'sebbo.net',\n product: 'fitness-first-ical-proxy'\n }\n });\n\n Object.entries(courses).forEach(([key, classes]) => {\n const day = key.split('_')[0];\n\n (Array.isArray(classes) ? classes : Object.values(classes)).forEach(courses => {\n courses.forEach((course: ResponseCourse) => {\n if (course.is_cancelled) {\n return;\n }\n\n const start = new Date(day + 'T' + course.time.from + 'Z');\n const end = new Date(day + 'T' + course.time.to + 'Z');\n\n cal.createEvent({\n id: course.id,\n start,\n end,\n floating: true,\n summary: course.title,\n location: course.club,\n url: course.url\n });\n });\n });\n });\n\n return cal;\n }\n\n static paramToString(value: string | Array<string | number> | undefined): string {\n if (typeof value === 'string') {\n return value;\n }\n if(typeof value === 'undefined' || value.length === 0) {\n return 'all';\n }\n\n return value\n .map(v => v.toString())\n .join('-');\n }\n\n static async miniGet<T>(url: string): Promise<T> {\n return new Promise((resolve, reject) => {\n get(url, res => {\n const data: Uint8Array[] = [];\n\n res.on('data', chunk => {\n data.push(chunk);\n });\n\n res.on('end', () => {\n const text = String(Buffer.concat(data));\n if (res.statusCode !== 200) {\n reject(new Error('Unable to get data: ' + text));\n return;\n }\n\n const json = JSON.parse(text) as T;\n resolve(json);\n });\n }).on('error', err => {\n reject(err);\n });\n });\n }\n}\n"],"mappings":"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","names":["get","ical","FitnessFirstIcalProxy","params","__async","courses","url","response","key","classes","event","cal","ical","day","course","start","end","value","v","resolve","reject","get","res","data","chunk","text","json","err"]}
@@ -0,0 +1,2 @@
1
+ var h=Object.create;var f=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var b=Object.getPrototypeOf,y=Object.prototype.hasOwnProperty;var C=(n,e)=>{for(var r in e)f(n,r,{get:e[r],enumerable:!0})},u=(n,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of _(e))!y.call(n,t)&&t!==r&&f(n,t,{get:()=>e[t],enumerable:!(i=w(e,t))||i.enumerable});return n};var A=(n,e,r)=>(r=n!=null?h(b(n)):{},u(e||!n||!n.__esModule?f(r,"default",{value:n,enumerable:!0}):r,n)),R=n=>u(f({},"__esModule",{value:!0}),n);var d=(n,e,r)=>new Promise((i,t)=>{var s=l=>{try{o(r.next(l))}catch(c){t(c)}},a=l=>{try{o(r.throw(l))}catch(c){t(c)}},o=l=>l.done?i(l.value):Promise.resolve(l.value).then(s,a);o((r=r.apply(n,e)).next())});var T={};C(T,{default:()=>m});module.exports=R(T);var p=require("https"),g=A(require("ical-generator"),1);var m=class{static request(e){return d(this,null,function*(){let r=yield this.getCourses(e);return this.createCalendar(r)})}static getCourses(e){return d(this,null,function*(){let r="https://www.fitnessfirst.de/kurse/kursplan/search/"+this.paramToString(e.club_id)+"/"+this.paramToString(e.category_id)+"/"+this.paramToString(e.class_id)+"/"+this.paramToString(e.daytime_id),i=yield this.miniGet(r);return e.club_id==="0115"&&(e.category_id==="431"||!e.category_id)&&Object.entries(i.data.classes).forEach(([t,s])=>{if(t.split("_",2)[1]==="sa"){let a={id:`kinderschwimmen-${t}`,title:"Kinderschwimmen",time:{from:"09:00:00",to:"12:15:00"},category:"Aqua",categoryIcon:"https://www.fitnessfirst.de/sites/g/files/tbchtk201/files/2020-10/fitness-first-kurse-special.png",level:"Alle",club:"Berlin - Gendarmenmarkt",url:"https://www.fitnessfirst.de/news/kinderschwimmen-1635593849",calendarUrl:null,is_cancelled:!1,is_changed:!1};Array.isArray(s)?i.data.classes[t]={before_noon:[a]}:(s.before_noon=s.before_noon||[],s.before_noon.push(a))}if(t.split("_",2)[1]==="th"){let a={id:`kinderschwimmen-${t}`,title:"Kinderschwimmen",time:{from:"15:00:00",to:"16:30:00"},category:"Aqua",categoryIcon:"https://www.fitnessfirst.de/sites/g/files/tbchtk201/files/2020-10/fitness-first-kurse-special.png",level:"Alle",club:"Berlin - Gendarmenmarkt",url:"https://www.fitnessfirst.de/news/kinderschwimmen-1635593849",calendarUrl:null,is_cancelled:!1,is_changed:!1};Array.isArray(s)?i.data.classes[t]={before_noon:[a]}:(s.before_noon=s.before_noon||[],s.before_noon.push(a))}}),i.data.classes})}static createCalendar(e){let r=(0,g.default)({name:"Fitness First",ttl:21600,prodId:{company:"sebbo.net",product:"fitness-first-ical-proxy"}});return Object.entries(e).forEach(([i,t])=>{let s=i.split("_")[0];(Array.isArray(t)?t:Object.values(t)).forEach(a=>{a.forEach(o=>{if(o.is_cancelled)return;let l=new Date(s+"T"+o.time.from+"Z"),c=new Date(s+"T"+o.time.to+"Z");r.createEvent({id:o.id,start:l,end:c,floating:!0,summary:o.title,location:o.club,url:o.url})})})}),r}static paramToString(e){return typeof e=="string"?e:typeof e=="undefined"||e.length===0?"all":e.map(r=>r.toString()).join("-")}static miniGet(e){return d(this,null,function*(){return new Promise((r,i)=>{(0,p.get)(e,t=>{let s=[];t.on("data",a=>{s.push(a)}),t.on("end",()=>{let a=String(Buffer.concat(s));if(t.statusCode!==200){i(new Error("Unable to get data: "+a));return}let o=JSON.parse(a);r(o)})}).on("error",t=>{i(t)})})})}};0&&(module.exports={});
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/index.ts"],"sourcesContent":["import { get } from 'https';\nimport { RequestParams, Response, ResponseClasses, ResponseCourse } from './types.js';\nimport type { ICalCalendar } from 'ical-generator';\nimport ical from 'ical-generator';\n\nexport default class FitnessFirstIcalProxy {\n static async request(params: RequestParams): Promise<ICalCalendar> {\n const courses = await this.getCourses(params);\n return this.createCalendar(courses);\n }\n\n static async getCourses(params: RequestParams): Promise<ResponseClasses> {\n const url = 'https://www.fitnessfirst.de/kurse/kursplan/search/' +\n this.paramToString(params.club_id) + '/' +\n this.paramToString(params.category_id) + '/' +\n this.paramToString(params.class_id) + '/' +\n this.paramToString(params.daytime_id);\n\n const response = await this.miniGet<Response>(url);\n\n // Kinderschwimmen @ Gendarmenmarkt\n if (params.club_id === '0115' && (params.category_id === '431' || !params.category_id)) {\n Object.entries(response.data.classes).forEach(([key, classes]) => {\n if (key.split('_', 2)[1] === 'sa') {\n const event = {\n id: `kinderschwimmen-${key}`,\n title: 'Kinderschwimmen',\n time: {\n from: '09:00:00',\n to: '12:15:00'\n },\n category: 'Aqua',\n categoryIcon: 'https://www.fitnessfirst.de/sites/g/files/tbchtk201/files/2020-10/fitness-first-kurse-special.png',\n level: 'Alle',\n club: 'Berlin - Gendarmenmarkt',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n calendarUrl: null,\n is_cancelled: false,\n is_changed: false\n };\n\n if (Array.isArray(classes)) {\n response.data.classes[key] = {\n before_noon: [\n event\n ]\n };\n } else {\n classes.before_noon = classes.before_noon || [];\n classes.before_noon.push(event);\n }\n }\n if (key.split('_', 2)[1] === 'th') {\n const event = {\n id: `kinderschwimmen-${key}`,\n title: 'Kinderschwimmen',\n time: {\n from: '15:00:00',\n to: '16:30:00'\n },\n category: 'Aqua',\n categoryIcon: 'https://www.fitnessfirst.de/sites/g/files/tbchtk201/files/2020-10/fitness-first-kurse-special.png',\n level: 'Alle',\n club: 'Berlin - Gendarmenmarkt',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n calendarUrl: null,\n is_cancelled: false,\n is_changed: false\n };\n\n if (Array.isArray(classes)) {\n response.data.classes[key] = {\n before_noon: [\n event\n ]\n };\n } else {\n classes.before_noon = classes.before_noon || [];\n classes.before_noon.push(event);\n }\n }\n });\n }\n\n return response.data.classes;\n }\n\n static createCalendar(courses: ResponseClasses): ICalCalendar {\n const cal = ical({\n name: 'Fitness First',\n ttl: 60 * 60 * 6,\n prodId: {\n company: 'sebbo.net',\n product: 'fitness-first-ical-proxy'\n }\n });\n\n Object.entries(courses).forEach(([key, classes]) => {\n const day = key.split('_')[0];\n\n (Array.isArray(classes) ? classes : Object.values(classes)).forEach(courses => {\n courses.forEach((course: ResponseCourse) => {\n if (course.is_cancelled) {\n return;\n }\n\n const start = new Date(day + 'T' + course.time.from + 'Z');\n const end = new Date(day + 'T' + course.time.to + 'Z');\n\n cal.createEvent({\n id: course.id,\n start,\n end,\n floating: true,\n summary: course.title,\n location: course.club,\n url: course.url\n });\n });\n });\n });\n\n return cal;\n }\n\n static paramToString(value: string | Array<string | number> | undefined): string {\n if (typeof value === 'string') {\n return value;\n }\n if(typeof value === 'undefined' || value.length === 0) {\n return 'all';\n }\n\n return value\n .map(v => v.toString())\n .join('-');\n }\n\n static async miniGet<T>(url: string): Promise<T> {\n return new Promise((resolve, reject) => {\n get(url, res => {\n const data: Uint8Array[] = [];\n\n res.on('data', chunk => {\n data.push(chunk);\n });\n\n res.on('end', () => {\n const text = String(Buffer.concat(data));\n if (res.statusCode !== 200) {\n reject(new Error('Unable to get data: ' + text));\n return;\n }\n\n const json = JSON.parse(text) as T;\n resolve(json);\n });\n }).on('error', err => {\n reject(err);\n });\n });\n }\n}\n"],"mappings":"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","names":["lib_exports","__export","FitnessFirstIcalProxy","__toCommonJS","import_https","import_ical_generator","FitnessFirstIcalProxy","params","__async","courses","url","response","key","classes","event","cal","ical","day","course","start","end","value","v","resolve","reject","res","data","chunk","text","json","err"]}
@@ -0,0 +1,39 @@
1
+ import { ICalCalendar } from 'ical-generator';
2
+
3
+ interface RequestParams {
4
+ club_id?: string | number[] | string[];
5
+ category_id?: string | number[] | string[];
6
+ class_id?: string | number[];
7
+ daytime_id?: string | string[];
8
+ }
9
+ interface ResponseClasses {
10
+ [key: string]: [] | ResponseDay;
11
+ }
12
+ interface ResponseDay {
13
+ [key: string]: ResponseCourse[];
14
+ }
15
+ interface ResponseCourse {
16
+ id: string;
17
+ title: string;
18
+ time: ResponseCourseTime;
19
+ category: string;
20
+ level: string;
21
+ club: string;
22
+ url: string | null;
23
+ is_cancelled: boolean;
24
+ is_changed: boolean;
25
+ }
26
+ interface ResponseCourseTime {
27
+ from: string;
28
+ to: string;
29
+ }
30
+
31
+ declare class FitnessFirstIcalProxy {
32
+ static request(params: RequestParams): Promise<ICalCalendar>;
33
+ static getCourses(params: RequestParams): Promise<ResponseClasses>;
34
+ static createCalendar(courses: ResponseClasses): ICalCalendar;
35
+ static paramToString(value: string | Array<string | number> | undefined): string;
36
+ static miniGet<T>(url: string): Promise<T>;
37
+ }
38
+
39
+ export { FitnessFirstIcalProxy as default };
@@ -1,9 +1,39 @@
1
- import { RequestParams, ResponseClasses } from './types.js';
2
- import type { ICalCalendar } from 'ical-generator';
3
- export default class FitnessFirstIcalProxy {
1
+ import { ICalCalendar } from 'ical-generator';
2
+
3
+ interface RequestParams {
4
+ club_id?: string | number[] | string[];
5
+ category_id?: string | number[] | string[];
6
+ class_id?: string | number[];
7
+ daytime_id?: string | string[];
8
+ }
9
+ interface ResponseClasses {
10
+ [key: string]: [] | ResponseDay;
11
+ }
12
+ interface ResponseDay {
13
+ [key: string]: ResponseCourse[];
14
+ }
15
+ interface ResponseCourse {
16
+ id: string;
17
+ title: string;
18
+ time: ResponseCourseTime;
19
+ category: string;
20
+ level: string;
21
+ club: string;
22
+ url: string | null;
23
+ is_cancelled: boolean;
24
+ is_changed: boolean;
25
+ }
26
+ interface ResponseCourseTime {
27
+ from: string;
28
+ to: string;
29
+ }
30
+
31
+ declare class FitnessFirstIcalProxy {
4
32
  static request(params: RequestParams): Promise<ICalCalendar>;
5
33
  static getCourses(params: RequestParams): Promise<ResponseClasses>;
6
34
  static createCalendar(courses: ResponseClasses): ICalCalendar;
7
35
  static paramToString(value: string | Array<string | number> | undefined): string;
8
36
  static miniGet<T>(url: string): Promise<T>;
9
37
  }
38
+
39
+ export { FitnessFirstIcalProxy as default };
package/dist/lib/index.js CHANGED
@@ -1,160 +1,2 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { get } from 'https';
11
- import ical from 'ical-generator';
12
- export default class FitnessFirstIcalProxy {
13
- static request(params) {
14
- return __awaiter(this, void 0, void 0, function* () {
15
- const courses = yield this.getCourses(params);
16
- return this.createCalendar(courses);
17
- });
18
- }
19
- static getCourses(params) {
20
- return __awaiter(this, void 0, void 0, function* () {
21
- const url = 'https://www.fitnessfirst.de/kurse/kursplan/search/' +
22
- this.paramToString(params.club_id) + '/' +
23
- this.paramToString(params.category_id) + '/' +
24
- this.paramToString(params.class_id) + '/' +
25
- this.paramToString(params.daytime_id);
26
- const response = yield this.miniGet(url);
27
- // Kinderschwimmen @ Gendarmenmarkt
28
- if (params.club_id === '0115' && (params.category_id === '431' || !params.category_id)) {
29
- Object.entries(response.data.classes).forEach(([key, classes]) => {
30
- if (key.split('_', 2)[1] === 'sa') {
31
- const event = {
32
- id: `kinderschwimmen-${key}`,
33
- title: 'Kinderschwimmen',
34
- time: {
35
- from: '09:00:00',
36
- to: '12:15:00'
37
- },
38
- category: 'Aqua',
39
- categoryIcon: 'https://www.fitnessfirst.de/sites/g/files/tbchtk201/files/2020-10/fitness-first-kurse-special.png',
40
- level: 'Alle',
41
- club: 'Berlin - Gendarmenmarkt',
42
- url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',
43
- calendarUrl: null,
44
- is_cancelled: false,
45
- is_changed: false
46
- };
47
- if (Array.isArray(classes)) {
48
- response.data.classes[key] = {
49
- before_noon: [
50
- event
51
- ]
52
- };
53
- }
54
- else {
55
- classes.before_noon = classes.before_noon || [];
56
- classes.before_noon.push(event);
57
- }
58
- }
59
- if (key.split('_', 2)[1] === 'th') {
60
- const event = {
61
- id: `kinderschwimmen-${key}`,
62
- title: 'Kinderschwimmen',
63
- time: {
64
- from: '15:00:00',
65
- to: '16:30:00'
66
- },
67
- category: 'Aqua',
68
- categoryIcon: 'https://www.fitnessfirst.de/sites/g/files/tbchtk201/files/2020-10/fitness-first-kurse-special.png',
69
- level: 'Alle',
70
- club: 'Berlin - Gendarmenmarkt',
71
- url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',
72
- calendarUrl: null,
73
- is_cancelled: false,
74
- is_changed: false
75
- };
76
- if (Array.isArray(classes)) {
77
- response.data.classes[key] = {
78
- before_noon: [
79
- event
80
- ]
81
- };
82
- }
83
- else {
84
- classes.before_noon = classes.before_noon || [];
85
- classes.before_noon.push(event);
86
- }
87
- }
88
- });
89
- }
90
- return response.data.classes;
91
- });
92
- }
93
- static createCalendar(courses) {
94
- const cal = ical.default({
95
- name: 'Fitness First',
96
- ttl: 60 * 60 * 6,
97
- prodId: {
98
- company: 'sebbo.net',
99
- product: 'fitness-first-ical-proxy'
100
- }
101
- });
102
- Object.entries(courses).forEach(([key, classes]) => {
103
- const day = key.split('_')[0];
104
- (Array.isArray(classes) ? classes : Object.values(classes)).forEach(courses => {
105
- courses.forEach((course) => {
106
- if (course.is_cancelled) {
107
- return;
108
- }
109
- const start = new Date(day + 'T' + course.time.from + 'Z');
110
- const end = new Date(day + 'T' + course.time.to + 'Z');
111
- cal.createEvent({
112
- id: course.id,
113
- start,
114
- end,
115
- floating: true,
116
- summary: course.title,
117
- location: course.club,
118
- url: course.url
119
- });
120
- });
121
- });
122
- });
123
- return cal;
124
- }
125
- static paramToString(value) {
126
- if (typeof value === 'string') {
127
- return value;
128
- }
129
- if (typeof value === 'undefined' || value.length === 0) {
130
- return 'all';
131
- }
132
- return value
133
- .map(v => v.toString())
134
- .join('-');
135
- }
136
- static miniGet(url) {
137
- return __awaiter(this, void 0, void 0, function* () {
138
- return new Promise((resolve, reject) => {
139
- get(url, res => {
140
- const data = [];
141
- res.on('data', chunk => {
142
- data.push(chunk);
143
- });
144
- res.on('end', () => {
145
- const text = String(Buffer.concat(data));
146
- if (res.statusCode !== 200) {
147
- reject(new Error('Unable to get data: ' + text));
148
- return;
149
- }
150
- const json = JSON.parse(text);
151
- resolve(json);
152
- });
153
- }).on('error', err => {
154
- reject(err);
155
- });
156
- });
157
- });
158
- }
159
- }
1
+ import{b as a}from"../chunk-FYXTGIF4.js";export{a as default};
160
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json CHANGED
@@ -8,24 +8,24 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "express": "^4.18.2",
11
- "ical-generator": "^3.6.1"
11
+ "ical-generator": "^4.0.0"
12
12
  },
13
13
  "description": "Small proxy that provides the course schedule from fitnessfirst.de/kurse as an iCal calendar.",
14
14
  "devDependencies": {
15
- "@qiwi/semantic-release-gh-pages-plugin": "^5.2.4",
16
- "@sebbo2002/semantic-release-docker": "^2.1.0",
17
- "@semantic-release/changelog": "^6.0.2",
15
+ "@qiwi/semantic-release-gh-pages-plugin": "^5.2.5",
16
+ "@sebbo2002/semantic-release-docker": "^3.0.0",
17
+ "@semantic-release/changelog": "^6.0.3",
18
18
  "@semantic-release/exec": "^6.0.3",
19
19
  "@semantic-release/git": "^10.0.1",
20
- "@semantic-release/npm": "^9.0.2",
20
+ "@semantic-release/npm": "^10.0.2",
21
21
  "@types/express": "^4.17.17",
22
22
  "@types/mocha": "^10.0.1",
23
- "@types/node": "^18.13.0",
24
- "@typescript-eslint/eslint-plugin": "^5.51.0",
25
- "@typescript-eslint/parser": "^5.51.0",
26
- "c8": "^7.11.3",
27
- "eslint": "^8.34.0",
28
- "eslint-plugin-jsonc": "^2.6.0",
23
+ "@types/node": "^18.15.11",
24
+ "@typescript-eslint/eslint-plugin": "^5.57.0",
25
+ "@typescript-eslint/parser": "^5.57.0",
26
+ "c8": "^7.13.0",
27
+ "eslint": "^8.37.0",
28
+ "eslint-plugin-jsonc": "^2.7.0",
29
29
  "esm": "^3.2.25",
30
30
  "license-checker": "^25.0.1",
31
31
  "mocha": "^10.2.0",
@@ -34,25 +34,31 @@
34
34
  "semantic-release-license": "^1.0.3",
35
35
  "source-map-support": "^0.5.21",
36
36
  "ts-node": "^10.9.1",
37
- "typedoc": "^0.23.25",
38
- "typescript": "^4.9.5"
37
+ "tsup": "^6.7.0",
38
+ "typedoc": "^0.23.26",
39
+ "typescript": "^5.0.3"
39
40
  },
40
41
  "engines": {
41
42
  "node": "^14.8.0 || >=16.0.0"
42
43
  },
43
- "exports": "./dist/index.js",
44
+ "exports": {
45
+ "import": "./dist/lib/index.js",
46
+ "require": "./dist/lib/index.cjs"
47
+ },
44
48
  "files": [
45
49
  "/dist"
46
50
  ],
47
51
  "homepage": "https://github.com/sebbo2002/fitness-first-ical-proxy#readme",
48
52
  "license": "MIT",
53
+ "main": "./dist/lib/index.cjs",
54
+ "module": "./dist/lib/index.js",
49
55
  "name": "@sebbo2002/fitness-first-ical-proxy",
50
56
  "repository": {
51
57
  "type": "git",
52
58
  "url": "git+https://github.com/sebbo2002/fitness-first-ical-proxy.git"
53
59
  },
54
60
  "scripts": {
55
- "build": "tsc && chmod +x ./dist/bin/*.js",
61
+ "build": "tsup && cp ./dist/lib/index.d.ts ./dist/lib/index.d.cts",
56
62
  "build-all": "./.github/workflows/build.sh",
57
63
  "coverage": "c8 mocha",
58
64
  "develop": "ts-node ./src/bin/start.ts",
@@ -62,5 +68,5 @@
62
68
  "test": "mocha"
63
69
  },
64
70
  "type": "module",
65
- "version": "3.0.0-develop.1"
71
+ "version": "3.0.0-develop.3"
66
72
  }
@@ -1,33 +0,0 @@
1
- export interface RequestParams {
2
- club_id?: string | number[] | string[];
3
- category_id?: string | number[] | string[];
4
- class_id?: string | number[];
5
- daytime_id?: string | string[];
6
- }
7
- export interface Response {
8
- data: ResponseData;
9
- }
10
- export interface ResponseData {
11
- classes: ResponseClasses;
12
- }
13
- export interface ResponseClasses {
14
- [key: string]: [] | ResponseDay;
15
- }
16
- export interface ResponseDay {
17
- [key: string]: ResponseCourse[];
18
- }
19
- export interface ResponseCourse {
20
- id: string;
21
- title: string;
22
- time: ResponseCourseTime;
23
- category: string;
24
- level: string;
25
- club: string;
26
- url: string | null;
27
- is_cancelled: boolean;
28
- is_changed: boolean;
29
- }
30
- export interface ResponseCourseTime {
31
- from: string;
32
- to: string;
33
- }
package/dist/lib/types.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":""}