├── .gitignore
├── docs
├── public
│ ├── favicon.ico
│ ├── schema.jpg
│ ├── schema-dark.png
│ ├── schema-light.png
│ └── logo.svg
├── pages
│ ├── _meta.json
│ ├── guide
│ │ ├── _meta.json
│ │ ├── data-model.mdx
│ │ ├── data-controller.mdx
│ │ └── display.mdx
│ ├── _app.js
│ ├── start.mdx
│ ├── how.mdx
│ └── index.mdx
├── next.config.js
├── package.json
├── components
│ ├── features.module.scss
│ └── features.js
├── .gitignore
├── theme.config.js
└── yarn.lock
├── Sources
└── Gravity
│ ├── RemoteRepresentable.swift
│ ├── DataCache
│ ├── RemoteData.swift
│ └── DataCache.swift
│ ├── Store
│ ├── Scheduler.swift
│ ├── Cache
│ │ ├── WrappedKey.swift
│ │ ├── CachePersistency.swift
│ │ └── Cache.swift
│ ├── Realtime
│ │ └── RealtimeController.swift
│ └── Store.swift
│ ├── RemoteBinding.swift
│ ├── Utility
│ └── Logger.swift
│ ├── RemoteObjects.swift
│ ├── RemoteObject.swift
│ ├── RemoteRequest.swift
│ └── RemoteObjectDelegate.swift
├── Tests
└── GravityTests
│ ├── Utility.swift
│ ├── CacheCodable.swift
│ └── StorePerformance.swift
├── Package.swift
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | /*.xcodeproj
5 | xcuserdata/
6 | .swiftpm/
7 |
--------------------------------------------------------------------------------
/docs/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pr1mer-tech/Gravity/HEAD/docs/public/favicon.ico
--------------------------------------------------------------------------------
/docs/public/schema.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pr1mer-tech/Gravity/HEAD/docs/public/schema.jpg
--------------------------------------------------------------------------------
/docs/public/schema-dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pr1mer-tech/Gravity/HEAD/docs/public/schema-dark.png
--------------------------------------------------------------------------------
/docs/public/schema-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pr1mer-tech/Gravity/HEAD/docs/public/schema-light.png
--------------------------------------------------------------------------------
/docs/pages/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "index": "Gravity",
3 | "start": "Installation",
4 | "guide": "Tutorial",
5 | "how": "How it works"
6 | }
--------------------------------------------------------------------------------
/docs/pages/guide/_meta.json:
--------------------------------------------------------------------------------
1 | {
2 | "data-model": "1. Data Model",
3 | "data-controller": "2. Data Controller",
4 | "display": "3. Display your data"
5 | }
--------------------------------------------------------------------------------
/docs/next.config.js:
--------------------------------------------------------------------------------
1 | const withNextra = require('nextra')('nextra-theme-docs', './theme.config.js')
2 | module.exports = withNextra({
3 | images: {
4 | unoptimized: true
5 | }
6 | })
7 |
--------------------------------------------------------------------------------
/Sources/Gravity/RemoteRepresentable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // File.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 09/04/2023.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol RemoteRepresentable: Codable, Hashable, Identifiable where ID: Codable & Hashable {}
11 |
--------------------------------------------------------------------------------
/docs/pages/_app.js:
--------------------------------------------------------------------------------
1 | import 'nextra-theme-docs/style.css'
2 |
3 | import Prism from 'prism-react-renderer/prism'
4 | (typeof global !== "undefined" ? global : window).Prism = Prism
5 | require("prismjs/components/prism-swift")
6 |
7 | export default function Nextra({ Component, pageProps }) {
8 | return
9 | }
--------------------------------------------------------------------------------
/Sources/Gravity/DataCache/RemoteData.swift:
--------------------------------------------------------------------------------
1 | //
2 | // File.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 09/04/2023.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol RemoteData: Codable, Hashable, Identifiable where ID: Codable & Hashable {
11 | associatedtype ObjectData
12 |
13 | static func object(from: Data) -> ObjectData
14 | }
15 |
--------------------------------------------------------------------------------
/docs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "docs",
3 | "version": "1.0.0",
4 | "main": "index.js",
5 | "author": "Arthur Guiot",
6 | "license": "MIT",
7 | "scripts": {
8 | "dev": "next dev",
9 | "build": "next build",
10 | "start": "next start"
11 | },
12 | "dependencies": {
13 | "next": "^13.2.3",
14 | "nextra": "^2.2.17",
15 | "nextra-theme-docs": "^2.2.17",
16 | "react": "^18.2.0",
17 | "react-dom": "^18.2.0",
18 | "sass": "^1.32.8",
19 | "prism-react-renderer": "^1.2.0",
20 | "prismjs": "^1.23.0"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/docs/pages/start.mdx:
--------------------------------------------------------------------------------
1 | # Installation
2 |
3 | The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler.
4 |
5 | It is the recommended way to install Gravity.
6 |
7 | Once you have your Swift package set up, adding Gravity as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`.
8 |
9 | ```swift
10 | dependencies: [
11 | .package(url: "https://github.com/pr1mer-tech/Gravity.git", .upToNextMajor(from: "2.0.0"))
12 | ]
13 | ```
--------------------------------------------------------------------------------
/docs/components/features.module.scss:
--------------------------------------------------------------------------------
1 | .features {
2 | display: flex;
3 | flex-wrap: wrap;
4 | margin: 2.5rem -.5rem 2rem;
5 | }
6 |
7 | .feature {
8 | flex: 0 0 33%;
9 | align-items: center;
10 | display: inline-flex;
11 | padding: 0 0.5rem 1.5rem;
12 | margin: 0 auto;
13 | }
14 |
15 | .feature h4 {
16 | margin: 0 0 0 0.5rem;
17 | font-weight: 700;
18 | font-size: 0.95rem;
19 | white-space: nowrap;
20 | }
21 |
22 | @media (max-width: 860px) {
23 | .feature {
24 | padding-left: 0;
25 | }
26 |
27 | .feature h4 {
28 | font-size: 0.75rem;
29 | }
30 | }
--------------------------------------------------------------------------------
/docs/pages/guide/data-model.mdx:
--------------------------------------------------------------------------------
1 | import { Callout } from 'nextra-theme-docs'
2 | import Link from 'next/link'
3 |
4 | # 1. Define your model
5 |
6 | For normal RESTful APIs with JSON data, first you need to create a model structure, which represents the expected result:
7 |
8 | ```swift
9 | import Gravity
10 |
11 | struct Landmark: RemoteRepresentable {
12 | var id: Int
13 | var name: String
14 | var park: String
15 | var state: String
16 | var description: String
17 | }
18 | ```
19 |
20 |
21 | The `RemoteRepresentable` protocol is a special protocol that makes it possible to cache the data in the local storage. It automatically conforms to the `Codable`, `Hashable`, `Identifiable` protocols, so you don't need to implement them manually.
22 |
--------------------------------------------------------------------------------
/Sources/Gravity/Store/Scheduler.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RateLimiter.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 21/03/2023.
6 | //
7 |
8 | import Foundation
9 |
10 | class Scheduler where Delegate: RemoteObjectDelegate {
11 | var task: Task? = nil
12 |
13 | func requestSync(delay: TimeInterval = 5) throws {
14 | guard task == nil else { return }
15 | self.task = Task {
16 | // Sleep for N second
17 | if delay > 0 {
18 | try await Task.sleep(nanoseconds: UInt64(delay * 1_000_000_000))
19 | }
20 | // Sync
21 | do {
22 | try await Delegate.shared.sync()
23 | } catch {
24 | Delegate.shared.store.logger.log(error)
25 | }
26 | }
27 | Task {
28 | let result = await self.task?.result
29 | self.task = nil
30 | if case .failure(let error) = result {
31 | throw error
32 | }
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Tests/GravityTests/Utility.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Utility.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 23/03/2023.
6 | //
7 |
8 | import Foundation
9 | @testable import Gravity
10 |
11 | struct User: RemoteRepresentable {
12 | var id: UUID
13 | var name: String?
14 | var email: String
15 | var birthday: Date?
16 | var gender: Gender?
17 | var profilePicture: String?
18 |
19 | enum Gender: String, Codable {
20 | case male
21 | case female
22 | }
23 | }
24 |
25 | struct UserBase: RemoteObjectDelegate {
26 | typealias Element = User
27 |
28 | var store = try! Store(reference: "users", maximumEntryCount: 1100)
29 |
30 | func pull(request: Gravity.RemoteRequest) async throws -> [User] {
31 | return request.ids.map { id in
32 | User(id: id, email: "hello@world.com")
33 | }
34 | }
35 |
36 | func push(elements: [User]) async throws {
37 | fatalError("Not implemented")
38 | }
39 |
40 | static var shared = UserBase()
41 | }
42 |
--------------------------------------------------------------------------------
/Sources/Gravity/RemoteBinding.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RemoteBinding.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 24/03/2023.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @MainActor
11 | @dynamicMemberLookup
12 | public struct RemoteBinding where Delegate: RemoteObjectDelegate {
13 | var id: Delegate.Element.ID
14 | var request: RemoteRequest
15 |
16 | public subscript(dynamicMember keyPath: WritableKeyPath) -> Binding {
17 | return Binding {
18 | return Delegate.shared.store.object(id: id)![keyPath: keyPath]
19 | } set: { newValue, transaction in
20 | try? Delegate.shared.store.update(id: id, with: request) { (object: inout Delegate.Element) in
21 | object[keyPath: keyPath] = newValue
22 | }
23 | }
24 | }
25 | }
26 |
27 | public extension Binding {
28 | func unwrap(defaultValue: T) -> Binding! where Value == Optional {
29 | Binding(get: { self.wrappedValue ?? defaultValue }, set: { self.wrappedValue = $0 })
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/docs/pages/how.mdx:
--------------------------------------------------------------------------------
1 | # How it works
2 |
3 | Gravity provides critical functionality in all kinds of SwiftUI apps, so **performance** is a top priority.
4 |
5 | Gravity’s built-in **caching** and **[deduplication](/how#deduplication)** skips unnecessary network requests, but
6 | the performance of the `SWR` hook itself still matters. In a complex app, there could be hundreds of `SWR` calls in a single page render.
7 |
8 | Gravity ensures that your app has:
9 | - _no unnecessary requests_
10 | - _no unnecessary re-renders_
11 | - _no unnecessary data revalidation_
12 |
13 | without any code changes from you.
14 |
15 |
16 |
17 | ## Deduplication
18 |
19 | It’s very common to reuse Gravity hooks in your app. For example, an app that renders the current user’s avatar 5 time. Each `Avatar` view has a `SWR` hook inside. Since they have the same key and are rendered at the almost same time, **only 1 network request will be made**. Same goes with `GravityStream`, where only one WebSocket connection will be active. One thing that is great about Gravity, is that even though 1 connection will be active, you can use different data processor, as WebSockets can transfer different type of information.
20 |
--------------------------------------------------------------------------------
/Sources/Gravity/Store/Cache/WrappedKey.swift:
--------------------------------------------------------------------------------
1 | //
2 | // File.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 23/03/2023.
6 | //
7 |
8 | import Foundation
9 |
10 | extension Cache {
11 | final class WrappedKey: NSObject {
12 | let key: ID
13 |
14 | init(_ key: ID) { self.key = key }
15 |
16 | override var hash: Int { return key.hashValue }
17 |
18 | override func isEqual(_ object: Any?) -> Bool {
19 | guard let value = object as? WrappedKey else {
20 | return false
21 | }
22 |
23 | return value.key == key
24 | }
25 | }
26 |
27 | final class WrappedKeys: NSObject, Codable {
28 | var keys: Set
29 |
30 | init(_ keys: Set) { self.keys = keys }
31 |
32 | override var hash: Int { return keys.hashValue }
33 |
34 | override func isEqual(_ object: Any?) -> Bool {
35 | guard let value = object as? WrappedKeys else {
36 | return false
37 | }
38 |
39 | return value.keys == keys
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/docs/pages/guide/data-controller.mdx:
--------------------------------------------------------------------------------
1 | import { Callout } from 'nextra-theme-docs'
2 | import Link from 'next/link'
3 |
4 | # 2. Define the controller
5 | In order to pull and push the data from the database, we need to define the controller. The controller is the place where we define the logic of the application.
6 |
7 | ```swift
8 | import Gravity
9 |
10 | final class LandmarkBase: RemoteObjectDelegate {
11 | typealias Element = Landmark // Tells the RemoteObjectDelegate which type of object it is working with
12 |
13 | var store = try! Store(reference: "landmarks") // Defines the store where the data will be stored and cached
14 |
15 | func pull(request: RemoteRequest) async throws -> [Landmark] {
16 | // Fetches the data from the database
17 | }
18 |
19 | func push(elements: [Landmark]) async throws {
20 | // Pushes the data to the database
21 | }
22 |
23 | static var shared = LandmarkBase() // Defines the shared instance of the controller
24 | }
25 | ```
26 |
27 | The `RemoteObjectDelegate` protocol also supports other methods, and you can find more information about them in the RemoteObjectDelegate page.
28 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version:5.3
2 | // The swift-tools-version declares the minimum version of Swift required to build this package.
3 |
4 | import PackageDescription
5 |
6 | let package = Package(
7 | name: "Gravity",
8 | platforms: [
9 | .macOS(.v11),
10 | .iOS(.v13),
11 | .tvOS(.v13),
12 | .watchOS(.v6)
13 | ],
14 | products: [
15 | // Products define the executables and libraries a package produces, and make them visible to other packages.
16 | .library(
17 | name: "Gravity",
18 | targets: ["Gravity"]),
19 | ],
20 | dependencies: [
21 | // Dependencies declare other packages that this package depends on.
22 | // .package(url: /* package url */, from: "1.0.0"),
23 | ],
24 | targets: [
25 | // Targets are the basic building blocks of a package. A target can define a module or a test suite.
26 | // Targets can depend on other targets in this package, and on products in packages this package depends on.
27 | .target(
28 | name: "Gravity",
29 | dependencies: []
30 | ),
31 | .testTarget(
32 | name: "GravityTests",
33 | dependencies: ["Gravity"]
34 | )
35 | ]
36 | )
37 |
--------------------------------------------------------------------------------
/Tests/GravityTests/CacheCodable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CacheCodable.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 22/03/2023.
6 | //
7 |
8 | import XCTest
9 | @testable import Gravity
10 |
11 | @MainActor
12 | final class CacheCodable: XCTestCase {
13 |
14 | override func setUpWithError() throws {
15 | // Put setup code here. This method is called before the invocation of each test method in the class.
16 | }
17 |
18 | override func tearDownWithError() throws {
19 | // Put teardown code here. This method is called after the invocation of each test method in the class.
20 | }
21 |
22 | func testCoding() throws {
23 | let store = UserBase.shared.store
24 | var uuids = [UUID]()
25 | for _ in 0...1000 {
26 | let id = UUID()
27 | try? store.save(User(id: id, email: "example@example.com"), with: .id(id), requestPushWithInterval: nil)
28 | uuids.append(id)
29 | }
30 |
31 | self.measure {
32 | guard let data = try? JSONEncoder().encode(UserBase.shared.store.cache) else { return }
33 | let decoded = try? JSONDecoder().decode(Cache.self, from: data)
34 |
35 | XCTAssertEqual(UserBase.shared.store.cache, decoded)
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Tests/GravityTests/StorePerformance.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StorePerformance.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 22/03/2023.
6 | //
7 |
8 | import XCTest
9 | @testable import Gravity
10 |
11 | @MainActor
12 | final class StorePerformance: XCTestCase {
13 |
14 | func testSavePerformance() throws {
15 | // This is an example of a performance test case.
16 | let store = UserBase.shared.store
17 | self.measure {
18 | for _ in 0...2000 {
19 | let id = UUID()
20 | try? store.save(User(id: id, email: "example@example.com"), with: .id(id), requestPushWithInterval: nil)
21 | }
22 | }
23 | }
24 |
25 | func testReadPerformance() throws {
26 | // This is an example of a performance test case.
27 | let store = UserBase.shared.store
28 | var uuids = [UUID]()
29 | for _ in 0...1000 {
30 | let id = UUID()
31 | try? store.save(User(id: id, email: "example@example.com"), with: .id(id), requestPushWithInterval: nil)
32 | uuids.append(id)
33 | }
34 | self.measure {
35 | for id in uuids {
36 | guard !store.objects(request: .id(id)).isEmpty else { return XCTFail("Empty object") }
37 | }
38 | }
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/docs/pages/index.mdx:
--------------------------------------------------------------------------------
1 | import { Callout } from 'nextra-theme-docs'
2 | import Features from '../components/features'
3 |
4 |
5 |
6 | # Gravity
7 |
8 |
9 |
10 | Gravity is a SwiftUI library for remote data fetching. I acts as a Network Layer for your SwiftUI app, providing a simple and declarative way to fetch data from the server. It uses `stale-while-revalidate` technonology to fetch data from the server, a cache invalidation strategy popularized by [HTTP RFC 5861](https://tools.ietf.org/html/rfc5861).
11 | Gravity first returns the data from cache (stale), then sends the fetch request (revalidate), and finally comes with the up-to-date data again.
12 |
13 |
14 | With Gravity, components will get a stream of data updates constantly and automatically .
15 | And the UI will be always fast and reactive .
16 |
17 |
18 | ## Overview
19 |
20 | ```swift
21 | import SwiftUI
22 | import Gravity
23 |
24 | struct LandmarkList: View {
25 | @RemoteObjects(request: .all) var landmarks
26 | var body: some View {
27 | List(landmarks, id: \.id) { landmark in
28 | LandmarkRow(landmark: landmark)
29 | }
30 | }
31 | }
32 | ```
33 |
34 | In this example, the property wrapper `@RemoteObjects` accepts a `request` and returns an array of all the `Landmark`.
35 |
36 | `LandmarkBase` acts as a controller for the `Landmark` model. It is responsible for fetching the data from the server and returning it to Gravity. The rest is handled by Gravity.
--------------------------------------------------------------------------------
/docs/pages/guide/display.mdx:
--------------------------------------------------------------------------------
1 | import { Callout } from 'nextra-theme-docs'
2 |
3 | # 3. Display your data
4 | Now that you have your data model & controller set up, you can display your data in your views. There are two ways to do this, depending on the type of data you want to display.
5 |
6 | ## Displaying a single record
7 | If you want to display a single record, you can use the `RemoteObject` property wrapper. This property wrapper will fetch the data from the server depending on your request, and will update the view when the data changes. You can use this property wrapper in your view almost like a `@State` property wrapper.
8 | ```swift
9 | @RemoteObject(request: .id("any-id")) var landmark
10 | ```
11 | Sometimes, you also might want to wait for the request before loading the data. In that case, you can use the `RemoteObject` property wrapper with the `waitForRequest` parameter.
12 | ```swift
13 | @RemoteObject(waitForRequest: true) var landmark
14 |
15 | init(id: String) {
16 | _landmark.updateRequest(request: .id(id))
17 | }
18 | ```
19 |
20 | ## Displaying multiple records
21 | If you want to display multiple records, you can use the `RemoteObjects` property wrapper. It works almost the same as the `RemoteObject` property wrapper, but it will fetch multiple records instead of a single record.
22 | ```swift
23 | @RemoteObjects(request: .all) var landmarks
24 | ```
25 | You can also use the `RemoteObjects` property wrapper with the `waitForRequest` parameter.
26 | ```swift
27 | @RemoteObjects(waitForRequest: true) var landmarks
28 |
29 | init(ids: [String]) {
30 | _landmarks.updateRequest(request: .ids(ids)) // Or you can use .all to fetch all records
31 | }
32 | ```
--------------------------------------------------------------------------------
/Sources/Gravity/Store/Cache/CachePersistency.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CachePersistency.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 22/03/2023.
6 | //
7 |
8 | import Foundation
9 |
10 | protocol CacheDecodable: Codable {
11 | init(referenceID: String)
12 | var reference: String { get }
13 | static func cacheURL(for reference: String) -> URL
14 | }
15 |
16 | extension CacheDecodable {
17 | init(withReference reference: String) throws {
18 | // Check if file exists
19 | let fileManager = FileManager.default
20 | let url = Self.cacheURL(for: reference)
21 |
22 | if fileManager.fileExists(atPath: url.path) {
23 | // File exists
24 | let data = try Data(contentsOf: url)
25 | do {
26 | self = try JSONDecoder().decode(Self.self, from: data)
27 | } catch {
28 | try fileManager.removeItem(atPath: url.path)
29 | throw error
30 | }
31 | } else {
32 | self.init(referenceID: reference)
33 | }
34 | }
35 | }
36 | extension Cache: CacheDecodable {
37 | convenience init(referenceID: String) {
38 | self.init(reference: referenceID, dateProvider: Date.init, entryLifetime: 12 * 60 * 60, maximumEntryCount: 50)
39 | }
40 |
41 | static func cacheURL(for reference: String) -> URL {
42 | let folderURLs = FileManager.default.urls(
43 | for: .cachesDirectory,
44 | in: .userDomainMask
45 | )
46 |
47 | return folderURLs[0].appendingPathComponent(reference + ".cache")
48 | }
49 |
50 | var cacheURL: URL {
51 | Cache.cacheURL(for: reference)
52 | }
53 |
54 | func saveToDisk() throws {
55 | let data = try JSONEncoder().encode(self)
56 | try data.write(to: cacheURL)
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/Sources/Gravity/Utility/Logger.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Logger.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 22/03/2023.
6 | //
7 |
8 | import Foundation
9 |
10 | /// A helper class used to log errors to console and perform actions that might throw an error.
11 | public final class Logger {
12 | /// Create a new logger.
13 | public init() {}
14 |
15 | /// Last console output.
16 | public private(set) var lastOutput: String?
17 |
18 | var error: Error?
19 |
20 | /// Log an error to console.
21 | /// - Parameters:
22 | /// - error: error to be logged to console.
23 | /// - fileName: file name of where the error occurred.
24 | /// - functionName: function name of where the error occurred.
25 | /// - Returns: the string that was printed to console.
26 | @discardableResult public func log(
27 | _ error: Error,
28 | fileName: String = #file,
29 | functionName: String = #function
30 | ) -> String {
31 | let file = fileName
32 | .split(separator: "/")
33 | .last?
34 | .replacingOccurrences(of: ".swift", with: "") ?? fileName
35 | let location = "`\(file).\(functionName)`"
36 | let errorDescription = error.localizedDescription
37 | let message = "An error occurred in \(location). Error: \(errorDescription)"
38 | #if DEBUG
39 | print(message)
40 | #endif
41 | lastOutput = message
42 | return message
43 | }
44 |
45 | /// Perform an action and return its result.
46 | /// - Returns: Action to be performed.
47 | @discardableResult public func perform(
48 | _ action: @autoclosure () throws -> Output
49 | ) throws -> Output {
50 | if let error = error {
51 | throw error
52 | }
53 | let result = try action()
54 | return result
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/Sources/Gravity/RemoteObjects.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RemoteObjects.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 21/03/2023.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @propertyWrapper
11 | public struct RemoteObjects : DynamicProperty where Delegate: RemoteObjectDelegate {
12 |
13 | @ObservedObject var store: Store
14 |
15 | var waitForRequest = false
16 | var request: RemoteRequest!
17 |
18 | public init(request: RemoteRequest) {
19 | self.store = Delegate.shared.store
20 | self.request = request
21 | self.store.realtimeController.subscribe(to: request)
22 | // Revalidate
23 | self.revalidate()
24 | }
25 |
26 | public init(waitForRequest: Bool) {
27 | self.store = Delegate.shared.store
28 | self.waitForRequest = true
29 | }
30 |
31 | public mutating func updateRequest(request: RemoteRequest) {
32 | if !waitForRequest {
33 | self.store.realtimeController.unsubscribe(to: self.request) // unsubscribe to old one
34 | self.store.realtimeController.subscribe(to: request)
35 | }
36 | self.waitForRequest = false
37 | self.request = request
38 | // Revalidate
39 | self.revalidate()
40 | }
41 |
42 | public func revalidate() {
43 | self.store.revalidate(request: request)
44 | }
45 |
46 | public var wrappedValue: [Delegate.Element] {
47 | get {
48 | return store.objects(request: request)
49 | }
50 | nonmutating set {
51 | do {
52 | try store.save(elements: newValue, with: request)
53 | } catch {
54 | print("### Save to \(Delegate.Element.self) Store Error: \(error)")
55 | }
56 | }
57 | }
58 |
59 | public var projectedValue: Binding<[Delegate.Element]> {
60 | return .init(get: { self.wrappedValue }, set: { self.wrappedValue = $0 })
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/Sources/Gravity/RemoteObject.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RemoteObject.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 21/03/2023.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @propertyWrapper
11 | public struct RemoteObject : DynamicProperty where Delegate: RemoteObjectDelegate {
12 |
13 | @ObservedObject var store: Store
14 |
15 | var waitForRequest = false
16 | var request: RemoteRequest!
17 |
18 | public init(request: RemoteRequest) {
19 | self.store = Delegate.shared.store
20 | self.request = request
21 | self.store.realtimeController.subscribe(to: request)
22 | // Revalidate
23 | self.revalidate()
24 | }
25 |
26 | public init(waitForRequest: Bool) {
27 | self.store = Delegate.shared.store
28 | self.waitForRequest = true
29 | }
30 |
31 | public mutating func updateRequest(request: RemoteRequest) {
32 | if !waitForRequest {
33 | self.store.realtimeController.unsubscribe(to: self.request)
34 | self.store.realtimeController.subscribe(to: request)
35 | }
36 | self.waitForRequest = false
37 | self.request = request
38 | // Revalidate
39 | self.revalidate()
40 | }
41 |
42 | public func revalidate() {
43 | self.store.revalidate(request: request)
44 | }
45 |
46 | public var wrappedValue: Delegate.Element? {
47 | get {
48 | return store.objects(request: request).first
49 | }
50 | nonmutating set {
51 | guard let newValue = newValue else { return }
52 | do {
53 | try store.save(newValue, with: request)
54 | } catch {
55 | print("### Save to \(Delegate.Element.self) Store Error: \(error)")
56 | }
57 | }
58 | }
59 |
60 | public var projectedValue: Binding? {
61 | guard self.wrappedValue != nil else { return nil }
62 | return .init(get: { self.wrappedValue! }, set: { self.wrappedValue = $0 })
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Gravity
4 |
5 |
6 |
7 | ## Introduction
8 |
9 | Gravity is a SwiftUI library for remote data fetching. It uses **SWR** technonology to fetch data from the server.
10 |
11 | The name “**SWR**” is derived from `stale-while-revalidate`, a cache invalidation strategy popularized by [HTTP RFC 5861](https://tools.ietf.org/html/rfc5861).
12 | Gravity first returns the data from cache (stale), then sends the fetch request (revalidate), and finally comes with the up-to-date data again.
13 |
14 | With Gravity, components will get **a stream of data updates constantly and automatically**. Thus, the UI will be always **fast** and **reactive**.
15 |
16 |
17 |
18 | ## Quick Start
19 |
20 | #### Installation
21 |
22 | The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler.
23 |
24 | It is the recommended way to install Gravity.
25 |
26 | Once you have your Swift package set up, adding Gravity as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`.
27 |
28 | ```swift
29 | dependencies: [
30 | .package(url: "https://github.com/pr1mer-tech/Gravity.git", .upToNextMajor(from: "0.1.0"))
31 | ]
32 | ```
33 | You can then import and use Gravity:
34 | ```swift
35 | import SwiftUI
36 | import Gravity
37 |
38 | struct LandmarkList: View {
39 | @SWR(url: "https://example.org/api/endpoint") var api
40 | var body: some View {
41 | if let landmarks = api.data {
42 | List(landmarks, id: \.id) { landmark in
43 | LandmarkRow(landmark: landmark)
44 | }
45 | }
46 | }
47 | }
48 | ```
49 |
50 | In this example, the property wrapper `@SWR` accepts a `url` and a `model`.
51 |
52 | The `url` is the URL of the API. And the `model` is a `Codable` object.
53 |
54 | `api` will be a `StateResponse` object that has three children: `data` that will contain the decoded data, `error` in case there is an error and `awaiting` when the app is loading.
55 |
--------------------------------------------------------------------------------
/Sources/Gravity/RemoteRequest.swift:
--------------------------------------------------------------------------------
1 | //
2 | // File.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 23/03/2023.
6 | //
7 |
8 | import Foundation
9 |
10 | public enum RemoteRequest: Hashable {
11 | case ids([T])
12 | case id(T)
13 | case all
14 |
15 | static func +(lhs: RemoteRequest, rhs: RemoteRequest) -> RemoteRequest {
16 | switch (lhs, rhs) {
17 | case (.all, _), (_, .all):
18 | return .all
19 | case let (.id(id1), .id(id2)):
20 | return .ids([id1, id2])
21 | case let (.id(id), .ids(ids)) where !ids.contains(id):
22 | return .ids([id] + ids)
23 | case let (.ids(ids), .id(id)) where !ids.contains(id):
24 | return .ids([id] + ids)
25 | case let (.ids(ids1), .ids(ids2)):
26 | return .ids(Array(Set(ids1 + ids2)))
27 | default:
28 | return lhs
29 | }
30 | }
31 |
32 | static func +=(lhs: inout RemoteRequest, rhs: RemoteRequest) {
33 | lhs = lhs + rhs
34 | }
35 |
36 | static func -(lhs: RemoteRequest, rhs: RemoteRequest) -> RemoteRequest {
37 | switch (lhs, rhs) {
38 | case (_, .all):
39 | return .ids([])
40 | case let (.ids(ids), .ids(idsToRemove)):
41 | let idsSetToRemove = Set(idsToRemove)
42 | let filteredIds = ids.filter { !idsSetToRemove.contains($0) }
43 | return filteredIds.isEmpty ? .all : .ids(filteredIds)
44 | default:
45 | return lhs
46 | }
47 | }
48 |
49 | static func -=(lhs: inout RemoteRequest, rhs: RemoteRequest) {
50 | lhs = lhs - rhs
51 | }
52 |
53 | public var ids: [T] {
54 | switch self {
55 | case .ids(let ids):
56 | return ids
57 | case .id(let id):
58 | return [id]
59 | case .all:
60 | return []
61 | }
62 | }
63 |
64 | public var isEmpty: Bool {
65 | switch self {
66 | case .ids(let array):
67 | return array.isEmpty
68 | case .id(let t):
69 | return false
70 | case .all:
71 | return false
72 | }
73 | }
74 |
75 | public var isAll: Bool {
76 | if case .all = self {
77 | return true
78 | }
79 | return false
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/Sources/Gravity/DataCache/DataCache.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DataCache.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 08/04/2023.
6 | //
7 |
8 | import Foundation
9 | import Combine
10 |
11 | public protocol DataCache: ObservableObject {
12 | associatedtype Object: RemoteData
13 |
14 | var cacheDirectoryName: String { get }
15 | var objectWillChange: ObservableObjectPublisher { get }
16 |
17 | func fetch(using request: URLRequest) async throws -> Data
18 |
19 | func urlRequests(for request: RemoteRequest) -> [URLRequest]
20 | }
21 |
22 | extension DataCache {
23 | public var cacheDirectory: URL {
24 | let fileManager = FileManager.default
25 | let urls = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)
26 | let directoryURL = urls[0].appendingPathComponent(cacheDirectoryName)
27 | if !fileManager.fileExists(atPath: directoryURL.path) {
28 | try? fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: true, attributes: nil)
29 | }
30 | return directoryURL
31 | }
32 |
33 | public var logger: Logger {
34 | return Logger()
35 | }
36 |
37 | private func cachedData(for request: URLRequest) -> Data? {
38 | guard let url = request.url, let fileName = url.absoluteString.addingPercentEncoding(withAllowedCharacters: .alphanumerics) else {
39 | return nil
40 | }
41 | let fileURL = cacheDirectory.appendingPathComponent(fileName)
42 | return try? Data(contentsOf: fileURL)
43 | }
44 |
45 | private func storeCachedData(_ data: Data, for request: URLRequest) {
46 | guard let url = request.url, let fileName = url.absoluteString.addingPercentEncoding(withAllowedCharacters: .alphanumerics) else {
47 | return
48 | }
49 | let fileURL = cacheDirectory.appendingPathComponent(fileName)
50 | do {
51 | try data.write(to: fileURL)
52 | } catch {
53 | logger.log(error)
54 | }
55 | }
56 |
57 | public func pull(for request: RemoteRequest) -> [Object.ObjectData] {
58 | let urlRequests = urlRequests(for: request)
59 | var objects: [Object.ObjectData] = []
60 |
61 | for req in urlRequests {
62 | if let data = cachedData(for: req) {
63 | let object = Object.object(from: data)
64 | objects.append(object)
65 | } else {
66 | Task.detached {
67 | do {
68 | let fetchedData = try await self.fetch(using: req)
69 | self.storeCachedData(fetchedData, for: req)
70 | await MainActor.run {
71 | self.objectWillChange.send()
72 | }
73 | } catch {
74 | self.logger.log(error)
75 | }
76 | }
77 | }
78 | }
79 |
80 | return objects
81 | }
82 |
83 | public func pullSingle(for id: Object.ID) -> Object.ObjectData? {
84 | return pull(for: .id(id)).first
85 | }
86 |
87 | public func removeAllData() {
88 | try? FileManager.default.removeItem(at: cacheDirectory)
89 | objectWillChange.send()
90 | }
91 | }
92 |
93 | public enum DataCacheError: Error {
94 | case urlRequestCreationFailed
95 | }
96 |
97 | public extension DataCache {
98 | func fetch(using request: URLRequest) async throws -> Data {
99 | let (data, response) = try await URLSession.shared.data(for: request)
100 | guard let httpResponse = response as? HTTPURLResponse, 200..<300 ~= httpResponse.statusCode else {
101 | throw DataCacheError.urlRequestCreationFailed
102 | }
103 | return data
104 | }
105 | }
106 |
--------------------------------------------------------------------------------
/docs/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.toptal.com/developers/gitignore/api/macos,windows,next,node
2 | # Edit at https://www.toptal.com/developers/gitignore?templates=macos,windows,next,node
3 |
4 | ### macOS ###
5 | # General
6 | .DS_Store
7 | .AppleDouble
8 | .LSOverride
9 |
10 | # Icon must end with two \r
11 | Icon
12 |
13 |
14 | # Thumbnails
15 | ._*
16 |
17 | # Files that might appear in the root of a volume
18 | .DocumentRevisions-V100
19 | .fseventsd
20 | .Spotlight-V100
21 | .TemporaryItems
22 | .Trashes
23 | .VolumeIcon.icns
24 | .com.apple.timemachine.donotpresent
25 |
26 | # Directories potentially created on remote AFP share
27 | .AppleDB
28 | .AppleDesktop
29 | Network Trash Folder
30 | Temporary Items
31 | .apdisk
32 |
33 | ### macOS Patch ###
34 | # iCloud generated files
35 | *.icloud
36 |
37 | #!! ERROR: next is undefined. Use list command to see defined gitignore types !!#
38 |
39 | ### Node ###
40 | # Logs
41 | logs
42 | *.log
43 | npm-debug.log*
44 | yarn-debug.log*
45 | yarn-error.log*
46 | lerna-debug.log*
47 | .pnpm-debug.log*
48 |
49 | # Diagnostic reports (https://nodejs.org/api/report.html)
50 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
51 |
52 | # Runtime data
53 | pids
54 | *.pid
55 | *.seed
56 | *.pid.lock
57 |
58 | # Directory for instrumented libs generated by jscoverage/JSCover
59 | lib-cov
60 |
61 | # Coverage directory used by tools like istanbul
62 | coverage
63 | *.lcov
64 |
65 | # nyc test coverage
66 | .nyc_output
67 |
68 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
69 | .grunt
70 |
71 | # Bower dependency directory (https://bower.io/)
72 | bower_components
73 |
74 | # node-waf configuration
75 | .lock-wscript
76 |
77 | # Compiled binary addons (https://nodejs.org/api/addons.html)
78 | build/Release
79 |
80 | # Dependency directories
81 | node_modules/
82 | jspm_packages/
83 |
84 | # Snowpack dependency directory (https://snowpack.dev/)
85 | web_modules/
86 |
87 | # TypeScript cache
88 | *.tsbuildinfo
89 |
90 | # Optional npm cache directory
91 | .npm
92 |
93 | # Optional eslint cache
94 | .eslintcache
95 |
96 | # Optional stylelint cache
97 | .stylelintcache
98 |
99 | # Microbundle cache
100 | .rpt2_cache/
101 | .rts2_cache_cjs/
102 | .rts2_cache_es/
103 | .rts2_cache_umd/
104 |
105 | # Optional REPL history
106 | .node_repl_history
107 |
108 | # Output of 'npm pack'
109 | *.tgz
110 |
111 | # Yarn Integrity file
112 | .yarn-integrity
113 |
114 | # dotenv environment variable files
115 | .env
116 | .env.development.local
117 | .env.test.local
118 | .env.production.local
119 | .env.local
120 |
121 | # parcel-bundler cache (https://parceljs.org/)
122 | .cache
123 | .parcel-cache
124 |
125 | # Next.js build output
126 | .next
127 | out
128 |
129 | # Nuxt.js build / generate output
130 | .nuxt
131 | dist
132 |
133 | # Gatsby files
134 | .cache/
135 | # Comment in the public line in if your project uses Gatsby and not Next.js
136 | # https://nextjs.org/blog/next-9-1#public-directory-support
137 | # public
138 |
139 | # vuepress build output
140 | .vuepress/dist
141 |
142 | # vuepress v2.x temp and cache directory
143 | .temp
144 |
145 | # Docusaurus cache and generated files
146 | .docusaurus
147 |
148 | # Serverless directories
149 | .serverless/
150 |
151 | # FuseBox cache
152 | .fusebox/
153 |
154 | # DynamoDB Local files
155 | .dynamodb/
156 |
157 | # TernJS port file
158 | .tern-port
159 |
160 | # Stores VSCode versions used for testing VSCode extensions
161 | .vscode-test
162 |
163 | # yarn v2
164 | .yarn/cache
165 | .yarn/unplugged
166 | .yarn/build-state.yml
167 | .yarn/install-state.gz
168 | .pnp.*
169 |
170 | ### Node Patch ###
171 | # Serverless Webpack directories
172 | .webpack/
173 |
174 | # Optional stylelint cache
175 |
176 | # SvelteKit build / generate output
177 | .svelte-kit
178 |
179 | ### Windows ###
180 | # Windows thumbnail cache files
181 | Thumbs.db
182 | Thumbs.db:encryptable
183 | ehthumbs.db
184 | ehthumbs_vista.db
185 |
186 | # Dump file
187 | *.stackdump
188 |
189 | # Folder config file
190 | [Dd]esktop.ini
191 |
192 | # Recycle Bin used on file shares
193 | $RECYCLE.BIN/
194 |
195 | # Windows Installer files
196 | *.cab
197 | *.msi
198 | *.msix
199 | *.msm
200 | *.msp
201 |
202 | # Windows shortcuts
203 | *.lnk
204 |
205 | # End of https://www.toptal.com/developers/gitignore/api/macos,windows,next,node
206 | n
--------------------------------------------------------------------------------
/Sources/Gravity/RemoteObjectDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // File.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 21/03/2023.
6 | //
7 |
8 | import Foundation
9 |
10 | public protocol RemoteObjectDelegate {
11 | associatedtype Element: RemoteRepresentable
12 | static var shared: Self { get }
13 |
14 | var store: Store { get } // Where the DB data will be stored
15 |
16 | // Data processing
17 | func process(elements: [Element], for request: RemoteRequest) -> [Element]
18 |
19 | // CRUD
20 | func pull(request: RemoteRequest) async throws -> [Element]
21 | func push(elements: [Element]) async throws
22 | func pop(elements: [Element]) async throws
23 |
24 | // Reactivity
25 | func connect(heartbeat: Bool) async -> Connection?
26 | func subscribe(request: RemoteRequest) -> Bool
27 | func unsubscribe(request: RemoteRequest)
28 | }
29 |
30 | public enum Connection {
31 | case connecting
32 | case connected
33 | case disconnected
34 | }
35 |
36 | public extension RemoteObjectDelegate {
37 | func process(elements: [Element], for request: RemoteRequest) -> [Element] {
38 | return elements
39 | }
40 |
41 | func push(elements: [Element]) async throws {
42 | fatalError("Not Implemented")
43 | }
44 | func pop(elements: [Element]) async throws {
45 | fatalError("Not Implemented")
46 | }
47 |
48 | func connect(heartbeat: Bool) async -> Connection? {
49 | return nil // No WebSockets to be conencted
50 | }
51 | func subscribe(request: RemoteRequest) -> Bool {
52 | return false
53 | }
54 | func unsubscribe(request: RemoteRequest) {}
55 | }
56 |
57 | internal extension RemoteObjectDelegate {
58 |
59 | func sync() async throws {
60 | let needPush = await self.store.needPush
61 | let needPull = await self.store.needPull
62 | let needPop = await self.store.needPop
63 |
64 | if !needPush.isEmpty {
65 | try await requestPush(needPush: needPush)
66 | }
67 |
68 | if !needPop.isEmpty {
69 | try await requestPop(needPop: needPop)
70 | }
71 |
72 | if !needPull.isEmpty {
73 | try await requestPull(needPull: needPull)
74 | }
75 |
76 | // Time to save to disk
77 | try await self.store.saveToDisk()
78 | }
79 |
80 | func requestPush(needPush: Set) async throws {
81 | let objects = try await needPush.compactAsyncMap { await self.store.object(id: $0) }
82 | guard objects.count > 0 else { return }
83 | try await self.push(elements: objects)
84 | // Remove from needPush
85 | await self.store.purgePush(needPush)
86 | }
87 |
88 | func requestPull(needPull: Set>) async throws {
89 | for pull in needPull {
90 | let results = try await self.pull(request: pull)
91 | try await self.store.save(elements: results, with: pull, requestPushWithInterval: nil)
92 | // Remove from needPull
93 | await self.store.purgePull(pull)
94 | }
95 | }
96 |
97 | func requestPop(needPop: Set) async throws {
98 | try await self.pop(elements: Array(needPop))
99 | // Remove from needPop
100 | await self.store.purgePop(needPop)
101 | }
102 | }
103 |
104 | internal extension Sequence {
105 | func compactAsyncMap(
106 | _ transform: @escaping (Element) async throws -> T?
107 | ) async throws -> [T] {
108 | let tasks = map { element in
109 | Task {
110 | try await transform(element)
111 | }
112 | }
113 |
114 | let results = try await tasks.asyncMap { task in
115 | try await task.value
116 | }
117 |
118 | return results.compactMap { $0 }
119 | }
120 |
121 | func asyncMap(
122 | _ transform: (Element) async throws -> T
123 | ) async rethrows -> [T] {
124 | var values = [T]()
125 |
126 | for element in self {
127 | try await values.append(transform(element))
128 | }
129 |
130 | return values
131 | }
132 | }
133 |
--------------------------------------------------------------------------------
/docs/components/features.js:
--------------------------------------------------------------------------------
1 | import styles from './features.module.scss'
2 |
3 | const Feature = ({ text, icon }) => (
4 |
5 | {icon}
6 |
{text}
7 |
8 | )
9 |
10 | export default function Features() {
11 | return (
12 |
13 |
SwiftUI library for data fetching
14 |
15 |
30 |
31 |
32 | }
33 | />
34 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 | }
57 | />
58 |
72 |
73 |
74 | }
75 | />
76 |
90 |
91 |
92 | }
93 | />
94 |
108 |
109 |
110 |
111 | }
112 | />
113 |
127 |
128 |
129 |
130 | }
131 | />
132 |
133 |
134 | )
135 | }
--------------------------------------------------------------------------------
/Sources/Gravity/Store/Realtime/RealtimeController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RealtimeController.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 08/04/2023.
6 | //
7 |
8 | import Foundation
9 | import Network
10 |
11 | public final class RealtimeController where Delegate: RemoteObjectDelegate {
12 | var subscriptions = Set>()
13 | var subscribed = Set>()
14 |
15 | var heartbeatTimer: Timer? = nil
16 | var heartbeatInterval: TimeInterval = 5
17 |
18 | let pathMonitor = NWPathMonitor()
19 | var isMonitoring = false
20 |
21 | var isConnected = false
22 |
23 | init() {
24 | self.startMonitoring()
25 | Task { await self.connect() }
26 | }
27 |
28 | deinit {
29 | self.stopMonitoring()
30 | }
31 |
32 | func startMonitoring() {
33 | guard !isMonitoring else { return }
34 | isMonitoring = true
35 |
36 | pathMonitor.pathUpdateHandler = { [weak self] path in
37 | DispatchQueue.main.async {
38 | self?.networkChanged()
39 | }
40 | }
41 |
42 | let queue = DispatchQueue(label: "NetworkMonitor")
43 | pathMonitor.start(queue: queue)
44 | }
45 |
46 | func stopMonitoring() {
47 | self.heartbeatTimer?.invalidate()
48 | self.heartbeatTimer = nil
49 | guard isMonitoring else { return }
50 | isMonitoring = false
51 |
52 | pathMonitor.cancel()
53 | }
54 |
55 | func networkChanged() {
56 | if pathMonitor.currentPath.status == .satisfied {
57 | Task { await self.connect() }
58 | } else {
59 | self.heartbeatTimer?.invalidate()
60 | self.heartbeatTimer = nil
61 | }
62 | }
63 |
64 | func connect(retryingAfter: TimeInterval = 0) async {
65 | let connect = await Delegate.shared.connect(heartbeat: false)
66 | guard connect != nil else { return }
67 | guard connect != .connecting else {
68 | DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
69 | Task { await self.connect(retryingAfter: 0) }
70 | }
71 | return
72 | }
73 | if connect == .disconnected {
74 | print("Gravity: Connection failed")
75 | // Retry exponentially
76 | guard retryingAfter < 60 else { return } // Too many retries
77 | let retryingAfter = retryingAfter == 0 ? 1 : retryingAfter * 2
78 | DispatchQueue.main.asyncAfter(deadline: .now() + retryingAfter) {
79 | Task { await self.connect(retryingAfter: retryingAfter) }
80 | }
81 | return
82 | }
83 | self.isConnected = connect == .connected
84 | guard self.isConnected else { return }
85 | // Start heartbeat
86 | if self.heartbeatTimer == nil || !(self.heartbeatTimer?.isValid ?? false) {
87 | await MainActor.run {
88 | self.heartbeatTimer = Timer.scheduledTimer(withTimeInterval: heartbeatInterval, repeats: true) { _ in
89 | Task { await self.heartbeat() }
90 | }
91 | self.heartbeatTimer?.tolerance = 1
92 | }
93 | }
94 | self.heartbeatTimer?.fire()
95 | }
96 |
97 | func heartbeat() async {
98 | let connect = await Delegate.shared.connect(heartbeat: true)
99 | guard connect != nil else { return }
100 | guard connect != .connecting else {
101 | DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
102 | Task { await self.connect(retryingAfter: 0) }
103 | }
104 | return
105 | }
106 | if connect == .disconnected {
107 | print("Gravity: Heartbeat failed")
108 | // Unsubscribe from all
109 | self.subscriptions.forEach { self.subscribed.remove($0) }
110 | // Reconnect
111 | await self.connect()
112 | }
113 | self.isConnected = connect == .connected
114 | guard self.isConnected else { return }
115 |
116 | self.subscriptions.subtracting(self.subscribed).forEach { sub in
117 | // Ask delegate
118 | if Delegate.shared.subscribe(request: sub) {
119 | self.subscribed.insert(sub)
120 | }
121 | }
122 | }
123 |
124 | public func subscribe(to request: RemoteRequest) {
125 | guard !self.subscriptions.contains(request) else { return }
126 | self.subscriptions.insert(request)
127 | }
128 |
129 | public func unsubscribe(to request: RemoteRequest) {
130 | guard self.subscriptions.contains(request) else { return }
131 | Delegate.shared.unsubscribe(request: request)
132 | self.subscriptions.remove(request)
133 | self.subscribed.remove(request)
134 | }
135 | }
136 |
--------------------------------------------------------------------------------
/Sources/Gravity/Store/Store.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Store.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 21/03/2023.
6 | //
7 |
8 | import Foundation
9 |
10 | @MainActor
11 | public class Store: ObservableObject where Delegate: RemoteObjectDelegate {
12 | typealias T = Delegate.Element
13 |
14 | let logger = Logger()
15 |
16 | let cache: Cache
17 |
18 | let scheduler = Scheduler()
19 |
20 | public let realtimeController = RealtimeController()
21 |
22 | var needPush = Set()
23 | var needPull = Set>()
24 | var needPop = Set()
25 |
26 | public nonisolated init(reference: String,
27 | entryLifetime: TimeInterval = 12 * 60 * 60,
28 | maximumEntryCount: Int = 50) throws {
29 | self.cache = try Cache(withReference: reference)
30 | self.cache.entryLifetime = entryLifetime
31 | self.cache.entryCache.countLimit = maximumEntryCount
32 | }
33 |
34 | func purgePush(_ pushed: Set) {
35 | self.needPush.subtract(pushed)
36 | }
37 |
38 | func purgePull(_ pulled: RemoteRequest) {
39 | self.needPull.remove(pulled)
40 | }
41 |
42 | func purgePop(_ popped: Set) {
43 | self.needPop.subtract(popped)
44 | }
45 |
46 | /// Revalidate request
47 | /// - Parameter request: the request you need to invalidate
48 | public func revalidate(request: RemoteRequest) {
49 | needPull.insert(request)
50 | try? self.scheduler.requestSync(delay: 0)
51 | }
52 |
53 | public func saveToDisk() throws {
54 | try self.cache.saveToDisk()
55 | }
56 |
57 | func save(_ element: T, with request: RemoteRequest, requestPushWithInterval interval: TimeInterval? = 5) throws {
58 | cache.insert(element, with: request)
59 | if let interval = interval {
60 | self.needPush.insert(element.id)
61 | try scheduler.requestSync(delay: interval)
62 | }
63 | // Notify all views that something has changed
64 | self.objectWillChange.send()
65 | }
66 |
67 | func save(elements: [T], with request: RemoteRequest, requestPushWithInterval interval: TimeInterval? = 5) throws {
68 | try elements.forEach { element in
69 | try save(element, with: request, requestPushWithInterval: interval)
70 | }
71 | }
72 |
73 |
74 | /// Adds element to the store, and updates all the views subscribed to the request, or displaying this element.
75 | /// - Parameters:
76 | /// - element: Whatever element
77 | /// - request: The request you're subscribing to
78 | /// - interval: the delay at which Gravity will push the elements to your backend. This is useful when you expect a lot of updates, and want to wait until you have a final object.
79 | public func add(_ element: Delegate.Element, with request: RemoteRequest, requestPushWithInterval interval: TimeInterval? = nil) throws {
80 | try save(element, with: request, requestPushWithInterval: interval)
81 | }
82 |
83 | /// Updates element in the store, and updates all the views subscribed to the request, or displaying this element.
84 | /// - Parameters:
85 | /// - id: The id/key of the element you need to update.
86 | /// - request: The request you're subscribing to
87 | /// - update: The inout function to update the element.
88 | public func update(elementWithID id: Delegate.Element.ID, with request: RemoteRequest, requestPushWithInterval interval: TimeInterval? = nil, _ update: (inout Delegate.Element) -> Void) throws {
89 | guard var object = self.object(id: id) else { return }
90 | update(&object)
91 | try self.save(object, with: request, requestPushWithInterval: interval)
92 | }
93 |
94 | /// Removes object from the cache, and updates all the views displaying this element.
95 | /// - Parameter id: the id of the element
96 | public func delete(element: Delegate.Element, requestPopWithInterval interval: TimeInterval? = nil) throws {
97 | if let interval = interval {
98 | self.needPop.insert(element)
99 | try scheduler.requestSync(delay: interval)
100 | }
101 | cache.removeValue(forKey: element.id)
102 | try? cache.saveToDisk()
103 | // Notify all views that something has changed
104 | self.objectWillChange.send()
105 | }
106 |
107 | func update(id: T.ID, with request: RemoteRequest, _ update: (inout T) -> Void) throws {
108 | guard var object = self.object(id: id) else { return }
109 | update(&object)
110 | try self.save(object, with: request)
111 | }
112 |
113 | internal func object(id: T.ID) -> T? {
114 | cache.value(forKey: id)
115 | }
116 |
117 | /// Get elements from the store
118 | /// - Parameter request: The request you're making to the store
119 | /// - Returns: An array of elements. If an element is not in cache or expired, it will be added to the revalidation queue, but not returned in the array.
120 | public func objects(request: RemoteRequest) -> [Delegate.Element] {
121 | guard let ids = request.isAll ? self.cache.allKeys : self.cache.keys(forRequest: request) else {
122 | self.revalidate(request: request)
123 | return []
124 | }
125 | let objects = ids.map { self.object(id: $0) }
126 |
127 | if objects.contains(nil) {
128 | self.revalidate(request: request)
129 | }
130 | return Delegate.shared.process(elements: objects.compactMap { $0 }, for: request)
131 | }
132 |
133 | /// Reset cache
134 | public func reset() {
135 | cache.entryCache.removeAllObjects()
136 | cache.keyTracker.keys.removeAll()
137 | cache.keyTracker.requestCache.removeAll()
138 | try? cache.saveToDisk()
139 | }
140 | }
141 |
--------------------------------------------------------------------------------
/Sources/Gravity/Store/Cache/Cache.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Database.swift
3 | //
4 | //
5 | // Created by Arthur Guiot on 22/03/2023.
6 | //
7 |
8 | import CoreData
9 | import Foundation
10 |
11 | final class Cache where Element: RemoteRepresentable {
12 | typealias Key = Element.ID
13 | typealias Value = Element
14 |
15 | let entryCache = NSCache, Entry>()
16 |
17 |
18 | private let dateProvider: () -> Date
19 | var entryLifetime: TimeInterval
20 | let keyTracker = KeyTracker()
21 |
22 | internal var reference: String
23 |
24 | internal init(reference: String,
25 | dateProvider: @escaping () -> Date = Date.init,
26 | entryLifetime: TimeInterval = 12 * 60 * 60,
27 | maximumEntryCount: Int = 50) {
28 | self.reference = reference
29 | self.dateProvider = dateProvider
30 | self.entryLifetime = entryLifetime
31 | entryCache.countLimit = maximumEntryCount
32 | entryCache.delegate = keyTracker
33 | }
34 |
35 | deinit {
36 | try? self.saveToDisk()
37 | }
38 |
39 | func insert(_ value: Value, with request: RemoteRequest) {
40 | let date = dateProvider().addingTimeInterval(entryLifetime)
41 | let entry = Entry(value: value, expirationDate: date)
42 | entryCache.setObject(entry, forKey: WrappedKey(value.id))
43 | let reqIds = request.ids
44 | if keyTracker.requestCache[reqIds] == nil {
45 | keyTracker.requestCache[reqIds] = WrappedKeys(.init(arrayLiteral: value.id))
46 | } else {
47 | keyTracker.requestCache[reqIds]?.keys.insert(value.id)
48 | }
49 | keyTracker.keys.insert(value.id)
50 | }
51 |
52 | func value(forKey key: Key) -> Value? {
53 | guard let entry = entryCache.object(forKey: WrappedKey(key)) else {
54 | return nil
55 | }
56 |
57 | guard dateProvider() < entry.expirationDate else {
58 | // Discard values that have expired
59 | removeValue(forKey: key)
60 | return nil
61 | }
62 |
63 | return entry.value
64 | }
65 |
66 | func keys(forRequest request: RemoteRequest) -> [Key]? {
67 | guard let keys = keyTracker.requestCache[request.ids]?.keys else { return nil }
68 | return Array(keys)
69 | }
70 |
71 | func removeValue(forKey key: Key) {
72 | entryCache.removeObject(forKey: WrappedKey(key))
73 | keyTracker.requestCache = keyTracker.requestCache.filter { !$1.keys.contains(key) } // Removing all request where entry was dropped
74 | }
75 |
76 | var allKeys: [Key]? {
77 | let keys = keyTracker.keys
78 | guard !keys.isEmpty else { return nil }
79 | return Array(keys)
80 | }
81 | }
82 |
83 | extension Cache {
84 | final class Entry: Codable, Equatable {
85 | static func == (lhs: Cache.Entry, rhs: Cache.Entry) -> Bool {
86 | guard lhs.value.id == rhs.value.id else { return false }
87 | return true
88 | }
89 |
90 | let value: Value
91 | let expirationDate: Date
92 |
93 | init(value: Value, expirationDate: Date) {
94 | self.value = value
95 | self.expirationDate = expirationDate
96 | }
97 | }
98 | }
99 |
100 | extension Cache {
101 | final class KeyTracker: NSObject, NSCacheDelegate {
102 | var keys = Set()
103 |
104 | var requestCache = Dictionary<[Key], WrappedKeys>()
105 |
106 | func cache(_ cache: NSCache,
107 | willEvictObject object: Any) {
108 | guard let entry = object as? Entry else {
109 | return
110 | }
111 |
112 | keys.remove(entry.value.id)
113 | // requestCache.forEach { $1.keys.remove(entry.value.id) }
114 | // requestCache = requestCache.filter { !$1.keys.contains(entry.value.id) } // Removing all request where entry was dropped
115 | }
116 | }
117 | }
118 |
119 | extension Cache: Codable {
120 | fileprivate func insert(entry: Entry) {
121 | entryCache.setObject(entry, forKey: WrappedKey(entry.value.id))
122 | keyTracker.keys.insert(entry.value.id)
123 | }
124 | fileprivate func entry(forKey key: Key) -> Entry? {
125 | guard let entry = entryCache.object(forKey: WrappedKey(key)) else {
126 | return nil
127 | }
128 |
129 | guard dateProvider() < entry.expirationDate else {
130 | removeValue(forKey: key)
131 | return nil
132 | }
133 |
134 | return entry
135 | }
136 |
137 | private enum CodingKeys: String, CodingKey {
138 | case entries
139 | case requestCache
140 | case entryLifetime
141 | case maximumEntryCount
142 | case reference
143 | }
144 |
145 |
146 | convenience init(from decoder: Decoder) throws {
147 | let container = try decoder.container(keyedBy: CodingKeys.self)
148 | let reference = try container.decode(String.self, forKey: .reference)
149 | let entryLifetime = try container.decode(TimeInterval.self, forKey: .entryLifetime)
150 | let maximumEntryCount = try container.decode(Int.self, forKey: .maximumEntryCount)
151 |
152 | self.init(reference: reference, entryLifetime: entryLifetime, maximumEntryCount: maximumEntryCount)
153 |
154 | keyTracker.requestCache = try container.decode(
155 | Dictionary<[Key], WrappedKeys>.self,
156 | forKey: .requestCache
157 | ).filter { !$0.value.keys.isEmpty }
158 |
159 | let entries = try container.decode([Entry].self, forKey: .entries)
160 | entries.forEach(insert)
161 | }
162 |
163 |
164 | func encode(to encoder: Encoder) throws {
165 | var container = encoder.container(keyedBy: CodingKeys.self)
166 | try container.encode(keyTracker.keys.compactMap(entry), forKey: .entries)
167 | try container.encode(keyTracker.requestCache, forKey: .requestCache)
168 | try container.encode(self.entryLifetime, forKey: .entryLifetime)
169 | try container.encode(self.entryCache.countLimit, forKey: .maximumEntryCount)
170 | try container.encode(self.reference, forKey: .reference)
171 | }
172 | }
173 |
174 |
175 | extension Cache: Equatable {
176 | static func == (lhs: Gravity.Cache, rhs: Gravity.Cache) -> Bool {
177 | guard lhs.keyTracker.keys.count == rhs.keyTracker.keys.count else { return false }
178 | // Use reduce to check if all keys are equal
179 | guard lhs.keyTracker.keys.reduce(true, { $0 && (rhs.entry(forKey: $1) == lhs.entry(forKey: $1)) }) else {
180 | return false
181 | }
182 |
183 | guard lhs.keyTracker.requestCache == rhs.keyTracker.requestCache else { return false }
184 | return true
185 | }
186 | }
187 |
--------------------------------------------------------------------------------
/docs/theme.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | project: {
3 | link: 'https://github.com/pr1mer-tech/Gravity',
4 | },
5 | footer: {
6 | text: `Copyright ${new Date().getFullYear()} © Pr1mer Tech.`
7 | },
8 | docsRepositoryBase: 'https://github.com/pr1mer-tech/Gravity/tree/main/', // will link to the docs repo
9 | logo: <>
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | Gravity
26 | SwiftUI library for remote data fetching
27 | >,
28 | head: <>
29 |
30 |
31 |
32 | >
33 | }
--------------------------------------------------------------------------------
/docs/public/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/docs/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/runtime@^7.12.5":
6 | version "7.21.0"
7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673"
8 | integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==
9 | dependencies:
10 | regenerator-runtime "^0.13.11"
11 |
12 | "@headlessui/react@^1.7.10":
13 | version "1.7.13"
14 | resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.13.tgz#fd150b394954e9f1d86ed2340cffd1217d6e7628"
15 | integrity sha512-9n+EQKRtD9266xIHXdY5MfiXPDfYwl7zBM7KOx2Ae3Gdgxy8QML1FkCMjq6AsOf0l6N9uvI4HcFtuFlenaldKg==
16 | dependencies:
17 | client-only "^0.0.1"
18 |
19 | "@mdx-js/mdx@^2.2.1", "@mdx-js/mdx@^2.3.0":
20 | version "2.3.0"
21 | resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-2.3.0.tgz#d65d8c3c28f3f46bb0e7cb3bf7613b39980671a9"
22 | integrity sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==
23 | dependencies:
24 | "@types/estree-jsx" "^1.0.0"
25 | "@types/mdx" "^2.0.0"
26 | estree-util-build-jsx "^2.0.0"
27 | estree-util-is-identifier-name "^2.0.0"
28 | estree-util-to-js "^1.1.0"
29 | estree-walker "^3.0.0"
30 | hast-util-to-estree "^2.0.0"
31 | markdown-extensions "^1.0.0"
32 | periscopic "^3.0.0"
33 | remark-mdx "^2.0.0"
34 | remark-parse "^10.0.0"
35 | remark-rehype "^10.0.0"
36 | unified "^10.0.0"
37 | unist-util-position-from-estree "^1.0.0"
38 | unist-util-stringify-position "^3.0.0"
39 | unist-util-visit "^4.0.0"
40 | vfile "^5.0.0"
41 |
42 | "@mdx-js/react@^2.2.1", "@mdx-js/react@^2.3.0":
43 | version "2.3.0"
44 | resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-2.3.0.tgz#4208bd6d70f0d0831def28ef28c26149b03180b3"
45 | integrity sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==
46 | dependencies:
47 | "@types/mdx" "^2.0.0"
48 | "@types/react" ">=16"
49 |
50 | "@napi-rs/simple-git-android-arm-eabi@0.1.8":
51 | version "0.1.8"
52 | resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-android-arm-eabi/-/simple-git-android-arm-eabi-0.1.8.tgz#303bea1ec00db24466e3b3ba13de337d87c5371b"
53 | integrity sha512-JJCejHBB1G6O8nxjQLT4quWCcvLpC3oRdJJ9G3MFYSCoYS8i1bWCWeU+K7Br+xT+D6s1t9q8kNJAwJv9Ygpi0g==
54 |
55 | "@napi-rs/simple-git-android-arm64@0.1.8":
56 | version "0.1.8"
57 | resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-android-arm64/-/simple-git-android-arm64-0.1.8.tgz#42c8d04287364fd1619002629fa52183dcf462ee"
58 | integrity sha512-mraHzwWBw3tdRetNOS5KnFSjvdAbNBnjFLA8I4PwTCPJj3Q4txrigcPp2d59cJ0TC51xpnPXnZjYdNwwSI9g6g==
59 |
60 | "@napi-rs/simple-git-darwin-arm64@0.1.8":
61 | version "0.1.8"
62 | resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-darwin-arm64/-/simple-git-darwin-arm64-0.1.8.tgz#e210808e6d646d6efecea84c67ced8eb44a8f821"
63 | integrity sha512-ufy/36eI/j4UskEuvqSH7uXtp3oXeLDmjQCfKJz3u5Vx98KmOMKrqAm2H81AB2WOtCo5mqS6PbBeUXR8BJX8lQ==
64 |
65 | "@napi-rs/simple-git-darwin-x64@0.1.8":
66 | version "0.1.8"
67 | resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-darwin-x64/-/simple-git-darwin-x64-0.1.8.tgz#d717525c33e0dfd8a6d6215da2fcbc0ad40011e1"
68 | integrity sha512-Vb21U+v3tPJNl+8JtIHHT8HGe6WZ8o1Tq3f6p+Jx9Cz71zEbcIiB9FCEMY1knS/jwQEOuhhlI9Qk7d4HY+rprA==
69 |
70 | "@napi-rs/simple-git-linux-arm-gnueabihf@0.1.8":
71 | version "0.1.8"
72 | resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-linux-arm-gnueabihf/-/simple-git-linux-arm-gnueabihf-0.1.8.tgz#03e7b2dd299c10e61bbf29f405ea74f6571cf6a1"
73 | integrity sha512-6BPTJ7CzpSm2t54mRLVaUr3S7ORJfVJoCk2rQ8v8oDg0XAMKvmQQxOsAgqKBo9gYNHJnqrOx3AEuEgvB586BuQ==
74 |
75 | "@napi-rs/simple-git-linux-arm64-gnu@0.1.8":
76 | version "0.1.8"
77 | resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-linux-arm64-gnu/-/simple-git-linux-arm64-gnu-0.1.8.tgz#945123f75c9a36fd0364e789ce06cd29a74a43cc"
78 | integrity sha512-qfESqUCAA/XoQpRXHptSQ8gIFnETCQt1zY9VOkplx6tgYk9PCeaX4B1Xuzrh3eZamSCMJFn+1YB9Ut8NwyGgAA==
79 |
80 | "@napi-rs/simple-git-linux-arm64-musl@0.1.8":
81 | version "0.1.8"
82 | resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-linux-arm64-musl/-/simple-git-linux-arm64-musl-0.1.8.tgz#2c20a0bff7c08f60b033ed7056dcb07bbbff8310"
83 | integrity sha512-G80BQPpaRmQpn8dJGHp4I2/YVhWDUNJwcCrJAtAdbKFDCMyCHJBln2ERL/+IEUlIAT05zK/c1Z5WEprvXEdXow==
84 |
85 | "@napi-rs/simple-git-linux-x64-gnu@0.1.8":
86 | version "0.1.8"
87 | resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-linux-x64-gnu/-/simple-git-linux-x64-gnu-0.1.8.tgz#980e22b7376252a0767298ec801d374d97553da1"
88 | integrity sha512-NI6o1sZYEf6vPtNWJAm9w8BxJt+LlSFW0liSjYe3lc3e4dhMfV240f0ALeqlwdIldRPaDFwZSJX5/QbS7nMzhw==
89 |
90 | "@napi-rs/simple-git-linux-x64-musl@0.1.8":
91 | version "0.1.8"
92 | resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-linux-x64-musl/-/simple-git-linux-x64-musl-0.1.8.tgz#edca3b2833dc5d3fc9151f5b931f7b14478ccca4"
93 | integrity sha512-wljGAEOW41er45VTiU8kXJmO480pQKzsgRCvPlJJSCaEVBbmo6XXbFIXnZy1a2J3Zyy2IOsRB4PVkUZaNuPkZQ==
94 |
95 | "@napi-rs/simple-git-win32-arm64-msvc@0.1.8":
96 | version "0.1.8"
97 | resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-win32-arm64-msvc/-/simple-git-win32-arm64-msvc-0.1.8.tgz#3ac4c7fe816a2cdafabd091ded76161d1ba1fe88"
98 | integrity sha512-QuV4QILyKPfbWHoQKrhXqjiCClx0SxbCTVogkR89BwivekqJMd9UlMxZdoCmwLWutRx4z9KmzQqokvYI5QeepA==
99 |
100 | "@napi-rs/simple-git-win32-x64-msvc@0.1.8":
101 | version "0.1.8"
102 | resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-win32-x64-msvc/-/simple-git-win32-x64-msvc-0.1.8.tgz#3b825bc2cb1c7ff535a3ca03768142d68bbf5c19"
103 | integrity sha512-UzNS4JtjhZhZ5hRLq7BIUq+4JOwt1ThIKv11CsF1ag2l99f0123XvfEpjczKTaa94nHtjXYc2Mv9TjccBqYOew==
104 |
105 | "@napi-rs/simple-git@^0.1.8":
106 | version "0.1.8"
107 | resolved "https://registry.yarnpkg.com/@napi-rs/simple-git/-/simple-git-0.1.8.tgz#391cb58436d50bd32d924611d45bdc41f5e7607a"
108 | integrity sha512-BvOMdkkofTz6lEE35itJ/laUokPhr/5ToMGlOH25YnhLD2yN1KpRAT4blW9tT8281/1aZjW3xyi73bs//IrDKA==
109 | optionalDependencies:
110 | "@napi-rs/simple-git-android-arm-eabi" "0.1.8"
111 | "@napi-rs/simple-git-android-arm64" "0.1.8"
112 | "@napi-rs/simple-git-darwin-arm64" "0.1.8"
113 | "@napi-rs/simple-git-darwin-x64" "0.1.8"
114 | "@napi-rs/simple-git-linux-arm-gnueabihf" "0.1.8"
115 | "@napi-rs/simple-git-linux-arm64-gnu" "0.1.8"
116 | "@napi-rs/simple-git-linux-arm64-musl" "0.1.8"
117 | "@napi-rs/simple-git-linux-x64-gnu" "0.1.8"
118 | "@napi-rs/simple-git-linux-x64-musl" "0.1.8"
119 | "@napi-rs/simple-git-win32-arm64-msvc" "0.1.8"
120 | "@napi-rs/simple-git-win32-x64-msvc" "0.1.8"
121 |
122 | "@next/env@13.2.4":
123 | version "13.2.4"
124 | resolved "https://registry.yarnpkg.com/@next/env/-/env-13.2.4.tgz#8b763700262b2445140a44a8c8d088cef676dbae"
125 | integrity sha512-+Mq3TtpkeeKFZanPturjcXt+KHfKYnLlX6jMLyCrmpq6OOs4i1GqBOAauSkii9QeKCMTYzGppar21JU57b/GEA==
126 |
127 | "@next/swc-android-arm-eabi@13.2.4":
128 | version "13.2.4"
129 | resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.4.tgz#758d0403771e549f9cee71cbabc0cb16a6c947c0"
130 | integrity sha512-DWlalTSkLjDU11MY11jg17O1gGQzpRccM9Oes2yTqj2DpHndajrXHGxj9HGtJ+idq2k7ImUdJVWS2h2l/EDJOw==
131 |
132 | "@next/swc-android-arm64@13.2.4":
133 | version "13.2.4"
134 | resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.2.4.tgz#834d586523045110d5602e0c8aae9028835ac427"
135 | integrity sha512-sRavmUImUCf332Gy+PjIfLkMhiRX1Ez4SI+3vFDRs1N5eXp+uNzjFUK/oLMMOzk6KFSkbiK/3Wt8+dHQR/flNg==
136 |
137 | "@next/swc-darwin-arm64@13.2.4":
138 | version "13.2.4"
139 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.4.tgz#5006fca179a36ef3a24d293abadec7438dbb48c6"
140 | integrity sha512-S6vBl+OrInP47TM3LlYx65betocKUUlTZDDKzTiRDbsRESeyIkBtZ6Qi5uT2zQs4imqllJznVjFd1bXLx3Aa6A==
141 |
142 | "@next/swc-darwin-x64@13.2.4":
143 | version "13.2.4"
144 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.4.tgz#6549c7c04322766acc3264ccdb3e1b43fcaf7946"
145 | integrity sha512-a6LBuoYGcFOPGd4o8TPo7wmv5FnMr+Prz+vYHopEDuhDoMSHOnC+v+Ab4D7F0NMZkvQjEJQdJS3rqgFhlZmKlw==
146 |
147 | "@next/swc-freebsd-x64@13.2.4":
148 | version "13.2.4"
149 | resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.4.tgz#0bbe28979e3e868debc2cc06e45e186ce195b7f4"
150 | integrity sha512-kkbzKVZGPaXRBPisoAQkh3xh22r+TD+5HwoC5bOkALraJ0dsOQgSMAvzMXKsN3tMzJUPS0tjtRf1cTzrQ0I5vQ==
151 |
152 | "@next/swc-linux-arm-gnueabihf@13.2.4":
153 | version "13.2.4"
154 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.4.tgz#1d28d2203f5a7427d6e7119d7bcb5fc40959fb3e"
155 | integrity sha512-7qA1++UY0fjprqtjBZaOA6cas/7GekpjVsZn/0uHvquuITFCdKGFCsKNBx3S0Rpxmx6WYo0GcmhNRM9ru08BGg==
156 |
157 | "@next/swc-linux-arm64-gnu@13.2.4":
158 | version "13.2.4"
159 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.4.tgz#eb26448190948cdf4c44b8f34110a3ecea32f1d0"
160 | integrity sha512-xzYZdAeq883MwXgcwc72hqo/F/dwUxCukpDOkx/j1HTq/J0wJthMGjinN9wH5bPR98Mfeh1MZJ91WWPnZOedOg==
161 |
162 | "@next/swc-linux-arm64-musl@13.2.4":
163 | version "13.2.4"
164 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.4.tgz#c4227c0acd94a420bb14924820710e6284d234d3"
165 | integrity sha512-8rXr3WfmqSiYkb71qzuDP6I6R2T2tpkmf83elDN8z783N9nvTJf2E7eLx86wu2OJCi4T05nuxCsh4IOU3LQ5xw==
166 |
167 | "@next/swc-linux-x64-gnu@13.2.4":
168 | version "13.2.4"
169 | resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.4.tgz#6bcb540944ee9b0209b33bfc23b240c2044dfc3e"
170 | integrity sha512-Ngxh51zGSlYJ4EfpKG4LI6WfquulNdtmHg1yuOYlaAr33KyPJp4HeN/tivBnAHcZkoNy0hh/SbwDyCnz5PFJQQ==
171 |
172 | "@next/swc-linux-x64-musl@13.2.4":
173 | version "13.2.4"
174 | resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.4.tgz#ce21e43251eaf09a09df39372b2c3e38028c30ff"
175 | integrity sha512-gOvwIYoSxd+j14LOcvJr+ekd9fwYT1RyMAHOp7znA10+l40wkFiMONPLWiZuHxfRk+Dy7YdNdDh3ImumvL6VwA==
176 |
177 | "@next/swc-win32-arm64-msvc@13.2.4":
178 | version "13.2.4"
179 | resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.4.tgz#68220063d8e5e082f5465498675640dedb670ff1"
180 | integrity sha512-q3NJzcfClgBm4HvdcnoEncmztxrA5GXqKeiZ/hADvC56pwNALt3ngDC6t6qr1YW9V/EPDxCYeaX4zYxHciW4Dw==
181 |
182 | "@next/swc-win32-ia32-msvc@13.2.4":
183 | version "13.2.4"
184 | resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.4.tgz#7c120ab54a081be9566df310bed834f168252990"
185 | integrity sha512-/eZ5ncmHUYtD2fc6EUmAIZlAJnVT2YmxDsKs1Ourx0ttTtvtma/WKlMV5NoUsyOez0f9ExLyOpeCoz5aj+MPXw==
186 |
187 | "@next/swc-win32-x64-msvc@13.2.4":
188 | version "13.2.4"
189 | resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.4.tgz#5abda92fe12b9829bf7951c4a221282c56041144"
190 | integrity sha512-0MffFmyv7tBLlji01qc0IaPP/LVExzvj7/R5x1Jph1bTAIj4Vu81yFQWHHQAP6r4ff9Ukj1mBK6MDNVXm7Tcvw==
191 |
192 | "@popperjs/core@^2.11.6":
193 | version "2.11.7"
194 | resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.7.tgz#ccab5c8f7dc557a52ca3288c10075c9ccd37fff7"
195 | integrity sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==
196 |
197 | "@swc/helpers@0.4.14":
198 | version "0.4.14"
199 | resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74"
200 | integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==
201 | dependencies:
202 | tslib "^2.4.0"
203 |
204 | "@types/acorn@^4.0.0":
205 | version "4.0.6"
206 | resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.6.tgz#d61ca5480300ac41a7d973dd5b84d0a591154a22"
207 | integrity sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==
208 | dependencies:
209 | "@types/estree" "*"
210 |
211 | "@types/debug@^4.0.0":
212 | version "4.1.7"
213 | resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82"
214 | integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==
215 | dependencies:
216 | "@types/ms" "*"
217 |
218 | "@types/estree-jsx@^1.0.0":
219 | version "1.0.0"
220 | resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.0.tgz#7bfc979ab9f692b492017df42520f7f765e98df1"
221 | integrity sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==
222 | dependencies:
223 | "@types/estree" "*"
224 |
225 | "@types/estree@*", "@types/estree@^1.0.0":
226 | version "1.0.0"
227 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2"
228 | integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==
229 |
230 | "@types/hast@^2.0.0":
231 | version "2.3.4"
232 | resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc"
233 | integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==
234 | dependencies:
235 | "@types/unist" "*"
236 |
237 | "@types/js-yaml@^4.0.0":
238 | version "4.0.5"
239 | resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.5.tgz#738dd390a6ecc5442f35e7f03fa1431353f7e138"
240 | integrity sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==
241 |
242 | "@types/katex@^0.11.0":
243 | version "0.11.1"
244 | resolved "https://registry.yarnpkg.com/@types/katex/-/katex-0.11.1.tgz#34de04477dcf79e2ef6c8d23b41a3d81f9ebeaf5"
245 | integrity sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg==
246 |
247 | "@types/mdast@^3.0.0":
248 | version "3.0.11"
249 | resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.11.tgz#dc130f7e7d9306124286f6d6cee40cf4d14a3dc0"
250 | integrity sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==
251 | dependencies:
252 | "@types/unist" "*"
253 |
254 | "@types/mdx@^2.0.0":
255 | version "2.0.3"
256 | resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.3.tgz#43fd32414f17fcbeced3578109a6edd877a2d96e"
257 | integrity sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==
258 |
259 | "@types/ms@*":
260 | version "0.7.31"
261 | resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
262 | integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
263 |
264 | "@types/prop-types@*":
265 | version "15.7.5"
266 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
267 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
268 |
269 | "@types/react@>=16":
270 | version "18.0.29"
271 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.29.tgz#4cead505172c0020c5b51940199e31fc6ff2f63a"
272 | integrity sha512-wXHktgUABxplw1+UnljseDq4+uztQyp2tlWZRIxHlpchsCFqiYkvaDS8JR7eKOQm8wziTH/el5qL7D6gYNkYcw==
273 | dependencies:
274 | "@types/prop-types" "*"
275 | "@types/scheduler" "*"
276 | csstype "^3.0.2"
277 |
278 | "@types/scheduler@*":
279 | version "0.16.3"
280 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5"
281 | integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==
282 |
283 | "@types/unist@*", "@types/unist@^2.0.0":
284 | version "2.0.6"
285 | resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d"
286 | integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==
287 |
288 | acorn-jsx@^5.0.0:
289 | version "5.3.2"
290 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
291 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
292 |
293 | acorn@^8.0.0:
294 | version "8.8.2"
295 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
296 | integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
297 |
298 | ansi-sequence-parser@^1.1.0:
299 | version "1.1.0"
300 | resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz#4d790f31236ac20366b23b3916b789e1bde39aed"
301 | integrity sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==
302 |
303 | ansi-styles@^3.1.0:
304 | version "3.2.1"
305 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
306 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
307 | dependencies:
308 | color-convert "^1.9.0"
309 |
310 | anymatch@~3.1.2:
311 | version "3.1.3"
312 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
313 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
314 | dependencies:
315 | normalize-path "^3.0.0"
316 | picomatch "^2.0.4"
317 |
318 | arch@^2.1.0:
319 | version "2.2.0"
320 | resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11"
321 | integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==
322 |
323 | arg@1.0.0:
324 | version "1.0.0"
325 | resolved "https://registry.yarnpkg.com/arg/-/arg-1.0.0.tgz#444d885a4e25b121640b55155ef7cd03975d6050"
326 | integrity sha512-Wk7TEzl1KqvTGs/uyhmHO/3XLd3t1UeU4IstvPXVzGPM522cTjqjNZ99esCkcL52sjqjo8e8CTBcWhkxvGzoAw==
327 |
328 | argparse@^1.0.7:
329 | version "1.0.10"
330 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
331 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
332 | dependencies:
333 | sprintf-js "~1.0.2"
334 |
335 | argparse@^2.0.1:
336 | version "2.0.1"
337 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
338 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
339 |
340 | astring@^1.8.0:
341 | version "1.8.4"
342 | resolved "https://registry.yarnpkg.com/astring/-/astring-1.8.4.tgz#6d4c5d8de7be2ead9e4a3cc0e2efb8d759378904"
343 | integrity sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==
344 |
345 | bail@^2.0.0:
346 | version "2.0.2"
347 | resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d"
348 | integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==
349 |
350 | binary-extensions@^2.0.0:
351 | version "2.2.0"
352 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
353 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
354 |
355 | braces@~3.0.2:
356 | version "3.0.2"
357 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
358 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
359 | dependencies:
360 | fill-range "^7.0.1"
361 |
362 | caniuse-lite@^1.0.30001406:
363 | version "1.0.30001470"
364 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001470.tgz#09c8e87c711f75ff5d39804db2613dd593feeb10"
365 | integrity sha512-065uNwY6QtHCBOExzbV6m236DDhYCCtPmQUCoQtwkVqzud8v5QPidoMr6CoMkC2nfp6nksjttqWQRRh75LqUmA==
366 |
367 | ccount@^2.0.0:
368 | version "2.0.1"
369 | resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5"
370 | integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==
371 |
372 | chalk@2.3.0:
373 | version "2.3.0"
374 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
375 | integrity sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==
376 | dependencies:
377 | ansi-styles "^3.1.0"
378 | escape-string-regexp "^1.0.5"
379 | supports-color "^4.0.0"
380 |
381 | character-entities-html4@^2.0.0:
382 | version "2.1.0"
383 | resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b"
384 | integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==
385 |
386 | character-entities-legacy@^3.0.0:
387 | version "3.0.0"
388 | resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b"
389 | integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==
390 |
391 | character-entities@^2.0.0:
392 | version "2.0.2"
393 | resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22"
394 | integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==
395 |
396 | character-reference-invalid@^2.0.0:
397 | version "2.0.1"
398 | resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9"
399 | integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==
400 |
401 | "chokidar@>=3.0.0 <4.0.0":
402 | version "3.5.3"
403 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
404 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
405 | dependencies:
406 | anymatch "~3.1.2"
407 | braces "~3.0.2"
408 | glob-parent "~5.1.2"
409 | is-binary-path "~2.1.0"
410 | is-glob "~4.0.1"
411 | normalize-path "~3.0.0"
412 | readdirp "~3.6.0"
413 | optionalDependencies:
414 | fsevents "~2.3.2"
415 |
416 | client-only@0.0.1, client-only@^0.0.1:
417 | version "0.0.1"
418 | resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1"
419 | integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
420 |
421 | clipboardy@1.2.2:
422 | version "1.2.2"
423 | resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.2.tgz#2ce320b9ed9be1514f79878b53ff9765420903e2"
424 | integrity sha512-16KrBOV7bHmHdxcQiCvfUFYVFyEah4FI8vYT1Fr7CGSA4G+xBWMEfUEQJS1hxeHGtI9ju1Bzs9uXSbj5HZKArw==
425 | dependencies:
426 | arch "^2.1.0"
427 | execa "^0.8.0"
428 |
429 | clsx@^1.2.1:
430 | version "1.2.1"
431 | resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12"
432 | integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
433 |
434 | color-convert@^1.9.0:
435 | version "1.9.3"
436 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
437 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
438 | dependencies:
439 | color-name "1.1.3"
440 |
441 | color-name@1.1.3:
442 | version "1.1.3"
443 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
444 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
445 |
446 | comma-separated-tokens@^2.0.0:
447 | version "2.0.3"
448 | resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee"
449 | integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==
450 |
451 | commander@^8.0.0:
452 | version "8.3.0"
453 | resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
454 | integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
455 |
456 | compute-scroll-into-view@^3.0.0:
457 | version "3.0.0"
458 | resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-3.0.0.tgz#95d2f2f4653e7edda74dd1e38edaaa897918e0f0"
459 | integrity sha512-Yk1An4qzo5++Cu6peT9PsmRKIU8tALpmdoE09n//AfGQFcPfx21/tMGMsmKYmLJWaBJrGOJ5Jz5hoU+7cZZUWQ==
460 |
461 | cross-spawn@^5.0.1:
462 | version "5.1.0"
463 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
464 | integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==
465 | dependencies:
466 | lru-cache "^4.0.1"
467 | shebang-command "^1.2.0"
468 | which "^1.2.9"
469 |
470 | csstype@^3.0.2:
471 | version "3.1.1"
472 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
473 | integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==
474 |
475 | debug@^4.0.0:
476 | version "4.3.4"
477 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
478 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
479 | dependencies:
480 | ms "2.1.2"
481 |
482 | decode-named-character-reference@^1.0.0:
483 | version "1.0.2"
484 | resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e"
485 | integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==
486 | dependencies:
487 | character-entities "^2.0.0"
488 |
489 | dequal@^2.0.0:
490 | version "2.0.3"
491 | resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
492 | integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
493 |
494 | diff@^5.0.0:
495 | version "5.1.0"
496 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40"
497 | integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==
498 |
499 | escape-string-regexp@^1.0.5:
500 | version "1.0.5"
501 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
502 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
503 |
504 | escape-string-regexp@^5.0.0:
505 | version "5.0.0"
506 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8"
507 | integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==
508 |
509 | esprima@^4.0.0:
510 | version "4.0.1"
511 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
512 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
513 |
514 | estree-util-attach-comments@^2.0.0:
515 | version "2.1.1"
516 | resolved "https://registry.yarnpkg.com/estree-util-attach-comments/-/estree-util-attach-comments-2.1.1.tgz#ee44f4ff6890ee7dfb3237ac7810154c94c63f84"
517 | integrity sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==
518 | dependencies:
519 | "@types/estree" "^1.0.0"
520 |
521 | estree-util-build-jsx@^2.0.0:
522 | version "2.2.2"
523 | resolved "https://registry.yarnpkg.com/estree-util-build-jsx/-/estree-util-build-jsx-2.2.2.tgz#32f8a239fb40dc3f3dca75bb5dcf77a831e4e47b"
524 | integrity sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==
525 | dependencies:
526 | "@types/estree-jsx" "^1.0.0"
527 | estree-util-is-identifier-name "^2.0.0"
528 | estree-walker "^3.0.0"
529 |
530 | estree-util-is-identifier-name@^2.0.0:
531 | version "2.1.0"
532 | resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz#fb70a432dcb19045e77b05c8e732f1364b4b49b2"
533 | integrity sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==
534 |
535 | estree-util-to-js@^1.1.0:
536 | version "1.2.0"
537 | resolved "https://registry.yarnpkg.com/estree-util-to-js/-/estree-util-to-js-1.2.0.tgz#0f80d42443e3b13bd32f7012fffa6f93603f4a36"
538 | integrity sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==
539 | dependencies:
540 | "@types/estree-jsx" "^1.0.0"
541 | astring "^1.8.0"
542 | source-map "^0.7.0"
543 |
544 | estree-util-value-to-estree@^1.3.0:
545 | version "1.3.0"
546 | resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-1.3.0.tgz#1d3125594b4d6680f666644491e7ac1745a3df49"
547 | integrity sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==
548 | dependencies:
549 | is-plain-obj "^3.0.0"
550 |
551 | estree-util-visit@^1.0.0:
552 | version "1.2.1"
553 | resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-1.2.1.tgz#8bc2bc09f25b00827294703835aabee1cc9ec69d"
554 | integrity sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==
555 | dependencies:
556 | "@types/estree-jsx" "^1.0.0"
557 | "@types/unist" "^2.0.0"
558 |
559 | estree-walker@^3.0.0:
560 | version "3.0.3"
561 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d"
562 | integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==
563 | dependencies:
564 | "@types/estree" "^1.0.0"
565 |
566 | execa@^0.8.0:
567 | version "0.8.0"
568 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da"
569 | integrity sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==
570 | dependencies:
571 | cross-spawn "^5.0.1"
572 | get-stream "^3.0.0"
573 | is-stream "^1.1.0"
574 | npm-run-path "^2.0.0"
575 | p-finally "^1.0.0"
576 | signal-exit "^3.0.0"
577 | strip-eof "^1.0.0"
578 |
579 | extend-shallow@^2.0.1:
580 | version "2.0.1"
581 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
582 | integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==
583 | dependencies:
584 | is-extendable "^0.1.0"
585 |
586 | extend@^3.0.0:
587 | version "3.0.2"
588 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
589 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
590 |
591 | fill-range@^7.0.1:
592 | version "7.0.1"
593 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
594 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
595 | dependencies:
596 | to-regex-range "^5.0.1"
597 |
598 | flexsearch@^0.7.21:
599 | version "0.7.31"
600 | resolved "https://registry.yarnpkg.com/flexsearch/-/flexsearch-0.7.31.tgz#065d4110b95083110b9b6c762a71a77cc52e4702"
601 | integrity sha512-XGozTsMPYkm+6b5QL3Z9wQcJjNYxp0CYn3U1gO7dwD6PAqU1SVWZxI9CCg3z+ml3YfqdPnrBehaBrnH2AGKbNA==
602 |
603 | focus-visible@^5.2.0:
604 | version "5.2.0"
605 | resolved "https://registry.yarnpkg.com/focus-visible/-/focus-visible-5.2.0.tgz#3a9e41fccf587bd25dcc2ef045508284f0a4d6b3"
606 | integrity sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ==
607 |
608 | fsevents@~2.3.2:
609 | version "2.3.2"
610 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
611 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
612 |
613 | get-stream@^3.0.0:
614 | version "3.0.0"
615 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
616 | integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==
617 |
618 | git-up@^7.0.0:
619 | version "7.0.0"
620 | resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467"
621 | integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==
622 | dependencies:
623 | is-ssh "^1.4.0"
624 | parse-url "^8.1.0"
625 |
626 | git-url-parse@^13.1.0:
627 | version "13.1.0"
628 | resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4"
629 | integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==
630 | dependencies:
631 | git-up "^7.0.0"
632 |
633 | github-slugger@^2.0.0:
634 | version "2.0.0"
635 | resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-2.0.0.tgz#52cf2f9279a21eb6c59dd385b410f0c0adda8f1a"
636 | integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==
637 |
638 | glob-parent@~5.1.2:
639 | version "5.1.2"
640 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
641 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
642 | dependencies:
643 | is-glob "^4.0.1"
644 |
645 | graceful-fs@^4.2.10:
646 | version "4.2.11"
647 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
648 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
649 |
650 | gray-matter@^4.0.3:
651 | version "4.0.3"
652 | resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798"
653 | integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==
654 | dependencies:
655 | js-yaml "^3.13.1"
656 | kind-of "^6.0.2"
657 | section-matter "^1.0.0"
658 | strip-bom-string "^1.0.0"
659 |
660 | has-flag@^2.0.0:
661 | version "2.0.0"
662 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
663 | integrity sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==
664 |
665 | hash-obj@^4.0.0:
666 | version "4.0.0"
667 | resolved "https://registry.yarnpkg.com/hash-obj/-/hash-obj-4.0.0.tgz#3fafeb0b5f17994441dbe04efbdee82e26b74c8c"
668 | integrity sha512-FwO1BUVWkyHasWDW4S8o0ssQXjvyghLV2rfVhnN36b2bbcj45eGiuzdn9XOvOpjV3TKQD7Gm2BWNXdE9V4KKYg==
669 | dependencies:
670 | is-obj "^3.0.0"
671 | sort-keys "^5.0.0"
672 | type-fest "^1.0.2"
673 |
674 | hast-util-from-parse5@^7.0.0:
675 | version "7.1.2"
676 | resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz#aecfef73e3ceafdfa4550716443e4eb7b02e22b0"
677 | integrity sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==
678 | dependencies:
679 | "@types/hast" "^2.0.0"
680 | "@types/unist" "^2.0.0"
681 | hastscript "^7.0.0"
682 | property-information "^6.0.0"
683 | vfile "^5.0.0"
684 | vfile-location "^4.0.0"
685 | web-namespaces "^2.0.0"
686 |
687 | hast-util-is-element@^2.0.0:
688 | version "2.1.3"
689 | resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-2.1.3.tgz#cd3279cfefb70da6d45496068f020742256fc471"
690 | integrity sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==
691 | dependencies:
692 | "@types/hast" "^2.0.0"
693 | "@types/unist" "^2.0.0"
694 |
695 | hast-util-parse-selector@^3.0.0:
696 | version "3.1.1"
697 | resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz#25ab00ae9e75cbc62cf7a901f68a247eade659e2"
698 | integrity sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==
699 | dependencies:
700 | "@types/hast" "^2.0.0"
701 |
702 | hast-util-to-estree@^2.0.0:
703 | version "2.3.2"
704 | resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-2.3.2.tgz#11ab0cd2e70ecf0305151af56e636b1cdfbba0bf"
705 | integrity sha512-YYDwATNdnvZi3Qi84iatPIl1lWpXba1MeNrNbDfJfVzEBZL8uUmtR7mt7bxKBC8kuAuvb0bkojXYZzsNHyHCLg==
706 | dependencies:
707 | "@types/estree" "^1.0.0"
708 | "@types/estree-jsx" "^1.0.0"
709 | "@types/hast" "^2.0.0"
710 | "@types/unist" "^2.0.0"
711 | comma-separated-tokens "^2.0.0"
712 | estree-util-attach-comments "^2.0.0"
713 | estree-util-is-identifier-name "^2.0.0"
714 | hast-util-whitespace "^2.0.0"
715 | mdast-util-mdx-expression "^1.0.0"
716 | mdast-util-mdxjs-esm "^1.0.0"
717 | property-information "^6.0.0"
718 | space-separated-tokens "^2.0.0"
719 | style-to-object "^0.4.1"
720 | unist-util-position "^4.0.0"
721 | zwitch "^2.0.0"
722 |
723 | hast-util-to-text@^3.1.0:
724 | version "3.1.2"
725 | resolved "https://registry.yarnpkg.com/hast-util-to-text/-/hast-util-to-text-3.1.2.tgz#ecf30c47141f41e91a5d32d0b1e1859fd2ac04f2"
726 | integrity sha512-tcllLfp23dJJ+ju5wCCZHVpzsQQ43+moJbqVX3jNWPB7z/KFC4FyZD6R7y94cHL6MQ33YtMZL8Z0aIXXI4XFTw==
727 | dependencies:
728 | "@types/hast" "^2.0.0"
729 | "@types/unist" "^2.0.0"
730 | hast-util-is-element "^2.0.0"
731 | unist-util-find-after "^4.0.0"
732 |
733 | hast-util-whitespace@^2.0.0:
734 | version "2.0.1"
735 | resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557"
736 | integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==
737 |
738 | hastscript@^7.0.0:
739 | version "7.2.0"
740 | resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-7.2.0.tgz#0eafb7afb153d047077fa2a833dc9b7ec604d10b"
741 | integrity sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==
742 | dependencies:
743 | "@types/hast" "^2.0.0"
744 | comma-separated-tokens "^2.0.0"
745 | hast-util-parse-selector "^3.0.0"
746 | property-information "^6.0.0"
747 | space-separated-tokens "^2.0.0"
748 |
749 | immutable@^4.0.0:
750 | version "4.3.0"
751 | resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be"
752 | integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==
753 |
754 | inline-style-parser@0.1.1:
755 | version "0.1.1"
756 | resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
757 | integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
758 |
759 | intersection-observer@^0.12.2:
760 | version "0.12.2"
761 | resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.12.2.tgz#4a45349cc0cd91916682b1f44c28d7ec737dc375"
762 | integrity sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==
763 |
764 | is-alphabetical@^2.0.0:
765 | version "2.0.1"
766 | resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b"
767 | integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==
768 |
769 | is-alphanumerical@^2.0.0:
770 | version "2.0.1"
771 | resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875"
772 | integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==
773 | dependencies:
774 | is-alphabetical "^2.0.0"
775 | is-decimal "^2.0.0"
776 |
777 | is-binary-path@~2.1.0:
778 | version "2.1.0"
779 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
780 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
781 | dependencies:
782 | binary-extensions "^2.0.0"
783 |
784 | is-buffer@^2.0.0:
785 | version "2.0.5"
786 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
787 | integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
788 |
789 | is-decimal@^2.0.0:
790 | version "2.0.1"
791 | resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7"
792 | integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==
793 |
794 | is-extendable@^0.1.0:
795 | version "0.1.1"
796 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
797 | integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
798 |
799 | is-extglob@^2.1.1:
800 | version "2.1.1"
801 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
802 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
803 |
804 | is-glob@^4.0.1, is-glob@~4.0.1:
805 | version "4.0.3"
806 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
807 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
808 | dependencies:
809 | is-extglob "^2.1.1"
810 |
811 | is-hexadecimal@^2.0.0:
812 | version "2.0.1"
813 | resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027"
814 | integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==
815 |
816 | is-number@^7.0.0:
817 | version "7.0.0"
818 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
819 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
820 |
821 | is-obj@^3.0.0:
822 | version "3.0.0"
823 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-3.0.0.tgz#b0889f1f9f8cb87e87df53a8d1230a2250f8b9be"
824 | integrity sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==
825 |
826 | is-plain-obj@^3.0.0:
827 | version "3.0.0"
828 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7"
829 | integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==
830 |
831 | is-plain-obj@^4.0.0:
832 | version "4.1.0"
833 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0"
834 | integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==
835 |
836 | is-reference@^3.0.0:
837 | version "3.0.1"
838 | resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.1.tgz#d400f4260f7e55733955e60d361d827eb4d3b831"
839 | integrity sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==
840 | dependencies:
841 | "@types/estree" "*"
842 |
843 | is-ssh@^1.4.0:
844 | version "1.4.0"
845 | resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2"
846 | integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==
847 | dependencies:
848 | protocols "^2.0.1"
849 |
850 | is-stream@^1.1.0:
851 | version "1.1.0"
852 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
853 | integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==
854 |
855 | isexe@^2.0.0:
856 | version "2.0.0"
857 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
858 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
859 |
860 | "js-tokens@^3.0.0 || ^4.0.0":
861 | version "4.0.0"
862 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
863 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
864 |
865 | js-yaml@^3.13.1:
866 | version "3.14.1"
867 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
868 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
869 | dependencies:
870 | argparse "^1.0.7"
871 | esprima "^4.0.0"
872 |
873 | js-yaml@^4.0.0:
874 | version "4.1.0"
875 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
876 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
877 | dependencies:
878 | argparse "^2.0.1"
879 |
880 | jsonc-parser@^3.2.0:
881 | version "3.2.0"
882 | resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76"
883 | integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
884 |
885 | katex@^0.13.0:
886 | version "0.13.24"
887 | resolved "https://registry.yarnpkg.com/katex/-/katex-0.13.24.tgz#fe55455eb455698cb24b911a353d16a3c855d905"
888 | integrity sha512-jZxYuKCma3VS5UuxOx/rFV1QyGSl3Uy/i0kTJF3HgQ5xMinCQVF8Zd4bMY/9aI9b9A2pjIBOsjSSm68ykTAr8w==
889 | dependencies:
890 | commander "^8.0.0"
891 |
892 | katex@^0.15.0:
893 | version "0.15.6"
894 | resolved "https://registry.yarnpkg.com/katex/-/katex-0.15.6.tgz#c4e2f6ced2ac4de1ef6f737fe7c67d3026baa0e5"
895 | integrity sha512-UpzJy4yrnqnhXvRPhjEuLA4lcPn6eRngixW7Q3TJErjg3Aw2PuLFBzTkdUb89UtumxjhHTqL3a5GDGETMSwgJA==
896 | dependencies:
897 | commander "^8.0.0"
898 |
899 | katex@^0.16.4:
900 | version "0.16.4"
901 | resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.4.tgz#87021bc3bbd80586ef715aeb476794cba6a49ad4"
902 | integrity sha512-WudRKUj8yyBeVDI4aYMNxhx5Vhh2PjpzQw1GRu/LVGqL4m1AxwD1GcUp0IMbdJaf5zsjtj8ghP0DOQRYhroNkw==
903 | dependencies:
904 | commander "^8.0.0"
905 |
906 | kind-of@^6.0.0, kind-of@^6.0.2:
907 | version "6.0.3"
908 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
909 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
910 |
911 | kleur@^4.0.3:
912 | version "4.1.5"
913 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780"
914 | integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==
915 |
916 | lodash.get@^4.4.2:
917 | version "4.4.2"
918 | resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
919 | integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==
920 |
921 | longest-streak@^3.0.0:
922 | version "3.1.0"
923 | resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4"
924 | integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==
925 |
926 | loose-envify@^1.1.0:
927 | version "1.4.0"
928 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
929 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
930 | dependencies:
931 | js-tokens "^3.0.0 || ^4.0.0"
932 |
933 | lru-cache@^4.0.1:
934 | version "4.1.5"
935 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
936 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
937 | dependencies:
938 | pseudomap "^1.0.2"
939 | yallist "^2.1.2"
940 |
941 | markdown-extensions@^1.0.0:
942 | version "1.1.1"
943 | resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-1.1.1.tgz#fea03b539faeaee9b4ef02a3769b455b189f7fc3"
944 | integrity sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==
945 |
946 | markdown-table@^3.0.0:
947 | version "3.0.3"
948 | resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.3.tgz#e6331d30e493127e031dd385488b5bd326e4a6bd"
949 | integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==
950 |
951 | match-sorter@^6.3.1:
952 | version "6.3.1"
953 | resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.1.tgz#98cc37fda756093424ddf3cbc62bfe9c75b92bda"
954 | integrity sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==
955 | dependencies:
956 | "@babel/runtime" "^7.12.5"
957 | remove-accents "0.4.2"
958 |
959 | mdast-util-definitions@^5.0.0:
960 | version "5.1.2"
961 | resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz#9910abb60ac5d7115d6819b57ae0bcef07a3f7a7"
962 | integrity sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==
963 | dependencies:
964 | "@types/mdast" "^3.0.0"
965 | "@types/unist" "^2.0.0"
966 | unist-util-visit "^4.0.0"
967 |
968 | mdast-util-find-and-replace@^2.0.0:
969 | version "2.2.2"
970 | resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz#cc2b774f7f3630da4bd592f61966fecade8b99b1"
971 | integrity sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==
972 | dependencies:
973 | "@types/mdast" "^3.0.0"
974 | escape-string-regexp "^5.0.0"
975 | unist-util-is "^5.0.0"
976 | unist-util-visit-parents "^5.0.0"
977 |
978 | mdast-util-from-markdown@^1.0.0, mdast-util-from-markdown@^1.1.0:
979 | version "1.3.0"
980 | resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz#0214124154f26154a2b3f9d401155509be45e894"
981 | integrity sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==
982 | dependencies:
983 | "@types/mdast" "^3.0.0"
984 | "@types/unist" "^2.0.0"
985 | decode-named-character-reference "^1.0.0"
986 | mdast-util-to-string "^3.1.0"
987 | micromark "^3.0.0"
988 | micromark-util-decode-numeric-character-reference "^1.0.0"
989 | micromark-util-decode-string "^1.0.0"
990 | micromark-util-normalize-identifier "^1.0.0"
991 | micromark-util-symbol "^1.0.0"
992 | micromark-util-types "^1.0.0"
993 | unist-util-stringify-position "^3.0.0"
994 | uvu "^0.5.0"
995 |
996 | mdast-util-gfm-autolink-literal@^1.0.0:
997 | version "1.0.3"
998 | resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz#67a13abe813d7eba350453a5333ae1bc0ec05c06"
999 | integrity sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==
1000 | dependencies:
1001 | "@types/mdast" "^3.0.0"
1002 | ccount "^2.0.0"
1003 | mdast-util-find-and-replace "^2.0.0"
1004 | micromark-util-character "^1.0.0"
1005 |
1006 | mdast-util-gfm-footnote@^1.0.0:
1007 | version "1.0.2"
1008 | resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz#ce5e49b639c44de68d5bf5399877a14d5020424e"
1009 | integrity sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==
1010 | dependencies:
1011 | "@types/mdast" "^3.0.0"
1012 | mdast-util-to-markdown "^1.3.0"
1013 | micromark-util-normalize-identifier "^1.0.0"
1014 |
1015 | mdast-util-gfm-strikethrough@^1.0.0:
1016 | version "1.0.3"
1017 | resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz#5470eb105b483f7746b8805b9b989342085795b7"
1018 | integrity sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==
1019 | dependencies:
1020 | "@types/mdast" "^3.0.0"
1021 | mdast-util-to-markdown "^1.3.0"
1022 |
1023 | mdast-util-gfm-table@^1.0.0:
1024 | version "1.0.7"
1025 | resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz#3552153a146379f0f9c4c1101b071d70bbed1a46"
1026 | integrity sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==
1027 | dependencies:
1028 | "@types/mdast" "^3.0.0"
1029 | markdown-table "^3.0.0"
1030 | mdast-util-from-markdown "^1.0.0"
1031 | mdast-util-to-markdown "^1.3.0"
1032 |
1033 | mdast-util-gfm-task-list-item@^1.0.0:
1034 | version "1.0.2"
1035 | resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz#b280fcf3b7be6fd0cc012bbe67a59831eb34097b"
1036 | integrity sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==
1037 | dependencies:
1038 | "@types/mdast" "^3.0.0"
1039 | mdast-util-to-markdown "^1.3.0"
1040 |
1041 | mdast-util-gfm@^2.0.0:
1042 | version "2.0.2"
1043 | resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz#e92f4d8717d74bdba6de57ed21cc8b9552e2d0b6"
1044 | integrity sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==
1045 | dependencies:
1046 | mdast-util-from-markdown "^1.0.0"
1047 | mdast-util-gfm-autolink-literal "^1.0.0"
1048 | mdast-util-gfm-footnote "^1.0.0"
1049 | mdast-util-gfm-strikethrough "^1.0.0"
1050 | mdast-util-gfm-table "^1.0.0"
1051 | mdast-util-gfm-task-list-item "^1.0.0"
1052 | mdast-util-to-markdown "^1.0.0"
1053 |
1054 | mdast-util-math@^2.0.0:
1055 | version "2.0.2"
1056 | resolved "https://registry.yarnpkg.com/mdast-util-math/-/mdast-util-math-2.0.2.tgz#19a06a81f31643f48cc805e7c31edb7ce739242c"
1057 | integrity sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ==
1058 | dependencies:
1059 | "@types/mdast" "^3.0.0"
1060 | longest-streak "^3.0.0"
1061 | mdast-util-to-markdown "^1.3.0"
1062 |
1063 | mdast-util-mdx-expression@^1.0.0:
1064 | version "1.3.2"
1065 | resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz#d027789e67524d541d6de543f36d51ae2586f220"
1066 | integrity sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==
1067 | dependencies:
1068 | "@types/estree-jsx" "^1.0.0"
1069 | "@types/hast" "^2.0.0"
1070 | "@types/mdast" "^3.0.0"
1071 | mdast-util-from-markdown "^1.0.0"
1072 | mdast-util-to-markdown "^1.0.0"
1073 |
1074 | mdast-util-mdx-jsx@^2.0.0:
1075 | version "2.1.2"
1076 | resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.2.tgz#694a46164db10c0e9d674a3772b8748dfddd0817"
1077 | integrity sha512-o9vBCYQK5ZLGEj3tCGISJGjvafyHRVJlZmfJzSE7xjiogSzIeph/Z4zMY65q4WGRMezQBeAwPlrdymDYYYx0tA==
1078 | dependencies:
1079 | "@types/estree-jsx" "^1.0.0"
1080 | "@types/hast" "^2.0.0"
1081 | "@types/mdast" "^3.0.0"
1082 | "@types/unist" "^2.0.0"
1083 | ccount "^2.0.0"
1084 | mdast-util-from-markdown "^1.1.0"
1085 | mdast-util-to-markdown "^1.3.0"
1086 | parse-entities "^4.0.0"
1087 | stringify-entities "^4.0.0"
1088 | unist-util-remove-position "^4.0.0"
1089 | unist-util-stringify-position "^3.0.0"
1090 | vfile-message "^3.0.0"
1091 |
1092 | mdast-util-mdx@^2.0.0:
1093 | version "2.0.1"
1094 | resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-2.0.1.tgz#49b6e70819b99bb615d7223c088d295e53bb810f"
1095 | integrity sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==
1096 | dependencies:
1097 | mdast-util-from-markdown "^1.0.0"
1098 | mdast-util-mdx-expression "^1.0.0"
1099 | mdast-util-mdx-jsx "^2.0.0"
1100 | mdast-util-mdxjs-esm "^1.0.0"
1101 | mdast-util-to-markdown "^1.0.0"
1102 |
1103 | mdast-util-mdxjs-esm@^1.0.0:
1104 | version "1.3.1"
1105 | resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz#645d02cd607a227b49721d146fd81796b2e2d15b"
1106 | integrity sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==
1107 | dependencies:
1108 | "@types/estree-jsx" "^1.0.0"
1109 | "@types/hast" "^2.0.0"
1110 | "@types/mdast" "^3.0.0"
1111 | mdast-util-from-markdown "^1.0.0"
1112 | mdast-util-to-markdown "^1.0.0"
1113 |
1114 | mdast-util-phrasing@^3.0.0:
1115 | version "3.0.1"
1116 | resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz#c7c21d0d435d7fb90956038f02e8702781f95463"
1117 | integrity sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==
1118 | dependencies:
1119 | "@types/mdast" "^3.0.0"
1120 | unist-util-is "^5.0.0"
1121 |
1122 | mdast-util-to-hast@^12.1.0:
1123 | version "12.3.0"
1124 | resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz#045d2825fb04374e59970f5b3f279b5700f6fb49"
1125 | integrity sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==
1126 | dependencies:
1127 | "@types/hast" "^2.0.0"
1128 | "@types/mdast" "^3.0.0"
1129 | mdast-util-definitions "^5.0.0"
1130 | micromark-util-sanitize-uri "^1.1.0"
1131 | trim-lines "^3.0.0"
1132 | unist-util-generated "^2.0.0"
1133 | unist-util-position "^4.0.0"
1134 | unist-util-visit "^4.0.0"
1135 |
1136 | mdast-util-to-markdown@^1.0.0, mdast-util-to-markdown@^1.3.0:
1137 | version "1.5.0"
1138 | resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz#c13343cb3fc98621911d33b5cd42e7d0731171c6"
1139 | integrity sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==
1140 | dependencies:
1141 | "@types/mdast" "^3.0.0"
1142 | "@types/unist" "^2.0.0"
1143 | longest-streak "^3.0.0"
1144 | mdast-util-phrasing "^3.0.0"
1145 | mdast-util-to-string "^3.0.0"
1146 | micromark-util-decode-string "^1.0.0"
1147 | unist-util-visit "^4.0.0"
1148 | zwitch "^2.0.0"
1149 |
1150 | mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0:
1151 | version "3.1.1"
1152 | resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.1.1.tgz#db859050d79d48cf9896d294de06f3ede7474d16"
1153 | integrity sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA==
1154 | dependencies:
1155 | "@types/mdast" "^3.0.0"
1156 |
1157 | micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1:
1158 | version "1.0.6"
1159 | resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz#edff4c72e5993d93724a3c206970f5a15b0585ad"
1160 | integrity sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==
1161 | dependencies:
1162 | decode-named-character-reference "^1.0.0"
1163 | micromark-factory-destination "^1.0.0"
1164 | micromark-factory-label "^1.0.0"
1165 | micromark-factory-space "^1.0.0"
1166 | micromark-factory-title "^1.0.0"
1167 | micromark-factory-whitespace "^1.0.0"
1168 | micromark-util-character "^1.0.0"
1169 | micromark-util-chunked "^1.0.0"
1170 | micromark-util-classify-character "^1.0.0"
1171 | micromark-util-html-tag-name "^1.0.0"
1172 | micromark-util-normalize-identifier "^1.0.0"
1173 | micromark-util-resolve-all "^1.0.0"
1174 | micromark-util-subtokenize "^1.0.0"
1175 | micromark-util-symbol "^1.0.0"
1176 | micromark-util-types "^1.0.1"
1177 | uvu "^0.5.0"
1178 |
1179 | micromark-extension-gfm-autolink-literal@^1.0.0:
1180 | version "1.0.3"
1181 | resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz#dc589f9c37eaff31a175bab49f12290edcf96058"
1182 | integrity sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==
1183 | dependencies:
1184 | micromark-util-character "^1.0.0"
1185 | micromark-util-sanitize-uri "^1.0.0"
1186 | micromark-util-symbol "^1.0.0"
1187 | micromark-util-types "^1.0.0"
1188 | uvu "^0.5.0"
1189 |
1190 | micromark-extension-gfm-footnote@^1.0.0:
1191 | version "1.0.4"
1192 | resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz#cbfd8873b983e820c494498c6dac0105920818d5"
1193 | integrity sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==
1194 | dependencies:
1195 | micromark-core-commonmark "^1.0.0"
1196 | micromark-factory-space "^1.0.0"
1197 | micromark-util-character "^1.0.0"
1198 | micromark-util-normalize-identifier "^1.0.0"
1199 | micromark-util-sanitize-uri "^1.0.0"
1200 | micromark-util-symbol "^1.0.0"
1201 | micromark-util-types "^1.0.0"
1202 | uvu "^0.5.0"
1203 |
1204 | micromark-extension-gfm-strikethrough@^1.0.0:
1205 | version "1.0.4"
1206 | resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz#162232c284ffbedd8c74e59c1525bda217295e18"
1207 | integrity sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==
1208 | dependencies:
1209 | micromark-util-chunked "^1.0.0"
1210 | micromark-util-classify-character "^1.0.0"
1211 | micromark-util-resolve-all "^1.0.0"
1212 | micromark-util-symbol "^1.0.0"
1213 | micromark-util-types "^1.0.0"
1214 | uvu "^0.5.0"
1215 |
1216 | micromark-extension-gfm-table@^1.0.0:
1217 | version "1.0.5"
1218 | resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz#7b708b728f8dc4d95d486b9e7a2262f9cddbcbb4"
1219 | integrity sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==
1220 | dependencies:
1221 | micromark-factory-space "^1.0.0"
1222 | micromark-util-character "^1.0.0"
1223 | micromark-util-symbol "^1.0.0"
1224 | micromark-util-types "^1.0.0"
1225 | uvu "^0.5.0"
1226 |
1227 | micromark-extension-gfm-tagfilter@^1.0.0:
1228 | version "1.0.1"
1229 | resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz#fb2e303f7daf616db428bb6a26e18fda14a90a4d"
1230 | integrity sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==
1231 | dependencies:
1232 | micromark-util-types "^1.0.0"
1233 |
1234 | micromark-extension-gfm-task-list-item@^1.0.0:
1235 | version "1.0.3"
1236 | resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz#7683641df5d4a09795f353574d7f7f66e47b7fc4"
1237 | integrity sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==
1238 | dependencies:
1239 | micromark-factory-space "^1.0.0"
1240 | micromark-util-character "^1.0.0"
1241 | micromark-util-symbol "^1.0.0"
1242 | micromark-util-types "^1.0.0"
1243 | uvu "^0.5.0"
1244 |
1245 | micromark-extension-gfm@^2.0.0:
1246 | version "2.0.1"
1247 | resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz#40f3209216127a96297c54c67f5edc7ef2d1a2a2"
1248 | integrity sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==
1249 | dependencies:
1250 | micromark-extension-gfm-autolink-literal "^1.0.0"
1251 | micromark-extension-gfm-footnote "^1.0.0"
1252 | micromark-extension-gfm-strikethrough "^1.0.0"
1253 | micromark-extension-gfm-table "^1.0.0"
1254 | micromark-extension-gfm-tagfilter "^1.0.0"
1255 | micromark-extension-gfm-task-list-item "^1.0.0"
1256 | micromark-util-combine-extensions "^1.0.0"
1257 | micromark-util-types "^1.0.0"
1258 |
1259 | micromark-extension-math@^2.0.0:
1260 | version "2.0.2"
1261 | resolved "https://registry.yarnpkg.com/micromark-extension-math/-/micromark-extension-math-2.0.2.tgz#bb7d28b907b17f1813dd3d0df2a6df6bb1a4d0e1"
1262 | integrity sha512-cFv2B/E4pFPBBFuGgLHkkNiFAIQv08iDgPH2HCuR2z3AUgMLecES5Cq7AVtwOtZeRrbA80QgMUk8VVW0Z+D2FA==
1263 | dependencies:
1264 | "@types/katex" "^0.11.0"
1265 | katex "^0.13.0"
1266 | micromark-factory-space "^1.0.0"
1267 | micromark-util-character "^1.0.0"
1268 | micromark-util-symbol "^1.0.0"
1269 | micromark-util-types "^1.0.0"
1270 | uvu "^0.5.0"
1271 |
1272 | micromark-extension-mdx-expression@^1.0.0:
1273 | version "1.0.4"
1274 | resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.4.tgz#33fe2c6ee214738255de175a084281c11894ddda"
1275 | integrity sha512-TCgLxqW6ReQ3AJgtj1P0P+8ZThBTloLbeb7jNaqr6mCOLDpxUiBFE/9STgooMZttEwOQu5iEcCCa3ZSDhY9FGw==
1276 | dependencies:
1277 | micromark-factory-mdx-expression "^1.0.0"
1278 | micromark-factory-space "^1.0.0"
1279 | micromark-util-character "^1.0.0"
1280 | micromark-util-events-to-acorn "^1.0.0"
1281 | micromark-util-symbol "^1.0.0"
1282 | micromark-util-types "^1.0.0"
1283 | uvu "^0.5.0"
1284 |
1285 | micromark-extension-mdx-jsx@^1.0.0:
1286 | version "1.0.3"
1287 | resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz#9f196be5f65eb09d2a49b237a7b3398bba2999be"
1288 | integrity sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==
1289 | dependencies:
1290 | "@types/acorn" "^4.0.0"
1291 | estree-util-is-identifier-name "^2.0.0"
1292 | micromark-factory-mdx-expression "^1.0.0"
1293 | micromark-factory-space "^1.0.0"
1294 | micromark-util-character "^1.0.0"
1295 | micromark-util-symbol "^1.0.0"
1296 | micromark-util-types "^1.0.0"
1297 | uvu "^0.5.0"
1298 | vfile-message "^3.0.0"
1299 |
1300 | micromark-extension-mdx-md@^1.0.0:
1301 | version "1.0.0"
1302 | resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz#382f5df9ee3706dd120b51782a211f31f4760d22"
1303 | integrity sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==
1304 | dependencies:
1305 | micromark-util-types "^1.0.0"
1306 |
1307 | micromark-extension-mdxjs-esm@^1.0.0:
1308 | version "1.0.3"
1309 | resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz#630d9dc9db2c2fd470cac8c1e7a824851267404d"
1310 | integrity sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==
1311 | dependencies:
1312 | micromark-core-commonmark "^1.0.0"
1313 | micromark-util-character "^1.0.0"
1314 | micromark-util-events-to-acorn "^1.0.0"
1315 | micromark-util-symbol "^1.0.0"
1316 | micromark-util-types "^1.0.0"
1317 | unist-util-position-from-estree "^1.1.0"
1318 | uvu "^0.5.0"
1319 | vfile-message "^3.0.0"
1320 |
1321 | micromark-extension-mdxjs@^1.0.0:
1322 | version "1.0.0"
1323 | resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz#772644e12fc8299a33e50f59c5aa15727f6689dd"
1324 | integrity sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==
1325 | dependencies:
1326 | acorn "^8.0.0"
1327 | acorn-jsx "^5.0.0"
1328 | micromark-extension-mdx-expression "^1.0.0"
1329 | micromark-extension-mdx-jsx "^1.0.0"
1330 | micromark-extension-mdx-md "^1.0.0"
1331 | micromark-extension-mdxjs-esm "^1.0.0"
1332 | micromark-util-combine-extensions "^1.0.0"
1333 | micromark-util-types "^1.0.0"
1334 |
1335 | micromark-factory-destination@^1.0.0:
1336 | version "1.0.0"
1337 | resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz#fef1cb59ad4997c496f887b6977aa3034a5a277e"
1338 | integrity sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==
1339 | dependencies:
1340 | micromark-util-character "^1.0.0"
1341 | micromark-util-symbol "^1.0.0"
1342 | micromark-util-types "^1.0.0"
1343 |
1344 | micromark-factory-label@^1.0.0:
1345 | version "1.0.2"
1346 | resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz#6be2551fa8d13542fcbbac478258fb7a20047137"
1347 | integrity sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==
1348 | dependencies:
1349 | micromark-util-character "^1.0.0"
1350 | micromark-util-symbol "^1.0.0"
1351 | micromark-util-types "^1.0.0"
1352 | uvu "^0.5.0"
1353 |
1354 | micromark-factory-mdx-expression@^1.0.0:
1355 | version "1.0.7"
1356 | resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.7.tgz#e38298dc1f7eaf6ba1d9f210531ceae17155c00f"
1357 | integrity sha512-QAdFbkQagTZ/eKb8zDGqmjvgevgJH3+aQpvvKrXWxNJp3o8/l2cAbbrBd0E04r0Gx6nssPpqWIjnbHFvZu5qsQ==
1358 | dependencies:
1359 | micromark-factory-space "^1.0.0"
1360 | micromark-util-character "^1.0.0"
1361 | micromark-util-events-to-acorn "^1.0.0"
1362 | micromark-util-symbol "^1.0.0"
1363 | micromark-util-types "^1.0.0"
1364 | unist-util-position-from-estree "^1.0.0"
1365 | uvu "^0.5.0"
1366 | vfile-message "^3.0.0"
1367 |
1368 | micromark-factory-space@^1.0.0:
1369 | version "1.0.0"
1370 | resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz#cebff49968f2b9616c0fcb239e96685cb9497633"
1371 | integrity sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==
1372 | dependencies:
1373 | micromark-util-character "^1.0.0"
1374 | micromark-util-types "^1.0.0"
1375 |
1376 | micromark-factory-title@^1.0.0:
1377 | version "1.0.2"
1378 | resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz#7e09287c3748ff1693930f176e1c4a328382494f"
1379 | integrity sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==
1380 | dependencies:
1381 | micromark-factory-space "^1.0.0"
1382 | micromark-util-character "^1.0.0"
1383 | micromark-util-symbol "^1.0.0"
1384 | micromark-util-types "^1.0.0"
1385 | uvu "^0.5.0"
1386 |
1387 | micromark-factory-whitespace@^1.0.0:
1388 | version "1.0.0"
1389 | resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz#e991e043ad376c1ba52f4e49858ce0794678621c"
1390 | integrity sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==
1391 | dependencies:
1392 | micromark-factory-space "^1.0.0"
1393 | micromark-util-character "^1.0.0"
1394 | micromark-util-symbol "^1.0.0"
1395 | micromark-util-types "^1.0.0"
1396 |
1397 | micromark-util-character@^1.0.0:
1398 | version "1.1.0"
1399 | resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.1.0.tgz#d97c54d5742a0d9611a68ca0cd4124331f264d86"
1400 | integrity sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==
1401 | dependencies:
1402 | micromark-util-symbol "^1.0.0"
1403 | micromark-util-types "^1.0.0"
1404 |
1405 | micromark-util-chunked@^1.0.0:
1406 | version "1.0.0"
1407 | resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz#5b40d83f3d53b84c4c6bce30ed4257e9a4c79d06"
1408 | integrity sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==
1409 | dependencies:
1410 | micromark-util-symbol "^1.0.0"
1411 |
1412 | micromark-util-classify-character@^1.0.0:
1413 | version "1.0.0"
1414 | resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz#cbd7b447cb79ee6997dd274a46fc4eb806460a20"
1415 | integrity sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==
1416 | dependencies:
1417 | micromark-util-character "^1.0.0"
1418 | micromark-util-symbol "^1.0.0"
1419 | micromark-util-types "^1.0.0"
1420 |
1421 | micromark-util-combine-extensions@^1.0.0:
1422 | version "1.0.0"
1423 | resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz#91418e1e74fb893e3628b8d496085639124ff3d5"
1424 | integrity sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==
1425 | dependencies:
1426 | micromark-util-chunked "^1.0.0"
1427 | micromark-util-types "^1.0.0"
1428 |
1429 | micromark-util-decode-numeric-character-reference@^1.0.0:
1430 | version "1.0.0"
1431 | resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz#dcc85f13b5bd93ff8d2868c3dba28039d490b946"
1432 | integrity sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==
1433 | dependencies:
1434 | micromark-util-symbol "^1.0.0"
1435 |
1436 | micromark-util-decode-string@^1.0.0:
1437 | version "1.0.2"
1438 | resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz#942252ab7a76dec2dbf089cc32505ee2bc3acf02"
1439 | integrity sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==
1440 | dependencies:
1441 | decode-named-character-reference "^1.0.0"
1442 | micromark-util-character "^1.0.0"
1443 | micromark-util-decode-numeric-character-reference "^1.0.0"
1444 | micromark-util-symbol "^1.0.0"
1445 |
1446 | micromark-util-encode@^1.0.0:
1447 | version "1.0.1"
1448 | resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz#2c1c22d3800870ad770ece5686ebca5920353383"
1449 | integrity sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==
1450 |
1451 | micromark-util-events-to-acorn@^1.0.0:
1452 | version "1.2.1"
1453 | resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.1.tgz#d5b9dfbc589ece7917de24de0a57b909c0d36583"
1454 | integrity sha512-mkg3BaWlw6ZTkQORrKVBW4o9ICXPxLtGz51vml5mQpKFdo9vqIX68CAx5JhTOdjQyAHH7JFmm4rh8toSPQZUmg==
1455 | dependencies:
1456 | "@types/acorn" "^4.0.0"
1457 | "@types/estree" "^1.0.0"
1458 | estree-util-visit "^1.0.0"
1459 | micromark-util-types "^1.0.0"
1460 | uvu "^0.5.0"
1461 | vfile-location "^4.0.0"
1462 | vfile-message "^3.0.0"
1463 |
1464 | micromark-util-html-tag-name@^1.0.0:
1465 | version "1.1.0"
1466 | resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz#eb227118befd51f48858e879b7a419fc0df20497"
1467 | integrity sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==
1468 |
1469 | micromark-util-normalize-identifier@^1.0.0:
1470 | version "1.0.0"
1471 | resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz#4a3539cb8db954bbec5203952bfe8cedadae7828"
1472 | integrity sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==
1473 | dependencies:
1474 | micromark-util-symbol "^1.0.0"
1475 |
1476 | micromark-util-resolve-all@^1.0.0:
1477 | version "1.0.0"
1478 | resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz#a7c363f49a0162e931960c44f3127ab58f031d88"
1479 | integrity sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==
1480 | dependencies:
1481 | micromark-util-types "^1.0.0"
1482 |
1483 | micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0:
1484 | version "1.1.0"
1485 | resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz#f12e07a85106b902645e0364feb07cf253a85aee"
1486 | integrity sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==
1487 | dependencies:
1488 | micromark-util-character "^1.0.0"
1489 | micromark-util-encode "^1.0.0"
1490 | micromark-util-symbol "^1.0.0"
1491 |
1492 | micromark-util-subtokenize@^1.0.0:
1493 | version "1.0.2"
1494 | resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz#ff6f1af6ac836f8bfdbf9b02f40431760ad89105"
1495 | integrity sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==
1496 | dependencies:
1497 | micromark-util-chunked "^1.0.0"
1498 | micromark-util-symbol "^1.0.0"
1499 | micromark-util-types "^1.0.0"
1500 | uvu "^0.5.0"
1501 |
1502 | micromark-util-symbol@^1.0.0:
1503 | version "1.0.1"
1504 | resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz#b90344db62042ce454f351cf0bebcc0a6da4920e"
1505 | integrity sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==
1506 |
1507 | micromark-util-types@^1.0.0, micromark-util-types@^1.0.1:
1508 | version "1.0.2"
1509 | resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.0.2.tgz#f4220fdb319205812f99c40f8c87a9be83eded20"
1510 | integrity sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==
1511 |
1512 | micromark@^3.0.0:
1513 | version "3.1.0"
1514 | resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.1.0.tgz#eeba0fe0ac1c9aaef675157b52c166f125e89f62"
1515 | integrity sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==
1516 | dependencies:
1517 | "@types/debug" "^4.0.0"
1518 | debug "^4.0.0"
1519 | decode-named-character-reference "^1.0.0"
1520 | micromark-core-commonmark "^1.0.1"
1521 | micromark-factory-space "^1.0.0"
1522 | micromark-util-character "^1.0.0"
1523 | micromark-util-chunked "^1.0.0"
1524 | micromark-util-combine-extensions "^1.0.0"
1525 | micromark-util-decode-numeric-character-reference "^1.0.0"
1526 | micromark-util-encode "^1.0.0"
1527 | micromark-util-normalize-identifier "^1.0.0"
1528 | micromark-util-resolve-all "^1.0.0"
1529 | micromark-util-sanitize-uri "^1.0.0"
1530 | micromark-util-subtokenize "^1.0.0"
1531 | micromark-util-symbol "^1.0.0"
1532 | micromark-util-types "^1.0.1"
1533 | uvu "^0.5.0"
1534 |
1535 | mri@^1.1.0:
1536 | version "1.2.0"
1537 | resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b"
1538 | integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==
1539 |
1540 | ms@2.1.2:
1541 | version "2.1.2"
1542 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1543 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1544 |
1545 | nanoid@^3.3.4:
1546 | version "3.3.6"
1547 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
1548 | integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
1549 |
1550 | next-mdx-remote@^4.2.1:
1551 | version "4.4.1"
1552 | resolved "https://registry.yarnpkg.com/next-mdx-remote/-/next-mdx-remote-4.4.1.tgz#96b16e2adc54dbcd0a7f204a9a3c3fd269d41abf"
1553 | integrity sha512-1BvyXaIou6xy3XoNF4yaMZUCb6vD2GTAa5ciOa6WoO+gAUTYsb1K4rI/HSC2ogAWLrb/7VSV52skz07vOzmqIQ==
1554 | dependencies:
1555 | "@mdx-js/mdx" "^2.2.1"
1556 | "@mdx-js/react" "^2.2.1"
1557 | vfile "^5.3.0"
1558 | vfile-matter "^3.0.1"
1559 |
1560 | next-seo@^5.5.0:
1561 | version "5.15.0"
1562 | resolved "https://registry.yarnpkg.com/next-seo/-/next-seo-5.15.0.tgz#b1a90508599774982909ea44803323c6fb7b50f4"
1563 | integrity sha512-LGbcY91yDKGMb7YI+28n3g+RuChUkt6pXNpa8FkfKkEmNiJkeRDEXTnnjVtwT9FmMhG6NH8qwHTelGrlYm9rgg==
1564 |
1565 | next-themes@^0.2.1:
1566 | version "0.2.1"
1567 | resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.2.1.tgz#0c9f128e847979daf6c67f70b38e6b6567856e45"
1568 | integrity sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==
1569 |
1570 | next@^13.2.3:
1571 | version "13.2.4"
1572 | resolved "https://registry.yarnpkg.com/next/-/next-13.2.4.tgz#2363330392b0f7da02ab41301f60857ffa7f67d6"
1573 | integrity sha512-g1I30317cThkEpvzfXujf0O4wtaQHtDCLhlivwlTJ885Ld+eOgcz7r3TGQzeU+cSRoNHtD8tsJgzxVdYojFssw==
1574 | dependencies:
1575 | "@next/env" "13.2.4"
1576 | "@swc/helpers" "0.4.14"
1577 | caniuse-lite "^1.0.30001406"
1578 | postcss "8.4.14"
1579 | styled-jsx "5.1.1"
1580 | optionalDependencies:
1581 | "@next/swc-android-arm-eabi" "13.2.4"
1582 | "@next/swc-android-arm64" "13.2.4"
1583 | "@next/swc-darwin-arm64" "13.2.4"
1584 | "@next/swc-darwin-x64" "13.2.4"
1585 | "@next/swc-freebsd-x64" "13.2.4"
1586 | "@next/swc-linux-arm-gnueabihf" "13.2.4"
1587 | "@next/swc-linux-arm64-gnu" "13.2.4"
1588 | "@next/swc-linux-arm64-musl" "13.2.4"
1589 | "@next/swc-linux-x64-gnu" "13.2.4"
1590 | "@next/swc-linux-x64-musl" "13.2.4"
1591 | "@next/swc-win32-arm64-msvc" "13.2.4"
1592 | "@next/swc-win32-ia32-msvc" "13.2.4"
1593 | "@next/swc-win32-x64-msvc" "13.2.4"
1594 |
1595 | nextra-theme-docs@^2.2.17:
1596 | version "2.2.20"
1597 | resolved "https://registry.yarnpkg.com/nextra-theme-docs/-/nextra-theme-docs-2.2.20.tgz#144f8fb4da9ad3ccf80c044447e7da0da13048e4"
1598 | integrity sha512-YbDbpwvLCUnDvq9afP57Zu/fDFbSrsvx5MEZIhKRcrn/eCfo4yIwoMMhdRF0yntB5uTDc4MZ8jqJgb25g2v7QA==
1599 | dependencies:
1600 | "@headlessui/react" "^1.7.10"
1601 | "@popperjs/core" "^2.11.6"
1602 | clsx "^1.2.1"
1603 | flexsearch "^0.7.21"
1604 | focus-visible "^5.2.0"
1605 | git-url-parse "^13.1.0"
1606 | intersection-observer "^0.12.2"
1607 | match-sorter "^6.3.1"
1608 | next-seo "^5.5.0"
1609 | next-themes "^0.2.1"
1610 | scroll-into-view-if-needed "^3.0.0"
1611 | zod "^3.20.2"
1612 |
1613 | nextra@^2.2.17:
1614 | version "2.2.20"
1615 | resolved "https://registry.yarnpkg.com/nextra/-/nextra-2.2.20.tgz#7973c817067779318c989fcc9ad31473a97f50cb"
1616 | integrity sha512-V5P5UHvA7GvISziJSEMVV9jCDBm1aMlez3XqKPzvr/aIrugfnIPBhGrFh2YjpXp5FspldgTS8lbZVf36Alonhg==
1617 | dependencies:
1618 | "@mdx-js/mdx" "^2.3.0"
1619 | "@mdx-js/react" "^2.3.0"
1620 | "@napi-rs/simple-git" "^0.1.8"
1621 | github-slugger "^2.0.0"
1622 | graceful-fs "^4.2.10"
1623 | gray-matter "^4.0.3"
1624 | katex "^0.16.4"
1625 | lodash.get "^4.4.2"
1626 | next-mdx-remote "^4.2.1"
1627 | p-limit "^3.1.0"
1628 | rehype-katex "^6.0.2"
1629 | rehype-pretty-code "0.9.3"
1630 | remark-gfm "^3.0.1"
1631 | remark-math "^5.1.1"
1632 | remark-reading-time "^2.0.1"
1633 | shiki "^0.14.0"
1634 | slash "^3.0.0"
1635 | title "^3.5.3"
1636 | unist-util-remove "^3.1.1"
1637 | unist-util-visit "^4.1.1"
1638 | zod "^3.20.2"
1639 |
1640 | normalize-path@^3.0.0, normalize-path@~3.0.0:
1641 | version "3.0.0"
1642 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
1643 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
1644 |
1645 | npm-run-path@^2.0.0:
1646 | version "2.0.2"
1647 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
1648 | integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==
1649 | dependencies:
1650 | path-key "^2.0.0"
1651 |
1652 | p-finally@^1.0.0:
1653 | version "1.0.0"
1654 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
1655 | integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
1656 |
1657 | p-limit@^3.1.0:
1658 | version "3.1.0"
1659 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
1660 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
1661 | dependencies:
1662 | yocto-queue "^0.1.0"
1663 |
1664 | parse-entities@^4.0.0:
1665 | version "4.0.1"
1666 | resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e"
1667 | integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==
1668 | dependencies:
1669 | "@types/unist" "^2.0.0"
1670 | character-entities "^2.0.0"
1671 | character-entities-legacy "^3.0.0"
1672 | character-reference-invalid "^2.0.0"
1673 | decode-named-character-reference "^1.0.0"
1674 | is-alphanumerical "^2.0.0"
1675 | is-decimal "^2.0.0"
1676 | is-hexadecimal "^2.0.0"
1677 |
1678 | parse-numeric-range@^1.3.0:
1679 | version "1.3.0"
1680 | resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3"
1681 | integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==
1682 |
1683 | parse-path@^7.0.0:
1684 | version "7.0.0"
1685 | resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b"
1686 | integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==
1687 | dependencies:
1688 | protocols "^2.0.0"
1689 |
1690 | parse-url@^8.1.0:
1691 | version "8.1.0"
1692 | resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d"
1693 | integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==
1694 | dependencies:
1695 | parse-path "^7.0.0"
1696 |
1697 | parse5@^6.0.0:
1698 | version "6.0.1"
1699 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
1700 | integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
1701 |
1702 | path-key@^2.0.0:
1703 | version "2.0.1"
1704 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
1705 | integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
1706 |
1707 | periscopic@^3.0.0:
1708 | version "3.1.0"
1709 | resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.1.0.tgz#7e9037bf51c5855bd33b48928828db4afa79d97a"
1710 | integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==
1711 | dependencies:
1712 | "@types/estree" "^1.0.0"
1713 | estree-walker "^3.0.0"
1714 | is-reference "^3.0.0"
1715 |
1716 | picocolors@^1.0.0:
1717 | version "1.0.0"
1718 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
1719 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
1720 |
1721 | picomatch@^2.0.4, picomatch@^2.2.1:
1722 | version "2.3.1"
1723 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
1724 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1725 |
1726 | postcss@8.4.14:
1727 | version "8.4.14"
1728 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf"
1729 | integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==
1730 | dependencies:
1731 | nanoid "^3.3.4"
1732 | picocolors "^1.0.0"
1733 | source-map-js "^1.0.2"
1734 |
1735 | prism-react-renderer@^1.2.0:
1736 | version "1.3.5"
1737 | resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085"
1738 | integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==
1739 |
1740 | prismjs@^1.23.0:
1741 | version "1.29.0"
1742 | resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12"
1743 | integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==
1744 |
1745 | property-information@^6.0.0:
1746 | version "6.2.0"
1747 | resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.2.0.tgz#b74f522c31c097b5149e3c3cb8d7f3defd986a1d"
1748 | integrity sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==
1749 |
1750 | protocols@^2.0.0, protocols@^2.0.1:
1751 | version "2.0.1"
1752 | resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86"
1753 | integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==
1754 |
1755 | pseudomap@^1.0.2:
1756 | version "1.0.2"
1757 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
1758 | integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==
1759 |
1760 | react-dom@^18.2.0:
1761 | version "18.2.0"
1762 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
1763 | integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
1764 | dependencies:
1765 | loose-envify "^1.1.0"
1766 | scheduler "^0.23.0"
1767 |
1768 | react@^18.2.0:
1769 | version "18.2.0"
1770 | resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
1771 | integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
1772 | dependencies:
1773 | loose-envify "^1.1.0"
1774 |
1775 | readdirp@~3.6.0:
1776 | version "3.6.0"
1777 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
1778 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
1779 | dependencies:
1780 | picomatch "^2.2.1"
1781 |
1782 | reading-time@^1.3.0:
1783 | version "1.5.0"
1784 | resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.5.0.tgz#d2a7f1b6057cb2e169beaf87113cc3411b5bc5bb"
1785 | integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==
1786 |
1787 | regenerator-runtime@^0.13.11:
1788 | version "0.13.11"
1789 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
1790 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
1791 |
1792 | rehype-katex@^6.0.2:
1793 | version "6.0.2"
1794 | resolved "https://registry.yarnpkg.com/rehype-katex/-/rehype-katex-6.0.2.tgz#20197bbc10bdf79f6b999bffa6689d7f17226c35"
1795 | integrity sha512-C4gDAlS1+l0hJqctyiU64f9CvT00S03qV1T6HiMzbSuLBgWUtcqydWHY9OpKrm0SpkK16FNd62CDKyWLwV2ppg==
1796 | dependencies:
1797 | "@types/hast" "^2.0.0"
1798 | "@types/katex" "^0.11.0"
1799 | hast-util-to-text "^3.1.0"
1800 | katex "^0.15.0"
1801 | rehype-parse "^8.0.0"
1802 | unified "^10.0.0"
1803 | unist-util-remove-position "^4.0.0"
1804 | unist-util-visit "^4.0.0"
1805 |
1806 | rehype-parse@^8.0.0:
1807 | version "8.0.4"
1808 | resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-8.0.4.tgz#3d17c9ff16ddfef6bbcc8e6a25a99467b482d688"
1809 | integrity sha512-MJJKONunHjoTh4kc3dsM1v3C9kGrrxvA3U8PxZlP2SjH8RNUSrb+lF7Y0KVaUDnGH2QZ5vAn7ulkiajM9ifuqg==
1810 | dependencies:
1811 | "@types/hast" "^2.0.0"
1812 | hast-util-from-parse5 "^7.0.0"
1813 | parse5 "^6.0.0"
1814 | unified "^10.0.0"
1815 |
1816 | rehype-pretty-code@0.9.3:
1817 | version "0.9.3"
1818 | resolved "https://registry.yarnpkg.com/rehype-pretty-code/-/rehype-pretty-code-0.9.3.tgz#484f3fefea89abde8914afea2f3ce42995755938"
1819 | integrity sha512-57i+ifrttqpeQxub0NZ2pRw0aiUPYeBpr234NLWfZ4BfbEaP+29+iCXB1rUMkzoPi6IBC4w4I93mUPgw36IajQ==
1820 | dependencies:
1821 | hash-obj "^4.0.0"
1822 | parse-numeric-range "^1.3.0"
1823 |
1824 | remark-gfm@^3.0.1:
1825 | version "3.0.1"
1826 | resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-3.0.1.tgz#0b180f095e3036545e9dddac0e8df3fa5cfee54f"
1827 | integrity sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==
1828 | dependencies:
1829 | "@types/mdast" "^3.0.0"
1830 | mdast-util-gfm "^2.0.0"
1831 | micromark-extension-gfm "^2.0.0"
1832 | unified "^10.0.0"
1833 |
1834 | remark-math@^5.1.1:
1835 | version "5.1.1"
1836 | resolved "https://registry.yarnpkg.com/remark-math/-/remark-math-5.1.1.tgz#459e798d978d4ca032e745af0bac81ddcdf94964"
1837 | integrity sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==
1838 | dependencies:
1839 | "@types/mdast" "^3.0.0"
1840 | mdast-util-math "^2.0.0"
1841 | micromark-extension-math "^2.0.0"
1842 | unified "^10.0.0"
1843 |
1844 | remark-mdx@^2.0.0:
1845 | version "2.3.0"
1846 | resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-2.3.0.tgz#efe678025a8c2726681bde8bf111af4a93943db4"
1847 | integrity sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==
1848 | dependencies:
1849 | mdast-util-mdx "^2.0.0"
1850 | micromark-extension-mdxjs "^1.0.0"
1851 |
1852 | remark-parse@^10.0.0:
1853 | version "10.0.1"
1854 | resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.1.tgz#6f60ae53edbf0cf38ea223fe643db64d112e0775"
1855 | integrity sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==
1856 | dependencies:
1857 | "@types/mdast" "^3.0.0"
1858 | mdast-util-from-markdown "^1.0.0"
1859 | unified "^10.0.0"
1860 |
1861 | remark-reading-time@^2.0.1:
1862 | version "2.0.1"
1863 | resolved "https://registry.yarnpkg.com/remark-reading-time/-/remark-reading-time-2.0.1.tgz#fe8bb8e420db7678dc749385167adb4fc99318f7"
1864 | integrity sha512-fy4BKy9SRhtYbEHvp6AItbRTnrhiDGbqLQTSYVbQPGuRCncU1ubSsh9p/W5QZSxtYcUXv8KGL0xBgPLyNJA1xw==
1865 | dependencies:
1866 | estree-util-is-identifier-name "^2.0.0"
1867 | estree-util-value-to-estree "^1.3.0"
1868 | reading-time "^1.3.0"
1869 | unist-util-visit "^3.1.0"
1870 |
1871 | remark-rehype@^10.0.0:
1872 | version "10.1.0"
1873 | resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279"
1874 | integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==
1875 | dependencies:
1876 | "@types/hast" "^2.0.0"
1877 | "@types/mdast" "^3.0.0"
1878 | mdast-util-to-hast "^12.1.0"
1879 | unified "^10.0.0"
1880 |
1881 | remove-accents@0.4.2:
1882 | version "0.4.2"
1883 | resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5"
1884 | integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==
1885 |
1886 | sade@^1.7.3:
1887 | version "1.8.1"
1888 | resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701"
1889 | integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==
1890 | dependencies:
1891 | mri "^1.1.0"
1892 |
1893 | sass@^1.32.8:
1894 | version "1.60.0"
1895 | resolved "https://registry.yarnpkg.com/sass/-/sass-1.60.0.tgz#657f0c23a302ac494b09a5ba8497b739fb5b5a81"
1896 | integrity sha512-updbwW6fNb5gGm8qMXzVO7V4sWf7LMXnMly/JEyfbfERbVH46Fn6q02BX7/eHTdKpE7d+oTkMMQpFWNUMfFbgQ==
1897 | dependencies:
1898 | chokidar ">=3.0.0 <4.0.0"
1899 | immutable "^4.0.0"
1900 | source-map-js ">=0.6.2 <2.0.0"
1901 |
1902 | scheduler@^0.23.0:
1903 | version "0.23.0"
1904 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
1905 | integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
1906 | dependencies:
1907 | loose-envify "^1.1.0"
1908 |
1909 | scroll-into-view-if-needed@^3.0.0:
1910 | version "3.0.6"
1911 | resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.0.6.tgz#2c803a509c1036bc4a9c009fecc5c145f87e47cf"
1912 | integrity sha512-x+CW0kOzlFNOnseF0DBr0AJ5m+TgGmSOdEZwyiZW0gV87XBvxQKw5A8DvFFgabznA68XqLgVX+PwPX8OzsFvRA==
1913 | dependencies:
1914 | compute-scroll-into-view "^3.0.0"
1915 |
1916 | section-matter@^1.0.0:
1917 | version "1.0.0"
1918 | resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167"
1919 | integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==
1920 | dependencies:
1921 | extend-shallow "^2.0.1"
1922 | kind-of "^6.0.0"
1923 |
1924 | shebang-command@^1.2.0:
1925 | version "1.2.0"
1926 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
1927 | integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==
1928 | dependencies:
1929 | shebang-regex "^1.0.0"
1930 |
1931 | shebang-regex@^1.0.0:
1932 | version "1.0.0"
1933 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
1934 | integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==
1935 |
1936 | shiki@^0.14.0:
1937 | version "0.14.1"
1938 | resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.1.tgz#9fbe082d0a8aa2ad63df4fbf2ee11ec924aa7ee1"
1939 | integrity sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw==
1940 | dependencies:
1941 | ansi-sequence-parser "^1.1.0"
1942 | jsonc-parser "^3.2.0"
1943 | vscode-oniguruma "^1.7.0"
1944 | vscode-textmate "^8.0.0"
1945 |
1946 | signal-exit@^3.0.0:
1947 | version "3.0.7"
1948 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
1949 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
1950 |
1951 | slash@^3.0.0:
1952 | version "3.0.0"
1953 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
1954 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
1955 |
1956 | sort-keys@^5.0.0:
1957 | version "5.0.0"
1958 | resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-5.0.0.tgz#5d775f8ae93ecc29bc7312bbf3acac4e36e3c446"
1959 | integrity sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw==
1960 | dependencies:
1961 | is-plain-obj "^4.0.0"
1962 |
1963 | "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2:
1964 | version "1.0.2"
1965 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
1966 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
1967 |
1968 | source-map@^0.7.0:
1969 | version "0.7.4"
1970 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
1971 | integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
1972 |
1973 | space-separated-tokens@^2.0.0:
1974 | version "2.0.2"
1975 | resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f"
1976 | integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==
1977 |
1978 | sprintf-js@~1.0.2:
1979 | version "1.0.3"
1980 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
1981 | integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
1982 |
1983 | stringify-entities@^4.0.0:
1984 | version "4.0.3"
1985 | resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.3.tgz#cfabd7039d22ad30f3cc435b0ca2c1574fc88ef8"
1986 | integrity sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==
1987 | dependencies:
1988 | character-entities-html4 "^2.0.0"
1989 | character-entities-legacy "^3.0.0"
1990 |
1991 | strip-bom-string@^1.0.0:
1992 | version "1.0.0"
1993 | resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92"
1994 | integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==
1995 |
1996 | strip-eof@^1.0.0:
1997 | version "1.0.0"
1998 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
1999 | integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==
2000 |
2001 | style-to-object@^0.4.1:
2002 | version "0.4.1"
2003 | resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.1.tgz#53cf856f7cf7f172d72939d9679556469ba5de37"
2004 | integrity sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==
2005 | dependencies:
2006 | inline-style-parser "0.1.1"
2007 |
2008 | styled-jsx@5.1.1:
2009 | version "5.1.1"
2010 | resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f"
2011 | integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==
2012 | dependencies:
2013 | client-only "0.0.1"
2014 |
2015 | supports-color@^4.0.0:
2016 | version "4.5.0"
2017 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
2018 | integrity sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==
2019 | dependencies:
2020 | has-flag "^2.0.0"
2021 |
2022 | title@^3.5.3:
2023 | version "3.5.3"
2024 | resolved "https://registry.yarnpkg.com/title/-/title-3.5.3.tgz#b338d701a3d949db6b49b2c86f409f9c2f36cd91"
2025 | integrity sha512-20JyowYglSEeCvZv3EZ0nZ046vLarO37prvV0mbtQV7C8DJPGgN967r8SJkqd3XK3K3lD3/Iyfp3avjfil8Q2Q==
2026 | dependencies:
2027 | arg "1.0.0"
2028 | chalk "2.3.0"
2029 | clipboardy "1.2.2"
2030 | titleize "1.0.0"
2031 |
2032 | titleize@1.0.0:
2033 | version "1.0.0"
2034 | resolved "https://registry.yarnpkg.com/titleize/-/titleize-1.0.0.tgz#7d350722061830ba6617631e0cfd3ea08398d95a"
2035 | integrity sha512-TARUb7z1pGvlLxgPk++7wJ6aycXF3GJ0sNSBTAsTuJrQG5QuZlkUQP+zl+nbjAh4gMX9yDw9ZYklMd7vAfJKEw==
2036 |
2037 | to-regex-range@^5.0.1:
2038 | version "5.0.1"
2039 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
2040 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
2041 | dependencies:
2042 | is-number "^7.0.0"
2043 |
2044 | trim-lines@^3.0.0:
2045 | version "3.0.1"
2046 | resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338"
2047 | integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==
2048 |
2049 | trough@^2.0.0:
2050 | version "2.1.0"
2051 | resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876"
2052 | integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==
2053 |
2054 | tslib@^2.4.0:
2055 | version "2.5.0"
2056 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
2057 | integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
2058 |
2059 | type-fest@^1.0.2:
2060 | version "1.4.0"
2061 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
2062 | integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==
2063 |
2064 | unified@^10.0.0:
2065 | version "10.1.2"
2066 | resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df"
2067 | integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==
2068 | dependencies:
2069 | "@types/unist" "^2.0.0"
2070 | bail "^2.0.0"
2071 | extend "^3.0.0"
2072 | is-buffer "^2.0.0"
2073 | is-plain-obj "^4.0.0"
2074 | trough "^2.0.0"
2075 | vfile "^5.0.0"
2076 |
2077 | unist-util-find-after@^4.0.0:
2078 | version "4.0.1"
2079 | resolved "https://registry.yarnpkg.com/unist-util-find-after/-/unist-util-find-after-4.0.1.tgz#80c69c92b0504033638ce11973f4135f2c822e2d"
2080 | integrity sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==
2081 | dependencies:
2082 | "@types/unist" "^2.0.0"
2083 | unist-util-is "^5.0.0"
2084 |
2085 | unist-util-generated@^2.0.0:
2086 | version "2.0.1"
2087 | resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae"
2088 | integrity sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==
2089 |
2090 | unist-util-is@^5.0.0:
2091 | version "5.2.1"
2092 | resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9"
2093 | integrity sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==
2094 | dependencies:
2095 | "@types/unist" "^2.0.0"
2096 |
2097 | unist-util-position-from-estree@^1.0.0, unist-util-position-from-estree@^1.1.0:
2098 | version "1.1.2"
2099 | resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz#8ac2480027229de76512079e377afbcabcfcce22"
2100 | integrity sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==
2101 | dependencies:
2102 | "@types/unist" "^2.0.0"
2103 |
2104 | unist-util-position@^4.0.0:
2105 | version "4.0.4"
2106 | resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037"
2107 | integrity sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==
2108 | dependencies:
2109 | "@types/unist" "^2.0.0"
2110 |
2111 | unist-util-remove-position@^4.0.0:
2112 | version "4.0.2"
2113 | resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz#a89be6ea72e23b1a402350832b02a91f6a9afe51"
2114 | integrity sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==
2115 | dependencies:
2116 | "@types/unist" "^2.0.0"
2117 | unist-util-visit "^4.0.0"
2118 |
2119 | unist-util-remove@^3.1.1:
2120 | version "3.1.1"
2121 | resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-3.1.1.tgz#8bfa181aff916bd32a4ed30b3ed76d0c21c077df"
2122 | integrity sha512-kfCqZK5YVY5yEa89tvpl7KnBBHu2c6CzMkqHUrlOqaRgGOMp0sMvwWOVrbAtj03KhovQB7i96Gda72v/EFE0vw==
2123 | dependencies:
2124 | "@types/unist" "^2.0.0"
2125 | unist-util-is "^5.0.0"
2126 | unist-util-visit-parents "^5.0.0"
2127 |
2128 | unist-util-stringify-position@^3.0.0:
2129 | version "3.0.3"
2130 | resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d"
2131 | integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==
2132 | dependencies:
2133 | "@types/unist" "^2.0.0"
2134 |
2135 | unist-util-visit-parents@^4.0.0:
2136 | version "4.1.1"
2137 | resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz#e83559a4ad7e6048a46b1bdb22614f2f3f4724f2"
2138 | integrity sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==
2139 | dependencies:
2140 | "@types/unist" "^2.0.0"
2141 | unist-util-is "^5.0.0"
2142 |
2143 | unist-util-visit-parents@^5.0.0, unist-util-visit-parents@^5.1.1:
2144 | version "5.1.3"
2145 | resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz#b4520811b0ca34285633785045df7a8d6776cfeb"
2146 | integrity sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==
2147 | dependencies:
2148 | "@types/unist" "^2.0.0"
2149 | unist-util-is "^5.0.0"
2150 |
2151 | unist-util-visit@^3.1.0:
2152 | version "3.1.0"
2153 | resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-3.1.0.tgz#9420d285e1aee938c7d9acbafc8e160186dbaf7b"
2154 | integrity sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==
2155 | dependencies:
2156 | "@types/unist" "^2.0.0"
2157 | unist-util-is "^5.0.0"
2158 | unist-util-visit-parents "^4.0.0"
2159 |
2160 | unist-util-visit@^4.0.0, unist-util-visit@^4.1.1:
2161 | version "4.1.2"
2162 | resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.2.tgz#125a42d1eb876283715a3cb5cceaa531828c72e2"
2163 | integrity sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==
2164 | dependencies:
2165 | "@types/unist" "^2.0.0"
2166 | unist-util-is "^5.0.0"
2167 | unist-util-visit-parents "^5.1.1"
2168 |
2169 | uvu@^0.5.0:
2170 | version "0.5.6"
2171 | resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df"
2172 | integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==
2173 | dependencies:
2174 | dequal "^2.0.0"
2175 | diff "^5.0.0"
2176 | kleur "^4.0.3"
2177 | sade "^1.7.3"
2178 |
2179 | vfile-location@^4.0.0:
2180 | version "4.1.0"
2181 | resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-4.1.0.tgz#69df82fb9ef0a38d0d02b90dd84620e120050dd0"
2182 | integrity sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==
2183 | dependencies:
2184 | "@types/unist" "^2.0.0"
2185 | vfile "^5.0.0"
2186 |
2187 | vfile-matter@^3.0.1:
2188 | version "3.0.1"
2189 | resolved "https://registry.yarnpkg.com/vfile-matter/-/vfile-matter-3.0.1.tgz#85e26088e43aa85c04d42ffa3693635fa2bc5624"
2190 | integrity sha512-CAAIDwnh6ZdtrqAuxdElUqQRQDQgbbIrYtDYI8gCjXS1qQ+1XdLoK8FIZWxJwn0/I+BkSSZpar3SOgjemQz4fg==
2191 | dependencies:
2192 | "@types/js-yaml" "^4.0.0"
2193 | is-buffer "^2.0.0"
2194 | js-yaml "^4.0.0"
2195 |
2196 | vfile-message@^3.0.0:
2197 | version "3.1.4"
2198 | resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea"
2199 | integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==
2200 | dependencies:
2201 | "@types/unist" "^2.0.0"
2202 | unist-util-stringify-position "^3.0.0"
2203 |
2204 | vfile@^5.0.0, vfile@^5.3.0:
2205 | version "5.3.7"
2206 | resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7"
2207 | integrity sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==
2208 | dependencies:
2209 | "@types/unist" "^2.0.0"
2210 | is-buffer "^2.0.0"
2211 | unist-util-stringify-position "^3.0.0"
2212 | vfile-message "^3.0.0"
2213 |
2214 | vscode-oniguruma@^1.7.0:
2215 | version "1.7.0"
2216 | resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b"
2217 | integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==
2218 |
2219 | vscode-textmate@^8.0.0:
2220 | version "8.0.0"
2221 | resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d"
2222 | integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==
2223 |
2224 | web-namespaces@^2.0.0:
2225 | version "2.0.1"
2226 | resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692"
2227 | integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==
2228 |
2229 | which@^1.2.9:
2230 | version "1.3.1"
2231 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
2232 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
2233 | dependencies:
2234 | isexe "^2.0.0"
2235 |
2236 | yallist@^2.1.2:
2237 | version "2.1.2"
2238 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
2239 | integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==
2240 |
2241 | yocto-queue@^0.1.0:
2242 | version "0.1.0"
2243 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
2244 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
2245 |
2246 | zod@^3.20.2:
2247 | version "3.21.4"
2248 | resolved "https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db"
2249 | integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==
2250 |
2251 | zwitch@^2.0.0:
2252 | version "2.0.4"
2253 | resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7"
2254 | integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==
2255 |
--------------------------------------------------------------------------------