UNPKG

@lspriv/wc-plugin-ics

Version:

小程序日历组件订阅插件

107 lines (106 loc) 4.38 kB
import { type Plugin, type TrackDateResult, type TrackYearResult, type CalendarDay, type CalendarMark, type WcYear, type WcMark, type WcScheduleMark, type WcAnnualMark, type PluginService, type WcScheduleInfo, type Nullable } from '@lspriv/wx-calendar/lib'; type PropsReturn<R, P extends any[] = []> = (properties: JCalPropDict, ...args: P) => R | undefined; type ICSComponentType = 'event' | 'alarm' | 'todo' | 'journal'; type ICSCompTypeOpt<K extends string | void, T> = { [P in ICSComponentType as K extends string ? `${P}${K}` : P]?: T; }; type ICSCompTypeOpts = ICSCompTypeOpt<void, PropsReturn<ICSMark, [key: string]>> & ICSCompTypeOpt<'MarkAs', CalendarMark['type'] | Array<CalendarMark['type']>> & ICSCompTypeOpt<'FestivalName', PropsReturn<string>> & ICSCompTypeOpt<'FestivalColor', string | PropsReturn<string>> & ICSCompTypeOpt<'CornerText', PropsReturn<string>> & ICSCompTypeOpt<'CornerColor', string | PropsReturn<string>> & ICSCompTypeOpt<'ScheduleText', PropsReturn<string>> & ICSCompTypeOpt<'ScheduleColor', string | PropsReturn<string>> & ICSCompTypeOpt<'ScheduleBgColor', string | PropsReturn<string>>; export type ICSOpts = ICSCompTypeOpts & { subcribes?: Array<ICSSubcribe>; parseDate?: PropsReturn<CalendarDay>; collectAnuualMark?: PropsReturn<WcAnnualMark, [sets: ICSAnnualMarkMap]>; afterMarked?: (options: ICSSubcribeOpts, instance: ICSPlugin) => void; }; type ICSCommonOpts = Omit<ICSOpts, 'subcribes'>; export interface ICSOptsGeneration { (instance: ICSPlugin): ICSOpts; } type ICSSubcribeOpts = ICSCommonOpts & { calname?: string; icskey?: string; }; export interface ICSSubcribeGeneration { (instance: ICSPlugin): ICSSubcribe; } export interface ICSSubcribeOptsGeneration { (instance: ICSPlugin): ICSSubcribeOpts; } export type ICSSubcribe = ICSSubcribeOpts & { kind?: 'link' | 'file' | 'content'; source: string; }; interface JCalPropDict { [x: string | symbol]: any; compname: string; icskey?: string; date?: CalendarDay; } export interface CurrentSeries { date?: number; name?: string; } type ICSScheduleMark = WcScheduleMark & { dtstart: string; dtend: string; summary?: string; description?: string; }; export type ICSMark = { [P in keyof TrackDateResult]?: P extends 'schedule' ? ICSScheduleMark : WcMark; }; type ICSMarkSets = { [P in keyof ICSMark]-?: Array<Required<ICSMark>[P]>; }; type ICSAnnualMark = WcAnnualMark & { key: string; }; type ICSAnnualMarkMap = Map<string, Array<ICSAnnualMark>>; type PossibleFuncParams<T> = T extends (...args: any[]) => any ? Parameters<T> : never; type PossibleFuncReturn<T> = T extends (...args: any[]) => any ? ReturnType<T> : T; export declare const execPossibleFunc: <T>(possibleFunc: T, ...args: PossibleFuncParams<T>) => PossibleFuncReturn<T>; export declare class ICSPlugin implements Plugin { static KEY: "wc-plugin-ics"; private options; private subcribes?; marks: Map<string, ICSMarkSets>; annualMarks: ICSAnnualMarkMap; service?: PluginService; constructor(options?: ICSOpts | ICSOptsGeneration); PLUGIN_INITIALIZE(service: PluginService): Promise<void>; private formOptions; /** * 加载订阅 * @param subcribes 订阅集合 */ private loadSubcribes; /** * 加载 ICS * @param source 来源 * @param type 类型 link来自连接 file本地文件 content订阅内容 */ private loadICS; load(subscribe: ICSSubcribe | ICSSubcribeGeneration): Promise<string>; load(source: string, type?: ICSSubcribe['kind'], options?: ICSSubcribeOpts | ICSSubcribeOptsGeneration): Promise<string>; /** * 读取本地文件内容 * @param path 要读取的文件的路径 (本地路径) */ private parseFile; private parseJCal; private generateMarks; private assignComponentHandle; private createIcsMark; private collectMark; private collectAnnualMark; /** * 移除订阅 * @param icskey key */ remove(icskey: string): Promise<void>; PLUGIN_TRACK_DATE(date: CalendarDay): Nullable<TrackDateResult>; PLUGIN_TRACK_YEAR(year: WcYear): Nullable<TrackYearResult>; PLUGIN_TRACK_SCHEDULE(date: CalendarDay, id?: string): Nullable<WcScheduleInfo>; PLUGIN_ON_DETACHED(): void; } export declare const ICS_PLUGIN_KEY: "wc-plugin-ics"; export {};