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
+})