Merge branch 'develop' of https://codeberg.org/calckey/calckey into note-improvements
This commit is contained in:
commit
ed3ba64525
20 changed files with 206 additions and 304 deletions
|
@ -145,6 +145,12 @@ id: 'aid'
|
||||||
# '127.0.0.1/32'
|
# '127.0.0.1/32'
|
||||||
#]
|
#]
|
||||||
|
|
||||||
|
# TWA
|
||||||
|
#twa:
|
||||||
|
# nameSpace: android_app
|
||||||
|
# packageName: tld.domain.twa
|
||||||
|
# sha256CertFingerprints: ['AB:CD:EF']
|
||||||
|
|
||||||
# Upload or download file size limits (bytes)
|
# Upload or download file size limits (bytes)
|
||||||
#maxFileSize: 262144000
|
#maxFileSize: 262144000
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ If you have access to a server that supports one of the sources below, I recomme
|
||||||
## 👀 Get folder ready
|
## 👀 Get folder ready
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git clone https://codeberg.org/calckey/calckey.git
|
git clone --depth 1 https://codeberg.org/calckey/calckey.git
|
||||||
cd calckey/
|
cd calckey/
|
||||||
# git checkout main # if you want only stable versions
|
# git checkout main # if you want only stable versions
|
||||||
```
|
```
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "calckey",
|
"name": "calckey",
|
||||||
"version": "13.0.8-rc4",
|
"version": "13.0.9-rc",
|
||||||
"codename": "aqua",
|
"codename": "aqua",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://codeberg.org/calckey/calckey.git"
|
"url": "https://codeberg.org/calckey/calckey.git"
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@7.25.0",
|
"packageManager": "pnpm@7.26.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"rebuild": "pnpm run clean && pnpm -r run build && pnpm run gulp",
|
"rebuild": "pnpm run clean && pnpm -r run build && pnpm run gulp",
|
||||||
|
|
BIN
packages/backend/assets/icons/maskable.png
Normal file
BIN
packages/backend/assets/icons/maskable.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
BIN
packages/backend/assets/icons/monochrome.png
Normal file
BIN
packages/backend/assets/icons/monochrome.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.4 KiB |
|
@ -64,6 +64,12 @@ export type Source = {
|
||||||
mediaProxy?: string;
|
mediaProxy?: string;
|
||||||
proxyRemoteFiles?: boolean;
|
proxyRemoteFiles?: boolean;
|
||||||
|
|
||||||
|
twa: {
|
||||||
|
nameSpace?: string;
|
||||||
|
packageName?: string;
|
||||||
|
sha256CertFingerprints?: string[];
|
||||||
|
};
|
||||||
|
|
||||||
// Managed hosting stuff
|
// Managed hosting stuff
|
||||||
maxUserSignups?: number;
|
maxUserSignups?: number;
|
||||||
isManagedHosting?: boolean;
|
isManagedHosting?: boolean;
|
||||||
|
|
|
@ -1,9 +1,14 @@
|
||||||
import IPCIDR from "ip-cidr";
|
import IPCIDR from "ip-cidr";
|
||||||
|
|
||||||
export function getIpHash(ip: string) {
|
export function getIpHash(ip: string) {
|
||||||
|
try {
|
||||||
// because a single person may control many IPv6 addresses,
|
// because a single person may control many IPv6 addresses,
|
||||||
// only a /64 subnet prefix of any IP will be taken into account.
|
// only a /64 subnet prefix of any IP will be taken into account.
|
||||||
// (this means for IPv4 the entire address is used)
|
// (this means for IPv4 the entire address is used)
|
||||||
const prefix = IPCIDR.createAddress(ip).mask(64);
|
const prefix = IPCIDR.createAddress(ip).mask(64);
|
||||||
return `ip-${BigInt(`0b${prefix}`).toString(36)}`;
|
return `ip-${BigInt(`0b${prefix}`).toString(36)}`;
|
||||||
|
} catch (e) {
|
||||||
|
const prefix = IPCIDR.createAddress(ip.replace(/:[0-9]+$/, "")).mask(64);
|
||||||
|
return `ip-${BigInt(`0b${prefix}`).toString(36)}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,12 +11,26 @@
|
||||||
{
|
{
|
||||||
"src": "/static-assets/icons/192.png",
|
"src": "/static-assets/icons/192.png",
|
||||||
"sizes": "192x192",
|
"sizes": "192x192",
|
||||||
"type": "image/png"
|
"type": "image/png",
|
||||||
|
"purpose": "any"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "/static-assets/icons/512.png",
|
"src": "/static-assets/icons/512.png",
|
||||||
"sizes": "512x512",
|
"sizes": "512x512",
|
||||||
"type": "image/png"
|
"type": "image/png",
|
||||||
|
"purpose": "any"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/static-assets/icons/maskable.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "maskable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/static-assets/icons/monochrome.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "monochrome"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"share_target": {
|
"share_target": {
|
||||||
|
@ -53,5 +67,8 @@
|
||||||
"name": "Chats",
|
"name": "Chats",
|
||||||
"url": "/my/messaging"
|
"url": "/my/messaging"
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
"categories": [
|
||||||
|
"social"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,6 +74,22 @@ router.get("/.well-known/host-meta.json", async (ctx) => {
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (config.twa != null) {
|
||||||
|
router.get("/.well-known/assetlinks.json", async (ctx) => {
|
||||||
|
ctx.set("Content-Type", "application/json");
|
||||||
|
ctx.body = [
|
||||||
|
{
|
||||||
|
relation: ["delegate_permission/common.handle_all_urls"],
|
||||||
|
target: {
|
||||||
|
namespace: config.twa.nameSpace,
|
||||||
|
package_name: config.twa.packageName,
|
||||||
|
sha256_cert_fingerprints: config.twa.sha256CertFingerprints,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
router.get("/.well-known/nodeinfo", async (ctx) => {
|
router.get("/.well-known/nodeinfo", async (ctx) => {
|
||||||
ctx.body = { links };
|
ctx.body = { links };
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div :class="[$style.root, { yellow: instance.isNotResponding, red: instance.isBlocked, gray: instance.isSuspended }]">
|
<div :class="[$style.root, { yellow: instance.isNotResponding, red: instance.isBlocked, gray: instance.isSuspended }]">
|
||||||
<img v-if="instance.iconUrl" class="icon" :src="instance.iconUrl" alt=""/>
|
<img class="icon" :src="getInstanceIcon(instance)" alt=""/>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<span class="host">{{ instance.name ?? instance.host }}</span>
|
<span class="host">{{ instance.name ?? instance.host }}</span>
|
||||||
<span class="sub _monospace"><b>{{ instance.host }}</b> / {{ instance.softwareName || '?' }} {{ instance.softwareVersion }}</span>
|
<span class="sub _monospace"><b>{{ instance.host }}</b> / {{ instance.softwareName || '?' }} {{ instance.softwareVersion }}</span>
|
||||||
|
@ -13,6 +13,7 @@
|
||||||
import * as misskey from 'calckey-js';
|
import * as misskey from 'calckey-js';
|
||||||
import MkMiniChart from '@/components/MkMiniChart.vue';
|
import MkMiniChart from '@/components/MkMiniChart.vue';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
|
import { getProxiedImageUrlNullable } from '@/scripts/media-proxy';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
instance: misskey.entities.Instance;
|
instance: misskey.entities.Instance;
|
||||||
|
@ -25,6 +26,10 @@ os.apiGet('charts/instance', { host: props.instance.host, limit: 16 + 1, span: '
|
||||||
res.requests.received.splice(0, 1);
|
res.requests.received.splice(0, 1);
|
||||||
chartValues = res.requests.received;
|
chartValues = res.requests.received;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function getInstanceIcon(instance): string {
|
||||||
|
return getProxiedImageUrlNullable(instance.iconUrl, 'preview') ?? getProxiedImageUrlNullable(instance.faviconUrl, 'preview') ?? '/client-assets/dummy.png';
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" module>
|
<style lang="scss" module>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="hpaizdrt" :style="bg">
|
<div class="hpaizdrt" ref="ticker" :style="bg">
|
||||||
<img v-if="instance.faviconUrl" class="icon" :src="instance.faviconUrl" aria-hidden="true"/>
|
<img class="icon" :src="getInstanceIcon(instance)" aria-hidden="true"/>
|
||||||
<span class="name">{{ instance.name }}</span>
|
<span class="name">{{ instance.name }}</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -8,6 +8,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { instanceName } from '@/config';
|
import { instanceName } from '@/config';
|
||||||
import { instance as Instance } from '@/instance';
|
import { instance as Instance } from '@/instance';
|
||||||
|
import { getProxiedImageUrlNullable } from '@/scripts/media-proxy';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
instance?: {
|
instance?: {
|
||||||
|
@ -17,6 +18,8 @@ const props = defineProps<{
|
||||||
}
|
}
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
|
let ticker = $ref<HTMLElement | null>(null);
|
||||||
|
|
||||||
// if no instance data is given, this is for the local instance
|
// if no instance data is given, this is for the local instance
|
||||||
const instance = props.instance ?? {
|
const instance = props.instance ?? {
|
||||||
faviconUrl: Instance.iconUrl || Instance.faviconUrl || '/favicon.ico',
|
faviconUrl: Instance.iconUrl || Instance.faviconUrl || '/favicon.ico',
|
||||||
|
@ -24,20 +27,29 @@ const instance = props.instance ?? {
|
||||||
themeColor: (document.querySelector('meta[name="theme-color-orig"]') as HTMLMetaElement)?.content
|
themeColor: (document.querySelector('meta[name="theme-color-orig"]') as HTMLMetaElement)?.content
|
||||||
};
|
};
|
||||||
|
|
||||||
const themeColor = instance.themeColor ?? '#777777';
|
const computedStyle = getComputedStyle(document.documentElement);
|
||||||
|
const themeColor = instance.themeColor ?? computedStyle.getPropertyValue('--bg');
|
||||||
|
|
||||||
const bg = {
|
const bg = {
|
||||||
background: `linear-gradient(90deg, ${themeColor}, ${themeColor}55)`,
|
background: `linear-gradient(90deg, ${themeColor}, ${themeColor}55)`,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function getInstanceIcon(instance): string {
|
||||||
|
return getProxiedImageUrlNullable(instance.iconUrl, 'preview') ?? getProxiedImageUrlNullable(instance.faviconUrl, 'preview') ?? '/client-assets/dummy.png';
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.hpaizdrt {
|
.hpaizdrt {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
height: 1.1em;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 1.1em;
|
height: 1.1em;
|
||||||
justify-self: flex-end;
|
justify-self: flex-end;
|
||||||
padding: .2em .4em;
|
padding: .2em .4em;
|
||||||
|
padding: .2em .4em;
|
||||||
border-radius: 100px;
|
border-radius: 100px;
|
||||||
font-size: .8em;
|
font-size: .8em;
|
||||||
text-shadow: 0 2px 2px var(--shadow);
|
text-shadow: 0 2px 2px var(--shadow);
|
||||||
|
@ -46,23 +58,35 @@ const bg = {
|
||||||
width: max-content;
|
width: max-content;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
.header > .body & {
|
||||||
|
width: max-content;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
> .icon {
|
> .icon {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
border-radius: 0.3rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
> .name {
|
> .name {
|
||||||
|
display: none;
|
||||||
display: none;
|
display: none;
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
font-size: 0.85em;
|
font-size: 0.85em;
|
||||||
|
font-size: 0.85em;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
text-shadow: -1px -1px 0 var(--bg), 1px -1px 0 var(--bg), -1px 1px 0 var(--bg), 1px 1px 0 var(--bg);
|
text-shadow: -1px -1px 0 var(--bg), 1px -1px 0 var(--bg), -1px 1px 0 var(--bg), 1px 1px 0 var(--bg);
|
||||||
.article > .main &, .header > .body & {
|
.article > .main &, .header > .body & {
|
||||||
display: unset;
|
display: unset;
|
||||||
}
|
}
|
||||||
|
.article > .main &, .header > .body & {
|
||||||
|
display: unset;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -10,20 +10,18 @@ export default defineComponent({
|
||||||
render() {
|
render() {
|
||||||
const options = this.$slots.default();
|
const options = this.$slots.default();
|
||||||
|
|
||||||
return withDirectives(h('div', {
|
return h('div', {
|
||||||
class: 'pxhvhrfw',
|
class: 'pxhvhrfw',
|
||||||
}, options.map(option => withDirectives(h('button', {
|
}, options.map(option => withDirectives(h('button', {
|
||||||
class: ['_button', { active: this.modelValue === option.props.value }],
|
class: ['_button', { active: this.modelValue === option.props?.value }],
|
||||||
key: option.key,
|
key: option.key,
|
||||||
disabled: this.modelValue === option.props.value,
|
disabled: this.modelValue === option.props?.value,
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
this.$emit('update:modelValue', option.props.value);
|
this.$emit('update:modelValue', option.props?.value);
|
||||||
},
|
},
|
||||||
}, option.children), [
|
}, option.children), [
|
||||||
[resolveDirective('click-anime')],
|
[resolveDirective('click-anime')],
|
||||||
]))), [
|
])));
|
||||||
[resolveDirective('size'), { max: [500] }],
|
|
||||||
]);
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -27,19 +27,19 @@ const text = $computed(() => {
|
||||||
border-radius: 120%; // Blinkのバグか知らんけど、100%ぴったりにすると何故か若干楕円でレンダリングされる
|
border-radius: 120%; // Blinkのバグか知らんけど、100%ぴったりにすると何故か若干楕円でレンダリングされる
|
||||||
|
|
||||||
&.online {
|
&.online {
|
||||||
background: #58d4c9;
|
background: #9ccfd8;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
background: #e4bc48;
|
background: #f6c177;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.offline {
|
&.offline {
|
||||||
background: #ea5353;
|
background: #eb6f92;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.unknown {
|
&.unknown {
|
||||||
background: #888;
|
background: #6e6a86;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
<template>
|
<template>
|
||||||
<span v-if="disableLink" v-user-preview="disablePreview ? undefined : user.id" class="eiwwqkts _noSelect" :class="{ cat: user.isCat, square: $store.state.squareAvatars }" :style="{ color }" :title="acct(user)" @click="onClick">
|
<span v-if="disableLink" v-user-preview="disablePreview ? undefined : user.id" class="eiwwqkts _noSelect" :class="{ cat: user.isCat, square: $store.state.squareAvatars }" :style="{ color }" :title="acct(user)" @click="onClick">
|
||||||
<img class="inner" :src="url" decoding="async"/>
|
<img class="inner" :src="url" decoding="async"/>
|
||||||
<MkUserOnlineIndicator v-if="showIndicator" class="indicator" :user="user"/>
|
<MkUserOnlineIndicator v-if="showIndicator && user.instance == null" class="indicator" :user="user"/>
|
||||||
</span>
|
</span>
|
||||||
<MkA v-else v-user-preview="disablePreview ? undefined : user.id" class="eiwwqkts _noSelect" :class="{ cat: user.isCat, square: $store.state.squareAvatars }" :style="{ color }" :to="userPage(user)" :title="acct(user)" :target="target">
|
<MkA v-else v-user-preview="disablePreview ? undefined : user.id" class="eiwwqkts _noSelect" :class="{ cat: user.isCat, square: $store.state.squareAvatars }" :style="{ color }" :to="userPage(user)" :title="acct(user)" :target="target">
|
||||||
<img class="inner" :src="url" decoding="async"/>
|
<img class="inner" :src="url" decoding="async"/>
|
||||||
<MkUserOnlineIndicator v-if="showIndicator" class="indicator" :user="user"/>
|
<MkUserOnlineIndicator v-if="showIndicator && user.instance == null" class="indicator" :user="user"/>
|
||||||
</MkA>
|
</MkA>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -96,8 +96,8 @@ watch(() => props.user.avatarBlurhash, () => {
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 20%;
|
width: 18%;
|
||||||
height: 20%;
|
height: 18%;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.square {
|
&.square {
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
<button class="_button _acrylic menu" @click="showMenu"><i class="ph-dots-three-outline-bold ph-lg"></i></button>
|
<button class="_button _acrylic menu" @click="showMenu"><i class="ph-dots-three-outline-bold ph-lg"></i></button>
|
||||||
<div class="fg">
|
<div class="fg">
|
||||||
<h1>
|
<h1>
|
||||||
<img class="logo" v-if="meta.logoImageUrl" :src="meta.logoImageUrl"><span v-else class="text">{{ instanceName }}</span>
|
<img class="logo" v-if="meta.logoImageUrl" :src="meta.logoImageUrl">
|
||||||
<span class="text">{{ instanceName }}</span>
|
<span v-else class="text">{{ instanceName }}</span>
|
||||||
</h1>
|
</h1>
|
||||||
<div class="about">
|
<div class="about">
|
||||||
<div class="desc" v-html="meta.description || i18n.ts.headlineMisskey"></div>
|
<div class="desc" v-html="meta.description || i18n.ts.headlineMisskey"></div>
|
||||||
|
|
15
packages/client/src/scripts/media-proxy.ts
Normal file
15
packages/client/src/scripts/media-proxy.ts
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
import { query } from '@/scripts/url';
|
||||||
|
import { url } from '@/config';
|
||||||
|
|
||||||
|
export function getProxiedImageUrl(imageUrl: string, type?: 'preview'): string {
|
||||||
|
return `${url}/proxy/image.webp?${query({
|
||||||
|
url: imageUrl,
|
||||||
|
fallback: '1',
|
||||||
|
...(type ? { [type]: '1' } : {}),
|
||||||
|
})}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getProxiedImageUrlNullable(imageUrl: string | null | undefined, type?: 'preview'): string | null {
|
||||||
|
if (imageUrl == null) return null;
|
||||||
|
return getProxiedImageUrl(imageUrl, type);
|
||||||
|
}
|
24
packages/sw/.swcrc
Normal file
24
packages/sw/.swcrc
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"$schema": "https://json.schemastore.org/swcrc",
|
||||||
|
"jsc": {
|
||||||
|
"parser": {
|
||||||
|
"syntax": "typescript",
|
||||||
|
"dynamicImport": true,
|
||||||
|
"decorators": true
|
||||||
|
},
|
||||||
|
"transform": {
|
||||||
|
"decoratorMetadata": true
|
||||||
|
},
|
||||||
|
"experimental": {
|
||||||
|
"keepImportAssertions": true
|
||||||
|
},
|
||||||
|
"baseUrl": ".",
|
||||||
|
"paths": {
|
||||||
|
"@/*": [
|
||||||
|
"./src/*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"target": "es2022"
|
||||||
|
},
|
||||||
|
"minify": false
|
||||||
|
}
|
|
@ -1,37 +0,0 @@
|
||||||
const esbuild = require('esbuild');
|
|
||||||
const locales = require('../../locales');
|
|
||||||
const meta = require('../../package.json');
|
|
||||||
const watch = process.argv[2]?.includes('watch');
|
|
||||||
|
|
||||||
console.log('Starting SW building...');
|
|
||||||
|
|
||||||
esbuild.build({
|
|
||||||
entryPoints: [ `${__dirname}/src/sw.ts` ],
|
|
||||||
bundle: true,
|
|
||||||
format: 'esm',
|
|
||||||
treeShaking: true,
|
|
||||||
minify: process.env.NODE_ENV === 'production',
|
|
||||||
absWorkingDir: __dirname,
|
|
||||||
outbase: `${__dirname}/src`,
|
|
||||||
outdir: `${__dirname}/../../built/_sw_dist_`,
|
|
||||||
loader: {
|
|
||||||
'.ts': 'ts'
|
|
||||||
},
|
|
||||||
tsconfig: `${__dirname}/tsconfig.json`,
|
|
||||||
define: {
|
|
||||||
_VERSION_: JSON.stringify(meta.version),
|
|
||||||
_LANGS_: JSON.stringify(Object.entries(locales).map(([k, v]) => [k, v._lang_])),
|
|
||||||
_ENV_: JSON.stringify(process.env.NODE_ENV),
|
|
||||||
_DEV_: process.env.NODE_ENV !== 'production',
|
|
||||||
_PERF_PREFIX_: JSON.stringify('Calckey:'),
|
|
||||||
},
|
|
||||||
watch: watch ? {
|
|
||||||
onRebuild(error, result) {
|
|
||||||
if (error) console.error('SW: watch build failed:', error);
|
|
||||||
else console.log('SW: watch build succeeded:', result);
|
|
||||||
},
|
|
||||||
} : false,
|
|
||||||
}).then(result => {
|
|
||||||
if (watch) console.log('watching...');
|
|
||||||
else console.log('done,', JSON.stringify(result));
|
|
||||||
});
|
|
|
@ -2,13 +2,21 @@
|
||||||
"name": "sw",
|
"name": "sw",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"watch": "node build.js watch",
|
"build": "pnpm swc src -d built -D",
|
||||||
"build": "node build.js",
|
"watch": "pnpm swc src -d built -D -w",
|
||||||
"lint": "pnpm rome check src/**/*.{ts}"
|
"lint": "pnpm rome check \"src/**/*.ts\""
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@swc/cli": "^0.1.59",
|
||||||
|
"@swc/core": "^1.3.26",
|
||||||
"calckey-js": "^0.0.20",
|
"calckey-js": "^0.0.20",
|
||||||
"esbuild": "^0.15.18",
|
|
||||||
"idb-keyval": "^6.2.0"
|
"idb-keyval": "^6.2.0"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@swc/core-android-arm64": "1.3.11"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"swc-loader": "^0.2.3",
|
||||||
|
"webpack": "^5.75.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
277
pnpm-lock.yaml
277
pnpm-lock.yaml
|
@ -534,13 +534,23 @@ importers:
|
||||||
|
|
||||||
packages/sw:
|
packages/sw:
|
||||||
specifiers:
|
specifiers:
|
||||||
|
'@swc/cli': ^0.1.59
|
||||||
|
'@swc/core': ^1.3.26
|
||||||
|
'@swc/core-android-arm64': 1.3.11
|
||||||
calckey-js: ^0.0.20
|
calckey-js: ^0.0.20
|
||||||
esbuild: ^0.15.18
|
|
||||||
idb-keyval: ^6.2.0
|
idb-keyval: ^6.2.0
|
||||||
|
swc-loader: ^0.2.3
|
||||||
|
webpack: ^5.75.0
|
||||||
dependencies:
|
dependencies:
|
||||||
|
'@swc/cli': 0.1.59_@swc+core@1.3.26
|
||||||
|
'@swc/core': 1.3.26
|
||||||
calckey-js: 0.0.20
|
calckey-js: 0.0.20
|
||||||
esbuild: 0.15.18
|
|
||||||
idb-keyval: 6.2.0
|
idb-keyval: 6.2.0
|
||||||
|
optionalDependencies:
|
||||||
|
'@swc/core-android-arm64': 1.3.11
|
||||||
|
devDependencies:
|
||||||
|
swc-loader: 0.2.3_v4imsvpumnwpgduroyqmpcfjiy
|
||||||
|
webpack: 5.75.0_@swc+core@1.3.26
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
|
@ -900,15 +910,6 @@ packages:
|
||||||
- supports-color
|
- supports-color
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@esbuild/android-arm/0.15.18:
|
|
||||||
resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm]
|
|
||||||
os: [android]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/android-arm/0.16.17:
|
/@esbuild/android-arm/0.16.17:
|
||||||
resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==}
|
resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -999,15 +1000,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-loong64/0.15.18:
|
|
||||||
resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [loong64]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/linux-loong64/0.16.17:
|
/@esbuild/linux-loong64/0.16.17:
|
||||||
resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==}
|
resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -1574,6 +1566,26 @@ packages:
|
||||||
resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==}
|
resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@swc/cli/0.1.59_@swc+core@1.3.26:
|
||||||
|
resolution: {integrity: sha512-BlX3wIxYTwdtR22dIqZ3FEIOJPqnlByAp4JY46OMZi2UXMB3ZbOzefawD2ZlLafRUWyy5NtiZZty5waKzaYRnA==}
|
||||||
|
engines: {node: '>= 12.13'}
|
||||||
|
hasBin: true
|
||||||
|
peerDependencies:
|
||||||
|
'@swc/core': ^1.2.66
|
||||||
|
chokidar: ^3.5.1
|
||||||
|
peerDependenciesMeta:
|
||||||
|
chokidar:
|
||||||
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
'@swc/core': 1.3.26
|
||||||
|
bin-wrapper: 4.1.0
|
||||||
|
commander: 7.2.0
|
||||||
|
fast-glob: 3.2.12
|
||||||
|
semver: 7.3.8
|
||||||
|
slash: 3.0.0
|
||||||
|
source-map: 0.7.4
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@swc/cli/0.1.59_cr4os3zuq4gmhe2qzzjtw2pxeu:
|
/@swc/cli/0.1.59_cr4os3zuq4gmhe2qzzjtw2pxeu:
|
||||||
resolution: {integrity: sha512-BlX3wIxYTwdtR22dIqZ3FEIOJPqnlByAp4JY46OMZi2UXMB3ZbOzefawD2ZlLafRUWyy5NtiZZty5waKzaYRnA==}
|
resolution: {integrity: sha512-BlX3wIxYTwdtR22dIqZ3FEIOJPqnlByAp4JY46OMZi2UXMB3ZbOzefawD2ZlLafRUWyy5NtiZZty5waKzaYRnA==}
|
||||||
engines: {node: '>= 12.13'}
|
engines: {node: '>= 12.13'}
|
||||||
|
@ -3242,7 +3254,7 @@ packages:
|
||||||
/axios/0.25.0_debug@4.3.4:
|
/axios/0.25.0_debug@4.3.4:
|
||||||
resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==}
|
resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==}
|
||||||
dependencies:
|
dependencies:
|
||||||
follow-redirects: 1.15.2
|
follow-redirects: 1.15.2_debug@4.3.4
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- debug
|
- debug
|
||||||
dev: true
|
dev: true
|
||||||
|
@ -5514,216 +5526,6 @@ packages:
|
||||||
es6-symbol: 3.1.3
|
es6-symbol: 3.1.3
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/esbuild-android-64/0.15.18:
|
|
||||||
resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [android]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-android-arm64/0.15.18:
|
|
||||||
resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [android]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-darwin-64/0.15.18:
|
|
||||||
resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [darwin]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-darwin-arm64/0.15.18:
|
|
||||||
resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [darwin]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-freebsd-64/0.15.18:
|
|
||||||
resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [freebsd]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-freebsd-arm64/0.15.18:
|
|
||||||
resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [freebsd]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-linux-32/0.15.18:
|
|
||||||
resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [ia32]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-linux-64/0.15.18:
|
|
||||||
resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-linux-arm/0.15.18:
|
|
||||||
resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-linux-arm64/0.15.18:
|
|
||||||
resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-linux-mips64le/0.15.18:
|
|
||||||
resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [mips64el]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-linux-ppc64le/0.15.18:
|
|
||||||
resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [ppc64]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-linux-riscv64/0.15.18:
|
|
||||||
resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [riscv64]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-linux-s390x/0.15.18:
|
|
||||||
resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [s390x]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-netbsd-64/0.15.18:
|
|
||||||
resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [netbsd]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-openbsd-64/0.15.18:
|
|
||||||
resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [openbsd]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-sunos-64/0.15.18:
|
|
||||||
resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [sunos]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-windows-32/0.15.18:
|
|
||||||
resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [ia32]
|
|
||||||
os: [win32]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-windows-64/0.15.18:
|
|
||||||
resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [win32]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild-windows-arm64/0.15.18:
|
|
||||||
resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [win32]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: false
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/esbuild/0.15.18:
|
|
||||||
resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
hasBin: true
|
|
||||||
requiresBuild: true
|
|
||||||
optionalDependencies:
|
|
||||||
'@esbuild/android-arm': 0.15.18
|
|
||||||
'@esbuild/linux-loong64': 0.15.18
|
|
||||||
esbuild-android-64: 0.15.18
|
|
||||||
esbuild-android-arm64: 0.15.18
|
|
||||||
esbuild-darwin-64: 0.15.18
|
|
||||||
esbuild-darwin-arm64: 0.15.18
|
|
||||||
esbuild-freebsd-64: 0.15.18
|
|
||||||
esbuild-freebsd-arm64: 0.15.18
|
|
||||||
esbuild-linux-32: 0.15.18
|
|
||||||
esbuild-linux-64: 0.15.18
|
|
||||||
esbuild-linux-arm: 0.15.18
|
|
||||||
esbuild-linux-arm64: 0.15.18
|
|
||||||
esbuild-linux-mips64le: 0.15.18
|
|
||||||
esbuild-linux-ppc64le: 0.15.18
|
|
||||||
esbuild-linux-riscv64: 0.15.18
|
|
||||||
esbuild-linux-s390x: 0.15.18
|
|
||||||
esbuild-netbsd-64: 0.15.18
|
|
||||||
esbuild-openbsd-64: 0.15.18
|
|
||||||
esbuild-sunos-64: 0.15.18
|
|
||||||
esbuild-windows-32: 0.15.18
|
|
||||||
esbuild-windows-64: 0.15.18
|
|
||||||
esbuild-windows-arm64: 0.15.18
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/esbuild/0.16.17:
|
/esbuild/0.16.17:
|
||||||
resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==}
|
resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -6403,6 +6205,19 @@ packages:
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
debug:
|
debug:
|
||||||
optional: true
|
optional: true
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/follow-redirects/1.15.2_debug@4.3.4:
|
||||||
|
resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
|
||||||
|
engines: {node: '>=4.0'}
|
||||||
|
peerDependencies:
|
||||||
|
debug: '*'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
debug:
|
||||||
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
debug: 4.3.4
|
||||||
|
dev: true
|
||||||
|
|
||||||
/for-each/0.3.3:
|
/for-each/0.3.3:
|
||||||
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
|
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
|
||||||
|
|
Loading…
Reference in a new issue