From 1286dee1ab299a0e98cd252e5f2fa030fad07496 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 11 Jan 2021 18:49:39 +0900 Subject: [PATCH 01/32] fix context menu --- src/client/components/drive.vue | 2 +- src/client/ui/deck/main-column.vue | 1 + src/client/ui/default.vue | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/client/components/drive.vue b/src/client/components/drive.vue index 64e4d51e2..1dbb1cbc1 100644 --- a/src/client/components/drive.vue +++ b/src/client/components/drive.vue @@ -17,7 +17,7 @@ @dragenter="onDragenter" @dragleave="onDragleave" @drop.prevent.stop="onDrop" - @contextmenu="onContextmenu" + @contextmenu.stop="onContextmenu" >
diff --git a/src/client/ui/deck/main-column.vue b/src/client/ui/deck/main-column.vue index c09880d68..f0d5567b6 100644 --- a/src/client/ui/deck/main-column.vue +++ b/src/client/ui/deck/main-column.vue @@ -58,6 +58,7 @@ export default defineComponent({ onContextmenu(e) { if (['INPUT', 'TEXTAREA'].includes(e.target.tagName) || e.target.attributes['contenteditable']) return; + if (window.getSelection().toString() !== '') return; const path = this.$route.path; os.contextMenu([{ type: 'label', diff --git a/src/client/ui/default.vue b/src/client/ui/default.vue index 0da410820..7626ddaa5 100644 --- a/src/client/ui/default.vue +++ b/src/client/ui/default.vue @@ -188,6 +188,7 @@ export default defineComponent({ onContextmenu(e) { if (['INPUT', 'TEXTAREA'].includes(e.target.tagName) || e.target.attributes['contenteditable']) return; + if (window.getSelection().toString() !== '') return; const path = this.$route.path; os.contextMenu([{ type: 'label', From 6c975275f82c79eed2c7757d55283c95d23ca5b8 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 11 Jan 2021 20:38:34 +0900 Subject: [PATCH 02/32] Registry (#7073) * wip * wip * wip * wip * wip * Update registry.value.vue * wip * wip * wip * wip * typo --- locales/ja-JP.yml | 14 ++ migration/1610277136869-registry.ts | 22 +++ migration/1610277585759-registry2.ts | 16 ++ migration/1610283021566-registry3.ts | 14 ++ package.json | 2 + src/client/account.ts | 1 - src/client/components/post-form.vue | 2 +- src/client/components/ui/info.vue | 2 +- src/client/init.ts | 8 - src/client/pages/settings/deck.vue | 21 ++- src/client/pages/settings/index.vue | 30 +++- src/client/pages/settings/other.vue | 8 +- src/client/pages/settings/registry.keys.vue | 115 ++++++++++++++ src/client/pages/settings/registry.value.vue | 149 ++++++++++++++++++ src/client/pages/settings/registry.vue | 91 +++++++++++ src/client/pizzax.ts | 56 ++++--- src/client/router.ts | 1 - src/client/ui/deck.vue | 3 +- src/client/ui/deck/deck-store.ts | 85 ++++++++-- src/db/postgre.ts | 2 + src/models/entities/registry-item.ts | 58 +++++++ src/models/entities/user-profile.ts | 1 + src/models/index.ts | 2 + src/models/repositories/user.ts | 1 - src/server/api/api-handler.ts | 5 +- src/server/api/endpoints/i.ts | 25 ++- src/server/api/endpoints/i/notifications.ts | 2 +- .../api/endpoints/i/registry/get-all.ts | 33 ++++ .../api/endpoints/i/registry/get-detail.ts | 48 ++++++ src/server/api/endpoints/i/registry/get.ts | 45 ++++++ .../endpoints/i/registry/keys-with-type.ts | 41 +++++ src/server/api/endpoints/i/registry/keys.ts | 28 ++++ src/server/api/endpoints/i/registry/remove.ts | 45 ++++++ src/server/api/endpoints/i/registry/scopes.ts | 30 ++++ src/server/api/endpoints/i/registry/set.ts | 61 +++++++ .../api/endpoints/i/update-client-setting.ts | 40 ----- yarn.lock | 10 ++ 37 files changed, 1017 insertions(+), 100 deletions(-) create mode 100644 migration/1610277136869-registry.ts create mode 100644 migration/1610277585759-registry2.ts create mode 100644 migration/1610283021566-registry3.ts create mode 100644 src/client/pages/settings/registry.keys.vue create mode 100644 src/client/pages/settings/registry.value.vue create mode 100644 src/client/pages/settings/registry.vue create mode 100644 src/models/entities/registry-item.ts create mode 100644 src/server/api/endpoints/i/registry/get-all.ts create mode 100644 src/server/api/endpoints/i/registry/get-detail.ts create mode 100644 src/server/api/endpoints/i/registry/get.ts create mode 100644 src/server/api/endpoints/i/registry/keys-with-type.ts create mode 100644 src/server/api/endpoints/i/registry/keys.ts create mode 100644 src/server/api/endpoints/i/registry/remove.ts create mode 100644 src/server/api/endpoints/i/registry/scopes.ts create mode 100644 src/server/api/endpoints/i/registry/set.ts delete mode 100644 src/server/api/endpoints/i/update-client-setting.ts diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 55847cca4..26e055f5c 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -685,6 +685,19 @@ accentColor: "アクセント" textColor: "文字" saveAs: "名前を付けて保存" advanced: "高度" +value: "値" +updatedAt: "更新日時" +saveConfirm: "保存しますか?" +deleteConfirm: "削除しますか?" +invalidValue: "有効な値ではありません。" +registry: "レジストリ" + +_registry: + scope: "スコープ" + key: "キー" + keys: "キー" + domain: "ドメイン" + createKey: "キーを作成" _aboutMisskey: about: "Misskeyはsyuiloによって2014年から開発されている、オープンソースのソフトウェアです。" @@ -1558,6 +1571,7 @@ _deck: swapDown: "下に移動" stackLeft: "左に重ねる" popRight: "右に出す" + profile: "プロファイル" _columns: main: "メイン" diff --git a/migration/1610277136869-registry.ts b/migration/1610277136869-registry.ts new file mode 100644 index 000000000..46c8113c1 --- /dev/null +++ b/migration/1610277136869-registry.ts @@ -0,0 +1,22 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class registry1610277136869 implements MigrationInterface { + name = 'registry1610277136869' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`CREATE TABLE "registry_item" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "key" character varying(1024) NOT NULL, "scope" character varying(1024) array NOT NULL DEFAULT '{}'::varchar[], "domain" character varying(512), CONSTRAINT "PK_64b3f7e6008b4d89b826cd3af95" PRIMARY KEY ("id")); COMMENT ON COLUMN "registry_item"."createdAt" IS 'The created date of the RegistryItem.'; COMMENT ON COLUMN "registry_item"."updatedAt" IS 'The updated date of the RegistryItem.'; COMMENT ON COLUMN "registry_item"."userId" IS 'The owner ID.'; COMMENT ON COLUMN "registry_item"."key" IS 'The key of the RegistryItem.'`); + await queryRunner.query(`CREATE INDEX "IDX_fb9d21ba0abb83223263df6bcb" ON "registry_item" ("userId") `); + await queryRunner.query(`CREATE INDEX "IDX_22baca135bb8a3ea1a83d13df3" ON "registry_item" ("scope") `); + await queryRunner.query(`CREATE INDEX "IDX_0a72bdfcdb97c0eca11fe7ecad" ON "registry_item" ("domain") `); + await queryRunner.query(`ALTER TABLE "registry_item" ADD CONSTRAINT "FK_fb9d21ba0abb83223263df6bcb3" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "registry_item" DROP CONSTRAINT "FK_fb9d21ba0abb83223263df6bcb3"`); + await queryRunner.query(`DROP INDEX "IDX_0a72bdfcdb97c0eca11fe7ecad"`); + await queryRunner.query(`DROP INDEX "IDX_22baca135bb8a3ea1a83d13df3"`); + await queryRunner.query(`DROP INDEX "IDX_fb9d21ba0abb83223263df6bcb"`); + await queryRunner.query(`DROP TABLE "registry_item"`); + } + +} diff --git a/migration/1610277585759-registry2.ts b/migration/1610277585759-registry2.ts new file mode 100644 index 000000000..2f2d80c48 --- /dev/null +++ b/migration/1610277585759-registry2.ts @@ -0,0 +1,16 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class registry21610277585759 implements MigrationInterface { + name = 'registry21610277585759' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "registry_item" ADD "value" jsonb NOT NULL DEFAULT '{}'`); + await queryRunner.query(`COMMENT ON COLUMN "registry_item"."value" IS 'The value of the RegistryItem.'`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`COMMENT ON COLUMN "registry_item"."value" IS 'The value of the RegistryItem.'`); + await queryRunner.query(`ALTER TABLE "registry_item" DROP COLUMN "value"`); + } + +} diff --git a/migration/1610283021566-registry3.ts b/migration/1610283021566-registry3.ts new file mode 100644 index 000000000..61f235fb2 --- /dev/null +++ b/migration/1610283021566-registry3.ts @@ -0,0 +1,14 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class registry31610283021566 implements MigrationInterface { + name = 'registry31610283021566' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "registry_item" ALTER COLUMN "value" DROP NOT NULL`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "registry_item" ALTER COLUMN "value" SET NOT NULL`); + } + +} diff --git a/package.json b/package.json index cd7cc0ff0..685a5dead 100644 --- a/package.json +++ b/package.json @@ -98,6 +98,7 @@ "@types/sharp": "0.26.1", "@types/sinonjs__fake-timers": "6.0.1", "@types/speakeasy": "2.0.5", + "@types/throttle-debounce": "2.1.0", "@types/tinycolor2": "1.4.2", "@types/tmp": "0.2.0", "@types/uuid": "8.3.0", @@ -232,6 +233,7 @@ "syuilo-password-strength": "0.0.1", "textarea-caret": "3.1.0", "three": "0.117.1", + "throttle-debounce": "3.0.1", "tinycolor2": "1.4.2", "tmp": "0.2.1", "ts-loader": "8.0.11", diff --git a/src/client/account.ts b/src/client/account.ts index fdf49ee21..e6ee8613d 100644 --- a/src/client/account.ts +++ b/src/client/account.ts @@ -7,7 +7,6 @@ import { waiting } from '@/os'; type Account = { id: string; token: string; - clientData: Record; }; const data = localStorage.getItem('account'); diff --git a/src/client/components/post-form.vue b/src/client/components/post-form.vue index 19773b3b6..bf300eebd 100644 --- a/src/client/components/post-form.vue +++ b/src/client/components/post-form.vue @@ -262,7 +262,7 @@ export default defineComponent({ } // keep cw when reply - if (this.$store.keepCw && this.reply && this.reply.cw) { + if (this.$store.state.keepCw && this.reply && this.reply.cw) { this.useCw = true; this.cw = this.reply.cw; } diff --git a/src/client/components/ui/info.vue b/src/client/components/ui/info.vue index 3bdb69b3d..5c71b14a0 100644 --- a/src/client/components/ui/info.vue +++ b/src/client/components/ui/info.vue @@ -34,7 +34,7 @@ export default defineComponent({ font-size: 90%; background: var(--infoBg); color: var(--infoFg); - border-radius: 5px; + border-radius: var(--radius); &.warn { background: var(--infoWarnBg); diff --git a/src/client/init.ts b/src/client/init.ts index f39f50eea..f09097fe3 100644 --- a/src/client/init.ts +++ b/src/client/init.ts @@ -347,14 +347,6 @@ if ($i) { updateAccount({ hasUnreadAnnouncement: false }); }); - main.on('clientSettingUpdated', x => { - updateAccount({ - clientData: { - [x.key]: x.value - } - }); - }); - // トークンが再生成されたとき // このままではMisskeyが利用できないので強制的にサインアウトさせる main.on('myTokenRegenerated', () => { diff --git a/src/client/pages/settings/deck.vue b/src/client/pages/settings/deck.vue index 0d9f1ab0a..30d36d4a0 100644 --- a/src/client/pages/settings/deck.vue +++ b/src/client/pages/settings/deck.vue @@ -24,6 +24,8 @@ {{ $ts._deck.columnMargin }} + + {{ $ts._deck.profile }} @@ -31,7 +33,7 @@ import { defineComponent } from 'vue'; import { faImage, faCog, faColumns } from '@fortawesome/free-solid-svg-icons'; import FormSwitch from '@/components/form/switch.vue'; -import FormSelect from '@/components/form/select.vue'; +import FormLink from '@/components/form/link.vue'; import FormRadios from '@/components/form/radios.vue'; import FormInput from '@/components/form/input.vue'; import FormBase from '@/components/form/base.vue'; @@ -42,7 +44,7 @@ import * as os from '@/os'; export default defineComponent({ components: { FormSwitch, - FormSelect, + FormLink, FormInput, FormRadios, FormBase, @@ -67,6 +69,7 @@ export default defineComponent({ columnAlign: deckStore.makeGetterSetter('columnAlign'), columnMargin: deckStore.makeGetterSetter('columnMargin'), columnHeaderHeight: deckStore.makeGetterSetter('columnHeaderHeight'), + profile: deckStore.makeGetterSetter('profile'), }, watch: { @@ -85,5 +88,19 @@ export default defineComponent({ mounted() { this.$emit('info', this.INFO); }, + + methods: { + async setProfile() { + const { canceled, result: name } = await os.dialog({ + title: this.$ts._deck.profile, + input: { + allowEmpty: false + } + }); + if (canceled) return; + this.profile = name; + location.reload(); + } + } }); diff --git a/src/client/pages/settings/index.vue b/src/client/pages/settings/index.vue index aa9fe2716..0f95a76f1 100644 --- a/src/client/pages/settings/index.vue +++ b/src/client/pages/settings/index.vue @@ -35,13 +35,13 @@
- +
diff --git a/src/client/pages/settings/registry.value.vue b/src/client/pages/settings/registry.value.vue new file mode 100644 index 000000000..943ededd2 --- /dev/null +++ b/src/client/pages/settings/registry.value.vue @@ -0,0 +1,149 @@ + + + diff --git a/src/client/pages/settings/registry.vue b/src/client/pages/settings/registry.vue new file mode 100644 index 000000000..a43c98e73 --- /dev/null +++ b/src/client/pages/settings/registry.vue @@ -0,0 +1,91 @@ + + + diff --git a/src/client/pizzax.ts b/src/client/pizzax.ts index fdaf2bebb..794738edd 100644 --- a/src/client/pizzax.ts +++ b/src/client/pizzax.ts @@ -11,6 +11,7 @@ type ArrayElement = A extends readonly (infer T)[] ? T : never; export class Storage { public readonly key: string; + public readonly keyForLocalStorage: string; public readonly def: T; @@ -19,20 +20,22 @@ export class Storage { public readonly reactiveState: { [K in keyof T]: Ref }; constructor(key: string, def: T) { - this.key = 'pizzax::' + key; + this.key = key; + this.keyForLocalStorage = 'pizzax::' + key; this.def = def; // TODO: indexedDBにする - const deviceState = JSON.parse(localStorage.getItem(this.key) || '{}'); - const deviceAccountState = $i ? JSON.parse(localStorage.getItem(this.key + '::' + $i.id) || '{}') : {}; + const deviceState = JSON.parse(localStorage.getItem(this.keyForLocalStorage) || '{}'); + const deviceAccountState = $i ? JSON.parse(localStorage.getItem(this.keyForLocalStorage + '::' + $i.id) || '{}') : {}; + const registryCache = $i ? JSON.parse(localStorage.getItem(this.keyForLocalStorage + '::cache::' + $i.id) || '{}') : {}; const state = {}; const reactiveState = {}; for (const [k, v] of Object.entries(def)) { if (v.where === 'device' && Object.prototype.hasOwnProperty.call(deviceState, k)) { state[k] = deviceState[k]; - } else if (v.where === 'account' && $i && Object.prototype.hasOwnProperty.call($i.clientData, k)) { - state[k] = $i.clientData[k]; + } else if (v.where === 'account' && $i && Object.prototype.hasOwnProperty.call(registryCache, k)) { + state[k] = registryCache[k]; } else if (v.where === 'deviceAccount' && Object.prototype.hasOwnProperty.call(deviceAccountState, k)) { state[k] = deviceAccountState[k]; } else { @@ -47,16 +50,24 @@ export class Storage { this.reactiveState = reactiveState as any; if ($i) { - watch($i, () => { - if (_DEV_) console.log('$i updated'); - - for (const [k, v] of Object.entries(def)) { - if (v.where === 'account' && Object.prototype.hasOwnProperty.call($i!.clientData, k)) { - state[k] = $i!.clientData[k]; - reactiveState[k].value = $i!.clientData[k]; + // なぜかsetTimeoutしないとapi関数内でエラーになる(おそらく循環参照してることに原因がありそう) + setTimeout(() => { + api('i/registry/get-all', { scope: ['client', this.key] }).then(kvs => { + for (const [k, v] of Object.entries(def)) { + if (v.where === 'account') { + if (Object.prototype.hasOwnProperty.call(kvs, k)) { + state[k] = kvs[k]; + reactiveState[k].value = kvs[k]; + } else { + state[k] = v.default; + reactiveState[k].value = v.default; + } + } } - } - }); + }); + }, 1); + + // TODO: streamingのuser storage updateイベントを監視して更新 } } @@ -68,21 +79,26 @@ export class Storage { switch (this.def[key].where) { case 'device': { - const deviceState = JSON.parse(localStorage.getItem(this.key) || '{}'); + const deviceState = JSON.parse(localStorage.getItem(this.keyForLocalStorage) || '{}'); deviceState[key] = value; - localStorage.setItem(this.key, JSON.stringify(deviceState)); + localStorage.setItem(this.keyForLocalStorage, JSON.stringify(deviceState)); break; } case 'deviceAccount': { if ($i == null) break; - const deviceAccountState = JSON.parse(localStorage.getItem(this.key + '::' + $i.id) || '{}'); + const deviceAccountState = JSON.parse(localStorage.getItem(this.keyForLocalStorage + '::' + $i.id) || '{}'); deviceAccountState[key] = value; - localStorage.setItem(this.key + '::' + $i.id, JSON.stringify(deviceAccountState)); + localStorage.setItem(this.keyForLocalStorage + '::' + $i.id, JSON.stringify(deviceAccountState)); break; } case 'account': { - api('i/update-client-setting', { - name: key, + if ($i == null) break; + const cache = JSON.parse(localStorage.getItem(this.keyForLocalStorage + '::cache::' + $i.id) || '{}'); + cache[key] = value; + localStorage.setItem(this.keyForLocalStorage + '::cache::' + $i.id, JSON.stringify(cache)); + api('i/registry/set', { + scope: ['client', this.key], + key: key, value: value }); break; diff --git a/src/client/router.ts b/src/client/router.ts index 5753a4702..6f79426b2 100644 --- a/src/client/router.ts +++ b/src/client/router.ts @@ -81,7 +81,6 @@ export const router = createRouter({ { path: '/miauth/:session', component: page('miauth') }, { path: '/authorize-follow', component: page('follow') }, { path: '/share', component: page('share') }, - { path: '/test', component: page('test') }, { path: '/:catchAll(.*)', component: page('not-found') } ], // なんかHacky diff --git a/src/client/ui/deck.vue b/src/client/ui/deck.vue index 099a6f60c..a074629dd 100644 --- a/src/client/ui/deck.vue +++ b/src/client/ui/deck.vue @@ -41,7 +41,7 @@ import { getScrollContainer } from '@/scripts/scroll'; import * as os from '@/os'; import { sidebarDef } from '@/sidebar'; import XCommon from './_common_/common.vue'; -import { deckStore, addColumn } from './deck/deck-store'; +import { deckStore, addColumn, loadDeck } from './deck/deck-store'; export default defineComponent({ components: { @@ -88,6 +88,7 @@ export default defineComponent({ document.documentElement.style.overflowY = 'hidden'; document.documentElement.style.scrollBehavior = 'auto'; window.addEventListener('wheel', this.onWheel); + loadDeck(); }, mounted() { diff --git a/src/client/ui/deck/deck-store.ts b/src/client/ui/deck/deck-store.ts index 3d2e1873d..93ea0a322 100644 --- a/src/client/ui/deck/deck-store.ts +++ b/src/client/ui/deck/deck-store.ts @@ -1,5 +1,7 @@ +import { throttle } from 'throttle-debounce'; import { i18n } from '@/i18n'; -import { markRaw } from 'vue'; +import { api } from '@/os'; +import { markRaw, watch } from 'vue'; import { Storage } from '../../pizzax'; type ColumnWidget = { @@ -21,23 +23,17 @@ function copy(x: T): T { } export const deckStore = markRaw(new Storage('deck', { + profile: { + where: 'deviceAccount', + default: 'default' + }, columns: { where: 'deviceAccount', - default: [{ - id: 'a', - type: 'main', - name: i18n.locale._deck._columns.main, - width: 350, - }, { - id: 'b', - type: 'notifications', - name: i18n.locale._deck._columns.notifications, - width: 330, - }] as Column[] + default: [] as Column[] }, layout: { where: 'deviceAccount', - default: [['a'], ['b']] as Column['id'][][] + default: [] as Column['id'][][] }, columnAlign: { where: 'deviceAccount', @@ -61,10 +57,60 @@ export const deckStore = markRaw(new Storage('deck', { }, })); +export const loadDeck = async () => { + let deck; + + try { + deck = await api('i/registry/get', { + scope: ['client', 'deck', 'profiles'], + key: deckStore.state.profile, + }); + } catch (e) { + if (e.code === 'NO_SUCH_KEY') { + // 後方互換性のため + if (deckStore.state.profile === 'default') { + saveDeck(); + return; + } + + deckStore.set('columns', [{ + id: 'a', + type: 'main', + name: i18n.locale._deck._columns.main, + width: 350, + }, { + id: 'b', + type: 'notifications', + name: i18n.locale._deck._columns.notifications, + width: 330, + }]); + deckStore.set('layout', [['a'], ['b']]); + return; + } + throw e; + } + + deckStore.set('columns', deck.columns); + deckStore.set('layout', deck.layout); +}; + +// TODO: deckがloadされていない状態でsaveすると意図せず上書きが発生するので対策する +export const saveDeck = throttle(1000, () => { + api('i/registry/set', { + scope: ['client', 'deck', 'profiles'], + key: deckStore.state.profile, + value: { + columns: deckStore.reactiveState.columns.value, + layout: deckStore.reactiveState.layout.value, + } + }); +}); + export function addColumn(column: Column) { if (column.name == undefined) column.name = null; deckStore.push('columns', column); deckStore.push('layout', [column.id]); + saveDeck(); } export function removeColumn(id: Column['id']) { @@ -72,6 +118,7 @@ export function removeColumn(id: Column['id']) { deckStore.set('layout', deckStore.state.layout .map(ids => ids.filter(_id => _id !== id)) .filter(ids => ids.length > 0)); + saveDeck(); } export function swapColumn(a: Column['id'], b: Column['id']) { @@ -83,6 +130,7 @@ export function swapColumn(a: Column['id'], b: Column['id']) { layout[aX][aY] = b; layout[bX][bY] = a; deckStore.set('layout', layout); + saveDeck(); } export function swapLeftColumn(id: Column['id']) { @@ -98,6 +146,7 @@ export function swapLeftColumn(id: Column['id']) { return true; } }); + saveDeck(); } export function swapRightColumn(id: Column['id']) { @@ -113,6 +162,7 @@ export function swapRightColumn(id: Column['id']) { return true; } }); + saveDeck(); } export function swapUpColumn(id: Column['id']) { @@ -132,6 +182,7 @@ export function swapUpColumn(id: Column['id']) { return true; } }); + saveDeck(); } export function swapDownColumn(id: Column['id']) { @@ -151,6 +202,7 @@ export function swapDownColumn(id: Column['id']) { return true; } }); + saveDeck(); } export function stackLeftColumn(id: Column['id']) { @@ -160,6 +212,7 @@ export function stackLeftColumn(id: Column['id']) { layout[i - 1].push(id); layout = layout.filter(ids => ids.length > 0); deckStore.set('layout', layout); + saveDeck(); } export function popRightColumn(id: Column['id']) { @@ -169,6 +222,7 @@ export function popRightColumn(id: Column['id']) { layout.splice(i + 1, 0, [id]); layout = layout.filter(ids => ids.length > 0); deckStore.set('layout', layout); + saveDeck(); } export function addColumnWidget(id: Column['id'], widget: ColumnWidget) { @@ -180,6 +234,7 @@ export function addColumnWidget(id: Column['id'], widget: ColumnWidget) { column.widgets.unshift(widget); columns[columnIndex] = column; deckStore.set('columns', columns); + saveDeck(); } export function removeColumnWidget(id: Column['id'], widget: ColumnWidget) { @@ -190,6 +245,7 @@ export function removeColumnWidget(id: Column['id'], widget: ColumnWidget) { column.widgets = column.widgets.filter(w => w.id != widget.id); columns[columnIndex] = column; deckStore.set('columns', columns); + saveDeck(); } export function setColumnWidgets(id: Column['id'], widgets: ColumnWidget[]) { @@ -200,6 +256,7 @@ export function setColumnWidgets(id: Column['id'], widgets: ColumnWidget[]) { column.widgets = widgets; columns[columnIndex] = column; deckStore.set('columns', columns); + saveDeck(); } export function updateColumnWidget(id: Column['id'], widgetId: string, data: any) { @@ -213,6 +270,7 @@ export function updateColumnWidget(id: Column['id'], widgetId: string, data: any } : w); columns[columnIndex] = column; deckStore.set('columns', columns); + saveDeck(); } export function updateColumn(id: Column['id'], column: Partial) { @@ -225,4 +283,5 @@ export function updateColumn(id: Column['id'], column: Partial) { } columns[columnIndex] = currentColumn; deckStore.set('columns', columns); + saveDeck(); } diff --git a/src/db/postgre.ts b/src/db/postgre.ts index e2acdeafd..2f3c91016 100644 --- a/src/db/postgre.ts +++ b/src/db/postgre.ts @@ -63,6 +63,7 @@ import { MutedNote } from '../models/entities/muted-note'; import { Channel } from '../models/entities/channel'; import { ChannelFollowing } from '../models/entities/channel-following'; import { ChannelNotePining } from '../models/entities/channel-note-pining'; +import { RegistryItem } from '../models/entities/registry-item'; const sqlLogger = dbLogger.createSubLogger('sql', 'white', false); @@ -159,6 +160,7 @@ export const entities = [ Channel, ChannelFollowing, ChannelNotePining, + RegistryItem, ...charts as any ]; diff --git a/src/models/entities/registry-item.ts b/src/models/entities/registry-item.ts new file mode 100644 index 000000000..54d2ef208 --- /dev/null +++ b/src/models/entities/registry-item.ts @@ -0,0 +1,58 @@ +import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm'; +import { User } from './user'; +import { id } from '../id'; + +// TODO: 同じdomain、同じscope、同じkeyのレコードは二つ以上存在しないように制約付けたい +@Entity() +export class RegistryItem { + @PrimaryColumn(id()) + public id: string; + + @Column('timestamp with time zone', { + comment: 'The created date of the RegistryItem.' + }) + public createdAt: Date; + + @Column('timestamp with time zone', { + comment: 'The updated date of the RegistryItem.' + }) + public updatedAt: Date; + + @Index() + @Column({ + ...id(), + comment: 'The owner ID.' + }) + public userId: User['id']; + + @ManyToOne(type => User, { + onDelete: 'CASCADE' + }) + @JoinColumn() + public user: User | null; + + @Column('varchar', { + length: 1024, + comment: 'The key of the RegistryItem.' + }) + public key: string; + + @Column('jsonb', { + default: {}, nullable: true, + comment: 'The value of the RegistryItem.' + }) + public value: any | null; + + @Index() + @Column('varchar', { + length: 1024, array: true, default: '{}' + }) + public scope: string[]; + + // サードパーティアプリに開放するときのためのカラム + @Index() + @Column('varchar', { + length: 512, nullable: true + }) + public domain: string | null; +} diff --git a/src/models/entities/user-profile.ts b/src/models/entities/user-profile.ts index 97a4150be..0e2c66032 100644 --- a/src/models/entities/user-profile.ts +++ b/src/models/entities/user-profile.ts @@ -94,6 +94,7 @@ export class UserProfile { }) public password: string | null; + // TODO: そのうち消す @Column('jsonb', { default: {}, comment: 'The client-specific data of the User.' diff --git a/src/models/index.ts b/src/models/index.ts index dd05dcbcc..213570a9c 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -57,6 +57,7 @@ import { ChannelRepository } from './repositories/channel'; import { MutedNote } from './entities/muted-note'; import { ChannelFollowing } from './entities/channel-following'; import { ChannelNotePining } from './entities/channel-note-pining'; +import { RegistryItem } from './entities/registry-item'; export const Announcements = getRepository(Announcement); export const AnnouncementReads = getRepository(AnnouncementRead); @@ -116,3 +117,4 @@ export const MutedNotes = getRepository(MutedNote); export const Channels = getCustomRepository(ChannelRepository); export const ChannelFollowings = getRepository(ChannelFollowing); export const ChannelNotePinings = getRepository(ChannelNotePining); +export const RegistryItems = getRepository(RegistryItem); diff --git a/src/models/repositories/user.ts b/src/models/repositories/user.ts index 29facf523..7bf11b316 100644 --- a/src/models/repositories/user.ts +++ b/src/models/repositories/user.ts @@ -261,7 +261,6 @@ export class UserRepository extends Repository { } : {}), ...(opts.includeSecrets ? { - clientData: profile!.clientData, email: profile!.email, emailVerified: profile!.emailVerified, securityKeysList: profile!.twoFactorEnabled diff --git a/src/server/api/api-handler.ts b/src/server/api/api-handler.ts index 7fbc200fc..80a4fd97c 100644 --- a/src/server/api/api-handler.ts +++ b/src/server/api/api-handler.ts @@ -11,7 +11,7 @@ export default (endpoint: IEndpoint, ctx: Koa.Context) => new Promise((res) => { const reply = (x?: any, y?: ApiError) => { if (x == null) { ctx.status = 204; - } else if (typeof x === 'number') { + } else if (typeof x === 'number' && y) { ctx.status = x; ctx.body = { error: { @@ -23,7 +23,8 @@ export default (endpoint: IEndpoint, ctx: Koa.Context) => new Promise((res) => { } }; } else { - ctx.body = x; + // 文字列を返す場合は、JSON.stringify通さないとJSONと認識されない + ctx.body = typeof x === 'string' ? JSON.stringify(x) : x; } res(); }; diff --git a/src/server/api/endpoints/i.ts b/src/server/api/endpoints/i.ts index bceb9548e..3d0c092ad 100644 --- a/src/server/api/endpoints/i.ts +++ b/src/server/api/endpoints/i.ts @@ -1,5 +1,7 @@ import define from '../define'; -import { Users } from '../../../models'; +import { RegistryItems, UserProfiles, Users } from '../../../models'; +import { ensure } from '../../../prelude/ensure'; +import { genId } from '../../../misc/gen-id'; export const meta = { desc: { @@ -22,6 +24,27 @@ export const meta = { export default define(meta, async (ps, user, token) => { const isSecure = token == null; + // TODO: そのうち消す + const profile = await UserProfiles.findOne(user.id).then(ensure); + for (const [k, v] of Object.entries(profile.clientData)) { + await RegistryItems.insert({ + id: genId(), + createdAt: new Date(), + updatedAt: new Date(), + userId: user.id, + domain: null, + scope: ['client', 'base'], + key: k, + value: v + }); + } + await UserProfiles.createQueryBuilder().update() + .set({ + clientData: {}, + }) + .where('userId = :id', { id: user.id }) + .execute(); + return await Users.pack(user, user, { detail: true, includeSecrets: isSecure diff --git a/src/server/api/endpoints/i/notifications.ts b/src/server/api/endpoints/i/notifications.ts index fd355dab8..0e09bc73f 100644 --- a/src/server/api/endpoints/i/notifications.ts +++ b/src/server/api/endpoints/i/notifications.ts @@ -80,7 +80,7 @@ export default define(meta, async (ps, user) => { .where('muting.muterId = :muterId', { muterId: user.id }); const suspendedQuery = Users.createQueryBuilder('users') - .select('id') + .select('users.id') .where('users.isSuspended = TRUE'); const query = makePaginationQuery(Notifications.createQueryBuilder('notification'), ps.sinceId, ps.untilId) diff --git a/src/server/api/endpoints/i/registry/get-all.ts b/src/server/api/endpoints/i/registry/get-all.ts new file mode 100644 index 000000000..ce8653f22 --- /dev/null +++ b/src/server/api/endpoints/i/registry/get-all.ts @@ -0,0 +1,33 @@ +import $ from 'cafy'; +import define from '../../../define'; +import { RegistryItems } from '../../../../../models'; + +export const meta = { + requireCredential: true as const, + + secure: true, + + params: { + scope: { + validator: $.optional.arr($.str.match(/^[a-zA-Z0-9_]+$/)), + default: [], + }, + } +}; + +export default define(meta, async (ps, user) => { + const query = RegistryItems.createQueryBuilder('item') + .where('item.domain IS NULL') + .andWhere('item.userId = :userId', { userId: user.id }) + .andWhere('item.scope = :scope', { scope: ps.scope }); + + const items = await query.getMany(); + + const res = {} as Record; + + for (const item of items) { + res[item.key] = item.value; + } + + return res; +}); diff --git a/src/server/api/endpoints/i/registry/get-detail.ts b/src/server/api/endpoints/i/registry/get-detail.ts new file mode 100644 index 000000000..441833d3d --- /dev/null +++ b/src/server/api/endpoints/i/registry/get-detail.ts @@ -0,0 +1,48 @@ +import $ from 'cafy'; +import define from '../../../define'; +import { RegistryItems } from '../../../../../models'; +import { ApiError } from '../../../error'; + +export const meta = { + requireCredential: true as const, + + secure: true, + + params: { + key: { + validator: $.str + }, + + scope: { + validator: $.optional.arr($.str.match(/^[a-zA-Z0-9_]+$/)), + default: [], + }, + }, + + errors: { + noSuchKey: { + message: 'No such key.', + code: 'NO_SUCH_KEY', + id: '97a1e8e7-c0f7-47d2-957a-92e61256e01a' + }, + }, +}; + +export default define(meta, async (ps, user) => { + const query = RegistryItems.createQueryBuilder('item') + .where('item.domain IS NULL') + .andWhere('item.userId = :userId', { userId: user.id }) + .andWhere('item.key = :key', { key: ps.key }) + .andWhere('item.scope = :scope', { scope: ps.scope }); + + const item = await query.getOne(); + + if (item == null) { + throw new ApiError(meta.errors.noSuchKey); + } + + return { + updatedAt: item.updatedAt, + value: item.value, + }; +}); diff --git a/src/server/api/endpoints/i/registry/get.ts b/src/server/api/endpoints/i/registry/get.ts new file mode 100644 index 000000000..275e660cb --- /dev/null +++ b/src/server/api/endpoints/i/registry/get.ts @@ -0,0 +1,45 @@ +import $ from 'cafy'; +import define from '../../../define'; +import { RegistryItems } from '../../../../../models'; +import { ApiError } from '../../../error'; + +export const meta = { + requireCredential: true as const, + + secure: true, + + params: { + key: { + validator: $.str + }, + + scope: { + validator: $.optional.arr($.str.match(/^[a-zA-Z0-9_]+$/)), + default: [], + }, + }, + + errors: { + noSuchKey: { + message: 'No such key.', + code: 'NO_SUCH_KEY', + id: 'ac3ed68a-62f0-422b-a7bc-d5e09e8f6a6a' + }, + }, +}; + +export default define(meta, async (ps, user) => { + const query = RegistryItems.createQueryBuilder('item') + .where('item.domain IS NULL') + .andWhere('item.userId = :userId', { userId: user.id }) + .andWhere('item.key = :key', { key: ps.key }) + .andWhere('item.scope = :scope', { scope: ps.scope }); + + const item = await query.getOne(); + + if (item == null) { + throw new ApiError(meta.errors.noSuchKey); + } + + return item.value; +}); diff --git a/src/server/api/endpoints/i/registry/keys-with-type.ts b/src/server/api/endpoints/i/registry/keys-with-type.ts new file mode 100644 index 000000000..06d77acbe --- /dev/null +++ b/src/server/api/endpoints/i/registry/keys-with-type.ts @@ -0,0 +1,41 @@ +import $ from 'cafy'; +import define from '../../../define'; +import { RegistryItems } from '../../../../../models'; + +export const meta = { + requireCredential: true as const, + + secure: true, + + params: { + scope: { + validator: $.optional.arr($.str.match(/^[a-zA-Z0-9_]+$/)), + default: [], + }, + } +}; + +export default define(meta, async (ps, user) => { + const query = RegistryItems.createQueryBuilder('item') + .where('item.domain IS NULL') + .andWhere('item.userId = :userId', { userId: user.id }) + .andWhere('item.scope = :scope', { scope: ps.scope }); + + const items = await query.getMany(); + + const res = {} as Record; + + for (const item of items) { + const type = typeof item.value; + res[item.key] = + item.value === null ? 'null' : + Array.isArray(item.value) ? 'array' : + type === 'number' ? 'number' : + type === 'string' ? 'string' : + type === 'boolean' ? 'boolean' : + type === 'object' ? 'object' : + null as never; + } + + return res; +}); diff --git a/src/server/api/endpoints/i/registry/keys.ts b/src/server/api/endpoints/i/registry/keys.ts new file mode 100644 index 000000000..e4dd5044b --- /dev/null +++ b/src/server/api/endpoints/i/registry/keys.ts @@ -0,0 +1,28 @@ +import $ from 'cafy'; +import define from '../../../define'; +import { RegistryItems } from '../../../../../models'; + +export const meta = { + requireCredential: true as const, + + secure: true, + + params: { + scope: { + validator: $.optional.arr($.str.match(/^[a-zA-Z0-9_]+$/)), + default: [], + }, + } +}; + +export default define(meta, async (ps, user) => { + const query = RegistryItems.createQueryBuilder('item') + .select('item.key') + .where('item.domain IS NULL') + .andWhere('item.userId = :userId', { userId: user.id }) + .andWhere('item.scope = :scope', { scope: ps.scope }); + + const items = await query.getMany(); + + return items.map(x => x.key); +}); diff --git a/src/server/api/endpoints/i/registry/remove.ts b/src/server/api/endpoints/i/registry/remove.ts new file mode 100644 index 000000000..e73444efd --- /dev/null +++ b/src/server/api/endpoints/i/registry/remove.ts @@ -0,0 +1,45 @@ +import $ from 'cafy'; +import define from '../../../define'; +import { RegistryItems } from '../../../../../models'; +import { ApiError } from '../../../error'; + +export const meta = { + requireCredential: true as const, + + secure: true, + + params: { + key: { + validator: $.str + }, + + scope: { + validator: $.optional.arr($.str.match(/^[a-zA-Z0-9_]+$/)), + default: [], + }, + }, + + errors: { + noSuchKey: { + message: 'No such key.', + code: 'NO_SUCH_KEY', + id: '1fac4e8a-a6cd-4e39-a4a5-3a7e11f1b019' + }, + }, +}; + +export default define(meta, async (ps, user) => { + const query = RegistryItems.createQueryBuilder('item') + .where('item.domain IS NULL') + .andWhere('item.userId = :userId', { userId: user.id }) + .andWhere('item.key = :key', { key: ps.key }) + .andWhere('item.scope = :scope', { scope: ps.scope }); + + const item = await query.getOne(); + + if (item == null) { + throw new ApiError(meta.errors.noSuchKey); + } + + RegistryItems.remove(item); +}); diff --git a/src/server/api/endpoints/i/registry/scopes.ts b/src/server/api/endpoints/i/registry/scopes.ts new file mode 100644 index 000000000..8b0e1a7fd --- /dev/null +++ b/src/server/api/endpoints/i/registry/scopes.ts @@ -0,0 +1,30 @@ +import $ from 'cafy'; +import define from '../../../define'; +import { RegistryItems } from '../../../../../models'; + +export const meta = { + requireCredential: true as const, + + secure: true, + + params: { + } +}; + +export default define(meta, async (ps, user) => { + const query = RegistryItems.createQueryBuilder('item') + .select('item.scope') + .where('item.domain IS NULL') + .andWhere('item.userId = :userId', { userId: user.id }); + + const items = await query.getMany(); + + const res = [] as string[][]; + + for (const item of items) { + if (res.some(scope => scope.join('.') === item.scope.join('.'))) continue; + res.push(item.scope); + } + + return res; +}); diff --git a/src/server/api/endpoints/i/registry/set.ts b/src/server/api/endpoints/i/registry/set.ts new file mode 100644 index 000000000..c732cfc8f --- /dev/null +++ b/src/server/api/endpoints/i/registry/set.ts @@ -0,0 +1,61 @@ +import $ from 'cafy'; +import { publishMainStream } from '../../../../../services/stream'; +import define from '../../../define'; +import { RegistryItems } from '../../../../../models'; +import { genId } from '../../../../../misc/gen-id'; + +export const meta = { + requireCredential: true as const, + + secure: true, + + params: { + key: { + validator: $.str.min(1) + }, + + value: { + validator: $.nullable.any + }, + + scope: { + validator: $.optional.arr($.str.match(/^[a-zA-Z0-9_]+$/)), + default: [], + }, + } +}; + +export default define(meta, async (ps, user) => { + const query = RegistryItems.createQueryBuilder('item') + .where('item.domain IS NULL') + .andWhere('item.userId = :userId', { userId: user.id }) + .andWhere('item.key = :key', { key: ps.key }) + .andWhere('item.scope = :scope', { scope: ps.scope }); + + const existingItem = await query.getOne(); + + if (existingItem) { + await RegistryItems.update(existingItem.id, { + updatedAt: new Date(), + value: ps.value + }); + } else { + await RegistryItems.insert({ + id: genId(), + createdAt: new Date(), + updatedAt: new Date(), + userId: user.id, + domain: null, + scope: ps.scope, + key: ps.key, + value: ps.value + }); + } + + // TODO: サードパーティアプリが傍受出来てしまうのでどうにかする + publishMainStream(user.id, 'registryUpdated', { + scope: ps.scope, + key: ps.key, + value: ps.value + }); +}); diff --git a/src/server/api/endpoints/i/update-client-setting.ts b/src/server/api/endpoints/i/update-client-setting.ts deleted file mode 100644 index 5143d3d9b..000000000 --- a/src/server/api/endpoints/i/update-client-setting.ts +++ /dev/null @@ -1,40 +0,0 @@ -import $ from 'cafy'; -import { publishMainStream } from '../../../../services/stream'; -import define from '../../define'; -import { UserProfiles } from '../../../../models'; -import { ensure } from '../../../../prelude/ensure'; - -export const meta = { - requireCredential: true as const, - - secure: true, - - params: { - name: { - validator: $.str.match(/^[a-zA-Z]+$/) - }, - - value: { - validator: $.nullable.any - } - } -}; - -export default define(meta, async (ps, user) => { - const profile = await UserProfiles.findOne(user.id).then(ensure); - - await UserProfiles.createQueryBuilder().update() - .set({ - clientData: Object.assign(profile.clientData, { - [ps.name]: ps.value - }), - }) - .where('userId = :id', { id: user.id }) - .execute(); - - // Publish event - publishMainStream(user.id, 'clientSettingUpdated', { - key: ps.name, - value: ps.value - }); -}); diff --git a/yarn.lock b/yarn.lock index 44cd0f074..3c53fc5a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -911,6 +911,11 @@ resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.5.tgz#9adbc12950582aa65ead76bffdf39fe0c27a3c02" integrity sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ== +"@types/throttle-debounce@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz#1c3df624bfc4b62f992d3012b84c56d41eab3776" + integrity sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ== + "@types/tinycolor2@1.4.2": version "1.4.2" resolved "https://registry.yarnpkg.com/@types/tinycolor2/-/tinycolor2-1.4.2.tgz#721ca5c5d1a2988b4a886e35c2ffc5735b6afbdf" @@ -10025,6 +10030,11 @@ three@0.117.1: resolved "https://registry.yarnpkg.com/three/-/three-0.117.1.tgz#a49bcb1a6ddea2f250003e42585dc3e78e92b9d3" integrity sha512-t4zeJhlNzUIj9+ub0l6nICVimSuRTZJOqvk3Rmlu+YGdTOJ49Wna8p7aumpkXJakJfITiybfpYE1XN1o1Z34UQ== +throttle-debounce@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" + integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg== + through2-filter@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" From 889b52e813600a1fb9720ed053d9c61967be3005 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 11 Jan 2021 20:57:48 +0900 Subject: [PATCH 03/32] =?UTF-8?q?=E3=82=A2=E3=82=AB=E3=82=A6=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=81=AE=E9=96=89=E9=8E=96=E3=82=92=E3=82=AF=E3=83=A9?= =?UTF-8?q?=E3=82=A4=E3=82=A2=E3=83=B3=E3=83=88=E3=81=8B=E3=82=89=E8=A1=8C?= =?UTF-8?q?=E3=81=88=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locales/ja-JP.yml | 1 + src/client/pages/settings/other.vue | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 26e055f5c..d451ad72b 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -691,6 +691,7 @@ saveConfirm: "保存しますか?" deleteConfirm: "削除しますか?" invalidValue: "有効な値ではありません。" registry: "レジストリ" +closeAccount: "アカウントを閉鎖する" _registry: scope: "スコープ" diff --git a/src/client/pages/settings/other.vue b/src/client/pages/settings/other.vue index bc42b747d..426d91ba0 100644 --- a/src/client/pages/settings/other.vue +++ b/src/client/pages/settings/other.vue @@ -20,6 +20,8 @@ {{ $ts.registry }} + + {{ $ts.closeAccount }} @@ -35,6 +37,7 @@ import FormButton from '@/components/form/button.vue'; import * as os from '@/os'; import { debug } from '@/config'; import { defaultStore } from '@/store'; +import { signout } from '@/account'; export default defineComponent({ components: { @@ -83,6 +86,22 @@ export default defineComponent({ taskmanager() { os.popup(import('@/components/taskmanager.vue'), { }, {}, 'closed'); + }, + + closeAccount() { + os.dialog({ + title: this.$ts.password, + input: { + type: 'password' + } + }).then(({ canceled, result: password }) => { + if (canceled) return; + os.api('i/delete-account', { + password: password + }).then(() => { + signout(); + }); + }); } } }); From 20e67e7edd40a79d2c39ea8a52eda7994e3d6d2a Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 11 Jan 2021 21:01:54 +0900 Subject: [PATCH 04/32] Tweak tab size --- src/client/style.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/src/client/style.scss b/src/client/style.scss index 076c18161..f4da7cafe 100644 --- a/src/client/style.scss +++ b/src/client/style.scss @@ -29,6 +29,7 @@ html { font-family: "BIZ UDGothic", Roboto, HelveticaNeue, Arial, sans-serif; line-height: 1.35; text-size-adjust: 100%; + tab-size: 2; &, * { scrollbar-color: var(--scrollbarHandle) inherit; From 114a9fbdb2b3f770b8069e81aaa095602290401f Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 11 Jan 2021 22:31:17 +0900 Subject: [PATCH 05/32] =?UTF-8?q?=E3=83=86=E3=83=BC=E3=83=9E=E3=82=92?= =?UTF-8?q?=E3=83=AC=E3=82=B8=E3=82=B9=E3=83=88=E3=83=AA=E3=81=AB=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/client/init.ts | 3 +- src/client/pages/settings/theme.install.vue | 8 +-- src/client/pages/settings/theme.manage.vue | 8 +-- src/client/pages/settings/theme.vue | 7 ++- src/client/store.ts | 2 +- src/client/theme-store.ts | 62 +++++++++++++++++++++ 6 files changed, 78 insertions(+), 12 deletions(-) create mode 100644 src/client/theme-store.ts diff --git a/src/client/init.ts b/src/client/init.ts index f09097fe3..554b4b332 100644 --- a/src/client/init.ts +++ b/src/client/init.ts @@ -56,6 +56,7 @@ import { defaultStore, ColdDeviceStorage } from '@/store'; import { fetchInstance, instance } from '@/instance'; import { makeHotkey } from './scripts/hotkey'; import { search } from './scripts/search'; +import { getThemes } from './theme-store'; console.info(`Misskey v${version}`); @@ -211,7 +212,7 @@ app.mount('body'); watch(defaultStore.reactiveState.darkMode, (darkMode) => { import('@/scripts/theme').then(({ builtinThemes }) => { - const themes = builtinThemes.concat(ColdDeviceStorage.get('themes')); + const themes = builtinThemes.concat(getThemes()); applyTheme(themes.find(x => x.id === (darkMode ? ColdDeviceStorage.get('darkTheme') : ColdDeviceStorage.get('lightTheme')))); }); }, { immediate: localStorage.theme == null }); diff --git a/src/client/pages/settings/theme.install.vue b/src/client/pages/settings/theme.install.vue index 407b75537..852d39f78 100644 --- a/src/client/pages/settings/theme.install.vue +++ b/src/client/pages/settings/theme.install.vue @@ -25,6 +25,7 @@ import FormButton from '@/components/form/button.vue'; import { applyTheme, validateTheme } from '@/scripts/theme'; import * as os from '@/os'; import { ColdDeviceStorage } from '@/store'; +import { addTheme, getThemes } from '@/theme-store'; export default defineComponent({ components: { @@ -74,7 +75,7 @@ export default defineComponent({ }); return false; } - if (ColdDeviceStorage.get('themes').some(t => t.id === theme.id)) { + if (getThemes().some(t => t.id === theme.id)) { os.dialog({ type: 'info', text: this.$ts._theme.alreadyInstalled @@ -90,11 +91,10 @@ export default defineComponent({ if (theme) applyTheme(theme, false); }, - install(code) { + async install(code) { const theme = this.parseThemeCode(code); if (!theme) return; - const themes = ColdDeviceStorage.get('themes').concat(theme); - ColdDeviceStorage.set('themes', themes); + await addTheme(theme); os.dialog({ type: 'success', text: this.$t('_theme.installed', { name: theme.name }) diff --git a/src/client/pages/settings/theme.manage.vue b/src/client/pages/settings/theme.manage.vue index b8126b390..5b9e07530 100644 --- a/src/client/pages/settings/theme.manage.vue +++ b/src/client/pages/settings/theme.manage.vue @@ -37,6 +37,7 @@ import { Theme, builtinThemes } from '@/scripts/theme'; import copyToClipboard from '@/scripts/copy-to-clipboard'; import * as os from '@/os'; import { ColdDeviceStorage } from '@/store'; +import { getThemes, removeTheme } from '@/theme-store'; export default defineComponent({ components: { @@ -57,7 +58,7 @@ export default defineComponent({ title: this.$ts._theme.manage, icon: faFolderOpen }, - installedThemes: ColdDeviceStorage.ref('themes'), + installedThemes: getThemes(), builtinThemes, selectedThemeId: null, faPalette, faDownload, faFolderOpen, faCheck, faTrashAlt, faEye @@ -91,10 +92,7 @@ export default defineComponent({ }, uninstall() { - const theme = this.selectedTheme; - const themes = ColdDeviceStorage.get('themes').filter(t => t.id != theme.id); - ColdDeviceStorage.set('themes', themes); - os.success(); + removeTheme(this.selectedTheme); }, } }); diff --git a/src/client/pages/settings/theme.vue b/src/client/pages/settings/theme.vue index da1ad618b..ddb525441 100644 --- a/src/client/pages/settings/theme.vue +++ b/src/client/pages/settings/theme.vue @@ -77,6 +77,7 @@ import { isDeviceDarkmode } from '@/scripts/is-device-darkmode'; import { ColdDeviceStorage } from '@/store'; import { i18n } from '@/i18n'; import { defaultStore } from '@/store'; +import { fetchThemes, getThemes } from '@/theme-store'; export default defineComponent({ components: { @@ -96,7 +97,7 @@ export default defineComponent({ icon: faPalette }; - const installedThemes = ColdDeviceStorage.ref('themes'); + const installedThemes = ref(getThemes()); const themes = computed(() => builtinThemes.concat(installedThemes.value)); const darkThemes = computed(() => themes.value.filter(t => t.base == 'dark' || t.kind == 'dark')); const lightThemes = computed(() => themes.value.filter(t => t.base == 'light' || t.kind == 'light')); @@ -137,6 +138,10 @@ export default defineComponent({ emit('info', INFO); }); + fetchThemes().then(() => { + installedThemes.value = getThemes(); + }); + return { INFO, darkThemes, diff --git a/src/client/store.ts b/src/client/store.ts index f4f609194..bf042d8ab 100644 --- a/src/client/store.ts +++ b/src/client/store.ts @@ -208,7 +208,7 @@ type Plugin = { */ export class ColdDeviceStorage { public static default = { - themes: [] as Theme[], + themes: [] as Theme[], // TODO: そのうち消す darkTheme: '8050783a-7f63-445a-b270-36d0f6ba1677', lightTheme: '4eea646f-7afa-4645-83e9-83af0333cd37', syncDeviceDarkMode: true, diff --git a/src/client/theme-store.ts b/src/client/theme-store.ts new file mode 100644 index 000000000..5e440efbf --- /dev/null +++ b/src/client/theme-store.ts @@ -0,0 +1,62 @@ +import { api } from '@/os'; +import { $i } from '@/account'; +import { ColdDeviceStorage } from './store'; +import { Theme } from './scripts/theme'; + +const lsCacheKey = $i ? `themes:${$i.id}` : ''; + +export function getThemes(): Theme[] { + return JSON.parse(localStorage.getItem(lsCacheKey) || '[]'); +} + +export async function fetchThemes(): Promise { + if ($i == null) return; + + try { + const themes = await api('i/registry/get', { scope: ['client'], key: 'themes' }); + localStorage.setItem(lsCacheKey, JSON.stringify(themes)); + } catch (e) { + if (e.code === 'NO_SUCH_KEY') return; + throw e; + } +} + +export async function addTheme(theme: Theme): Promise { + await fetchThemes(); + const themes = getThemes().concat(theme); + await api('i/registry/set', { scope: ['client'], key: 'themes', value: themes }); + localStorage.setItem(lsCacheKey, JSON.stringify(themes)); +} + +export async function removeTheme(theme: Theme): Promise { + const themes = getThemes().filter(t => t.id != theme.id); + await api('i/registry/set', { scope: ['client'], key: 'themes', value: themes }); + localStorage.setItem(lsCacheKey, JSON.stringify(themes)); +} + +// TODO: そのうち消す +if (ColdDeviceStorage.get('themes').length > 0) { + const lsThemes = ColdDeviceStorage.get('themes'); + let registryThemes; + try { + registryThemes = await api('i/registry/get', { scope: ['client'], key: 'themes' }); + } catch (e) { + if (e.code === 'NO_SUCH_KEY') { + registryThemes = []; + } else { + throw e; + } + } + const themes = [] as Theme[]; + for (const theme of lsThemes) { + if (themes.some(x => x.id === theme.id)) continue; + themes.push(theme); + } + for (const theme of registryThemes) { + if (themes.some(x => x.id === theme.id)) continue; + themes.push(theme); + } + await api('i/registry/set', { scope: ['client'], key: 'themes', value: themes }); + localStorage.setItem(lsCacheKey, JSON.stringify(themes)); + ColdDeviceStorage.set('themes', []); +} From 52c12f96d53c96f00f35867bcc40c2f0cb339e63 Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 13 Jan 2021 21:43:06 +0900 Subject: [PATCH 06/32] Resolve #7074 --- src/client/ui/deck/column.vue | 9 +++++++-- src/client/ui/deck/deck-store.ts | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/client/ui/deck/column.vue b/src/client/ui/deck/column.vue index 548e0eb09..d0a39965b 100644 --- a/src/client/ui/deck/column.vue +++ b/src/client/ui/deck/column.vue @@ -70,7 +70,6 @@ export default defineComponent({ data() { return { deckStore, - active: true, dragging: false, draghover: false, dropready: false, @@ -83,6 +82,10 @@ export default defineComponent({ return this.column.type === 'main'; }, + active(): boolean { + return this.column.active !== false; + }, + keymap(): any { return { 'shift+up': () => this.$parent.$emit('parent-focus', 'up'), @@ -124,7 +127,9 @@ export default defineComponent({ toggleActive() { if (!this.isStacked) return; - this.active = !this.active; + updateColumn(this.column.id, { + active: !this.column.active + }); }, getMenu() { diff --git a/src/client/ui/deck/deck-store.ts b/src/client/ui/deck/deck-store.ts index 93ea0a322..025d5d70f 100644 --- a/src/client/ui/deck/deck-store.ts +++ b/src/client/ui/deck/deck-store.ts @@ -16,6 +16,7 @@ type Column = { name: string | null; width: number; widgets?: ColumnWidget[]; + active?: boolean; }; function copy(x: T): T { From dccafca58d1e2bad1d087f2a4f66dbe4f16b10fd Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 13 Jan 2021 22:02:40 +0900 Subject: [PATCH 07/32] Update deps --- package.json | 36 +-- yarn.lock | 666 ++++++++++++++++++++++++++++++--------------------- 2 files changed, 407 insertions(+), 295 deletions(-) diff --git a/package.json b/package.json index 685a5dead..dde91b62a 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "@typescript-eslint/parser": "4.10.0", "@vue/compiler-sfc": "3.0.5", "abort-controller": "3.0.0", - "apexcharts": "3.22.3", + "apexcharts": "3.23.1", "autobind-decorator": "2.4.0", "autosize": "4.0.2", "autwh": "0.1.0", @@ -134,12 +134,12 @@ "diskusage": "1.1.3", "double-ended-queue": "2.1.0-0", "escape-regexp": "0.0.1", - "eslint": "7.16.0", - "eslint-plugin-vue": "7.3.0", + "eslint": "7.17.0", + "eslint-plugin-vue": "7.4.1", "eventemitter3": "4.0.7", "feed": "4.2.1", "fibers": "5.0.0", - "file-type": "16.0.1", + "file-type": "16.1.0", "fluent-ffmpeg": "2.1.2", "glob": "7.1.6", "got": "11.8.1", @@ -148,7 +148,7 @@ "gulp-rename": "2.0.0", "gulp-replace": "1.0.0", "gulp-sourcemaps": "2.6.5", - "gulp-terser": "2.0.0", + "gulp-terser": "2.0.1", "gulp-tslint": "8.1.4", "gulp-typescript": "6.0.0-alpha.1", "hard-source-webpack-plugin": "0.13.1", @@ -167,7 +167,7 @@ "jsonld": "3.2.0", "jsrsasign": "8.0.20", "katex": "0.12.0", - "koa": "2.13.0", + "koa": "2.13.1", "koa-bodyparser": "4.3.0", "koa-favicon": "2.1.0", "koa-json-body": "5.3.0", @@ -195,9 +195,9 @@ "parsimmon": "1.16.0", "pg": "8.5.1", "portscanner": "2.2.0", - "postcss": "8.2.1", + "postcss": "8.2.4", "postcss-loader": "4.1.0", - "prismjs": "1.22.0", + "prismjs": "1.23.0", "probe-image-size": "6.0.0", "promise-limit": "2.7.0", "promise-sequential": "1.1.1", @@ -220,27 +220,27 @@ "rimraf": "3.0.2", "rndstr": "1.0.0", "s-age": "1.1.2", - "sass": "1.29.0", - "sass-loader": "10.1.0", + "sass": "1.32.4", + "sass-loader": "10.1.1", "seedrandom": "3.0.5", - "sharp": "0.26.2", + "sharp": "0.27.0", "speakeasy": "2.0.0", "stringz": "2.1.0", "style-loader": "2.0.0", "summaly": "2.4.0", "syslog-pro": "1.0.0", - "systeminformation": "4.31.1", + "systeminformation": "4.34.6", "syuilo-password-strength": "0.0.1", "textarea-caret": "3.1.0", "three": "0.117.1", "throttle-debounce": "3.0.1", "tinycolor2": "1.4.2", "tmp": "0.2.1", - "ts-loader": "8.0.11", - "ts-node": "9.1.0", + "ts-loader": "8.0.14", + "ts-node": "9.1.1", "tslint": "6.1.3", "tslint-sonarts": "1.9.0", - "typeorm": "0.2.29", + "typeorm": "0.2.30", "typescript": "4.1.3", "ulid": "2.3.0", "url-loader": "4.1.1", @@ -256,10 +256,10 @@ "vue-style-loader": "4.1.2", "vuedraggable": "4.0.1", "web-push": "3.4.4", - "webpack": "5.10.1", - "webpack-cli": "4.3.0", + "webpack": "5.13.0", + "webpack-cli": "4.3.1", "websocket": "1.0.33", - "ws": "7.4.1", + "ws": "7.4.2", "xev": "2.0.1" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 3c53fc5a1..c34ee573a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1150,162 +1150,138 @@ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.0.5.tgz#c131d88bd6713cc4d93b3bb1372edb1983225ff0" integrity sha512-gYsNoGkWejBxNO6SNRjOh/xKeZ0H0V+TFzaPzODfBjkAIb0aQgBuixC1brandC/CDJy1wYPwSoYrXpvul7m6yw== -"@webassemblyjs/ast@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.1.tgz#76c6937716d68bf1484c15139f5ed30b9abc8bb4" - integrity sha512-uMu1nCWn2Wxyy126LlGqRVlhdTOsO/bsBRI4dNq3+6SiSuRKRQX6ejjKgh82LoGAPSq72lDUiQ4FWVaf0PecYw== +"@webassemblyjs/ast@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" + integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== dependencies: - "@webassemblyjs/helper-module-context" "1.9.1" - "@webassemblyjs/helper-wasm-bytecode" "1.9.1" - "@webassemblyjs/wast-parser" "1.9.1" + "@webassemblyjs/helper-numbers" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" -"@webassemblyjs/floating-point-hex-parser@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.1.tgz#9eb0ff90a1cdeef51f36ba533ed9f06b5cdadd09" - integrity sha512-5VEKu024RySmLKTTBl9q1eO/2K5jk9ZS+2HXDBLA9s9p5IjkaXxWiDb/+b7wSQp6FRdLaH1IVGIfOex58Na2pg== +"@webassemblyjs/floating-point-hex-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" + integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== -"@webassemblyjs/helper-api-error@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.1.tgz#ad89015c4246cd7f5ed0556700237f8b9c2c752f" - integrity sha512-y1lGmfm38djrScwpeL37rRR9f1D6sM8RhMpvM7CYLzOlHVboouZokXK/G88BpzW0NQBSvCCOnW5BFhten4FPfA== +"@webassemblyjs/helper-api-error@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" + integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== -"@webassemblyjs/helper-buffer@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.1.tgz#186e67ac25f9546ea7939759413987f157524133" - integrity sha512-uS6VSgieHbk/m4GSkMU5cqe/5TekdCzQso4revCIEQ3vpGZgqSSExi4jWpTWwDpAHOIAb1Jfrs0gUB9AA4n71w== +"@webassemblyjs/helper-buffer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" + integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== -"@webassemblyjs/helper-code-frame@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.1.tgz#aab177b7cc87a318a8f8664ad68e2c3828ebc42b" - integrity sha512-ZQ2ZT6Evk4DPIfD+92AraGYaFIqGm4U20e7FpXwl7WUo2Pn1mZ1v8VGH8i+Y++IQpxPbQo/UyG0Khs7eInskzA== +"@webassemblyjs/helper-numbers@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" + integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== dependencies: - "@webassemblyjs/wast-printer" "1.9.1" + "@webassemblyjs/floating-point-hex-parser" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-fsm@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.1.tgz#527e91628e84d13d3573884b3dc4c53a81dcb911" - integrity sha512-J32HGpveEqqcKFS0YbgicB0zAlpfIxJa5MjxDxhu3i5ltPcVfY5EPvKQ1suRguFPehxiUs+/hfkwPEXom/l0lw== +"@webassemblyjs/helper-wasm-bytecode@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" + integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== -"@webassemblyjs/helper-module-context@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.1.tgz#778670b3d471f7cf093d1e7c0dde431b54310e16" - integrity sha512-IEH2cMmEQKt7fqelLWB5e/cMdZXf2rST1JIrzWmf4XBt3QTxGdnnLvV4DYoN8pJjOx0VYXsWg+yF16MmJtolZg== +"@webassemblyjs/helper-wasm-section@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" + integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== dependencies: - "@webassemblyjs/ast" "1.9.1" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" -"@webassemblyjs/helper-wasm-bytecode@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.1.tgz#563f59bcf409ccf469edde168b9426961ffbf6df" - integrity sha512-i2rGTBqFUcSXxyjt2K4vm/3kkHwyzG6o427iCjcIKjOqpWH8SEem+xe82jUk1iydJO250/CvE5o7hzNAMZf0dQ== - -"@webassemblyjs/helper-wasm-section@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.1.tgz#f7988f94c12b01b99a16120cb01dc099b00e4798" - integrity sha512-FetqzjtXZr2d57IECK+aId3D0IcGweeM0CbAnJHkYJkcRTHP+YcMb7Wmc0j21h5UWBpwYGb9dSkK/93SRCTrGg== - dependencies: - "@webassemblyjs/ast" "1.9.1" - "@webassemblyjs/helper-buffer" "1.9.1" - "@webassemblyjs/helper-wasm-bytecode" "1.9.1" - "@webassemblyjs/wasm-gen" "1.9.1" - -"@webassemblyjs/ieee754@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.1.tgz#3b715871ca7d75784717cf9ceca9d7b81374b8af" - integrity sha512-EvTG9M78zP1MmkBpUjGQHZc26DzPGZSLIPxYHCjQsBMo60Qy2W34qf8z0exRDtxBbRIoiKa5dFyWer/7r1aaSQ== +"@webassemblyjs/ieee754@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" + integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.1.tgz#b2ecaa39f9e8277cc9c707c1ca8b2aa7b27d0b72" - integrity sha512-Oc04ub0vFfLnF+2/+ki3AE+anmW4sv9uNBqb+79fgTaPv6xJsOT0dhphNfL3FrME84CbX/D1T9XT8tjFo0IIiw== +"@webassemblyjs/leb128@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" + integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.1.tgz#d02d9daab85cda3211e43caf31dca74c260a73b0" - integrity sha512-llkYtppagjCodFjo0alWOUhAkfOiQPQDIc5oA6C9sFAXz7vC9QhZf/f8ijQIX+A9ToM3c9Pq85X0EX7nx9gVhg== +"@webassemblyjs/utf8@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" + integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== -"@webassemblyjs/wasm-edit@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.1.tgz#e27a6bdbf78e5c72fa812a2fc3cbaad7c3e37578" - integrity sha512-S2IaD6+x9B2Xi8BCT0eGsrXXd8UxAh2LVJpg1ZMtHXnrDcsTtIX2bDjHi40Hio6Lc62dWHmKdvksI+MClCYbbw== +"@webassemblyjs/wasm-edit@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" + integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== dependencies: - "@webassemblyjs/ast" "1.9.1" - "@webassemblyjs/helper-buffer" "1.9.1" - "@webassemblyjs/helper-wasm-bytecode" "1.9.1" - "@webassemblyjs/helper-wasm-section" "1.9.1" - "@webassemblyjs/wasm-gen" "1.9.1" - "@webassemblyjs/wasm-opt" "1.9.1" - "@webassemblyjs/wasm-parser" "1.9.1" - "@webassemblyjs/wast-printer" "1.9.1" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/helper-wasm-section" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-opt" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + "@webassemblyjs/wast-printer" "1.11.0" -"@webassemblyjs/wasm-gen@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.1.tgz#56a0787d1fa7994fdc7bea59004e5bec7189c5fc" - integrity sha512-bqWI0S4lBQsEN5FTZ35vYzfKUJvtjNnBobB1agCALH30xNk1LToZ7Z8eiaR/Z5iVECTlBndoRQV3F6mbEqE/fg== +"@webassemblyjs/wasm-gen@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" + integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== dependencies: - "@webassemblyjs/ast" "1.9.1" - "@webassemblyjs/helper-wasm-bytecode" "1.9.1" - "@webassemblyjs/ieee754" "1.9.1" - "@webassemblyjs/leb128" "1.9.1" - "@webassemblyjs/utf8" "1.9.1" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" -"@webassemblyjs/wasm-opt@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.1.tgz#fbdf8943a825e6dcc4cd69c3e092289fa4aec96c" - integrity sha512-gSf7I7YWVXZ5c6XqTEqkZjVs8K1kc1k57vsB6KBQscSagDNbAdxt6MwuJoMjsE1yWY1tsuL+pga268A6u+Fdkg== +"@webassemblyjs/wasm-opt@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" + integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== dependencies: - "@webassemblyjs/ast" "1.9.1" - "@webassemblyjs/helper-buffer" "1.9.1" - "@webassemblyjs/wasm-gen" "1.9.1" - "@webassemblyjs/wasm-parser" "1.9.1" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" -"@webassemblyjs/wasm-parser@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.1.tgz#5e8352a246d3f605312c8e414f7990de55aaedfa" - integrity sha512-ImM4N2T1MEIond0MyE3rXvStVxEmivQrDKf/ggfh5pP6EHu3lL/YTAoSrR7shrbKNPpeKpGesW1LIK/L4kqduw== +"@webassemblyjs/wasm-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" + integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== dependencies: - "@webassemblyjs/ast" "1.9.1" - "@webassemblyjs/helper-api-error" "1.9.1" - "@webassemblyjs/helper-wasm-bytecode" "1.9.1" - "@webassemblyjs/ieee754" "1.9.1" - "@webassemblyjs/leb128" "1.9.1" - "@webassemblyjs/utf8" "1.9.1" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" -"@webassemblyjs/wast-parser@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.1.tgz#e25ef13585c060073c1db0d6bd94340fdeee7596" - integrity sha512-2xVxejXSvj3ls/o2TR/zI6p28qsGupjHhnHL6URULQRcXmryn3w7G83jQMcT7PHqUfyle65fZtWLukfdLdE7qw== +"@webassemblyjs/wast-printer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" + integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== dependencies: - "@webassemblyjs/ast" "1.9.1" - "@webassemblyjs/floating-point-hex-parser" "1.9.1" - "@webassemblyjs/helper-api-error" "1.9.1" - "@webassemblyjs/helper-code-frame" "1.9.1" - "@webassemblyjs/helper-fsm" "1.9.1" + "@webassemblyjs/ast" "1.11.0" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.1.tgz#b9f38e93652037d4f3f9c91584635af4191ed7c1" - integrity sha512-tDV8V15wm7mmbAH6XvQRU1X+oPGmeOzYsd6h7hlRLz6QpV4Ec/KKxM8OpLtFmQPLCreGxTp+HuxtH4pRIZyL9w== - dependencies: - "@webassemblyjs/ast" "1.9.1" - "@webassemblyjs/wast-parser" "1.9.1" - "@xtuc/long" "4.2.2" - -"@webpack-cli/info@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.0.tgz#6051d6adf3618df664f4945a2b76355c00f83f0d" - integrity sha512-+wA8lBKopgKmN76BSGJVJby5ZXDlsrO6p/nm7fUBsHznRNWB/ozotJP7Yfcz8JPfqeG2LxwYlTH2u6D9a/0XAw== +"@webpack-cli/info@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.1.tgz#af98311f983d0b9fce7284cfcf1acaf1e9f4879c" + integrity sha512-fLnDML5HZ5AEKzHul8xLAksoKN2cibu6MgonkUj8R9V7bbeVRkd1XbGEGWrAUNYHbX1jcqCsDEpBviE5StPMzQ== dependencies: envinfo "^7.7.3" -"@webpack-cli/serve@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.2.0.tgz#8cb2c1e95426f5caed1f3bf9d7ccf3ea41d85f52" - integrity sha512-jI3P7jMp/AXDSPkM+ClwRcJZbxnlvNC8bVZBmyRr4scMMZ4p5WQcXkw3Q+Hc7RQekomJlBMN+UQGliT4hhG8Vw== +"@webpack-cli/serve@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.2.1.tgz#7513d7a769e3f97958de799b5b49874425ae3396" + integrity sha512-Zj1z6AyS+vqV6Hfi7ngCjFGdHV5EwZNIHo6QfFTNe9PyW+zBU1zJ9BiOW1pmUEq950RC4+Dym6flyA/61/vhyw== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -1518,10 +1494,10 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -apexcharts@3.22.3: - version "3.22.3" - resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-3.22.3.tgz#a829c4500db8478069b80e227741830b77d89467" - integrity sha512-ZRZWmAmSdyc+tFhHMZ10ZxbvSbomWe46izpi8yQj5cKLxuujw2XeXVQ0jxnPl9yE5Q7W2hAbDWStaouBN4mSuw== +apexcharts@3.23.1: + version "3.23.1" + resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-3.23.1.tgz#6d63ae2a0b5cbb54644fc0147a228ece57afa8dc" + integrity sha512-7fRpquXp725BUew5OO1mJWk16/IJPCUl0l8SjhISnAhAtbTaM9PnXPSmN2BvKO4RcT457CzMM7MCG5UokiTwcA== dependencies: svg.draggable.js "^2.2.2" svg.easing.js "^2.0.0" @@ -1611,6 +1587,11 @@ array-each@^1.0.0, array-each@^1.0.1: resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= +array-flatten@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-3.0.0.tgz#6428ca2ee52c7b823192ec600fa3ed2f157cd541" + integrity sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA== + array-initial@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" @@ -1879,7 +1860,7 @@ binaryextensions@2: resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.2.0.tgz#e7c6ba82d4f5f5758c26078fe8eea28881233311" integrity sha512-bHhs98rj/7i/RZpCSJ3uk55pLXOItjIrh2sRQZSM6OoktScX+LxJzvlU+FELp9j3TdcddTmmYArLSGptCTwjuw== -bl@^4.0.1: +bl@^4.0.1, bl@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== @@ -2417,7 +2398,7 @@ clean-css@^4.1.11, clean-css@^4.2.1: dependencies: source-map "~0.6.0" -cli-highlight@2.1.9, cli-highlight@^2.1.4: +cli-highlight@2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.9.tgz#4f4ecb05326d70d56d4b4249fabf9a70fb002497" integrity sha512-t8RNIZgiI24i/mslZ8XT8o660RUj5ZbUJpEZrZa/BNekTzdC2LfMRAnt0Y7sgzNM4FGW5tmWg/YnbTH8o1eIOQ== @@ -2429,6 +2410,18 @@ cli-highlight@2.1.9, cli-highlight@^2.1.4: parse5-htmlparser2-tree-adapter "^6.0.0" yargs "^15.0.0" +cli-highlight@^2.1.10: + version "2.1.10" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.10.tgz#26a087da9209dce4fcb8cf5427dc97cd96ac173a" + integrity sha512-CcPFD3JwdQ2oSzy+AMG6j3LRTkNjM82kzcSKzoVw6cLanDCJNlsLjeqVTOTfOfucnWv5F0rmBemVf1m9JiIasw== + dependencies: + chalk "^4.0.0" + highlight.js "^10.0.0" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + clipboard@^2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376" @@ -2483,6 +2476,15 @@ cliui@^7.0.0: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" @@ -2626,6 +2628,14 @@ color-string@^1.5.2: color-name "^1.0.0" simple-swizzle "^0.2.2" +color-string@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" + integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + color-support@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" @@ -2640,7 +2650,7 @@ color@^0.11.0: color-convert "^1.3.0" color-string "^0.3.0" -color@^3.0.0, color@^3.1.2: +color@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== @@ -2648,6 +2658,14 @@ color@^3.0.0, color@^3.1.2: color-convert "^1.9.1" color-string "^1.5.2" +color@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.4" + colorette@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" @@ -2886,7 +2904,7 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2: +cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -3348,7 +3366,7 @@ depd@^1.1.2, depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -depd@~2.0.0: +depd@^2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -3595,13 +3613,13 @@ enhanced-resolve@^4.0.0: memory-fs "^0.5.0" tapable "^1.0.0" -enhanced-resolve@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.3.1.tgz#3f988d0d7775bdc2d96ede321dc81f8249492f57" - integrity sha512-G1XD3MRGrGfNcf6Hg0LVZG7GIKcYkbfHa5QMxt1HDUTdYoXH0JR1xXyg+MaKLF73E9A27uWNVxvFivNRYeUB6w== +enhanced-resolve@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.6.0.tgz#ad19a1665f230a6e384724a30acf3f7332b2b3f0" + integrity sha512-C3GGDfFZmqUa21o10YRKbZN60DPl0HyXKXxoEnQMWso9u7KMU23L7CBHfr/rVxORddY/8YQZaU2MZ1ewTS8Pcw== dependencies: graceful-fs "^4.2.4" - tapable "^2.0.0" + tapable "^2.2.0" enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" @@ -3721,6 +3739,11 @@ escalade@^3.0.2, escalade@^3.1.0: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e" integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig== +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-html@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -3753,10 +3776,10 @@ escodegen@^1.14.1: optionalDependencies: source-map "~0.6.1" -eslint-plugin-vue@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.3.0.tgz#0faf0fcf0e1b1052bf800d4dee42d64f50679cb0" - integrity sha512-4rc9xrZgwT4aLz3XE6lrHu+FZtDLWennYvtzVvvS81kW9c65U4DUzQQWAFjDCgCFvN6HYWxi7ueEtxZVSB+f0g== +eslint-plugin-vue@7.4.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-7.4.1.tgz#2526ef0c010c218824a89423dbe6ddbe76f04fd6" + integrity sha512-W/xPNHYIkGJphLUM2UIYYGKbRw3BcDoMIPY9lu1TTa2YLiZoxurddfnmOP+UOVywxb5vi438ejzwvKdZqydtIw== dependencies: eslint-utils "^2.1.0" natural-compare "^1.4.0" @@ -3788,10 +3811,10 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@7.16.0: - version "7.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.16.0.tgz#a761605bf9a7b32d24bb7cde59aeb0fd76f06092" - integrity sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw== +eslint@7.17.0: + version "7.17.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.17.0.tgz#4ccda5bf12572ad3bf760e6f195886f50569adb0" + integrity sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ== dependencies: "@babel/code-frame" "^7.0.0" "@eslint/eslintrc" "^0.2.2" @@ -3939,19 +3962,19 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== +execa@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" + 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.0" - onetime "^5.1.0" - signal-exit "^3.0.2" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" strip-final-newline "^2.0.0" exit-on-epipe@~1.0.1: @@ -4110,10 +4133,10 @@ file-entry-cache@^6.0.0: dependencies: flat-cache "^3.0.4" -file-type@16.0.1: - version "16.0.1" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.0.1.tgz#d12d19c716e49d79e0a27bcf502961498b0b9928" - integrity sha512-rwXqMZiizJd0uXZE52KN2DtPBAV99qz9cUTHHt8pSyaQzgVYrHJGR0qt2p4N/yzHEL/tGrlB/TgawQb4Fnxxyw== +file-type@16.1.0: + version "16.1.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.1.0.tgz#1c8a4458b2103e07d2b49ae7f76384abafe86529" + integrity sha512-G4Klqf6tuprtG0pC4r9kni4Wv8XhAAsfHphVqsQGA+YiOlPAO40BZduDqKfv0RFsu9q9ZbFObWfwszY/NqhEZw== dependencies: readable-web-to-node-stream "^3.0.0" strtok3 "^6.0.3" @@ -4404,13 +4427,18 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" -get-stream@^5.0.0, get-stream@^5.1.0: +get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -4634,10 +4662,10 @@ gulp-sourcemaps@2.6.5: strip-bom-string "1.X" through2 "2.X" -gulp-terser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/gulp-terser/-/gulp-terser-2.0.0.tgz#07f95ef9121fe9d4970c3c4ee775c9cd658d0474" - integrity sha512-8KxzgUpNeLsSujUCrNKUiSI1ioO5TfW4ODhbM+wzNTWgYp7yCIl1c/5EeOI+SOXaNLi+BzzMqrbb0eYMIThFCQ== +gulp-terser@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/gulp-terser/-/gulp-terser-2.0.1.tgz#5f8f4fc54588b79519243809cc8eef4936286d0d" + integrity sha512-XCrnCXP8ovNpgLK9McJIXlgm0j3W2TsiWu7K9y3m+Sn5XZgUzi6U8MPHtS3NdLMic9poCj695N0ARJ2B6atypw== dependencies: plugin-error "^1.0.1" terser "5.4.0" @@ -4982,10 +5010,10 @@ https-proxy-agent@5.0.0, https-proxy-agent@^5.0.0: agent-base "6" debug "4" -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== humanize-number@0.0.2: version "0.0.2" @@ -5532,10 +5560,10 @@ istextorbinary@2.2.1: editions "^1.3.3" textextensions "2" -jest-worker@^26.6.1: - version "26.6.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.1.tgz#c2ae8cde6802cc14056043f997469ec170d9c32a" - integrity sha512-R5IE3qSGz+QynJx8y+ICEkdI2OJ3RJjRQVEyCcFAd3yVhQSEtquziPO29Mlzgn07LOVE8u8jhJ1FqcwegiXWOw== +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== dependencies: "@types/node" "*" merge-stream "^2.0.0" @@ -5910,10 +5938,10 @@ koa-views@6.3.1: mz "^2.4.0" pretty "^2.0.0" -koa@2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/koa/-/koa-2.13.0.tgz#25217e05efd3358a7e5ddec00f0a380c9b71b501" - integrity sha512-i/XJVOfPw7npbMv67+bOeXr3gPqOAw6uh5wFyNs3QvJ47tUx3M3V9rIE0//WytY42MKz4l/MXKyGkQ2LQTfLUQ== +koa@2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/koa/-/koa-2.13.1.tgz#6275172875b27bcfe1d454356a5b6b9f5a9b1051" + integrity sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w== dependencies: accepts "^1.3.5" cache-content-type "^1.0.0" @@ -5922,7 +5950,7 @@ koa@2.13.0: cookies "~0.8.0" debug "~3.1.0" delegates "^1.0.0" - depd "^1.1.2" + depd "^2.0.0" destroy "^1.0.4" encodeurl "^1.0.2" escape-html "^1.0.3" @@ -6068,10 +6096,10 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -loader-runner@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.1.0.tgz#f70bc0c29edbabdf2043e7ee73ccc3fe1c96b42d" - integrity sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA== +loader-runner@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" + integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.4.0" @@ -6259,6 +6287,13 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + lru-queue@0.1: version "0.1.0" resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" @@ -6542,6 +6577,11 @@ mkdirp-classic@^0.5.2: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz#54c441ce4c96cd7790e10b41a87aa51068ecab2b" integrity sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g== +mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -6747,10 +6787,10 @@ node-abi@^2.7.0: dependencies: semver "^5.4.1" -node-addon-api@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.0.2.tgz#04bc7b83fd845ba785bb6eae25bc857e1ef75681" - integrity sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg== +node-addon-api@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.1.0.tgz#98b21931557466c6729e51cb77cd39c965f42239" + integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw== node-fetch@2.6.1: version "2.6.1" @@ -6884,7 +6924,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0: +npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -7059,7 +7099,7 @@ once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0: +onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -7180,6 +7220,13 @@ p-limit@^3.0.2: dependencies: p-try "^2.0.0" +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -8130,10 +8177,10 @@ postcss-zindex@^2.0.1: postcss "^5.0.4" uniqs "^2.0.0" -postcss@8.2.1, postcss@^8.1.4: - version "8.2.1" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.1.tgz#eabc5557c4558059b9d9e5b15bce7ffa9089c2a8" - integrity sha512-RhsqOOAQzTgh1UB/IZdca7F9WDb7SUCR2Vnv1x7DbvuuggQIpoDwjK+q0rzoPffhYvWNKX5JSwS4so4K3UC6vA== +postcss@8.2.4: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.4.tgz#20a98a39cf303d15129c2865a9ec37eda0031d04" + integrity sha512-kRFftRoExRVXZlwUuay9iC824qmXPcQQVzAjbCCgjpXnkdMCJYBu2gTwAaFBzv8ewND6O8xFb3aELmEkh9zTzg== dependencies: colorette "^1.2.1" nanoid "^3.1.20" @@ -8158,6 +8205,15 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.3 source-map "^0.6.1" supports-color "^6.1.0" +postcss@^8.1.4: + version "8.2.1" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.1.tgz#eabc5557c4558059b9d9e5b15bce7ffa9089c2a8" + integrity sha512-RhsqOOAQzTgh1UB/IZdca7F9WDb7SUCR2Vnv1x7DbvuuggQIpoDwjK+q0rzoPffhYvWNKX5JSwS4so4K3UC6vA== + dependencies: + colorette "^1.2.1" + nanoid "^3.1.20" + source-map "^0.6.1" + postgres-array@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" @@ -8180,16 +8236,16 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" -prebuild-install@^5.3.5: - version "5.3.5" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.5.tgz#e7e71e425298785ea9d22d4f958dbaccf8bb0e1b" - integrity sha512-YmMO7dph9CYKi5IR/BzjOJlRzpxGGVo1EsLSUZ0mt/Mq0HWZIHOKHHcHdT69yG54C9m6i45GpItwRHpk0Py7Uw== +prebuild-install@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.0.0.tgz#669022bcde57c710a869e39c5ca6bf9cd207f316" + integrity sha512-h2ZJ1PXHKWZpp1caLw0oX9sagVpL2YTk+ZwInQbQ3QqNd4J03O6MpFNmMTJlkfgPENWqe5kP0WjQLqz5OjLfsw== dependencies: detect-libc "^1.0.3" expand-template "^2.0.3" github-from-package "0.0.0" minimist "^1.2.3" - mkdirp "^0.5.1" + mkdirp-classic "^0.5.3" napi-build-utils "^1.0.1" node-abi "^2.7.0" noop-logger "^0.1.1" @@ -8243,10 +8299,10 @@ printj@~1.1.0: resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== -prismjs@1.22.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.22.0.tgz#73c3400afc58a823dd7eed023f8e1ce9fd8977fa" - integrity sha512-lLJ/Wt9yy0AiSYBf212kK3mM5L8ycwlyTlSxHBAneXLR0nzFMlZ5y7riFPF3E33zXOF2IH95xdY5jIyZbM9z/w== +prismjs@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.23.0.tgz#d3b3967f7d72440690497652a9d40ff046067f33" + integrity sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA== optionalDependencies: clipboard "^2.0.0" @@ -9097,10 +9153,10 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass-loader@10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.0.tgz#1727fcc0c32ab3eb197cda61d78adf4e9174a4b3" - integrity sha512-ZCKAlczLBbFd3aGAhowpYEy69Te3Z68cg8bnHHl6WnSCvnKpbM6pQrz957HWMa8LKVuhnD9uMplmMAHwGQtHeg== +sass-loader@10.1.1: + version "10.1.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d" + integrity sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw== dependencies: klona "^2.0.4" loader-utils "^2.0.0" @@ -9108,10 +9164,10 @@ sass-loader@10.1.0: schema-utils "^3.0.0" semver "^7.3.2" -sass@1.29.0: - version "1.29.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.29.0.tgz#ec4e1842c146d8ea9258c28c141b8c2b7c6ab7f1" - integrity sha512-ZpwAUFgnvAUCdkjwPREny+17BpUj8nh5Yr6zKPGtLNTLrmtoRYIjm7njP24COhjJldjwW1dcv52Lpf4tNZVVRA== +sass@1.32.4: + version "1.32.4" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.4.tgz#308bf29dd7f53d44ae4f06580e9a910ad9aa411e" + integrity sha512-N0BT0PI/t3+gD8jKa83zJJUb7ssfQnRRfqN+GIErokW6U4guBpfYl8qYB+OFLEho+QvnV5ZH1R9qhUC/Z2Ch9w== dependencies: chokidar ">=2.0.0 <4.0.0" @@ -9173,7 +9229,7 @@ semver-greatest-satisfied-range@^1.1.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.3.0: +semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -9183,6 +9239,13 @@ semver@^7.2.1, semver@^7.3.2: resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== +semver@^7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + serialize-javascript@5.0.1, serialize-javascript@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" @@ -9223,19 +9286,20 @@ sha.js@^2.4.11: inherits "^2.0.1" safe-buffer "^5.0.1" -sharp@0.26.2: - version "0.26.2" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.26.2.tgz#3d5777d246ae32890afe82a783c1cbb98456a88c" - integrity sha512-bGBPCxRAvdK9bX5HokqEYma4j/Q5+w8Nrmb2/sfgQCLEUx/HblcpmOfp59obL3+knIKnOhyKmDb4tEOhvFlp6Q== +sharp@0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.27.0.tgz#523fba913ba674985dcc688a6a5237384079d80f" + integrity sha512-II+YBCW3JuVWQZdpTEA2IBjJcYXPuoKo3AUqYuW+FK9Um93v2gPE2ihICCsN5nHTUoP8WCjqA83c096e8n//Rw== dependencies: - color "^3.1.2" + array-flatten "^3.0.0" + color "^3.1.3" detect-libc "^1.0.3" - node-addon-api "^3.0.2" + node-addon-api "^3.1.0" npmlog "^4.1.2" - prebuild-install "^5.3.5" - semver "^7.3.2" + prebuild-install "^6.0.0" + semver "^7.3.4" simple-get "^4.0.0" - tar-fs "^2.1.0" + tar-fs "^2.1.1" tunnel-agent "^0.6.0" shebang-command@^1.2.0: @@ -9267,7 +9331,7 @@ sigmund@^1.0.1: resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== @@ -9893,10 +9957,10 @@ syslog-pro@1.0.0: dependencies: moment "^2.22.2" -systeminformation@4.31.1: - version "4.31.1" - resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-4.31.1.tgz#2e02c26987494d4b6a4d2d83138724593bc98d50" - integrity sha512-dVCDWNMN8ncMZo5vbMCA5dpAdMgzafK2ucuJy5LFmGtp1cG6farnPg8QNvoOSky9SkFoEX1Aw0XhcOFV6TnLYA== +systeminformation@4.34.6: + version "4.34.6" + resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-4.34.6.tgz#d5d592fdba9dd77224551d3ae3a35ae49aff9a0d" + integrity sha512-JWcrnfBqkws9R12jTYF7+zl59bdhL/+sw6efHZllIdtztrRfyykL4Bbr0aTRHQqDP0tjFhZOlRHifPSSmdqmFg== syuilo-password-strength@0.0.1: version "0.0.1" @@ -9918,11 +9982,16 @@ tapable@^1.0.0, tapable@^1.0.0-beta.5: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tapable@^2.0.0, tapable@^2.1.1: +tapable@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.1.1.tgz#b01cc1902d42a7bb30514e320ce21c456f72fd3f" integrity sha512-Wib1S8m2wdpLbmQz0RBEVosIyvb/ykfKXf3ZIDqvWoMg/zTNm6G/tDSuUM61J1kNCDXWJrLHGSFeMhAG+gAGpQ== +tapable@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" + integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== + tar-fs@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.1.tgz#e44086c1c60d31a4f0cf893b1c4e155dabfae9e2" @@ -9933,15 +10002,15 @@ tar-fs@^2.0.0: pump "^3.0.0" tar-stream "^2.0.0" -tar-fs@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.0.tgz#d1cdd121ab465ee0eb9ccde2d35049d3f3daf0d5" - integrity sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg== +tar-fs@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== dependencies: chownr "^1.1.1" mkdirp-classic "^0.5.2" pump "^3.0.0" - tar-stream "^2.0.0" + tar-stream "^2.1.4" tar-stream@^2.0.0: version "2.1.2" @@ -9954,6 +10023,17 @@ tar-stream@^2.0.0: inherits "^2.0.3" readable-stream "^3.1.1" +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + tar@^6.0.2: version "6.0.5" resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" @@ -9966,17 +10046,17 @@ tar@^6.0.2: mkdirp "^1.0.3" yallist "^4.0.0" -terser-webpack-plugin@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz#ec60542db2421f45735c719d2e17dabfbb2e3e42" - integrity sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ== +terser-webpack-plugin@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz#7effadee06f7ecfa093dbbd3e9ab23f5f3ed8673" + integrity sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q== dependencies: - jest-worker "^26.6.1" - p-limit "^3.0.2" + jest-worker "^26.6.2" + p-limit "^3.1.0" schema-utils "^3.0.0" serialize-javascript "^5.0.1" source-map "^0.6.1" - terser "^5.3.8" + terser "^5.5.1" terser@5.4.0: version "5.4.0" @@ -9987,10 +10067,10 @@ terser@5.4.0: source-map "~0.7.2" source-map-support "~0.5.19" -terser@^5.3.8: - version "5.3.8" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.8.tgz#991ae8ba21a3d990579b54aa9af11586197a75dd" - integrity sha512-zVotuHoIfnYjtlurOouTazciEfL7V38QMAOhGqpXDEg6yT13cF4+fEP9b0rrCEQTn+tT46uxgFsTZzhygk+CzQ== +terser@^5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.5.1.tgz#540caa25139d6f496fdea056e414284886fb2289" + integrity sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ== dependencies: commander "^2.20.0" source-map "~0.7.2" @@ -10212,21 +10292,21 @@ trace-redirect@1.0.6: resolved "https://registry.yarnpkg.com/trace-redirect/-/trace-redirect-1.0.6.tgz#ac629b5bf8247d30dde5a35fe9811b811075b504" integrity sha512-UUfa1DjjU5flcjMdaFIiIEGDTyu2y/IiMjOX4uGXa7meKBS4vD4f2Uy/tken9Qkd4Jsm4sRsfZcIIPqrRVF3Mg== -ts-loader@8.0.11: - version "8.0.11" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.11.tgz#35d58a65932caacb120426eea59eca841786c899" - integrity sha512-06X+mWA2JXoXJHYAesUUL4mHFYhnmyoCdQVMXofXF552Lzd4wNwSGg7unJpttqUP7ziaruM8d7u8LUB6I1sgzA== +ts-loader@8.0.14: + version "8.0.14" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.14.tgz#e46ac1f8dcb88808d0b1335d2eae65b74bd78fe8" + integrity sha512-Jt/hHlUnApOZjnSjTmZ+AbD5BGlQFx3f1D0nYuNKwz0JJnuDGHJas6az+FlWKwwRTu+26GXpv249A8UAnYUpqA== dependencies: - chalk "^2.3.0" + chalk "^4.1.0" enhanced-resolve "^4.0.0" - loader-utils "^1.0.2" + loader-utils "^2.0.0" micromatch "^4.0.0" - semver "^6.0.0" + semver "^7.3.4" -ts-node@9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.0.tgz#95eae4c6d0f94f2545884078e1eb1b14d2155639" - integrity sha512-0yqcL4sgruCvM+w64LiAfNJo6+lHfCYc5Ajj4yiLNkJ9oZ2HWaa+Kso7htYOOxVQ7+csAjdUjffOe9PIqC4pMg== +ts-node@9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" + integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== dependencies: arg "^4.1.0" create-require "^1.1.0" @@ -10366,16 +10446,16 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typeorm@0.2.29: - version "0.2.29" - resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.29.tgz#401289dc91900d72eccb26e31cdb7f0591a2272e" - integrity sha512-ih1vrTe3gEAGKRcWlcsTRxTL7gNjacQE498wVGuJ3ZRujtMqPZlbAWuC7xDzWCRjQnkZYNwZQeG9UgKfxSHB5g== +typeorm@0.2.30: + version "0.2.30" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.30.tgz#a0df2256402cbcdde8049a244437560495ce9b38" + integrity sha512-qpr8AO3Phi6ZF7qMHOrRdNisVt8jE1KfmW0ooLFcXscA87aJ12aBPyB9cJfxGNjNwd7B3WIK9ZlBveWiqd74QA== dependencies: "@sqltools/formatter" "1.2.2" app-root-path "^3.0.0" buffer "^5.5.0" chalk "^4.1.0" - cli-highlight "^2.1.4" + cli-highlight "^2.1.10" debug "^4.1.1" dotenv "^8.2.0" glob "^7.1.6" @@ -10815,18 +10895,18 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-cli@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.3.0.tgz#e39303bf9f8002de122903e97029f3443d0f9174" - integrity sha512-gve+BBKrzMPTOYDjupzV8JchUznhVWMKtWM1hFIQWi6XoeLvGNoQwkrtMWVb+aJ437GgCKdta7sIn10v621pKA== +webpack-cli@4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.3.1.tgz#87a7873bc9c6a4708aa657759274b691e72a04a8" + integrity sha512-/F4+9QNZM/qKzzL9/06Am8NXIkGV+/NqQ62Dx7DSqudxxpAgBqYn6V7+zp+0Y7JuWksKUbczRY3wMTd+7Uj6OA== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/info" "^1.2.0" - "@webpack-cli/serve" "^1.2.0" + "@webpack-cli/info" "^1.2.1" + "@webpack-cli/serve" "^1.2.1" colorette "^1.2.1" commander "^6.2.0" enquirer "^2.3.6" - execa "^4.1.0" + execa "^5.0.0" fastest-levenshtein "^1.0.12" import-local "^3.0.2" interpret "^2.2.0" @@ -10857,33 +10937,32 @@ webpack-sources@^2.1.1: source-list-map "^2.0.1" source-map "^0.6.1" -webpack@5.10.1: - version "5.10.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.10.1.tgz#81d1853d34bef5d6e5bfa119b98a43764b26c100" - integrity sha512-mHu4iM2mW7d/8R91VPPNtUCNd1D8k51TTb4e0XjylapIR6WEmW8XUTBZq8TqmShj9XYxVXJn6AzKlWnrlty6DA== +webpack@5.13.0: + version "5.13.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.13.0.tgz#275351b043bd212562f4390e903619d07d5a2fcf" + integrity sha512-NPhMEtfhSVegp1FNPkCM1MPygDm0GHwpreG10dh//0Gr0epfB0br9nlgEfxSghxJqrQ7j9XzgO91CGGLWZiHeA== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.45" - "@webassemblyjs/ast" "1.9.1" - "@webassemblyjs/helper-module-context" "1.9.1" - "@webassemblyjs/wasm-edit" "1.9.1" - "@webassemblyjs/wasm-parser" "1.9.1" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/wasm-edit" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" acorn "^8.0.4" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.3.1" + enhanced-resolve "^5.6.0" eslint-scope "^5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.4" json-parse-better-errors "^1.0.2" - loader-runner "^4.1.0" + loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" pkg-dir "^5.0.0" schema-utils "^3.0.0" tapable "^2.1.1" - terser-webpack-plugin "^5.0.3" + terser-webpack-plugin "^5.1.1" watchpack "^2.0.0" webpack-sources "^2.1.1" @@ -11050,7 +11129,12 @@ write-json-file@^2.3.0: sort-keys "^2.0.0" write-file-atomic "^2.0.0" -ws@7.4.1, ws@^7.2.3: +ws@7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.2.tgz#782100048e54eb36fe9843363ab1c68672b261dd" + integrity sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA== + +ws@^7.2.3: version "7.4.1" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.1.tgz#a333be02696bd0e54cea0434e21dcc8a9ac294bb" integrity sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ== @@ -11128,6 +11212,11 @@ y18n@^5.0.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.2.tgz#48218df5da2731b4403115c39a1af709c873f829" integrity sha512-CkwaeZw6dQgqgPGeTWKMXCRmMcBgETFlTml1+ZOO+q7kGst8NREJ+eWwFNPVUQ4QGdAaklbqCZHH6Zuep1RjiA== +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + yaeti@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" @@ -11191,6 +11280,11 @@ yargs-parser@^20.0.0: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.1.tgz#28f3773c546cdd8a69ddae68116b48a5da328e77" integrity sha512-yYsjuSkjbLMBp16eaOt7/siKTjNVjMm3SoJnIg3sEh/JsvqVVDyjRKmaJV4cl+lNIgq6QEco2i3gDebJl7/vLA== +yargs-parser@^20.2.2: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + yargs-unparser@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" @@ -11234,6 +11328,19 @@ yargs@^15.0.0: y18n "^4.0.0" yargs-parser "^18.1.1" +yargs@^16.0.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yargs@^16.0.3: version "16.0.3" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.0.3.tgz#7a919b9e43c90f80d4a142a89795e85399a7e54c" @@ -11285,3 +11392,8 @@ yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 52c1d87fa298be06b399dd01a30be48961211a69 Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 13 Jan 2021 22:04:26 +0900 Subject: [PATCH 08/32] 12.67.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index dde91b62a..5ab74b7b7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "misskey", "author": "syuilo ", - "version": "12.66.0", + "version": "12.67.0", "codename": "indigo", "repository": { "type": "git", From 264d6afe5d4eb8e78e608f5e0f6819aaac5253b7 Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 13 Jan 2021 22:07:52 +0900 Subject: [PATCH 09/32] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2b64ed849..6c7d481cf 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,8 @@ Organize and store your files! Want to post a picture you have already uploaded? ...and more! Experience Misskey with your own eyes at [misskey.io](https://misskey.io/) or join one of the [other instances](https://joinmisskey.github.io/) that are available. +To recive updates of this repo, follow [@repo@misskey.io](https://misskey.io/@repo) on fediverse. + Screen shots ---------------------------------------------------------------- ### Profile page From dae6d60163c628a4bc1a45fafe3fc2eed6de7547 Mon Sep 17 00:00:00 2001 From: syuilo Date: Thu, 14 Jan 2021 23:37:57 +0900 Subject: [PATCH 10/32] :art: --- assets/apple-touch-icon.png | Bin 9504 -> 9682 bytes assets/favicon.png | Bin 7387 -> 9348 bytes assets/icon.svg | 27 --------------------------- assets/icons/192.png | Bin 7415 -> 7418 bytes assets/icons/512.png | Bin 18436 -> 20175 bytes assets/mi.afdesign | Bin 0 -> 31543 bytes 6 files changed, 27 deletions(-) delete mode 100644 assets/icon.svg create mode 100644 assets/mi.afdesign diff --git a/assets/apple-touch-icon.png b/assets/apple-touch-icon.png index 1ae2bb88ec06e272abc0f6b47edef6ef9a4c6d81..735a015fd6b09b0ccd8cb3aa0de9bb134da37641 100644 GIT binary patch literal 9682 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

u@N=aNA{$eBzLOA$puQ!NxXZftEfO{F5*LI z(LfgS*E7OLSuEbsWkI+lJ)g1K#YbfiBVKVt4|5amLh**H(uEVn*dd7|JY6>hFwrGi zZ`0X|b6_H?S$|ZfPmbM_@{-cJ^Zl)zL)Qb^Z|UTHgra-)cP4J7J9g!bwEsw@cRIQ> zF0?WXTrV>SI+u5A*XVB^54@3Nc~&s)Vc_Uysz6Y&bxbh1BJBd>f3xLbU8;>OC-oo5 zi?NP5tgE@2lnO{qnB?sw!~V$%PrHI*H2;|H=|waZw}&1`QLY$|DUgHcW|KG YAL_b%nV<82{T1u3vW8Nbf_dQo0YM;w+5i9m delta 8420 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 diff --git a/assets/favicon.png b/assets/favicon.png index 767004005de6a99353f56a63e8a6ae8a1405a4d1..b4eb18a5cb8de878156706c02754bcdcf2b02a72 100644 GIT binary patch delta 8135 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%0D}vpPz7ub) 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 bpoo|?ULF&^S5N#G&jPO%)a5H>O+)_+Kxd=J delta 6140 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 df(YG-(D;= z?BSS{5(yLj=&buFis<#SWg6w{uw<*^4W)F z>arWv9~^pQf8j>Bg?wc9lGS2avCFY=PG`7ryhw%5WS*#`GI@N&k5Wz~S@+s~5mV!5 zS-Fp6nfFzj#)`6mjRjrf*QTD-S;oS6Ay^PRl0~TxMuIFJ{uF(=)4M^j%9AJ@zFcy( z*s%s1`L~fw=Xg`|tU0EKA6R3}`NE{c2J?EQ^rlslQl+)%$0a9%B>CS=0Di5+=#JDi z>gR&C4N5KYrT2)^9=UmOjd?AK-Ud|PoN!C9lptp3;YeNN`9|~u0)|=0R0u>wEcKh9x_*(EeO?aFOGOeMNHg7@PTv^lX+)Z#^~1cMB&%=Z z{#$=x?!$~DpO2Y?2CWx?q&V0nar4t}5#F}AAk9z3tiDL}Bye|{{EvkP!bK+0k6OA> zCdoryMIan`Yd=w^Rt6L7Jv>4mybywMt+J08BG_c>0`^%(oYEs&>yZ;VLAZb}v z%{2p>jy3~q%qP}&AY2T1LXm{=@W8F|ywxLMGFg8j;7m~GGzGyaP0@J-msabdCjh^k zZ6gvU%g0waDHOkbi!u}su+0(56 diff --git a/assets/icon.svg b/assets/icon.svg deleted file mode 100644 index 752a0a0bb..000000000 --- a/assets/icon.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/icons/192.png b/assets/icons/192.png index 3eec8311ee67380988f67671e83a28cad0bb3a8d..ac09ff5021ad8438eed111877465d74ea76bd464 100644 GIT binary patch delta 6328 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 diff --git a/assets/icons/512.png b/assets/icons/512.png index 73c0d9aecb2cadd83286123f2d4b2f96669b5fd2..29c9f32e5693f6cb2cb8c9f319977a1844ec8930 100644 GIT binary patch literal 20175 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 Dd2v-r literal 18436 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 USOqOlU=9$GkCKAL{94}s2kuOjv;Y7A diff --git a/assets/mi.afdesign b/assets/mi.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..e7f6331c4924dff6d6525e11ab6ffdfab6bb1d0a GIT binary patch literal 31543 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%0Dbii{7(K=>f;`SdGmq*ur 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 OfP1&~v`cT=y!byd%e;&L literal 0 HcmV?d00001 From 77078f2ce22e926265c8838c67314b5b790ba97d Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 15 Jan 2021 22:38:39 +0900 Subject: [PATCH 11/32] Fix bug --- src/client/pizzax.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/client/pizzax.ts b/src/client/pizzax.ts index 794738edd..396abc241 100644 --- a/src/client/pizzax.ts +++ b/src/client/pizzax.ts @@ -53,17 +53,20 @@ export class Storage { // なぜかsetTimeoutしないとapi関数内でエラーになる(おそらく循環参照してることに原因がありそう) setTimeout(() => { api('i/registry/get-all', { scope: ['client', this.key] }).then(kvs => { + const cache = {}; for (const [k, v] of Object.entries(def)) { if (v.where === 'account') { if (Object.prototype.hasOwnProperty.call(kvs, k)) { state[k] = kvs[k]; reactiveState[k].value = kvs[k]; + cache[k] = kvs[k]; } else { state[k] = v.default; reactiveState[k].value = v.default; } } } + localStorage.setItem(this.keyForLocalStorage + '::cache::' + $i.id, JSON.stringify(cache)); }); }, 1); From f972fb69201b27fb1798debee38d55ced7c2c52e Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 15 Jan 2021 22:56:08 +0900 Subject: [PATCH 12/32] :art: --- assets/mi-white.afdesign | Bin 0 -> 29485 bytes src/client/assets/about-icon.png | Bin 0 -> 20528 bytes src/client/pages/about-misskey.vue | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 assets/mi-white.afdesign create mode 100644 src/client/assets/about-icon.png diff --git a/assets/mi-white.afdesign b/assets/mi-white.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..b0a309d1c28456e6dfce5a03732769108a34e72d GIT binary patch literal 29485 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 URc5;%7z_x~*EZ3r)pUyaADk0VT>t<8 literal 0 HcmV?d00001 diff --git a/src/client/assets/about-icon.png b/src/client/assets/about-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..afc1f0c72885ce8c6baa71518ab356985713b65c GIT binary patch literal 20528 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

- +
Misskey
v{{ version }}
From 005d6b4ccff43141b65ce0e257b95474746c9d60 Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 15 Jan 2021 23:18:14 +0900 Subject: [PATCH 13/32] =?UTF-8?q?page=E3=81=AE=E3=83=8E=E3=83=BC=E3=83=88?= =?UTF-8?q?=E5=9F=8B=E3=82=81=E8=BE=BC=E3=81=BF=E3=81=AE=E3=80=8C=E8=A9=B3?= =?UTF-8?q?=E7=B4=B0=E3=81=AA=E8=A1=A8=E7=A4=BA=E3=80=8D=E3=82=AA=E3=83=97?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=8C=E6=A9=9F=E8=83=BD=E3=81=97?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/client/components/page/page.note.vue | 7 +++++-- src/client/pages/page-editor/els/page-editor.el.note.vue | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/client/components/page/page.note.vue b/src/client/components/page/page.note.vue index b4b6a9efc..27c1f1ed6 100644 --- a/src/client/components/page/page.note.vue +++ b/src/client/components/page/page.note.vue @@ -1,17 +1,20 @@ From d439bc8c2fae23d07ce4ebb8c7e9f0459055ec74 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sat, 23 Jan 2021 17:26:54 +0900 Subject: [PATCH 25/32] :art: --- src/client/components/note-detailed.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/client/components/note-detailed.vue b/src/client/components/note-detailed.vue index 3ab9e6264..5d8360292 100644 --- a/src/client/components/note-detailed.vue +++ b/src/client/components/note-detailed.vue @@ -52,10 +52,10 @@
+
-

@@ -1005,6 +1005,7 @@ export default defineComponent({ flex-direction: column; justify-content: center; padding-left: 16px; + font-size: 0.95em; > .top { > .name { From 9fff26b9006c2d617f17c963eb62e36eb4b65271 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sat, 23 Jan 2021 18:14:57 +0900 Subject: [PATCH 26/32] Implement drive setting page --- src/client/pages/settings/drive.vue | 200 ++++++++++++++++++++++++++-- src/client/pages/settings/index.vue | 6 +- 2 files changed, 195 insertions(+), 11 deletions(-) diff --git a/src/client/pages/settings/drive.vue b/src/client/pages/settings/drive.vue index 89c9b4bd6..8ca8bc9ee 100644 --- a/src/client/pages/settings/drive.vue +++ b/src/client/pages/settings/drive.vue @@ -1,33 +1,97 @@ diff --git a/src/client/pages/settings/index.vue b/src/client/pages/settings/index.vue index bacce6e3f..78aee4bfc 100644 --- a/src/client/pages/settings/index.vue +++ b/src/client/pages/settings/index.vue @@ -6,6 +6,7 @@ {{ $ts.profile }} {{ $ts.privacy }} {{ $ts.reaction }} + {{ $ts.drive }} {{ $ts.notifications }} {{ $ts.email }} {{ $ts.integration }} @@ -42,7 +43,7 @@