diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000000..4a959624e0 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +node_modules +__test__ +config +coverage + diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000000..cc30cb4659 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,29 @@ +module.exports = { + env: { + node: true, + es2021: true, + }, + extends: 'airbnb-base', + globals: { + expect: 'readonly', + test: 'readonly', + describe: 'readonly' + }, + overrides: [ + ], + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + }, + rules: { + 'no-console': 0, + 'import/no-extraneous-dependencies': 0, + 'import/extensions': 0, + 'max-len': 0, + 'semi': [2, 'never'], + 'no-param-reassign': 0, + 'no-restricted-syntax': 0, + 'no-plusplus': 0, + 'no-await-in-loop': 0 + }, +}; diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000000..7d0de5da3f --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +lint-staged diff --git a/__tests__/services.spec.js b/__tests__/services.spec.js index 125015cc92..f417827dfa 100644 --- a/__tests__/services.spec.js +++ b/__tests__/services.spec.js @@ -1,649 +1,639 @@ import { jest } from '@jest/globals' import axios from 'axios' -import { config } from '../config' import dayjs from 'dayjs' - -jest.mock('axios') -jest.mock('dayjs') -jest.mock('../config') +import MockDate from 'mockdate' +import { config } from '../config' import { - getWeather, - getAccessToken, - getCIBA, - getOneTalk, - getEarthyLoveWords, - getPoisonChickenSoup, - getWordsFromApiShadiao, - getMomentCopyrighting, - getDateDiffList, - getSlotList, - getBirthdayMessage, - sendMessage, - sendMessageReply, - getPoetry, - getConstellationFortune, - getHolidaytts + getWeather, + getAccessToken, + getCIBA, + getOneTalk, + getEarthyLoveWords, + getPoisonChickenSoup, + getWordsFromApiShadiao, + getMomentCopyrighting, + getDateDiffList, + getSlotList, + getBirthdayMessage, + sendMessage, + sendMessageReply, + getPoetry, + getConstellationFortune, + getHolidaytts, } from '../src/services' import { selfDayjs } from '../src/utils/set-def-dayjs.js' -import MockDate from 'mockdate' + +jest.mock('axios') +jest.mock('dayjs') +jest.mock('../config') describe('services', () => { - test('getWeather', async () => { - config.SWITCH = {} - expect(await getWeather('', '')).toEqual({}) - config.SWITCH = null - expect(await getWeather('', '')).toEqual({}) - axios.get = async () => { - return { - status: 200, - data: 'var cityDZ101010100 = {"weatherinfo":{"city":"101010100","cityname":"北京","fctime":"202209030800","temp":"27℃","tempn":"19℃","weather":"小雨","weathercode":"d7","weathercoden":"n7","wd":"南风","ws":"<3级"}};var alarmDZ101010100 = {"w":[]}' - } - } - expect(await getWeather('北京', '北京')).not.toEqual({}) - axios.get = async () => { - return { - status: 199 - } - } - expect(await getWeather('北京', '北京')).toEqual({}) - axios.get = async () => { - return { - status: 200, - data: 'a=;' - } - } - expect(await getWeather('北京', '北京')).toEqual({}) - axios.get = async () => { - return { - status: 200, - data: 'a=123;' - } - } - expect(await getWeather('北京', '北京')).toEqual({}) - axios.get = async () => { - throw new Error - } - expect(await getWeather('北京', '北京')).toEqual({}) - axios.get = async () => { - return { - status: 200, - data: 'null' - } - } - expect(await getWeather('北京', '北京')).toEqual({}) - }) - test('getAccessToken', async () => { - axios.get = async () => { - throw new Error - } - expect(await getAccessToken()).toBeNull() - axios.get = async () => { - return { - status: 199 - } - } - expect(await getAccessToken()).toBeNull() - axios.get = async () => { - return { - status: 200 - } - } - expect(await getAccessToken()).toBeNull() - axios.get = async () => { - return { - status: 200, - data: {} - } - } - expect(await getAccessToken()).toBeNull() - axios.get = async () => { - return { - status: 200, - data: { - access_token: '123456' - } - } - } - config.APP_ID = '123' - config.APP_SECRET = '' - expect(await getAccessToken()).toBeNull() - config.APP_ID = '' - config.APP_SECRET = '123' - expect(await getAccessToken()).toBeNull() - config.APP_ID = '123' - config.APP_SECRET = '123' - expect(await getAccessToken()).toEqual('123456') - axios.get = async () => { - return { - status: 200, - data: { - errmsg: 'xxx' - } - } - } - expect(await getAccessToken()).toBeNull() - axios.get = async () => { - throw new Error - } - expect(await getAccessToken()).toBeNull() - }) - test('getCIBA', async function () { - axios.get = async () => { - throw new Error - } - expect(await getCIBA()).toEqual({}) - axios.get = async () => { - return { - status: 199 - } - } - expect(await getCIBA()).toEqual({}) - axios.get = async () => { - return { - status: 200 - } - } - expect(await getCIBA()).toBeUndefined() - axios.get = async () => { - return { - status: 200, - data: 'test' - } - } - expect(await getCIBA()).toEqual('test') - }) - test('getOneTalk', async () => { - config.SWITCH = {} - expect(await getOneTalk('动画')).toEqual({}) - config.SWITCH.oneTalk = true - axios.get = async () => { - throw new Error - } - expect(await getOneTalk('动画')).toEqual({}) - expect(await getOneTalk('xxx')).toEqual({}) - axios.get = async () => { - return { - status: 200, - data: 'test' - } - } - expect(await getOneTalk('动画')).toEqual('test') - }) - test('getWordsFromApiShadiao', async () => { - config.SWITCH.earthyLoveWords = true - config.SWITCH.momentCopyrighting = true - config.SWITCH.poisonChickenSoup = true - expect(await getWordsFromApiShadiao('other')).toEqual('') - axios.get = async () => { - throw new Error - } - expect(await getWordsFromApiShadiao('chp')).toEqual('') - axios.get = async () => { - return { - data: null - } - } - expect(await getWordsFromApiShadiao('pyq')).toEqual('') - axios.get = async () => { - return null - } - expect(await getWordsFromApiShadiao('pyq')).toEqual('') + test('getWeather', async () => { + config.SWITCH = {} + expect(await getWeather('', '')).toEqual({}) + config.SWITCH = null + expect(await getWeather('', '')).toEqual({}) + axios.get = async () => ({ + status: 200, + data: 'var cityDZ101010100 = {"weatherinfo":{"city":"101010100","cityname":"北京","fctime":"202209030800","temp":"27℃","tempn":"19℃","weather":"小雨","weathercode":"d7","weathercoden":"n7","wd":"南风","ws":"<3级"}};var alarmDZ101010100 = {"w":[]}', + }) + expect(await getWeather('北京', '北京')).not.toEqual({}) + axios.get = async () => ({ + status: 199, + }) + expect(await getWeather('北京', '北京')).toEqual({}) + axios.get = async () => ({ + status: 200, + data: 'a=;', + }) + expect(await getWeather('北京', '北京')).toEqual({}) + axios.get = async () => ({ + status: 200, + data: 'a=123;', + }) + expect(await getWeather('北京', '北京')).toEqual({}) + axios.get = async () => { + throw new Error() + } + expect(await getWeather('北京', '北京')).toEqual({}) + axios.get = async () => ({ + status: 200, + data: 'null', + }) + expect(await getWeather('北京', '北京')).toEqual({}) + }) + test('getAccessToken', async () => { + axios.get = async () => { + throw new Error() + } + expect(await getAccessToken()).toBeNull() + axios.get = async () => ({ + status: 199, + }) + expect(await getAccessToken()).toBeNull() + axios.get = async () => ({ + status: 200, + }) + expect(await getAccessToken()).toBeNull() + axios.get = async () => ({ + status: 200, + data: {}, + }) + expect(await getAccessToken()).toBeNull() + axios.get = async () => ({ + status: 200, + data: { + access_token: '123456', + }, + }) + config.APP_ID = '123' + config.APP_SECRET = '' + expect(await getAccessToken()).toBeNull() + config.APP_ID = '' + config.APP_SECRET = '123' + expect(await getAccessToken()).toBeNull() + config.APP_ID = '123' + config.APP_SECRET = '123' + expect(await getAccessToken()).toEqual('123456') + axios.get = async () => ({ + status: 200, + data: { + errmsg: 'xxx', + }, + }) + expect(await getAccessToken()).toBeNull() + axios.get = async () => { + throw new Error() + } + expect(await getAccessToken()).toBeNull() + }) + test('getCIBA', async () => { + axios.get = async () => { + throw new Error() + } + expect(await getCIBA()).toEqual({}) + axios.get = async () => ({ + status: 199, + }) + expect(await getCIBA()).toEqual({}) + axios.get = async () => ({ + status: 200, + }) + expect(await getCIBA()).toBeUndefined() + axios.get = async () => ({ + status: 200, + data: 'test', + }) + expect(await getCIBA()).toEqual('test') + }) + test('getOneTalk', async () => { + config.SWITCH = {} + expect(await getOneTalk('动画')).toEqual({}) + config.SWITCH.oneTalk = true + axios.get = async () => { + throw new Error() + } + expect(await getOneTalk('动画')).toEqual({}) + expect(await getOneTalk('xxx')).toEqual({}) + axios.get = async () => ({ + status: 200, + data: 'test', + }) + expect(await getOneTalk('动画')).toEqual('test') + }) + test('getWordsFromApiShadiao', async () => { + config.SWITCH.earthyLoveWords = true + config.SWITCH.momentCopyrighting = true + config.SWITCH.poisonChickenSoup = true + expect(await getWordsFromApiShadiao('other')).toEqual('') + axios.get = async () => { + throw new Error() + } + expect(await getWordsFromApiShadiao('chp')).toEqual('') + axios.get = async () => ({ + data: null, + }) + expect(await getWordsFromApiShadiao('pyq')).toEqual('') + axios.get = async () => null + expect(await getWordsFromApiShadiao('pyq')).toEqual('') - axios.get = async () => { - return { - data: { - data: { - text: 'test' - } - } - } - } - expect(await getWordsFromApiShadiao('du')).toEqual('test') - axios.get = async () => { - return { - data: { - data: { - text: '彩虹屁' - } - } - } - } - config.SWITCH = {} - expect(await getEarthyLoveWords()).toEqual('') - config.SWITCH.earthyLoveWords = true - expect(await getEarthyLoveWords()).toEqual('彩虹屁') - axios.get = async () => { - return { - data: { - data: { - text: '朋友圈文案' - } - } - } - } - config.SWITCH = {} - expect(await getMomentCopyrighting()).toEqual('') - config.SWITCH.momentCopyrighting = true - expect(await getMomentCopyrighting()).toEqual('朋友圈文案') - axios.get = async () => { - return { - data: { - data: { - text: '毒鸡汤' - } - } - } - } - config.SWITCH = {} - expect(await getPoisonChickenSoup()).toEqual('') - config.SWITCH.poisonChickenSoup = true - expect(await getPoisonChickenSoup()).toEqual('毒鸡汤') - }) - test('getBirthdayMessage', () => { - config.SWITCH = {} - expect(getBirthdayMessage()).toEqual('') - config.SWITCH.birthdayMessage = true - config.FESTIVALS = null - MockDate.set('2022-09-03') - expect(getBirthdayMessage([])).toEqual('') - expect(getBirthdayMessage([{ - type: '节日', - name: '结婚纪念日', - year: '2020', - date: '09-03' - }])).toEqual('今天是 结婚纪念日 哦,要开心! \n') - config.FESTIVALS = [ - { type: '*生日', name: '老婆', year: '1999', date: '09-19', isShowAge: true }, - { type: '节日', name: '结婚纪念日', year: '2020', date: '09-03' }, - { type: '生日', name: '李四', year: '1996', date: '09-31', isShowAge: true }, - { type: '节日', name: '被搭讪纪念日', year: '2021', date: '09-01' } - ] - config.FESTIVALS_LIMIT = 4 - expect(getBirthdayMessage()).toEqual(` + axios.get = async () => ({ + data: { + data: { + text: 'test', + }, + }, + }) + expect(await getWordsFromApiShadiao('du')).toEqual('test') + axios.get = async () => ({ + data: { + data: { + text: '彩虹屁', + }, + }, + }) + config.SWITCH = {} + expect(await getEarthyLoveWords()).toEqual('') + config.SWITCH.earthyLoveWords = true + expect(await getEarthyLoveWords()).toEqual('彩虹屁') + axios.get = async () => ({ + data: { + data: { + text: '朋友圈文案', + }, + }, + }) + config.SWITCH = {} + expect(await getMomentCopyrighting()).toEqual('') + config.SWITCH.momentCopyrighting = true + expect(await getMomentCopyrighting()).toEqual('朋友圈文案') + axios.get = async () => ({ + data: { + data: { + text: '毒鸡汤', + }, + }, + }) + config.SWITCH = {} + expect(await getPoisonChickenSoup()).toEqual('') + config.SWITCH.poisonChickenSoup = true + expect(await getPoisonChickenSoup()).toEqual('毒鸡汤') + }) + test('getBirthdayMessage', () => { + config.SWITCH = {} + expect(getBirthdayMessage()).toEqual('') + config.SWITCH.birthdayMessage = true + config.FESTIVALS = null + MockDate.set('2022-09-03') + expect(getBirthdayMessage([])).toEqual('') + expect(getBirthdayMessage([{ + type: '节日', + name: '结婚纪念日', + year: '2020', + date: '09-03', + }])).toEqual('今天是 结婚纪念日 哦,要开心! \n') + config.FESTIVALS = [ + { + type: '*生日', name: '老婆', year: '1999', date: '09-19', isShowAge: true, + }, + { + type: '节日', name: '结婚纪念日', year: '2020', date: '09-03', + }, + { + type: '生日', name: '李四', year: '1996', date: '09-31', isShowAge: true, + }, + { + type: '节日', name: '被搭讪纪念日', year: '2021', date: '09-01', + }, + ] + config.FESTIVALS_LIMIT = 4 + expect(getBirthdayMessage()).toEqual(` 今天是 结婚纪念日 哦,要开心! 距离 李四 的26岁生日还有28天 距离 老婆 的23岁生日还有41天 距离 被搭讪纪念日 还有363天 `.trimStart()) - MockDate.reset() - MockDate.set('2022-09-31') - config.FESTIVALS = [ - { type: '*生日', name: '老婆', year: '1999', date: '09-19', isShowAge: true }, - { type: '节日', name: '结婚纪念日', year: '2020', date: '09-03' }, - { type: '生日', name: '李四', year: '1996', date: '09-31', isShowAge: true }, - { type: '节日', name: '被搭讪纪念日', year: '2021', date: '09-01' } - ] - expect(getBirthdayMessage()).toEqual(` + MockDate.reset() + MockDate.set('2022-09-31') + config.FESTIVALS = [ + { + type: '*生日', name: '老婆', year: '1999', date: '09-19', isShowAge: true, + }, + { + type: '节日', name: '结婚纪念日', year: '2020', date: '09-03', + }, + { + type: '生日', name: '李四', year: '1996', date: '09-31', isShowAge: true, + }, + { + type: '节日', name: '被搭讪纪念日', year: '2021', date: '09-01', + }, + ] + expect(getBirthdayMessage()).toEqual(` 今天是 李四 的26岁生日哦,祝李四生日快乐! 距离 老婆 的23岁生日还有13天 距离 被搭讪纪念日 还有335天 距离 结婚纪念日 还有337天 `.trimStart()) - MockDate.reset() - MockDate.set('1999-10-27') - config.FESTIVALS = [ - { type: '*生日', name: '老婆', year: '1999', date: '09-19', isShowAge: true }, - { type: '节日', name: '结婚纪念日', year: '2020', date: '09-03' }, - { type: '生日', name: '李四', year: '1996', date: '09-31', isShowAge: true }, - { type: '节日', name: '被搭讪纪念日', year: '2021', date: '09-01' } - ] - expect(getBirthdayMessage()).toEqual(` + MockDate.reset() + MockDate.set('1999-10-27') + config.FESTIVALS = [ + { + type: '*生日', name: '老婆', year: '1999', date: '09-19', isShowAge: true, + }, + { + type: '节日', name: '结婚纪念日', year: '2020', date: '09-03', + }, + { + type: '生日', name: '李四', year: '1996', date: '09-31', isShowAge: true, + }, + { + type: '节日', name: '被搭讪纪念日', year: '2021', date: '09-01', + }, + ] + expect(getBirthdayMessage()).toEqual(` 今天是 老婆 的0岁生日哦,祝老婆生日快乐! 距离 被搭讪纪念日 还有310天 距离 结婚纪念日 还有312天 距离 李四 的4岁生日还有340天 `.trimStart()) - MockDate.reset() - config.FESTIVALS_LIMIT = -1 - MockDate.set('2022-09-03') - expect(getBirthdayMessage()).toEqual('') - MockDate.reset() - config.FESTIVALS_LIMIT = 4 - config.FESTIVALS = [ - { type: '测试日', name: '老婆', year: '1996', date: '09-02', isShowAge: true }, - { type: '测试日', name: '结婚纪念日', year: '2020', date: '09-03' }, - { type: '测试日', name: '李四', year: '1996', date: '09-31', isShowAge: true }, - { type: '测试日', name: '被搭讪纪念日', year: '2021', date: '09-01' } - ] - expect(getBirthdayMessage()).toEqual('') - config.FESTIVALS = null - expect(getBirthdayMessage()).toEqual('') - MockDate.set('1999-10-28') - config.FESTIVALS = [ - { type: '*生日', name: '老婆', year: '1999', date: '09-19'}, - { type: '节日', name: '结婚纪念日', year: '2020', date: '09-03' }, - { type: '生日', name: '李四', year: '1996', date: '09-31', isShowAge: true }, - { type: '节日', name: '被搭讪纪念日', year: '2021', date: '09-01' } - ] - expect(getBirthdayMessage()).toEqual(` + MockDate.reset() + config.FESTIVALS_LIMIT = -1 + MockDate.set('2022-09-03') + expect(getBirthdayMessage()).toEqual('') + MockDate.reset() + config.FESTIVALS_LIMIT = 4 + config.FESTIVALS = [ + { + type: '测试日', name: '老婆', year: '1996', date: '09-02', isShowAge: true, + }, + { + type: '测试日', name: '结婚纪念日', year: '2020', date: '09-03', + }, + { + type: '测试日', name: '李四', year: '1996', date: '09-31', isShowAge: true, + }, + { + type: '测试日', name: '被搭讪纪念日', year: '2021', date: '09-01', + }, + ] + expect(getBirthdayMessage()).toEqual('') + config.FESTIVALS = null + expect(getBirthdayMessage()).toEqual('') + MockDate.set('1999-10-28') + config.FESTIVALS = [ + { + type: '*生日', name: '老婆', year: '1999', date: '09-19', + }, + { + type: '节日', name: '结婚纪念日', year: '2020', date: '09-03', + }, + { + type: '生日', name: '李四', year: '1996', date: '09-31', isShowAge: true, + }, + { + type: '节日', name: '被搭讪纪念日', year: '2021', date: '09-01', + }, + ] + expect(getBirthdayMessage()).toEqual(` 距离 被搭讪纪念日 还有309天 距离 结婚纪念日 还有311天 距离 李四 的4岁生日还有339天 距离 老婆 的生日还有354天 `.trimStart()) - MockDate.set('1999-10-27') - config.FESTIVALS = [ - { type: '*生日', name: '老婆', year: '1999', date: '09-19'}, - { type: '节日', name: '结婚纪念日', year: '2020', date: '09-03' }, - { type: '*生日', name: '李四', year: '1999', date: '12-29', isShowAge: true }, - { type: '节日', name: '被搭讪纪念日', year: '2021', date: '09-01' } - ] - expect(getBirthdayMessage()).toEqual(` + MockDate.set('1999-10-27') + config.FESTIVALS = [ + { + type: '*生日', name: '老婆', year: '1999', date: '09-19', + }, + { + type: '节日', name: '结婚纪念日', year: '2020', date: '09-03', + }, + { + type: '*生日', name: '李四', year: '1999', date: '12-29', isShowAge: true, + }, + { + type: '节日', name: '被搭讪纪念日', year: '2021', date: '09-01', + }, + ] + expect(getBirthdayMessage()).toEqual(` 今天是 老婆 的生日哦,祝老婆生日快乐! 距离 李四 的0岁生日还有100天 距离 被搭讪纪念日 还有310天 距离 结婚纪念日 还有312天 `.trimStart()) + }) + test('getDateDiffList', () => { + config.CUSTOMIZED_DATE_LIST = [ + // 在一起的日子 + { keyword: 'love_day', date: '2015-05-01' }, + // 结婚纪念日 + { keyword: 'marry_day', date: '2020-01-04' }, + // 退伍日, 不用可以删掉 + { keyword: 'ex_day', date: '2022-09-09' }, + // sakana日 + // {"keyword": "sakana_day", date: "2022-01-06"}, + // ... + ] + MockDate.set('2022-09-03 08:00:00') + expect(getDateDiffList()).toEqual([{ + date: '2015-05-01', + diffDay: 2683, + keyword: 'love_day', + }, { + date: '2020-01-04', + diffDay: 974, + keyword: 'marry_day', + }, { + date: '2022-09-09', + diffDay: 6, + keyword: 'ex_day', + }]) + MockDate.reset() + config.CUSTOMIZED_DATE_LIST = null + expect(getDateDiffList(null)).toEqual([]) + }) + test('getSlotList', () => { + config.SLOT_LIST = null + expect(getSlotList()).toEqual([]) + config.SLOT_LIST = [ + // 这样配置的话,就会每次发送这句话 + { keyword: 'encourage_oneself', contents: '你主要的问题在于读书太少而想得太多' }, + // 这样配置的话,就会每次随机选一句话发送 + { + keyword: 'lover_prattle', + contents: [ + '因为太喜欢你,所以看谁都像是情敌。', + '申请成为你爱里的永久居民。', + '你很傻,你很笨,可我还是很羡慕你,因为你有我', + '遇见你,就好像捡到了100斤的运气', + ], + }, + { + keyword: 'test', + contents: [], + }, + ] + Math.random = () => 0 + expect(getSlotList()).toEqual([ + { + keyword: 'encourage_oneself', + contents: '你主要的问题在于读书太少而想得太多', + checkout: '你主要的问题在于读书太少而想得太多', + }, + { + keyword: 'lover_prattle', + contents: [ + '因为太喜欢你,所以看谁都像是情敌。', + '申请成为你爱里的永久居民。', + '你很傻,你很笨,可我还是很羡慕你,因为你有我', + '遇见你,就好像捡到了100斤的运气', + ], + checkout: '因为太喜欢你,所以看谁都像是情敌。', + }, + { + keyword: 'test', + contents: [], + checkout: '', + }, + ]) + }) + test('sendMessage', async () => { + axios.post = async () => { + throw new Error() + } + expect(await sendMessage('templateId', { id: '123', name: 'me' }, 'accessToken', [{ + name: 'name1', + value: 'value1', + color: 'color1', + }, { + name: 'name2', + value: 'value2', + color: 'color2', + }])).toEqual({ + name: 'me', + success: false, + }) + axios.post = async () => ({ + data: { + errcode: 0, + }, + }) + expect(await sendMessage('templateId', { id: '123', name: 'me' }, 'accessToken', [{ + name: 'name1', + value: 'value1', + color: 'color1', + }, { + name: 'name2', + value: 'value2', + color: 'color2', + }])).toEqual({ + name: 'me', + success: true, + }) + axios.post = async () => ({ + data: { + errcode: 40003, + }, + }) + expect(await sendMessage('templateId', { id: '123', name: 'me' }, 'accessToken', [{ + name: 'name1', + value: 'value1', + color: 'color1', + }, { + name: 'name2', + value: 'value2', + color: 'color2', + }])).toEqual({ + name: 'me', + success: false, + }) + axios.post = async () => ({ + data: { + errcode: 40036, + }, }) - test('getDateDiffList', () => { - config.CUSTOMIZED_DATE_LIST = [ - // 在一起的日子 - { keyword: 'love_day', date: '2015-05-01' }, - // 结婚纪念日 - { keyword: 'marry_day', date: '2020-01-04' }, - // 退伍日, 不用可以删掉 - { keyword: 'ex_day', date: '2022-09-09' } - // sakana日 - // {"keyword": "sakana_day", date: "2022-01-06"}, - // ... - ] - MockDate.set('2022-09-03 08:00:00') - expect(getDateDiffList()).toEqual([{ - date: '2015-05-01', - diffDay: 2683, - keyword: 'love_day' - }, { - date: '2020-01-04', - diffDay: 974, - keyword: 'marry_day' - }, { - date: '2022-09-09', - diffDay: 6, - keyword: 'ex_day' - }]) - MockDate.reset() - config.CUSTOMIZED_DATE_LIST = null - expect(getDateDiffList(null)).toEqual([]) - }) - test('getSlotList', () => { - config.SLOT_LIST = null - expect(getSlotList()).toEqual([]) - config.SLOT_LIST = [ - // 这样配置的话,就会每次发送这句话 - { keyword: 'encourage_oneself', contents: '你主要的问题在于读书太少而想得太多' }, - // 这样配置的话,就会每次随机选一句话发送 - { - keyword: 'lover_prattle', contents: [ - '因为太喜欢你,所以看谁都像是情敌。', - '申请成为你爱里的永久居民。', - '你很傻,你很笨,可我还是很羡慕你,因为你有我', - '遇见你,就好像捡到了100斤的运气' - ] - }, - { - keyword: 'test', - contents: [] - } - ] - Math.random = () => 0 - expect(getSlotList()).toEqual([ - { - keyword: 'encourage_oneself', - contents: '你主要的问题在于读书太少而想得太多', - checkout: '你主要的问题在于读书太少而想得太多' - }, - { - keyword: 'lover_prattle', - contents: [ - '因为太喜欢你,所以看谁都像是情敌。', - '申请成为你爱里的永久居民。', - '你很傻,你很笨,可我还是很羡慕你,因为你有我', - '遇见你,就好像捡到了100斤的运气' - ], - checkout: '因为太喜欢你,所以看谁都像是情敌。' - }, - { - keyword: 'test', - contents: [], - checkout: '' - } - ]) - }) - test('sendMessage', async () => { - axios.post = async () => { - throw new Error - } - expect(await sendMessage('templateId', { id: '123', name: 'me' }, 'accessToken', [{ - name: 'name1', - value: 'value1', - color: 'color1' - }, { - name: 'name2', - value: 'value2', - color: 'color2' - }])).toEqual({ - name: 'me', - success: false - }) - axios.post = async () => { - return { - data: { - errcode: 0 - } - } - } - expect(await sendMessage('templateId', { id: '123', name: 'me' }, 'accessToken', [{ - name: 'name1', - value: 'value1', - color: 'color1' - }, { - name: 'name2', - value: 'value2', - color: 'color2' - }])).toEqual({ - name: 'me', - success: true - }) - axios.post = async () => { - return { - data: { - errcode: 40003 - } - } - } - expect(await sendMessage('templateId', { id: '123', name: 'me' }, 'accessToken', [{ - name: 'name1', - value: 'value1', - color: 'color1' - }, { - name: 'name2', - value: 'value2', - color: 'color2' - }])).toEqual({ - name: 'me', - success: false - }) - axios.post = async () => { - return { - data: { - errcode: 40036 - } - } - } - expect(await sendMessage('templateId', { id: '123', name: 'me' }, 'accessToken', [{ - name: 'name1', - value: 'value1', - color: 'color1' - }, { - name: 'name2', - value: 'value2', - color: 'color2' - }])).toEqual({ - name: 'me', - success: false - }) - }) - test('sendMessageReply', async () => { - axios.post = async () => { - throw new Error - } - expect(await sendMessageReply([ - { id: '123', name: 'me' }, - { id: '456', name: 'you' } - ], 'accessToken', 'templateId', [{ - name: 'name1', - value: 'value1', - color: 'color1' - }, { - name: 'name2', - value: 'value2', - color: 'color2' - }])).toEqual({ - failPostIds: 'me,you', - failPostNum: 2, - needPostNum: 2, - successPostIds: '无', - successPostNum: 0 - }) - axios.post = async () => { - throw new Error - } - expect(await sendMessageReply([ - { id: '123', name: 'me' }, - { id: '456', name: 'you' } - ], 'accessToken')).toEqual({ - failPostIds: 'me,you', - failPostNum: 2, - needPostNum: 2, - successPostIds: '无', - successPostNum: 0 - }) - axios.post = async () => { - return { - data: { - errcode: 0 - } - } - } - expect(await sendMessageReply([ - { id: '123', name: 'me' }, - { id: '456', name: 'you' } - ], 'accessToken', 'templateId', [{ - name: 'name1', - value: 'value1', - color: 'color1' - }, { - name: 'name2', - value: 'value2', - color: 'color2' - }])).toEqual({ - failPostIds: '无', - failPostNum: 0, - needPostNum: 2, - successPostIds: 'me,you', - successPostNum: 2 - }) - }) - test('getPoetry', async () => { - config.SWITCH = {} - expect(await getPoetry()).toEqual({}) - config.SWITCH.poetry = true - axios.get = async () => { - throw new Error - } - expect(await getPoetry()).toEqual({}) - axios.get = async () => { - return { - data: { - status: 'failed' - } - } - } - expect(await getPoetry()).toEqual({}) - axios.get = async () => { - return {} - } - expect(await getPoetry()).toEqual({}) - axios.get = async () => { - return null - } - expect(await getPoetry()).toEqual({}) - axios.get = async () => { - return { - data: { - status: 'success' - } - } - } - expect(await getPoetry()).toEqual({ - author: '', - content: '', - dynasty: '', - title: '' - }) - axios.get = async () => { - return { - data: { - status: 'success', - data: { - content: '床前明月光', - origin: { - author: '李白', - dynasty: '唐', - title: '静夜思' - } - } - } - } - } - expect(await getPoetry()).toEqual({ - content: '床前明月光', + expect(await sendMessage('templateId', { id: '123', name: 'me' }, 'accessToken', [{ + name: 'name1', + value: 'value1', + color: 'color1', + }, { + name: 'name2', + value: 'value2', + color: 'color2', + }])).toEqual({ + name: 'me', + success: false, + }) + }) + test('sendMessageReply', async () => { + axios.post = async () => { + throw new Error() + } + expect(await sendMessageReply([ + { id: '123', name: 'me' }, + { id: '456', name: 'you' }, + ], 'accessToken', 'templateId', [{ + name: 'name1', + value: 'value1', + color: 'color1', + }, { + name: 'name2', + value: 'value2', + color: 'color2', + }])).toEqual({ + failPostIds: 'me,you', + failPostNum: 2, + needPostNum: 2, + successPostIds: '无', + successPostNum: 0, + }) + axios.post = async () => { + throw new Error() + } + expect(await sendMessageReply([ + { id: '123', name: 'me' }, + { id: '456', name: 'you' }, + ], 'accessToken')).toEqual({ + failPostIds: 'me,you', + failPostNum: 2, + needPostNum: 2, + successPostIds: '无', + successPostNum: 0, + }) + axios.post = async () => ({ + data: { + errcode: 0, + }, + }) + expect(await sendMessageReply([ + { id: '123', name: 'me' }, + { id: '456', name: 'you' }, + ], 'accessToken', 'templateId', [{ + name: 'name1', + value: 'value1', + color: 'color1', + }, { + name: 'name2', + value: 'value2', + color: 'color2', + }])).toEqual({ + failPostIds: '无', + failPostNum: 0, + needPostNum: 2, + successPostIds: 'me,you', + successPostNum: 2, + }) + }) + test('getPoetry', async () => { + config.SWITCH = {} + expect(await getPoetry()).toEqual({}) + config.SWITCH.poetry = true + axios.get = async () => { + throw new Error() + } + expect(await getPoetry()).toEqual({}) + axios.get = async () => ({ + data: { + status: 'failed', + }, + }) + expect(await getPoetry()).toEqual({}) + axios.get = async () => ({}) + expect(await getPoetry()).toEqual({}) + axios.get = async () => null + expect(await getPoetry()).toEqual({}) + axios.get = async () => ({ + data: { + status: 'success', + }, + }) + expect(await getPoetry()).toEqual({ + author: '', + content: '', + dynasty: '', + title: '', + }) + axios.get = async () => ({ + data: { + status: 'success', + data: { + content: '床前明月光', + origin: { author: '李白', dynasty: '唐', - title: '静夜思' - }) - }) - test('selfDayjs', () => { - dayjs.tz.guess = () => 'UTC' - expect(selfDayjs('2022-09-09 12:00:00').hour()).toEqual(4) - }) - test('getConstellationFortune', async () => { - config.SWITCH = {} - expect(getConstellationFortune()).resolves.toEqual([]) - config.SWITCH.horoscope = true - expect(getConstellationFortune()).resolves.toEqual([]) - expect(getConstellationFortune('09-02')).resolves.toEqual([]) - expect(getConstellationFortune('09-02', '昨日')).resolves.toEqual([]) - axios.get = async () => { - throw new Error - } - config.IS_SHOW_COLOR = true - expect(getConstellationFortune('09-02', '今日')).resolves.toEqual([{ - color: '#000000', - value: '今日综合运势: 福星高照! 去争取自己想要的一切吧!', - name: 'comprehensive_horoscope' - }, { - color: '#000000', - value: '今日爱情运势: 福星高照! 去争取自己想要的一切吧!', - name: 'love_horoscope' - }, { - color: '#000000', - value: '今日事业学业: 福星高照! 去争取自己想要的一切吧!', - name: 'career_horoscope' - }, { - color: '#000000', - value: '今日财富运势: 福星高照! 去争取自己想要的一切吧!', - name: 'wealth_horoscope' - }, { - color: '#000000', - value: '今日健康运势: 福星高照! 去争取自己想要的一切吧!', - name: 'healthy_horoscope' - }]) - axios.get = async () => { - return { - data: ` + title: '静夜思', + }, + }, + }, + }) + expect(await getPoetry()).toEqual({ + content: '床前明月光', + author: '李白', + dynasty: '唐', + title: '静夜思', + }) + }) + test('selfDayjs', () => { + dayjs.tz.guess = () => 'UTC' + expect(selfDayjs('2022-09-09 12:00:00').hour()).toEqual(4) + }) + test('getConstellationFortune', async () => { + config.SWITCH = {} + expect(getConstellationFortune()).resolves.toEqual([]) + config.SWITCH.horoscope = true + expect(getConstellationFortune()).resolves.toEqual([]) + expect(getConstellationFortune('09-02')).resolves.toEqual([]) + expect(getConstellationFortune('09-02', '昨日')).resolves.toEqual([]) + axios.get = async () => { + throw new Error() + } + config.IS_SHOW_COLOR = true + expect(getConstellationFortune('09-02', '今日')).resolves.toEqual([{ + color: '#000000', + value: '今日综合运势: 福星高照! 去争取自己想要的一切吧!', + name: 'comprehensive_horoscope', + }, { + color: '#000000', + value: '今日爱情运势: 福星高照! 去争取自己想要的一切吧!', + name: 'love_horoscope', + }, { + color: '#000000', + value: '今日事业学业: 福星高照! 去争取自己想要的一切吧!', + name: 'career_horoscope', + }, { + color: '#000000', + value: '今日财富运势: 福星高照! 去争取自己想要的一切吧!', + name: 'wealth_horoscope', + }, { + color: '#000000', + value: '今日健康运势: 福星高照! 去争取自己想要的一切吧!', + name: 'healthy_horoscope', + }]) + axios.get = async () => ({ + data: `
@@ -666,46 +656,41 @@ describe('services', () => {
- ` - } - } - expect(getConstellationFortune('09-02', '今日')).resolves.toEqual([{ - color: '#000000', - value: '今日综合运势: 福星高照! 去争取自己想要的一切吧!', - name: 'comprehensive_horoscope' - }, { - color: '#000000', - value: '今日爱情运势: 单身的遇到一些契机,打开彼此的心扉。恋爱中的得到恋人行动上的重视,也会收到承诺的兑现。', - name: 'love_horoscope' - }]) - }) - test('getHolidaytts', async () => { - config.SWITCH = {} - expect(await getHolidaytts()).toEqual(null) - config.SWITCH.holidaytts = true - axios.get = async () => { - throw new Error - } - expect(await getHolidaytts()).toEqual(null) - axios.get = async () => { - return { - status: 200, - data: { - code: 0, - tts: 'xxx' - } - } - } - expect(await getHolidaytts()).toEqual('xxx') - axios.get = async () => { - return { - status: 200, - data: { - code: 1, - tts: 'xxx' - } - } - } - expect(await getHolidaytts()).toEqual(null) + `, + }) + expect(getConstellationFortune('09-02', '今日')).resolves.toEqual([{ + color: '#000000', + value: '今日综合运势: 福星高照! 去争取自己想要的一切吧!', + name: 'comprehensive_horoscope', + }, { + color: '#000000', + value: '今日爱情运势: 单身的遇到一些契机,打开彼此的心扉。恋爱中的得到恋人行动上的重视,也会收到承诺的兑现。', + name: 'love_horoscope', + }]) + }) + test('getHolidaytts', async () => { + config.SWITCH = {} + expect(await getHolidaytts()).toEqual(null) + config.SWITCH.holidaytts = true + axios.get = async () => { + throw new Error() + } + expect(await getHolidaytts()).toEqual(null) + axios.get = async () => ({ + status: 200, + data: { + code: 0, + tts: 'xxx', + }, + }) + expect(await getHolidaytts()).toEqual('xxx') + axios.get = async () => ({ + status: 200, + data: { + code: 1, + tts: 'xxx', + }, }) + expect(await getHolidaytts()).toEqual(null) + }) }) diff --git a/__tests__/utils.spec.js b/__tests__/utils.spec.js index d81ad80cc6..f12e9f43bc 100644 --- a/__tests__/utils.spec.js +++ b/__tests__/utils.spec.js @@ -1,62 +1,65 @@ -import { toLowerLine, getColor, randomNum, sortBirthdayTime, getConstellation } from '../src/utils' -import { config } from '../config' import MockDate from 'mockdate' import { jest } from '@jest/globals' +import { + toLowerLine, getColor, randomNum, sortBirthdayTime, getConstellation, +} from '../src/utils' +import { config } from '../config' + jest.mock('../config') describe('utils', () => { - test.each([ - ['date', 'date'], - ['minTemperature', 'min_temperature'], - ['earthyLoveWords', 'earthy_love_words'], - ['_earthyLoveWords', 'earthy_love_words'] - ])('%# toLowerLine %s', (src, expected) => { - expect(toLowerLine(src)).toEqual(expected) - }) + test.each([ + ['date', 'date'], + ['minTemperature', 'min_temperature'], + ['earthyLoveWords', 'earthy_love_words'], + ['_earthyLoveWords', 'earthy_love_words'], + ])('%# toLowerLine %s', (src, expected) => { + expect(toLowerLine(src)).toEqual(expected) + }) - test('getColor', () => { - config.IS_SHOW_COLOR = false - expect(getColor()).toBeUndefined() - config.IS_SHOW_COLOR = true - expect(getColor()).toMatch(/#[\dA-Fa-f]{6}/) - }) + test('getColor', () => { + config.IS_SHOW_COLOR = false + expect(getColor()).toBeUndefined() + config.IS_SHOW_COLOR = true + expect(getColor()).toMatch(/#[\dA-Fa-f]{6}/) + }) - test.each([ - [1, 5], - [10, 20], - [50, 80] - ])('%# randomNum', (min, max) => { - const random = randomNum(min, max) - expect(random).toBeGreaterThanOrEqual(min) - expect(random).toBeLessThanOrEqual(max) - }) + test.each([ + [1, 5], + [10, 20], + [50, 80], + ])('%# randomNum', (min, max) => { + const random = randomNum(min, max) + expect(random).toBeGreaterThanOrEqual(min) + expect(random).toBeLessThanOrEqual(max) + }) - test('sortBirthdayTime', () => { - MockDate.set('2022-02-09') - expect(sortBirthdayTime([ - { - date: '02-04' - }, - { - date: '03-06' - }, - { - date: '09-09' - } - ]).map((it) => ({ date: it.date }))).toEqual([ - { - date: '03-06' - }, - { - date: '09-09' - }, - { - date: '02-04' - } - ]) - MockDate.reset() - }) - test('getConstellation', () => { - expect(getConstellation('09-22')).toEqual({cn: '处女', en: 'virgo'}) - expect(getConstellation('09-23')).toEqual({cn: '天秤', en: 'libra'}) - }) + test('sortBirthdayTime', () => { + MockDate.set('2022-02-09') + expect(sortBirthdayTime([ + { + date: '02-04', + }, + { + date: '03-06', + }, + { + date: '09-09', + }, + ]).map((it) => ({ date: it.date }))).toEqual([ + { + date: '03-06', + }, + { + date: '09-09', + }, + { + date: '02-04', + }, + ]) + MockDate.reset() + }) + test('getConstellation', () => { + expect(getConstellation('09-22')).toEqual({ cn: '处女', en: 'virgo' }) + expect(getConstellation('09-23')).toEqual({ cn: '天秤', en: 'libra' }) + }) }) diff --git a/main-for-test.js b/main-for-test.js index b8c99ff677..0376132d1e 100644 --- a/main-for-test.js +++ b/main-for-test.js @@ -3,10 +3,10 @@ import { getAggregatedData } from './src/services/index.js' /** * 参数测试函数 */ -export const mainForTest = async () => { - // 处理好的用户数据 - const aggregatedData = await getAggregatedData() - aggregatedData.forEach(item => { - console.log(item.wxTemplateParams) - }) -} \ No newline at end of file +export default async function mainForTest() { + // 处理好的用户数据 + const aggregatedData = await getAggregatedData() + aggregatedData.forEach((item) => { + console.log(item.wxTemplateParams) + }) +} diff --git a/main.js b/main.js index 9a36613389..ad0794f97f 100644 --- a/main.js +++ b/main.js @@ -1,16 +1,16 @@ +import schedule from 'node-schedule' +import dayjs from 'dayjs' import { getAccessToken, sendMessageReply, getAggregatedData, - getCallbackTemplateParams + getCallbackTemplateParams, } from './src/services/index.js' import { config } from './config/index.js' -import { cornTime } from "./config/server-config.js"; -import { mainForTest } from './main-for-test.js' -import schedule from 'node-schedule' -import dayjs from "dayjs"; +import { cornTime } from './config/server-config.js' +import mainForTest from './main-for-test.js' -export const mainForProd = async () => { +export default async function mainForProd() { // 获取accessToken console.log('\n\n') console.log(dayjs().format('YYYY-MM-DD HH:mm:ss')) @@ -39,19 +39,18 @@ export const mainForProd = async () => { successPostNum, failPostNum, successPostIds, - failPostIds + failPostIds, } = await sendMessageReply(aggregatedData, accessToken) console.log('【常规模板】推送结束') console.log('---') - // 获取回执信息 const callbackTemplateParams = getCallbackTemplateParams({ needPostNum, successPostNum, failPostNum, successPostIds, - failPostIds + failPostIds, }) // 发送回执 @@ -65,15 +64,15 @@ export const mainForProd = async () => { } const main = () => { - if (process.env.APP_MODE === 'params-log'){ + if (process.env.APP_MODE === 'params-log') { mainForTest() } else if (process.env.APP_MODE === 'server') { console.log('======【定时推送服务已启动, enjoying it】======') console.log(`目前定时推送的配置为:【${cornTime}】`) schedule.scheduleJob(cornTime, () => { mainForProd() - }); - } else if (process.env.APP_MODE === 'prod'){ + }) + } else if (process.env.APP_MODE === 'prod') { mainForProd() } } diff --git a/package-lock.json b/package-lock.json index dba9032b77..c83654a6a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,12 @@ }, "devDependencies": { "cross-env": "^7.0.3", + "eslint": "^8.23.1", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-plugin-import": "^2.26.0", + "husky": "^8.0.1", "jest": "^29.0.1", + "lint-staged": "^13.0.3", "mockdate": "^3.0.5" } }, @@ -859,6 +864,100 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -1210,6 +1309,41 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@sinclair/typebox": { "version": "0.24.34", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.34.tgz", @@ -1316,6 +1450,12 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmmirror.com/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "node_modules/@types/node": { "version": "18.7.14", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.14.tgz", @@ -1385,6 +1525,15 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -1404,6 +1553,31 @@ "node": ">= 6.0.0" } }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -1459,6 +1633,55 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/array-includes": { + "version": "3.1.5", + "resolved": "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1700,6 +1923,81 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -1745,6 +2043,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1756,12 +2060,27 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "9.4.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-9.4.0.tgz", + "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -1936,6 +2255,30 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -1947,6 +2290,12 @@ "node": ">=12" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/electron-to-chromium": { "version": "1.4.247", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.247.tgz", @@ -1985,6 +2334,63 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-abstract": { + "version": "1.20.2", + "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.20.2.tgz", + "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.2", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2024,51 +2430,442 @@ "source-map": "~0.6.1" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/eslint": { + "version": "8.23.1", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.23.1.tgz", + "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.2", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmmirror.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, "engines": { - "node": ">=4.0" + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmmirror.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmmirror.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/espree": { + "version": "9.4.0", + "resolved": "https://registry.npmmirror.com/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { "node": ">=10" } }, @@ -2097,6 +2894,40 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -2108,6 +2939,15 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -2117,6 +2957,18 @@ "bser": "2.1.1" } }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -2142,6 +2994,25 @@ "node": ">=8" } }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "node_modules/follow-redirects": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", @@ -2179,6 +3050,27 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -2228,6 +3120,19 @@ "node": ">=10" } }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -2245,6 +3150,18 @@ "node": "*" } }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -2254,12 +3171,35 @@ "node": ">=4" } }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -2271,6 +3211,12 @@ "node": ">= 0.4.0" } }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2302,6 +3248,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -2353,6 +3311,18 @@ "node": ">=10.17.0" } }, + "node_modules/husky": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -2364,6 +3334,37 @@ "node": ">=0.10.0" } }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -2389,6 +3390,15 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2405,12 +3415,57 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-callable": { + "version": "1.2.6", + "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.6.tgz", + "integrity": "sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/is-core-module": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", @@ -2420,6 +3475,27 @@ "has": "^1.0.3" } }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -2438,6 +3514,18 @@ "node": ">=6" } }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-nan": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", @@ -2453,6 +3541,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2462,11 +3559,45 @@ "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -2476,6 +3607,39 @@ "node": ">=8" } }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3113,6 +4277,12 @@ "node": ">=10" } }, + "node_modules/js-sdsl": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/js-sdsl/-/js-sdsl-4.1.4.tgz", + "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==", + "dev": true + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3195,6 +4365,18 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "node_modules/json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", @@ -3237,12 +4419,191 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/lint-staged": { + "version": "13.0.3", + "resolved": "https://registry.npmmirror.com/lint-staged/-/lint-staged-13.0.3.tgz", + "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", + "dev": true, + "dependencies": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.17", + "commander": "^9.3.0", + "debug": "^4.3.4", + "execa": "^6.1.0", + "lilconfig": "2.0.5", + "listr2": "^4.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.1.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/lint-staged/node_modules/execa": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/lint-staged/node_modules/human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/lint-staged/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -3255,6 +4616,55 @@ "node": ">=8" } }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/long-timeout": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", @@ -3312,6 +4722,15 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -3365,6 +4784,12 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, "node_modules/mockdate": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", @@ -3433,6 +4858,12 @@ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -3441,6 +4872,49 @@ "node": ">= 0.4" } }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3514,6 +4988,18 @@ "node": ">=6" } }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -3523,6 +5009,18 @@ "node": ">=6" } }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -3579,6 +5077,15 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -3594,6 +5101,18 @@ "node": ">=8.6" } }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", @@ -3677,12 +5196,41 @@ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -3741,6 +5289,65 @@ "node": ">=10" } }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.5.6", + "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.5.6.tgz", + "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -3793,6 +5400,17 @@ "node": ">=8" } }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -3814,6 +5432,37 @@ "node": ">=8" } }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.1.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.1.1.tgz", + "integrity": "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/sorted-array-functions": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", @@ -3856,6 +5505,15 @@ "node": ">=10" } }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -3883,6 +5541,28 @@ "node": ">=8" } }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -3988,6 +5668,18 @@ "node": ">=8" } }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -4040,6 +5732,45 @@ "node": ">=12" } }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -4069,6 +5800,18 @@ "node": ">=10" } }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, "node_modules/universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", @@ -4093,6 +5836,15 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -4198,6 +5950,19 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -4287,6 +6052,15 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yaml": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.1.1.tgz", + "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/yargs": { "version": "17.5.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", @@ -4966,6 +6740,84 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@eslint/eslintrc": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -5244,6 +7096,32 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@sinclair/typebox": { "version": "0.24.34", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.34.tgz", @@ -5347,6 +7225,12 @@ "@types/istanbul-lib-report": "*" } }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmmirror.com/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "@types/node": { "version": "18.7.14", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.14.tgz", @@ -5406,6 +7290,13 @@ } } }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -5419,6 +7310,28 @@ "debug": "4" } }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -5462,6 +7375,43 @@ "sprintf-js": "~1.0.2" } }, + "array-includes": { + "version": "3.1.5", + "resolved": "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -5658,6 +7608,65 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -5696,6 +7705,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -5704,12 +7719,24 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "9.4.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-9.4.0.tgz", + "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, "convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -5839,6 +7866,24 @@ "integrity": "sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -5847,6 +7892,12 @@ "webidl-conversions": "^7.0.0" } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "electron-to-chromium": { "version": "1.4.247", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.247.tgz", @@ -5879,6 +7930,57 @@ "is-arrayish": "^0.2.1" } }, + "es-abstract": { + "version": "1.20.2", + "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.20.2.tgz", + "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.2", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -5903,11 +8005,325 @@ "source-map": "~0.6.1" } }, + "eslint": { + "version": "8.23.1", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.23.1.tgz", + "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.2", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmmirror.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmmirror.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmmirror.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.4.0", + "resolved": "https://registry.npmmirror.com/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -5954,6 +8370,36 @@ "jest-util": "^29.0.1" } }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -5965,6 +8411,15 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -5974,6 +8429,15 @@ "bser": "2.1.1" } }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -5993,6 +8457,22 @@ "path-exists": "^4.0.0" } }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "follow-redirects": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", @@ -6019,6 +8499,24 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -6053,6 +8551,16 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -6067,18 +8575,47 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -6087,6 +8624,12 @@ "function-bind": "^1.1.1" } }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -6106,6 +8649,15 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -6145,6 +8697,12 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "husky": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", + "dev": true + }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -6153,6 +8711,30 @@ "safer-buffer": ">= 2.1.2 < 3.0.0" } }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, "import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -6169,6 +8751,12 @@ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -6185,12 +8773,48 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.6", + "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.6.tgz", + "integrity": "sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q==", + "dev": true + }, "is-core-module": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", @@ -6200,6 +8824,21 @@ "has": "^1.0.3" } }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -6212,6 +8851,15 @@ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, "is-nan": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", @@ -6221,23 +8869,84 @@ "define-properties": "^1.1.3" } }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -6733,6 +9442,12 @@ } } }, + "js-sdsl": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/js-sdsl/-/js-sdsl-4.1.4.tgz", + "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6795,6 +9510,18 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", @@ -6822,12 +9549,145 @@ "type-check": "~0.3.2" } }, + "lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "dev": true + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "lint-staged": { + "version": "13.0.3", + "resolved": "https://registry.npmmirror.com/lint-staged/-/lint-staged-13.0.3.tgz", + "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", + "dev": true, + "requires": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.17", + "commander": "^9.3.0", + "debug": "^4.3.4", + "execa": "^6.1.0", + "lilconfig": "2.0.5", + "listr2": "^4.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.1.1" + }, + "dependencies": { + "execa": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + } + } + }, + "listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -6837,6 +9697,48 @@ "p-locate": "^4.1.0" } }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, "long-timeout": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", @@ -6885,6 +9787,12 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -6923,6 +9831,12 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, "mockdate": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", @@ -6982,11 +9896,51 @@ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -7047,12 +10001,30 @@ } } }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -7097,6 +10069,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -7109,6 +10087,12 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true + }, "pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", @@ -7173,12 +10157,35 @@ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -7222,6 +10229,55 @@ "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", "dev": true }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.5.6", + "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.5.6.tgz", + "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -7262,6 +10318,17 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -7280,6 +10347,30 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.1.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.1.1.tgz", + "integrity": "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + } + } + }, "sorted-array-functions": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", @@ -7316,6 +10407,12 @@ "escape-string-regexp": "^2.0.0" } }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -7337,6 +10434,28 @@ "strip-ansi": "^6.0.1" } }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -7415,6 +10534,18 @@ "minimatch": "^3.0.4" } }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -7455,6 +10586,41 @@ "punycode": "^2.1.1" } }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + } + } + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -7475,6 +10641,18 @@ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, "universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", @@ -7490,6 +10668,15 @@ "picocolors": "^1.0.0" } }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, "url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -7571,6 +10758,19 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -7631,6 +10831,12 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "yaml": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.1.1.tgz", + "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "dev": true + }, "yargs": { "version": "17.5.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", diff --git a/package.json b/package.json index 3c079565a7..9e6d326275 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,8 @@ "scripts": { "dev": "cross-env APP_MODE=prod node main.js", "test": "cross-env NODE_OPTIONS=--experimental-vm-modules npx jest", + "prepare": "husky install", + "lint": "eslint **/*.js --fix", "params-log": "cross-env APP_MODE=params-log node main.js", "server": "cross-env APP_MODE=server node main.js", "pm2start": "pm2 start start_pm2.js --name @wechat-push" @@ -33,10 +35,18 @@ }, "devDependencies": { "cross-env": "^7.0.3", + "eslint": "^8.23.1", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-plugin-import": "^2.26.0", + "husky": "^8.0.1", "jest": "^29.0.1", + "lint-staged": "^13.0.3", "mockdate": "^3.0.5" }, "jest": { "transform": {} + }, + "lint-staged": { + "*.js": "eslint --fix" } } diff --git a/src/services/index.js b/src/services/index.js index a103e2057e..f91f159dcc 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -1,7 +1,5 @@ - import axios from 'axios' import dayjs from 'dayjs' -import { Lunar } from 'lunar-javascript' import { JSDOM } from 'jsdom' import { config } from '../../config/index.js' @@ -11,8 +9,8 @@ import { randomNum, sortBirthdayTime, getColor, - toLowerLine - } from '../utils/index.js' + toLowerLine, +} from '../utils/index.js' import { selfDayjs, timeZone } from '../utils/set-def-dayjs.js' axios.defaults.timeout = 10000 @@ -42,11 +40,10 @@ export const getAccessToken = async () => { console.log('已获取appId', appId) console.log('已获取appSecret', appSecret) - - const postUrl = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${ appId }&secret=${ appSecret }` + const postUrl = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appId}&secret=${appSecret}` try { - const res = await axios.get(postUrl).catch(err => err) + const res = await axios.get(postUrl).catch((err) => err) if (res.status === 200 && res.data && res.data.access_token) { accessToken = res.data.access_token console.log('---') @@ -72,25 +69,24 @@ export const getAccessToken = async () => { * @param {*} city 城市 */ export const getWeather = async (province, city) => { - if (config.SWITCH && !config.SWITCH.weather) { return {} } - if (!CITY_INFO[province] || !CITY_INFO[province][city] || !CITY_INFO[province][city]['AREAID']) { + if (!CITY_INFO[province] || !CITY_INFO[province][city] || !CITY_INFO[province][city].AREAID) { console.error('配置文件中找不到相应的省份或城市') return {} } - const address = CITY_INFO[province][city]['AREAID'] + const address = CITY_INFO[province][city].AREAID - const url = `http://d1.weather.com.cn/dingzhi/${ address }.html?_=${ selfDayjs().valueOf() }` + const url = `http://d1.weather.com.cn/dingzhi/${address}.html?_=${selfDayjs().valueOf()}` const res = await axios.get(url, { headers: { - 'Referer': `http://www.weather.com.cn/weather1d/${ address }.shtml`, - 'User-Agent': `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36` - } - }).catch(err => err) + Referer: `http://www.weather.com.cn/weather1d/${address}.shtml`, + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36', + }, + }).catch((err) => err) try { if (res.status === 200 && res.data) { @@ -124,9 +120,9 @@ export const getCIBA = async () => { const res = await axios.get(url, { headers: { 'Content-Type': 'application/json', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36' - } - }).catch(err => err) + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36', + }, + }).catch((err) => err) if (res.status === 200 && res) { return res.data @@ -140,13 +136,12 @@ export const getCIBA = async () => { * @returns */ export const getHolidaytts = async () => { - if (config.SWITCH && !config.SWITCH.holidaytts) { return null } const url = 'https://wangxinleo.cn/api/wx-push/holiday/getHolidaytts' - const res = await axios.get(url).catch(err => err) + const res = await axios.get(url).catch((err) => err) if (res.status === 200 && res.data && res.data.code === 0) { return res.data.tts @@ -161,16 +156,15 @@ export const getHolidaytts = async () => { * @returns */ export const getOneTalk = async (type) => { - if (config.SWITCH && !config.SWITCH.oneTalk) { return {} } - const filterQuery = TYPE_LIST.filter(item => item.name === type) + const filterQuery = TYPE_LIST.filter((item) => item.name === type) const query = filterQuery.length ? filterQuery[0].type : TYPE_LIST[randomNum(0, 7)].type - const url = `https://v1.hitokoto.cn/?c=${ query }` + const url = `https://v1.hitokoto.cn/?c=${query}` - const res = await axios.get(url).catch(err => err) + const res = await axios.get(url).catch((err) => err) if (res && res.status === 200) { return res.data @@ -178,7 +172,6 @@ export const getOneTalk = async (type) => { console.error('每日一言: 发生错误', res) return {} - } /** * 从沙雕APP开放接口中获取数据 @@ -189,20 +182,20 @@ export const getWordsFromApiShadiao = async (type) => { const typeNameMap = { chp: '土味情话(彩虹屁)', pyq: '朋友圈文案', - du: '毒鸡汤' + du: '毒鸡汤', } if (!['chp', 'pyq', 'du'].includes(type)) { console.error('type参数有误,应为chp, pyq, du的其中一个') return '' } - const url = `https://api.shadiao.pro/${ type }` + const url = `https://api.shadiao.pro/${type}` try { const res = await axios.get(url, { - responseType: 'json' - }).catch(err => err) - return res.data && res.data.data && res.data.data.text || '' + responseType: 'json', + }).catch((err) => err) + return (res.data && res.data.data && res.data.data.text) || '' } catch (e) { - console.error(`${ typeNameMap[type] }:发生错误`, e) + console.error(`${typeNameMap[type]}:发生错误`, e) return '' } } @@ -215,7 +208,7 @@ export const getEarthyLoveWords = async () => { if (config.SWITCH && !config.SWITCH.earthyLoveWords) { return '' } - return await getWordsFromApiShadiao('chp') + return getWordsFromApiShadiao('chp') } /** @@ -223,12 +216,11 @@ export const getEarthyLoveWords = async () => { * @returns {Promise} 朋友圈文案内容 */ export const getMomentCopyrighting = async () => { - if (config.SWITCH && !config.SWITCH.momentCopyrighting) { return '' } - return await getWordsFromApiShadiao('pyq') + return getWordsFromApiShadiao('pyq') } /** @@ -236,19 +228,17 @@ export const getMomentCopyrighting = async () => { * @returns {Promise} 毒鸡汤内容 */ export const getPoisonChickenSoup = async () => { - if (config.SWITCH && !config.SWITCH.poisonChickenSoup) { return '' } - return await getWordsFromApiShadiao('du') + return getWordsFromApiShadiao('du') } /** * 古诗古文 * @returns {Promise<{}|{dynasty: string, author: string, title: string, content: string}>} 古诗内容 标题 作者 朝代 */ export const getPoetry = async () => { - if (config.SWITCH && !config.SWITCH.poetry) { return {} } @@ -257,10 +247,10 @@ export const getPoetry = async () => { try { const res = await axios.get(url, { headers: { - 'X-User-Token': 'FW8KNlfULPtZ9Ci6aNy8aTfPJPwI+/Ln' + 'X-User-Token': 'FW8KNlfULPtZ9Ci6aNy8aTfPJPwI+/Ln', }, - responseType: 'json' - }).catch(err => err) + responseType: 'json', + }).catch((err) => err) const { status, data, warning } = res.data || {} if (status !== 'success') { console.error('古诗古文:发生错误', warning || '') @@ -272,7 +262,7 @@ export const getPoetry = async () => { content, title, author, - dynasty + dynasty, } } catch (e) { console.error('古诗古文:发生错误', e) @@ -286,7 +276,6 @@ export const getPoetry = async () => { * @return */ export const getBirthdayMessage = (festivals) => { - if (config.SWITCH && !config.SWITCH.birthdayMessage) { return '' } @@ -305,51 +294,49 @@ export const getBirthdayMessage = (festivals) => { return { ...it, soarYear: date.format('YYYY'), - solarDate: date.format('MM-DD') + solarDate: date.format('MM-DD'), } }) let resMessage = '' birthdayList.forEach((item, index) => { if ( - !config.FESTIVALS_LIMIT || - (config.FESTIVALS_LIMIT && index < config.FESTIVALS_LIMIT) + !config.FESTIVALS_LIMIT + || (config.FESTIVALS_LIMIT && index < config.FESTIVALS_LIMIT) ) { let message = null // 生日相关 if (item.type === '生日') { // 获取周岁 - let age; + let age if (!item.useLunar) { - age = selfDayjs().diff(item.year + '-' + item.date, 'year') + age = selfDayjs().diff(`${item.year}-${item.date}`, 'year') } else { age = selfDayjs().year() - item.year - 1 } if (item.diffDay === 0) { - message = `今天是 ${ item.name } 的${ age && item.isShowAge ? (item.useLunar ? 1 : 0) + age + '岁' : '' }生日哦,祝${ item.name }生日快乐!` + message = `今天是 ${item.name} 的${age && item.isShowAge ? `${(item.useLunar ? 1 : 0) + age}岁` : ''}生日哦,祝${item.name}生日快乐!` } else { - message = `距离 ${ item.name } 的${ age && item.isShowAge ? age + 1 + '岁' : '' }生日还有${ item.diffDay }天` + message = `距离 ${item.name} 的${age && item.isShowAge ? `${age + 1}岁` : ''}生日还有${item.diffDay}天` } } // 节日相关 if (item.type === '节日') { if (item.diffDay === 0) { - message = `今天是 ${ item.name } 哦,要开心!` + message = `今天是 ${item.name} 哦,要开心!` } else { - message = `距离 ${ item.name } 还有${ item.diffDay }天` + message = `距离 ${item.name} 还有${item.diffDay}天` } } // 存储数据 if (message) { - resMessage += `${ message } \n` + resMessage += `${message} \n` } - } - }) return resMessage @@ -367,10 +354,10 @@ export const getDateDiffList = (customizedDateList) => { } const dateList = customizedDateList || config.CUSTOMIZED_DATE_LIST - dateList.forEach(item => { - item['diffDay'] = Math.ceil(selfDayjs().diff(selfDayjs(item.date), 'day', true)) - if (item['diffDay'] <= 0) { - item['diffDay'] = Math.abs(Math.floor(selfDayjs().diff(selfDayjs(item.date), 'day', true))) + dateList.forEach((item) => { + item.diffDay = Math.ceil(selfDayjs().diff(selfDayjs(item.date), 'day', true)) + if (item.diffDay <= 0) { + item.diffDay = Math.abs(Math.floor(selfDayjs().diff(selfDayjs(item.date), 'day', true))) } }) @@ -387,13 +374,13 @@ export const getSlotList = () => { } const slotList = config.SLOT_LIST - slotList.forEach(item => { + slotList.forEach((item) => { if (Object.prototype.toString.call(item.contents) === '[object Array]' && item.contents.length > 0) { - item['checkout'] = item.contents[Math.floor(Math.random() * item.contents.length + 1) - 1] + item.checkout = item.contents[Math.floor(Math.random() * item.contents.length + 1) - 1] } else if (Object.prototype.toString.call(item.contents) === '[object String]') { - item['checkout'] = item.contents + item.checkout = item.contents } else { - item['checkout'] = '' + item.checkout = '' } }) @@ -409,55 +396,53 @@ export const getSlotList = () => { * @returns */ export const sendMessage = async (templateId, user, accessToken, params) => { - const url = `https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${ accessToken }` + const url = `https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${accessToken}` const wxTemplateData = {} if (Object.prototype.toString.call(params) === '[object Array]') { - params.map(item => { + params.forEach((item) => { wxTemplateData[item.name] = { value: item.value, - color: item.color + color: item.color, } }) } - // 组装数据 const data = { - 'touser': user.id, - 'template_id': templateId, - 'url': user.openUrl || 'https://wangxinleo.cn', - 'topcolor': '#FF0000', - 'data': wxTemplateData + touser: user.id, + template_id: templateId, + url: user.openUrl || 'https://wangxinleo.cn', + topcolor: '#FF0000', + data: wxTemplateData, } // 发送消息 const res = await axios.post(url, data, { headers: { 'Content-Type': 'application/json', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36' - } - }).catch(err => err) - + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36', + }, + }).catch((err) => err) if (res.data && res.data.errcode === 0) { - console.log(`${ user.name }: 推送消息成功`) + console.log(`${user.name}: 推送消息成功`) return { name: user.name, - success: true + success: true, } } if (res.data && res.data.errcode === 40003) { - console.error(`${ user.name }: 推送消息失败! id填写不正确!应该填用户扫码后生成的id!要么就是填错了!请检查配置文件!`) + console.error(`${user.name}: 推送消息失败! id填写不正确!应该填用户扫码后生成的id!要么就是填错了!请检查配置文件!`) } else if (res.data && res.data.errcode === 40036) { - console.error(`${ user.name }: 推送消息失败! 模板id填写不正确!应该填模板id!要么就是填错了!请检查配置文件!`) + console.error(`${user.name}: 推送消息失败! 模板id填写不正确!应该填模板id!要么就是填错了!请检查配置文件!`) } else { - console.error(`${ user.name }: 推送消息失败`, res.data) + console.error(`${user.name}: 推送消息失败`, res.data) } return { name: user.name, - success: false + success: false, } } @@ -481,11 +466,11 @@ export const sendMessageReply = async (users, accessToken, templateId = null, pa templateId || user.useTemplateId, user, accessToken, - params || user.wxTemplateParams + params || user.wxTemplateParams, )) } - const resList = await Promise.all(allPromise); - resList.forEach(item => { + const resList = await Promise.all(allPromise) + resList.forEach((item) => { if (item.success) { successPostNum++ successPostIds.push(item.name) @@ -500,7 +485,7 @@ export const sendMessageReply = async (users, accessToken, templateId = null, pa successPostNum, failPostNum, successPostIds: successPostIds.length ? successPostIds.join(',') : '无', - failPostIds: failPostIds.length ? failPostIds.join(',') : '无' + failPostIds: failPostIds.length ? failPostIds.join(',') : '无', } } @@ -511,7 +496,6 @@ export const sendMessageReply = async (users, accessToken, templateId = null, pa * @returns */ export async function getConstellationFortune(date, dateType) { - if (config.SWITCH && !config.SWITCH.horoscope) { return [] } @@ -524,19 +508,19 @@ export async function getConstellationFortune(date, dateType) { const periods = ['今日', '明日', '本周', '本月', '今年'] const defaultType = [{ name: '综合运势', - key: 'comprehensiveHoroscope' + key: 'comprehensiveHoroscope', }, { name: '爱情运势', - key: 'loveHoroscope' + key: 'loveHoroscope', }, { name: '事业学业', - key: 'careerHoroscope' + key: 'careerHoroscope', }, { name: '财富运势', - key: 'wealthHoroscope' + key: 'wealthHoroscope', }, { name: '健康运势', - key: 'healthyHoroscope' + key: 'healthyHoroscope', }] // 未填写时段,则取随机 @@ -544,7 +528,7 @@ export async function getConstellationFortune(date, dateType) { dateType = periods[Math.floor(Math.random() * periods.length + 1) - 1] } - const dateTypeIndex = periods.indexOf(dateType); + const dateTypeIndex = periods.indexOf(dateType) if (dateTypeIndex === -1) { console.error('星座日期类型horoscopeDateType错误, 请确认是否按要求填写!') return res @@ -554,29 +538,29 @@ export async function getConstellationFortune(date, dateType) { const { en: constellation } = getConstellation(date) const url = `https://www.xzw.com/fortune/${constellation}/${dateTypeIndex}.html` try { - const { data } = await axios.get(url).catch(err => err) + const { data } = await axios.get(url).catch((err) => err) if (data) { - const jsdom = new JSDOM(data); - defaultType.map((item, index) => { - let value = jsdom.window.document.querySelector(`.c_cont p strong.p${ index + 1 }`).nextElementSibling.innerHTML.replace(/ { + let value = jsdom.window.document.querySelector(`.c_cont p strong.p${index + 1}`).nextElementSibling.innerHTML.replace(/ { - const value = DEFAULT_OUTPUT.constellationFortune; + defaultType.forEach((item) => { + const value = DEFAULT_OUTPUT.constellationFortune res.push({ name: toLowerLine(item.key), value: `${dateType}${item.name}: ${value}`, - color: getColor() + color: getColor(), }) }) } @@ -594,19 +578,18 @@ export async function getConstellationFortune(date, dateType) { */ // istanbul ignore next export const getAggregatedData = async () => { - - const weekList = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"] + const weekList = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'] // 获取金山词霸每日一句 const { content: noteEn = DEFAULT_OUTPUT.noteEn, - note: noteCh = DEFAULT_OUTPUT.noteCh + note: noteCh = DEFAULT_OUTPUT.noteCh, } = await getCIBA() // 获取下一休息日 const holidaytts = await getHolidaytts() || DEFAULT_OUTPUT.holidaytts // 获取每日一言 const { hitokoto: oneTalk = DEFAULT_OUTPUT.oneTalk, - from: talkFrom = DEFAULT_OUTPUT.talkFrom + from: talkFrom = DEFAULT_OUTPUT.talkFrom, } = await getOneTalk(config.LITERARY_PREFERENCE) // 获取土味情话 const earthyLoveWords = await getEarthyLoveWords() || DEFAULT_OUTPUT.earthyLoveWords @@ -622,10 +605,7 @@ export const getAggregatedData = async () => { content: poetryContent = DEFAULT_OUTPUT.poetryContent, } = await getPoetry() // 获取插槽中的数据 - const slotParams = getSlotList().map(item => { - return { name: item.keyword, value: item.checkout, color: getColor() } - }) - + const slotParams = getSlotList().map((item) => ({ name: item.keyword, value: item.checkout, color: getColor() })) if (Object.prototype.toString.call(config.USERS) !== '[object Array]') { console.error('配置文件中找不到USERS数组') @@ -633,7 +613,6 @@ export const getAggregatedData = async () => { } const users = config.USERS for (const user of users) { - // 获取每日天气 const { // 天气 @@ -645,13 +624,11 @@ export const getAggregatedData = async () => { // 风向 wd: windDirection = DEFAULT_OUTPUT.windDirection, // 风力等级 - ws: windScale = DEFAULT_OUTPUT.windScale + ws: windScale = DEFAULT_OUTPUT.windScale, } = await getWeather(user.province || config.PROVINCE, user.city || config.CITY) // 统计日列表计算日期差 - const dateDiffParams = getDateDiffList(user.customizedDateList).map(item => { - return { name: item.keyword, value: item.diffDay, color: getColor() } - }) + const dateDiffParams = getDateDiffList(user.customizedDateList).map((item) => ({ name: item.keyword, value: item.diffDay, color: getColor() })) // 获取生日/生日信息 const birthdayMessage = getBirthdayMessage(user.festivals) @@ -684,10 +661,10 @@ export const getAggregatedData = async () => { { name: toLowerLine('poetryDynasty'), value: poetryDynasty, color: getColor() }, { name: toLowerLine('poetryTitle'), value: poetryTitle, color: getColor() }, ].concat(constellationFortune) - .concat(dateDiffParams) - .concat(slotParams) + .concat(dateDiffParams) + .concat(slotParams) - user['wxTemplateParams'] = wxTemplateParams + user.wxTemplateParams = wxTemplateParams } return users diff --git a/src/store/index.js b/src/store/index.js index 2928a84f88..efcab0abf2 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1,41 +1,40 @@ - export const TYPE_LIST = [ { name: '动画', - type: 'a' + type: 'a', }, { name: '漫画', - type: 'b' + type: 'b', }, { name: '游戏', - type: 'c' + type: 'c', }, { name: '小说', - type: 'd' + type: 'd', }, { name: '原创', - type: 'e' + type: 'e', }, { name: '网络', - type: 'f' + type: 'f', }, { name: '其他', - type: 'g' + type: 'g', }, { name: '动画', - type: 'a' + type: 'a', }, ] export const DEFAULT_OUTPUT = { - noteEn: `Nothing in this world that's worth having comes easy.`, + noteEn: 'Nothing in this world that\'s worth having comes easy.', noteCh: '这世界上凡是值得拥有的东西,都不易获得。', oneTalk: '愿你遍布祖国山河,觉得人生也值得', talkFrom: '晓良', @@ -52,1201 +51,1201 @@ export const DEFAULT_OUTPUT = { minTemperature: '想你的温度℃', windDirection: '朝向你', windScale: '100级哦', - holidaytts: '嘿嘿,今天不告诉你~' + holidaytts: '嘿嘿,今天不告诉你~', } export const CITY_INFO = { - "北京": { - "北京": { - "AREAID": "101010100" - } + 北京: { + 北京: { + AREAID: '101010100', + }, }, - "上海": { - "上海": { - "AREAID": "101020100" - } + 上海: { + 上海: { + AREAID: '101020100', + }, }, - "天津": { - "天津": { - "AREAID": "101030100" - } + 天津: { + 天津: { + AREAID: '101030100', + }, }, - "重庆": { - "重庆": { - "AREAID": "101040100" - } + 重庆: { + 重庆: { + AREAID: '101040100', + }, }, - "黑龙江": { - "哈尔滨": { - "AREAID": "101050101" + 黑龙江: { + 哈尔滨: { + AREAID: '101050101', }, - "齐齐哈尔": { - "AREAID": "101050201" + 齐齐哈尔: { + AREAID: '101050201', }, - "牡丹江": { - "AREAID": "101050301" + 牡丹江: { + AREAID: '101050301', }, - "佳木斯": { - "AREAID": "101050401" + 佳木斯: { + AREAID: '101050401', }, - "绥化": { - "AREAID": "101050501" + 绥化: { + AREAID: '101050501', }, - "黑河": { - "AREAID": "101050601" + 黑河: { + AREAID: '101050601', }, - "大兴安岭": { - "AREAID": "101050701" + 大兴安岭: { + AREAID: '101050701', }, - "伊春": { - "AREAID": "101050801" + 伊春: { + AREAID: '101050801', }, - "大庆": { - "AREAID": "101050901" + 大庆: { + AREAID: '101050901', }, - "七台河": { - "AREAID": "101051002" + 七台河: { + AREAID: '101051002', }, - "鸡西": { - "AREAID": "101051101" + 鸡西: { + AREAID: '101051101', }, - "鹤岗": { - "AREAID": "101051201" + 鹤岗: { + AREAID: '101051201', + }, + 双鸭山: { + AREAID: '101051301', }, - "双鸭山": { - "AREAID": "101051301" - } }, - "吉林": { - "长春": { - "AREAID": "101060101" + 吉林: { + 长春: { + AREAID: '101060101', + }, + 吉林: { + AREAID: '101060201', }, - "吉林": { - "AREAID": "101060201" + 延边: { + AREAID: '101060306', }, - "延边": { - "AREAID": "101060306" + 四平: { + AREAID: '101060401', }, - "四平": { - "AREAID": "101060401" + 通化: { + AREAID: '101060501', }, - "通化": { - "AREAID": "101060501" + 白城: { + AREAID: '101060601', }, - "白城": { - "AREAID": "101060601" + 辽源: { + AREAID: '101060701', }, - "辽源": { - "AREAID": "101060701" + 松原: { + AREAID: '101060801', }, - "松原": { - "AREAID": "101060801" + 白山: { + AREAID: '101060901', }, - "白山": { - "AREAID": "101060901" - } }, - "辽宁": { - "沈阳": { - "AREAID": "101070101" + 辽宁: { + 沈阳: { + AREAID: '101070101', + }, + 大连: { + AREAID: '101070201', }, - "大连": { - "AREAID": "101070201" + 鞍山: { + AREAID: '101070301', }, - "鞍山": { - "AREAID": "101070301" + 抚顺: { + AREAID: '101070401', }, - "抚顺": { - "AREAID": "101070401" + 本溪: { + AREAID: '101070501', }, - "本溪": { - "AREAID": "101070501" + 丹东: { + AREAID: '101070601', }, - "丹东": { - "AREAID": "101070601" + 锦州: { + AREAID: '101070701', }, - "锦州": { - "AREAID": "101070701" + 营口: { + AREAID: '101070801', }, - "营口": { - "AREAID": "101070801" + 阜新: { + AREAID: '101070901', }, - "阜新": { - "AREAID": "101070901" + 辽阳: { + AREAID: '101071001', }, - "辽阳": { - "AREAID": "101071001" + 铁岭: { + AREAID: '101071101', }, - "铁岭": { - "AREAID": "101071101" + 朝阳: { + AREAID: '101071201', }, - "朝阳": { - "AREAID": "101071201" + 盘锦: { + AREAID: '101071301', }, - "盘锦": { - "AREAID": "101071301" + 葫芦岛: { + AREAID: '101071401', }, - "葫芦岛": { - "AREAID": "101071401" - } }, - "内蒙古": { - "呼和浩特": { - "AREAID": "101080101" + 内蒙古: { + 呼和浩特: { + AREAID: '101080101', }, - "包头": { - "AREAID": "101080201" + 包头: { + AREAID: '101080201', }, - "乌海": { - "AREAID": "101080301" + 乌海: { + AREAID: '101080301', }, - "乌兰察布": { - "AREAID": "101080405" + 乌兰察布: { + AREAID: '101080405', }, - "通辽": { - "AREAID": "101080501" + 通辽: { + AREAID: '101080501', }, - "赤峰": { - "AREAID": "101080601" + 赤峰: { + AREAID: '101080601', }, - "鄂尔多斯": { - "AREAID": "101080701" + 鄂尔多斯: { + AREAID: '101080701', }, - "巴彦淖尔": { - "AREAID": "101080811" + 巴彦淖尔: { + AREAID: '101080811', }, - "锡林郭勒": { - "AREAID": "101080902" + 锡林郭勒: { + AREAID: '101080902', }, - "呼伦贝尔": { - "AREAID": "101081013" + 呼伦贝尔: { + AREAID: '101081013', }, - "兴安盟": { - "AREAID": "101081108" + 兴安盟: { + AREAID: '101081108', + }, + 阿拉善盟: { + AREAID: '101081213', }, - "阿拉善盟": { - "AREAID": "101081213" - } }, - "河北": { - "石家庄": { - "AREAID": "101090101" + 河北: { + 石家庄: { + AREAID: '101090101', + }, + 保定: { + AREAID: '101090201', }, - "保定": { - "AREAID": "101090201" + 张家口: { + AREAID: '101090301', }, - "张家口": { - "AREAID": "101090301" + 承德: { + AREAID: '101090402', }, - "承德": { - "AREAID": "101090402" + 唐山: { + AREAID: '101090501', }, - "唐山": { - "AREAID": "101090501" + 廊坊: { + AREAID: '101090601', }, - "廊坊": { - "AREAID": "101090601" + 沧州: { + AREAID: '101090701', }, - "沧州": { - "AREAID": "101090701" + 衡水: { + AREAID: '101090801', }, - "衡水": { - "AREAID": "101090801" + 邢台: { + AREAID: '101090901', }, - "邢台": { - "AREAID": "101090901" + 邯郸: { + AREAID: '101091001', }, - "邯郸": { - "AREAID": "101091001" + 秦皇岛: { + AREAID: '101091101', }, - "秦皇岛": { - "AREAID": "101091101" + 雄安新区: { + AREAID: '101091201', }, - "雄安新区": { - "AREAID": "101091201" - } }, - "山西": { - "太原": { - "AREAID": "101100101" + 山西: { + 太原: { + AREAID: '101100101', }, - "大同": { - "AREAID": "101100201" + 大同: { + AREAID: '101100201', }, - "阳泉": { - "AREAID": "101100301" + 阳泉: { + AREAID: '101100301', }, - "晋中": { - "AREAID": "101100401" + 晋中: { + AREAID: '101100401', }, - "长治": { - "AREAID": "101100501" + 长治: { + AREAID: '101100501', }, - "晋城": { - "AREAID": "101100601" + 晋城: { + AREAID: '101100601', }, - "临汾": { - "AREAID": "101100701" + 临汾: { + AREAID: '101100701', }, - "运城": { - "AREAID": "101100801" + 运城: { + AREAID: '101100801', }, - "朔州": { - "AREAID": "101100901" + 朔州: { + AREAID: '101100901', }, - "忻州": { - "AREAID": "101101001" + 忻州: { + AREAID: '101101001', + }, + 吕梁: { + AREAID: '101101100', }, - "吕梁": { - "AREAID": "101101100" - } }, - "陕西": { - "西安": { - "AREAID": "101110101" + 陕西: { + 西安: { + AREAID: '101110101', + }, + 咸阳: { + AREAID: '101110200', }, - "咸阳": { - "AREAID": "101110200" + 延安: { + AREAID: '101110300', }, - "延安": { - "AREAID": "101110300" + 榆林: { + AREAID: '101110401', }, - "榆林": { - "AREAID": "101110401" + 渭南: { + AREAID: '101110501', }, - "渭南": { - "AREAID": "101110501" + 商洛: { + AREAID: '101110601', }, - "商洛": { - "AREAID": "101110601" + 安康: { + AREAID: '101110701', }, - "安康": { - "AREAID": "101110701" + 汉中: { + AREAID: '101110801', }, - "汉中": { - "AREAID": "101110801" + 宝鸡: { + AREAID: '101110901', }, - "宝鸡": { - "AREAID": "101110901" + 铜川: { + AREAID: '101111001', }, - "铜川": { - "AREAID": "101111001" + 杨凌: { + AREAID: '101111101', }, - "杨凌": { - "AREAID": "101111101" - } }, - "山东": { - "济南": { - "AREAID": "101120101" + 山东: { + 济南: { + AREAID: '101120101', + }, + 青岛: { + AREAID: '101120201', }, - "青岛": { - "AREAID": "101120201" + 淄博: { + AREAID: '101120301', }, - "淄博": { - "AREAID": "101120301" + 德州: { + AREAID: '101120401', }, - "德州": { - "AREAID": "101120401" + 烟台: { + AREAID: '101120501', }, - "烟台": { - "AREAID": "101120501" + 潍坊: { + AREAID: '101120601', }, - "潍坊": { - "AREAID": "101120601" + 济宁: { + AREAID: '101120701', }, - "济宁": { - "AREAID": "101120701" + 泰安: { + AREAID: '101120801', }, - "泰安": { - "AREAID": "101120801" + 临沂: { + AREAID: '101120901', }, - "临沂": { - "AREAID": "101120901" + 菏泽: { + AREAID: '101121001', }, - "菏泽": { - "AREAID": "101121001" + 滨州: { + AREAID: '101121101', }, - "滨州": { - "AREAID": "101121101" + 东营: { + AREAID: '101121201', }, - "东营": { - "AREAID": "101121201" + 威海: { + AREAID: '101121301', }, - "威海": { - "AREAID": "101121301" + 枣庄: { + AREAID: '101121401', }, - "枣庄": { - "AREAID": "101121401" + 日照: { + AREAID: '101121501', }, - "日照": { - "AREAID": "101121501" + 莱芜: { + AREAID: '101121601', }, - "莱芜": { - "AREAID": "101121601" + 聊城: { + AREAID: '101121701', }, - "聊城": { - "AREAID": "101121701" - } }, - "新疆": { - "乌鲁木齐": { - "AREAID": "101130101" + 新疆: { + 乌鲁木齐: { + AREAID: '101130101', }, - "克拉玛依": { - "AREAID": "101130201" + 克拉玛依: { + AREAID: '101130201', }, - "石河子": { - "AREAID": "101130301" + 石河子: { + AREAID: '101130301', }, - "昌吉": { - "AREAID": "101130401" + 昌吉: { + AREAID: '101130401', }, - "吐鲁番": { - "AREAID": "101130501" + 吐鲁番: { + AREAID: '101130501', }, - "巴音郭楞": { - "AREAID": "101130609" + 巴音郭楞: { + AREAID: '101130609', }, - "阿拉尔": { - "AREAID": "101130701" + 阿拉尔: { + AREAID: '101130701', }, - "阿克苏": { - "AREAID": "101130801" + 阿克苏: { + AREAID: '101130801', }, - "喀什": { - "AREAID": "101130901" + 喀什: { + AREAID: '101130901', }, - "伊犁": { - "AREAID": "101131012" + 伊犁: { + AREAID: '101131012', }, - "塔城": { - "AREAID": "101131101" + 塔城: { + AREAID: '101131101', }, - "哈密": { - "AREAID": "101131201" + 哈密: { + AREAID: '101131201', }, - "和田": { - "AREAID": "101131301" + 和田: { + AREAID: '101131301', }, - "阿勒泰": { - "AREAID": "101131401" + 阿勒泰: { + AREAID: '101131401', }, - "克州": { - "AREAID": "101131505" + 克州: { + AREAID: '101131505', }, - "博尔塔拉": { - "AREAID": "101131604" + 博尔塔拉: { + AREAID: '101131604', }, - "图木舒克": { - "AREAID": "101131701" + 图木舒克: { + AREAID: '101131701', }, - "五家渠": { - "AREAID": "101131801" + 五家渠: { + AREAID: '101131801', }, - "铁门关": { - "AREAID": "101131901" + 铁门关: { + AREAID: '101131901', }, - "昆玉": { - "AREAID": "101131920" + 昆玉: { + AREAID: '101131920', }, - "北屯": { - "AREAID": "101132101" + 北屯: { + AREAID: '101132101', }, - "双河": { - "AREAID": "101132201" + 双河: { + AREAID: '101132201', + }, + 可克达拉: { + AREAID: '101132301', }, - "可克达拉": { - "AREAID": "101132301" - } }, - "西藏": { - "拉萨": { - "AREAID": "101140101" + 西藏: { + 拉萨: { + AREAID: '101140101', + }, + 日喀则: { + AREAID: '101140201', }, - "日喀则": { - "AREAID": "101140201" + 山南: { + AREAID: '101140301', }, - "山南": { - "AREAID": "101140301" + 林芝: { + AREAID: '101140401', }, - "林芝": { - "AREAID": "101140401" + 昌都: { + AREAID: '101140501', }, - "昌都": { - "AREAID": "101140501" + 那曲: { + AREAID: '101140601', }, - "那曲": { - "AREAID": "101140601" + 阿里: { + AREAID: '101140701', }, - "阿里": { - "AREAID": "101140701" - } }, - "青海": { - "西宁": { - "AREAID": "101150101" + 青海: { + 西宁: { + AREAID: '101150101', }, - "海东": { - "AREAID": "101150207" + 海东: { + AREAID: '101150207', }, - "黄南": { - "AREAID": "101150305" + 黄南: { + AREAID: '101150305', }, - "海南": { - "AREAID": "101150402" + 海南: { + AREAID: '101150402', }, - "果洛": { - "AREAID": "101150507" + 果洛: { + AREAID: '101150507', }, - "玉树": { - "AREAID": "101150601" + 玉树: { + AREAID: '101150601', }, - "海西": { - "AREAID": "101150702" + 海西: { + AREAID: '101150702', + }, + 海北: { + AREAID: '101150804', }, - "海北": { - "AREAID": "101150804" - } }, - "甘肃": { - "兰州": { - "AREAID": "101160101" + 甘肃: { + 兰州: { + AREAID: '101160101', + }, + 定西: { + AREAID: '101160201', }, - "定西": { - "AREAID": "101160201" + 平凉: { + AREAID: '101160301', }, - "平凉": { - "AREAID": "101160301" + 庆阳: { + AREAID: '101160401', }, - "庆阳": { - "AREAID": "101160401" + 武威: { + AREAID: '101160501', }, - "武威": { - "AREAID": "101160501" + 金昌: { + AREAID: '101160601', }, - "金昌": { - "AREAID": "101160601" + 张掖: { + AREAID: '101160701', }, - "张掖": { - "AREAID": "101160701" + 酒泉: { + AREAID: '101160801', }, - "酒泉": { - "AREAID": "101160801" + 天水: { + AREAID: '101160901', }, - "天水": { - "AREAID": "101160901" + 陇南: { + AREAID: '101161010', }, - "陇南": { - "AREAID": "101161010" + 临夏: { + AREAID: '101161101', }, - "临夏": { - "AREAID": "101161101" + 甘南: { + AREAID: '101161209', }, - "甘南": { - "AREAID": "101161209" + 白银: { + AREAID: '101161301', }, - "白银": { - "AREAID": "101161301" + 嘉峪关: { + AREAID: '101161401', }, - "嘉峪关": { - "AREAID": "101161401" - } }, - "宁夏": { - "银川": { - "AREAID": "101170101" + 宁夏: { + 银川: { + AREAID: '101170101', + }, + 石嘴山: { + AREAID: '101170201', }, - "石嘴山": { - "AREAID": "101170201" + 吴忠: { + AREAID: '101170301', }, - "吴忠": { - "AREAID": "101170301" + 固原: { + AREAID: '101170401', }, - "固原": { - "AREAID": "101170401" + 中卫: { + AREAID: '101170501', }, - "中卫": { - "AREAID": "101170501" - } }, - "河南": { - "郑州": { - "AREAID": "101180101" + 河南: { + 郑州: { + AREAID: '101180101', }, - "安阳": { - "AREAID": "101180201" + 安阳: { + AREAID: '101180201', }, - "新乡": { - "AREAID": "101180301" + 新乡: { + AREAID: '101180301', }, - "许昌": { - "AREAID": "101180401" + 许昌: { + AREAID: '101180401', }, - "平顶山": { - "AREAID": "101180501" + 平顶山: { + AREAID: '101180501', }, - "信阳": { - "AREAID": "101180601" + 信阳: { + AREAID: '101180601', }, - "南阳": { - "AREAID": "101180701" + 南阳: { + AREAID: '101180701', }, - "开封": { - "AREAID": "101180801" + 开封: { + AREAID: '101180801', }, - "洛阳": { - "AREAID": "101180901" + 洛阳: { + AREAID: '101180901', }, - "商丘": { - "AREAID": "101181001" + 商丘: { + AREAID: '101181001', }, - "焦作": { - "AREAID": "101181101" + 焦作: { + AREAID: '101181101', }, - "鹤壁": { - "AREAID": "101181201" + 鹤壁: { + AREAID: '101181201', }, - "濮阳": { - "AREAID": "101181301" + 濮阳: { + AREAID: '101181301', }, - "周口": { - "AREAID": "101181401" + 周口: { + AREAID: '101181401', }, - "漯河": { - "AREAID": "101181501" + 漯河: { + AREAID: '101181501', }, - "驻马店": { - "AREAID": "101181601" + 驻马店: { + AREAID: '101181601', }, - "三门峡": { - "AREAID": "101181701" + 三门峡: { + AREAID: '101181701', + }, + 济源: { + AREAID: '101181801', }, - "济源": { - "AREAID": "101181801" - } }, - "江苏": { - "南京": { - "AREAID": "101190101" + 江苏: { + 南京: { + AREAID: '101190101', + }, + 无锡: { + AREAID: '101190201', }, - "无锡": { - "AREAID": "101190201" + 镇江: { + AREAID: '101190301', }, - "镇江": { - "AREAID": "101190301" + 苏州: { + AREAID: '101190401', }, - "苏州": { - "AREAID": "101190401" + 南通: { + AREAID: '101190501', }, - "南通": { - "AREAID": "101190501" + 扬州: { + AREAID: '101190601', }, - "扬州": { - "AREAID": "101190601" + 盐城: { + AREAID: '101190701', }, - "盐城": { - "AREAID": "101190701" + 徐州: { + AREAID: '101190801', }, - "徐州": { - "AREAID": "101190801" + 淮安: { + AREAID: '101190901', }, - "淮安": { - "AREAID": "101190901" + 连云港: { + AREAID: '101191001', }, - "连云港": { - "AREAID": "101191001" + 常州: { + AREAID: '101191101', }, - "常州": { - "AREAID": "101191101" + 泰州: { + AREAID: '101191201', }, - "泰州": { - "AREAID": "101191201" + 宿迁: { + AREAID: '101191301', }, - "宿迁": { - "AREAID": "101191301" - } }, - "湖北": { - "武汉": { - "AREAID": "101200101" + 湖北: { + 武汉: { + AREAID: '101200101', }, - "襄阳": { - "AREAID": "101200201" + 襄阳: { + AREAID: '101200201', }, - "鄂州": { - "AREAID": "101200301" + 鄂州: { + AREAID: '101200301', }, - "孝感": { - "AREAID": "101200401" + 孝感: { + AREAID: '101200401', }, - "黄冈": { - "AREAID": "101200501" + 黄冈: { + AREAID: '101200501', }, - "黄石": { - "AREAID": "101200601" + 黄石: { + AREAID: '101200601', }, - "咸宁": { - "AREAID": "101200701" + 咸宁: { + AREAID: '101200701', }, - "荆州": { - "AREAID": "101200801" + 荆州: { + AREAID: '101200801', }, - "宜昌": { - "AREAID": "101200901" + 宜昌: { + AREAID: '101200901', }, - "恩施": { - "AREAID": "101201001" + 恩施: { + AREAID: '101201001', }, - "十堰": { - "AREAID": "101201101" + 十堰: { + AREAID: '101201101', }, - "神农架": { - "AREAID": "101201201" + 神农架: { + AREAID: '101201201', }, - "随州": { - "AREAID": "101201301" + 随州: { + AREAID: '101201301', }, - "荆门": { - "AREAID": "101201401" + 荆门: { + AREAID: '101201401', }, - "天门": { - "AREAID": "101201501" + 天门: { + AREAID: '101201501', }, - "仙桃": { - "AREAID": "101201601" + 仙桃: { + AREAID: '101201601', + }, + 潜江: { + AREAID: '101201701', }, - "潜江": { - "AREAID": "101201701" - } }, - "浙江": { - "杭州": { - "AREAID": "101210101" + 浙江: { + 杭州: { + AREAID: '101210101', + }, + 湖州: { + AREAID: '101210201', }, - "湖州": { - "AREAID": "101210201" + 嘉兴: { + AREAID: '101210301', }, - "嘉兴": { - "AREAID": "101210301" + 宁波: { + AREAID: '101210401', }, - "宁波": { - "AREAID": "101210401" + 绍兴: { + AREAID: '101210507', }, - "绍兴": { - "AREAID": "101210507" + 台州: { + AREAID: '101210601', }, - "台州": { - "AREAID": "101210601" + 温州: { + AREAID: '101210701', }, - "温州": { - "AREAID": "101210701" + 丽水: { + AREAID: '101210801', }, - "丽水": { - "AREAID": "101210801" + 金华: { + AREAID: '101210901', }, - "金华": { - "AREAID": "101210901" + 衢州: { + AREAID: '101211001', }, - "衢州": { - "AREAID": "101211001" + 舟山: { + AREAID: '101211101', }, - "舟山": { - "AREAID": "101211101" - } }, - "安徽": { - "合肥": { - "AREAID": "101220101" + 安徽: { + 合肥: { + AREAID: '101220101', + }, + 蚌埠: { + AREAID: '101220201', }, - "蚌埠": { - "AREAID": "101220201" + 芜湖: { + AREAID: '101220301', }, - "芜湖": { - "AREAID": "101220301" + 淮南: { + AREAID: '101220401', }, - "淮南": { - "AREAID": "101220401" + 马鞍山: { + AREAID: '101220501', }, - "马鞍山": { - "AREAID": "101220501" + 安庆: { + AREAID: '101220601', }, - "安庆": { - "AREAID": "101220601" + 宿州: { + AREAID: '101220701', }, - "宿州": { - "AREAID": "101220701" + 阜阳: { + AREAID: '101220801', }, - "阜阳": { - "AREAID": "101220801" + 亳州: { + AREAID: '101220901', }, - "亳州": { - "AREAID": "101220901" + 黄山: { + AREAID: '101221001', }, - "黄山": { - "AREAID": "101221001" + 滁州: { + AREAID: '101221101', }, - "滁州": { - "AREAID": "101221101" + 淮北: { + AREAID: '101221201', }, - "淮北": { - "AREAID": "101221201" + 铜陵: { + AREAID: '101221301', }, - "铜陵": { - "AREAID": "101221301" + 宣城: { + AREAID: '101221401', }, - "宣城": { - "AREAID": "101221401" + 六安: { + AREAID: '101221501', }, - "六安": { - "AREAID": "101221501" + 池州: { + AREAID: '101221701', }, - "池州": { - "AREAID": "101221701" - } }, - "福建": { - "福州": { - "AREAID": "101230101" + 福建: { + 福州: { + AREAID: '101230101', }, - "厦门": { - "AREAID": "101230201" + 厦门: { + AREAID: '101230201', }, - "宁德": { - "AREAID": "101230301" + 宁德: { + AREAID: '101230301', }, - "莆田": { - "AREAID": "101230401" + 莆田: { + AREAID: '101230401', }, - "泉州": { - "AREAID": "101230501" + 泉州: { + AREAID: '101230501', }, - "漳州": { - "AREAID": "101230601" + 漳州: { + AREAID: '101230601', }, - "龙岩": { - "AREAID": "101230701" + 龙岩: { + AREAID: '101230701', }, - "三明": { - "AREAID": "101230801" + 三明: { + AREAID: '101230801', }, - "南平": { - "AREAID": "101230901" + 南平: { + AREAID: '101230901', + }, + 钓鱼岛: { + AREAID: '101231001', }, - "钓鱼岛": { - "AREAID": "101231001" - } }, - "江西": { - "南昌": { - "AREAID": "101240101" + 江西: { + 南昌: { + AREAID: '101240101', + }, + 九江: { + AREAID: '101240201', }, - "九江": { - "AREAID": "101240201" + 上饶: { + AREAID: '101240301', }, - "上饶": { - "AREAID": "101240301" + 抚州: { + AREAID: '101240401', }, - "抚州": { - "AREAID": "101240401" + 宜春: { + AREAID: '101240501', }, - "宜春": { - "AREAID": "101240501" + 吉安: { + AREAID: '101240601', }, - "吉安": { - "AREAID": "101240601" + 赣州: { + AREAID: '101240701', }, - "赣州": { - "AREAID": "101240701" + 景德镇: { + AREAID: '101240801', }, - "景德镇": { - "AREAID": "101240801" + 萍乡: { + AREAID: '101240901', }, - "萍乡": { - "AREAID": "101240901" + 新余: { + AREAID: '101241001', }, - "新余": { - "AREAID": "101241001" + 鹰潭: { + AREAID: '101241101', }, - "鹰潭": { - "AREAID": "101241101" - } }, - "湖南": { - "长沙": { - "AREAID": "101250101" + 湖南: { + 长沙: { + AREAID: '101250101', }, - "湘潭": { - "AREAID": "101250201" + 湘潭: { + AREAID: '101250201', }, - "株洲": { - "AREAID": "101250301" + 株洲: { + AREAID: '101250301', }, - "衡阳": { - "AREAID": "101250401" + 衡阳: { + AREAID: '101250401', }, - "郴州": { - "AREAID": "101250501" + 郴州: { + AREAID: '101250501', }, - "常德": { - "AREAID": "101250601" + 常德: { + AREAID: '101250601', }, - "益阳": { - "AREAID": "101250700" + 益阳: { + AREAID: '101250700', }, - "娄底": { - "AREAID": "101250801" + 娄底: { + AREAID: '101250801', }, - "邵阳": { - "AREAID": "101250901" + 邵阳: { + AREAID: '101250901', }, - "岳阳": { - "AREAID": "101251001" + 岳阳: { + AREAID: '101251001', }, - "张家界": { - "AREAID": "101251101" + 张家界: { + AREAID: '101251101', }, - "怀化": { - "AREAID": "101251201" + 怀化: { + AREAID: '101251201', }, - "永州": { - "AREAID": "101251401" + 永州: { + AREAID: '101251401', + }, + 湘西: { + AREAID: '101251509', }, - "湘西": { - "AREAID": "101251509" - } }, - "贵州": { - "贵阳": { - "AREAID": "101260101" + 贵州: { + 贵阳: { + AREAID: '101260101', + }, + 遵义: { + AREAID: '101260201', }, - "遵义": { - "AREAID": "101260201" + 安顺: { + AREAID: '101260301', }, - "安顺": { - "AREAID": "101260301" + 黔南: { + AREAID: '101260413', }, - "黔南": { - "AREAID": "101260413" + 黔东南: { + AREAID: '101260506', }, - "黔东南": { - "AREAID": "101260506" + 铜仁: { + AREAID: '101260601', }, - "铜仁": { - "AREAID": "101260601" + 毕节: { + AREAID: '101260701', }, - "毕节": { - "AREAID": "101260701" + 六盘水: { + AREAID: '101260803', }, - "六盘水": { - "AREAID": "101260803" + 黔西南: { + AREAID: '101260906', }, - "黔西南": { - "AREAID": "101260906" - } }, - "四川": { - "成都": { - "AREAID": "101270101" + 四川: { + 成都: { + AREAID: '101270101', + }, + 攀枝花: { + AREAID: '101270201', }, - "攀枝花": { - "AREAID": "101270201" + 自贡: { + AREAID: '101270301', }, - "自贡": { - "AREAID": "101270301" + 绵阳: { + AREAID: '101270401', }, - "绵阳": { - "AREAID": "101270401" + 南充: { + AREAID: '101270501', }, - "南充": { - "AREAID": "101270501" + 达州: { + AREAID: '101270601', }, - "达州": { - "AREAID": "101270601" + 遂宁: { + AREAID: '101270701', }, - "遂宁": { - "AREAID": "101270701" + 广安: { + AREAID: '101270801', }, - "广安": { - "AREAID": "101270801" + 巴中: { + AREAID: '101270901', }, - "巴中": { - "AREAID": "101270901" + 泸州: { + AREAID: '101271001', }, - "泸州": { - "AREAID": "101271001" + 宜宾: { + AREAID: '101271101', }, - "宜宾": { - "AREAID": "101271101" + 内江: { + AREAID: '101271201', }, - "内江": { - "AREAID": "101271201" + 资阳: { + AREAID: '101271301', }, - "资阳": { - "AREAID": "101271301" + 乐山: { + AREAID: '101271401', }, - "乐山": { - "AREAID": "101271401" + 眉山: { + AREAID: '101271501', }, - "眉山": { - "AREAID": "101271501" + 凉山: { + AREAID: '101271601', }, - "凉山": { - "AREAID": "101271601" + 雅安: { + AREAID: '101271701', }, - "雅安": { - "AREAID": "101271701" + 甘孜: { + AREAID: '101271801', }, - "甘孜": { - "AREAID": "101271801" + 阿坝: { + AREAID: '101271901', }, - "阿坝": { - "AREAID": "101271901" + 德阳: { + AREAID: '101272001', }, - "德阳": { - "AREAID": "101272001" + 广元: { + AREAID: '101272101', }, - "广元": { - "AREAID": "101272101" - } }, - "广东": { - "广州": { - "AREAID": "101280101" + 广东: { + 广州: { + AREAID: '101280101', }, - "韶关": { - "AREAID": "101280201" + 韶关: { + AREAID: '101280201', }, - "惠州": { - "AREAID": "101280301" + 惠州: { + AREAID: '101280301', }, - "梅州": { - "AREAID": "101280401" + 梅州: { + AREAID: '101280401', }, - "汕头": { - "AREAID": "101280501" + 汕头: { + AREAID: '101280501', }, - "深圳": { - "AREAID": "101280601" + 深圳: { + AREAID: '101280601', }, - "珠海": { - "AREAID": "101280701" + 珠海: { + AREAID: '101280701', }, - "佛山": { - "AREAID": "101280800" + 佛山: { + AREAID: '101280800', }, - "肇庆": { - "AREAID": "101280901" + 肇庆: { + AREAID: '101280901', }, - "湛江": { - "AREAID": "101281001" + 湛江: { + AREAID: '101281001', }, - "江门": { - "AREAID": "101281101" + 江门: { + AREAID: '101281101', }, - "河源": { - "AREAID": "101281201" + 河源: { + AREAID: '101281201', }, - "清远": { - "AREAID": "101281301" + 清远: { + AREAID: '101281301', }, - "云浮": { - "AREAID": "101281401" + 云浮: { + AREAID: '101281401', }, - "潮州": { - "AREAID": "101281501" + 潮州: { + AREAID: '101281501', }, - "东莞": { - "AREAID": "101281601" + 东莞: { + AREAID: '101281601', }, - "中山": { - "AREAID": "101281701" + 中山: { + AREAID: '101281701', }, - "阳江": { - "AREAID": "101281801" + 阳江: { + AREAID: '101281801', }, - "揭阳": { - "AREAID": "101281901" + 揭阳: { + AREAID: '101281901', }, - "茂名": { - "AREAID": "101282001" + 茂名: { + AREAID: '101282001', + }, + 汕尾: { + AREAID: '101282101', }, - "汕尾": { - "AREAID": "101282101" - } }, - "云南": { - "昆明": { - "AREAID": "101290101" + 云南: { + 昆明: { + AREAID: '101290101', + }, + 大理: { + AREAID: '101290201', }, - "大理": { - "AREAID": "101290201" + 红河: { + AREAID: '101290301', }, - "红河": { - "AREAID": "101290301" + 曲靖: { + AREAID: '101290401', }, - "曲靖": { - "AREAID": "101290401" + 保山: { + AREAID: '101290501', }, - "保山": { - "AREAID": "101290501" + 文山: { + AREAID: '101290601', }, - "文山": { - "AREAID": "101290601" + 玉溪: { + AREAID: '101290701', }, - "玉溪": { - "AREAID": "101290701" + 楚雄: { + AREAID: '101290801', }, - "楚雄": { - "AREAID": "101290801" + 普洱: { + AREAID: '101290901', }, - "普洱": { - "AREAID": "101290901" + 昭通: { + AREAID: '101291001', }, - "昭通": { - "AREAID": "101291001" + 临沧: { + AREAID: '101291101', }, - "临沧": { - "AREAID": "101291101" + 怒江: { + AREAID: '101291201', }, - "怒江": { - "AREAID": "101291201" + 迪庆: { + AREAID: '101291305', }, - "迪庆": { - "AREAID": "101291305" + 丽江: { + AREAID: '101291401', }, - "丽江": { - "AREAID": "101291401" + 德宏: { + AREAID: '101291501', }, - "德宏": { - "AREAID": "101291501" + 西双版纳: { + AREAID: '101291602', }, - "西双版纳": { - "AREAID": "101291602" - } }, - "广西": { - "南宁": { - "AREAID": "101300101" + 广西: { + 南宁: { + AREAID: '101300101', }, - "崇左": { - "AREAID": "101300201" + 崇左: { + AREAID: '101300201', }, - "柳州": { - "AREAID": "101300301" + 柳州: { + AREAID: '101300301', }, - "来宾": { - "AREAID": "101300401" + 来宾: { + AREAID: '101300401', }, - "桂林": { - "AREAID": "101300501" + 桂林: { + AREAID: '101300501', }, - "梧州": { - "AREAID": "101300601" + 梧州: { + AREAID: '101300601', }, - "贺州": { - "AREAID": "101300701" + 贺州: { + AREAID: '101300701', }, - "贵港": { - "AREAID": "101300801" + 贵港: { + AREAID: '101300801', }, - "玉林": { - "AREAID": "101300901" + 玉林: { + AREAID: '101300901', }, - "百色": { - "AREAID": "101301001" + 百色: { + AREAID: '101301001', }, - "钦州": { - "AREAID": "101301101" + 钦州: { + AREAID: '101301101', }, - "河池": { - "AREAID": "101301201" + 河池: { + AREAID: '101301201', }, - "北海": { - "AREAID": "101301301" + 北海: { + AREAID: '101301301', + }, + 防城港: { + AREAID: '101301401', }, - "防城港": { - "AREAID": "101301401" - } }, - "海南": { - "海口": { - "AREAID": "101310101" + 海南: { + 海口: { + AREAID: '101310101', + }, + 三亚: { + AREAID: '101310201', }, - "三亚": { - "AREAID": "101310201" + 东方: { + AREAID: '101310202', }, - "东方": { - "AREAID": "101310202" + 临高: { + AREAID: '101310203', }, - "临高": { - "AREAID": "101310203" + 澄迈: { + AREAID: '101310204', }, - "澄迈": { - "AREAID": "101310204" + 儋州: { + AREAID: '101310205', }, - "儋州": { - "AREAID": "101310205" + 昌江: { + AREAID: '101310206', }, - "昌江": { - "AREAID": "101310206" + 白沙: { + AREAID: '101310207', }, - "白沙": { - "AREAID": "101310207" + 琼中: { + AREAID: '101310208', }, - "琼中": { - "AREAID": "101310208" + 定安: { + AREAID: '101310209', }, - "定安": { - "AREAID": "101310209" + 屯昌: { + AREAID: '101310210', }, - "屯昌": { - "AREAID": "101310210" + 琼海: { + AREAID: '101310211', }, - "琼海": { - "AREAID": "101310211" + 文昌: { + AREAID: '101310212', }, - "文昌": { - "AREAID": "101310212" + 保亭: { + AREAID: '101310214', }, - "保亭": { - "AREAID": "101310214" + 万宁: { + AREAID: '101310215', }, - "万宁": { - "AREAID": "101310215" + 陵水: { + AREAID: '101310216', }, - "陵水": { - "AREAID": "101310216" + 乐东: { + AREAID: '101310221', }, - "乐东": { - "AREAID": "101310221" + 五指山: { + AREAID: '101310222', }, - "五指山": { - "AREAID": "101310222" + 三沙: { + AREAID: '101310301', }, - "三沙": { - "AREAID": "101310301" - } }, - "香港": { - "香港": { - "AREAID": "101320101" - } + 香港: { + 香港: { + AREAID: '101320101', + }, }, - "澳门": { - "澳门": { - "AREAID": "101330101" - } + 澳门: { + 澳门: { + AREAID: '101330101', + }, }, - "台湾": { - "台北": { - "AREAID": "101340101" - }, - "高雄": { - "AREAID": "101340201" - }, - "台中": { - "AREAID": "101340401" - } - } -} \ No newline at end of file + 台湾: { + 台北: { + AREAID: '101340101', + }, + 高雄: { + AREAID: '101340201', + }, + 台中: { + AREAID: '101340401', + }, + }, +} diff --git a/src/utils/index.js b/src/utils/index.js index 4bbf6a7ab7..7b0a8fd51c 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,5 +1,5 @@ -import { selfDayjs } from './set-def-dayjs.js' import { Lunar, Solar } from 'lunar-javascript' +import { selfDayjs } from './set-def-dayjs.js' import { config } from '../../config/index.js' /** @@ -8,16 +8,13 @@ import { config } from '../../config/index.js' * @returns */ export const toLowerLine = (str) => { - var temp = str.replace(/[A-Z]/g, function (match) { - return '_' + match.toLowerCase() - }) - if (temp.slice(0, 1) === '_') { //如果首字母是大写,执行replace时会多一个_,这里需要去掉 + let temp = str.replace(/[A-Z]/g, (match) => `_${match.toLowerCase()}`) + if (temp.slice(0, 1) === '_') { // 如果首字母是大写,执行replace时会多一个_,这里需要去掉 temp = temp.slice(1) } return temp } - /** * 获取随机颜色 * @returns @@ -26,19 +23,16 @@ export const getColor = () => { if (!config.IS_SHOW_COLOR) { return undefined } - return `#${ Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, '0') }` + return `#${Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, '0')}` } - /** * 生成一个从min 到 max 的随机数 * @param {*} min * @param {*} max * @returns */ -export const randomNum = (min, max) => { - return Math.floor(Math.random() * (max - min + 1)) + min -} +export const randomNum = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min /** * 对生日时间倒计时进行排序 @@ -46,34 +40,31 @@ export const randomNum = (min, max) => { * @returns */ export const sortBirthdayTime = (list) => { - list.forEach(item => { - let { type } = item + list.forEach((item) => { + const { type } = item item.useLunar = /^\*/.test(type) item.type = (type || '').replace(/^\*/, '') if (item.useLunar) { let yearOffset = -1 - let diffDay - while (true) { + let diffDay = -1 + do { const [month, day] = item.date.split('-') - const lunar = Lunar.fromYmd(selfDayjs().year() + yearOffset, Number(month), Number(day)); - const solar = lunar.getSolar(); - diffDay = Math.ceil(selfDayjs(solar.getYear() + '-' + solar.getMonth() + '-' + solar.getDay()).diff(selfDayjs(), 'day', true)) - if (diffDay >= 0) { - break - } + const lunar = Lunar.fromYmd(selfDayjs().year() + yearOffset, Number(month), Number(day)) + const solar = lunar.getSolar() + diffDay = Math.ceil(selfDayjs(`${solar.getYear()}-${solar.getMonth()}-${solar.getDay()}`).diff(selfDayjs(), 'day', true)) yearOffset++ - } + } while (diffDay < 0) item.diffDay = diffDay } else { - const diffDay = Math.ceil(selfDayjs(selfDayjs().format('YYYY') + '-' + item.date).diff(selfDayjs(), 'day', true)) + const diffDay = Math.ceil(selfDayjs(`${selfDayjs().format('YYYY')}-${item.date}`).diff(selfDayjs(), 'day', true)) if (diffDay >= 0) { - item['diffDay'] = diffDay + item.diffDay = diffDay } else { - item['diffDay'] = Math.ceil(selfDayjs(selfDayjs().add(1, 'year').format('YYYY') + '-' + item.date).diff(selfDayjs(), 'day', true)) + item.diffDay = Math.ceil(selfDayjs(`${selfDayjs().add(1, 'year').format('YYYY')}-${item.date}`).diff(selfDayjs(), 'day', true)) } } }) - return list.sort((a, b) => a.diffDay > b.diffDay ? 1 : -1) + return list.sort((a, b) => (a.diffDay > b.diffDay ? 1 : -1)) } /** @@ -90,6 +81,6 @@ export const getConstellation = (date) => { const cn = solar.getXingZuo() return { cn, - en: constellationEn[constellationCn.indexOf(cn)] + en: constellationEn[constellationCn.indexOf(cn)], } } diff --git a/src/utils/set-def-dayjs.js b/src/utils/set-def-dayjs.js index 693aa8c6f8..7862d22b47 100644 --- a/src/utils/set-def-dayjs.js +++ b/src/utils/set-def-dayjs.js @@ -10,7 +10,6 @@ export const selfDayjs = (time) => { return dayjs(time).subtract('8', 'hour') } return dayjs(time).tz('Asia/Shanghai') - } /* istanbul ignore next */ diff --git a/start_pm2.js b/start_pm2.js index 2f6704692b..8751ec83b3 100644 --- a/start_pm2.js +++ b/start_pm2.js @@ -1,9 +1,9 @@ -import {cornTime} from "./config/server-config.js"; -import schedule from "node-schedule"; -import {mainForProd} from "./main.js"; +import schedule from 'node-schedule' +import { cornTime } from './config/server-config.js' +import mainForProd from './main.js' console.log('======【定时推送服务已启动, enjoying it】======') console.log(`目前定时推送的配置为:【${cornTime}】`) schedule.scheduleJob(cornTime, () => { mainForProd() -}); \ No newline at end of file +})