Make digest refresh less
This commit is contained in:
File diff suppressed because one or more lines are too long
@ -16,20 +16,14 @@ public class DigestConfigViewModel: ObservableObject {
|
|||||||
|
|
||||||
@AppStorage(UserDefaultKey.lastVisitedDigestId.rawValue) var lastVisitedDigestId = ""
|
@AppStorage(UserDefaultKey.lastVisitedDigestId.rawValue) var lastVisitedDigestId = ""
|
||||||
|
|
||||||
func load(dataService: DataService) async {
|
func enableDigest(dataService: DataService) async {
|
||||||
isLoading = true
|
isLoading = true
|
||||||
if !dataService.digestNeedsRefresh() {
|
|
||||||
if let digest = dataService.loadStoredDigest() {
|
do {
|
||||||
self.digest = digest
|
try await dataService.optInFeature(name: "ai-digest")
|
||||||
}
|
} catch {
|
||||||
} else {
|
if let err as? IneligibleError {
|
||||||
do {
|
|
||||||
if let digest = try await dataService.getLatestDigest(timeoutInterval: 10) {
|
|
||||||
self.digest = digest
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
print("ERROR WITH DIGEST: ", error)
|
|
||||||
self.digest = nil
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,7 +120,9 @@ struct DigestConfigView: View {
|
|||||||
Button(action: {}, label: { Text("Hide digest") })
|
Button(action: {}, label: { Text("Hide digest") })
|
||||||
.buttonStyle(RoundedRectButtonStyle())
|
.buttonStyle(RoundedRectButtonStyle())
|
||||||
|
|
||||||
Button(action: {}, label: { Text("Enable digest") })
|
Button(action: {
|
||||||
|
viewModel.en
|
||||||
|
}, label: { Text("Enable digest") })
|
||||||
.buttonStyle(RoundedRectButtonStyle(color: Color.blue, textColor: Color.white))
|
.buttonStyle(RoundedRectButtonStyle(color: Color.blue, textColor: Color.white))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
// swiftlint:disable file_length type_body_length
|
||||||
import CoreData
|
import CoreData
|
||||||
import Models
|
import Models
|
||||||
import Services
|
import Services
|
||||||
@ -415,15 +416,14 @@ struct AnimatingCellHeight: AnimatableModifier {
|
|||||||
)
|
)
|
||||||
.buttonStyle(.plain)
|
.buttonStyle(.plain)
|
||||||
.padding(.trailing, 4)
|
.padding(.trailing, 4)
|
||||||
|
} else if #available(iOS 17.0, *), !dataService.featureFlags.digestEnabled, !viewModel.digestHidden {
|
||||||
|
Button(
|
||||||
|
action: { showDigestConfig = true },
|
||||||
|
label: { Image.tabDigestSelected }
|
||||||
|
)
|
||||||
|
.buttonStyle(.plain)
|
||||||
|
.padding(.trailing, 4)
|
||||||
}
|
}
|
||||||
// if #available(iOS 17.0, *), !dataService.featureFlags.digestEnabled, !viewModel.digestHidden {
|
|
||||||
// Button(
|
|
||||||
// action: { showDigestConfig = true },
|
|
||||||
// label: { Image.tabDigestSelected }
|
|
||||||
// )
|
|
||||||
// .buttonStyle(.plain)
|
|
||||||
// .padding(.trailing, 4)
|
|
||||||
// }
|
|
||||||
if #available(iOS 17.0, *), !dataService.featureFlags.digestEnabled, !viewModel.digestHidden {
|
if #available(iOS 17.0, *), !dataService.featureFlags.digestEnabled, !viewModel.digestHidden {
|
||||||
// Give the user an opportunity to enable digest
|
// Give the user an opportunity to enable digest
|
||||||
Button(
|
Button(
|
||||||
|
|||||||
@ -403,7 +403,8 @@ enum LoadingBarStyle {
|
|||||||
|
|
||||||
func checkForDigestUpdate(dataService: DataService) async {
|
func checkForDigestUpdate(dataService: DataService) async {
|
||||||
do {
|
do {
|
||||||
if dataService.featureFlags.digestEnabled, let result = try? await dataService.getLatestDigest(timeoutInterval: 2) {
|
if dataService.featureFlags.digestEnabled,
|
||||||
|
let result = try? await dataService.getLatestDigest(timeoutInterval: 2) {
|
||||||
if result.id != lastVisitedDigestId {
|
if result.id != lastVisitedDigestId {
|
||||||
digestIsUnread = true
|
digestIsUnread = true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -97,8 +97,7 @@ public struct ExplainResult: Codable {
|
|||||||
public let text: String
|
public let text: String
|
||||||
}
|
}
|
||||||
|
|
||||||
extension DataService {
|
extension DataService {
|
||||||
|
|
||||||
public func digestNeedsRefresh() -> Bool {
|
public func digestNeedsRefresh() -> Bool {
|
||||||
let fileManager = FileManager.default
|
let fileManager = FileManager.default
|
||||||
let localURL = URL.om_cachesDirectory.appendingPathComponent("digest.json")
|
let localURL = URL.om_cachesDirectory.appendingPathComponent("digest.json")
|
||||||
|
|||||||
@ -1,10 +1,3 @@
|
|||||||
//
|
|
||||||
// File.swift
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Created by Jackson Harper on 11/10/22.
|
|
||||||
//
|
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
import Models
|
import Models
|
||||||
import SwiftGraphQL
|
import SwiftGraphQL
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -1,128 +0,0 @@
|
|||||||
import { SpanBox, VStack } from '../../elements/LayoutPrimitives'
|
|
||||||
import { Button } from '../../elements/Button'
|
|
||||||
import { StyledText } from '../../elements/StyledText'
|
|
||||||
import { useEffect, useRef, useState } from 'react'
|
|
||||||
import { BorderedFormInput, FormLabel } from '../../elements/FormElements'
|
|
||||||
import { fetchEndpoint } from '../../../lib/appConfig'
|
|
||||||
import { logoutMutation } from '../../../lib/networking/mutations/logoutMutation'
|
|
||||||
import { useRouter } from 'next/router'
|
|
||||||
import { formatMessage } from '../../../locales/en/messages'
|
|
||||||
import { parseErrorCodes } from '../../../lib/queryParamParser'
|
|
||||||
import { Recaptcha } from '../../elements/Recaptcha'
|
|
||||||
|
|
||||||
const ForgotPasswordForm = (): JSX.Element => {
|
|
||||||
const [email, setEmail] = useState<string | undefined>()
|
|
||||||
|
|
||||||
return (
|
|
||||||
<VStack css={{ width: '100%', minWidth: '320px', gap: '16px', pb: '16px' }}>
|
|
||||||
<VStack css={{ width: '100%', gap: '5px' }}>
|
|
||||||
<FormLabel className="required" css={{ color: '#D9D9D9' }}>
|
|
||||||
Email
|
|
||||||
</FormLabel>
|
|
||||||
<BorderedFormInput
|
|
||||||
key="email"
|
|
||||||
type="email"
|
|
||||||
name="email"
|
|
||||||
value={email}
|
|
||||||
placeholder="Email"
|
|
||||||
autoFocus={true}
|
|
||||||
css={{ backgroundColor: '#2A2A2A', color: 'white', border: 'unset' }}
|
|
||||||
onChange={(e) => {
|
|
||||||
e.preventDefault()
|
|
||||||
setEmail(e.target.value)
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</VStack>
|
|
||||||
</VStack>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
export function EmailForgotPassword(): JSX.Element {
|
|
||||||
const router = useRouter()
|
|
||||||
const [email, setEmail] = useState<string>('')
|
|
||||||
const [errorMessage, setErrorMessage] = useState<string | undefined>(
|
|
||||||
undefined
|
|
||||||
)
|
|
||||||
const recaptchaTokenRef = useRef<HTMLInputElement>(null)
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (!router.isReady) return
|
|
||||||
const errorCode = parseErrorCodes(router.query)
|
|
||||||
const errorMsg = errorCode
|
|
||||||
? formatMessage({ id: `error.${errorCode}` })
|
|
||||||
: undefined
|
|
||||||
setErrorMessage(errorMsg)
|
|
||||||
}, [router.isReady, router.query])
|
|
||||||
|
|
||||||
return (
|
|
||||||
<form action={`${fetchEndpoint}/auth/forgot-password`} method="POST">
|
|
||||||
<VStack
|
|
||||||
alignment="center"
|
|
||||||
css={{
|
|
||||||
padding: '16px',
|
|
||||||
minWidth: '340px',
|
|
||||||
width: '70vw',
|
|
||||||
maxWidth: '576px',
|
|
||||||
borderRadius: '8px',
|
|
||||||
background: '#343434',
|
|
||||||
border: '1px solid #6A6968',
|
|
||||||
boxShadow: '0px 4px 4px 0px rgba(0, 0, 0, 0.15)',
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<StyledText style="subHeadline" css={{ color: '#D9D9D9' }}>
|
|
||||||
Reset your password
|
|
||||||
</StyledText>
|
|
||||||
|
|
||||||
<ForgotPasswordForm />
|
|
||||||
|
|
||||||
{process.env.NEXT_PUBLIC_RECAPTCHA_CHALLENGE_SITE_KEY && (
|
|
||||||
<>
|
|
||||||
<Recaptcha
|
|
||||||
setRecaptchaToken={(token) => {
|
|
||||||
if (recaptchaTokenRef.current) {
|
|
||||||
recaptchaTokenRef.current.value = token
|
|
||||||
} else {
|
|
||||||
console.log('error updating recaptcha token')
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
<input
|
|
||||||
ref={recaptchaTokenRef}
|
|
||||||
type="hidden"
|
|
||||||
name="recaptchaToken"
|
|
||||||
/>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{errorMessage && <StyledText style="error">{errorMessage}</StyledText>}
|
|
||||||
<Button type="submit" style="ctaBlue" css={{ my: '20px' }}>
|
|
||||||
Reset Password
|
|
||||||
</Button>
|
|
||||||
<Button
|
|
||||||
style="ghost"
|
|
||||||
onClick={async (e) => {
|
|
||||||
e.preventDefault()
|
|
||||||
window.localStorage.removeItem('authVerified')
|
|
||||||
window.localStorage.removeItem('authToken')
|
|
||||||
try {
|
|
||||||
await logoutMutation()
|
|
||||||
} catch (e) {
|
|
||||||
console.log('error logging out', e)
|
|
||||||
}
|
|
||||||
window.location.href = '/'
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<StyledText
|
|
||||||
css={{
|
|
||||||
color: '$omnivoreLightGray',
|
|
||||||
textDecoration: 'underline',
|
|
||||||
cursor: 'pointer',
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
Cancel
|
|
||||||
</StyledText>
|
|
||||||
</Button>
|
|
||||||
</VStack>
|
|
||||||
</form>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
69
yarn.lock
69
yarn.lock
@ -12870,6 +12870,11 @@ cookie-signature@1.0.6:
|
|||||||
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
|
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
|
||||||
integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
|
integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
|
||||||
|
|
||||||
|
cookie@0.4.0:
|
||||||
|
version "0.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
|
||||||
|
integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
|
||||||
|
|
||||||
cookie@0.4.1:
|
cookie@0.4.1:
|
||||||
version "0.4.1"
|
version "0.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1"
|
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1"
|
||||||
@ -13170,6 +13175,15 @@ crypto@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037"
|
resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037"
|
||||||
integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==
|
integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==
|
||||||
|
|
||||||
|
csrf@3.1.0:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/csrf/-/csrf-3.1.0.tgz#ec75e9656d004d674b8ef5ba47b41fbfd6cb9c30"
|
||||||
|
integrity sha512-uTqEnCvWRk042asU6JtapDTcJeeailFy4ydOQS28bj1hcLnYRiqi8SsD2jS412AY1I/4qdOwWZun774iqywf9w==
|
||||||
|
dependencies:
|
||||||
|
rndm "1.2.0"
|
||||||
|
tsscmp "1.0.6"
|
||||||
|
uid-safe "2.1.5"
|
||||||
|
|
||||||
css-loader@^3.6.0:
|
css-loader@^3.6.0:
|
||||||
version "3.6.0"
|
version "3.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645"
|
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645"
|
||||||
@ -13302,6 +13316,16 @@ csstype@^3.0.2:
|
|||||||
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340"
|
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340"
|
||||||
integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==
|
integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==
|
||||||
|
|
||||||
|
csurf@^1.11.0:
|
||||||
|
version "1.11.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/csurf/-/csurf-1.11.0.tgz#ab0c3c6634634192bd3d6f4b861be20800eeb61a"
|
||||||
|
integrity sha512-UCtehyEExKTxgiu8UHdGvHj4tnpE/Qctue03Giq5gPgMQ9cg/ciod5blZQ5a4uCEenNQjxyGuzygLdKUmee/bQ==
|
||||||
|
dependencies:
|
||||||
|
cookie "0.4.0"
|
||||||
|
cookie-signature "1.0.6"
|
||||||
|
csrf "3.1.0"
|
||||||
|
http-errors "~1.7.3"
|
||||||
|
|
||||||
csv-file-validator@^2.1.0:
|
csv-file-validator@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/csv-file-validator/-/csv-file-validator-2.1.0.tgz#fc83e1e05835d7f03d03f8cce6235938e4cef32e"
|
resolved "https://registry.yarnpkg.com/csv-file-validator/-/csv-file-validator-2.1.0.tgz#fc83e1e05835d7f03d03f8cce6235938e4cef32e"
|
||||||
@ -17927,6 +17951,17 @@ http-errors@~1.6.2:
|
|||||||
setprototypeof "1.1.0"
|
setprototypeof "1.1.0"
|
||||||
statuses ">= 1.4.0 < 2"
|
statuses ">= 1.4.0 < 2"
|
||||||
|
|
||||||
|
http-errors@~1.7.3:
|
||||||
|
version "1.7.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
|
||||||
|
integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
|
||||||
|
dependencies:
|
||||||
|
depd "~1.1.2"
|
||||||
|
inherits "2.0.4"
|
||||||
|
setprototypeof "1.1.1"
|
||||||
|
statuses ">= 1.5.0 < 2"
|
||||||
|
toidentifier "1.0.0"
|
||||||
|
|
||||||
http-parser-js@>=0.5.1:
|
http-parser-js@>=0.5.1:
|
||||||
version "0.5.5"
|
version "0.5.5"
|
||||||
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.5.tgz#d7c30d5d3c90d865b4a2e870181f9d6f22ac7ac5"
|
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.5.tgz#d7c30d5d3c90d865b4a2e870181f9d6f22ac7ac5"
|
||||||
@ -26183,6 +26218,11 @@ randexp@0.4.6:
|
|||||||
discontinuous-range "1.0.0"
|
discontinuous-range "1.0.0"
|
||||||
ret "~0.1.10"
|
ret "~0.1.10"
|
||||||
|
|
||||||
|
random-bytes@~1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b"
|
||||||
|
integrity sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==
|
||||||
|
|
||||||
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
|
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
|
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
|
||||||
@ -27797,6 +27837,11 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
|
|||||||
hash-base "^3.0.0"
|
hash-base "^3.0.0"
|
||||||
inherits "^2.0.1"
|
inherits "^2.0.1"
|
||||||
|
|
||||||
|
rndm@1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/rndm/-/rndm-1.2.0.tgz#f33fe9cfb52bbfd520aa18323bc65db110a1b76c"
|
||||||
|
integrity sha512-fJhQQI5tLrQvYIYFpOnFinzv9dwmR7hRnUz1XqP3OJ1jIweTNOd6aTO4jwQSgcBSFUB+/KHJxuGneime+FdzOw==
|
||||||
|
|
||||||
rollup@2.78.0:
|
rollup@2.78.0:
|
||||||
version "2.78.0"
|
version "2.78.0"
|
||||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.78.0.tgz#00995deae70c0f712ea79ad904d5f6b033209d9e"
|
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.78.0.tgz#00995deae70c0f712ea79ad904d5f6b033209d9e"
|
||||||
@ -28296,6 +28341,11 @@ setprototypeof@1.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
|
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
|
||||||
integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
|
integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
|
||||||
|
|
||||||
|
setprototypeof@1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
|
||||||
|
integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
|
||||||
|
|
||||||
setprototypeof@1.2.0:
|
setprototypeof@1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
|
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
|
||||||
@ -28947,7 +28997,7 @@ statuses@2.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
|
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
|
||||||
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
|
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
|
||||||
|
|
||||||
"statuses@>= 1.4.0 < 2":
|
"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2":
|
||||||
version "1.5.0"
|
version "1.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
|
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
|
||||||
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
|
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
|
||||||
@ -30025,6 +30075,11 @@ toggle-selection@^1.0.6:
|
|||||||
resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32"
|
resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32"
|
||||||
integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI=
|
integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI=
|
||||||
|
|
||||||
|
toidentifier@1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
|
||||||
|
integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
|
||||||
|
|
||||||
toidentifier@1.0.1:
|
toidentifier@1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
||||||
@ -30316,6 +30371,11 @@ tslib@~2.4.0:
|
|||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
|
||||||
integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==
|
integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==
|
||||||
|
|
||||||
|
tsscmp@1.0.6:
|
||||||
|
version "1.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
|
||||||
|
integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==
|
||||||
|
|
||||||
tsutils@^3.21.0:
|
tsutils@^3.21.0:
|
||||||
version "3.21.0"
|
version "3.21.0"
|
||||||
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
|
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
|
||||||
@ -30580,6 +30640,13 @@ uhyphen@^0.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/uhyphen/-/uhyphen-0.2.0.tgz#8fdf0623314486e020a3c00ee5cc7a12fe722b81"
|
resolved "https://registry.yarnpkg.com/uhyphen/-/uhyphen-0.2.0.tgz#8fdf0623314486e020a3c00ee5cc7a12fe722b81"
|
||||||
integrity sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==
|
integrity sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==
|
||||||
|
|
||||||
|
uid-safe@2.1.5:
|
||||||
|
version "2.1.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a"
|
||||||
|
integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==
|
||||||
|
dependencies:
|
||||||
|
random-bytes "~1.0.0"
|
||||||
|
|
||||||
unbox-primitive@^1.0.1:
|
unbox-primitive@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
|
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
|
||||||
|
|||||||
Reference in New Issue
Block a user