iobroker.javascript 9.0.1 → 9.0.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.
- package/README.md +6 -4
- package/admin/assets/{index-BzKS5vx-.js → index-B2hdKtuj.js} +67 -67
- package/admin/assets/{index-tExaxF69.js → index-C3f8WSiz.js} +1 -1
- package/admin/assets/{index-CfuHVX2B.js → index-glyB1sbj.js} +37 -37
- package/admin/custom/assets/{index-DZqbj5K4.js → index-BzS6q3oS.js} +13 -13
- package/admin/custom/assets/{index-BXmu6lpn.js → index-DQRrNJnQ.js} +1 -1
- package/admin/custom/customComponents.js +2 -2
- package/admin/mf-manifest.json +1 -1
- package/admin/remoteEntry.js +2 -2
- package/admin/tab.html +1 -1
- package/build-backend/lib/patternCompareFunctions.js +28 -56
- package/build-backend/lib/patternCompareFunctions.js.map +1 -1
- package/build-backend/lib/protectFs.js +116 -66
- package/build-backend/lib/protectFs.js.map +1 -1
- package/build-backend/lib/scheduler.js +0 -3
- package/build-backend/lib/scheduler.js.map +1 -1
- package/io-package.json +15 -15
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protectFs.js","sourceRoot":"","sources":["../../src/lib/protectFs.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BufferEncodingOption,\n CopyOptions,\n Dirent,\n MakeDirectoryOptions,\n Mode,\n ObjectEncodingOptions,\n OpenMode,\n PathLike,\n RmDirOptions,\n RmOptions,\n StatOptions,\n Stats,\n TimeLike,\n CopySyncOptions,\n NoParamCallback,\n PathOrFileDescriptor,\n WriteFileOptions,\n EncodingOption,\n FSWatcher,\n ReadStream,\n StatsListener,\n StatWatcher,\n WatchListener,\n WriteStream,\n} from 'node:fs';\nimport type { Abortable } from 'node:events';\nimport type { FileHandle, FlagAndOpenMode } from 'node:fs/promises';\nimport type { URL } from 'node:url';\nimport type { Stream } from 'node:stream';\n\nimport * as nodeFS from 'node:fs';\nimport { sep, normalize, join } from 'node:path';\n\nexport default class ProtectFs {\n private readonly log: ioBroker.Logger;\n private readonly ioBrokerDataDir: string;\n public readonly promises: {\n access: (path: PathLike, mode?: number) => Promise<void>;\n cp: (source: string | URL, destination: string | URL, opts?: CopyOptions) => Promise<void>;\n readFile: (\n path: PathLike | FileHandle,\n options:\n | ({\n encoding: BufferEncoding;\n flag?: OpenMode | undefined;\n } & Abortable)\n | BufferEncoding,\n ) => Promise<string>;\n readlink: (path: PathLike, options: BufferEncodingOption) => Promise<Buffer>;\n symlink: (target: PathLike, path: PathLike, type?: string | null) => Promise<void>;\n writeFile: (\n file: PathLike | FileHandle,\n data:\n | string\n | NodeJS.ArrayBufferView\n | Iterable<string | NodeJS.ArrayBufferView>\n | AsyncIterable<string | NodeJS.ArrayBufferView>\n | Stream,\n options?:\n | (ObjectEncodingOptions & {\n mode?: Mode | undefined;\n flag?: OpenMode | undefined;\n flush?: boolean | undefined;\n } & Abortable)\n | BufferEncoding\n | null,\n ) => Promise<void>;\n unlink: (path: PathLike) => Promise<void>;\n appendFile: (\n path: PathLike | FileHandle,\n data: string | Uint8Array,\n options?:\n | (ObjectEncodingOptions & FlagAndOpenMode & { flush?: boolean | undefined })\n | BufferEncoding\n | null,\n ) => Promise<void>;\n chmod: (path: PathLike, mode: Mode) => Promise<void>;\n copyFile: (src: PathLike, dest: PathLike, mode?: number) => Promise<void>;\n rename: (oldPath: PathLike, newPath: PathLike) => Promise<void>;\n open: (path: PathLike, flags?: string | number, mode?: Mode) => Promise<FileHandle>;\n truncate: (path: PathLike, len?: number) => Promise<void>;\n stat: (path: PathLike, opts?: StatOptions) => Promise<Stats>;\n utimes: (path: PathLike, atime: TimeLike, mtime: TimeLike) => Promise<void>;\n readdir: (\n path: PathLike,\n options?: ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n ) => Promise<Dirent[]>;\n lchmod: (path: PathLike, mode: Mode) => Promise<void>;\n lchown: (path: PathLike, uid: number, gid: number) => Promise<void>;\n link: (existingPath: PathLike, newPath: PathLike) => Promise<void>;\n lstat: (path: PathLike, opts?: StatOptions) => Promise<Stats>;\n lutimes: (path: PathLike, atime: TimeLike, mtime: TimeLike) => Promise<void>;\n mkdir: (path: PathLike, options?: Mode | MakeDirectoryOptions | null) => Promise<string | undefined>;\n mkdtemp: (prefix: string, options?: ObjectEncodingOptions | BufferEncoding | null) => Promise<string>;\n rm: (path: PathLike, options?: RmOptions) => Promise<void>;\n rmdir: (path: PathLike, options?: RmDirOptions) => Promise<void>;\n };\n public readonly constants: Record<string, number>;\n\n constructor(log: ioBroker.Logger, ioBrokerDataDir: string) {\n this.ioBrokerDataDir = ioBrokerDataDir;\n this.log = log || {\n silly: (message: string): void => console.log(message),\n debug: (message: string): void => console.debug(message),\n info: (message: string): void => console.info(message),\n warn: (message: string): void => console.warn(message),\n error: (message: string): void => console.error(message),\n level: 'info',\n };\n\n this.promises = {\n access: async (path: PathLike, mode?: number): Promise<void> => {\n this.#checkProtected(path, true);\n return nodeFS.promises.access(path, mode);\n },\n cp: async (source: string | URL, destination: string | URL, opts?: CopyOptions): Promise<void> => {\n this.#checkProtected(source, false);\n this.#checkProtected(destination, false);\n return nodeFS.promises.cp(source, destination, opts);\n },\n readFile: async (\n path: PathLike | FileHandle,\n options:\n | ({\n encoding: BufferEncoding;\n flag?: OpenMode | undefined;\n } & Abortable)\n | BufferEncoding,\n ): Promise<string> => {\n this.#checkProtected(path, true);\n return nodeFS.promises.readFile(path, options); // async function readFile(path, options) {\n },\n readlink: async (path: PathLike, options: BufferEncodingOption): Promise<Buffer> => {\n this.#checkProtected(path, true);\n return nodeFS.promises.readlink(path, options); // async function readlink(path, options) {\n },\n symlink: async (target: PathLike, path: PathLike, type?: string | null): Promise<void> => {\n this.#checkProtected(target, true);\n this.#checkProtected(path, false);\n return nodeFS.promises.symlink(target, path, type); // async function symlink(target, path, type_) {\n },\n writeFile: async (\n file: PathLike | FileHandle,\n data:\n | string\n | NodeJS.ArrayBufferView\n | Iterable<string | NodeJS.ArrayBufferView>\n | AsyncIterable<string | NodeJS.ArrayBufferView>\n | Stream,\n options?:\n | (ObjectEncodingOptions & {\n mode?: Mode | undefined;\n flag?: OpenMode | undefined;\n /**\n * If all data is successfully written to the file, and `flush`\n * is `true`, `filehandle.sync()` is used to flush the data.\n *\n * @default false\n */\n flush?: boolean | undefined;\n } & Abortable)\n | BufferEncoding\n | null,\n ): Promise<void> => {\n this.#checkProtected(file, true);\n return nodeFS.promises.writeFile.call(this, file, data, options); // async function writeFile(path, data, options) {\n },\n unlink: async (path: PathLike): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.unlink.call(this, path); // async function unlink(path) {\n },\n appendFile: async (\n path: PathLike | FileHandle,\n data: string | Uint8Array,\n options?:\n | (ObjectEncodingOptions & FlagAndOpenMode & { flush?: boolean | undefined })\n | BufferEncoding\n | null,\n ): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.appendFile.call(this, path, data, options); // async function appendFile(path, data, options) {\n },\n chmod: async (path: PathLike, mode: Mode): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.chmod.call(this, path, mode); // async function chmod(path, mode) {\n },\n copyFile: async (src: PathLike, dest: PathLike, mode?: number): Promise<void> => {\n this.#checkProtected(src, false);\n this.#checkProtected(dest, false);\n return nodeFS.promises.copyFile.call(this, src, dest, mode); // async function copyFile(src, dest, mode) {\n },\n rename: async (oldPath: PathLike, newPath: PathLike): Promise<void> => {\n this.#checkProtected(oldPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.promises.rename.call(this, oldPath, newPath); // async function rename(oldPath, newPath) {\n },\n open: async (path: PathLike, flags?: string | number, mode?: Mode): Promise<FileHandle> => {\n this.#checkProtected(path, true);\n return nodeFS.promises.open.call(this, path, flags, mode); // async function open(path, flags, mode) {\n },\n truncate: async (path: PathLike, len?: number): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.truncate.call(this, path, len); // async function truncate(path, len = 0) {\n },\n stat: async (path: PathLike, opts?: StatOptions): Promise<Stats> => {\n this.#checkProtected(path, true);\n const result = await nodeFS.promises.stat.call(this, path, opts); // async function stat(path, options = { bigint: false }) {\n return result as Stats;\n },\n utimes: async (path: PathLike, atime: TimeLike, mtime: TimeLike): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.utimes.call(this, path, atime, mtime); // async function utimes(path, atime, mtime) {\n },\n readdir: async (\n path: PathLike,\n options?: ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n ): Promise<Dirent[]> => {\n this.#checkProtected(path, true);\n // @ts-expect-error fix later\n return nodeFS.promises.readdir.call(this, path, options || { encoding: null, withFileTypes: true }); // async function readdir(path, options) {\n },\n lchmod: async (path: PathLike, mode: Mode): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.lchmod.call(this, path, mode); // async function lchmod(path, mode) {\n },\n lchown: async (path: PathLike, uid: number, gid: number): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.lchown.call(this, path, uid, gid); // async function lchown(path, uid, gid) {\n },\n link: async (existingPath: PathLike, newPath: PathLike): Promise<void> => {\n this.#checkProtected(existingPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.promises.link.call(this, existingPath, newPath); // async function link(existingPath, newPath) {\n },\n lstat: async (path: PathLike, opts?: StatOptions): Promise<Stats> => {\n this.#checkProtected(path, true);\n const res = await nodeFS.promises.lstat.call(this, path, opts); // async function lstat(path, options = { bigint: false }) {\n return res as Stats;\n },\n lutimes: async (path: PathLike, atime: TimeLike, mtime: TimeLike): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.lutimes.call(this, path, atime, mtime); // async function lutimes(path, atime, mtime) {\n },\n mkdir: async (\n path: PathLike,\n options?: Mode | MakeDirectoryOptions | null,\n ): Promise<string | undefined> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.mkdir.call(this, path, options); // async function mkdir(path, options) {\n },\n mkdtemp: async (\n prefix: string,\n options?: ObjectEncodingOptions | BufferEncoding | null,\n ): Promise<string> => {\n this.#checkProtected(prefix, false);\n const tmp = await nodeFS.promises.mkdtemp.call(this, prefix, options); // async function mkdtemp(prefix, options) {\n return tmp.toString();\n },\n rm: async (path: PathLike, options?: RmOptions): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.rm.call(this, path, options); // async function rm(path, options) {\n },\n rmdir: async (path: PathLike, options?: RmDirOptions): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.rmdir.call(this, path, options); // async function rmdir(path, options) {\n },\n };\n\n // Add missing constants\n this.constants = nodeFS.constants;\n\n // Add missing functions\n for (const m in nodeFS) {\n if (\n typeof (nodeFS as unknown as Record<string, any>)[m] === 'function' &&\n Object.hasOwn(nodeFS, m) &&\n !Object.hasOwn(Object.getPrototypeOf(this), 'appendFile')\n ) {\n // console.debug(`Missing function in ProtectFS: ${m} - adding from node:fs`);\n // @ts-expect-error Elsewise we must implement EVERY function in fs\n this[m] = nodeFS[m];\n }\n }\n\n for (const m in nodeFS.promises) {\n if (\n typeof (nodeFS.promises as unknown as Record<string, any>)[m] === 'function' &&\n Object.hasOwn(nodeFS.promises, m) &&\n !Object.hasOwn(this.promises, m)\n ) {\n // console.debug(`Missing function in ProtectFS: ${m} - adding from node:fs/promises`);\n // @ts-expect-error Elsewise we must implement EVERY function in fs\n this.promises[m] = nodeFS.promises[m];\n }\n }\n }\n\n #checkProtected(file: PathLike | FileHandle, readOnly: boolean): void {\n if ((file as FileHandle).fd) {\n return;\n }\n const filePath = normalize((file as PathLike).toString());\n\n // todo: protect against file://...\n if (filePath.endsWith(`-data${sep}objects.json`) || filePath.endsWith(`-data${sep}objects.jsonl`)) {\n this.log.error(`May not read ${(file as PathLike).toString()}`);\n throw new Error('Permission denied');\n }\n if (!readOnly && filePath.startsWith(join(this.ioBrokerDataDir, 'files'))) {\n this.log.error(`May not read ${(file as PathLike).toString()} - use writeFile instead`);\n throw new Error('Permission denied');\n }\n }\n\n access(path: PathLike, callback: NoParamCallback): void {\n this.#checkProtected(path, true);\n return nodeFS.access(path, callback);\n }\n\n accessSync(path: PathLike, mode?: number): void {\n this.#checkProtected(path, true);\n return nodeFS.accessSync(path, mode); // function accessSync(path, mode) {\n }\n\n cp(\n source: string | URL,\n destination: string | URL,\n opts: CopyOptions | ((err: NodeJS.ErrnoException | null) => void),\n callback?: (err: NodeJS.ErrnoException | null) => void,\n ): void {\n this.#checkProtected(source, false);\n this.#checkProtected(destination, false);\n if (callback) {\n return nodeFS.cp(source, destination, opts as CopyOptions, callback);\n }\n if (typeof opts === 'function') {\n return nodeFS.cp(source, destination, opts);\n }\n return nodeFS.cp(source, destination, opts as (err: NodeJS.ErrnoException | null) => void);\n }\n\n cpSync(source: string | URL, destination: string | URL, opts?: CopySyncOptions): void {\n this.#checkProtected(source, false);\n this.#checkProtected(destination, false);\n return nodeFS.cpSync.call(this, source, destination, opts); // function cpSync(src, dest, options) {\n }\n\n readFile(path: PathOrFileDescriptor, callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void): void {\n if (typeof path !== 'number') {\n this.#checkProtected(path, true);\n }\n return nodeFS.readFile.call(this, path, callback); // function readFile(path, options, callback) {\n }\n\n readFileSync(\n path: PathOrFileDescriptor,\n options:\n | {\n encoding: BufferEncoding;\n flag?: string | undefined;\n }\n | BufferEncoding,\n ): string | Buffer {\n if (typeof path !== 'number') {\n this.#checkProtected(path, true);\n }\n return nodeFS.readFileSync.call(this, path, options); // function readFileSync(path, options) {\n }\n\n readlink(path: PathLike, callback: (err: NodeJS.ErrnoException | null, linkString: string) => void): void {\n this.#checkProtected(path, true);\n return nodeFS.readlink.call(this, path, callback); // function readlink(path, options, callback) {\n }\n\n readlinkSync(path: PathLike, options?: any): string | Buffer {\n this.#checkProtected(path, true);\n return nodeFS.readlinkSync.call(this, path, options); // function readlinkSync(path, options) {\n }\n\n symlink(\n target: PathLike,\n path: PathLike,\n type: 'dir' | 'file' | 'junction' | undefined | null | NoParamCallback,\n callback: NoParamCallback,\n ): void {\n this.#checkProtected(target, true);\n this.#checkProtected(path, false);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.symlink.call(this, target, path, type, callback);\n }\n return nodeFS.symlink.call(this, target, path, type as NoParamCallback); // function symlink(target, path, type_, callback_) {\n }\n\n symlinkSync(target: PathLike, path: PathLike, type?: 'dir' | 'file' | 'junction' | null): void {\n this.#checkProtected(target, true);\n this.#checkProtected(path, false);\n return nodeFS.symlinkSync.call(this, target, path, type); // function symlinkSync(target, path, type) {\n }\n\n writeFile(\n file: PathLike | number,\n data: string | NodeJS.ArrayBufferView,\n options: WriteFileOptions | NoParamCallback,\n callback?: NoParamCallback,\n ): void {\n if (typeof file !== 'number') {\n this.#checkProtected(file, false);\n }\n // @ts-expect-error should work\n return nodeFS.writeFile.call(this, file, data, options, callback); // function writeFile(path, data, options, callback) {\n }\n\n writeFileSync(file: PathLike | number, data: string | NodeJS.ArrayBufferView, options?: WriteFileOptions): void {\n if (typeof file !== 'number') {\n this.#checkProtected(file, false);\n }\n return nodeFS.writeFileSync.call(this, file, data, options); // function writeFileSync(path, data, options) {\n }\n\n unlink(path: PathLike, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.unlink.call(this, path, callback); // function unlink(path, callback) {\n }\n\n unlinkSync(path: PathLike): void {\n this.#checkProtected(path, false);\n return nodeFS.unlinkSync.call(this, path); // function unlinkSync(path) {\n }\n\n appendFile(file: PathLike | number, data: string | Uint8Array, callback: NoParamCallback): void {\n if (typeof file !== 'number') {\n this.#checkProtected(file, false);\n }\n return nodeFS.appendFile.call(this, file, data, callback); // function appendFile(path, data, options, callback) {\n }\n\n appendFileSync(file: PathLike | number, data: string | Uint8Array): void {\n if (typeof file !== 'number') {\n this.#checkProtected(file, false);\n }\n return nodeFS.appendFileSync.call(this, file, data); // function appendFileSync(path, data, options) {\n }\n\n chmod(path: PathLike, mode: Mode, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.chmod.call(this, path, mode, callback); // function chmod(path, mode, callback) {\n }\n\n chmodSync(path: PathLike, mode: Mode): void {\n this.#checkProtected(path, false);\n return nodeFS.chmodSync.call(this, path, mode); // function chmodSync(path, mode) {\n }\n\n chown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.chown.call(this, path, uid, gid, callback); // function chown(path, uid, gid, callback) {\n }\n\n chownSync(path: PathLike, uid: number, gid: number): void {\n this.#checkProtected(path, false);\n return nodeFS.chownSync.call(this, path, uid, gid); // function chownSync(path, uid, gid) {\n }\n\n copyFile(src: PathLike, dest: PathLike, mode: number | NoParamCallback, callback?: NoParamCallback): void {\n this.#checkProtected(src, true);\n this.#checkProtected(dest, false);\n // @ts-expect-error should work\n return nodeFS.copyFile.call(this, src, dest, mode, callback); // function copyFile(src, dest, mode, callback) {\n }\n\n copyFileSync(src: PathLike, dest: PathLike, mode?: number): void {\n this.#checkProtected(src, true);\n this.#checkProtected(dest, false);\n return nodeFS.copyFileSync.call(this, src, dest, mode); // function copyFileSync(src, dest, mode) {\n }\n\n rename(oldPath: PathLike, newPath: PathLike, callback: NoParamCallback): void {\n this.#checkProtected(oldPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.rename.call(this, oldPath, newPath, callback); // function rename(oldPath, newPath, callback) {\n }\n\n renameSync(oldPath: PathLike, newPath: PathLike): void {\n this.#checkProtected(oldPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.renameSync.call(this, oldPath, newPath); // function renameSync(oldPath, newPath) {\n }\n\n open(path: PathLike, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void {\n this.#checkProtected(path, true);\n return nodeFS.open.call(this, path, callback); // function open(path, flags, mode, callback) {\n }\n\n openSync(path: PathLike, flags: OpenMode, mode?: Mode | null): number {\n this.#checkProtected(path, true);\n return nodeFS.openSync.call(this, path, flags, mode); // function openSync(path, flags, mode) {\n }\n\n truncate(path: PathLike, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.truncate.call(this, path, callback); // function truncate(path, len, callback) {\n }\n\n truncateSync(path: PathLike): void {\n this.#checkProtected(path, false);\n return nodeFS.truncateSync.call(this, path); // function truncateSync(path, len) {\n }\n\n exists(path: PathLike, callback: (exists: boolean) => void): void {\n this.#checkProtected(path, true);\n return nodeFS.exists.call(this, path, callback); // function exists(path, callback) {\n }\n\n existsSync(path: PathLike): boolean {\n this.#checkProtected(path, true);\n return nodeFS.existsSync.call(this, path); // function existsSync(path) {\n }\n\n stat(\n path: PathLike,\n options: StatOptions | undefined | ((err: NodeJS.ErrnoException | null, stats: Stats) => void),\n callback?: (err: NodeJS.ErrnoException | null, stats: Stats) => void,\n ): void {\n this.#checkProtected(path, true);\n // @ts-expect-error should work\n return nodeFS.stat.call(this, path, options, callback); // function stat(path, options = { bigint: false }, callback) {\n }\n\n statSync(path: PathLike, options?: StatOptions): Stats {\n this.#checkProtected(path, true);\n return nodeFS.statSync.call(this, path, options); // function statSync(path, options = { bigint: false, throwIfNoEntry: true }) {\n }\n\n utimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.utimes.call(this, path, atime, mtime, callback); // function utimes(path, atime, mtime, callback) {\n }\n\n utimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void {\n this.#checkProtected(path, false);\n return nodeFS.utimesSync.call(this, path, atime, mtime); // function utimesSync(path, atime, mtime) {\n }\n\n readdir(\n path: PathLike,\n options:\n | (ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n })\n | ((err: NodeJS.ErrnoException | null, files: Dirent[]) => void),\n callback?: (err: NodeJS.ErrnoException | null, files: Dirent[]) => void,\n ): void {\n this.#checkProtected(path, true);\n // @ts-expect-error should work\n return nodeFS.readdir.call(this, path, options, callback); // function readdir(path, options, callback) {\n }\n\n readdirSync(\n path: PathLike,\n options?: ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n ): void {\n this.#checkProtected(path, true);\n // @ts-expect-error should work\n return nodeFS.readdirSync.call(this, path, options); // function readdirSync(path, options) {\n }\n\n createReadStream(path: PathLike, options?: BufferEncoding): ReadStream {\n this.#checkProtected(path, true);\n return nodeFS.createReadStream.call(this, path, options); // function createReadStream(path, options) {\n }\n\n createWriteStream(path: PathLike, options?: BufferEncoding): WriteStream {\n this.#checkProtected(path, false);\n return nodeFS.createWriteStream.call(this, path, options); // function createWriteStream(path, options) {\n }\n\n lchmod(path: PathLike, mode: Mode, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.lchmod.call(this, path, mode, callback); // function lchmod(path, mode, callback) {\n }\n\n lchmodSync(path: PathLike, mode: Mode): void {\n this.#checkProtected(path, false);\n return nodeFS.lchmodSync.call(this, path, mode); // function lchmodSync(path, mode) {\n }\n\n lchown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.lchown.call(this, path, uid, gid, callback); // function lchown(path, uid, gid, callback) {\n }\n\n lchownSync(path: PathLike, uid: number, gid: number): void {\n this.#checkProtected(path, false);\n return nodeFS.lchownSync.call(this, path, uid, gid); // function lchownSync(path, uid, gid) {\n }\n\n link(existingPath: PathLike, newPath: PathLike, callback: NoParamCallback): void {\n this.#checkProtected(existingPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.link.call(this, existingPath, newPath, callback); // function link(existingPath, newPath, callback) {\n }\n\n linkSync(existingPath: PathLike, newPath: PathLike): void {\n this.#checkProtected(existingPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.linkSync.call(this, existingPath, newPath); // function linkSync(existingPath, newPath) {\n }\n\n lstat(\n path: PathLike,\n options: StatOptions | undefined | ((err: NodeJS.ErrnoException | null, stats: Stats) => void),\n callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void,\n ): void {\n this.#checkProtected(path, true);\n // @ts-expect-error should work\n return nodeFS.lstat.call(this, path, options, callback); // function lstat(path, options = { bigint: false }, callback) {\n }\n\n lstatSync(path: PathLike, options?: StatOptions): Stats {\n this.#checkProtected(path, true);\n return nodeFS.lstatSync.call(this, path, options); // function lstatSync(path, options = { bigint: false, throwIfNoEntry: true }) {\n }\n\n lutimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.lutimes.call(this, path, atime, mtime, callback); // function lutimes(path, atime, mtime, callback) {\n }\n\n lutimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void {\n this.#checkProtected(path, false);\n return nodeFS.lutimesSync.call(this, path, atime, mtime); // function lutimesSync(path, atime, mtime) {\n }\n\n mkdir(\n path: PathLike,\n options:\n | Mode\n | (MakeDirectoryOptions & {\n recursive: true;\n })\n | null\n | undefined\n | ((err: NodeJS.ErrnoException | null, path?: string) => void),\n callback?: (err: NodeJS.ErrnoException | null, path?: string) => void,\n ): void {\n this.#checkProtected(path, false);\n // @ts-expect-error should work\n return nodeFS.mkdir.call(this, path, options, callback); // function mkdir(path, options, callback) {\n }\n\n mkdirSync(\n path: PathLike,\n options?: MakeDirectoryOptions & {\n recursive: true;\n },\n ): string | undefined {\n this.#checkProtected(path, false);\n return nodeFS.mkdirSync.call(this, path, options); // function mkdirSync(path, options) {\n }\n\n mkdtemp(\n prefix: string,\n options: EncodingOption | ((err: NodeJS.ErrnoException | null, folder: string) => void),\n callback?: (err: NodeJS.ErrnoException | null, folder: string) => void,\n ): void {\n this.#checkProtected(prefix, false);\n // @ts-expect-error should work\n return nodeFS.mkdtemp.call(this, prefix, options, callback); // function mkdtemp(prefix, options, callback) {\n }\n\n mkdtempSync(prefix: string, options?: EncodingOption): string | Buffer {\n this.#checkProtected(prefix, false);\n return nodeFS.mkdtempSync.call(this, prefix, options); // function mkdtempSync(prefix, options) {\n }\n\n rm(path: PathLike, options: RmOptions | NoParamCallback, callback?: NoParamCallback): void {\n this.#checkProtected(path, false);\n // @ts-expect-error should work\n return nodeFS.rm.call(this, path, options, callback); // function rm(path, options, callback) {\n }\n\n rmSync(path: PathLike, options?: RmOptions): void {\n this.#checkProtected(path, false);\n return nodeFS.rmSync.call(this, path, options); // function rmSync(path, options) {\n }\n\n rmdir(path: PathLike, options: RmDirOptions | NoParamCallback, callback?: NoParamCallback): void {\n this.#checkProtected(path, false);\n // @ts-expect-error should work\n return nodeFS.rmdir.call(this, path, options, callback); // function rmdir(path, options, callback) {\n }\n\n rmdirSync(path: PathLike, options?: RmDirOptions): void {\n this.#checkProtected(path, false);\n return nodeFS.rmdirSync.call(this, path, options); // function rmdirSync(path, options) {\n }\n\n watch(filename: PathLike, listener?: WatchListener<string>): FSWatcher {\n this.#checkProtected(filename, true);\n return nodeFS.watch.call(this, filename, listener); // function watch(filename, options, listener) {\n }\n\n watchFile(filename: PathLike, listener: StatsListener): StatWatcher {\n this.#checkProtected(filename, true);\n return nodeFS.watchFile.call(this, filename, listener); // function watchFile(filename, options, listener) {\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"protectFs.js","sourceRoot":"","sources":["../../src/lib/protectFs.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BufferEncodingOption,\n CopyOptions,\n Dirent,\n MakeDirectoryOptions,\n Mode,\n ObjectEncodingOptions,\n OpenMode,\n PathLike,\n RmDirOptions,\n RmOptions,\n StatOptions,\n Stats,\n TimeLike,\n CopySyncOptions,\n NoParamCallback,\n PathOrFileDescriptor,\n WriteFileOptions,\n EncodingOption,\n FSWatcher,\n ReadStream,\n StatsListener,\n StatWatcher,\n WatchListener,\n WriteStream,\n BigIntStatsListener,\n WatchOptions,\n} from 'node:fs';\nimport type { Abortable } from 'node:events';\nimport type { FileHandle, FlagAndOpenMode } from 'node:fs/promises';\nimport type { URL } from 'node:url';\nimport type { Stream } from 'node:stream';\n\nimport * as nodeFS from 'node:fs';\nimport { sep, normalize, join } from 'node:path';\n\nexport default class ProtectFs {\n private readonly log: ioBroker.Logger;\n private readonly ioBrokerDataDir: string;\n public readonly promises: {\n access: (path: PathLike, mode?: number) => Promise<void>;\n cp: (source: string | URL, destination: string | URL, opts?: CopyOptions) => Promise<void>;\n readFile: (\n path: PathLike | FileHandle,\n options:\n | ({\n encoding: BufferEncoding;\n flag?: OpenMode | undefined;\n } & Abortable)\n | BufferEncoding,\n ) => Promise<string>;\n readlink: (path: PathLike, options: BufferEncodingOption) => Promise<Buffer>;\n symlink: (target: PathLike, path: PathLike, type?: string | null) => Promise<void>;\n writeFile: (\n file: PathLike | FileHandle,\n data:\n | string\n | NodeJS.ArrayBufferView\n | Iterable<string | NodeJS.ArrayBufferView>\n | AsyncIterable<string | NodeJS.ArrayBufferView>\n | Stream,\n options?:\n | (ObjectEncodingOptions & {\n mode?: Mode | undefined;\n flag?: OpenMode | undefined;\n flush?: boolean | undefined;\n } & Abortable)\n | BufferEncoding\n | null,\n ) => Promise<void>;\n unlink: (path: PathLike) => Promise<void>;\n appendFile: (\n path: PathLike | FileHandle,\n data: string | Uint8Array,\n options?:\n | (ObjectEncodingOptions & FlagAndOpenMode & { flush?: boolean | undefined })\n | BufferEncoding\n | null,\n ) => Promise<void>;\n chmod: (path: PathLike, mode: Mode) => Promise<void>;\n copyFile: (src: PathLike, dest: PathLike, mode?: number) => Promise<void>;\n rename: (oldPath: PathLike, newPath: PathLike) => Promise<void>;\n open: (path: PathLike, flags?: string | number, mode?: Mode) => Promise<FileHandle>;\n truncate: (path: PathLike, len?: number) => Promise<void>;\n stat: (path: PathLike, opts?: StatOptions) => Promise<Stats>;\n utimes: (path: PathLike, atime: TimeLike, mtime: TimeLike) => Promise<void>;\n readdir: (\n path: PathLike,\n options?: ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n ) => Promise<Dirent[]>;\n lchmod: (path: PathLike, mode: Mode) => Promise<void>;\n lchown: (path: PathLike, uid: number, gid: number) => Promise<void>;\n link: (existingPath: PathLike, newPath: PathLike) => Promise<void>;\n lstat: (path: PathLike, opts?: StatOptions) => Promise<Stats>;\n lutimes: (path: PathLike, atime: TimeLike, mtime: TimeLike) => Promise<void>;\n mkdir: (path: PathLike, options?: Mode | MakeDirectoryOptions | null) => Promise<string | undefined>;\n mkdtemp: (prefix: string, options?: ObjectEncodingOptions | BufferEncoding | null) => Promise<string>;\n rm: (path: PathLike, options?: RmOptions) => Promise<void>;\n rmdir: (path: PathLike, options?: RmDirOptions) => Promise<void>;\n };\n public readonly constants: Record<string, number>;\n\n constructor(log: ioBroker.Logger, ioBrokerDataDir: string) {\n this.ioBrokerDataDir = ioBrokerDataDir;\n this.log = log || {\n silly: (message: string): void => console.log(message),\n debug: (message: string): void => console.debug(message),\n info: (message: string): void => console.info(message),\n warn: (message: string): void => console.warn(message),\n error: (message: string): void => console.error(message),\n level: 'info',\n };\n\n this.promises = {\n access: async (path: PathLike, mode?: number): Promise<void> => {\n this.#checkProtected(path, true);\n return nodeFS.promises.access(path, mode);\n },\n cp: async (source: string | URL, destination: string | URL, opts?: CopyOptions): Promise<void> => {\n this.#checkProtected(source, false);\n this.#checkProtected(destination, false);\n return nodeFS.promises.cp(source, destination, opts);\n },\n readFile: async (\n path: PathLike | FileHandle,\n options:\n | ({\n encoding: BufferEncoding;\n flag?: OpenMode | undefined;\n } & Abortable)\n | BufferEncoding,\n ): Promise<string> => {\n this.#checkProtected(path, true);\n return nodeFS.promises.readFile(path, options); // async function readFile(path, options) {\n },\n readlink: async (path: PathLike, options: BufferEncodingOption): Promise<Buffer> => {\n this.#checkProtected(path, true);\n return nodeFS.promises.readlink(path, options); // async function readlink(path, options) {\n },\n symlink: async (target: PathLike, path: PathLike, type?: string | null): Promise<void> => {\n this.#checkProtected(target, true);\n this.#checkProtected(path, false);\n return nodeFS.promises.symlink(target, path, type); // async function symlink(target, path, type_) {\n },\n writeFile: async (\n file: PathLike | FileHandle,\n data:\n | string\n | NodeJS.ArrayBufferView\n | Iterable<string | NodeJS.ArrayBufferView>\n | AsyncIterable<string | NodeJS.ArrayBufferView>\n | Stream,\n options?:\n | (ObjectEncodingOptions & {\n mode?: Mode | undefined;\n flag?: OpenMode | undefined;\n /**\n * If all data is successfully written to the file, and `flush`\n * is `true`, `filehandle.sync()` is used to flush the data.\n *\n * @default false\n */\n flush?: boolean | undefined;\n } & Abortable)\n | BufferEncoding\n | null,\n ): Promise<void> => {\n this.#checkProtected(file, true);\n return nodeFS.promises.writeFile.call(this, file, data, options); // async function writeFile(path, data, options) {\n },\n unlink: async (path: PathLike): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.unlink.call(this, path); // async function unlink(path) {\n },\n appendFile: async (\n path: PathLike | FileHandle,\n data: string | Uint8Array,\n options?:\n | (ObjectEncodingOptions & FlagAndOpenMode & { flush?: boolean | undefined })\n | BufferEncoding\n | null,\n ): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.appendFile.call(this, path, data, options); // async function appendFile(path, data, options) {\n },\n chmod: async (path: PathLike, mode: Mode): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.chmod.call(this, path, mode); // async function chmod(path, mode) {\n },\n copyFile: async (src: PathLike, dest: PathLike, mode?: number): Promise<void> => {\n this.#checkProtected(src, false);\n this.#checkProtected(dest, false);\n return nodeFS.promises.copyFile.call(this, src, dest, mode); // async function copyFile(src, dest, mode) {\n },\n rename: async (oldPath: PathLike, newPath: PathLike): Promise<void> => {\n this.#checkProtected(oldPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.promises.rename.call(this, oldPath, newPath); // async function rename(oldPath, newPath) {\n },\n open: async (path: PathLike, flags?: string | number, mode?: Mode): Promise<FileHandle> => {\n this.#checkProtected(path, true);\n return nodeFS.promises.open.call(this, path, flags, mode); // async function open(path, flags, mode) {\n },\n truncate: async (path: PathLike, len?: number): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.truncate.call(this, path, len); // async function truncate(path, len = 0) {\n },\n stat: async (path: PathLike, opts?: StatOptions): Promise<Stats> => {\n this.#checkProtected(path, true);\n const result = await nodeFS.promises.stat.call(this, path, opts); // async function stat(path, options = { bigint: false }) {\n return result as Stats;\n },\n utimes: async (path: PathLike, atime: TimeLike, mtime: TimeLike): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.utimes.call(this, path, atime, mtime); // async function utimes(path, atime, mtime) {\n },\n readdir: async (\n path: PathLike,\n options?: ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n ): Promise<Dirent[]> => {\n this.#checkProtected(path, true);\n // @ts-expect-error fix later\n return nodeFS.promises.readdir.call(this, path, options || { encoding: null, withFileTypes: true }); // async function readdir(path, options) {\n },\n lchmod: async (path: PathLike, mode: Mode): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.lchmod.call(this, path, mode); // async function lchmod(path, mode) {\n },\n lchown: async (path: PathLike, uid: number, gid: number): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.lchown.call(this, path, uid, gid); // async function lchown(path, uid, gid) {\n },\n link: async (existingPath: PathLike, newPath: PathLike): Promise<void> => {\n this.#checkProtected(existingPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.promises.link.call(this, existingPath, newPath); // async function link(existingPath, newPath) {\n },\n lstat: async (path: PathLike, opts?: StatOptions): Promise<Stats> => {\n this.#checkProtected(path, true);\n const res = await nodeFS.promises.lstat.call(this, path, opts); // async function lstat(path, options = { bigint: false }) {\n return res as Stats;\n },\n lutimes: async (path: PathLike, atime: TimeLike, mtime: TimeLike): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.lutimes.call(this, path, atime, mtime); // async function lutimes(path, atime, mtime) {\n },\n mkdir: async (\n path: PathLike,\n options?: Mode | MakeDirectoryOptions | null,\n ): Promise<string | undefined> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.mkdir.call(this, path, options); // async function mkdir(path, options) {\n },\n mkdtemp: async (\n prefix: string,\n options?: ObjectEncodingOptions | BufferEncoding | null,\n ): Promise<string> => {\n this.#checkProtected(prefix, false);\n const tmp = await nodeFS.promises.mkdtemp.call(this, prefix, options); // async function mkdtemp(prefix, options) {\n return tmp.toString();\n },\n rm: async (path: PathLike, options?: RmOptions): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.rm.call(this, path, options); // async function rm(path, options) {\n },\n rmdir: async (path: PathLike, options?: RmDirOptions): Promise<void> => {\n this.#checkProtected(path, false);\n return nodeFS.promises.rmdir.call(this, path, options); // async function rmdir(path, options) {\n },\n };\n\n // Add missing constants\n this.constants = nodeFS.constants;\n\n // Add missing functions\n for (const m in nodeFS) {\n if (\n typeof (nodeFS as unknown as Record<string, any>)[m] === 'function' &&\n Object.hasOwn(nodeFS, m) &&\n !Object.hasOwn(Object.getPrototypeOf(this), 'appendFile')\n ) {\n // console.debug(`Missing function in ProtectFS: ${m} - adding from node:fs`);\n // @ts-expect-error Elsewise we must implement EVERY function in fs\n this[m] = nodeFS[m];\n }\n }\n\n for (const m in nodeFS.promises) {\n if (\n typeof (nodeFS.promises as unknown as Record<string, any>)[m] === 'function' &&\n Object.hasOwn(nodeFS.promises, m) &&\n !Object.hasOwn(this.promises, m)\n ) {\n // console.debug(`Missing function in ProtectFS: ${m} - adding from node:fs/promises`);\n // @ts-expect-error Elsewise we must implement EVERY function in fs\n this.promises[m] = nodeFS.promises[m];\n }\n }\n }\n\n #checkProtected(file: PathLike | FileHandle, readOnly: boolean): void {\n if ((file as FileHandle).fd) {\n return;\n }\n const filePath = normalize((file as PathLike).toString());\n\n // todo: protect against file://...\n if (filePath.endsWith(`-data${sep}objects.json`) || filePath.endsWith(`-data${sep}objects.jsonl`)) {\n this.log.error(`May not read ${(file as PathLike).toString()}`);\n throw new Error('Permission denied');\n }\n if (!readOnly && filePath.startsWith(join(this.ioBrokerDataDir, 'files'))) {\n this.log.error(`May not read ${(file as PathLike).toString()} - use writeFile instead`);\n throw new Error('Permission denied');\n }\n }\n\n access(path: PathLike, mode?: number | NoParamCallback, callback?: NoParamCallback): void {\n this.#checkProtected(path, true);\n if (typeof callback === 'function') {\n return nodeFS.access(path, mode as number | undefined, callback);\n }\n return nodeFS.access(path, mode as NoParamCallback);\n }\n\n accessSync(path: PathLike, mode?: number): void {\n this.#checkProtected(path, true);\n return nodeFS.accessSync(path, mode);\n }\n\n cp(\n source: string | URL,\n destination: string | URL,\n opts?: CopyOptions | ((err: NodeJS.ErrnoException | null) => void),\n callback?: (err: NodeJS.ErrnoException | null) => void,\n ): void {\n this.#checkProtected(source, false);\n this.#checkProtected(destination, false);\n if (callback) {\n return nodeFS.cp(source, destination, opts as CopyOptions, callback);\n }\n if (typeof opts === 'function') {\n return nodeFS.cp(source, destination, opts);\n }\n return nodeFS.cp(source, destination, opts as (err: NodeJS.ErrnoException | null) => void);\n }\n\n cpSync(source: string | URL, destination: string | URL, opts?: CopySyncOptions): void {\n this.#checkProtected(source, false);\n this.#checkProtected(destination, false);\n return nodeFS.cpSync.call(this, source, destination, opts);\n }\n\n readFile(\n path: PathOrFileDescriptor,\n options:\n | (ObjectEncodingOptions & {\n flag?: string | undefined;\n } & Abortable)\n | BufferEncoding\n | undefined\n | null\n | ((err: NodeJS.ErrnoException | null, data: string | NonSharedBuffer) => void),\n callback?: (err: NodeJS.ErrnoException | null, data: string | NonSharedBuffer) => void,\n ): void {\n if (typeof path !== 'number') {\n this.#checkProtected(path, true);\n }\n if (typeof callback === 'function') {\n return nodeFS.readFile.call(\n this,\n path,\n options as\n | (ObjectEncodingOptions & {\n flag?: string | undefined;\n } & Abortable)\n | BufferEncoding\n | undefined\n | null,\n // @ts-expect-error readFile can accept 3 arguments too\n callback,\n );\n }\n return nodeFS.readFile.call(\n this,\n path,\n options as (err: NodeJS.ErrnoException | null, data: string | NonSharedBuffer) => void,\n );\n }\n\n readFileSync(\n path: PathOrFileDescriptor,\n options?:\n | {\n encoding: BufferEncoding;\n flag?: string | undefined;\n }\n | BufferEncoding,\n ): string | Buffer {\n if (typeof path !== 'number') {\n this.#checkProtected(path, true);\n }\n return nodeFS.readFileSync.call(this, path, options);\n }\n\n readlink(\n path: PathLike,\n options: EncodingOption | ((err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void),\n callback?: (err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void,\n ): void {\n this.#checkProtected(path, true);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.readlink.call(this, path, options, callback); //\n }\n return nodeFS.readlink.call(\n this,\n path,\n options as (err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void,\n );\n }\n\n readlinkSync(path: PathLike, options?: EncodingOption): string | Buffer {\n this.#checkProtected(path, true);\n return nodeFS.readlinkSync.call(this, path, options);\n }\n\n symlink(\n target: PathLike,\n path: PathLike,\n type?: 'dir' | 'file' | 'junction' | null | NoParamCallback,\n callback?: NoParamCallback,\n ): void {\n this.#checkProtected(target, true);\n this.#checkProtected(path, false);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.symlink.call(this, target, path, type as 'dir' | 'file' | 'junction' | null, callback);\n }\n return nodeFS.symlink.call(this, target, path, type as NoParamCallback);\n }\n\n symlinkSync(target: PathLike, path: PathLike, type?: 'dir' | 'file' | 'junction' | null): void {\n this.#checkProtected(target, true);\n this.#checkProtected(path, false);\n return nodeFS.symlinkSync.call(this, target, path, type);\n }\n\n writeFile(\n file: PathLike | number,\n data: string | NodeJS.ArrayBufferView,\n options?: WriteFileOptions | NoParamCallback,\n callback?: NoParamCallback,\n ): void {\n if (typeof file !== 'number') {\n this.#checkProtected(file, false);\n }\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.writeFile.call(this, file, data, options, callback);\n }\n return nodeFS.writeFile.call(this, file, data, options as NoParamCallback);\n }\n\n writeFileSync(file: PathLike | number, data: string | NodeJS.ArrayBufferView, options?: WriteFileOptions): void {\n if (typeof file !== 'number') {\n this.#checkProtected(file, false);\n }\n return nodeFS.writeFileSync.call(this, file, data, options);\n }\n\n unlink(path: PathLike, callback?: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.unlink.call(this, path, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n unlinkSync(path: PathLike): void {\n this.#checkProtected(path, false);\n return nodeFS.unlinkSync.call(this, path);\n }\n\n appendFile(\n file: PathLike | number,\n data: string | Uint8Array,\n options?: WriteFileOptions | NoParamCallback,\n callback?: NoParamCallback,\n ): void {\n if (typeof file !== 'number') {\n this.#checkProtected(file, false);\n }\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.appendFile.call(this, file, data, options, callback);\n }\n return nodeFS.appendFile.call(this, file, data, options as NoParamCallback);\n }\n\n appendFileSync(file: PathLike | number, data: string | Uint8Array, options?: WriteFileOptions): void {\n if (typeof file !== 'number') {\n this.#checkProtected(file, false);\n }\n return nodeFS.appendFileSync.call(this, file, data, options);\n }\n\n chmod(path: PathLike, mode: Mode, callback?: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.chmod.call(this, path, mode, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n chmodSync(path: PathLike, mode: Mode): void {\n this.#checkProtected(path, false);\n return nodeFS.chmodSync.call(this, path, mode);\n }\n\n chown(path: PathLike, uid: number, gid: number, callback?: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.chown.call(this, path, uid, gid, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n chownSync(path: PathLike, uid: number, gid: number): void {\n this.#checkProtected(path, false);\n return nodeFS.chownSync.call(this, path, uid, gid);\n }\n\n copyFile(src: PathLike, dest: PathLike, mode: number | NoParamCallback, callback?: NoParamCallback): void {\n this.#checkProtected(src, true);\n this.#checkProtected(dest, false);\n // @ts-expect-error should work\n return nodeFS.copyFile.call(this, src, dest, mode, callback);\n }\n\n copyFileSync(src: PathLike, dest: PathLike, mode?: number): void {\n this.#checkProtected(src, true);\n this.#checkProtected(dest, false);\n return nodeFS.copyFileSync.call(this, src, dest, mode);\n }\n\n rename(oldPath: PathLike, newPath: PathLike, callback?: NoParamCallback): void {\n this.#checkProtected(oldPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.rename.call(this, oldPath, newPath, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n renameSync(oldPath: PathLike, newPath: PathLike): void {\n this.#checkProtected(oldPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.renameSync.call(this, oldPath, newPath);\n }\n\n open(path: PathLike, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void {\n this.#checkProtected(path, true);\n return nodeFS.open.call(this, path, callback);\n }\n\n openSync(path: PathLike, flags: OpenMode, mode?: Mode | null): number {\n this.#checkProtected(path, true);\n return nodeFS.openSync.call(this, path, flags, mode);\n }\n\n truncate(path: PathLike, callback?: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.truncate.call(this, path, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n truncateSync(path: PathLike): void {\n this.#checkProtected(path, false);\n return nodeFS.truncateSync.call(this, path);\n }\n\n exists(path: PathLike, callback: (exists: boolean) => void): void {\n this.#checkProtected(path, true);\n return nodeFS.exists.call(this, path, callback);\n }\n\n existsSync(path: PathLike): boolean {\n this.#checkProtected(path, true);\n return nodeFS.existsSync.call(this, path);\n }\n\n stat(\n path: PathLike,\n options: StatOptions | undefined | ((err: NodeJS.ErrnoException | null, stats: Stats) => void),\n callback?: (err: NodeJS.ErrnoException | null, stats: Stats) => void,\n ): void {\n this.#checkProtected(path, true);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.stat.call(this, path, options as StatOptions | undefined, callback);\n }\n // @ts-expect-error should work\n return nodeFS.stat.call(this, path, options as (err: NodeJS.ErrnoException | null, stats: Stats) => void);\n }\n\n statSync(path: PathLike, options?: StatOptions): Stats {\n this.#checkProtected(path, true);\n return nodeFS.statSync.call(this, path, options);\n }\n\n utimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback?: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.utimes.call(this, path, atime, mtime, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n utimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void {\n this.#checkProtected(path, false);\n return nodeFS.utimesSync.call(this, path, atime, mtime);\n }\n\n readdir(\n path: PathLike,\n options:\n | (ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n })\n | ((err: NodeJS.ErrnoException | null, files: Dirent<Buffer | string>[][]) => void),\n callback?: (err: NodeJS.ErrnoException | null, files: Dirent<Buffer | string>[]) => void,\n ): void {\n this.#checkProtected(path, true);\n if (typeof callback === 'function') {\n return nodeFS.readdir.call(\n this,\n path,\n options as ObjectEncodingOptions & {\n encoding: 'buffer';\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n callback,\n );\n }\n // @ts-expect-error should work\n return nodeFS.readdir.call(this, path, options as (err: NodeJS.ErrnoException | null, files: Dirent[]) => void);\n }\n\n readdirSync(\n path: PathLike,\n options?: ObjectEncodingOptions & {\n withFileTypes: true;\n recursive?: boolean | undefined;\n },\n ): Dirent<Buffer | string>[] {\n this.#checkProtected(path, true);\n // @ts-expect-error should work\n return nodeFS.readdirSync.call(this, path, options);\n }\n\n createReadStream(path: PathLike, options?: BufferEncoding): ReadStream {\n this.#checkProtected(path, true);\n return nodeFS.createReadStream.call(this, path, options);\n }\n\n createWriteStream(path: PathLike, options?: BufferEncoding): WriteStream {\n this.#checkProtected(path, false);\n return nodeFS.createWriteStream.call(this, path, options);\n }\n\n lchmod(path: PathLike, mode: Mode, callback?: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.lchmod.call(this, path, mode, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n lchmodSync(path: PathLike, mode: Mode): void {\n this.#checkProtected(path, false);\n return nodeFS.lchmodSync.call(this, path, mode);\n }\n\n lchown(path: PathLike, uid: number, gid: number, callback?: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.lchown.call(this, path, uid, gid, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n lchownSync(path: PathLike, uid: number, gid: number): void {\n this.#checkProtected(path, false);\n return nodeFS.lchownSync.call(this, path, uid, gid);\n }\n\n link(existingPath: PathLike, newPath: PathLike, callback?: NoParamCallback): void {\n this.#checkProtected(existingPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.link.call(this, existingPath, newPath, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n linkSync(existingPath: PathLike, newPath: PathLike): void {\n this.#checkProtected(existingPath, false);\n this.#checkProtected(newPath, false);\n return nodeFS.linkSync.call(this, existingPath, newPath);\n }\n\n lstat(\n path: PathLike,\n options: StatOptions | undefined | ((err: NodeJS.ErrnoException | null, stats: Stats) => void),\n callback?: (err: NodeJS.ErrnoException | null, stats: Stats) => void,\n ): void {\n this.#checkProtected(path, true);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.lstat.call(this, path, options as StatOptions | undefined, callback);\n }\n // @ts-expect-error should work\n return nodeFS.lstat.call(this, path, options as (err: NodeJS.ErrnoException | null, stats: Stats) => void);\n }\n\n lstatSync(path: PathLike, options?: StatOptions): Stats {\n this.#checkProtected(path, true);\n return nodeFS.lstatSync.call(this, path, options);\n }\n\n lutimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback?: NoParamCallback): void {\n this.#checkProtected(path, false);\n return nodeFS.lutimes.call(this, path, atime, mtime, callback || ((_err: NodeJS.ErrnoException | null) => {}));\n }\n\n lutimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void {\n this.#checkProtected(path, false);\n return nodeFS.lutimesSync.call(this, path, atime, mtime);\n }\n\n mkdir(\n path: PathLike,\n options:\n | Mode\n | (MakeDirectoryOptions & {\n recursive: true;\n })\n | null\n | undefined\n | ((err: NodeJS.ErrnoException | null, path?: string) => void),\n callback?: (err: NodeJS.ErrnoException | null, path?: string) => void,\n ): void {\n this.#checkProtected(path, false);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.mkdir.call(this, path, options as MakeDirectoryOptions & { recursive?: boolean }, callback);\n }\n return nodeFS.mkdir.call(this, path, options as (err: NodeJS.ErrnoException | null, path?: string) => void);\n }\n\n mkdirSync(\n path: PathLike,\n options?: MakeDirectoryOptions & {\n recursive: true;\n },\n ): string | undefined {\n this.#checkProtected(path, false);\n return nodeFS.mkdirSync.call(this, path, options);\n }\n\n mkdtemp(\n prefix: string,\n options: EncodingOption | ((err: NodeJS.ErrnoException | null, folder: string) => void),\n callback?: (err: NodeJS.ErrnoException | null, folder: string) => void,\n ): void {\n this.#checkProtected(prefix, false);\n if (typeof callback === 'function') {\n // @ts-expect-error should work\n return nodeFS.mkdtemp.call(this, prefix, options, callback);\n }\n return nodeFS.mkdtemp.call(\n this,\n prefix,\n options as (err: NodeJS.ErrnoException | null, folder: string) => void,\n );\n }\n\n mkdtempSync(prefix: string, options?: EncodingOption): string | Buffer {\n this.#checkProtected(prefix, false);\n return nodeFS.mkdtempSync.call(this, prefix, options);\n }\n\n rm(path: PathLike, options?: RmOptions | NoParamCallback, callback?: NoParamCallback): void {\n this.#checkProtected(path, false);\n if (typeof callback === 'function') {\n return nodeFS.rm.call(this, path, options as RmOptions, callback);\n }\n // @ts-expect-error should work\n return nodeFS.rm.call(this, path, options as NoParamCallback);\n }\n\n rmSync(path: PathLike, options?: RmOptions): void {\n this.#checkProtected(path, false);\n return nodeFS.rmSync.call(this, path, options);\n }\n\n rmdir(path: PathLike, options?: RmDirOptions | NoParamCallback, callback?: NoParamCallback): void {\n this.#checkProtected(path, false);\n if (typeof callback === 'function') {\n return nodeFS.rmdir.call(this, path, options as RmDirOptions, callback);\n }\n // @ts-expect-error should work\n return nodeFS.rmdir.call(this, path, options as NoParamCallback);\n }\n\n rmdirSync(path: PathLike, options?: RmDirOptions): void {\n this.#checkProtected(path, false);\n return nodeFS.rmdirSync.call(this, path, options);\n }\n\n watch(\n filename: PathLike,\n options?:\n | (WatchOptions & {\n encoding: 'buffer';\n })\n | 'buffer'\n | WatchListener<string>,\n listener?: WatchListener<string>,\n ): FSWatcher {\n this.#checkProtected(filename, true);\n if (typeof listener === 'function') {\n // @ts-expect-error should work\n return nodeFS.watch.call(this, filename, options as WatchOptions & { encoding: 'buffer' }, listener);\n }\n\n return nodeFS.watch.call(this, filename, options as WatchListener<string>);\n }\n\n watchFile(filename: PathLike, listener: StatsListener): StatWatcher {\n this.#checkProtected(filename, true);\n return nodeFS.watchFile.call(this, filename, listener);\n }\n\n unwatchFile(filename: PathLike, listener: StatsListener | BigIntStatsListener): void {\n this.#checkProtected(filename, true);\n return nodeFS.unwatchFile.call(this, filename, listener as BigIntStatsListener);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/lib/scheduler.ts"],"names":[],"mappings":";AAAA,oBAAoB;AACpB,cAAc;AACd,4BAA4B;AAC5B,EAAE;AACF,0BAA0B;AAC1B,wBAAwB;AACxB,EAAE;AACF,yBAAyB;AACzB,uBAAuB;AACvB,SAAS;AACT,gBAAgB;AAChB,oBAAoB;AACpB,mBAAmB;AACnB,oBAAoB;AACpB,qBAAqB;AACrB,oBAAoB;AACpB,sBAAsB;AACtB,EAAE;AACF,oBAAoB;AACpB,wBAAwB;AACxB,uBAAuB;AACvB,SAAS;AACT,eAAe;AACf,oBAAoB;AACpB,iBAAiB;AACjB,QAAQ;AACR,KAAK;;;AA+HL,MAAa,SAAS;IACD,IAAI,CAAsC;IAC1C,IAAI,CAAc;IAClB,OAAO,CAAU;IACjB,QAAQ,CAAS;IACjB,SAAS,CAAS;IAC3B,GAAG,CAMT;IACM,KAAK,GAA0B,IAAI,CAAC;IACpC,gBAAgB,CAA+B;IAC/C,oBAAoB,CAA+B;IAC1C,SAAS,CAA+B;IACjD,YAAY,CAAkC;IAEtD,YACI,GAMC,EACD,QAA4B,EAC5B,OAAgB,EAChB,QAAgB,EAChB,SAAiB;QAEjB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,QAAQ,IAAI,IAAI,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI;YACd,KAAK,EAAE,UAAU,IAAY;gBACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,EAAE,UAAU,IAAY;gBACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YACD,GAAG,EAAE,UAAU,IAAY;gBACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,EAAE,UAAU,IAAY;gBACxB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;YACD,KAAK,EAAE,UAAU,IAAY;gBACzB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;YACD,KAAK,EAAE,UAAU,IAAY;gBACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;SACJ,CAAC;QAEF,wBAAwB;QACxB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACxF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEhG,IAAI,CAAC,SAAS,GAAG;YACb,MAAM;YACN,MAAM;YACN,YAAY;YACZ,eAAe;YACf,OAAO;YACP,cAAc;YACd,cAAc;YACd,OAAO;YACP,UAAU;YACV,WAAW;YACX,SAAS;YACT,YAAY;YACZ,QAAQ;YACR,aAAa;SAChB,CAAC;QACF,IAAI,CAAC,YAAY,GAAG;YAChB,MAAM;YACN,MAAM;YACN,YAAY;YACZ,eAAe;YACf,OAAO;YACP,cAAc;YACd,cAAc;YACd,OAAO;YACP,UAAU;YACV,WAAW;YACX,SAAS;YACT,YAAY;YACZ,QAAQ;YACR,aAAa;SAChB,CAAC;IACN,CAAC;IAED,MAAM;QACF,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACvE,CAAC;IAED,WAAW;QACP,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAC5C,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1B,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,2EAA2E;YACjG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,GAAG,UAAU,CACnB,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAC3C,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAC7B,CAAC,CAAC,OAAO,EAAE,CACd,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACtB,CAAC;IACL,CAAC;IAED,UAAU;QACN,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,OAAO;YACH,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE;YAClB,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,UAAU,EAAE;YACpD,CAAC,EAAE,GAAG,CAAC,WAAW,EAAE;YACpB,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE;YACjB,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE;YAChB,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE;YACjB,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE;YACnB,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE;SACpB,CAAC;IACN,CAAC;IAED,cAAc,CAAC,aAAsB;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAElC,wDAAwD;QACxD,IAAI,aAAa,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,GAAG,aAAa,EAAE,CAAC;YAC7D,IAAI,CAAC,KAAK,GAAG,UAAU,CACnB,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAC3C,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAC/B,aAAa,CAChB,CAAC;YACF,OAAO;QACX,CAAC;QAED,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;gBACvD,SAAS;YACb,CAAC;YACD,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC7C,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5G,CAAC;QACL,CAAC;QAED,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,2EAA2E;QACjG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,UAAU,CACnB,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAC3C,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAC7B,CAAC,CAAC,OAAO,EAAE,CACd,CAAC;IACN,CAAC;IAED,SAAS,CAAC,EAAQ,EAAE,EAAQ;QACxB,IAAI,MAAc,CAAC;QACnB,MAAM,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC;QACpD,MAAM,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC5B,MAAM,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,aAAa,CAAC,OAAyB,EAAE,QAA6B;QAClE,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,IACI,QAAQ,CAAC,KAAK,CAAC,IAAI;gBACnB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC1C,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAC7C,CAAC;gBACC,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,yDAAyD;YACzD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC9B,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvE,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAClC,CAAC;gBACD,OAAO,KAAK,CAAC;YACjB,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9B,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtE,OAAO,KAAK,CAAC;gBACjB,CAAC;qBAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;oBAClC,mEAAmE;oBACnE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;oBACtF,IAAI,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;wBAC9B,OAAO,KAAK,CAAC;oBACjB,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC/B,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtE,OAAO,KAAK,CAAC;gBACjB,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;oBAC5B,oEAAoE;oBACpE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;oBAC1F,IAAI,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;wBAC/B,OAAO,KAAK,CAAC;oBACjB,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvF,OAAO,KAAK,CAAC;gBACjB,CAAC;gBACD,IACI,QAAQ,CAAC,MAAM,CAAC,QAAQ;oBACxB,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ;oBAC1C,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAC5B,CAAC;oBACC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;oBAClF,IAAI,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;wBAChC,OAAO,KAAK,CAAC;oBACjB,CAAC;gBACL,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtE,OAAO,KAAK,CAAC;gBACjB,CAAC;YACL,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC/B,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC;oBACrF,OAAO,KAAK,CAAC;gBACjB,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC;oBACrE,OAAO,KAAK,CAAC;gBACjB,CAAC;gBACD,IACI,QAAQ,CAAC,MAAM,CAAC,QAAQ;oBACxB,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ;oBACzC,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAC3B,CAAC;oBACC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;oBACnG,IAAI,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;wBAC/B,OAAO,KAAK,CAAC;oBACjB,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChB,IAAI,KAAa,CAAC;YAClB,IAAI,GAAW,CAAC;YAChB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,GAAG,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC5D,IAAI,CAAC,aAAa,EAAE,CAAC;YACzB,CAAC;YACD,IAAI,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/D,IAAI,cAAc,EAAE,CAAC;oBACjB,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC;oBAElC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;wBACpD,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC;oBACtC,CAAC;oBACD,MAAM,SAAS,GAAS,KAAK,CAAC,cAAc,CAAC,CAAC;oBAC9C,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC/D,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;oBAC/D,OAAO,KAAK,CAAC;gBACjB,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAChC,CAAC;YACD,IAAI,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3D,IAAI,YAAY,EAAE,CAAC;oBACf,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC;oBAClC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;wBAClD,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC;oBACtC,CAAC;oBACD,MAAM,OAAO,GAAS,KAAK,CAAC,YAAY,CAAC,CAAC;oBAC1C,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;gBACzD,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;oBAC7D,OAAO,KAAK,CAAC;gBACjB,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YAC5B,CAAC;YAED,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;YACnB,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;YAErB,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC1B,IAAI,OAAO,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;oBACjC,OAAO,KAAK,CAAC;gBACjB,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,IAAI,KAAK,IAAI,OAAO,CAAC,YAAY,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;oBACvE,OAAO,KAAK,CAAC;gBACjB,CAAC;gBACD,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;oBAC5B,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACxF,OAAO,KAAK,CAAC;oBACjB,CAAC;gBACL,CAAC;qBAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACrC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC;wBACjE,OAAO,KAAK,CAAC;oBACjB,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,WAAW,CAAC,IAAY;QACpB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAO,CAAC;QACZ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAClG,CAAC;aAAM,CAAC;YACJ,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAClG,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;IACnE,CAAC;IAED,MAAM,CAAC,OAAyB,EAAE,IAAqD;QACnF,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,IAAI,IAAI,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;oBACrB,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,IAAI,IAAI,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC;oBACvB,IAAI,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;wBACrB,OAAO,IAAI,CAAC;oBAChB,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,OAAyB,EAAE,IAAyC;QACxE,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,GAAG,CAAC,QAAgC,EAAE,UAAkB,EAAE,EAAwB;QAC9E,IAAI,SAAwB,CAAC;QAC7B,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACD,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACL,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;gBACrD,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,SAAS,GAAG,QAAQ,CAAC;QACzB,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACrD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAC3E,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,GAAG,GAAwB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACvE,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;QAC5B,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;QACZ,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;QAEZ,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACxB,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChE,IAAI,cAAc,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC;YACpC,CAAC;iBAAM,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC9C,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;oBACX,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1E,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;gBAChE,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;YACtB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5D,IAAI,YAAY,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC3B,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;YAChC,CAAC;iBAAM,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC5C,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;oBACX,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxE,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;gBAC9D,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACX,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACpC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YACvB,CAAC;iBAAM,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACzC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACzB,CAAC;QACL,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACxB,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,SAAS,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACvB,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBACrB,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxD,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;gBAChD,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,IAAI,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC3F,6BAA6B;gBAC7B,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACvG,CAAC;iBAAM,IAAI,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBAClF,MAAM,QAAQ,GAAS,GAAG,CAAC,KAAK,CAAC,IAAI;oBACjC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oBACrE,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACtB,0FAA0F;gBAC1F,6BAA6B;gBAC7B,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC5C,CAAC;iBAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtG,0BAA0B;gBAC1B,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7F,CAAC;iBAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACpG,0BAA0B;gBAC1B,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7F,CAAC;QACL,CAAC;QACD,IACI,GAAG,CAAC,MAAM;YACV,CAAC,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;gBACzD,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC9D,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChE,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACnE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EACrC,CAAC;YACC,IAAI,CAAC,GAAG,CAAC,IAAI,CACT,iGAAiG,CACpG,CAAC;YACF,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC;gBACD,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACxD,CAAC;YAAC,MAAM,CAAC;gBACL,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChF,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC/E,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzE,gCAAgC;YAChC,IAAI,CAAC;gBACD,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAa,CAAC;YACxE,CAAC;YAAC,MAAM,CAAC;gBACL,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnF,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACD,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAa,CAAC;YACtE,CAAC;YAAC,MAAM,CAAC;gBACL,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACjF,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,CAAC,EAAyB;QAC5B,IACI,OAAO,EAAE,KAAK,QAAQ;YACtB,EAAE,CAAC,IAAI,KAAK,UAAU;YACtB,OAAO,EAAE,CAAC,EAAE,KAAK,QAAQ;YACzB,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAC/B,CAAC;YACC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBACjD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;gBACtD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrB,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO;QACH,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACrC,EAAE,EAAE,YAAY,EAAE,EAAE;YACpB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ;YAChC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU;SACvC,CAAC,CAAC,CAAC;IACR,CAAC;IAED,GAAG,CAAC,EAAyB;QACzB,IACI,EAAE;YACF,OAAO,EAAE,KAAK,QAAQ;YACtB,EAAE,CAAC,IAAI,KAAK,UAAU;YACtB,OAAO,EAAE,CAAC,EAAE,KAAK,QAAQ;YACzB,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAC/B,CAAC;YACC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,aAAa;QACjB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACxF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACpG,CAAC;IAEO,aAAa,CAAC,GAAW;QAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAI,IAAI,CAAC,YAAyB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAuB,CAAC,CAAC;YAC5F,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;gBACX,OAAQ,IAAI,CAAC,SAAsB,CAAC,GAAG,CAAmB,CAAC;YAC/D,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AA9jBD,8BA8jBC","sourcesContent":["// const DEFAULT = {\n// time: {\n// exactTime: false,\n//\n// start: '00:00',\n// end: '23:59',\n//\n// mode: 'hours',\n// interval: 1,\n// },\n// period: {\n// once: '',\n// days: 1,\n// dows: '',\n// dates: '',\n// weeks: 0,\n// months: '',\n//\n// years: 0,\n// yearMonth: 0,\n// yearDate: 0,\n// },\n// valid: {\n// from: '',\n// to: ''\n// }\n// };\n\nimport type {\n GetMoonIlluminationResult,\n GetMoonPositionResult,\n GetMoonTimes,\n GetSunPositionResult,\n GetTimesResult,\n} from 'suncalc';\n\ninterface SunCalc {\n getTimes: (date: Date, latitude: number, longitude: number, height?: number) => GetTimesResult;\n addTime: (angleInDegrees: number, morningName: string, eveningName: string) => void;\n getPosition: (timeAndDate: Date, latitude: number, longitude: number) => GetSunPositionResult;\n getMoonPosition: (timeAndDate: Date, latitude: number, longitude: number) => GetMoonPositionResult;\n getMoonIllumination: (timeAndDate: Date) => GetMoonIlluminationResult;\n getMoonTimes: (date: Date, latitude: number, longitude: number, inUTC?: boolean) => GetMoonTimes;\n}\n\nexport type AstroEventName =\n | 'dawn'\n | 'dusk'\n | 'goldenHour'\n | 'goldenHourEnd'\n | 'nadir'\n | 'nauticalDawn'\n | 'nauticalDusk'\n | 'night'\n | 'nightEnd'\n | 'solarNoon'\n | 'sunrise'\n | 'sunriseEnd'\n | 'sunset'\n | 'sunsetStart';\n\ntype AstroEventNameLow =\n | 'dawn'\n | 'dusk'\n | 'goldenhour'\n | 'goldenhourend'\n | 'nadir'\n | 'nauticaldawn'\n | 'nauticaldusk'\n | 'night'\n | 'nightend'\n | 'solarnoon'\n | 'sunrise'\n | 'sunriseend'\n | 'sunset'\n | 'sunsetstart';\n\ntype SchedulerContext = {\n now: number;\n minutesOfDay: number;\n y: number;\n M: number;\n d: number;\n h: number;\n m: number;\n dow: number;\n};\n\nexport type SchedulerRule = {\n time: {\n start?: string;\n end?: string;\n mode?: 'minutes' | 'hours';\n interval?: number;\n exactTime?: boolean;\n };\n period: {\n once?: string;\n\n days?: number;\n dows?: string;\n dates?: string;\n weeks?: number;\n months?: string;\n\n years?: number;\n yearMonth?: number;\n yearDate?: number;\n };\n valid?: {\n from?: string;\n to?: string;\n };\n};\n\ntype SchedulerRuleParsed = {\n id: string;\n original: string;\n period: {\n fromDate?: Date;\n months?: number | number[];\n days?: number;\n dows?: number[];\n weeks?: number;\n years?: number;\n yearMonth?: number;\n yearDate?: number;\n dates?: number[];\n once?: { y: number; M: number; d: number };\n };\n time?: {\n exactTime: boolean;\n start: number | AstroEventName;\n end: number | AstroEventName;\n mode: 60 | 3600;\n interval: number;\n };\n valid?: {\n from?: { y: number; M: number; d: number };\n to?: { y: number; M: number; d: number };\n fromDate?: number | Date;\n };\n scriptName: string;\n cb: (id: string) => void;\n};\n\nexport type ScheduleName = {\n id: `schedule_${string}`;\n type: 'schedule';\n schedule: string;\n scriptName: string;\n};\n\nexport class Scheduler {\n private readonly list: Record<string, SchedulerRuleParsed>;\n private readonly Date: typeof Date;\n private readonly suncalc: SunCalc;\n private readonly latitude: number;\n private readonly longitude: number;\n private log: {\n debug: (text: string) => void;\n info: (text: string) => void;\n warn: (text: string) => void;\n error: (text: string) => void;\n silly: (text: string) => void;\n };\n private timer: NodeJS.Timeout | null = null;\n private todaysAstroTimes: Record<AstroEventName, Date>;\n private yesterdaysAstroTimes: Record<AstroEventName, Date>;\n private readonly astroList: AstroEventName[] | undefined;\n private astroListLow: AstroEventNameLow[] | undefined;\n\n constructor(\n log: {\n debug: (text: string) => void;\n info: (text: string) => void;\n warn: (text: string) => void;\n error: (text: string) => void;\n silly: (text: string) => void;\n },\n DateTest: typeof Date | null,\n suncalc: SunCalc,\n latitude: number,\n longitude: number,\n ) {\n this.list = {};\n this.Date = DateTest || Date;\n this.suncalc = suncalc;\n this.latitude = latitude;\n this.longitude = longitude;\n this.log = log || {\n debug: function (text: string): void {\n console.log(text);\n },\n info: function (text: string): void {\n console.log(text);\n },\n log: function (text: string): void {\n console.log(text);\n },\n warn: function (text: string): void {\n console.warn(text);\n },\n error: function (text: string): void {\n console.error(text);\n },\n silly: function (text: string): void {\n console.log(text);\n },\n };\n\n // this._setAstroVars();\n const todayNoon = new this.Date();\n const yesterdayNoon = new this.Date();\n todayNoon.setHours(12, 0, 0, 0);\n yesterdayNoon.setHours(-12, 0, 0, 0);\n this.todaysAstroTimes = this.suncalc.getTimes(todayNoon, this.latitude, this.longitude);\n this.yesterdaysAstroTimes = this.suncalc.getTimes(yesterdayNoon, this.latitude, this.longitude);\n\n this.astroList = [\n 'dawn',\n 'dusk',\n 'goldenHour',\n 'goldenHourEnd',\n 'nadir',\n 'nauticalDawn',\n 'nauticalDusk',\n 'night',\n 'nightEnd',\n 'solarNoon',\n 'sunrise',\n 'sunriseEnd',\n 'sunset',\n 'sunsetStart',\n ];\n this.astroListLow = [\n 'dawn',\n 'dusk',\n 'goldenhour',\n 'goldenhourend',\n 'nadir',\n 'nauticaldawn',\n 'nauticaldusk',\n 'night',\n 'nightend',\n 'solarnoon',\n 'sunrise',\n 'sunriseend',\n 'sunset',\n 'sunsetstart',\n ];\n }\n\n _getId(): string {\n return `${Math.round(Math.random() * 1000000)}.${this.Date.now()}`;\n }\n\n recalculate(): void {\n const count = Object.keys(this.list).length;\n if (count && !this.timer) {\n const d = new this.Date();\n d.setMilliseconds(2); // 2 ms to be sure that the next second is reached, they do not hurt anyone\n d.setSeconds(0);\n d.setMinutes(d.getMinutes() + 1);\n this.timer = setTimeout(\n notBefore => this.checkSchedules(notBefore),\n d.getTime() - this.Date.now(),\n d.getTime(),\n );\n } else if (!count && this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n getContext(): SchedulerContext {\n const now = new this.Date();\n return {\n now: now.getTime(),\n minutesOfDay: now.getHours() * 60 + now.getMinutes(),\n y: now.getFullYear(),\n M: now.getMonth(),\n d: now.getDate(),\n h: now.getHours(),\n m: now.getMinutes(),\n dow: now.getDay(),\n };\n }\n\n checkSchedules(notBeforeTime?: number): void {\n const context = this.getContext();\n\n // Work around for not those precise RTCs in some system\n if (notBeforeTime !== undefined && context.now < notBeforeTime) {\n this.timer = setTimeout(\n notBefore => this.checkSchedules(notBefore),\n notBeforeTime - this.Date.now(),\n notBeforeTime,\n );\n return;\n }\n\n for (const id in this.list) {\n if (!Object.prototype.hasOwnProperty.call(this.list, id)) {\n continue;\n }\n if (this.checkSchedule(context, this.list[id])) {\n setImmediate(id => this.list[id] && typeof this.list[id].cb === 'function' && this.list[id].cb(id), id);\n }\n }\n\n const d = new this.Date();\n d.setMilliseconds(2); // 2 ms to be sure that the next second is reached, they do not hurt anyone\n d.setSeconds(0);\n d.setMinutes(d.getMinutes() + 1);\n this.timer = setTimeout(\n notBefore => this.checkSchedules(notBefore),\n d.getTime() - this.Date.now(),\n d.getTime(),\n );\n }\n\n monthDiff(d1: Date, d2: Date): number {\n let months: number;\n months = (d2.getFullYear() - d1.getFullYear()) * 12;\n months -= d1.getMonth() + 1;\n months += d2.getMonth();\n return months <= 0 ? 0 : months;\n }\n\n checkSchedule(context: SchedulerContext, schedule: SchedulerRuleParsed): boolean {\n if (schedule.valid) {\n if (\n schedule.valid.from &&\n !this.isPast(context, schedule.valid.from) &&\n !this.isToday(context, schedule.valid.from)\n ) {\n return false;\n }\n // \"to\" this.Date is in the past => delete it from a list\n if (schedule.valid.to && this.isPast(context, schedule.valid.to)) {\n delete this.list[schedule.id];\n return false;\n }\n }\n if (schedule.period) {\n if (schedule.period.once && !this.isToday(context, schedule.period.once)) {\n if (this.isPast(context, schedule.period.once)) {\n delete this.list[schedule.id];\n }\n return false;\n } else if (schedule.period.days) {\n if (schedule.period.dows && !schedule.period.dows.includes(context.dow)) {\n return false;\n } else if (schedule.period.days > 1) {\n // @ts-expect-error period of days cannot be without valid fromDate\n const diff = Math.round((context.now - schedule.valid.fromDate) / (60000 * 24) + 0.5);\n if (diff % schedule.period.days) {\n return false;\n }\n }\n } else if (schedule.period.weeks) {\n if (schedule.period.dows && !schedule.period.dows.includes(context.dow)) {\n return false;\n }\n if (schedule.period.weeks > 1) {\n // @ts-expect-error period of weeks cannot be without valid fromDate\n const diff = Math.round((context.now - schedule.valid.fromDate) / (60000 * 24 * 7) + 0.5);\n if (diff % schedule.period.weeks) {\n return false;\n }\n }\n } else if (schedule.period.months) {\n if (Array.isArray(schedule.period.months) && !schedule.period.months.includes(context.M)) {\n return false;\n }\n if (\n schedule.period.fromDate &&\n typeof schedule.period.months === 'number' &&\n schedule.period.months > 1\n ) {\n const diff = this.monthDiff(schedule.period.fromDate, new this.Date(context.now));\n if (diff % schedule.period.months) {\n return false;\n }\n }\n if (schedule.period.dates && !schedule.period.dates.includes(context.d)) {\n return false;\n }\n } else if (schedule.period.years) {\n if (schedule.period.yearMonth !== undefined && schedule.period.yearMonth !== context.M) {\n return false;\n }\n if (schedule.period.yearDate && schedule.period.yearDate !== context.d) {\n return false;\n }\n if (\n schedule.period.fromDate &&\n typeof schedule.period.years === 'number' &&\n schedule.period.years > 1\n ) {\n const diff = Math.floor(this.monthDiff(schedule.period.fromDate, new this.Date(context.now)) / 12);\n if (diff % schedule.period.years) {\n return false;\n }\n }\n }\n }\n\n if (schedule.time) {\n let start: number;\n let end: number;\n const now = new this.Date(context.now);\n if (now.getDate() !== this.todaysAstroTimes.sunrise.getDate()) {\n this._setAstroVars();\n }\n if (typeof schedule.time.start === 'string') {\n const astroNameStart = this._getAstroName(schedule.time.start);\n if (astroNameStart) {\n let times = this.todaysAstroTimes;\n\n if (times[astroNameStart].getDate() !== now.getDate()) {\n times = this.yesterdaysAstroTimes;\n }\n const startDate: Date = times[astroNameStart];\n start = startDate.getHours() * 60 + startDate.getMinutes();\n } else {\n this.log.error(`unknown astro event \"${schedule.time.start}\"`);\n return false;\n }\n } else {\n start = schedule.time.start;\n }\n if (typeof schedule.time.end === 'string') {\n const astroNameEnd = this._getAstroName(schedule.time.end);\n if (astroNameEnd) {\n let times = this.todaysAstroTimes;\n if (times[astroNameEnd].getDate() !== now.getDate()) {\n times = this.yesterdaysAstroTimes;\n }\n const endDate: Date = times[astroNameEnd];\n end = endDate.getHours() * 60 + endDate.getMinutes();\n } else {\n this.log.error(`unknown astro event \"${schedule.time.end}\"`);\n return false;\n }\n } else {\n end = schedule.time.end;\n }\n\n start = start || 0;\n end = end || 60 * 24;\n\n if (schedule.time.exactTime) {\n if (context.minutesOfDay !== start) {\n return false;\n }\n } else {\n if (start >= context.minutesOfDay || (end && end < context.minutesOfDay)) {\n return false;\n }\n if (schedule.time.mode === 60) {\n if (schedule.time.interval > 1 && (context.minutesOfDay - start) % schedule.time.interval) {\n return false;\n }\n } else if (schedule.time.mode === 3600) {\n if ((context.minutesOfDay - start) % (schedule.time.interval * 60)) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n string2date(date: string): { y: number; M: number; d: number } {\n let parts = date.split('.');\n let d: Date;\n if (parts.length !== 3) {\n parts = date.split('-');\n d = new this.Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10));\n } else {\n d = new this.Date(parseInt(parts[2], 10), parseInt(parts[1], 10) - 1, parseInt(parts[0], 10));\n }\n return { y: d.getFullYear(), M: d.getMonth(), d: d.getDate() };\n }\n\n isPast(context: SchedulerContext, date: { y: number; M: number; d: number } | undefined): boolean {\n if (date) {\n if (date.y < context.y) {\n return true;\n }\n if (date.y === context.y) {\n if (date.M < context.M) {\n return true;\n }\n if (date.M === context.M) {\n if (date.d < context.d) {\n return true;\n }\n }\n }\n }\n return false;\n }\n\n isToday(context: SchedulerContext, date: { y: number; M: number; d: number }): boolean {\n return date && date.y === context.y && date.M === context.M && date.d === context.d;\n }\n\n add(schedule: SchedulerRule | string, scriptName: string, cb: (id: string) => void): string | null {\n let oSchedule: SchedulerRule;\n if (typeof schedule === 'string') {\n try {\n oSchedule = JSON.parse(schedule);\n } catch {\n this.log.error(`Cannot parse schedule: ${schedule}`);\n return null;\n }\n } else {\n oSchedule = schedule;\n }\n\n const id = this._getId();\n if (typeof oSchedule !== 'object' || !oSchedule.period) {\n this.log.error(`Invalid schedule structure: ${JSON.stringify(oSchedule)}`);\n return null;\n }\n const context = this.getContext();\n const sch: SchedulerRuleParsed = JSON.parse(JSON.stringify(oSchedule));\n sch.scriptName = scriptName;\n sch.original = JSON.stringify(oSchedule);\n sch.id = id;\n sch.cb = cb;\n\n if (oSchedule.time?.start) {\n const astroNameStart = this._getAstroName(oSchedule.time.start);\n if (astroNameStart && sch.time) {\n sch.time.start = astroNameStart;\n } else if (oSchedule.time.start.includes(':')) {\n const parts = oSchedule.time.start.split(':');\n if (sch.time) {\n sch.time.start = parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10);\n }\n } else {\n this.log.error(`unknown astro event \"${oSchedule.time.start}\"`);\n return null;\n }\n }\n\n if (oSchedule.time?.end) {\n const astroNameEnd = this._getAstroName(oSchedule.time.end);\n if (astroNameEnd && sch.time) {\n sch.time.end = astroNameEnd;\n } else if (oSchedule.time.end.includes(':')) {\n const parts = oSchedule.time.end.split(':');\n if (sch.time) {\n sch.time.end = parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10);\n }\n } else {\n this.log.error(`unknown astro event \"${oSchedule.time.end}\"`);\n return null;\n }\n }\n\n if (sch.time) {\n if (oSchedule.time.mode === 'minutes') {\n sch.time.mode = 60;\n } else if (oSchedule.time.mode === 'hours') {\n sch.time.mode = 3600;\n }\n }\n\n if (oSchedule.period.once) {\n sch.period.once = this.string2date(oSchedule.period.once);\n }\n\n if (oSchedule.valid && sch.valid) {\n if (oSchedule.valid.from) {\n sch.valid.from = this.string2date(oSchedule.valid.from);\n }\n if (oSchedule.valid.to) {\n sch.valid.to = this.string2date(oSchedule.valid.to);\n }\n\n if (this.isPast(context, sch.valid.to)) {\n this.log.warn('End of schedule is in the past');\n return null;\n }\n\n if (typeof oSchedule.period.days === 'number' && oSchedule.period.days > 1 && sch.valid.from) {\n // fromDate must be unix time\n sch.valid.fromDate = new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d).getTime();\n } else if (typeof oSchedule.period.weeks === 'number' && oSchedule.period.weeks > 1) {\n const fromDate: Date = sch.valid.from\n ? new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d)\n : new this.Date();\n //sch.valid.fromDate.setDate(-sch.valid.fromDate.getDate() - sch.valid.fromDate.getDay());\n // fromDate must be unix time\n sch.valid.fromDate = fromDate.getTime();\n } else if (sch.valid.from && typeof oSchedule.period.months === 'number' && oSchedule.period.months > 1) {\n // fromDate must be object\n sch.valid.fromDate = new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d);\n } else if (sch.valid.from && typeof oSchedule.period.years === 'number' && oSchedule.period.years > 1) {\n // fromDate must be object\n sch.valid.fromDate = new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d);\n }\n }\n if (\n sch.period &&\n ((typeof sch.period.days === 'number' && sch.period.days > 1) ||\n (typeof sch.period.weeks === 'number' && sch.period.weeks > 1) ||\n (typeof sch.period.months === 'number' && sch.period.months > 1) ||\n (typeof sch.period.years === 'number' && sch.period.years > 1)) &&\n (!sch.valid || !sch.valid.fromDate)\n ) {\n this.log.warn(\n 'Invalid Schedule definition: Period day/weeks/months/years only allowed with a valid.from date!',\n );\n return null;\n }\n\n if (oSchedule.period.dows) {\n try {\n sch.period.dows = JSON.parse(oSchedule.period.dows);\n } catch {\n this.log.error(`Cannot parse day of weeks: ${JSON.stringify(sch.period.dows)}`);\n return null;\n }\n if (!Array.isArray(sch.period.dows)) {\n this.log.error(`day of weeks is no array: ${JSON.stringify(sch.period.dows)}`);\n return null;\n }\n }\n\n if (oSchedule.period.months && typeof oSchedule.period.months !== 'number') {\n // can be number or array-string\n try {\n sch.period.months = JSON.parse(oSchedule.period.months) as number[];\n } catch {\n this.log.error(`Cannot parse day of months: ${JSON.stringify(sch.period.months)}`);\n return null;\n }\n sch.period.months = sch.period.months.map(m => m - 1);\n }\n\n if (oSchedule.period.dates) {\n try {\n sch.period.dates = JSON.parse(oSchedule.period.dates) as number[];\n } catch {\n this.log.error(`Cannot parse day of dates: ${JSON.stringify(sch.period.dates)}`);\n return null;\n }\n }\n if (oSchedule.period.yearMonth) {\n sch.period.yearMonth = oSchedule.period.yearMonth - 1;\n }\n this.list[id] = sch;\n this.recalculate();\n return id;\n }\n\n remove(id: string | ScheduleName): boolean {\n if (\n typeof id === 'object' &&\n id.type === 'schedule' &&\n typeof id.id === 'string' &&\n id.id.startsWith('schedule_')\n ) {\n if (this.list[id.id.substring('schedule_'.length)]) {\n delete this.list[id.id.substring('schedule_'.length)];\n this.recalculate();\n return true;\n }\n return false;\n }\n if (typeof id === 'string' && this.list[id]) {\n delete this.list[id];\n this.recalculate();\n return true;\n }\n return false;\n }\n\n getList(): ScheduleName[] {\n return Object.keys(this.list).map(id => ({\n id: `schedule_${id}`,\n type: 'schedule',\n schedule: this.list[id].original,\n scriptName: this.list[id].scriptName,\n }));\n }\n\n get(id: string | ScheduleName): SchedulerRuleParsed | null {\n if (\n id &&\n typeof id === 'object' &&\n id.type === 'schedule' &&\n typeof id.id === 'string' &&\n id.id.startsWith('schedule_')\n ) {\n return this.list[id.id.substring('schedule_'.length)];\n }\n if (typeof id === 'string') {\n return this.list[id];\n }\n return null;\n }\n\n private _setAstroVars(): void {\n const todayNoon = new this.Date();\n const yesterdayNoon = new this.Date();\n todayNoon.setHours(12, 0, 0, 0);\n yesterdayNoon.setHours(-12, 0, 0, 0);\n this.todaysAstroTimes = this.suncalc.getTimes(todayNoon, this.latitude, this.longitude);\n this.yesterdaysAstroTimes = this.suncalc.getTimes(yesterdayNoon, this.latitude, this.longitude);\n }\n\n private _getAstroName(evt: string): AstroEventName | null {\n if (typeof evt === 'string') {\n const pos = (this.astroListLow as string[]).indexOf(evt.toLowerCase() as AstroEventNameLow);\n if (pos > -1) {\n return (this.astroList as string[])[pos] as AstroEventName;\n }\n }\n return null;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/lib/scheduler.ts"],"names":[],"mappings":"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","sourcesContent":["// const DEFAULT = {\n// time: {\n// exactTime: false,\n//\n// start: '00:00',\n// end: '23:59',\n//\n// mode: 'hours',\n// interval: 1,\n// },\n// period: {\n// once: '',\n// days: 1,\n// dows: '',\n// dates: '',\n// weeks: 0,\n// months: '',\n//\n// years: 0,\n// yearMonth: 0,\n// yearDate: 0,\n// },\n// valid: {\n// from: '',\n// to: ''\n// }\n// };\n\nimport type {\n GetMoonIlluminationResult,\n GetMoonPositionResult,\n GetMoonTimes,\n GetSunPositionResult,\n GetTimesResult,\n} from 'suncalc';\n\ninterface SunCalc {\n getTimes: (date: Date, latitude: number, longitude: number, height?: number) => GetTimesResult;\n addTime: (angleInDegrees: number, morningName: string, eveningName: string) => void;\n getPosition: (timeAndDate: Date, latitude: number, longitude: number) => GetSunPositionResult;\n getMoonPosition: (timeAndDate: Date, latitude: number, longitude: number) => GetMoonPositionResult;\n getMoonIllumination: (timeAndDate: Date) => GetMoonIlluminationResult;\n getMoonTimes: (date: Date, latitude: number, longitude: number, inUTC?: boolean) => GetMoonTimes;\n}\n\nexport type AstroEventName =\n | 'dawn'\n | 'dusk'\n | 'goldenHour'\n | 'goldenHourEnd'\n | 'nadir'\n | 'nauticalDawn'\n | 'nauticalDusk'\n | 'night'\n | 'nightEnd'\n | 'solarNoon'\n | 'sunrise'\n | 'sunriseEnd'\n | 'sunset'\n | 'sunsetStart';\n\ntype AstroEventNameLow =\n | 'dawn'\n | 'dusk'\n | 'goldenhour'\n | 'goldenhourend'\n | 'nadir'\n | 'nauticaldawn'\n | 'nauticaldusk'\n | 'night'\n | 'nightend'\n | 'solarnoon'\n | 'sunrise'\n | 'sunriseend'\n | 'sunset'\n | 'sunsetstart';\n\ntype SchedulerContext = {\n now: number;\n minutesOfDay: number;\n y: number;\n M: number;\n d: number;\n h: number;\n m: number;\n dow: number;\n};\n\nexport type SchedulerRule = {\n time: {\n start?: string;\n end?: string;\n mode?: 'minutes' | 'hours';\n interval?: number;\n exactTime?: boolean;\n };\n period: {\n once?: string;\n\n days?: number;\n dows?: string;\n dates?: string;\n weeks?: number;\n months?: string;\n\n years?: number;\n yearMonth?: number;\n yearDate?: number;\n };\n valid?: {\n from?: string;\n to?: string;\n };\n};\n\ntype SchedulerRuleParsed = {\n id: string;\n original: string;\n period: {\n fromDate?: Date;\n months?: number | number[];\n days?: number;\n dows?: number[];\n weeks?: number;\n years?: number;\n yearMonth?: number;\n yearDate?: number;\n dates?: number[];\n once?: { y: number; M: number; d: number };\n };\n time?: {\n exactTime: boolean;\n start: number | AstroEventName;\n end: number | AstroEventName;\n mode: 60 | 3600;\n interval: number;\n };\n valid?: {\n from?: { y: number; M: number; d: number };\n to?: { y: number; M: number; d: number };\n fromDate?: number | Date;\n };\n scriptName: string;\n cb: (id: string) => void;\n};\n\nexport type ScheduleName = {\n id: `schedule_${string}`;\n type: 'schedule';\n schedule: string;\n scriptName: string;\n};\n\nexport class Scheduler {\n private readonly list: Record<string, SchedulerRuleParsed>;\n private readonly Date: typeof Date;\n private readonly suncalc: SunCalc;\n private readonly latitude: number;\n private readonly longitude: number;\n private log: {\n debug: (text: string) => void;\n info: (text: string) => void;\n warn: (text: string) => void;\n error: (text: string) => void;\n silly: (text: string) => void;\n };\n private timer: NodeJS.Timeout | null = null;\n private todaysAstroTimes: Record<AstroEventName, Date>;\n private yesterdaysAstroTimes: Record<AstroEventName, Date>;\n private readonly astroList: AstroEventName[] | undefined;\n private astroListLow: AstroEventNameLow[] | undefined;\n\n constructor(\n log: {\n debug: (text: string) => void;\n info: (text: string) => void;\n warn: (text: string) => void;\n error: (text: string) => void;\n silly: (text: string) => void;\n },\n DateTest: typeof Date | null,\n suncalc: SunCalc,\n latitude: number,\n longitude: number,\n ) {\n this.list = {};\n this.Date = DateTest || Date;\n this.suncalc = suncalc;\n this.latitude = latitude;\n this.longitude = longitude;\n this.log = log || {\n debug: function (text: string): void {\n console.log(text);\n },\n info: function (text: string): void {\n console.log(text);\n },\n warn: function (text: string): void {\n console.warn(text);\n },\n error: function (text: string): void {\n console.error(text);\n },\n silly: function (text: string): void {\n console.log(text);\n },\n };\n\n // this._setAstroVars();\n const todayNoon = new this.Date();\n const yesterdayNoon = new this.Date();\n todayNoon.setHours(12, 0, 0, 0);\n yesterdayNoon.setHours(-12, 0, 0, 0);\n this.todaysAstroTimes = this.suncalc.getTimes(todayNoon, this.latitude, this.longitude);\n this.yesterdaysAstroTimes = this.suncalc.getTimes(yesterdayNoon, this.latitude, this.longitude);\n\n this.astroList = [\n 'dawn',\n 'dusk',\n 'goldenHour',\n 'goldenHourEnd',\n 'nadir',\n 'nauticalDawn',\n 'nauticalDusk',\n 'night',\n 'nightEnd',\n 'solarNoon',\n 'sunrise',\n 'sunriseEnd',\n 'sunset',\n 'sunsetStart',\n ];\n this.astroListLow = [\n 'dawn',\n 'dusk',\n 'goldenhour',\n 'goldenhourend',\n 'nadir',\n 'nauticaldawn',\n 'nauticaldusk',\n 'night',\n 'nightend',\n 'solarnoon',\n 'sunrise',\n 'sunriseend',\n 'sunset',\n 'sunsetstart',\n ];\n }\n\n _getId(): string {\n return `${Math.round(Math.random() * 1000000)}.${this.Date.now()}`;\n }\n\n recalculate(): void {\n const count = Object.keys(this.list).length;\n if (count && !this.timer) {\n const d = new this.Date();\n d.setMilliseconds(2); // 2 ms to be sure that the next second is reached, they do not hurt anyone\n d.setSeconds(0);\n d.setMinutes(d.getMinutes() + 1);\n this.timer = setTimeout(\n notBefore => this.checkSchedules(notBefore),\n d.getTime() - this.Date.now(),\n d.getTime(),\n );\n } else if (!count && this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n getContext(): SchedulerContext {\n const now = new this.Date();\n return {\n now: now.getTime(),\n minutesOfDay: now.getHours() * 60 + now.getMinutes(),\n y: now.getFullYear(),\n M: now.getMonth(),\n d: now.getDate(),\n h: now.getHours(),\n m: now.getMinutes(),\n dow: now.getDay(),\n };\n }\n\n checkSchedules(notBeforeTime?: number): void {\n const context = this.getContext();\n\n // Work around for not those precise RTCs in some system\n if (notBeforeTime !== undefined && context.now < notBeforeTime) {\n this.timer = setTimeout(\n notBefore => this.checkSchedules(notBefore),\n notBeforeTime - this.Date.now(),\n notBeforeTime,\n );\n return;\n }\n\n for (const id in this.list) {\n if (!Object.prototype.hasOwnProperty.call(this.list, id)) {\n continue;\n }\n if (this.checkSchedule(context, this.list[id])) {\n setImmediate(id => this.list[id] && typeof this.list[id].cb === 'function' && this.list[id].cb(id), id);\n }\n }\n\n const d = new this.Date();\n d.setMilliseconds(2); // 2 ms to be sure that the next second is reached, they do not hurt anyone\n d.setSeconds(0);\n d.setMinutes(d.getMinutes() + 1);\n this.timer = setTimeout(\n notBefore => this.checkSchedules(notBefore),\n d.getTime() - this.Date.now(),\n d.getTime(),\n );\n }\n\n monthDiff(d1: Date, d2: Date): number {\n let months: number;\n months = (d2.getFullYear() - d1.getFullYear()) * 12;\n months -= d1.getMonth() + 1;\n months += d2.getMonth();\n return months <= 0 ? 0 : months;\n }\n\n checkSchedule(context: SchedulerContext, schedule: SchedulerRuleParsed): boolean {\n if (schedule.valid) {\n if (\n schedule.valid.from &&\n !this.isPast(context, schedule.valid.from) &&\n !this.isToday(context, schedule.valid.from)\n ) {\n return false;\n }\n // \"to\" this.Date is in the past => delete it from a list\n if (schedule.valid.to && this.isPast(context, schedule.valid.to)) {\n delete this.list[schedule.id];\n return false;\n }\n }\n if (schedule.period) {\n if (schedule.period.once && !this.isToday(context, schedule.period.once)) {\n if (this.isPast(context, schedule.period.once)) {\n delete this.list[schedule.id];\n }\n return false;\n } else if (schedule.period.days) {\n if (schedule.period.dows && !schedule.period.dows.includes(context.dow)) {\n return false;\n } else if (schedule.period.days > 1) {\n // @ts-expect-error period of days cannot be without valid fromDate\n const diff = Math.round((context.now - schedule.valid.fromDate) / (60000 * 24) + 0.5);\n if (diff % schedule.period.days) {\n return false;\n }\n }\n } else if (schedule.period.weeks) {\n if (schedule.period.dows && !schedule.period.dows.includes(context.dow)) {\n return false;\n }\n if (schedule.period.weeks > 1) {\n // @ts-expect-error period of weeks cannot be without valid fromDate\n const diff = Math.round((context.now - schedule.valid.fromDate) / (60000 * 24 * 7) + 0.5);\n if (diff % schedule.period.weeks) {\n return false;\n }\n }\n } else if (schedule.period.months) {\n if (Array.isArray(schedule.period.months) && !schedule.period.months.includes(context.M)) {\n return false;\n }\n if (\n schedule.period.fromDate &&\n typeof schedule.period.months === 'number' &&\n schedule.period.months > 1\n ) {\n const diff = this.monthDiff(schedule.period.fromDate, new this.Date(context.now));\n if (diff % schedule.period.months) {\n return false;\n }\n }\n if (schedule.period.dates && !schedule.period.dates.includes(context.d)) {\n return false;\n }\n } else if (schedule.period.years) {\n if (schedule.period.yearMonth !== undefined && schedule.period.yearMonth !== context.M) {\n return false;\n }\n if (schedule.period.yearDate && schedule.period.yearDate !== context.d) {\n return false;\n }\n if (\n schedule.period.fromDate &&\n typeof schedule.period.years === 'number' &&\n schedule.period.years > 1\n ) {\n const diff = Math.floor(this.monthDiff(schedule.period.fromDate, new this.Date(context.now)) / 12);\n if (diff % schedule.period.years) {\n return false;\n }\n }\n }\n }\n\n if (schedule.time) {\n let start: number;\n let end: number;\n const now = new this.Date(context.now);\n if (now.getDate() !== this.todaysAstroTimes.sunrise.getDate()) {\n this._setAstroVars();\n }\n if (typeof schedule.time.start === 'string') {\n const astroNameStart = this._getAstroName(schedule.time.start);\n if (astroNameStart) {\n let times = this.todaysAstroTimes;\n\n if (times[astroNameStart].getDate() !== now.getDate()) {\n times = this.yesterdaysAstroTimes;\n }\n const startDate: Date = times[astroNameStart];\n start = startDate.getHours() * 60 + startDate.getMinutes();\n } else {\n this.log.error(`unknown astro event \"${schedule.time.start}\"`);\n return false;\n }\n } else {\n start = schedule.time.start;\n }\n if (typeof schedule.time.end === 'string') {\n const astroNameEnd = this._getAstroName(schedule.time.end);\n if (astroNameEnd) {\n let times = this.todaysAstroTimes;\n if (times[astroNameEnd].getDate() !== now.getDate()) {\n times = this.yesterdaysAstroTimes;\n }\n const endDate: Date = times[astroNameEnd];\n end = endDate.getHours() * 60 + endDate.getMinutes();\n } else {\n this.log.error(`unknown astro event \"${schedule.time.end}\"`);\n return false;\n }\n } else {\n end = schedule.time.end;\n }\n\n start = start || 0;\n end = end || 60 * 24;\n\n if (schedule.time.exactTime) {\n if (context.minutesOfDay !== start) {\n return false;\n }\n } else {\n if (start >= context.minutesOfDay || (end && end < context.minutesOfDay)) {\n return false;\n }\n if (schedule.time.mode === 60) {\n if (schedule.time.interval > 1 && (context.minutesOfDay - start) % schedule.time.interval) {\n return false;\n }\n } else if (schedule.time.mode === 3600) {\n if ((context.minutesOfDay - start) % (schedule.time.interval * 60)) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n string2date(date: string): { y: number; M: number; d: number } {\n let parts = date.split('.');\n let d: Date;\n if (parts.length !== 3) {\n parts = date.split('-');\n d = new this.Date(parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10));\n } else {\n d = new this.Date(parseInt(parts[2], 10), parseInt(parts[1], 10) - 1, parseInt(parts[0], 10));\n }\n return { y: d.getFullYear(), M: d.getMonth(), d: d.getDate() };\n }\n\n isPast(context: SchedulerContext, date: { y: number; M: number; d: number } | undefined): boolean {\n if (date) {\n if (date.y < context.y) {\n return true;\n }\n if (date.y === context.y) {\n if (date.M < context.M) {\n return true;\n }\n if (date.M === context.M) {\n if (date.d < context.d) {\n return true;\n }\n }\n }\n }\n return false;\n }\n\n isToday(context: SchedulerContext, date: { y: number; M: number; d: number }): boolean {\n return date && date.y === context.y && date.M === context.M && date.d === context.d;\n }\n\n add(schedule: SchedulerRule | string, scriptName: string, cb: (id: string) => void): string | null {\n let oSchedule: SchedulerRule;\n if (typeof schedule === 'string') {\n try {\n oSchedule = JSON.parse(schedule);\n } catch {\n this.log.error(`Cannot parse schedule: ${schedule}`);\n return null;\n }\n } else {\n oSchedule = schedule;\n }\n\n const id = this._getId();\n if (typeof oSchedule !== 'object' || !oSchedule.period) {\n this.log.error(`Invalid schedule structure: ${JSON.stringify(oSchedule)}`);\n return null;\n }\n const context = this.getContext();\n const sch: SchedulerRuleParsed = JSON.parse(JSON.stringify(oSchedule));\n sch.scriptName = scriptName;\n sch.original = JSON.stringify(oSchedule);\n sch.id = id;\n sch.cb = cb;\n\n if (oSchedule.time?.start) {\n const astroNameStart = this._getAstroName(oSchedule.time.start);\n if (astroNameStart && sch.time) {\n sch.time.start = astroNameStart;\n } else if (oSchedule.time.start.includes(':')) {\n const parts = oSchedule.time.start.split(':');\n if (sch.time) {\n sch.time.start = parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10);\n }\n } else {\n this.log.error(`unknown astro event \"${oSchedule.time.start}\"`);\n return null;\n }\n }\n\n if (oSchedule.time?.end) {\n const astroNameEnd = this._getAstroName(oSchedule.time.end);\n if (astroNameEnd && sch.time) {\n sch.time.end = astroNameEnd;\n } else if (oSchedule.time.end.includes(':')) {\n const parts = oSchedule.time.end.split(':');\n if (sch.time) {\n sch.time.end = parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10);\n }\n } else {\n this.log.error(`unknown astro event \"${oSchedule.time.end}\"`);\n return null;\n }\n }\n\n if (sch.time) {\n if (oSchedule.time.mode === 'minutes') {\n sch.time.mode = 60;\n } else if (oSchedule.time.mode === 'hours') {\n sch.time.mode = 3600;\n }\n }\n\n if (oSchedule.period.once) {\n sch.period.once = this.string2date(oSchedule.period.once);\n }\n\n if (oSchedule.valid && sch.valid) {\n if (oSchedule.valid.from) {\n sch.valid.from = this.string2date(oSchedule.valid.from);\n }\n if (oSchedule.valid.to) {\n sch.valid.to = this.string2date(oSchedule.valid.to);\n }\n\n if (this.isPast(context, sch.valid.to)) {\n this.log.warn('End of schedule is in the past');\n return null;\n }\n\n if (typeof oSchedule.period.days === 'number' && oSchedule.period.days > 1 && sch.valid.from) {\n // fromDate must be unix time\n sch.valid.fromDate = new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d).getTime();\n } else if (typeof oSchedule.period.weeks === 'number' && oSchedule.period.weeks > 1) {\n const fromDate: Date = sch.valid.from\n ? new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d)\n : new this.Date();\n //sch.valid.fromDate.setDate(-sch.valid.fromDate.getDate() - sch.valid.fromDate.getDay());\n // fromDate must be unix time\n sch.valid.fromDate = fromDate.getTime();\n } else if (sch.valid.from && typeof oSchedule.period.months === 'number' && oSchedule.period.months > 1) {\n // fromDate must be object\n sch.valid.fromDate = new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d);\n } else if (sch.valid.from && typeof oSchedule.period.years === 'number' && oSchedule.period.years > 1) {\n // fromDate must be object\n sch.valid.fromDate = new this.Date(sch.valid.from.y, sch.valid.from.M, sch.valid.from.d);\n }\n }\n if (\n sch.period &&\n ((typeof sch.period.days === 'number' && sch.period.days > 1) ||\n (typeof sch.period.weeks === 'number' && sch.period.weeks > 1) ||\n (typeof sch.period.months === 'number' && sch.period.months > 1) ||\n (typeof sch.period.years === 'number' && sch.period.years > 1)) &&\n (!sch.valid || !sch.valid.fromDate)\n ) {\n this.log.warn(\n 'Invalid Schedule definition: Period day/weeks/months/years only allowed with a valid.from date!',\n );\n return null;\n }\n\n if (oSchedule.period.dows) {\n try {\n sch.period.dows = JSON.parse(oSchedule.period.dows);\n } catch {\n this.log.error(`Cannot parse day of weeks: ${JSON.stringify(sch.period.dows)}`);\n return null;\n }\n if (!Array.isArray(sch.period.dows)) {\n this.log.error(`day of weeks is no array: ${JSON.stringify(sch.period.dows)}`);\n return null;\n }\n }\n\n if (oSchedule.period.months && typeof oSchedule.period.months !== 'number') {\n // can be number or array-string\n try {\n sch.period.months = JSON.parse(oSchedule.period.months) as number[];\n } catch {\n this.log.error(`Cannot parse day of months: ${JSON.stringify(sch.period.months)}`);\n return null;\n }\n sch.period.months = sch.period.months.map(m => m - 1);\n }\n\n if (oSchedule.period.dates) {\n try {\n sch.period.dates = JSON.parse(oSchedule.period.dates) as number[];\n } catch {\n this.log.error(`Cannot parse day of dates: ${JSON.stringify(sch.period.dates)}`);\n return null;\n }\n }\n if (oSchedule.period.yearMonth) {\n sch.period.yearMonth = oSchedule.period.yearMonth - 1;\n }\n this.list[id] = sch;\n this.recalculate();\n return id;\n }\n\n remove(id: string | ScheduleName): boolean {\n if (\n typeof id === 'object' &&\n id.type === 'schedule' &&\n typeof id.id === 'string' &&\n id.id.startsWith('schedule_')\n ) {\n if (this.list[id.id.substring('schedule_'.length)]) {\n delete this.list[id.id.substring('schedule_'.length)];\n this.recalculate();\n return true;\n }\n return false;\n }\n if (typeof id === 'string' && this.list[id]) {\n delete this.list[id];\n this.recalculate();\n return true;\n }\n return false;\n }\n\n getList(): ScheduleName[] {\n return Object.keys(this.list).map(id => ({\n id: `schedule_${id}`,\n type: 'schedule',\n schedule: this.list[id].original,\n scriptName: this.list[id].scriptName,\n }));\n }\n\n get(id: string | ScheduleName): SchedulerRuleParsed | null {\n if (\n id &&\n typeof id === 'object' &&\n id.type === 'schedule' &&\n typeof id.id === 'string' &&\n id.id.startsWith('schedule_')\n ) {\n return this.list[id.id.substring('schedule_'.length)];\n }\n if (typeof id === 'string') {\n return this.list[id];\n }\n return null;\n }\n\n private _setAstroVars(): void {\n const todayNoon = new this.Date();\n const yesterdayNoon = new this.Date();\n todayNoon.setHours(12, 0, 0, 0);\n yesterdayNoon.setHours(-12, 0, 0, 0);\n this.todaysAstroTimes = this.suncalc.getTimes(todayNoon, this.latitude, this.longitude);\n this.yesterdaysAstroTimes = this.suncalc.getTimes(yesterdayNoon, this.latitude, this.longitude);\n }\n\n private _getAstroName(evt: string): AstroEventName | null {\n if (typeof evt === 'string') {\n const pos = (this.astroListLow as string[]).indexOf(evt.toLowerCase() as AstroEventNameLow);\n if (pos > -1) {\n return (this.astroList as string[])[pos] as AstroEventName;\n }\n }\n return null;\n }\n}\n"]}
|
package/io-package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "javascript",
|
|
4
|
-
"version": "9.0.
|
|
4
|
+
"version": "9.0.3",
|
|
5
5
|
"blockedVersions": [
|
|
6
6
|
"8.0.0",
|
|
7
7
|
"8.0.1"
|
|
@@ -40,7 +40,20 @@
|
|
|
40
40
|
"Matthias Kleine <info@haus-automatisierung.com>"
|
|
41
41
|
],
|
|
42
42
|
"news": {
|
|
43
|
-
"9.0.
|
|
43
|
+
"9.0.3": {
|
|
44
|
+
"en": "Corrected the rule editor\nRemoved the unused JS files",
|
|
45
|
+
"de": "Korrektur des Regeleditors\nEntfernen der ungenutzten JS-Dateien",
|
|
46
|
+
"ru": "Исправлен редактор правил\nУдаление неиспользуемых файлов JS",
|
|
47
|
+
"pt": "Corrigido o editor de regras\nRemoveu os arquivos JS não utilizados",
|
|
48
|
+
"nl": "De regelbewerker gecorrigeerd\nVerwijderde de ongebruikte JS-bestanden",
|
|
49
|
+
"fr": "Correction de l'éditeur de règles\nSupprimé les fichiers JS inutilisés",
|
|
50
|
+
"it": "Corretto l'editor delle regole\nRimuovi i file JS non utilizzati",
|
|
51
|
+
"es": "Corregido el editor de reglas\nEliminar los archivos JS no utilizados",
|
|
52
|
+
"pl": "Poprawiono edytor zasad\nUsunięto niewykorzystane pliki JS",
|
|
53
|
+
"uk": "Виправлено редактор правила\nВидалити невикористані файли JS",
|
|
54
|
+
"zh-cn": "更正规则编辑器\n删除未使用的 JS 文件"
|
|
55
|
+
},
|
|
56
|
+
"9.0.2": {
|
|
44
57
|
"en": "Added possibility to escape chars in formatTimeDiff\nBack-end was migrated to TypeScript\nBreaking change: removed \"request\" module\nAdded prettier for scripts",
|
|
45
58
|
"de": "Zusätzliche Möglichkeit, Zeichen im Format zu entkommen TimeDiff\nBackend wurde zu TypeScript migriert\nBreaking change: entferntes Modul \"Request\"\nHinzugefügt schöner für Scripts",
|
|
46
59
|
"ru": "Добавлена возможность побега чаров в формате тайм-дифф\nBack-end был перенесен на TypeScript\nПереломное изменение: удален модуль «запрос»\nДобавлено красивее для сценариев",
|
|
@@ -117,19 +130,6 @@
|
|
|
117
130
|
"pl": "zaktualizowane zależności",
|
|
118
131
|
"uk": "оновлені залежності",
|
|
119
132
|
"zh-cn": "更新的依赖关系"
|
|
120
|
-
},
|
|
121
|
-
"8.8.1": {
|
|
122
|
-
"en": "updated dependencies",
|
|
123
|
-
"de": "aktualisierte abhängigkeiten",
|
|
124
|
-
"ru": "обновленные зависимости",
|
|
125
|
-
"pt": "dependências atualizadas",
|
|
126
|
-
"nl": "bijgewerkte afhankelijkheden",
|
|
127
|
-
"fr": "dépendances actualisées",
|
|
128
|
-
"it": "dipendenze aggiornate",
|
|
129
|
-
"es": "dependencias actualizadas",
|
|
130
|
-
"pl": "zaktualizowane zależności",
|
|
131
|
-
"uk": "оновлені залежності",
|
|
132
|
-
"zh-cn": "更新的依赖关系"
|
|
133
133
|
}
|
|
134
134
|
},
|
|
135
135
|
"platform": "Javascript/Node.js",
|